@ni/nimble-components 18.11.0 → 18.12.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 (55) hide show
  1. package/dist/all-components-bundle.js +255 -226
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +1136 -1127
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/icon-base/icon-metadata.js +3 -0
  6. package/dist/esm/icon-base/icon-metadata.js.map +1 -1
  7. package/dist/esm/icons/all-icons.d.ts +1 -0
  8. package/dist/esm/icons/all-icons.js +1 -0
  9. package/dist/esm/icons/all-icons.js.map +1 -1
  10. package/dist/esm/icons/file-export.d.ts +13 -0
  11. package/dist/esm/icons/file-export.js +16 -0
  12. package/dist/esm/icons/file-export.js.map +1 -0
  13. package/dist/esm/table/components/cell/template.d.ts +1 -3
  14. package/dist/esm/table/components/cell/template.js +0 -5
  15. package/dist/esm/table/components/cell/template.js.map +1 -1
  16. package/dist/esm/table/components/group-row/styles.js +1 -1
  17. package/dist/esm/table/components/group-row/template.js +1 -1
  18. package/dist/esm/table/components/group-row/template.js.map +1 -1
  19. package/dist/esm/table/components/row/index.js +3 -3
  20. package/dist/esm/table/components/row/index.js.map +1 -1
  21. package/dist/esm/table/components/row/template.js +1 -1
  22. package/dist/esm/table/components/row/template.js.map +1 -1
  23. package/dist/esm/table/index.js +17 -11
  24. package/dist/esm/table/index.js.map +1 -1
  25. package/dist/esm/table/models/table-layout-helper.js +9 -13
  26. package/dist/esm/table/models/table-layout-helper.js.map +1 -1
  27. package/dist/esm/table/models/update-tracker.js +12 -3
  28. package/dist/esm/table/models/update-tracker.js.map +1 -1
  29. package/dist/esm/table-column/base/cell-view/template.d.ts +3 -0
  30. package/dist/esm/table-column/base/cell-view/template.js +26 -0
  31. package/dist/esm/table-column/base/cell-view/template.js.map +1 -0
  32. package/dist/esm/table-column/base/group-header-view/template.js +20 -4
  33. package/dist/esm/table-column/base/group-header-view/template.js.map +1 -1
  34. package/dist/esm/table-column/base/index.d.ts +5 -106
  35. package/dist/esm/table-column/base/index.js +7 -110
  36. package/dist/esm/table-column/base/index.js.map +1 -1
  37. package/dist/esm/table-column/base/models/column-internals.d.ts +97 -0
  38. package/dist/esm/table-column/base/models/column-internals.js +88 -0
  39. package/dist/esm/table-column/base/models/column-internals.js.map +1 -0
  40. package/dist/esm/table-column/base/template.d.ts +2 -1
  41. package/dist/esm/table-column/base/template.js +1 -1
  42. package/dist/esm/table-column/base/template.js.map +1 -1
  43. package/dist/esm/table-column/mixins/fractional-width-column.d.ts +2 -3
  44. package/dist/esm/table-column/mixins/fractional-width-column.js +4 -9
  45. package/dist/esm/table-column/mixins/fractional-width-column.js.map +1 -1
  46. package/dist/esm/table-column/mixins/groupable-column.d.ts +2 -3
  47. package/dist/esm/table-column/mixins/groupable-column.js +3 -3
  48. package/dist/esm/table-column/mixins/groupable-column.js.map +1 -1
  49. package/dist/esm/table-column/text/group-header-view/index.d.ts +0 -1
  50. package/dist/esm/table-column/text/group-header-view/index.js +0 -3
  51. package/dist/esm/table-column/text/group-header-view/index.js.map +1 -1
  52. package/dist/esm/table-column/text/index.d.ts +15 -18
  53. package/dist/esm/table-column/text/index.js +15 -20
  54. package/dist/esm/table-column/text/index.js.map +1 -1
  55. package/package.json +3 -2
@@ -19086,6 +19086,10 @@
19086
19086
  name: 'file_drawer_16_x_16',
19087
19087
  data: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path class="cls-1" d="M2 4v10h12V4Zm8 4H6V6h4Zm4-5H2V2h12Z"/></svg>`
19088
19088
  };
19089
+ const fileExport = {
19090
+ name: 'file_export',
19091
+ data: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M6.8 13.6H2V3h4.2v4.2h4.2V10c-2 0-3.6 1.6-3.6 3.6Zm3.7-7.4H7.3V3l3.2 3.2Z"/><path d="M11.6 9.2v1.6c-1.9-.2-3.6 1.1-3.9 3 .6-.7 2.2-2.2 3.9-1.8v1.5l2.4-2.1-2.4-2.2Z"/></svg>`
19092
+ };
19089
19093
  const fileSearch16X16 = {
19090
19094
  name: 'file_search_16_x_16',
19091
19095
  data: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path class="cls-1" d="M14 6v6h-3.333a3.662 3.662 0 0 0 .249-1.302A3.701 3.701 0 0 0 7.22 7 3.654 3.654 0 0 0 6 7.223V2h4v4Zm-3-4v3h3Zm-1.126 8.698a2.697 2.697 0 0 1-4.73 1.772L2.521 14l-.48-.823 2.613-1.523a2.698 2.698 0 1 1 5.22-.956Zm-.952 0a1.745 1.745 0 1 0-1.745 1.745 1.747 1.747 0 0 0 1.745-1.745Z"/></svg>`
@@ -22146,6 +22150,18 @@
22146
22150
  registerIcon('icon-file-drawer', IconFileDrawer);
22147
22151
  DesignSystem.tagFor(IconFileDrawer);
22148
22152
 
22153
+ // AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY
22154
+ /**
22155
+ * The icon component for the 'fileExport' icon
22156
+ */
22157
+ class IconFileExport extends Icon {
22158
+ constructor() {
22159
+ super(fileExport);
22160
+ }
22161
+ }
22162
+ registerIcon('icon-file-export', IconFileExport);
22163
+ DesignSystem.tagFor(IconFileExport);
22164
+
22149
22165
  // AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY
22150
22166
  /**
22151
22167
  * The icon component for the 'fileSearch' icon
@@ -27795,40 +27811,6 @@
27795
27811
  };
27796
27812
  }
27797
27813
 
27798
- const createGroupHeaderViewTemplate = (groupHeaderViewTag) => html `
27799
- <${groupHeaderViewTag}
27800
- :groupHeaderValue="${x => x.groupRowValue}"
27801
- :columnConfig="${x => x.groupColumn?.columnConfig}"
27802
- class="group-header-value"
27803
- >
27804
- </${groupHeaderViewTag}>
27805
- `;
27806
-
27807
- // prettier-ignore
27808
- const template$b = html `
27809
- <template role="cell" style="--ni-private-table-cell-nesting-level: ${x => x.nestingLevel}">
27810
- ${x => x.cellViewTemplate}
27811
- ${when(x => x.hasActionMenu, html `
27812
- <${menuButtonTag} ${ref('actionMenuButton')}
27813
- content-hidden
27814
- appearance="${ButtonAppearance.ghost}"
27815
- @beforetoggle="${(x, c) => x.onActionMenuBeforeToggle(c.event)}"
27816
- @toggle="${(x, c) => x.onActionMenuToggle(c.event)}"
27817
- class="action-menu"
27818
- >
27819
- <${iconThreeDotsLineTag} slot="start"></${iconThreeDotsLineTag}>
27820
- ${x => x.actionMenuLabel}
27821
- <slot name="cellActionMenu" slot="menu"></slot>
27822
- </${menuButtonTag}>
27823
- `)}
27824
- </template>
27825
- `;
27826
- const createCellViewTemplate = (cellViewTag) => html `<${cellViewTag} class="cell-view"
27827
- :cellRecord="${y => y.cellState?.cellRecord}"
27828
- :columnConfig="${y => y.cellState?.columnConfig}"
27829
- >
27830
- </${cellViewTag}>`;
27831
-
27832
27814
  /**
27833
27815
  * The possible directions a table column can be sorted in.
27834
27816
  */
@@ -27872,137 +27854,200 @@
27872
27854
  const defaultFractionalWidth = 1;
27873
27855
 
27874
27856
  /**
27875
- * The base class for table columns
27857
+ * The base class for group header views, which are displayed in a TableGroupRow.
27858
+ * A TableColumn that uses the GroupableColumn mixin must provide a TableGroupHeaderView
27859
+ * type (linked via TableColumn.groupHeaderViewTag).
27876
27860
  */
27877
- class TableColumn extends FoundationElement {
27878
- constructor() {
27879
- super();
27880
- this.columnHidden = false;
27881
- this.sortDirection = TableColumnSortDirection.none;
27861
+ class TableGroupHeaderView extends FoundationElement {
27862
+ }
27863
+ __decorate$1([
27864
+ observable
27865
+ ], TableGroupHeaderView.prototype, "groupHeaderValue", void 0);
27866
+ __decorate$1([
27867
+ observable
27868
+ ], TableGroupHeaderView.prototype, "columnConfig", void 0);
27869
+
27870
+ const validateGroupHeaderViewTemplate = (groupHeaderViewTag) => {
27871
+ let instance;
27872
+ try {
27873
+ instance = document.createElement(groupHeaderViewTag);
27874
+ }
27875
+ catch (ex) {
27876
+ // Swallow construction error to report a better one
27877
+ }
27878
+ if (!(instance instanceof TableGroupHeaderView)) {
27879
+ throw new Error(`Group header view tag name (${groupHeaderViewTag}) must evaluate to an element extending TableGroupHeaderView`);
27880
+ }
27881
+ };
27882
+ const createGroupHeaderViewTemplate = (groupHeaderViewTag) => {
27883
+ validateGroupHeaderViewTemplate(groupHeaderViewTag);
27884
+ return html `
27885
+ <${groupHeaderViewTag}
27886
+ :groupHeaderValue="${x => x.groupRowValue}"
27887
+ :columnConfig="${x => x.groupColumn?.columnInternals.columnConfig}"
27888
+ class="group-header-view"
27889
+ >
27890
+ </${groupHeaderViewTag}>
27891
+ `;
27892
+ };
27893
+
27894
+ /**
27895
+ * Base class for table cell views, which are used within the nimble-table-cell.
27896
+ * Each TableColumn type has a corresponding TableCellView type (linked via TableColumn.cellViewTag).
27897
+ */
27898
+ class TableCellView extends FoundationElement {
27899
+ /**
27900
+ * Called if an element inside this cell view has focus, and this row/cell is being recycled.
27901
+ * Expected implementation is to commit changes as needed, and blur the focusable element (or close
27902
+ * the menu/popup/etc).
27903
+ */
27904
+ focusedRecycleCallback() { }
27905
+ }
27906
+ __decorate$1([
27907
+ observable
27908
+ ], TableCellView.prototype, "cellRecord", void 0);
27909
+ __decorate$1([
27910
+ observable
27911
+ ], TableCellView.prototype, "columnConfig", void 0);
27912
+
27913
+ const validateCellViewTemplate = (cellViewTag) => {
27914
+ let instance;
27915
+ try {
27916
+ instance = document.createElement(cellViewTag);
27917
+ }
27918
+ catch (ex) {
27919
+ // Swallow construction error to report a better one
27920
+ }
27921
+ if (!(instance instanceof TableCellView)) {
27922
+ throw new Error(`Cell view tag name (${cellViewTag}) must evaluate to an element extending TableCellView`);
27923
+ }
27924
+ };
27925
+ const createCellViewTemplate = (cellViewTag) => {
27926
+ validateCellViewTemplate(cellViewTag);
27927
+ return html `
27928
+ <${cellViewTag}
27929
+ :cellRecord="${y => y.cellState?.cellRecord}"
27930
+ :columnConfig="${y => y.cellState?.columnConfig}"
27931
+ class="cell-view"
27932
+ >
27933
+ </${cellViewTag}>
27934
+ `;
27935
+ };
27936
+
27937
+ /**
27938
+ * Internal column state configured by plugin authors
27939
+ * @internal
27940
+ */
27941
+ class ColumnInternals {
27942
+ constructor(options) {
27882
27943
  /**
27883
- * @internal
27884
- * Used by the Table in order to size a column proportionally to the available
27885
- * width of a row.
27944
+ * A unique id used internally in the table to identify specific column instances
27886
27945
  */
27887
- this.currentFractionalWidth = defaultFractionalWidth;
27946
+ this.uniqueId = uniqueId('table-column-slot');
27888
27947
  /**
27889
- * @internal
27890
- * Used by column plugins to size a column proportionally to the available
27891
- * width of a row. Sets currentFractionalWidth when changed.
27948
+ * The operation to use when sorting the table by this column.
27892
27949
  */
27893
- this.internalFractionalWidth = defaultFractionalWidth;
27950
+ this.sortOperation = TableColumnSortOperation.basic;
27894
27951
  /**
27895
- * @internal
27896
- * The minimum size in pixels according to the design doc
27952
+ * The names of the fields from the row's record that correlate to the data that will be in TCellRecord.
27953
+ * This array is parallel with the field names specified by `cellRecordFieldNames`.
27897
27954
  */
27898
- this.internalMinPixelWidth = defaultMinPixelWidth;
27955
+ this.dataRecordFieldNames = [];
27899
27956
  /**
27900
- * @internal
27901
27957
  * Whether or not this column can be used to group rows by
27902
27958
  */
27903
- this.internalGroupingDisabled = false;
27959
+ this.groupingDisabled = false;
27904
27960
  /**
27905
- * @internal
27906
- *
27907
- * The names of the fields from the row's record that correlate to the data that will be in TCellRecord.
27908
- * This array is parallel with the field names specified by `cellRecordFieldNames`.
27961
+ * Used by column plugins to size a column proportionally to the available
27962
+ * width of a row. Sets currentFractionalWidth when changed.
27909
27963
  */
27910
- this.dataRecordFieldNames = [];
27964
+ this.fractionalWidth = defaultFractionalWidth;
27911
27965
  /**
27912
- * @internal
27913
- *
27914
- * The operation to use when sorting the table by this column.
27966
+ * The minimum size in pixels according to the design doc
27915
27967
  */
27916
- this.sortOperation = TableColumnSortOperation.basic;
27917
- this.internalUniqueId = uniqueId('table-column-slot');
27918
- }
27919
- /**
27920
- * @internal
27921
- */
27922
- connectedCallback() {
27923
- super.connectedCallback();
27924
- this.setAttribute('slot', this.internalUniqueId);
27925
- }
27926
- cellViewTagChanged() {
27927
- this.currentCellViewTemplate = this.cellViewTag
27928
- ? createCellViewTemplate(this.cellViewTag)
27929
- : undefined;
27930
- }
27931
- internalFractionalWidthChanged() {
27932
- this.currentFractionalWidth = this.internalFractionalWidth;
27968
+ this.minPixelWidth = defaultMinPixelWidth;
27969
+ /**
27970
+ * @internal Do not write to this value directly. It is used by the Table in order to store
27971
+ * the resolved value of the fractionalWidth after updates programmatic or interactive updates.
27972
+ */
27973
+ this.currentFractionalWidth = defaultFractionalWidth;
27974
+ this.cellRecordFieldNames = options.cellRecordFieldNames;
27975
+ this.cellViewTemplate = createCellViewTemplate(options.cellViewTag);
27976
+ this.groupHeaderViewTemplate = createGroupHeaderViewTemplate(options.groupHeaderViewTag);
27933
27977
  }
27934
- internalPixelWidthChanged() {
27935
- this.currentPixelWidth = this.internalPixelWidth;
27978
+ fractionalWidthChanged() {
27979
+ this.currentFractionalWidth = this.fractionalWidth;
27936
27980
  }
27937
- groupHeaderViewTagChanged() {
27938
- this.internalGroupHeaderViewTemplate = this.groupHeaderViewTag
27939
- ? createGroupHeaderViewTemplate(this.groupHeaderViewTag)
27940
- : undefined;
27981
+ pixelWidthChanged() {
27982
+ this.currentPixelWidth = this.pixelWidth;
27941
27983
  }
27942
27984
  }
27943
- __decorate$1([
27944
- attr({ attribute: 'column-id' })
27945
- ], TableColumn.prototype, "columnId", void 0);
27946
- __decorate$1([
27947
- attr({ attribute: 'action-menu-slot' })
27948
- ], TableColumn.prototype, "actionMenuSlot", void 0);
27949
- __decorate$1([
27950
- attr({ attribute: 'action-menu-label' })
27951
- ], TableColumn.prototype, "actionMenuLabel", void 0);
27952
- __decorate$1([
27953
- attr({ attribute: 'column-hidden', mode: 'boolean' })
27954
- ], TableColumn.prototype, "columnHidden", void 0);
27955
- __decorate$1([
27956
- attr({ attribute: 'sort-index', converter: nullableNumberConverter })
27957
- ], TableColumn.prototype, "sortIndex", void 0);
27958
- __decorate$1([
27959
- attr({ attribute: 'sort-direction' })
27960
- ], TableColumn.prototype, "sortDirection", void 0);
27961
27985
  __decorate$1([
27962
27986
  observable
27963
- ], TableColumn.prototype, "currentPixelWidth", void 0);
27987
+ ], ColumnInternals.prototype, "columnConfig", void 0);
27964
27988
  __decorate$1([
27965
27989
  observable
27966
- ], TableColumn.prototype, "currentFractionalWidth", void 0);
27990
+ ], ColumnInternals.prototype, "operandDataRecordFieldName", void 0);
27967
27991
  __decorate$1([
27968
27992
  observable
27969
- ], TableColumn.prototype, "internalPixelWidth", void 0);
27993
+ ], ColumnInternals.prototype, "sortOperation", void 0);
27970
27994
  __decorate$1([
27971
27995
  observable
27972
- ], TableColumn.prototype, "internalFractionalWidth", void 0);
27996
+ ], ColumnInternals.prototype, "dataRecordFieldNames", void 0);
27973
27997
  __decorate$1([
27974
27998
  observable
27975
- ], TableColumn.prototype, "internalMinPixelWidth", void 0);
27999
+ ], ColumnInternals.prototype, "groupingDisabled", void 0);
27976
28000
  __decorate$1([
27977
28001
  observable
27978
- ], TableColumn.prototype, "internalGroupingDisabled", void 0);
28002
+ ], ColumnInternals.prototype, "groupIndex", void 0);
27979
28003
  __decorate$1([
27980
28004
  observable
27981
- ], TableColumn.prototype, "internalGroupIndex", void 0);
28005
+ ], ColumnInternals.prototype, "pixelWidth", void 0);
27982
28006
  __decorate$1([
27983
28007
  observable
27984
- ], TableColumn.prototype, "groupHeaderViewTag", void 0);
28008
+ ], ColumnInternals.prototype, "fractionalWidth", void 0);
27985
28009
  __decorate$1([
27986
28010
  observable
27987
- ], TableColumn.prototype, "internalGroupHeaderViewTemplate", void 0);
28011
+ ], ColumnInternals.prototype, "minPixelWidth", void 0);
27988
28012
  __decorate$1([
27989
28013
  observable
27990
- ], TableColumn.prototype, "cellViewTag", void 0);
28014
+ ], ColumnInternals.prototype, "currentFractionalWidth", void 0);
27991
28015
  __decorate$1([
27992
28016
  observable
27993
- ], TableColumn.prototype, "currentCellViewTemplate", void 0);
28017
+ ], ColumnInternals.prototype, "currentPixelWidth", void 0);
28018
+
28019
+ /**
28020
+ * The base class for table columns
28021
+ */
28022
+ class TableColumn extends FoundationElement {
28023
+ constructor(options) {
28024
+ super();
28025
+ this.columnHidden = false;
28026
+ this.sortDirection = TableColumnSortDirection.none;
28027
+ if (!options) {
28028
+ throw new Error('ColumnInternalsOptions must be provided to constructor');
28029
+ }
28030
+ this.columnInternals = new ColumnInternals(options);
28031
+ }
28032
+ }
27994
28033
  __decorate$1([
27995
- observable
27996
- ], TableColumn.prototype, "dataRecordFieldNames", void 0);
28034
+ attr({ attribute: 'column-id' })
28035
+ ], TableColumn.prototype, "columnId", void 0);
27997
28036
  __decorate$1([
27998
- observable
27999
- ], TableColumn.prototype, "columnConfig", void 0);
28037
+ attr({ attribute: 'action-menu-slot' })
28038
+ ], TableColumn.prototype, "actionMenuSlot", void 0);
28000
28039
  __decorate$1([
28001
- observable
28002
- ], TableColumn.prototype, "operandDataRecordFieldName", void 0);
28040
+ attr({ attribute: 'action-menu-label' })
28041
+ ], TableColumn.prototype, "actionMenuLabel", void 0);
28003
28042
  __decorate$1([
28004
- observable
28005
- ], TableColumn.prototype, "sortOperation", void 0);
28043
+ attr({ attribute: 'column-hidden', mode: 'boolean' })
28044
+ ], TableColumn.prototype, "columnHidden", void 0);
28045
+ __decorate$1([
28046
+ attr({ attribute: 'sort-index', converter: nullableNumberConverter })
28047
+ ], TableColumn.prototype, "sortIndex", void 0);
28048
+ __decorate$1([
28049
+ attr({ attribute: 'sort-direction' })
28050
+ ], TableColumn.prototype, "sortDirection", void 0);
28006
28051
 
28007
28052
  /**
28008
28053
  * Helper class for the nimble-table to validate that the table's configuration
@@ -28246,7 +28291,7 @@
28246
28291
  `;
28247
28292
 
28248
28293
  // prettier-ignore
28249
- const template$a = html `
28294
+ const template$b = html `
28250
28295
  <template role="columnheader" aria-sort="${x => x.ariaSort}">
28251
28296
  <slot></slot>
28252
28297
 
@@ -28296,7 +28341,7 @@
28296
28341
  ], TableHeader.prototype, "firstSortedColumn", void 0);
28297
28342
  const nimbleTableHeader = TableHeader.compose({
28298
28343
  baseName: 'table-header',
28299
- template: template$a,
28344
+ template: template$b,
28300
28345
  styles: styles$f
28301
28346
  });
28302
28347
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableHeader());
@@ -28363,6 +28408,26 @@
28363
28408
  }
28364
28409
  `;
28365
28410
 
28411
+ // prettier-ignore
28412
+ const template$a = html `
28413
+ <template role="cell" style="--ni-private-table-cell-nesting-level: ${x => x.nestingLevel}">
28414
+ ${x => x.cellViewTemplate}
28415
+ ${when(x => x.hasActionMenu, html `
28416
+ <${menuButtonTag} ${ref('actionMenuButton')}
28417
+ content-hidden
28418
+ appearance="${ButtonAppearance.ghost}"
28419
+ @beforetoggle="${(x, c) => x.onActionMenuBeforeToggle(c.event)}"
28420
+ @toggle="${(x, c) => x.onActionMenuToggle(c.event)}"
28421
+ class="action-menu"
28422
+ >
28423
+ <${iconThreeDotsLineTag} slot="start"></${iconThreeDotsLineTag}>
28424
+ ${x => x.actionMenuLabel}
28425
+ <slot name="cellActionMenu" slot="menu"></slot>
28426
+ </${menuButtonTag}>
28427
+ `)}
28428
+ </template>
28429
+ `;
28430
+
28366
28431
  /**
28367
28432
  * A styled cell that is used within the nimble-table-row.
28368
28433
  * @internal
@@ -28402,7 +28467,7 @@
28402
28467
  ], TableCell.prototype, "nestingLevel", void 0);
28403
28468
  const nimbleTableCell = TableCell.compose({
28404
28469
  baseName: 'table-cell',
28405
- template: template$b,
28470
+ template: template$a,
28406
28471
  styles: styles$d
28407
28472
  });
28408
28473
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableCell());
@@ -28416,7 +28481,7 @@
28416
28481
  <${tableCellTag}
28417
28482
  class="cell"
28418
28483
  :cellState="${x => x.cellState}"
28419
- :cellViewTemplate="${x => x.column.currentCellViewTemplate}"
28484
+ :cellViewTemplate="${x => x.column.columnInternals.cellViewTemplate}"
28420
28485
  ?has-action-menu="${x => !!x.column.actionMenuSlot}"
28421
28486
  action-menu-label="${x => x.column.actionMenuLabel}"
28422
28487
  @cell-action-menu-beforetoggle="${(x, c) => c.parent.onCellActionMenuBeforeToggle(c.event, x.column)}"
@@ -28451,15 +28516,15 @@
28451
28516
  }
28452
28517
  get columnStates() {
28453
28518
  return this.columns.map((column, i) => {
28454
- const fieldNames = column.dataRecordFieldNames;
28519
+ const fieldNames = column.columnInternals.dataRecordFieldNames;
28455
28520
  let cellState;
28456
28521
  if (this.hasValidFieldNames(fieldNames) && this.dataRecord) {
28457
28522
  const cellDataValues = fieldNames.map(field => this.dataRecord[field]);
28458
- const cellRecord = Object.fromEntries(column.cellRecordFieldNames.map((k, j) => [
28523
+ const cellRecord = Object.fromEntries(column.columnInternals.cellRecordFieldNames.map((k, j) => [
28459
28524
  k,
28460
28525
  cellDataValues[j]
28461
28526
  ]));
28462
- const columnConfig = column.columnConfig ?? {};
28527
+ const columnConfig = column.columnInternals.columnConfig ?? {};
28463
28528
  cellState = {
28464
28529
  cellRecord,
28465
28530
  columnConfig
@@ -28588,7 +28653,7 @@
28588
28653
  overflow: hidden;
28589
28654
  }
28590
28655
 
28591
- .group-header-value {
28656
+ .group-header-view {
28592
28657
  padding-left: calc(${standardPadding} / 2);
28593
28658
  user-select: none;
28594
28659
  overflow: hidden;
@@ -28622,7 +28687,7 @@
28622
28687
  <${iconArrowExpanderRightTag} ${ref('expandIcon')} slot="start" class="expander-icon ${x => x.animationClass}"></${iconArrowExpanderRightTag}>
28623
28688
  </${buttonTag}>
28624
28689
  <div class="group-row-header-content">
28625
- ${x => x.groupColumn?.internalGroupHeaderViewTemplate}
28690
+ ${x => x.groupColumn?.columnInternals.groupHeaderViewTemplate}
28626
28691
  <div class="group-row-child-count">(${x => x.leafItemCount})</span>
28627
28692
  </div>
28628
28693
  </template>
@@ -29384,25 +29449,6 @@
29384
29449
  };
29385
29450
  }
29386
29451
 
29387
- /**
29388
- * Base class for table cell views, which are used within the nimble-table-cell.
29389
- * Each TableColumn type has a corresponding TableCellView type (linked via TableColumn.cellViewTag).
29390
- */
29391
- class TableCellView extends FoundationElement {
29392
- /**
29393
- * Called if an element inside this cell view has focus, and this row/cell is being recycled.
29394
- * Expected implementation is to commit changes as needed, and blur the focusable element (or close
29395
- * the menu/popup/etc).
29396
- */
29397
- focusedRecycleCallback() { }
29398
- }
29399
- __decorate$1([
29400
- observable
29401
- ], TableCellView.prototype, "cellRecord", void 0);
29402
- __decorate$1([
29403
- observable
29404
- ], TableCellView.prototype, "columnConfig", void 0);
29405
-
29406
29452
  /**
29407
29453
  * Helper class for the nimble-table for row virtualization.
29408
29454
  *
@@ -29558,6 +29604,14 @@
29558
29604
  }
29559
29605
  return false;
29560
29606
  };
29607
+ const isColumnInternalsProperty = (changedProperty, ...args) => {
29608
+ for (const arg of args) {
29609
+ if (changedProperty === arg) {
29610
+ return true;
29611
+ }
29612
+ }
29613
+ return false;
29614
+ };
29561
29615
  /**
29562
29616
  * Helper class to track what updates are needed to the table based on configuration
29563
29617
  * changes.
@@ -29622,19 +29676,20 @@
29622
29676
  if (isColumnProperty(changedColumnProperty, 'columnId')) {
29623
29677
  this.requiredUpdates.columnIds = true;
29624
29678
  }
29625
- else if (isColumnProperty(changedColumnProperty, 'operandDataRecordFieldName', 'sortOperation')) {
29679
+ else if (isColumnInternalsProperty(changedColumnProperty, 'operandDataRecordFieldName', 'sortOperation')) {
29626
29680
  this.requiredUpdates.columnDefinition = true;
29627
29681
  }
29628
29682
  else if (isColumnProperty(changedColumnProperty, 'sortIndex', 'sortDirection')) {
29629
29683
  this.requiredUpdates.columnSort = true;
29630
29684
  }
29631
- else if (isColumnProperty(changedColumnProperty, 'currentFractionalWidth', 'currentPixelWidth', 'internalMinPixelWidth', 'columnHidden')) {
29685
+ else if (isColumnProperty(changedColumnProperty, 'columnHidden')
29686
+ || isColumnInternalsProperty(changedColumnProperty, 'currentFractionalWidth', 'currentPixelWidth', 'minPixelWidth')) {
29632
29687
  this.requiredUpdates.columnWidths = true;
29633
29688
  }
29634
29689
  else if (isColumnProperty(changedColumnProperty, 'actionMenuSlot')) {
29635
29690
  this.requiredUpdates.actionMenuSlots = true;
29636
29691
  }
29637
- else if (isColumnProperty(changedColumnProperty, 'internalGroupIndex', 'internalGroupingDisabled')) {
29692
+ else if (isColumnInternalsProperty(changedColumnProperty, 'groupIndex', 'groupingDisabled')) {
29638
29693
  this.requiredUpdates.groupRows = true;
29639
29694
  }
29640
29695
  this.queueUpdate();
@@ -29682,21 +29737,17 @@
29682
29737
  */
29683
29738
  class TableLayoutHelper {
29684
29739
  static getGridTemplateColumns(columns) {
29685
- return (columns
29740
+ return columns
29686
29741
  ?.filter(column => !column.columnHidden)
29687
- .reduce((accumulator, currentValue) => {
29688
- const gap = accumulator === '' ? '' : ' ';
29689
- const minPixelWidth = currentValue.internalMinPixelWidth;
29690
- if (currentValue.currentPixelWidth) {
29691
- const pixelWidth = currentValue.currentPixelWidth;
29692
- const gridPixelWidth = pixelWidth > minPixelWidth
29693
- ? pixelWidth
29694
- : minPixelWidth;
29695
- return `${accumulator}${gap}${gridPixelWidth}px`;
29742
+ .map(column => {
29743
+ const { minPixelWidth, currentPixelWidth, currentFractionalWidth } = column.columnInternals;
29744
+ if (currentPixelWidth) {
29745
+ const coercedPixelWidth = Math.max(minPixelWidth, currentPixelWidth);
29746
+ return `${coercedPixelWidth}px`;
29696
29747
  }
29697
- const fractionalWidth = currentValue.currentFractionalWidth;
29698
- return `${accumulator}${gap}minmax(${minPixelWidth}px, ${fractionalWidth}fr)`;
29699
- }, '') ?? '');
29748
+ return `minmax(${minPixelWidth}px, ${currentFractionalWidth}fr)`;
29749
+ })
29750
+ .join(' ');
29700
29751
  }
29701
29752
  }
29702
29753
 
@@ -29872,7 +29923,9 @@
29872
29923
  * is the string name of the property that changed on that column.
29873
29924
  */
29874
29925
  handleChange(source, args) {
29875
- if (source instanceof TableColumn && typeof args === 'string') {
29926
+ if ((source instanceof TableColumn
29927
+ || source instanceof ColumnInternals)
29928
+ && typeof args === 'string') {
29876
29929
  this.updateTracker.trackColumnPropertyChanged(args);
29877
29930
  }
29878
29931
  }
@@ -29976,6 +30029,9 @@
29976
30029
  const notifier = Observable.getNotifier(column);
29977
30030
  notifier.subscribe(this);
29978
30031
  this.columnNotifiers.push(notifier);
30032
+ const notifierInternals = Observable.getNotifier(column.columnInternals);
30033
+ notifierInternals.subscribe(this);
30034
+ this.columnNotifiers.push(notifier);
29979
30035
  }
29980
30036
  }
29981
30037
  getColumnsParticipatingInSorting() {
@@ -29983,8 +30039,8 @@
29983
30039
  && typeof x.sortIndex === 'number');
29984
30040
  }
29985
30041
  getColumnsParticipatingInGrouping() {
29986
- return this.columns.filter(x => !x.internalGroupingDisabled
29987
- && typeof x.internalGroupIndex === 'number');
30042
+ return this.columns.filter(x => !x.columnInternals.groupingDisabled
30043
+ && typeof x.columnInternals.groupIndex === 'number');
29988
30044
  }
29989
30045
  childItemsChanged() {
29990
30046
  void this.updateColumnsFromChildItems();
@@ -30040,7 +30096,7 @@
30040
30096
  this.tableValidator.validateSelectionMode(this.selectionMode, this.idFieldName);
30041
30097
  this.tableValidator.validateColumnIds(this.columns.map(x => x.columnId));
30042
30098
  this.tableValidator.validateColumnSortIndices(this.getColumnsParticipatingInSorting().map(x => x.sortIndex));
30043
- this.tableValidator.validateColumnGroupIndices(this.getColumnsParticipatingInGrouping().map(x => x.internalGroupIndex));
30099
+ this.tableValidator.validateColumnGroupIndices(this.getColumnsParticipatingInGrouping().map(x => x.columnInternals.groupIndex));
30044
30100
  this.validateWithData(this.table.options.data);
30045
30101
  }
30046
30102
  validateWithData(data) {
@@ -30081,7 +30137,7 @@
30081
30137
  getGroupRowColumn(row) {
30082
30138
  const groupedId = row.groupingColumnId;
30083
30139
  if (groupedId !== undefined) {
30084
- return this.columns.find(c => c.internalUniqueId === groupedId);
30140
+ return this.columns.find(c => c.columnInternals.uniqueId === groupedId);
30085
30141
  }
30086
30142
  return undefined;
30087
30143
  }
@@ -30113,14 +30169,14 @@
30113
30169
  : undefined;
30114
30170
  return sortedColumns.map(column => {
30115
30171
  return {
30116
- id: column.internalUniqueId,
30172
+ id: column.columnInternals.uniqueId,
30117
30173
  desc: column.sortDirection === TableColumnSortDirection.descending
30118
30174
  };
30119
30175
  });
30120
30176
  }
30121
30177
  calculateTanStackGroupingState() {
30122
- const groupedColumns = this.getColumnsParticipatingInGrouping().sort((x, y) => x.internalGroupIndex - y.internalGroupIndex);
30123
- return groupedColumns.map(column => column.internalUniqueId);
30178
+ const groupedColumns = this.getColumnsParticipatingInGrouping().sort((x, y) => x.columnInternals.groupIndex - y.columnInternals.groupIndex);
30179
+ return groupedColumns.map(column => column.columnInternals.uniqueId);
30124
30180
  }
30125
30181
  calculateTanStackRowIdFunction() {
30126
30182
  return this.idFieldName === null || this.idFieldName === undefined
@@ -30130,15 +30186,15 @@
30130
30186
  calculateTanStackColumns() {
30131
30187
  return this.columns.map(column => {
30132
30188
  return {
30133
- id: column.internalUniqueId,
30189
+ id: column.columnInternals.uniqueId,
30134
30190
  accessorFn: (data) => {
30135
- const fieldName = column.operandDataRecordFieldName;
30191
+ const fieldName = column.columnInternals.operandDataRecordFieldName;
30136
30192
  if (typeof fieldName !== 'string') {
30137
30193
  return undefined;
30138
30194
  }
30139
30195
  return data[fieldName];
30140
30196
  },
30141
- sortingFn: getTanStackSortingFunction(column.sortOperation)
30197
+ sortingFn: getTanStackSortingFunction(column.columnInternals.sortOperation)
30142
30198
  };
30143
30199
  });
30144
30200
  }
@@ -30213,7 +30269,7 @@
30213
30269
  `;
30214
30270
 
30215
30271
  const template$6 = html `
30216
- <template>
30272
+ <template slot="${x => x.columnInternals.uniqueId}">
30217
30273
  <span class="header-content">
30218
30274
  <slot></slot>
30219
30275
  </span>
@@ -30228,25 +30284,20 @@
30228
30284
  * proportionally within a Table.
30229
30285
  */
30230
30286
  class FractionalWidthColumn extends base {
30231
- constructor() {
30232
- super(...arguments);
30233
- this.fractionalWidth = defaultFractionalWidth;
30234
- this.minPixelWidth = defaultMinPixelWidth;
30235
- }
30236
30287
  fractionalWidthChanged() {
30237
30288
  if (typeof this.fractionalWidth === 'number') {
30238
- this.internalFractionalWidth = this.fractionalWidth;
30289
+ this.columnInternals.fractionalWidth = this.fractionalWidth;
30239
30290
  }
30240
30291
  else {
30241
- this.internalFractionalWidth = defaultFractionalWidth;
30292
+ this.columnInternals.fractionalWidth = defaultFractionalWidth;
30242
30293
  }
30243
30294
  }
30244
30295
  minPixelWidthChanged() {
30245
30296
  if (typeof this.minPixelWidth === 'number') {
30246
- this.internalMinPixelWidth = this.minPixelWidth;
30297
+ this.columnInternals.minPixelWidth = this.minPixelWidth;
30247
30298
  }
30248
30299
  else {
30249
- this.internalMinPixelWidth = defaultMinPixelWidth;
30300
+ this.columnInternals.minPixelWidth = defaultMinPixelWidth;
30250
30301
  }
30251
30302
  }
30252
30303
  }
@@ -30273,14 +30324,14 @@
30273
30324
  this.groupIndex = null;
30274
30325
  }
30275
30326
  groupingDisabledChanged() {
30276
- this.internalGroupingDisabled = this.groupingDisabled;
30327
+ this.columnInternals.groupingDisabled = this.groupingDisabled;
30277
30328
  }
30278
30329
  groupIndexChanged() {
30279
30330
  if (typeof this.groupIndex === 'number') {
30280
- this.internalGroupIndex = this.groupIndex;
30331
+ this.columnInternals.groupIndex = this.groupIndex;
30281
30332
  }
30282
30333
  else {
30283
- this.internalGroupIndex = undefined;
30334
+ this.columnInternals.groupIndex = undefined;
30284
30335
  }
30285
30336
  }
30286
30337
  }
@@ -30293,20 +30344,6 @@
30293
30344
  return GroupableColumn;
30294
30345
  }
30295
30346
 
30296
- /**
30297
- * The base class for group header views, which are displayed in a TableGroupRow.
30298
- * A TableColumn that uses the GroupableColumn mixin must provide a TableGroupHeaderView
30299
- * type (linked via TableColumn.groupHeaderViewTag).
30300
- */
30301
- class TableGroupHeaderView extends FoundationElement {
30302
- }
30303
- __decorate$1([
30304
- observable
30305
- ], TableGroupHeaderView.prototype, "groupHeaderValue", void 0);
30306
- __decorate$1([
30307
- observable
30308
- ], TableGroupHeaderView.prototype, "columnConfig", void 0);
30309
-
30310
30347
  const template$5 = html `
30311
30348
  <span
30312
30349
  ${ref('textSpan')}
@@ -30357,9 +30394,6 @@
30357
30394
  this.isValidContentAndHasOverflow = false;
30358
30395
  }
30359
30396
  }
30360
- __decorate$1([
30361
- observable
30362
- ], TableColumnTextGroupHeaderView.prototype, "columnConfig", void 0);
30363
30397
  __decorate$1([
30364
30398
  observable
30365
30399
  ], TableColumnTextGroupHeaderView.prototype, "isValidContentAndHasOverflow", void 0);
@@ -30436,38 +30470,33 @@
30436
30470
  const tableColumnTextCellViewTag = DesignSystem.tagFor(TableColumnTextCellView);
30437
30471
 
30438
30472
  /**
30439
- * The base class for a table column for displaying strings.
30473
+ * The table column for displaying strings.
30440
30474
  */
30441
- class TableColumnTextBase extends TableColumn {
30475
+ class TableColumnText extends mixinGroupableColumnAPI(mixinFractionalWidthColumnAPI((TableColumn))) {
30442
30476
  constructor() {
30443
- super();
30444
- this.cellRecordFieldNames = ['value'];
30445
- this.cellViewTag = tableColumnTextCellViewTag;
30446
- this.sortOperation = TableColumnSortOperation.localeAwareCaseSensitive;
30477
+ super({
30478
+ cellRecordFieldNames: ['value'],
30479
+ cellViewTag: tableColumnTextCellViewTag,
30480
+ groupHeaderViewTag: tableColumnTextGroupHeaderTag
30481
+ });
30482
+ this.columnInternals.sortOperation = TableColumnSortOperation.localeAwareCaseSensitive;
30447
30483
  }
30448
30484
  fieldNameChanged() {
30449
- this.dataRecordFieldNames = [this.fieldName];
30450
- this.operandDataRecordFieldName = this.fieldName;
30485
+ this.columnInternals.dataRecordFieldNames = [this.fieldName];
30486
+ this.columnInternals.operandDataRecordFieldName = this.fieldName;
30451
30487
  }
30452
30488
  placeholderChanged() {
30453
- this.columnConfig = { placeholder: this.placeholder ?? '' };
30489
+ this.columnInternals.columnConfig = {
30490
+ placeholder: this.placeholder ?? ''
30491
+ };
30454
30492
  }
30455
30493
  }
30456
30494
  __decorate$1([
30457
30495
  attr({ attribute: 'field-name' })
30458
- ], TableColumnTextBase.prototype, "fieldName", void 0);
30496
+ ], TableColumnText.prototype, "fieldName", void 0);
30459
30497
  __decorate$1([
30460
30498
  attr
30461
- ], TableColumnTextBase.prototype, "placeholder", void 0);
30462
- /**
30463
- * The table column for displaying strings.
30464
- */
30465
- class TableColumnText extends mixinGroupableColumnAPI(mixinFractionalWidthColumnAPI(TableColumnTextBase)) {
30466
- constructor() {
30467
- super(...arguments);
30468
- this.groupHeaderViewTag = tableColumnTextGroupHeaderTag;
30469
- }
30470
- }
30499
+ ], TableColumnText.prototype, "placeholder", void 0);
30471
30500
  const nimbleTableColumnText = TableColumnText.compose({
30472
30501
  baseName: 'table-column-text',
30473
30502
  template: template$6,