@ni/nimble-components 19.4.5 → 19.5.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.
- package/README.md +27 -3
- package/dist/all-components-bundle.js +181 -8
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +1701 -1687
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/all-components.d.ts +2 -0
- package/dist/esm/all-components.js +2 -0
- package/dist/esm/all-components.js.map +1 -1
- package/dist/esm/banner/template.js +2 -1
- package/dist/esm/banner/template.js.map +1 -1
- package/dist/esm/label-provider/base/index.d.ts +19 -0
- package/dist/esm/label-provider/base/index.js +55 -0
- package/dist/esm/label-provider/base/index.js.map +1 -0
- package/dist/esm/label-provider/core/index.d.ts +26 -0
- package/dist/esm/label-provider/core/index.js +36 -0
- package/dist/esm/label-provider/core/index.js.map +1 -0
- package/dist/esm/label-provider/core/label-token-defaults.d.ts +6 -0
- package/dist/esm/label-provider/core/label-token-defaults.js +6 -0
- package/dist/esm/label-provider/core/label-token-defaults.js.map +1 -0
- package/dist/esm/label-provider/core/label-tokens.d.ts +4 -0
- package/dist/esm/label-provider/core/label-tokens.js +15 -0
- package/dist/esm/label-provider/core/label-tokens.js.map +1 -0
- package/dist/esm/label-provider/table/index.d.ts +32 -0
- package/dist/esm/label-provider/table/index.js +44 -0
- package/dist/esm/label-provider/table/index.js.map +1 -0
- package/dist/esm/label-provider/table/label-token-defaults.d.ts +6 -0
- package/dist/esm/label-provider/table/label-token-defaults.js +8 -0
- package/dist/esm/label-provider/table/label-token-defaults.js.map +1 -0
- package/dist/esm/label-provider/table/label-tokens.d.ts +6 -0
- package/dist/esm/label-provider/table/label-tokens.js +23 -0
- package/dist/esm/label-provider/table/label-tokens.js.map +1 -0
- package/dist/esm/label-provider/table/name-utils.d.ts +6 -0
- package/dist/esm/label-provider/table/name-utils.js +10 -0
- package/dist/esm/label-provider/table/name-utils.js.map +1 -0
- package/dist/esm/number-field/index.js +3 -2
- package/dist/esm/number-field/index.js.map +1 -1
- package/dist/esm/src/all-components.d.ts +2 -0
- package/dist/esm/src/label-provider/base/index.d.ts +19 -0
- package/dist/esm/src/label-provider/core/index.d.ts +26 -0
- package/dist/esm/src/label-provider/core/label-token-defaults.d.ts +6 -0
- package/dist/esm/src/label-provider/core/label-tokens.d.ts +4 -0
- package/dist/esm/src/label-provider/table/index.d.ts +32 -0
- package/dist/esm/src/label-provider/table/label-token-defaults.d.ts +6 -0
- package/dist/esm/src/label-provider/table/label-tokens.d.ts +6 -0
- package/dist/esm/src/label-provider/table/name-utils.d.ts +6 -0
- package/dist/esm/table/components/cell/template.js +2 -1
- package/dist/esm/table/components/cell/template.js.map +1 -1
- package/dist/esm/table/components/group-row/template.js +2 -0
- package/dist/esm/table/components/group-row/template.js.map +1 -1
- package/dist/esm/table/components/header/template.js +3 -2
- package/dist/esm/table/components/header/template.js.map +1 -1
- package/dist/esm/table/template.js +3 -0
- package/dist/esm/table/template.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,8 +23,8 @@ If you have an existing application that incorporates a module bundler like [Web
|
|
|
23
23
|
|
|
24
24
|
1. Install the package from [the public NPM registry](https://www.npmjs.com/package/@ni/nimble-components) by running `npm install @ni/nimble-components`.
|
|
25
25
|
2. Import the component you want to use from the file you want to use it in. For example: `import '@ni/nimble-components/dist/esm/icons/succeeded';`
|
|
26
|
-
3. Add the HTML for the component to your page. You can see sample code for each component in the [Nimble Storybook](https://ni.
|
|
27
|
-
4. Nimble components are [standard web components (custom elements)](https://developer.mozilla.org/en-US/docs/Web/Web_Components) so you can configure them via normal DOM APIs like attributes, properties, events, and methods. The [Storybook documentation](https://ni.
|
|
26
|
+
3. Add the HTML for the component to your page. You can see sample code for each component in the [Nimble Storybook](https://nimble.ni.dev/storybook/) by going to the **Docs** page for the component and clicking **Show code**. For example: `<nimble-icon-succeeded></nimble-icon-succeeded>`.
|
|
27
|
+
4. Nimble components are [standard web components (custom elements)](https://developer.mozilla.org/en-US/docs/Web/Web_Components) so you can configure them via normal DOM APIs like attributes, properties, events, and methods. The [Storybook documentation](https://nimble.ni.dev/storybook/) for each component describes its custom API.
|
|
28
28
|
|
|
29
29
|
### Prototyping in a static webpage
|
|
30
30
|
|
|
@@ -96,9 +96,33 @@ The theming system is composed of:
|
|
|
96
96
|
|
|
97
97
|
The goal of the Nimble design system is to provide a consistent style for applications. If you find that Nimble does not expose colors, fonts, sizes, etc. that you need in an application get in touch with the Nimble squad.
|
|
98
98
|
|
|
99
|
+
## Localization
|
|
100
|
+
|
|
101
|
+
Most user-visible strings displayed by Nimble components are provided by the client application and are expected to be localized by the application if necessary. However, some strings are built into Nimble components and are provided only in English. An application can provide localized versions of these strings by using design tokens set on label provider elements.
|
|
102
|
+
|
|
103
|
+
There are currently 2 label providers:
|
|
104
|
+
|
|
105
|
+
- `nimble-label-provider-core`: Used for labels for all components besides the table
|
|
106
|
+
- `nimble-label-provider-table`: Used for labels for the table (and table sub-components / column types)
|
|
107
|
+
|
|
108
|
+
If a client is localized, it should:
|
|
109
|
+
|
|
110
|
+
- Add the `label-provider` element(s) as children of their root theme provider:
|
|
111
|
+
```html
|
|
112
|
+
<body>
|
|
113
|
+
<nimble-theme-provider theme="light">
|
|
114
|
+
<nimble-label-provider-core></nimble-label-provider-core>
|
|
115
|
+
<!-- if using nimble-table, include nimble-label-provider-table: -->
|
|
116
|
+
<nimble-label-provider-table></nimble-label-provider-table>
|
|
117
|
+
<!-- everything else -->
|
|
118
|
+
</nimble-theme-provider>
|
|
119
|
+
</body>
|
|
120
|
+
```
|
|
121
|
+
- For each label token on the label provider API, localize the English string, and set the corresponding HTML attribute or JS property on the label provider to the localized values. A list of all label tokens for each label provider (and their corresponding attribute/property names and English strings) can be found in the [Tokens/Label Providers section of Storybook](http://nimble.ni.dev/storybook/?path=/docs/tokens-label-providers--docs).
|
|
122
|
+
|
|
99
123
|
## Accessibility
|
|
100
124
|
|
|
101
|
-
For accessibility information related to nimble components, see [
|
|
125
|
+
For accessibility information related to nimble components, see [accessibility.md](/packages/nimble-components/docs/accessibility.md).
|
|
102
126
|
|
|
103
127
|
## Contributing
|
|
104
128
|
|
|
@@ -16232,7 +16232,7 @@
|
|
|
16232
16232
|
|
|
16233
16233
|
/**
|
|
16234
16234
|
* Do not edit directly
|
|
16235
|
-
* Generated on Thu, 13 Jul 2023
|
|
16235
|
+
* Generated on Thu, 13 Jul 2023 23:25:35 GMT
|
|
16236
16236
|
*/
|
|
16237
16237
|
const Information100DarkUi = "#a46eff";
|
|
16238
16238
|
const Information100LightUi = "#804ad9";
|
|
@@ -16668,7 +16668,7 @@
|
|
|
16668
16668
|
DesignSystem.getOrCreate()
|
|
16669
16669
|
.withPrefix('nimble')
|
|
16670
16670
|
.register(nimbleDesignSystemProvider());
|
|
16671
|
-
DesignSystem.tagFor(ThemeProvider);
|
|
16671
|
+
const themeProviderTag = DesignSystem.tagFor(ThemeProvider);
|
|
16672
16672
|
|
|
16673
16673
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
16674
16674
|
const Headline1FallbackFontFamily = 'Noto Serif Fallback';
|
|
@@ -19438,6 +19438,25 @@
|
|
|
19438
19438
|
information: 'information'
|
|
19439
19439
|
};
|
|
19440
19440
|
|
|
19441
|
+
const coreLabelDefaults = {
|
|
19442
|
+
popupDismissLabel: 'Close',
|
|
19443
|
+
numericIncrementLabel: 'Increment',
|
|
19444
|
+
numericDecrementLabel: 'Decrement'
|
|
19445
|
+
};
|
|
19446
|
+
|
|
19447
|
+
const popupDismissLabel = DesignToken.create({
|
|
19448
|
+
name: 'popup-dismiss-label',
|
|
19449
|
+
cssCustomPropertyName: null
|
|
19450
|
+
}).withDefault(coreLabelDefaults.popupDismissLabel);
|
|
19451
|
+
const numericDecrementLabel = DesignToken.create({
|
|
19452
|
+
name: 'numeric-decrement-label',
|
|
19453
|
+
cssCustomPropertyName: null
|
|
19454
|
+
}).withDefault(coreLabelDefaults.numericDecrementLabel);
|
|
19455
|
+
const numericIncrementLabel = DesignToken.create({
|
|
19456
|
+
name: 'numeric-increment-label',
|
|
19457
|
+
cssCustomPropertyName: null
|
|
19458
|
+
}).withDefault(coreLabelDefaults.numericIncrementLabel);
|
|
19459
|
+
|
|
19441
19460
|
// prettier-ignore
|
|
19442
19461
|
const template$n = html `
|
|
19443
19462
|
<div class="container"
|
|
@@ -19484,7 +19503,7 @@
|
|
|
19484
19503
|
${when(x => !x.preventDismiss, html `
|
|
19485
19504
|
<${buttonTag} appearance="ghost" content-hidden @click="${x => x.dismissBanner()}">
|
|
19486
19505
|
<${iconXmarkTag} slot="start"></${iconXmarkTag}>
|
|
19487
|
-
${x => x.dismissButtonLabel ??
|
|
19506
|
+
${x => x.dismissButtonLabel ?? popupDismissLabel.getValueFor(x)}
|
|
19488
19507
|
</${buttonTag}>
|
|
19489
19508
|
`)}
|
|
19490
19509
|
</div>
|
|
@@ -23175,6 +23194,157 @@
|
|
|
23175
23194
|
registerIcon('icon-xmark-check', IconXmarkCheck);
|
|
23176
23195
|
DesignSystem.tagFor(IconXmarkCheck);
|
|
23177
23196
|
|
|
23197
|
+
/**
|
|
23198
|
+
* Base class for label providers
|
|
23199
|
+
*/
|
|
23200
|
+
class LabelProviderBase extends FoundationElement {
|
|
23201
|
+
constructor() {
|
|
23202
|
+
super(...arguments);
|
|
23203
|
+
this.propertyNotifier = Observable.getNotifier(this);
|
|
23204
|
+
}
|
|
23205
|
+
connectedCallback() {
|
|
23206
|
+
super.connectedCallback();
|
|
23207
|
+
this.initializeThemeProvider();
|
|
23208
|
+
this.propertyNotifier.subscribe(this);
|
|
23209
|
+
}
|
|
23210
|
+
disconnectedCallback() {
|
|
23211
|
+
this.propertyNotifier.unsubscribe(this);
|
|
23212
|
+
if (this.themeProvider) {
|
|
23213
|
+
for (const token of Object.values(this.supportedLabels)) {
|
|
23214
|
+
token.deleteValueFor(this.themeProvider);
|
|
23215
|
+
}
|
|
23216
|
+
this.themeProvider = undefined;
|
|
23217
|
+
}
|
|
23218
|
+
}
|
|
23219
|
+
handleChange(_element, property) {
|
|
23220
|
+
if (this.supportedLabels[property]) {
|
|
23221
|
+
const token = this.supportedLabels[property];
|
|
23222
|
+
const value = this[property];
|
|
23223
|
+
if (this.themeProvider) {
|
|
23224
|
+
if (value === null || value === undefined) {
|
|
23225
|
+
token.deleteValueFor(this.themeProvider);
|
|
23226
|
+
}
|
|
23227
|
+
else {
|
|
23228
|
+
token.setValueFor(this.themeProvider, value);
|
|
23229
|
+
}
|
|
23230
|
+
}
|
|
23231
|
+
}
|
|
23232
|
+
}
|
|
23233
|
+
initializeThemeProvider() {
|
|
23234
|
+
this.themeProvider = this.closest(themeProviderTag) ?? undefined;
|
|
23235
|
+
if (this.themeProvider) {
|
|
23236
|
+
for (const [property, token] of Object.entries(this.supportedLabels)) {
|
|
23237
|
+
const value = this[property];
|
|
23238
|
+
if (value === null || value === undefined) {
|
|
23239
|
+
token.deleteValueFor(this.themeProvider);
|
|
23240
|
+
}
|
|
23241
|
+
else {
|
|
23242
|
+
token.setValueFor(this.themeProvider, value);
|
|
23243
|
+
}
|
|
23244
|
+
}
|
|
23245
|
+
}
|
|
23246
|
+
}
|
|
23247
|
+
}
|
|
23248
|
+
|
|
23249
|
+
const supportedLabels$1 = {
|
|
23250
|
+
popupDismiss: popupDismissLabel,
|
|
23251
|
+
numericDecrement: numericDecrementLabel,
|
|
23252
|
+
numericIncrement: numericIncrementLabel
|
|
23253
|
+
};
|
|
23254
|
+
/**
|
|
23255
|
+
* Core label provider for Nimble
|
|
23256
|
+
*/
|
|
23257
|
+
class LabelProviderCore extends LabelProviderBase {
|
|
23258
|
+
constructor() {
|
|
23259
|
+
super(...arguments);
|
|
23260
|
+
this.supportedLabels = supportedLabels$1;
|
|
23261
|
+
}
|
|
23262
|
+
}
|
|
23263
|
+
__decorate$1([
|
|
23264
|
+
attr({ attribute: 'popup-dismiss' })
|
|
23265
|
+
], LabelProviderCore.prototype, "popupDismiss", void 0);
|
|
23266
|
+
__decorate$1([
|
|
23267
|
+
attr({ attribute: 'numeric-decrement' })
|
|
23268
|
+
], LabelProviderCore.prototype, "numericDecrement", void 0);
|
|
23269
|
+
__decorate$1([
|
|
23270
|
+
attr({ attribute: 'numeric-increment' })
|
|
23271
|
+
], LabelProviderCore.prototype, "numericIncrement", void 0);
|
|
23272
|
+
const nimbleLabelProviderCore = LabelProviderCore.compose({
|
|
23273
|
+
baseName: 'label-provider-core'
|
|
23274
|
+
});
|
|
23275
|
+
DesignSystem.getOrCreate()
|
|
23276
|
+
.withPrefix('nimble')
|
|
23277
|
+
.register(nimbleLabelProviderCore());
|
|
23278
|
+
DesignSystem.tagFor(LabelProviderCore);
|
|
23279
|
+
|
|
23280
|
+
const tableLabelDefaults = {
|
|
23281
|
+
tableGroupCollapseLabel: 'Collapse group',
|
|
23282
|
+
tableGroupExpandLabel: 'Expand group',
|
|
23283
|
+
tableGroupsCollapseAllLabel: 'Collapse all groups',
|
|
23284
|
+
tableCellActionMenuLabel: 'Options',
|
|
23285
|
+
tableColumnHeaderGroupedIndicatorLabel: 'Grouped'
|
|
23286
|
+
};
|
|
23287
|
+
|
|
23288
|
+
const tableGroupCollapseLabel = DesignToken.create({
|
|
23289
|
+
name: 'table-group-collapse-label',
|
|
23290
|
+
cssCustomPropertyName: null
|
|
23291
|
+
}).withDefault(tableLabelDefaults.tableGroupCollapseLabel);
|
|
23292
|
+
const tableGroupExpandLabel = DesignToken.create({
|
|
23293
|
+
name: 'table-group-expand-label',
|
|
23294
|
+
cssCustomPropertyName: null
|
|
23295
|
+
}).withDefault(tableLabelDefaults.tableGroupExpandLabel);
|
|
23296
|
+
const tableGroupsCollapseAllLabel = DesignToken.create({
|
|
23297
|
+
name: 'table-groups-collapse-all-label',
|
|
23298
|
+
cssCustomPropertyName: null
|
|
23299
|
+
}).withDefault(tableLabelDefaults.tableGroupsCollapseAllLabel);
|
|
23300
|
+
const tableCellActionMenuLabel = DesignToken.create({
|
|
23301
|
+
name: 'table-cell-action-menu-label',
|
|
23302
|
+
cssCustomPropertyName: null
|
|
23303
|
+
}).withDefault(tableLabelDefaults.tableCellActionMenuLabel);
|
|
23304
|
+
const tableColumnHeaderGroupedIndicatorLabel = DesignToken.create({
|
|
23305
|
+
name: 'table-column-header-grouped-indicator-label',
|
|
23306
|
+
cssCustomPropertyName: null
|
|
23307
|
+
}).withDefault(tableLabelDefaults.tableColumnHeaderGroupedIndicatorLabel);
|
|
23308
|
+
|
|
23309
|
+
const supportedLabels = {
|
|
23310
|
+
groupCollapse: tableGroupCollapseLabel,
|
|
23311
|
+
groupExpand: tableGroupExpandLabel,
|
|
23312
|
+
groupsCollapseAll: tableGroupsCollapseAllLabel,
|
|
23313
|
+
cellActionMenu: tableCellActionMenuLabel,
|
|
23314
|
+
columnHeaderGroupedIndicator: tableColumnHeaderGroupedIndicatorLabel
|
|
23315
|
+
};
|
|
23316
|
+
/**
|
|
23317
|
+
* Label provider for the Nimble table (and its sub-components and columns)
|
|
23318
|
+
*/
|
|
23319
|
+
class LabelProviderTable extends LabelProviderBase {
|
|
23320
|
+
constructor() {
|
|
23321
|
+
super(...arguments);
|
|
23322
|
+
this.supportedLabels = supportedLabels;
|
|
23323
|
+
}
|
|
23324
|
+
}
|
|
23325
|
+
__decorate$1([
|
|
23326
|
+
attr({ attribute: 'group-collapse' })
|
|
23327
|
+
], LabelProviderTable.prototype, "groupCollapse", void 0);
|
|
23328
|
+
__decorate$1([
|
|
23329
|
+
attr({ attribute: 'group-expand' })
|
|
23330
|
+
], LabelProviderTable.prototype, "groupExpand", void 0);
|
|
23331
|
+
__decorate$1([
|
|
23332
|
+
attr({ attribute: 'groups-collapse-all' })
|
|
23333
|
+
], LabelProviderTable.prototype, "groupsCollapseAll", void 0);
|
|
23334
|
+
__decorate$1([
|
|
23335
|
+
attr({ attribute: 'cell-action-menu' })
|
|
23336
|
+
], LabelProviderTable.prototype, "cellActionMenu", void 0);
|
|
23337
|
+
__decorate$1([
|
|
23338
|
+
attr({ attribute: 'column-header-grouped-indicator' })
|
|
23339
|
+
], LabelProviderTable.prototype, "columnHeaderGroupedIndicator", void 0);
|
|
23340
|
+
const nimbleLabelProviderTable = LabelProviderTable.compose({
|
|
23341
|
+
baseName: 'label-provider-table'
|
|
23342
|
+
});
|
|
23343
|
+
DesignSystem.getOrCreate()
|
|
23344
|
+
.withPrefix('nimble')
|
|
23345
|
+
.register(nimbleLabelProviderTable());
|
|
23346
|
+
DesignSystem.tagFor(LabelProviderTable);
|
|
23347
|
+
|
|
23178
23348
|
const styles$t = css `
|
|
23179
23349
|
${display('flex')}
|
|
23180
23350
|
|
|
@@ -23955,7 +24125,7 @@
|
|
|
23955
24125
|
content-hidden
|
|
23956
24126
|
tabindex="-1"
|
|
23957
24127
|
>
|
|
23958
|
-
|
|
24128
|
+
${x => numericDecrementLabel.getValueFor(x)}
|
|
23959
24129
|
<${iconMinusWideTag}
|
|
23960
24130
|
slot="start"
|
|
23961
24131
|
>
|
|
@@ -23969,7 +24139,7 @@
|
|
|
23969
24139
|
content-hidden
|
|
23970
24140
|
tabindex="-1"
|
|
23971
24141
|
>
|
|
23972
|
-
|
|
24142
|
+
${x => numericIncrementLabel.getValueFor(x)}
|
|
23973
24143
|
<${iconAddTag}
|
|
23974
24144
|
slot="start">
|
|
23975
24145
|
</${iconAddTag}>
|
|
@@ -28575,7 +28745,7 @@
|
|
|
28575
28745
|
@mousedown="${(_x, c) => !(c.event.detail > 1)}"
|
|
28576
28746
|
>
|
|
28577
28747
|
<slot></slot>
|
|
28578
|
-
|
|
28748
|
+
${'' /* Omit title attribute for sort indicators because aria-sort is set on the 1st sorted column */}
|
|
28579
28749
|
${when(x => x.sortDirection === TableColumnSortDirection.ascending, html `
|
|
28580
28750
|
<${iconArrowUpTag} class="sort-indicator" aria-hidden="true"></${iconArrowUpTag}>
|
|
28581
28751
|
`)}
|
|
@@ -28583,7 +28753,7 @@
|
|
|
28583
28753
|
<${iconArrowDownTag} class="sort-indicator" aria-hidden="true"></${iconArrowDownTag}>
|
|
28584
28754
|
`)}
|
|
28585
28755
|
${when(x => x.isGrouped, html `
|
|
28586
|
-
<${iconTwoSquaresInBracketsTag} class="grouped-indicator"></${iconTwoSquaresInBracketsTag}>
|
|
28756
|
+
<${iconTwoSquaresInBracketsTag} class="grouped-indicator" title="${x => tableColumnHeaderGroupedIndicatorLabel.getValueFor(x)}"></${iconTwoSquaresInBracketsTag}>
|
|
28587
28757
|
`)}
|
|
28588
28758
|
</template>
|
|
28589
28759
|
`;
|
|
@@ -28770,7 +28940,7 @@
|
|
|
28770
28940
|
class="action-menu"
|
|
28771
28941
|
>
|
|
28772
28942
|
<${iconThreeDotsLineTag} slot="start"></${iconThreeDotsLineTag}>
|
|
28773
|
-
${x => x.actionMenuLabel}
|
|
28943
|
+
${x => x.actionMenuLabel ?? tableCellActionMenuLabel.getValueFor(x)}
|
|
28774
28944
|
<slot name="cellActionMenu" slot="menu"></slot>
|
|
28775
28945
|
</${menuButtonTag}>
|
|
28776
28946
|
`)}
|
|
@@ -29156,6 +29326,7 @@
|
|
|
29156
29326
|
tabindex="-1"
|
|
29157
29327
|
>
|
|
29158
29328
|
<${iconArrowExpanderRightTag} ${ref('expandIcon')} slot="start" class="expander-icon ${x => x.animationClass}"></${iconArrowExpanderRightTag}>
|
|
29329
|
+
${x => (x.expanded ? tableGroupCollapseLabel.getValueFor(x) : tableGroupExpandLabel.getValueFor(x))}
|
|
29159
29330
|
</${buttonTag}>
|
|
29160
29331
|
</span>
|
|
29161
29332
|
|
|
@@ -29301,9 +29472,11 @@
|
|
|
29301
29472
|
class="collapse-all-button ${x => `${x.showCollapseAll ? 'visible' : ''}`}"
|
|
29302
29473
|
content-hidden
|
|
29303
29474
|
appearance="${ButtonAppearance.ghost}"
|
|
29475
|
+
title="${x => tableGroupsCollapseAllLabel.getValueFor(x)}"
|
|
29304
29476
|
@click="${x => x.handleCollapseAllGroupRows()}"
|
|
29305
29477
|
>
|
|
29306
29478
|
<${iconTriangleTwoLinesHorizontalTag} slot="start"></${iconTriangleTwoLinesHorizontalTag}>
|
|
29479
|
+
${x => tableGroupsCollapseAllLabel.getValueFor(x)}
|
|
29307
29480
|
</${buttonTag}>
|
|
29308
29481
|
</span>
|
|
29309
29482
|
<span class="column-header-container">
|