@ni/nimble-components 35.10.0 → 35.11.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 +1260 -472
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +3565 -3320
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/custom-elements.json +90 -0
  6. package/dist/custom-elements.md +11 -10
  7. package/dist/esm/rich-text/editor/models/create-tiptap-editor.js +1 -1
  8. package/dist/esm/rich-text/editor/models/create-tiptap-editor.js.map +1 -1
  9. package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js +1 -1
  10. package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
  11. package/dist/esm/rich-text/models/markdown-parser.js +2 -2
  12. package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
  13. package/dist/esm/table/components/group-row/index.d.ts +6 -0
  14. package/dist/esm/table/components/group-row/index.js +14 -0
  15. package/dist/esm/table/components/group-row/index.js.map +1 -1
  16. package/dist/esm/table/components/group-row/styles.js +91 -5
  17. package/dist/esm/table/components/group-row/styles.js.map +1 -1
  18. package/dist/esm/table/components/group-row/template.js +6 -1
  19. package/dist/esm/table/components/group-row/template.js.map +1 -1
  20. package/dist/esm/table/components/row/index.js +3 -1
  21. package/dist/esm/table/components/row/index.js.map +1 -1
  22. package/dist/esm/table/components/row/styles.js +79 -2
  23. package/dist/esm/table/components/row/styles.js.map +1 -1
  24. package/dist/esm/table/components/row/template.js +43 -31
  25. package/dist/esm/table/components/row/template.js.map +1 -1
  26. package/dist/esm/table/index.d.ts +13 -0
  27. package/dist/esm/table/index.js +51 -2
  28. package/dist/esm/table/index.js.map +1 -1
  29. package/dist/esm/table/models/table-layout-manager.d.ts +1 -1
  30. package/dist/esm/table/models/table-layout-manager.js +8 -6
  31. package/dist/esm/table/models/table-layout-manager.js.map +1 -1
  32. package/dist/esm/table/models/table-update-tracker.d.ts +1 -1
  33. package/dist/esm/table/models/table-update-tracker.js +7 -1
  34. package/dist/esm/table/models/table-update-tracker.js.map +1 -1
  35. package/dist/esm/table/models/table-validator.d.ts +2 -0
  36. package/dist/esm/table/models/table-validator.js +10 -2
  37. package/dist/esm/table/models/table-validator.js.map +1 -1
  38. package/dist/esm/table/styles.js +23 -5
  39. package/dist/esm/table/styles.js.map +1 -1
  40. package/dist/esm/table/template.d.ts +2 -1
  41. package/dist/esm/table/template.js +23 -13
  42. package/dist/esm/table/template.js.map +1 -1
  43. package/dist/esm/table/types.d.ts +9 -0
  44. package/dist/esm/table/types.js +7 -0
  45. package/dist/esm/table/types.js.map +1 -1
  46. package/dist/esm/table-column/base/models/column-internals.d.ts +5 -1
  47. package/dist/esm/table-column/base/models/column-internals.js +4 -1
  48. package/dist/esm/table-column/base/models/column-internals.js.map +1 -1
  49. package/dist/esm/table-column/mapping/index.d.ts +4 -0
  50. package/dist/esm/table-column/mapping/index.js +2 -1
  51. package/dist/esm/table-column/mapping/index.js.map +1 -1
  52. package/dist/esm/table-column/mixins/pinnable-column.d.ts +11 -0
  53. package/dist/esm/table-column/mixins/pinnable-column.js +18 -0
  54. package/dist/esm/table-column/mixins/pinnable-column.js.map +1 -0
  55. package/package.json +2 -2
@@ -3,11 +3,43 @@ import { ButtonAppearance } from '../../../menu-button/types';
3
3
  import { tableCellTag } from '../cell';
4
4
  import { checkboxTag } from '../../../checkbox';
5
5
  import { tableRowCollapseLabel, tableRowExpandLabel, tableRowLoadingLabel, tableRowSelectLabel } from '../../../label-provider/table/label-tokens';
6
+ import { TableColumnPinLocation } from '../../types';
6
7
  import { buttonTag } from '../../../button';
7
8
  import { iconArrowExpanderRightTag } from '../../../icons/arrow-expander-right';
8
9
  import { spinnerTag } from '../../../spinner';
9
10
  import { SpinnerAppearance } from '../../../spinner/types';
10
11
  import { uniquifySlotNameForColumn } from '../../models/utilities';
12
+ const rowCellTemplate = html `
13
+ <${tableCellTag}
14
+ class="cell"
15
+ :cellState="${(_, c) => c.parent.cellStates[c.index]}"
16
+ :cellViewTemplate="${x => x.columnInternals.cellViewTemplate}"
17
+ :column="${x => x}"
18
+ column-id="${x => x.columnId}"
19
+ :recordId="${(_, c) => c.parent.recordId}"
20
+ ?has-action-menu="${x => !!x.actionMenuSlot}"
21
+ action-menu-label="${x => x.actionMenuLabel}"
22
+ @cell-action-menu-beforetoggle="${(x, c) => c.parent.onCellActionMenuBeforeToggle(c.event, x)}"
23
+ @cell-action-menu-toggle="${(x, c) => c.parent.onCellActionMenuToggle(c.event, x)}"
24
+ @cell-view-slots-request="${(x, c) => c.parent.onCellViewSlotsRequest(x, c.event)}"
25
+ :nestingLevel="${(_, c) => c.parent.cellIndentLevels[c.index]}"
26
+ >
27
+
28
+ ${when((x, c) => (c.parent.currentActionMenuColumn === x) && x.actionMenuSlot, html `
29
+ <slot
30
+ name="${x => `row-action-menu-${x.actionMenuSlot}`}"
31
+ slot="cellActionMenu"
32
+ ></slot>
33
+ `)}
34
+
35
+ ${repeat(x => x.columnInternals.slotNames, html `
36
+ <slot
37
+ name="${(x, c) => uniquifySlotNameForColumn(c.parent, x)}"
38
+ slot="${(x, c) => uniquifySlotNameForColumn(c.parent, x)}"
39
+ ></slot>
40
+ `)}
41
+ </${tableCellTag}>
42
+ `;
11
43
  export const template = html `
12
44
  <template
13
45
  role="row"
@@ -15,6 +47,14 @@ export const template = html `
15
47
  aria-expanded=${x => x.expanded}
16
48
  style="--ni-private-table-row-indent-level: ${x => x.nestingLevel};"
17
49
  >
50
+ <span class="pinned-cell-container">
51
+ ${repeat(x => x.columns, html `
52
+ ${when(x => !x.columnHidden && x.columnInternals.pinLocation === TableColumnPinLocation.left, html `
53
+ ${rowCellTemplate}
54
+ `)}
55
+ `, { recycle: false, positioning: true })}
56
+ </span>
57
+
18
58
  ${when(x => !x.rowOperationGridCellHidden, html `
19
59
  <span role="gridcell" class="row-operations-container">
20
60
  ${when(x => x.showSelectionCheckbox, html `
@@ -32,7 +72,7 @@ export const template = html `
32
72
  `)}
33
73
  </span>
34
74
  `)}
35
- <span class="row-front-spacer ${x => (x.isTopLevelParentRow || !x.reserveCollapseSpace ? 'reduced-size-spacer' : '')}"></span>
75
+ <span class="row-front-spacer ${x => (x.isTopLevelParentRow || !x.reserveCollapseSpace ? 'reduced-size-spacer' : '')} ${x => (x.showSelectionCheckbox ? 'selectable' : '')}"></span>
36
76
  ${when(x => x.isParentRow, html `
37
77
  ${when(x => x.loading, html `
38
78
  <span class="spinner-container">
@@ -63,36 +103,8 @@ export const template = html `
63
103
  class="cell-container ${x => (x.isNestedParent ? 'nested-parent' : '')}"
64
104
  >
65
105
  ${repeat(x => x.columns, html `
66
- ${when(x => !x.columnHidden, html `
67
- <${tableCellTag}
68
- class="cell"
69
- :cellState="${(_, c) => c.parent.cellStates[c.index]}"
70
- :cellViewTemplate="${x => x.columnInternals.cellViewTemplate}"
71
- :column="${x => x}"
72
- column-id="${x => x.columnId}"
73
- :recordId="${(_, c) => c.parent.recordId}"
74
- ?has-action-menu="${x => !!x.actionMenuSlot}"
75
- action-menu-label="${x => x.actionMenuLabel}"
76
- @cell-action-menu-beforetoggle="${(x, c) => c.parent.onCellActionMenuBeforeToggle(c.event, x)}"
77
- @cell-action-menu-toggle="${(x, c) => c.parent.onCellActionMenuToggle(c.event, x)}"
78
- @cell-view-slots-request="${(x, c) => c.parent.onCellViewSlotsRequest(x, c.event)}"
79
- :nestingLevel="${(_, c) => c.parent.cellIndentLevels[c.index]}"
80
- >
81
-
82
- ${when((x, c) => (c.parent.currentActionMenuColumn === x) && x.actionMenuSlot, html `
83
- <slot
84
- name="${x => `row-action-menu-${x.actionMenuSlot}`}"
85
- slot="cellActionMenu"
86
- ></slot>
87
- `)}
88
-
89
- ${repeat(x => x.columnInternals.slotNames, html `
90
- <slot
91
- name="${(x, c) => uniquifySlotNameForColumn(c.parent, x)}"
92
- slot="${(x, c) => uniquifySlotNameForColumn(c.parent, x)}"
93
- ></slot>
94
- `)}
95
- </${tableCellTag}>
106
+ ${when(x => !x.columnHidden && x.columnInternals.pinLocation !== TableColumnPinLocation.left, html `
107
+ ${rowCellTemplate}
96
108
  `)}
97
109
  `, { recycle: false, positioning: true })}
98
110
  </span>
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/row/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EACH,gBAAgB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACH,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACtB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAU;;;wBAGd,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;wBACnB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;sDACe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;;UAE/D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAU;;kBAE/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAU;uBAC5C,WAAW;0BACR,GAAG,CAAC,mBAAmB,CAAC;;0BAExB,EAAE,CAAC,+DAA+D;;mCAEzD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAoB,CAAC;kCAC9D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE;iCACpC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;sCAClC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;;wBAErD,WAAW;iBAClB,CAAC;;SAET,CAAC;wCAC8B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;UAClH,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAU;cACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAU;;uBAE1B,UAAU;sCACK,iBAAiB,CAAC,MAAM;sCACxB,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;iCAC7C,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;;wBAEjD,UAAU;;aAErB,CAAC;cACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAU;mBAC/B,SAAS;kCACM,gBAAgB,CAAC,KAAK;;;;8BAI1B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC;6BACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;;uBAGnG,yBAAyB,IAAI,GAAG,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,OAAO,yBAAyB;oBAC5I,SAAS;aAChB,CAAC;SACL,CAAC;;gBAEM,GAAG,CAAC,eAAe,CAAC;oCACA,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;;cAEpE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAuB;kBAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAuB;uBACjD,YAAY;;sCAEG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;6CAC/B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,gBAAgB;mCACjD,CAAC,CAAC,EAAE,CAAC,CAAC;qCACJ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;qCACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;4CACpB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;6CACtB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;0DACT,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC,KAAiD,EAAE,CAAC,CAAC;oDAC7G,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAiD,EAAE,CAAC,CAAC;oDACjG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,KAAoD,CAAC;yCAC/G,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;;;0BAG3D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC,MAAmB,CAAC,uBAAuB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAuB;;wCAExG,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,cAAe,EAAE;;;yBAG1D,CAAC;;0BAEA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAqB;;wCAEpD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;wCAChD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;;yBAE/D,CAAC;wBACF,YAAY;iBACnB,CAAC;aACL,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;;;CAGpD,CAAC","sourcesContent":["import { html, ref, repeat, when } from '@ni/fast-element';\nimport type { TableRow } from '.';\nimport {\n ButtonAppearance,\n type MenuButtonToggleEventDetail\n} from '../../../menu-button/types';\nimport { tableCellTag } from '../cell';\nimport { checkboxTag } from '../../../checkbox';\nimport {\n tableRowCollapseLabel,\n tableRowExpandLabel,\n tableRowLoadingLabel,\n tableRowSelectLabel\n} from '../../../label-provider/table/label-tokens';\nimport type { TableColumn } from '../../../table-column/base';\nimport { buttonTag } from '../../../button';\nimport { iconArrowExpanderRightTag } from '../../../icons/arrow-expander-right';\nimport { spinnerTag } from '../../../spinner';\nimport { SpinnerAppearance } from '../../../spinner/types';\nimport type { CellViewSlotRequestEventDetail } from '../../types';\nimport { uniquifySlotNameForColumn } from '../../models/utilities';\n\nexport const template = html<TableRow>`\n <template \n role=\"row\"\n aria-selected=${x => x.ariaSelected}\n aria-expanded=${x => x.expanded}\n style=\"--ni-private-table-row-indent-level: ${x => x.nestingLevel};\"\n >\n ${when(x => !x.rowOperationGridCellHidden, html<TableRow>`\n <span role=\"gridcell\" class=\"row-operations-container\">\n ${when(x => x.showSelectionCheckbox, html<TableRow>`\n <${checkboxTag}\n ${ref('selectionCheckbox')}\n class=\"selection-checkbox\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n @change=\"${(x, c) => x.onSelectionCheckboxChange(c.event as CustomEvent)}\"\n @click=\"${(_, c) => c.event.stopPropagation()}\"\n title=\"${x => tableRowSelectLabel.getValueFor(x)}\"\n aria-label=\"${x => tableRowSelectLabel.getValueFor(x)}\"\n >\n </${checkboxTag}>\n `)}\n </span>\n `)}\n <span class=\"row-front-spacer ${x => (x.isTopLevelParentRow || !x.reserveCollapseSpace ? 'reduced-size-spacer' : '')}\"></span>\n ${when(x => x.isParentRow, html<TableRow>`\n ${when(x => x.loading, html<TableRow>`\n <span class=\"spinner-container\">\n <${spinnerTag}\n appearance=\"${SpinnerAppearance.accent}\"\n aria-label=\"${x => tableRowLoadingLabel.getValueFor(x)}\"\n title=\"${x => tableRowLoadingLabel.getValueFor(x)}\"\n >\n </${spinnerTag}>\n </span>\n `)}\n ${when(x => !x.loading, html<TableRow>`\n <${buttonTag}\n appearance=\"${ButtonAppearance.ghost}\"\n content-hidden\n class=\"expand-collapse-button\"\n tabindex=\"-1\"\n @click=\"${(x, c) => x.onRowExpandToggle(c.event)}\"\n title=\"${x => (x.expanded ? tableRowCollapseLabel.getValueFor(x) : tableRowExpandLabel.getValueFor(x))}\"\n aria-hidden=\"true\"\n >\n <${iconArrowExpanderRightTag} ${ref('expandIcon')} slot=\"start\" class=\"expander-icon ${x => x.animationClass}\"></${iconArrowExpanderRightTag}>\n </${buttonTag}>\n `)}\n `)}\n\n <span ${ref('cellContainer')} \n class=\"cell-container ${x => (x.isNestedParent ? 'nested-parent' : '')}\"\n >\n ${repeat(x => x.columns, html<TableColumn, TableRow>`\n ${when(x => !x.columnHidden, html<TableColumn, TableRow>`\n <${tableCellTag}\n class=\"cell\"\n :cellState=\"${(_, c) => c.parent.cellStates[c.index]}\"\n :cellViewTemplate=\"${x => x.columnInternals.cellViewTemplate}\"\n :column=\"${x => x}\"\n column-id=\"${x => x.columnId}\"\n :recordId=\"${(_, c) => c.parent.recordId}\"\n ?has-action-menu=\"${x => !!x.actionMenuSlot}\"\n action-menu-label=\"${x => x.actionMenuLabel}\"\n @cell-action-menu-beforetoggle=\"${(x, c) => c.parent.onCellActionMenuBeforeToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>, x)}\"\n @cell-action-menu-toggle=\"${(x, c) => c.parent.onCellActionMenuToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>, x)}\"\n @cell-view-slots-request=\"${(x, c) => c.parent.onCellViewSlotsRequest(x, c.event as CustomEvent<CellViewSlotRequestEventDetail>)}\"\n :nestingLevel=\"${(_, c) => c.parent.cellIndentLevels[c.index]}\"\n >\n\n ${when((x, c) => ((c.parent as TableRow).currentActionMenuColumn === x) && x.actionMenuSlot, html<TableColumn, TableRow>`\n <slot\n name=\"${x => `row-action-menu-${x.actionMenuSlot!}`}\"\n slot=\"cellActionMenu\"\n ></slot>\n `)}\n\n ${repeat(x => x.columnInternals.slotNames, html<string, TableColumn>`\n <slot\n name=\"${(x, c) => uniquifySlotNameForColumn(c.parent, x)}\"\n slot=\"${(x, c) => uniquifySlotNameForColumn(c.parent, x)}\"\n ></slot>\n `)}\n </${tableCellTag}>\n `)}\n `, { recycle: false, positioning: true })}\n </span>\n </template>\n`;\n"]}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/row/template.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, ref, repeat, when } from '@ni/fast-element';\nimport type { TableRow } from '.';\nimport {\n ButtonAppearance,\n type MenuButtonToggleEventDetail\n} from '../../../menu-button/types';\nimport { tableCellTag } from '../cell';\nimport { checkboxTag } from '../../../checkbox';\nimport {\n tableRowCollapseLabel,\n tableRowExpandLabel,\n tableRowLoadingLabel,\n tableRowSelectLabel\n} from '../../../label-provider/table/label-tokens';\nimport type { TableColumn } from '../../../table-column/base';\nimport { TableColumnPinLocation } from '../../types';\nimport { buttonTag } from '../../../button';\nimport { iconArrowExpanderRightTag } from '../../../icons/arrow-expander-right';\nimport { spinnerTag } from '../../../spinner';\nimport { SpinnerAppearance } from '../../../spinner/types';\nimport type { CellViewSlotRequestEventDetail } from '../../types';\nimport { uniquifySlotNameForColumn } from '../../models/utilities';\n\nconst rowCellTemplate = html<TableColumn, TableRow>`\n <${tableCellTag}\n class=\"cell\"\n :cellState=\"${(_, c) => c.parent.cellStates[c.index]}\"\n :cellViewTemplate=\"${x => x.columnInternals.cellViewTemplate}\"\n :column=\"${x => x}\"\n column-id=\"${x => x.columnId}\"\n :recordId=\"${(_, c) => c.parent.recordId}\"\n ?has-action-menu=\"${x => !!x.actionMenuSlot}\"\n action-menu-label=\"${x => x.actionMenuLabel}\"\n @cell-action-menu-beforetoggle=\"${(x, c) => c.parent.onCellActionMenuBeforeToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>, x)}\"\n @cell-action-menu-toggle=\"${(x, c) => c.parent.onCellActionMenuToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>, x)}\"\n @cell-view-slots-request=\"${(x, c) => c.parent.onCellViewSlotsRequest(x, c.event as CustomEvent<CellViewSlotRequestEventDetail>)}\"\n :nestingLevel=\"${(_, c) => c.parent.cellIndentLevels[c.index]}\"\n >\n\n ${when((x, c) => ((c.parent as TableRow).currentActionMenuColumn === x) && x.actionMenuSlot, html<TableColumn, TableRow>`\n <slot\n name=\"${x => `row-action-menu-${x.actionMenuSlot!}`}\"\n slot=\"cellActionMenu\"\n ></slot>\n `)}\n\n ${repeat(x => x.columnInternals.slotNames, html<string, TableColumn>`\n <slot\n name=\"${(x, c) => uniquifySlotNameForColumn(c.parent, x)}\"\n slot=\"${(x, c) => uniquifySlotNameForColumn(c.parent, x)}\"\n ></slot>\n `)}\n </${tableCellTag}>\n`;\n\nexport const template = html<TableRow>`\n <template \n role=\"row\"\n aria-selected=${x => x.ariaSelected}\n aria-expanded=${x => x.expanded}\n style=\"--ni-private-table-row-indent-level: ${x => x.nestingLevel};\"\n >\n <span class=\"pinned-cell-container\">\n ${repeat(x => x.columns, html<TableColumn, TableRow>`\n ${when(x => !x.columnHidden && x.columnInternals.pinLocation === TableColumnPinLocation.left, html<TableColumn, TableRow>`\n ${rowCellTemplate}\n `)}\n `, { recycle: false, positioning: true })}\n </span>\n\n ${when(x => !x.rowOperationGridCellHidden, html<TableRow>`\n <span role=\"gridcell\" class=\"row-operations-container\">\n ${when(x => x.showSelectionCheckbox, html<TableRow>`\n <${checkboxTag}\n ${ref('selectionCheckbox')}\n class=\"selection-checkbox\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n @change=\"${(x, c) => x.onSelectionCheckboxChange(c.event as CustomEvent)}\"\n @click=\"${(_, c) => c.event.stopPropagation()}\"\n title=\"${x => tableRowSelectLabel.getValueFor(x)}\"\n aria-label=\"${x => tableRowSelectLabel.getValueFor(x)}\"\n >\n </${checkboxTag}>\n `)}\n </span>\n `)}\n <span class=\"row-front-spacer ${x => (x.isTopLevelParentRow || !x.reserveCollapseSpace ? 'reduced-size-spacer' : '')} ${x => (x.showSelectionCheckbox ? 'selectable' : '')}\"></span>\n ${when(x => x.isParentRow, html<TableRow>`\n ${when(x => x.loading, html<TableRow>`\n <span class=\"spinner-container\">\n <${spinnerTag}\n appearance=\"${SpinnerAppearance.accent}\"\n aria-label=\"${x => tableRowLoadingLabel.getValueFor(x)}\"\n title=\"${x => tableRowLoadingLabel.getValueFor(x)}\"\n >\n </${spinnerTag}>\n </span>\n `)}\n ${when(x => !x.loading, html<TableRow>`\n <${buttonTag}\n appearance=\"${ButtonAppearance.ghost}\"\n content-hidden\n class=\"expand-collapse-button\"\n tabindex=\"-1\"\n @click=\"${(x, c) => x.onRowExpandToggle(c.event)}\"\n title=\"${x => (x.expanded ? tableRowCollapseLabel.getValueFor(x) : tableRowExpandLabel.getValueFor(x))}\"\n aria-hidden=\"true\"\n >\n <${iconArrowExpanderRightTag} ${ref('expandIcon')} slot=\"start\" class=\"expander-icon ${x => x.animationClass}\"></${iconArrowExpanderRightTag}>\n </${buttonTag}>\n `)}\n `)}\n\n <span ${ref('cellContainer')} \n class=\"cell-container ${x => (x.isNestedParent ? 'nested-parent' : '')}\"\n >\n ${repeat(x => x.columns, html<TableColumn, TableRow>`\n ${when(x => !x.columnHidden && x.columnInternals.pinLocation !== TableColumnPinLocation.left, html<TableColumn, TableRow>`\n ${rowCellTemplate}\n `)}\n `, { recycle: false, positioning: true })}\n </span>\n </template>\n`;\n"]}
@@ -86,6 +86,14 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
86
86
  * @internal
87
87
  */
88
88
  get collapseButtonVisibility(): string;
89
+ /**
90
+ * @internal
91
+ */
92
+ get pinnedColumnOffset(): number;
93
+ /**
94
+ * @internal
95
+ */
96
+ get pinnedColumnsGridTemplateColumns(): string;
89
97
  /**
90
98
  * @internal
91
99
  */
@@ -118,6 +126,10 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
118
126
  * @internal
119
127
  */
120
128
  visibleColumns: TableColumn[];
129
+ /**
130
+ * @internal
131
+ */
132
+ pinnedColumns: TableColumn[];
121
133
  /**
122
134
  * @internal
123
135
  * This value determines the size of the viewport area when a user has created horizontal scrollable
@@ -217,6 +229,7 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
217
229
  protected idFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
218
230
  protected parentIdFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
219
231
  protected columnsChanged(_prev: TableColumn[] | undefined, _next: TableColumn[]): void;
232
+ private getPinnedColumnResolvedPixelWidth;
220
233
  private updateRequestedSlotsForOpeningActionMenu;
221
234
  private handleActionMenuBeforeToggleEvent;
222
235
  private handleRowActionMenuToggleEvent;
@@ -7,7 +7,7 @@ import { TableColumn } from '../table-column/base';
7
7
  import { TableValidator } from './models/table-validator';
8
8
  import { styles } from './styles';
9
9
  import { template } from './template';
10
- import { TableColumnSortDirection, TableRowSelectionMode, TableRowSelectionState } from './types';
10
+ import { TableColumnPinLocation, TableColumnSortDirection, TableRowSelectionMode, TableRowSelectionState } from './types';
11
11
  import { Virtualizer } from './models/virtualizer';
12
12
  import { getTanStackSortingFunction } from './models/sort-operations';
13
13
  import { TableLayoutManager } from './models/table-layout-manager';
@@ -47,6 +47,34 @@ export class Table extends FoundationElement {
47
47
  }
48
48
  return '';
49
49
  }
50
+ /**
51
+ * @internal
52
+ */
53
+ get pinnedColumnOffset() {
54
+ let offset = 0;
55
+ for (const column of this.pinnedColumns) {
56
+ const resolvedPixelWidth = this.getPinnedColumnResolvedPixelWidth(column);
57
+ if (resolvedPixelWidth !== undefined) {
58
+ const coercedPixelWidth = Math.max(column.columnInternals.minPixelWidth, resolvedPixelWidth);
59
+ offset += coercedPixelWidth;
60
+ }
61
+ }
62
+ return offset;
63
+ }
64
+ /**
65
+ * @internal
66
+ */
67
+ get pinnedColumnsGridTemplateColumns() {
68
+ return this.pinnedColumns.map(column => {
69
+ const resolvedPixelWidth = this.getPinnedColumnResolvedPixelWidth(column);
70
+ if (resolvedPixelWidth !== undefined) {
71
+ const coercedPixelWidth = Math.max(column.columnInternals.minPixelWidth, resolvedPixelWidth);
72
+ return `${coercedPixelWidth}px`;
73
+ }
74
+ return '';
75
+ })
76
+ .join(' ');
77
+ }
50
78
  /**
51
79
  * @internal
52
80
  */
@@ -97,6 +125,10 @@ export class Table extends FoundationElement {
97
125
  * @internal
98
126
  */
99
127
  this.visibleColumns = [];
128
+ /**
129
+ * @internal
130
+ */
131
+ this.pinnedColumns = [];
100
132
  /**
101
133
  * @internal
102
134
  * This value determines the size of the viewport area when a user has created horizontal scrollable
@@ -449,7 +481,10 @@ export class Table extends FoundationElement {
449
481
  }
450
482
  if (this.tableUpdateTracker.updateColumnWidths) {
451
483
  this.rowGridColumns = this.layoutManager.getGridTemplateColumns();
452
- this.visibleColumns = this.columns.filter(column => !column.columnHidden);
484
+ this.visibleColumns = this.columns.filter(column => !column.columnHidden
485
+ && column.columnInternals.pinLocation !== TableColumnPinLocation.left);
486
+ this.pinnedColumns = this.columns.filter(column => !column.columnHidden
487
+ && column.columnInternals.pinLocation === TableColumnPinLocation.left);
453
488
  }
454
489
  if (this.tableUpdateTracker.requiresKeyboardFocusReset) {
455
490
  this.keyboardNavigationManager.resetFocusState();
@@ -527,6 +562,10 @@ export class Table extends FoundationElement {
527
562
  this.observeColumns();
528
563
  this.tableUpdateTracker.trackColumnInstancesChanged();
529
564
  }
565
+ getPinnedColumnResolvedPixelWidth(column) {
566
+ const { currentPixelWidth } = column.columnInternals;
567
+ return currentPixelWidth;
568
+ }
530
569
  updateRequestedSlotsForOpeningActionMenu(openActionMenuRecordId) {
531
570
  for (const actionMenuSlot of this.actionMenuSlots) {
532
571
  this.requestedSlots.set(actionMenuSlot, {
@@ -701,6 +740,7 @@ export class Table extends FoundationElement {
701
740
  this.tableValidator.validateColumnSortIndices(this.getColumnsParticipatingInSorting().map(x => x.columnInternals.currentSortIndex));
702
741
  this.tableValidator.validateColumnGroupIndices(this.getColumnsParticipatingInGrouping().map(x => x.columnInternals.groupIndex));
703
742
  this.tableValidator.validateColumnConfigurations(this.columns);
743
+ this.tableValidator.validatePinnedColumnConfigurations(this.columns);
704
744
  if (this.dataHierarchyManager) {
705
745
  this.validateWithData(this.dataHierarchyManager.getAllRecords());
706
746
  }
@@ -973,12 +1013,21 @@ __decorate([
973
1013
  __decorate([
974
1014
  volatile
975
1015
  ], Table.prototype, "collapseButtonVisibility", null);
1016
+ __decorate([
1017
+ volatile
1018
+ ], Table.prototype, "pinnedColumnOffset", null);
1019
+ __decorate([
1020
+ volatile
1021
+ ], Table.prototype, "pinnedColumnsGridTemplateColumns", null);
976
1022
  __decorate([
977
1023
  observable
978
1024
  ], Table.prototype, "firstSortedColumn", void 0);
979
1025
  __decorate([
980
1026
  observable
981
1027
  ], Table.prototype, "visibleColumns", void 0);
1028
+ __decorate([
1029
+ observable
1030
+ ], Table.prototype, "pinnedColumns", void 0);
982
1031
  __decorate([
983
1032
  observable
984
1033
  ], Table.prototype, "tableScrollableMinWidth", void 0);