@nanoporetech-digital/components 5.1.3 → 5.2.1

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 (188) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/cjs/{component-store-74d25f63.js → component-store-f1dc1276.js} +2 -2
  3. package/dist/cjs/{component-store-74d25f63.js.map → component-store-f1dc1276.js.map} +1 -1
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/nano-algolia-filter.cjs.entry.js +2 -2
  7. package/dist/cjs/nano-algolia-input.cjs.entry.js +2 -2
  8. package/dist/cjs/nano-algolia.cjs.entry.js +2 -2
  9. package/dist/cjs/nano-checkbox-group.cjs.entry.js +1 -1
  10. package/dist/cjs/nano-components.cjs.js +1 -1
  11. package/dist/cjs/nano-datalist_3.cjs.entry.js +1 -1
  12. package/dist/cjs/nano-dialog.cjs.entry.js +2 -2
  13. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +2 -2
  14. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-global-nav.cjs.entry.js +2 -2
  16. package/dist/cjs/nano-input.cjs.entry.js +1 -1
  17. package/dist/cjs/nano-overflow-nav.cjs.entry.js +1 -1
  18. package/dist/cjs/nano-range.cjs.entry.js +1 -1
  19. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +3 -1
  20. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  21. package/dist/cjs/nano-sortable.cjs.entry.js +16 -8
  22. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-split-pane.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-sticker.cjs.entry.js +4 -2
  25. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-tab-group.cjs.entry.js +2 -2
  27. package/dist/cjs/{nano-table-5a7a4d53.js → nano-table-10a40ab3.js} +557 -185
  28. package/dist/cjs/nano-table-10a40ab3.js.map +1 -0
  29. package/dist/cjs/nano-table.cjs.entry.js +2 -2
  30. package/dist/cjs/{table.worker-77e56070.js → table.worker-f04588c1.js} +4 -4
  31. package/dist/cjs/table.worker-f04588c1.js.map +1 -0
  32. package/dist/cjs/{table.worker-bd51e29f.js → table.worker-f258383d.js} +1 -1
  33. package/dist/cjs/{throttle-f55496c8.js → throttle-dfa64b9e.js} +17 -20
  34. package/dist/cjs/throttle-dfa64b9e.js.map +1 -0
  35. package/dist/collection/components/resize-observe/resize-observe.js +21 -1
  36. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  37. package/dist/collection/components/select/select.css +0 -1
  38. package/dist/collection/components/sortable/sortable.js +3 -7
  39. package/dist/collection/components/sortable/sortable.js.map +1 -1
  40. package/dist/collection/components/sticker/sticker.js +11 -5
  41. package/dist/collection/components/sticker/sticker.js.map +1 -1
  42. package/dist/collection/components/table/table-interface.js.map +1 -1
  43. package/dist/collection/components/table/table.cell.js +43 -10
  44. package/dist/collection/components/table/table.cell.js.map +1 -1
  45. package/dist/collection/components/table/table.css +38 -55
  46. package/dist/collection/components/table/table.header.js +4 -9
  47. package/dist/collection/components/table/table.header.js.map +1 -1
  48. package/dist/collection/components/table/table.js +101 -47
  49. package/dist/collection/components/table/table.js.map +1 -1
  50. package/dist/collection/components/table/table.pin-service.js +382 -0
  51. package/dist/collection/components/table/table.pin-service.js.map +1 -0
  52. package/dist/collection/components/table/table.row.js +39 -46
  53. package/dist/collection/components/table/table.row.js.map +1 -1
  54. package/dist/collection/components/table/table.utils.js +0 -124
  55. package/dist/collection/components/table/table.utils.js.map +1 -1
  56. package/dist/collection/components/table/table.worker.js +1 -0
  57. package/dist/collection/components/table/table.worker.js.map +1 -1
  58. package/dist/collection/utils/events.js +27 -0
  59. package/dist/collection/utils/events.js.map +1 -0
  60. package/dist/collection/utils/throttle.js +16 -19
  61. package/dist/collection/utils/throttle.js.map +1 -1
  62. package/dist/components/nano-sortable.js +15 -7
  63. package/dist/components/nano-sortable.js.map +1 -1
  64. package/dist/components/resize-observe.js +3 -1
  65. package/dist/components/resize-observe.js.map +1 -1
  66. package/dist/components/select.js +1 -1
  67. package/dist/components/select.js.map +1 -1
  68. package/dist/components/sticker.js +3 -1
  69. package/dist/components/sticker.js.map +1 -1
  70. package/dist/components/table.js +530 -187
  71. package/dist/components/table.js.map +1 -1
  72. package/dist/components/table.worker.js +1 -1
  73. package/dist/components/throttle.js +16 -19
  74. package/dist/components/throttle.js.map +1 -1
  75. package/dist/esm/{component-store-244a8431.js → component-store-c23ebc9c.js} +2 -2
  76. package/dist/esm/{component-store-244a8431.js.map → component-store-c23ebc9c.js.map} +1 -1
  77. package/dist/esm/index.js +1 -1
  78. package/dist/esm/loader.js +1 -1
  79. package/dist/esm/nano-algolia-filter.entry.js +2 -2
  80. package/dist/esm/nano-algolia-input.entry.js +2 -2
  81. package/dist/esm/nano-algolia.entry.js +2 -2
  82. package/dist/esm/nano-checkbox-group.entry.js +1 -1
  83. package/dist/esm/nano-components.js +1 -1
  84. package/dist/esm/nano-datalist_3.entry.js +1 -1
  85. package/dist/esm/nano-dialog.entry.js +2 -2
  86. package/dist/esm/nano-global-nav-user-profile_3.entry.js +2 -2
  87. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  88. package/dist/esm/nano-global-nav.entry.js +2 -2
  89. package/dist/esm/nano-input.entry.js +1 -1
  90. package/dist/esm/nano-overflow-nav.entry.js +1 -1
  91. package/dist/esm/nano-range.entry.js +1 -1
  92. package/dist/esm/nano-resize-observe_2.entry.js +3 -1
  93. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  94. package/dist/esm/nano-sortable.entry.js +16 -8
  95. package/dist/esm/nano-sortable.entry.js.map +1 -1
  96. package/dist/esm/nano-split-pane.entry.js +1 -1
  97. package/dist/esm/nano-sticker.entry.js +4 -2
  98. package/dist/esm/nano-sticker.entry.js.map +1 -1
  99. package/dist/esm/nano-tab-group.entry.js +2 -2
  100. package/dist/esm/{nano-table-026a0d30.js → nano-table-2bbcaa8d.js} +558 -186
  101. package/dist/esm/nano-table-2bbcaa8d.js.map +1 -0
  102. package/dist/esm/nano-table.entry.js +2 -2
  103. package/dist/esm/{table.worker-c17a27ed.js → table.worker-7324ad73.js} +4 -4
  104. package/dist/esm/table.worker-7324ad73.js.map +1 -0
  105. package/dist/esm/{table.worker-bd51e29f.js → table.worker-f258383d.js} +1 -1
  106. package/dist/esm/{throttle-7836544e.js → throttle-ac4fcefa.js} +17 -20
  107. package/dist/esm/throttle-ac4fcefa.js.map +1 -0
  108. package/dist/nano-components/index.esm.js +1 -1
  109. package/dist/nano-components/nano-components.esm.js +1 -1
  110. package/dist/nano-components/nano-components.esm.js.map +1 -1
  111. package/dist/nano-components/{p-7d6065c6.entry.js → p-0697795a.entry.js} +2 -2
  112. package/dist/nano-components/p-0697795a.entry.js.map +1 -0
  113. package/dist/nano-components/{p-6975f110.entry.js → p-192902e0.entry.js} +2 -2
  114. package/dist/nano-components/{p-a6ff5ca6.js → p-1a0b5bc3.js} +2 -2
  115. package/dist/nano-components/{p-3a761d77.entry.js → p-1b791810.entry.js} +2 -2
  116. package/dist/nano-components/p-39aec880.entry.js +5 -0
  117. package/dist/nano-components/{p-3b4b7f40.entry.js → p-3eb6d833.entry.js} +2 -2
  118. package/dist/nano-components/{p-a1c0afb6.entry.js → p-4884b65a.entry.js} +2 -2
  119. package/dist/nano-components/p-52ae36ec.js +5 -0
  120. package/dist/nano-components/{p-34501eae.entry.js → p-565793a2.entry.js} +2 -2
  121. package/dist/nano-components/p-5aae2588.entry.js +5 -0
  122. package/dist/nano-components/p-5aae2588.entry.js.map +1 -0
  123. package/dist/nano-components/{p-935aef3d.entry.js → p-6920ad69.entry.js} +2 -2
  124. package/dist/nano-components/{p-1c6c94cb.entry.js → p-7baa9e14.entry.js} +2 -2
  125. package/dist/nano-components/p-7bff5224.js +5 -0
  126. package/dist/nano-components/p-7bff5224.js.map +1 -0
  127. package/dist/nano-components/{p-f60fe933.entry.js → p-898cbac7.entry.js} +2 -2
  128. package/dist/nano-components/p-9b533dc3.js +5 -0
  129. package/dist/nano-components/p-9b533dc3.js.map +1 -0
  130. package/dist/nano-components/{p-ace1ffc2.entry.js → p-a362bd23.entry.js} +2 -2
  131. package/dist/nano-components/{p-eb6c9191.entry.js → p-b72df1aa.entry.js} +2 -2
  132. package/dist/nano-components/{p-9c4efe14.entry.js → p-bf18e298.entry.js} +2 -2
  133. package/dist/nano-components/p-bf18e298.entry.js.map +1 -0
  134. package/dist/nano-components/p-ce5efc3f.entry.js +5 -0
  135. package/dist/nano-components/p-ce5efc3f.entry.js.map +1 -0
  136. package/dist/nano-components/{p-1b687f96.entry.js → p-d0eefd52.entry.js} +2 -2
  137. package/dist/nano-components/{p-1a9d9956.entry.js → p-d74e2642.entry.js} +2 -2
  138. package/dist/nano-components/{p-bd51e29f.js → p-f258383d.js} +1 -1
  139. package/dist/types/components/resize-observe/resize-observe.d.ts +2 -0
  140. package/dist/types/components/sortable/sortable.d.ts +0 -1
  141. package/dist/types/components/sticker/sticker.d.ts +2 -2
  142. package/dist/types/components/table/table-interface.d.ts +23 -11
  143. package/dist/types/components/table/table.cell.d.ts +0 -7
  144. package/dist/types/components/table/table.d.ts +10 -8
  145. package/dist/types/components/table/table.header.d.ts +0 -1
  146. package/dist/types/components/table/table.pin-service.d.ts +90 -0
  147. package/dist/types/components/table/table.row.d.ts +3 -2
  148. package/dist/types/components/table/table.utils.d.ts +0 -27
  149. package/dist/types/components.d.ts +29 -11
  150. package/dist/types/utils/events.d.ts +15 -0
  151. package/dist/types/utils/throttle.d.ts +1 -1
  152. package/docs-json.json +59 -24
  153. package/docs-vscode.json +2 -2
  154. package/hydrate/index.js +580 -194
  155. package/package.json +2 -2
  156. package/dist/cjs/nano-table-5a7a4d53.js.map +0 -1
  157. package/dist/cjs/table.worker-77e56070.js.map +0 -1
  158. package/dist/cjs/throttle-f55496c8.js.map +0 -1
  159. package/dist/esm/nano-table-026a0d30.js.map +0 -1
  160. package/dist/esm/table.worker-c17a27ed.js.map +0 -1
  161. package/dist/esm/throttle-7836544e.js.map +0 -1
  162. package/dist/nano-components/p-15217442.entry.js +0 -5
  163. package/dist/nano-components/p-15217442.entry.js.map +0 -1
  164. package/dist/nano-components/p-2e63676f.js +0 -5
  165. package/dist/nano-components/p-30cc21c2.entry.js +0 -5
  166. package/dist/nano-components/p-59eb9caa.js +0 -5
  167. package/dist/nano-components/p-59eb9caa.js.map +0 -1
  168. package/dist/nano-components/p-7759d185.entry.js +0 -5
  169. package/dist/nano-components/p-7759d185.entry.js.map +0 -1
  170. package/dist/nano-components/p-7d6065c6.entry.js.map +0 -1
  171. package/dist/nano-components/p-9746b0a5.js +0 -5
  172. package/dist/nano-components/p-9746b0a5.js.map +0 -1
  173. package/dist/nano-components/p-9c4efe14.entry.js.map +0 -1
  174. /package/dist/nano-components/{p-6975f110.entry.js.map → p-192902e0.entry.js.map} +0 -0
  175. /package/dist/nano-components/{p-a6ff5ca6.js.map → p-1a0b5bc3.js.map} +0 -0
  176. /package/dist/nano-components/{p-3a761d77.entry.js.map → p-1b791810.entry.js.map} +0 -0
  177. /package/dist/nano-components/{p-2e63676f.js.map → p-39aec880.entry.js.map} +0 -0
  178. /package/dist/nano-components/{p-3b4b7f40.entry.js.map → p-3eb6d833.entry.js.map} +0 -0
  179. /package/dist/nano-components/{p-a1c0afb6.entry.js.map → p-4884b65a.entry.js.map} +0 -0
  180. /package/dist/nano-components/{p-30cc21c2.entry.js.map → p-52ae36ec.js.map} +0 -0
  181. /package/dist/nano-components/{p-34501eae.entry.js.map → p-565793a2.entry.js.map} +0 -0
  182. /package/dist/nano-components/{p-935aef3d.entry.js.map → p-6920ad69.entry.js.map} +0 -0
  183. /package/dist/nano-components/{p-1c6c94cb.entry.js.map → p-7baa9e14.entry.js.map} +0 -0
  184. /package/dist/nano-components/{p-f60fe933.entry.js.map → p-898cbac7.entry.js.map} +0 -0
  185. /package/dist/nano-components/{p-ace1ffc2.entry.js.map → p-a362bd23.entry.js.map} +0 -0
  186. /package/dist/nano-components/{p-eb6c9191.entry.js.map → p-b72df1aa.entry.js.map} +0 -0
  187. /package/dist/nano-components/{p-1b687f96.entry.js.map → p-d0eefd52.entry.js.map} +0 -0
  188. /package/dist/nano-components/{p-1a9d9956.entry.js.map → p-d74e2642.entry.js.map} +0 -0
package/hydrate/index.js CHANGED
@@ -22240,6 +22240,7 @@ class ResizeObserve {
22240
22240
  this.nanoResizeStateChange = createEvent(this, "nanoResizeStateChange", 7);
22241
22241
  this.nanoResizeObserverReady = createEvent(this, "nanoResizeObserverReady", 7);
22242
22242
  this.nanoResizeContentFitChange = createEvent(this, "nanoResizeContentFitChange", 7);
22243
+ this.nanoResize = createEvent(this, "nanoResize", 7);
22243
22244
  this.isReady = false;
22244
22245
  this.assessChanges = () => {
22245
22246
  if (!this.currentWidth && !this.currentHeight)
@@ -22404,10 +22405,11 @@ class ResizeObserve {
22404
22405
  attachRO() {
22405
22406
  if (!window['ResizeObserver'])
22406
22407
  return;
22407
- this.ro = new ResizeObserver(() => {
22408
+ this.ro = new ResizeObserver((ro) => {
22408
22409
  const { width, height } = this.host.getBoundingClientRect();
22409
22410
  this.currentWidth = Math.ceil(width);
22410
22411
  this.currentHeight = Math.ceil(height);
22412
+ this.nanoResize.emit(ro);
22411
22413
  });
22412
22414
  this.ro.observe(this.host);
22413
22415
  }
@@ -22468,7 +22470,7 @@ class ResizeObserve {
22468
22470
  }; }
22469
22471
  }
22470
22472
 
22471
- const selectCss = ".sc-nano-select-h {\n box-sizing: border-box;\n}\n\n*.sc-nano-select, *.sc-nano-select::before, *.sc-nano-select::after {\n box-sizing: border-box;\n}\n[hidden].sc-nano-select {\n display: none !important;\n}\n[disabled].sc-nano-select-h:not([disabled=false]) {\n opacity: 0.5;\n}\n\n.form-ctrl.sc-nano-select {\n min-inline-size: 100%;\n display: block;\n}\n.form-ctrl.has-helper-end.sc-nano-select {\n display: flex;\n gap: 1rem;\n container-type: inline-size;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__wrapper.sc-nano-select {\n flex: 1 1 100%;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__helper-end.sc-nano-select {\n display: none;\n}\n@container (min-width: 350px) {\n .form-ctrl.has-helper-end .form-ctrl__helper-end {\n display: block !important;\n }\n .form-ctrl.has-helper-end .form-ctrl__helper {\n display: none !important;\n }\n}\n\n.form-ctrl__wrapper.sc-nano-select {\n display: block;\n}\n\nlabel.sc-nano-select, .form-ctrl__more.sc-nano-select, .form-ctrl__error.sc-nano-select, .form-ctrl__helper.sc-nano-select {\n display: block;\n inline-size: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\nlabel.visually-hide.sc-nano-select, .form-ctrl__more.visually-hide.sc-nano-select, .form-ctrl__error.visually-hide.sc-nano-select, .form-ctrl__helper.visually-hide.sc-nano-select {\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n block-size: 1px;\n inline-size: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n}\n\n.form-ctrl__float-label.sc-nano-select {\n padding-block: 0;\n -webkit-padding-end: 0;\n padding-inline-end: 0;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n color: var(--label-color);\n position: absolute;\n font-size: 1.15em;\n transform: translateY(-50%);\n transform-origin: top left;\n inset-block-start: 50%;\n transition: all 0.125s ease-in;\n opacity: 1;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n opacity: 0.7;\n}\n.form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 1;\n}\n.form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 50%;\n}\n.has-focus.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n.has-value.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n\n.form-ctrl__label.sc-nano-select {\n color: var(--label-color);\n font-size: var(--label-font-size);\n -webkit-padding-after: var(--padding-bottom);\n padding-block-end: var(--padding-bottom);\n line-height: 1;\n display: flex;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-wrap.sc-nano-select {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 5px;\n margin-inline-end: 5px;\n -webkit-margin-start: 0;\n margin-inline-start: 0;\n opacity: 0;\n -webkit-appearance: none;\n appearance: none;\n transition: 0.3s ease opacity;\n font-size: 0.9em;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 0;\n margin-inline-end: 0;\n -webkit-margin-start: auto;\n margin-inline-start: auto;\n font-size: 0.9em;\n opacity: 0.5;\n}\n.has-value.sc-nano-select-h .form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n opacity: 0.5;\n}\n.has-focus.sc-nano-select-h .form-ctrl__label.sc-nano-select {\n color: var(--label-color--focus);\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__label.sc-nano-select {\n color: var(--label-color--invalid);\n}\n\n.has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__more.sc-nano-select {\n block-size: 1em;\n position: relative;\n margin-block: 4px var(--padding-bottom);\n margin-inline: 3px 0;\n}\n\n.form-ctrl__helper.sc-nano-select, .form-ctrl__error.sc-nano-select {\n inset-block-start: 0;\n inset-inline-start: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n}\n\n.form-ctrl__helper.sc-nano-select {\n font-style: italic;\n color: var(--help-msg-color);\n}\n[show-inline-error].sc-nano-select-h:not([show-inline-error=false]):not([disabled]).is-invalid .form-ctrl__helper.sc-nano-select {\n opacity: 0;\n}\n\n.form-ctrl__helper-end.sc-nano-select {\n flex: 1 1 30%;\n min-inline-size: 150px;\n font-size: var(--invalid-msg-font-size);\n color: var(--help-msg-color);\n font-style: italic;\n}\n\n.form-ctrl__error.sc-nano-select {\n opacity: 0;\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__error.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n border-radius: var(--input-border-radius);\n inline-size: 100%;\n padding: 0 !important;\n position: relative;\n flex: 1 0 auto;\n display: flex;\n background: var(--input-bg-color);\n border: var(--input-border-style);\n border-width: var(--input-border-width);\n font-size: var(--input-font-size);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.has-focus.sc-nano-select-h .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--focus);\n border: var(--input-border-style--focus);\n border-width: var(--input-border-width);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n.is-invalid.has-focus.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid-focus);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n\n.form-ctrl__input-wrap.sc-nano-select {\n display: flex;\n align-items: stretch;\n flex: 1;\n max-inline-size: 100%;\n}\n\n.form-ctrl__clear-btn.sc-nano-select, .form-ctrl__slot-end.sc-nano-select, .form-ctrl__slot-start.sc-nano-select, .form-ctrl__slot-value-end.sc-nano-select {\n --nano-icon-size: 1.4em;\n margin-block: 0;\n margin-inline: 0;\n font-size: 1em;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n display: flex;\n align-items: stretch;\n inline-size: auto;\n}\n\n.has-float-label.sc-nano-select .form-ctrl__slot-start.sc-nano-select {\n display: none;\n}\n\n.form-ctrl__slot-start.sc-nano-select-s > *, .form-ctrl__slot-start .sc-nano-select-s > *, .form-ctrl__slot-end.sc-nano-select-s > *, .form-ctrl__slot-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n --nano-icon-size: 1.4em;\n padding-inline: unset;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n -webkit-padding-end: var(--padding-end);\n padding-inline-end: var(--padding-end);\n font-size: 1em;\n align-items: center;\n display: flex;\n block-size: 100%;\n z-index: 1;\n}\n.sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end .sc-nano-select-s > *, [disabled].sc-nano-select-h:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color);\n padding: 0;\n opacity: 0;\n inline-size: 0;\n -webkit-appearance: none;\n appearance: none;\n align-items: center;\n overflow: hidden;\n}\n.is-invalid.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color--invalid);\n}\n.has-value.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n padding-block: 0;\n padding-inline: var(--padding-start) var(--padding-end);\n opacity: 1;\n inline-size: auto;\n}\n.form-ctrl__clear-btn.sc-nano-select:hover {\n color: var(--clear-btn-color--hover);\n}\n\n.sc-nano-select-h {\n \n --placeholder-color: var(--nano-input-placeholder-color, initial);\n --placeholder-font-style: var(--nano-input-placeholder-style, initial);\n --placeholder-font-weight: var(--nano-input-placeholder-weight, initial);\n --placeholder-opacity: var(--nano-input-placeholder-opacity, 0.5);\n --padding-top: var(--nano-input-padding-top, var(--nano-input-padding, 8px));\n --padding-end: var(--nano-input-padding-end, var(--nano-input-padding, 8px));\n --padding-bottom: var(--nano-input-padding-bottom, var(--nano-input-padding, 6px));\n --padding-start: var(--nano-input-padding-start, var(--nano-input-padding, 8px));\n --color-invalid: var(--nano-color-danger-rgb, 239 65 53);\n --color--focus-rgb:\n var(\n --nano-color-base-rgb,\n var(--nano-color-primary-rgb, 0 116 149)\n );\n --input-font-size: var(--nano-input-font-size, 0.87em);\n --input-text-color: var(--nano-input-text-color, #4a4a4a);\n --input-border-width: var(--nano-input-border-width, 1px);\n --input-border-hint-width: 3px;\n --input-border-color: var(--nano-input-border-color, #e4e6e8);\n --input-border-radius: var(--nano-input-border-radius, 0);\n --input-border-style: var(--nano-input-border-style, solid) var(--nano-input-border-color, #e4e6e8);\n --input-border-style--focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--focus, #90c6e7);\n --input-border-style--invalid: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #e4e6e8);\n --input-border-style--invalid-focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #ef4135);\n --input-bg-color: var(--nano-input-background-color, #fff);\n --input-bg-color--focus: var(--input-bg-color);\n --input-bg-color--invalid: var(--nano-input-background-color, white);\n --invalid-msg-color: rgb(var(--color-invalid) / 100%);\n --invalid-msg-font-size: var(--nano-input-help-font-size, 0.75em);\n --help-msg-color: var(--nano-input-help-color, #616d6e);\n --clear-btn-color: var(--nano-clear-btn-color, rgba(0, 0, 0, 0.3));\n --clear-btn-color--hover: rgb(var(--color--focus-rgb) / 100%);\n --clear-btn-color--invalid: rgb(var(--color-invalid) / 100%);\n --label-color: var(--nano-input-label-color, \"currentcolor\");\n --label-color--focus: var(--label-color);\n --label-color--invalid: var(--nano-input-label-color-invalid, \"currentcolor\");\n --label-font-size: var(--nano-input-label-color, 1em);\n --multi-input-value-bg: var(--nano-input-tag-bg, 186 220 240);\n --multi-input-value-text-color: var(--nano-input-tag-color, #455556);\n --multi-input-value-border: var(--nano-input-tag-color, #badcf0);\n \n position: relative;\n width: 100%;\n padding: 0 !important;\n font-family: var(--nano-font-family, inherit);\n display: block;\n}\n\n.nano-color.sc-nano-select-h {\n --input-border-style--focus:\n var(--nano-input-border-style, solid) var(\n --nano-color-tint,\n var(--nano-color-primary-tint, #2689a5)\n );\n --multi-input-value-bg: var(--nano-color-tint-rgb);\n --multi-input-value-border: var(--nano-color-shade);\n --multi-input-value-text-color: var(--nano-color-contrast);\n color: var(--nano-color-base);\n}\n\nnano-item.sc-nano-select-h:not(.item-label), nano-item:not(.item-label) .sc-nano-select-h {\n --padding-start: 0;\n}\n\n[disabled].sc-nano-select-h:not([disabled=false]) *.sc-nano-select {\n pointer-events: none !important;\n}\n\nselect.sc-nano-select {\n display: none;\n}\n\n.select__native-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding: unset;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n text-overflow: ellipsis;\n color: var(--input-text-color);\n display: inline-block;\n flex: 1;\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n border: 0;\n outline: none;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n margin: 0;\n box-sizing: border-box;\n resize: none;\n overflow: hidden;\n cursor: default;\n line-height: 2.5em;\n \n \n}\n.has-float-label.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 2.1em;\n min-height: 2.1em;\n -webkit-padding-before: 1.4em;\n padding-block-start: 1.4em;\n}\n.select__native-input.sc-nano-select::selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::-moz-selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::placeholder {\n color: var(--placeholder-color);\n font-family: inherit;\n font-style: var(--placeholder-font-style);\n font-weight: var(--placeholder-font-weight);\n opacity: var(--placeholder-opacity);\n line-height: inherit;\n min-height: initial;\n}\n.select__native-input.sc-nano-select::-moz-placeholder {\n line-height: 2.8em;\n text-overflow: ellipsis;\n}\n.select__native-input.sc-nano-select:-webkit-autofill {\n background-color: transparent;\n}\n.select__native-input.sc-nano-select::-webkit-search-decoration, .select__native-input.sc-nano-select::-webkit-search-cancel-button, .select__native-input.sc-nano-select::-webkit-search-results-button, .select__native-input.sc-nano-select::-webkit-search-results-decoration {\n -webkit-appearance: none;\n appearance: none;\n}\n.select__native-input.sc-nano-select:invalid {\n box-shadow: none;\n}\n.select__native-input.sc-nano-select::-ms-clear, .select__native-input.sc-nano-select::-ms-reveal {\n display: none;\n}\n.select__native-input.resizable.sc-nano-select {\n resize: vertical;\n overflow: auto;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 1.5em;\n padding-block: var(--padding-top) var(--padding-bottom);\n white-space: pre-wrap;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select::placeholder {\n line-height: 1.5em;\n}\n.has-float-label.textarea.sc-nano-select .select__native-input.sc-nano-select {\n -webkit-padding-before: 1.8em;\n padding-block-start: 1.8em;\n}\n.masked.sc-nano-select-h .select__native-input.sc-nano-select {\n opacity: 0;\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n}\n\n.select__mask.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n pointer-events: none;\n line-height: 2.5em;\n min-height: 2.5em;\n}\n\n.select__multi-wrap.sc-nano-select {\n padding-block: 0 var(--padding-bottom);\n padding-inline: 0 0;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n overflow: hidden;\n align-items: flex-start;\n}\n.has-float-label.sc-nano-select-h .select__multi-wrap.sc-nano-select {\n -webkit-padding-before: 1em;\n padding-block-start: 1em;\n}\n.select__multi-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: var(--padding-bottom) 0;\n min-width: 50px;\n width: 100%;\n max-height: 100%;\n -webkit-appearance: none;\n appearance: none;\n border: 0;\n outline: none;\n display: inline-block;\n background: transparent;\n flex: 0;\n position: relative;\n box-sizing: border-box;\n line-height: calc(2.5em - var(--padding-bottom));\n height: calc(2.5em - var(--padding-bottom));\n}\n.select__multi-input.sc-nano-select:last-child {\n flex: 1;\n}\n.select__multi-value.sc-nano-select {\n margin-block: var(--padding-bottom) 0;\n margin-inline: var(--padding-start) -3px;\n background: rgb(var(--multi-input-value-bg)/80%);\n color: var(--multi-input-value-text-color);\n border: 1px solid;\n border-color: var(--multi-input-value-border);\n padding: 0.35em 0.5em;\n max-width: 100%;\n display: flex;\n align-items: center;\n font-size: var(--input-font-size);\n letter-spacing: 1px;\n max-height: calc(2.5em - 8px);\n}\n.select__multi-value.sc-nano-select span.sc-nano-select {\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n overflow: hidden;\n line-height: 1;\n}\n.select__multi-value-remove.sc-nano-select {\n background-position: center;\n -webkit-padding-start: 0.5em;\n padding-inline-start: 0.5em;\n margin: 0;\n color: inherit;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n -webkit-appearance: none;\n appearance: none;\n display: flex;\n align-items: center;\n inset-block-start: 0;\n font-size: 1em;\n}\n.select__multi-value-remove.sc-nano-select nano-icon.sc-nano-select {\n --color: var(--multi-input-value-text-color);\n}\n\n.form-ctrl__float-label.sc-nano-select {\n width: calc(100% - (1em + var(--padding-start) * 2));\n}\n.has-focus.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n}\n.has-value.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(21%);\n inset-block-start: 0;\n}\n\n.has-focus.sc-nano-select-h select.sc-nano-select, .has-focus.sc-nano-select-h a.sc-nano-select, .has-focus.sc-nano-select-h button.sc-nano-select {\n pointer-events: auto;\n}";
22473
+ const selectCss = ".sc-nano-select-h {\n box-sizing: border-box;\n}\n\n*.sc-nano-select, *.sc-nano-select::before, *.sc-nano-select::after {\n box-sizing: border-box;\n}\n[hidden].sc-nano-select {\n display: none !important;\n}\n[disabled].sc-nano-select-h:not([disabled=false]) {\n opacity: 0.5;\n}\n\n.form-ctrl.sc-nano-select {\n min-inline-size: 100%;\n display: block;\n}\n.form-ctrl.has-helper-end.sc-nano-select {\n display: flex;\n gap: 1rem;\n container-type: inline-size;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__wrapper.sc-nano-select {\n flex: 1 1 100%;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__helper-end.sc-nano-select {\n display: none;\n}\n@container (min-width: 350px) {\n .form-ctrl.has-helper-end .form-ctrl__helper-end {\n display: block !important;\n }\n .form-ctrl.has-helper-end .form-ctrl__helper {\n display: none !important;\n }\n}\n\n.form-ctrl__wrapper.sc-nano-select {\n display: block;\n}\n\nlabel.sc-nano-select, .form-ctrl__more.sc-nano-select, .form-ctrl__error.sc-nano-select, .form-ctrl__helper.sc-nano-select {\n display: block;\n inline-size: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\nlabel.visually-hide.sc-nano-select, .form-ctrl__more.visually-hide.sc-nano-select, .form-ctrl__error.visually-hide.sc-nano-select, .form-ctrl__helper.visually-hide.sc-nano-select {\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n block-size: 1px;\n inline-size: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n}\n\n.form-ctrl__float-label.sc-nano-select {\n padding-block: 0;\n -webkit-padding-end: 0;\n padding-inline-end: 0;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n color: var(--label-color);\n position: absolute;\n font-size: 1.15em;\n transform: translateY(-50%);\n transform-origin: top left;\n inset-block-start: 50%;\n transition: all 0.125s ease-in;\n opacity: 1;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n opacity: 0.7;\n}\n.form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 1;\n}\n.form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 50%;\n}\n.has-focus.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n.has-value.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n\n.form-ctrl__label.sc-nano-select {\n color: var(--label-color);\n font-size: var(--label-font-size);\n -webkit-padding-after: var(--padding-bottom);\n padding-block-end: var(--padding-bottom);\n line-height: 1;\n display: flex;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-wrap.sc-nano-select {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 5px;\n margin-inline-end: 5px;\n -webkit-margin-start: 0;\n margin-inline-start: 0;\n opacity: 0;\n -webkit-appearance: none;\n appearance: none;\n transition: 0.3s ease opacity;\n font-size: 0.9em;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 0;\n margin-inline-end: 0;\n -webkit-margin-start: auto;\n margin-inline-start: auto;\n font-size: 0.9em;\n opacity: 0.5;\n}\n.has-value.sc-nano-select-h .form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n opacity: 0.5;\n}\n.has-focus.sc-nano-select-h .form-ctrl__label.sc-nano-select {\n color: var(--label-color--focus);\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__label.sc-nano-select {\n color: var(--label-color--invalid);\n}\n\n.has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__more.sc-nano-select {\n block-size: 1em;\n position: relative;\n margin-block: 4px var(--padding-bottom);\n margin-inline: 3px 0;\n}\n\n.form-ctrl__helper.sc-nano-select, .form-ctrl__error.sc-nano-select {\n inset-block-start: 0;\n inset-inline-start: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n}\n\n.form-ctrl__helper.sc-nano-select {\n font-style: italic;\n color: var(--help-msg-color);\n}\n[show-inline-error].sc-nano-select-h:not([show-inline-error=false]):not([disabled]).is-invalid .form-ctrl__helper.sc-nano-select {\n opacity: 0;\n}\n\n.form-ctrl__helper-end.sc-nano-select {\n flex: 1 1 30%;\n min-inline-size: 150px;\n font-size: var(--invalid-msg-font-size);\n color: var(--help-msg-color);\n font-style: italic;\n}\n\n.form-ctrl__error.sc-nano-select {\n opacity: 0;\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__error.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n border-radius: var(--input-border-radius);\n inline-size: 100%;\n padding: 0 !important;\n position: relative;\n flex: 1 0 auto;\n display: flex;\n background: var(--input-bg-color);\n border: var(--input-border-style);\n border-width: var(--input-border-width);\n font-size: var(--input-font-size);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.has-focus.sc-nano-select-h .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--focus);\n border: var(--input-border-style--focus);\n border-width: var(--input-border-width);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n.is-invalid.has-focus.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid-focus);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n\n.form-ctrl__input-wrap.sc-nano-select {\n display: flex;\n align-items: stretch;\n flex: 1;\n max-inline-size: 100%;\n}\n\n.form-ctrl__clear-btn.sc-nano-select, .form-ctrl__slot-end.sc-nano-select, .form-ctrl__slot-start.sc-nano-select, .form-ctrl__slot-value-end.sc-nano-select {\n --nano-icon-size: 1.4em;\n margin-block: 0;\n margin-inline: 0;\n font-size: 1em;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n display: flex;\n align-items: stretch;\n inline-size: auto;\n}\n\n.has-float-label.sc-nano-select .form-ctrl__slot-start.sc-nano-select {\n display: none;\n}\n\n.form-ctrl__slot-start.sc-nano-select-s > *, .form-ctrl__slot-start .sc-nano-select-s > *, .form-ctrl__slot-end.sc-nano-select-s > *, .form-ctrl__slot-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n --nano-icon-size: 1.4em;\n padding-inline: unset;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n -webkit-padding-end: var(--padding-end);\n padding-inline-end: var(--padding-end);\n font-size: 1em;\n align-items: center;\n display: flex;\n block-size: 100%;\n z-index: 1;\n}\n.sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end .sc-nano-select-s > *, [disabled].sc-nano-select-h:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color);\n padding: 0;\n opacity: 0;\n inline-size: 0;\n -webkit-appearance: none;\n appearance: none;\n align-items: center;\n overflow: hidden;\n}\n.is-invalid.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color--invalid);\n}\n.has-value.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n padding-block: 0;\n padding-inline: var(--padding-start) var(--padding-end);\n opacity: 1;\n inline-size: auto;\n}\n.form-ctrl__clear-btn.sc-nano-select:hover {\n color: var(--clear-btn-color--hover);\n}\n\n.sc-nano-select-h {\n \n --placeholder-color: var(--nano-input-placeholder-color, initial);\n --placeholder-font-style: var(--nano-input-placeholder-style, initial);\n --placeholder-font-weight: var(--nano-input-placeholder-weight, initial);\n --placeholder-opacity: var(--nano-input-placeholder-opacity, 0.5);\n --padding-top: var(--nano-input-padding-top, var(--nano-input-padding, 8px));\n --padding-end: var(--nano-input-padding-end, var(--nano-input-padding, 8px));\n --padding-bottom: var(--nano-input-padding-bottom, var(--nano-input-padding, 6px));\n --padding-start: var(--nano-input-padding-start, var(--nano-input-padding, 8px));\n --color-invalid: var(--nano-color-danger-rgb, 239 65 53);\n --color--focus-rgb:\n var(\n --nano-color-base-rgb,\n var(--nano-color-primary-rgb, 0 116 149)\n );\n --input-font-size: var(--nano-input-font-size, 0.87em);\n --input-text-color: var(--nano-input-text-color, #4a4a4a);\n --input-border-width: var(--nano-input-border-width, 1px);\n --input-border-hint-width: 3px;\n --input-border-color: var(--nano-input-border-color, #e4e6e8);\n --input-border-radius: var(--nano-input-border-radius, 0);\n --input-border-style: var(--nano-input-border-style, solid) var(--nano-input-border-color, #e4e6e8);\n --input-border-style--focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--focus, #90c6e7);\n --input-border-style--invalid: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #e4e6e8);\n --input-border-style--invalid-focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #ef4135);\n --input-bg-color: var(--nano-input-background-color, #fff);\n --input-bg-color--focus: var(--input-bg-color);\n --input-bg-color--invalid: var(--nano-input-background-color, white);\n --invalid-msg-color: rgb(var(--color-invalid) / 100%);\n --invalid-msg-font-size: var(--nano-input-help-font-size, 0.75em);\n --help-msg-color: var(--nano-input-help-color, #616d6e);\n --clear-btn-color: var(--nano-clear-btn-color, rgba(0, 0, 0, 0.3));\n --clear-btn-color--hover: rgb(var(--color--focus-rgb) / 100%);\n --clear-btn-color--invalid: rgb(var(--color-invalid) / 100%);\n --label-color: var(--nano-input-label-color, \"currentcolor\");\n --label-color--focus: var(--label-color);\n --label-color--invalid: var(--nano-input-label-color-invalid, \"currentcolor\");\n --label-font-size: var(--nano-input-label-color, 1em);\n --multi-input-value-bg: var(--nano-input-tag-bg, 186 220 240);\n --multi-input-value-text-color: var(--nano-input-tag-color, #455556);\n --multi-input-value-border: var(--nano-input-tag-color, #badcf0);\n \n position: relative;\n width: 100%;\n padding: 0 !important;\n font-family: var(--nano-font-family, inherit);\n display: block;\n}\n\n.nano-color.sc-nano-select-h {\n --input-border-style--focus:\n var(--nano-input-border-style, solid) var(\n --nano-color-tint,\n var(--nano-color-primary-tint, #2689a5)\n );\n --multi-input-value-bg: var(--nano-color-tint-rgb);\n --multi-input-value-border: var(--nano-color-shade);\n --multi-input-value-text-color: var(--nano-color-contrast);\n color: var(--nano-color-base);\n}\n\nnano-item.sc-nano-select-h:not(.item-label), nano-item:not(.item-label) .sc-nano-select-h {\n --padding-start: 0;\n}\n\n[disabled].sc-nano-select-h:not([disabled=false]) *.sc-nano-select {\n pointer-events: none !important;\n}\n\nselect.sc-nano-select {\n display: none;\n}\n\n.select__native-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding: unset;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n text-overflow: ellipsis;\n color: var(--input-text-color);\n display: inline-block;\n flex: 1;\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n border: 0;\n outline: none;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n margin: 0;\n box-sizing: border-box;\n resize: none;\n overflow: hidden;\n cursor: default;\n line-height: 2.5em;\n \n \n}\n.has-float-label.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 2.1em;\n min-height: 2.1em;\n -webkit-padding-before: 1.4em;\n padding-block-start: 1.4em;\n}\n.select__native-input.sc-nano-select::selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::-moz-selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::placeholder {\n color: var(--placeholder-color);\n font-family: inherit;\n font-style: var(--placeholder-font-style);\n font-weight: var(--placeholder-font-weight);\n opacity: var(--placeholder-opacity);\n line-height: inherit;\n min-height: initial;\n}\n.select__native-input.sc-nano-select::-moz-placeholder {\n line-height: 2.8em;\n text-overflow: ellipsis;\n}\n.select__native-input.sc-nano-select:-webkit-autofill {\n background-color: transparent;\n}\n.select__native-input.sc-nano-select::-webkit-search-decoration, .select__native-input.sc-nano-select::-webkit-search-cancel-button, .select__native-input.sc-nano-select::-webkit-search-results-button, .select__native-input.sc-nano-select::-webkit-search-results-decoration {\n -webkit-appearance: none;\n appearance: none;\n}\n.select__native-input.sc-nano-select:invalid {\n box-shadow: none;\n}\n.select__native-input.sc-nano-select::-ms-clear, .select__native-input.sc-nano-select::-ms-reveal {\n display: none;\n}\n.select__native-input.resizable.sc-nano-select {\n resize: vertical;\n overflow: auto;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 1.5em;\n padding-block: var(--padding-top) var(--padding-bottom);\n white-space: pre-wrap;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select::placeholder {\n line-height: 1.5em;\n}\n.has-float-label.textarea.sc-nano-select .select__native-input.sc-nano-select {\n -webkit-padding-before: 1.8em;\n padding-block-start: 1.8em;\n}\n.masked.sc-nano-select-h .select__native-input.sc-nano-select {\n opacity: 0;\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n}\n\n.select__mask.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n pointer-events: none;\n line-height: 2.5em;\n min-height: 2.5em;\n}\n\n.select__multi-wrap.sc-nano-select {\n padding-block: 0 var(--padding-bottom);\n padding-inline: 0 0;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n overflow: hidden;\n align-items: flex-start;\n}\n.has-float-label.sc-nano-select-h .select__multi-wrap.sc-nano-select {\n -webkit-padding-before: 1em;\n padding-block-start: 1em;\n}\n.select__multi-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: var(--padding-bottom) 0;\n min-width: 50px;\n width: 100%;\n max-height: 100%;\n -webkit-appearance: none;\n appearance: none;\n border: 0;\n outline: none;\n display: inline-block;\n background: transparent;\n flex: 0;\n position: relative;\n box-sizing: border-box;\n line-height: calc(2.5em - var(--padding-bottom));\n height: calc(2.5em - var(--padding-bottom));\n}\n.select__multi-input.sc-nano-select:last-child {\n flex: 1;\n}\n.select__multi-value.sc-nano-select {\n margin-block: var(--padding-bottom) 0;\n margin-inline: var(--padding-start) -3px;\n background: rgb(var(--multi-input-value-bg)/80%);\n color: var(--multi-input-value-text-color);\n border: 1px solid;\n border-color: var(--multi-input-value-border);\n padding: 0.35em 0.5em;\n max-width: 100%;\n display: flex;\n align-items: center;\n font-size: var(--input-font-size);\n letter-spacing: 1px;\n max-height: calc(2.5em - 8px);\n}\n.select__multi-value.sc-nano-select span.sc-nano-select {\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n overflow: hidden;\n}\n.select__multi-value-remove.sc-nano-select {\n background-position: center;\n -webkit-padding-start: 0.5em;\n padding-inline-start: 0.5em;\n margin: 0;\n color: inherit;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n -webkit-appearance: none;\n appearance: none;\n display: flex;\n align-items: center;\n inset-block-start: 0;\n font-size: 1em;\n}\n.select__multi-value-remove.sc-nano-select nano-icon.sc-nano-select {\n --color: var(--multi-input-value-text-color);\n}\n\n.form-ctrl__float-label.sc-nano-select {\n width: calc(100% - (1em + var(--padding-start) * 2));\n}\n.has-focus.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n}\n.has-value.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(21%);\n inset-block-start: 0;\n}\n\n.has-focus.sc-nano-select-h select.sc-nano-select, .has-focus.sc-nano-select-h a.sc-nano-select, .has-focus.sc-nano-select-h button.sc-nano-select {\n pointer-events: auto;\n}";
22472
22474
 
22473
22475
  let selectIds = 0;
22474
22476
  /**
@@ -27519,6 +27521,19 @@ function drag(container, options) {
27519
27521
  // move(initialEvent);
27520
27522
  }
27521
27523
 
27524
+ /**
27525
+ * Add multiple event listeners with the same callback function
27526
+ * @param el the element which emits events
27527
+ * @param events the event names to listen to (string separated by a space)
27528
+ * @param fn the function to call
27529
+ * @param opts the event options to apply
27530
+ */
27531
+ function addListeners(el, events, fn, opts) {
27532
+ events
27533
+ .split(' ')
27534
+ .forEach((e) => el.addEventListener(e, fn, opts));
27535
+ }
27536
+
27522
27537
  const sortableCss = "/*!@:host*/.sc-nano-sortable-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-sortable,*.sc-nano-sortable::before,*.sc-nano-sortable::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-sortable{display:none !important}/*!@:host*/.sc-nano-sortable-h{position:relative;display:block}/*!@.sortable__live-region*/.sortable__live-region.sc-nano-sortable{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}";
27523
27538
 
27524
27539
  // Orientation map to limit dragging to horizontal or vertical.
@@ -27784,11 +27799,6 @@ class Sortable {
27784
27799
  return node.parentNode.appendChild(clone);
27785
27800
  }
27786
27801
  /// Event handlers ///
27787
- addListeners(el, events, fn, opts) {
27788
- events
27789
- .split(' ')
27790
- .forEach((e) => el.addEventListener(e, fn, opts));
27791
- }
27792
27802
  removeEventHandlers(ele) {
27793
27803
  ele = ele || this.sortableHost;
27794
27804
  ele.removeEventListener('mousedown', this.handleTrack);
@@ -27797,7 +27807,7 @@ class Sortable {
27797
27807
  }
27798
27808
  addEventHandlers(ele) {
27799
27809
  ele = ele || this.sortableHost;
27800
- this.addListeners(ele, 'mousedown touchstart', this.handleTrack, {
27810
+ addListeners(ele, 'mousedown touchstart', this.handleTrack, {
27801
27811
  passive: true,
27802
27812
  });
27803
27813
  ele.addEventListener('keydown', this.handleKeydown);
@@ -27977,7 +27987,7 @@ class Sortable {
27977
27987
  });
27978
27988
  }, 150);
27979
27989
  // reset track timer & cancel DnD on mouseup / touchend / touchmove
27980
- this.addListeners(document, 'mouseup touchend touchmove', () => clearTimeout(this.mouseDownTimer), { once: true });
27990
+ addListeners(document, 'mouseup touchend touchmove', () => clearTimeout(this.mouseDownTimer), { once: true });
27981
27991
  }
27982
27992
  /**
27983
27993
  * Initialized a drag and drop sequence if a child node was clicked that matches the itemSelector property.
@@ -28910,8 +28920,10 @@ class Sticker {
28910
28920
  }
28911
28921
  /** Find and set the stickToEle from the public, selector string */
28912
28922
  stickToChange() {
28913
- if (this.stickTo)
28923
+ if (typeof this.stickTo === 'string')
28914
28924
  this.stickToEle = this.scrollParent.querySelector(this.stickTo);
28925
+ else if (!!this.stickTo)
28926
+ this.stickToEle = this.stickTo;
28915
28927
  else
28916
28928
  this.stickToEle = undefined;
28917
28929
  }
@@ -30490,6 +30502,7 @@ function filter(workerStore, rows, filters = []) {
30490
30502
  }
30491
30503
  else {
30492
30504
  rows = filter$1(rows, {
30505
+ predicate: typeof filter.filter === 'string' ? 'AND' : 'OR',
30493
30506
  keywords: filter.filter,
30494
30507
  includePaths: [filter.prop],
30495
30508
  ignorePaths: ['__uuid', '__index'],
@@ -30843,92 +30856,6 @@ function colheadFootRender(col) {
30843
30856
  const tpl = col === null || col === void 0 ? void 0 : col.columnTemplate;
30844
30857
  return tpl ? (tpl(hAsync, col)) : (hAsync(Fragment, null, col.title));
30845
30858
  }
30846
- const stickyHIOs = new WeakMap();
30847
- const stickyVIOs = new WeakMap();
30848
- /**
30849
- * Adds element to Intersection Observer. Fires when element changes on the x axis
30850
- * @param el - an element to observe
30851
- * @param pos - the edge to watch (start or end)
30852
- * @param cb - callback when an intersection state changes.
30853
- */
30854
- function addHObserver(el, pos, cb) {
30855
- if (stickyHIOs.get(el))
30856
- return;
30857
- const store = fetchStores();
30858
- const root = store.general.state.scrollParent;
30859
- const observer = new IntersectionObserver(([e]) => {
30860
- const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
30861
- const positions = {};
30862
- if (pos === 'start') {
30863
- positions.start =
30864
- e.boundingClientRect.x - (rootBounds.x + root.scrollLeft) < 0 &&
30865
- !e.isIntersecting;
30866
- }
30867
- if (pos === 'end') {
30868
- // TODO - sort these out for RtL
30869
- positions.end =
30870
- e.boundingClientRect.right > e.boundingClientRect.width &&
30871
- !e.isIntersecting;
30872
- }
30873
- if (!!cb)
30874
- cb(positions);
30875
- }, {
30876
- threshold: [1],
30877
- rootMargin: '1px 0px 100px 0px',
30878
- root: root === document.scrollingElement ? null : root,
30879
- });
30880
- stickyHIOs.set(el, observer);
30881
- if (store.general.state.isReady) {
30882
- observer.observe(el);
30883
- }
30884
- else {
30885
- store.general.state.host.addEventListener('nanoTblReady', () => {
30886
- observer.observe(el);
30887
- }, { once: true });
30888
- }
30889
- }
30890
- /**
30891
- * Adds element to Intersection Observer. Fires when element changes on the y axis
30892
- * @param el - an element to observe
30893
- * @param pos - the edge to watch (start or end)
30894
- * @param cb - callback when an intersection state changes.
30895
- */
30896
- function addVObserver(el, pos, cb) {
30897
- if (stickyVIOs.get(el))
30898
- return;
30899
- const store = fetchStores();
30900
- const root = store.general.state.scrollParent;
30901
- const observer = new IntersectionObserver(([e]) => {
30902
- const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
30903
- const positions = {};
30904
- if (pos === 'top') {
30905
- positions.top =
30906
- e.boundingClientRect.y - (rootBounds.y + root.scrollTop) < 0 &&
30907
- !e.isIntersecting;
30908
- }
30909
- if (pos === 'bottom') {
30910
- const boundingClientRect = e.target.getBoundingClientRect();
30911
- positions.bottom =
30912
- boundingClientRect.height + boundingClientRect.y >
30913
- rootBounds.height && !e.isIntersecting;
30914
- }
30915
- if (!!cb)
30916
- cb(positions);
30917
- }, {
30918
- threshold: [1],
30919
- rootMargin: '0px 100px 0px 100px',
30920
- root: root === document.scrollingElement ? null : root,
30921
- });
30922
- stickyVIOs.set(el, observer);
30923
- if (store.general.state.isReady) {
30924
- observer.observe(el);
30925
- }
30926
- else {
30927
- store.general.state.host.addEventListener('nanoTblReady', () => {
30928
- observer.observe(el);
30929
- }, { once: true });
30930
- }
30931
- }
30932
30859
  function headerPinClasses(type, vPinned, toString = false) {
30933
30860
  const classes = {
30934
30861
  [`${CSSNAMESPACE}__${type}`]: true,
@@ -30998,7 +30925,7 @@ function isInViewport(el, percentVisible = 100) {
30998
30925
  percentVisible);
30999
30926
  }
31000
30927
 
31001
- const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned, defaults, }) => {
30928
+ const TableColHead = ({ column, onColumnSortClick, defaults, }) => {
31002
30929
  // Sort handling
31003
30930
  function handleColumnSortClick(e) {
31004
30931
  let order;
@@ -31023,7 +30950,7 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
31023
30950
  extraProps = column.columnProperties(column) || extraProps;
31024
30951
  }
31025
30952
  const baseProps = {
31026
- class: Object.assign(Object.assign({}, headerPinClasses('th', headRenderer === null || headRenderer === void 0 ? void 0 : headRenderer.pinned)), { [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start', [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end', [`${CSSNAMESPACE}__ordered`]: !!column.order, [`${CSSNAMESPACE}__filtered`]: column.filter !== undefined && column.filter !== null }),
30953
+ class: Object.assign(Object.assign({}, headerPinClasses('th', column.pinned)), { [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start', [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end', [`${CSSNAMESPACE}__ordered`]: !!column.order, [`${CSSNAMESPACE}__filtered`]: column.filter !== undefined && column.filter !== null }),
31027
30954
  };
31028
30955
  let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
31029
30956
  const content = colheadFootRender(column);
@@ -31040,12 +30967,7 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
31040
30967
  : 'none';
31041
30968
  props = Object.assign(Object.assign({}, props), { 'aria-sort': sort });
31042
30969
  }
31043
- return (hAsync("th", Object.assign({}, props, { ref: (th) => {
31044
- if (['end', 'start'].includes(column.pinned))
31045
- addHObserver(th, column.pinned, onColumnPinned);
31046
- if (['top', 'bottom'].includes(headRenderer.pinned))
31047
- addVObserver(th, headRenderer.pinned, onColumnPinned);
31048
- }, key: column.prop }), isSortable() ? (hAsync("button", { class: {
30970
+ return (hAsync("th", Object.assign({}, props, { key: column.prop }), isSortable() ? (hAsync("button", { class: {
31049
30971
  [`${CSSNAMESPACE}__order-btn`]: true,
31050
30972
  [`${CSSNAMESPACE}__cell-content`]: true,
31051
30973
  }, onClick: handleColumnSortClick },
@@ -31073,6 +30995,7 @@ function cellRender(rowIndex, colIndex) {
31073
30995
  const columns = store.config.state.columns;
31074
30996
  const tpl = (_a = columns[colIndex]) === null || _a === void 0 ? void 0 : _a.cellTemplate;
31075
30997
  const model = colDataModel(rowIndex, colIndex);
30998
+ const tableInstance = getRenderingRef();
31076
30999
  if (!!model.cellModel && columns[colIndex].type === 'date') {
31077
31000
  const d = new Date(model.cellModel);
31078
31001
  if (d instanceof Date && !isNaN(d)) {
@@ -31081,7 +31004,28 @@ function cellRender(rowIndex, colIndex) {
31081
31004
  : d;
31082
31005
  }
31083
31006
  }
31084
- return tpl ? (tpl(hAsync, model)) : model.cellModel !== undefined && model.cellModel !== null ? (hAsync(Fragment, null, (_b = model.cellModel) === null || _b === void 0 ? void 0 : _b.toString())) : ('');
31007
+ // Wrap the h pragma, then we can know if we're using Stencil's
31008
+ // jsx renderer or a different one
31009
+ let hCalled = false;
31010
+ const hWrap = (...args) => {
31011
+ hCalled = true;
31012
+ return hAsync(...args);
31013
+ };
31014
+ let tplResult = tpl ? tpl(hWrap, model) : undefined;
31015
+ if (tplResult &&
31016
+ tableInstance.customRenderer &&
31017
+ tplResult['$attrs$'] === undefined &&
31018
+ !(tplResult instanceof Element) &&
31019
+ typeof tplResult !== 'string' &&
31020
+ !hCalled) {
31021
+ // template result is jsx *not* from Stencil.
31022
+ // Render it now and output it later.
31023
+ const templateEle = document.createElement('template');
31024
+ // @ts-expect-error
31025
+ tableInstance.customRenderer(tplResult, templateEle.content);
31026
+ tplResult = templateEle;
31027
+ }
31028
+ return tplResult ? (tplResult) : model.cellModel !== undefined && model.cellModel !== null ? (hAsync(Fragment, null, (_b = model.cellModel) === null || _b === void 0 ? void 0 : _b.toString())) : ('');
31085
31029
  }
31086
31030
  const baseCellClasses = (colIndex, toString = false) => {
31087
31031
  const store = fetchStores();
@@ -31097,11 +31041,12 @@ const baseCellClasses = (colIndex, toString = false) => {
31097
31041
  return classListToStr(classes);
31098
31042
  return classes;
31099
31043
  };
31100
- const TableCell$1 = ({ rowIndex, colIndex, nestedContent, }) => {
31044
+ const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
31101
31045
  const Content = () => nestedContent
31102
31046
  ? nestedContent()
31103
31047
  : cellRender(rowIndex, colIndex) || (hAsync("span", { class: "placeholder" }, "\u00A0"));
31104
31048
  let CellType = 'td';
31049
+ const tableInstance = getRenderingRef();
31105
31050
  const store = fetchStores();
31106
31051
  const column = store.config.state.columns[colIndex];
31107
31052
  let props = mergeCellProperties(rowIndex, colIndex, {
@@ -31113,14 +31058,23 @@ const TableCell$1 = ({ rowIndex, colIndex, nestedContent, }) => {
31113
31058
  ? Object.assign(Object.assign({}, props), { scope: 'rowgroup' }) : Object.assign(Object.assign({}, props), { scope: 'row' });
31114
31059
  CellType = 'th';
31115
31060
  }
31116
- const ContentWrap = (props) => (hAsync("div", Object.assign({}, props, { class: {
31117
- [`${CSSNAMESPACE}__cell-content`]: true,
31118
- [`${CSSNAMESPACE}__cell-content--wrap`]: !!column.wrap,
31119
- } }),
31120
- hAsync(Content, null)));
31121
- return (hAsync(CellType
31122
- // role="gridcell"
31123
- , Object.assign({}, props), column.autoTooltip && !column.wrap ? (hAsync("nano-resize-observe", { notifyContentFit: "x", onNanoResizeContentFitChange: (e) => (e.target.firstElementChild.disabled =
31061
+ const ContentWrap = (props) => {
31062
+ const content = Content();
31063
+ return (hAsync("div", Object.assign({ ref: (d) => {
31064
+ if (d && content instanceof Element) {
31065
+ d.replaceChildren();
31066
+ d.append(content['content'] || content);
31067
+ }
31068
+ } }, props, { class: {
31069
+ [`${CSSNAMESPACE}__cell-content`]: true,
31070
+ [`${CSSNAMESPACE}__cell-content--wrap`]: !!column.wrap,
31071
+ }, innerHTML: typeof content === 'string' && content.includes('<')
31072
+ ? content
31073
+ : undefined }), (typeof content !== 'string' || !content.includes('<')) &&
31074
+ !(content instanceof Element) &&
31075
+ content));
31076
+ };
31077
+ return (hAsync(CellType, Object.assign({ role: tableInstance.type === 'grid' ? 'gridcell' : undefined }, props), column.autoTooltip && !column.wrap ? (hAsync("nano-resize-observe", { notifyContentFit: "x", onNanoResizeContentFitChange: (e) => (e.target.firstElementChild.disabled =
31124
31078
  e.detail.x) },
31125
31079
  hAsync("nano-tooltip", { disabled: true, placement: "top", onNanoShow: (e) => (e.target.closest(CellType).style.zIndex = '100'), onNanoHide: (e) => (e.target.closest(CellType).style.zIndex = '') },
31126
31080
  hAsync(ContentWrap, null),
@@ -31128,14 +31082,18 @@ const TableCell$1 = ({ rowIndex, colIndex, nestedContent, }) => {
31128
31082
  hAsync(Content, null))))) : (hAsync(ContentWrap, null))));
31129
31083
  };
31130
31084
 
31131
- const TableCell = ({ header, wrap }, children) => {
31132
- const cell = (hAsync("div", { class: {
31085
+ const tableCellContent = (props, children, ctx) => {
31086
+ const cell = (hAsync("div", Object.assign({}, props.wrapperProps, { class: {
31133
31087
  [`${CSSNAMESPACE}__cell-content`]: true,
31134
- [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
31135
- } }, children));
31136
- return header ? hAsync("th", { scope: "row" }, cell) : hAsync("td", null, cell);
31137
- };
31138
- const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children, utils) => {
31088
+ [`${CSSNAMESPACE}__cell-content--wrap`]: props.wrap,
31089
+ } }), children));
31090
+ return props.header ? (hAsync("th", Object.assign({ scope: ctx }, props.cellProps), cell)) : (hAsync("td", Object.assign({}, props.cellProps), cell));
31091
+ };
31092
+ const TableRow = ({ rowRenderer, rowIndex, rowModel }, children, utils) => {
31093
+ // helper, generates <td> or <th>
31094
+ const TableCell = ({ header, wrap, cellProps, wrapperProps }, children) => {
31095
+ return tableCellContent({ header, wrap, cellProps, wrapperProps }, children, 'row');
31096
+ };
31139
31097
  let extraProps = {};
31140
31098
  if (!rowModel) {
31141
31099
  const model = rowDataModel(rowIndex);
@@ -31145,13 +31103,28 @@ const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children,
31145
31103
  extraProps =
31146
31104
  rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;
31147
31105
  }
31148
- let pinned;
31106
+ let rowPinned;
31149
31107
  if ((rowRenderer === null || rowRenderer === void 0 ? void 0 : rowRenderer.pinned) && typeof rowRenderer.pinned === 'function') {
31150
- pinned = rowRenderer.pinned();
31108
+ rowPinned = rowRenderer.pinned({ rowModel, rowIndex });
31151
31109
  }
31152
- const baseProps = { class: headerPinClasses('tr', pinned) };
31153
- const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
31110
+ const props = mergeProperties({ class: headerPinClasses('tr', rowPinned, true) }, extraProps);
31154
31111
  const tpl = rowRenderer === null || rowRenderer === void 0 ? void 0 : rowRenderer.template;
31112
+ /**
31113
+ * Applies appropriate classes to td / th VNodes;
31114
+ * which can be supplied by user defined templates
31115
+ * @param children virtual / jsx node array
31116
+ * @returns virtual / jsx node array
31117
+ */
31118
+ const applyCellClasses = (children) => {
31119
+ return utils.map(children, (cNode, i) => {
31120
+ if (['td', 'th'].includes(cNode.vtag.toString())) {
31121
+ cNode.vattrs = mergeProperties({
31122
+ class: baseCellClasses(i, true),
31123
+ }, cNode.vattrs);
31124
+ }
31125
+ return cNode;
31126
+ });
31127
+ };
31155
31128
  if (tpl) {
31156
31129
  let toRender = tpl(hAsync, {
31157
31130
  renderedRow: (hAsync("tr", Object.assign({}, props, { key: rowModel.__uuid }), children)),
@@ -31163,24 +31136,9 @@ const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children,
31163
31136
  if (node.vtag === 'tr') {
31164
31137
  if (!node.vkey)
31165
31138
  node.vkey = `${rowModel.__uuid}_${i}`;
31166
- node.vattrs = mergeProperties({ class: headerPinClasses('tr', pinned, true) }, node.vattrs);
31139
+ node.vattrs = mergeProperties({ class: headerPinClasses('tr', rowPinned, true) }, node.vattrs);
31167
31140
  if (!!node.vchildren) {
31168
- node.vchildren = utils.map(node.vchildren, (cNode, i) => {
31169
- if (['td', 'th'].includes(cNode.vtag.toString())) {
31170
- cNode.vattrs = mergeProperties({
31171
- class: headerPinClasses(cNode.vtag.toString(), pinned, true) + baseCellClasses(i, true),
31172
- ref: (th) => {
31173
- if ((!!th && pinned === 'top') || pinned === 'bottom')
31174
- addVObserver(th, pinned, onColumnPinned);
31175
- if (!!th && th.classList.contains('nano-tbl__pin--end'))
31176
- addHObserver(th, 'end', onColumnPinned);
31177
- if (!!th && th.classList.contains('nano-tbl__pin--start'))
31178
- addHObserver(th, 'start', onColumnPinned);
31179
- },
31180
- }, cNode.vattrs);
31181
- }
31182
- return cNode;
31183
- });
31141
+ node.vchildren = applyCellClasses(node.vchildren);
31184
31142
  }
31185
31143
  }
31186
31144
  return node;
@@ -31188,28 +31146,25 @@ const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children,
31188
31146
  }
31189
31147
  return toRender;
31190
31148
  }
31191
- return (hAsync("tr", Object.assign({}, props, { key: rowModel.__uuid }), children));
31149
+ return (hAsync("tr", Object.assign({}, props, { key: rowModel.__uuid }), applyCellClasses(children)));
31192
31150
  };
31193
- const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
31151
+ const TableHeadFootRow = ({ rowRenderer }, // onRowPinned, onColPinned
31152
+ children, utils) => {
31194
31153
  let extraProps = {};
31195
31154
  if (rowRenderer.rowProperties) {
31196
31155
  extraProps = rowRenderer.rowProperties() || {};
31197
31156
  }
31198
- const TableCell = ({ header, wrap }, children) => {
31199
- const cell = (hAsync("div", { class: {
31200
- [`${CSSNAMESPACE}__cell-content`]: true,
31201
- [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
31202
- } }, children));
31203
- return header !== false ? hAsync("th", { scope: "col" }, cell) : hAsync("td", null, cell);
31157
+ const TableHeadFootCell = ({ header, wrap, cellProps, wrapperProps }, children) => {
31158
+ return tableCellContent({ header, wrap, cellProps, wrapperProps }, children, 'col');
31204
31159
  };
31205
31160
  const pinned = rowRenderer.pinned || null;
31206
- const baseProps = { class: headerPinClasses('tr', null) };
31161
+ const baseProps = { class: headerPinClasses('tr', pinned) };
31207
31162
  const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
31208
31163
  const tpl = rowRenderer === null || rowRenderer === void 0 ? void 0 : rowRenderer.template;
31209
31164
  if (tpl) {
31210
31165
  let toRender = tpl(hAsync, {
31211
31166
  renderedRow: hAsync("tr", Object.assign({}, props), children),
31212
- }, TableCell);
31167
+ }, TableHeadFootCell);
31213
31168
  if (Array.isArray(toRender)) {
31214
31169
  toRender = utils.map(toRender, (node) => {
31215
31170
  if (node.vtag === 'tr') {
@@ -31219,14 +31174,6 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
31219
31174
  if (['td', 'th'].includes(cNode.vtag.toString())) {
31220
31175
  cNode.vattrs = mergeProperties({
31221
31176
  class: headerPinClasses(cNode.vtag.toString(), pinned, true),
31222
- ref: (th) => {
31223
- if ((!!th && pinned === 'top') || pinned === 'bottom')
31224
- addVObserver(th, pinned, onColumnPinned);
31225
- if (!!th && th.classList.contains('nano-tbl__pin--end'))
31226
- addHObserver(th, 'end', onColumnPinned);
31227
- if (!!th && th.classList.contains('nano-tbl__pin--start'))
31228
- addHObserver(th, 'start', onColumnPinned);
31229
- },
31230
31177
  }, cNode.vattrs);
31231
31178
  }
31232
31179
  return cNode;
@@ -31241,8 +31188,399 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
31241
31188
  return hAsync("tr", Object.assign({}, props), children);
31242
31189
  };
31243
31190
 
31244
- const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px, 500px, 50vw);--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--thead-font-size:0.95rem;--thead-color:#455560;--tfoot-color:#455560;--border-color:#dddbda;--border-style:thin solid var(--border-color);--border-tint-color:#0084a9;--border-tint-style:3px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:250 250 249;--foot-bg-rgb:var(--head-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding-start:0.625rem;--td-padding-end:0.625rem;--td-padding-top:0.5rem;--td-padding-bottom:0.4125rem;--th-padding-start:0.625rem;--th-padding-end:0.625rem;--th-padding-top:0.875rem;--th-padding-bottom:0.6875rem;--td-padding-v:var(--td-padding-top) var(--td-padding-bottom);--td-padding-h:var(--td-padding-start) var(--td-padding-end);--th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--th-padding-h:var(--th-padding-start) var(--th-padding-end);--foot-th-padding-v:var(--td-padding-top) var(--td-padding-bottom);--foot-th-padding-h:var(--td-padding-start) var(--td-padding-end);--head-th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--head-th-padding-h:var(--th-padding-start) var(--th-padding-end);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;border-collapse:separate;background:rgb(var(--cell-bg-rgb));-webkit-border-end:1px solid transparent;border-inline-end:1px solid transparent;-webkit-border-before:1px solid transparent;border-block-start:1px solid transparent;position:relative;z-index:1}.nano-tbl__wrap{display:table;min-width:100%}.nano-tbl__top-anchor{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;position:relative}.nano-tbl__ordered{background-color:var(--ordered-bg);-webkit-border-start:var(--border-style);border-inline-start:var(--border-style);-webkit-border-end:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;appearance:none;color:inherit;display:flex;gap:10px;align-items:center;width:100%}.nano-tbl__order-btn:focus-visible{outline:none;box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}.nano-tbl__status-icons{margin-inline:auto 10px;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;transition:scale 0.25s;transform:scale(0);width:100%;height:0}.nano-tbl__progress-bar--show{transform:scale(1);height:auto}.nano-tbl__caption--hide{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);text-align:start;-webkit-border-before:var(--border-style);border-block-start:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}tbody:first-of-type tr:first-child .nano-tbl__td,tbody:first-of-type tr:first-child .nano-tbl__th{-webkit-border-before:none;border-block-start:none}tbody:last-of-type tr:last-child .nano-tbl__td,tbody:last-of-type tr:last-child .nano-tbl__th{-webkit-border-after:var(--border-style);border-block-end:var(--border-style)}.md .nano-tbl__td:first-child .nano-tbl__cell-content,.md .nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--bookend-col-padding);padding-inline-start:var(--bookend-col-padding)}.md .nano-tbl__td:last-child .nano-tbl__cell-content,.md .nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--bookend-col-padding);padding-inline-end:var(--bookend-col-padding)}@media (max-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--td-padding-start) !important;padding-inline-start:var(--td-padding-start) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--td-padding-end) !important;padding-inline-end:var(--td-padding-end) !important}}thead .nano-tbl__td,thead .nano-tbl__th{color:var(--thead-color);font-weight:800;background:rgb(var(--head-bg-rgb)/90%);font-size:var(--thead-font-size);-webkit-border-before:none !important;border-block-start:none !important}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--head-th-padding-v);padding-inline:var(--head-th-padding-h)}thead .nano-tbl__td .nano-sortable__keyboard-handle,thead .nano-tbl__th .nano-sortable__keyboard-handle{position:absolute;inset-inline-end:5px;inset-block-start:50%;transform:translateY(-50%);background:white;z-index:10}tfoot .nano-tbl__td,tfoot .nano-tbl__th{color:var(--tfoot-color);font-weight:800;-webkit-border-before:none;border-block-start:none;background:rgb(var(--foot-bg-rgb)/90%);font-size:var(--thead-font-size)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--foot-th-padding-v);padding-inline:var(--foot-th-padding-h)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgb(var(--ordered-bg-rgb)/80%) !important}.nano-tbl__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-block:var(--td-padding-v);padding-inline:var(--td-padding-h)}.nano-tbl__cell-content--no-result{padding-block:2rem}.nano-tbl__cell-content--wrap{white-space:normal;overflow:visible}.nano-tbl tbody{will-change:scroll-position;opacity:1;transition:0.1s ease opacity;transform:translateZ(0)}.nano-tbl tbody.nano-tbl__inactive{opacity:0}.nano-tbl tbody .nano-tbl__tr:has(~.nano-tbl__tr--placeholder){display:none}.nano-tbl tbody .nano-tbl__tr--placeholder~.nano-tbl__tr{display:none}.nano-tbl th[scope=row]{font-weight:800;margin:0}.nano-tbl__pin{position:sticky;transform:translateZ(0)}.nano-tbl__pin--start{inset-inline:-1px auto;transition:max-width 0.25s ease}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2;max-width:125px !important}.sm .nano-tbl__pinned--start .nano-tbl__pin--start{max-width:var(--max-col-width) !important}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline:auto -1px !important;max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.sm .nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}.nano-tbl__pin--top{inset-block:-1px auto}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:4 !important}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5 !important}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6 !important}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6 !important}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl tfoot tr:first-of-type td,.nano-tbl tfoot tr:first-of-type th{-webkit-border-before:none;border-block-start:none}.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th{-webkit-border-before:var(--border-tint-style) !important;border-block-start:var(--border-tint-style) !important}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th{-webkit-border-after:none !important;border-block-end:none !important}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:0}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
31191
+ function addStyleSheet(id, css) {
31192
+ const styleSheet = document.getElementById(id) ||
31193
+ document.createElement('style');
31194
+ styleSheet.id = id;
31195
+ styleSheet.innerHTML = css;
31196
+ if (!styleSheet.isConnected)
31197
+ document.head.append(styleSheet);
31198
+ }
31199
+ /**
31200
+ * Manages the complex business of table 'pinning'; sticking columns and rows to the scrolling parent element.
31201
+ *
31202
+ * *knowing* when an element is pinned is tricky.
31203
+ * Managing the display of multiple, side-by-side pinned elements is trickier still.
31204
+ *
31205
+ * Pinning table columns are very different from pinning table rows:
31206
+ * - Rows are actual elements we can select, measure and apply styles to.
31207
+ * - Columns are disparate collections of elements that are much harder to select, measure and apply styles to.
31208
+ *
31209
+ * With this in mind, how columns and rows are pinned is different:
31210
+ * Rows can have changes applied directly, Columns have changes applied via dynamic stylesheets.
31211
+ *
31212
+ * The service is slightly opinionated on how it pins rows and columns (with some room for override):
31213
+ * - Pinned columns are stuck consecutively, without overlapping.
31214
+ * e.g. If column 'name' and 'surname' are both `pin: 'start'`; 'surname' will display **next** to name.
31215
+ * Both columns are important for context
31216
+ *
31217
+ * - Pinned rows are set to overlap *when* they have the same ancestor,
31218
+ * and stuck consecutively when they have a different ancestor.
31219
+ * e.g. `tbody > tr.pin ~ tr.pin` the second row will **overlap** the first; it's unlikely both rows will be important for context.
31220
+ * `thead > tr.pin`, `tbody > tr.pin`. Both rows are required for context so will require next to each other.
31221
+ *
31222
+ * Devs can override this behaviour by setting `--pin-start`, `--pin-end`, `--pin-top`, `--pin-bottom` custom vars.
31223
+ */
31224
+ class TablePinService {
31225
+ constructor(table, scrollElement) {
31226
+ // Private state
31227
+ this.cachedColMeta = new WeakMap();
31228
+ this._pinnedStart = [];
31229
+ this._pinnedEnd = [];
31230
+ this._cssColDimensionCacheKey = '';
31231
+ this.cacheX = 0;
31232
+ this.cacheY = 0;
31233
+ this.tableEle = table;
31234
+ this.tableId = this.tableEle.id;
31235
+ this.scrollElement = scrollElement;
31236
+ // Secret sauce - `getElementsByClassName` is a live collection.
31237
+ // An HTMLCollection will keep itself up-to-date as elements come and go
31238
+ // So we can keep assessing on scroll
31239
+ this.startColumns = table
31240
+ .querySelector('thead')
31241
+ .getElementsByClassName(`${CSSNAMESPACE}__pin--start`);
31242
+ this.endColumns = table
31243
+ .querySelector('thead')
31244
+ .getElementsByClassName(`${CSSNAMESPACE}__pin--end`);
31245
+ this.topRows = table.getElementsByClassName(`${CSSNAMESPACE}__pin--top`);
31246
+ this.bottomRows = table.getElementsByClassName(`${CSSNAMESPACE}__pin--bottom`);
31247
+ this.onResize();
31248
+ }
31249
+ // Pinned cols & change detection
31250
+ get pinnedStart() {
31251
+ return this._pinnedStart;
31252
+ }
31253
+ set pinnedStart(cols) {
31254
+ this._pinnedStart = cols;
31255
+ this.handlePinnedStartChange();
31256
+ }
31257
+ /**
31258
+ * Called when columns are either pinned or unpinned.
31259
+ * Attaches a tiny stylesheet to target the 'last' start column.
31260
+ * (e.g. We only want to apply drop shadow on last pinned start column - not all pinned columns)
31261
+ */
31262
+ handlePinnedStartChange() {
31263
+ writeTask(() => {
31264
+ if (this.pinnedStart.length) {
31265
+ this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--start`);
31266
+ const lastActiveCol = this.cachedColMeta.get(this.pinnedStart[this.pinnedStart.length - 1]);
31267
+ addStyleSheet(`${this.tableId}-col-start-active-style`,
31268
+ /* css */ `
31269
+ #${this.tableId} tr > :nth-child(${lastActiveCol.idx + 1}) {
31270
+ --pin-start-active: 1;
31271
+ }
31272
+ `);
31273
+ }
31274
+ else {
31275
+ this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--start`);
31276
+ addStyleSheet(`${this.tableId}-col-start-active-style`, ``);
31277
+ }
31278
+ });
31279
+ }
31280
+ get pinnedEnd() {
31281
+ return this._pinnedEnd;
31282
+ }
31283
+ set pinnedEnd(cols) {
31284
+ this._pinnedEnd = cols;
31285
+ this.handlePinnedEndChange();
31286
+ }
31287
+ /**
31288
+ * Called when columns are either pinned or unpinned.
31289
+ * Attaches a tiny stylesheet to target the 'first' end column.
31290
+ * (e.g. We only want to apply drop shadow on first pinned end column - not all pinned columns)
31291
+ */
31292
+ handlePinnedEndChange() {
31293
+ writeTask(() => {
31294
+ if (this.pinnedEnd.length) {
31295
+ this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--end`);
31296
+ const firstActiveCol = this.cachedColMeta.get(this.pinnedEnd[0]);
31297
+ addStyleSheet(`${this.tableId}-col-end-active-style`,
31298
+ /* css */ `
31299
+ #${this.tableId} tr > :nth-child(${firstActiveCol.idx + 1}) { --pin-end-active: 1; }
31300
+ `);
31301
+ }
31302
+ else {
31303
+ this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--end`);
31304
+ addStyleSheet(`${this.tableId}-col-end-active-style`, ``);
31305
+ }
31306
+ });
31307
+ }
31308
+ get cssColDimensionCacheKey() {
31309
+ return this._cssColDimensionCacheKey;
31310
+ }
31311
+ set cssColDimensionCacheKey(key) {
31312
+ if (key === this._cssColDimensionCacheKey)
31313
+ return;
31314
+ this._cssColDimensionCacheKey = key;
31315
+ this.createPinnedColDimensionStyles();
31316
+ }
31317
+ /**
31318
+ * To only generate column dimension styles when necessary we
31319
+ * maintain a cache key string via serialised column meta.
31320
+ * Only when this key changes do we generate a new stylesheet
31321
+ */
31322
+ generateCssCacheKey() {
31323
+ let key = '';
31324
+ for (const col of this.startColumns) {
31325
+ const colMeta = this.cachedColMeta.get(col);
31326
+ key += `${colMeta.idx}-start-${colMeta.width}`;
31327
+ }
31328
+ for (const col of this.endColumns) {
31329
+ const colMeta = this.cachedColMeta.get(col);
31330
+ key += `${colMeta.idx}-start-${colMeta.width}`;
31331
+ }
31332
+ this.cssColDimensionCacheKey = key;
31333
+ }
31334
+ /**
31335
+ * Generates pinned column width offset styles
31336
+ * so pinned columns can appear stuck together,
31337
+ * then attaches a stylesheet.
31338
+ */
31339
+ createPinnedColDimensionStyles() {
31340
+ let widthS = 0;
31341
+ let widthE = 0;
31342
+ const startCols = Array.from(this.startColumns);
31343
+ const endCols = Array.from(this.endColumns).reverse();
31344
+ const css = /* css */ `
31345
+ ${startCols
31346
+ .map((col) => {
31347
+ const colMeta = this.cachedColMeta.get(col);
31348
+ widthS += colMeta.width || 0;
31349
+ return /* css */ `
31350
+ #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ td,
31351
+ #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ th {
31352
+ --pin-start: ${widthS - 1}px;
31353
+ }
31354
+ `;
31355
+ })
31356
+ .join('')}
31357
+ ${endCols
31358
+ .map((col) => {
31359
+ const colMeta = this.cachedColMeta.get(col);
31360
+ widthE += colMeta.width;
31361
+ return /* css */ `
31362
+ #${this.tableId} tr > td:has(~ :nth-child(${colMeta.idx + 1})),
31363
+ #${this.tableId} tr > th:has(~ :nth-child(${colMeta.idx + 1})) {
31364
+ --pin-end: ${widthE - 1}px;
31365
+ }
31366
+ `;
31367
+ })
31368
+ .join('')}
31369
+ `;
31370
+ addStyleSheet(`${this.tableId}-dimension-style`, css);
31371
+ }
31372
+ getParentOffsets() {
31373
+ const { x, y } = this.scrollElement.getBoundingClientRect();
31374
+ let offsetX = x;
31375
+ let offsetY = y;
31376
+ if (this.scrollElement === document.documentElement) {
31377
+ offsetX = this.scrollElement.offsetLeft;
31378
+ offsetY = this.scrollElement.offsetTop;
31379
+ }
31380
+ return { offsetX, offsetY };
31381
+ }
31382
+ /**
31383
+ * Loops through all 'top' & 'bottom' rows (on scroll or resize)
31384
+ * Manages their visual state by applying classes on stuck / unstuck
31385
+ * And their pinned offset / distance
31386
+ */
31387
+ assessRows() {
31388
+ if (!this.topRows.length && !this.bottomRows.length)
31389
+ return;
31390
+ // top rows
31391
+ if (this.topRows.length) {
31392
+ readTask(async () => {
31393
+ let heightAggregate = 0;
31394
+ let cacheParent;
31395
+ const { offsetY } = this.getParentOffsets();
31396
+ for (const topRow of this.topRows) {
31397
+ const { y, height } = topRow.getBoundingClientRect();
31398
+ const currParent = topRow.parentElement;
31399
+ // we'll use the applied `--pin-top` css var to decide row offset.
31400
+ // This allows devs to override this behaviour through selector specificity
31401
+ const pinTop = getComputedStyle(topRow).getPropertyValue('--pin-top');
31402
+ const offset = pinTop !== '' ? parseFloat(pinTop) : heightAggregate;
31403
+ // we need to wait for the row to finish sticking
31404
+ // and generating it's offset (`--pin-top`) so we can see, on
31405
+ // subsequent rows *if* the offset was applied
31406
+ await new Promise((resolve) => writeTask(() => {
31407
+ if (y - offsetY <= offset) {
31408
+ topRow.classList.add(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--top`);
31409
+ }
31410
+ else {
31411
+ topRow.classList.remove(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--top`);
31412
+ }
31413
+ // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)
31414
+ // so only aggregate height / offset when cacheParent is different from current parent.
31415
+ // Devs can override this behaviour by manually setting `--pin-bottom` on the table row
31416
+ if (cacheParent !== currParent) {
31417
+ currParent.style.setProperty('--pin-top', `${heightAggregate}px`);
31418
+ heightAggregate += height;
31419
+ cacheParent = currParent;
31420
+ }
31421
+ resolve();
31422
+ }));
31423
+ }
31424
+ });
31425
+ }
31426
+ // bottom rows
31427
+ if (this.bottomRows.length) {
31428
+ const bottomRows = Array.from(this.bottomRows).reverse();
31429
+ readTask(async () => {
31430
+ let cacheParent;
31431
+ let heightAggregate = 0;
31432
+ const { offsetY } = this.getParentOffsets();
31433
+ for (const bottomRow of bottomRows) {
31434
+ if (!bottomRow.isConnected)
31435
+ continue;
31436
+ const { y, height } = bottomRow.getBoundingClientRect();
31437
+ const currParent = bottomRow.parentElement;
31438
+ // we'll use the applied `--pin-bottom` css var to decide row offset.
31439
+ // This allows devs to override this behaviour through selector specificity
31440
+ const pinBottom = getComputedStyle(bottomRow).getPropertyValue('--pin-bottom');
31441
+ const offset = pinBottom !== '' ? parseFloat(pinBottom) : heightAggregate;
31442
+ // we need to wait for the row to finish sticking
31443
+ // and generating it's offset (`--pin-bottom`) to we can see, on
31444
+ // subsequent rows *if* the offset was applied
31445
+ await new Promise((resolve) => writeTask(() => {
31446
+ if (this.tableDims.height + offsetY - (y + height) <= offset) {
31447
+ bottomRow.classList.add(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--bottom`);
31448
+ }
31449
+ else {
31450
+ bottomRow.classList.remove(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--bottom`);
31451
+ }
31452
+ // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)
31453
+ // so only aggregate height / offset when cacheParent is different from current parent.
31454
+ // Devs can override this behaviour by manually setting `--pin-bottom` on the table row
31455
+ if (cacheParent !== currParent) {
31456
+ currParent.style.setProperty('--pin-bottom', `${heightAggregate}px`);
31457
+ heightAggregate += height;
31458
+ cacheParent = currParent;
31459
+ }
31460
+ resolve();
31461
+ }));
31462
+ }
31463
+ });
31464
+ }
31465
+ }
31466
+ /**
31467
+ * Loops through all 'start' & 'end' columns (on scroll or resize)
31468
+ * Caches meta about each column (e.g. size, position-index)
31469
+ * and decides which columns are pinned
31470
+ */
31471
+ async assessCols() {
31472
+ if (!this.startColumns.length && !this.endColumns.length)
31473
+ return;
31474
+ let boundBox;
31475
+ let currPinned;
31476
+ let parentEles;
31477
+ const done = new Promise((resolve) => {
31478
+ // start cols
31479
+ if (this.startColumns.length) {
31480
+ readTask(() => {
31481
+ const { offsetX } = this.getParentOffsets();
31482
+ // cumulatively add widths of columns together
31483
+ // 'cos columns stick together
31484
+ let widthAggregate = offsetX;
31485
+ parentEles = Array.from(this.startColumns[0].parentElement.children);
31486
+ for (const startCol of this.startColumns) {
31487
+ boundBox = startCol.getBoundingClientRect();
31488
+ // cache meta for later
31489
+ this.cachedColMeta.set(startCol, {
31490
+ width: boundBox.width,
31491
+ idx: parentEles.indexOf(startCol),
31492
+ });
31493
+ currPinned = this.pinnedStart.find((c) => c === startCol);
31494
+ if (boundBox.x < widthAggregate) {
31495
+ // this column is pinned
31496
+ if (!currPinned)
31497
+ this.pinnedStart = [
31498
+ ...this.pinnedStart,
31499
+ startCol,
31500
+ ];
31501
+ }
31502
+ else if (currPinned) {
31503
+ // this column is unpinned
31504
+ this.pinnedStart = this.pinnedStart.filter((c) => c !== startCol);
31505
+ }
31506
+ widthAggregate += boundBox.width;
31507
+ }
31508
+ if (!this.endColumns.length)
31509
+ resolve();
31510
+ });
31511
+ }
31512
+ // end cols
31513
+ if (this.endColumns.length) {
31514
+ readTask(() => {
31515
+ const endCols = Array.from(this.endColumns).reverse();
31516
+ parentEles = Array.from(this.endColumns[0].parentElement.children);
31517
+ const { offsetX } = this.getParentOffsets();
31518
+ // cumulatively add widths of columns together
31519
+ // 'cos columns stick together
31520
+ let widthAggregate = 0;
31521
+ for (const endCol of endCols) {
31522
+ boundBox = endCol.getBoundingClientRect();
31523
+ // cache meta for later
31524
+ this.cachedColMeta.set(endCol, {
31525
+ width: boundBox.width,
31526
+ idx: parentEles.indexOf(endCol),
31527
+ });
31528
+ currPinned = this.pinnedEnd.find((c) => c === endCol);
31529
+ if (this.tableDims.width + offsetX - boundBox.right <=
31530
+ widthAggregate) {
31531
+ // this column is pinned
31532
+ if (!currPinned)
31533
+ this.pinnedEnd = [endCol, ...this.pinnedEnd];
31534
+ }
31535
+ else if (currPinned) {
31536
+ // this column is unpinned
31537
+ this.pinnedEnd = this.pinnedEnd.filter((c) => c !== endCol);
31538
+ }
31539
+ widthAggregate += boundBox.width;
31540
+ }
31541
+ resolve();
31542
+ });
31543
+ }
31544
+ });
31545
+ await done;
31546
+ // potentially generate a new css stylesheet if anything changed
31547
+ this.generateCssCacheKey();
31548
+ }
31549
+ onScroll(pos) {
31550
+ if (this.cacheX !== pos.x) {
31551
+ this.cacheX = pos.x;
31552
+ this.assessCols();
31553
+ }
31554
+ if (this.cacheY !== pos.y) {
31555
+ this.cacheY = pos.y;
31556
+ this.assessRows();
31557
+ }
31558
+ }
31559
+ onResize() {
31560
+ const width = this.scrollElement.clientWidth;
31561
+ const height = this.scrollElement.clientHeight;
31562
+ this.tableDims = { width, height };
31563
+ this.assessCols();
31564
+ this.assessRows();
31565
+ }
31566
+ }
31567
+
31568
+ const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px, 500px, 50vw);--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--thead-font-size:0.95rem;--thead-color:#455560;--tfoot-color:#455560;--border-color:#dddbda;--border-style:thin solid var(--border-color);--border-tint-color:#0084a9;--border-tint-style:3px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:250 250 249;--foot-bg-rgb:var(--head-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding-start:0.625rem;--td-padding-end:0.625rem;--td-padding-top:0.6rem;--td-padding-bottom:0.6125rem;--th-padding-start:0.725rem;--th-padding-end:0.625rem;--th-padding-top:0.875rem;--th-padding-bottom:0.6875rem;--td-padding-v:var(--td-padding-top) var(--td-padding-bottom);--td-padding-h:var(--td-padding-start) var(--td-padding-end);--th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--th-padding-h:var(--th-padding-start) var(--th-padding-end);--foot-th-padding-v:var(--td-padding-top) var(--td-padding-bottom);--foot-th-padding-h:var(--td-padding-start) var(--td-padding-end);--head-th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--head-th-padding-h:var(--th-padding-start) var(--th-padding-end);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;border-collapse:separate;background:rgb(var(--cell-bg-rgb));-webkit-border-end:1px solid transparent;border-inline-end:1px solid transparent;-webkit-border-before:1px solid transparent;border-block-start:1px solid transparent;position:relative;z-index:1}.nano-tbl__wrap{display:table;min-width:100%}.nano-tbl__top-anchor{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;position:relative}.nano-tbl__ordered{background-color:var(--ordered-bg);-webkit-border-start:var(--border-style);border-inline-start:var(--border-style);-webkit-border-end:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;appearance:none;color:inherit;display:flex;gap:10px;align-items:center;width:100%}.nano-tbl__order-btn:focus-visible{outline:none;box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}.nano-tbl__status-icons{margin-inline:auto 10px;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;transition:scale 0.25s;transform:scale(0);width:100%;height:0}.nano-tbl__progress-bar--show{transform:scale(1);height:auto}.nano-tbl__caption--hide{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);text-align:start;-webkit-border-before:var(--border-style);border-block-start:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}tbody:first-of-type tr:first-child .nano-tbl__td,tbody:first-of-type tr:first-child .nano-tbl__th{-webkit-border-before:none;border-block-start:none}tbody:last-of-type tr:last-child .nano-tbl__td,tbody:last-of-type tr:last-child .nano-tbl__th{-webkit-border-after:var(--border-style);border-block-end:var(--border-style)}.md .nano-tbl__td:first-child .nano-tbl__cell-content,.md .nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--bookend-col-padding);padding-inline-start:var(--bookend-col-padding)}.md .nano-tbl__td:last-child .nano-tbl__cell-content,.md .nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--bookend-col-padding);padding-inline-end:var(--bookend-col-padding)}@media (max-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--td-padding-start) !important;padding-inline-start:var(--td-padding-start) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--td-padding-end) !important;padding-inline-end:var(--td-padding-end) !important}}thead .nano-tbl__td,thead .nano-tbl__th{color:var(--thead-color);font-weight:800;background:rgb(var(--head-bg-rgb)/100%);font-size:var(--thead-font-size);-webkit-border-before:none !important;border-block-start:none !important}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--head-th-padding-v);padding-inline:var(--head-th-padding-h)}thead .nano-tbl__td .nano-sortable__keyboard-handle,thead .nano-tbl__th .nano-sortable__keyboard-handle{position:absolute;inset-inline-end:5px;inset-block-start:50%;transform:translateY(-50%);background:white;z-index:10}tfoot .nano-tbl__td,tfoot .nano-tbl__th{color:var(--tfoot-color);font-weight:800;-webkit-border-before:none;border-block-start:none;background:rgb(var(--foot-bg-rgb)/100%);font-size:var(--thead-font-size)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--foot-th-padding-v);padding-inline:var(--foot-th-padding-h)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgb(var(--ordered-bg-rgb)/80%) !important}.nano-tbl__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-block:var(--td-padding-v);padding-inline:var(--td-padding-h)}.nano-tbl__cell-content--no-result{padding-block:2rem}.nano-tbl__cell-content--wrap{white-space:normal;overflow:visible}.nano-tbl tbody{will-change:scroll-position;opacity:1;transition:0.1s ease opacity}.nano-tbl tbody.nano-tbl__loading{z-index:-1;position:relative}.nano-tbl tbody.nano-tbl__inactive{opacity:0}.nano-tbl tbody .nano-tbl__tr:has(~.nano-tbl__tr--placeholder){display:none}.nano-tbl tbody .nano-tbl__tr--placeholder~.nano-tbl__tr{display:none}.nano-tbl th[scope=row]{font-weight:800;margin:0}.nano-tbl__pin--start{position:sticky;inset-inline-start:var(--pin-start, -1px)}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 0 4px -1px rgba(0, 0, 0, 0.2);opacity:var(--pin-start-active, 0);z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2}.nano-tbl__pin--end{position:sticky}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline-end:auto !important}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline-end:var(--pin-end, -1px);max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px -1px rgba(0, 0, 0, 0.2);opacity:var(--pin-end-active, 0);z-index:-1}.sm .nano-tbl__pinned--end .nano-tbl__pin--end{z-index:3}.nano-tbl__pin--top .nano-tbl__th,.nano-tbl__pin--top .nano-tbl__td{position:sticky;inset-block-start:var(--pin-top, -1px)}.nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__th,.nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__td{z-index:4 !important}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__pin--start{z-index:6 !important}tbody .nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__th,tbody .nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__td{box-shadow:1px 3px 4px -1px rgba(0, 0, 0, 0.1)}.nano-tbl__pin--bottom .nano-tbl__th,.nano-tbl__pin--bottom .nano-tbl__td{position:sticky;inset-block-end:var(--pin-bottom, -1px)}.nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__th,.nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__td{z-index:5 !important}.nano-tbl__pin--bottom.nano-tbl__pinned--bottom:has(~.nano-tbl__pin--bottom.nano-tbl__pinned--bottom) .nano-tbl__th,.nano-tbl__pin--bottom.nano-tbl__pinned--bottom:has(~.nano-tbl__pin--bottom.nano-tbl__pinned--bottom) .nano-tbl__td{z-index:6 !important}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__pin--start{z-index:6 !important}tbody .nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__th,tbody .nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__td{box-shadow:1px -3px 4px -1px rgba(0, 0, 0, 0.07)}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl tfoot tr:first-of-type td,.nano-tbl tfoot tr:first-of-type th{-webkit-border-before:none;border-block-start:none}.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{-webkit-border-before:var(--border-style);border-block-start:var(--border-style);-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th{-webkit-border-before:var(--border-tint-style) !important;border-block-start:var(--border-tint-style) !important}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th{-webkit-border-after:none !important;border-block-end:none !important}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:0}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
31245
31569
 
31570
+ const measurePerf = false;
31571
+ function perMark(name, end = false) {
31572
+ if (!performance || !measurePerf)
31573
+ return;
31574
+ if (end) {
31575
+ performance === null || performance === void 0 ? void 0 : performance.mark('end' + name);
31576
+ performance === null || performance === void 0 ? void 0 : performance.measure(name, 'start' + name, 'end' + name);
31577
+ const entries = performance === null || performance === void 0 ? void 0 : performance.getEntriesByName(name);
31578
+ console.log(entries[entries.length ? entries.length - 1 : 0]);
31579
+ }
31580
+ else {
31581
+ performance === null || performance === void 0 ? void 0 : performance.mark('start' + name);
31582
+ }
31583
+ }
31246
31584
  let id = 0;
31247
31585
  /**
31248
31586
  * A performant, accessible and semantic (uses real html `<table />`, `<tr />` etc) table and data-grid solution.
@@ -31274,7 +31612,6 @@ class Table {
31274
31612
  this.filters = [];
31275
31613
  this.currentFilters = '[]';
31276
31614
  this.currentSort = '';
31277
- this.cacheScrollPosition = 0;
31278
31615
  this.measureHeight = 0;
31279
31616
  this.blockHeights = [];
31280
31617
  this.unitHeight = 0;
@@ -31293,6 +31630,7 @@ class Table {
31293
31630
  const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });
31294
31631
  if (sortEvent.defaultPrevented)
31295
31632
  return;
31633
+ perMark('sort');
31296
31634
  this.currentSort = order + ':' + column;
31297
31635
  // doesn't make sense to leave user in place for a sort
31298
31636
  this.scrollToTop(element);
@@ -31336,25 +31674,40 @@ class Table {
31336
31674
  * stop loop - it's on the current active block.
31337
31675
  */
31338
31676
  this.scrollHandler = () => {
31677
+ var _a;
31678
+ let scrollPos = 0;
31679
+ perMark('scrollHandler');
31339
31680
  // don't listen if this table isn't in the viewport
31340
- if (!this.store.general.state.isActive || !this.rows)
31681
+ if (!((_a = this.store) === null || _a === void 0 ? void 0 : _a.general.state.isActive) || !this.rows)
31341
31682
  return;
31342
31683
  if (this.primaryBlockIndex === undefined)
31343
31684
  this.primaryBlockIndex = 0;
31344
31685
  readTask(() => {
31345
- this.cacheScrollPosition = this.scrollParent.scrollTop || window.scrollY;
31686
+ scrollPos =
31687
+ typeof this.scrollParent.scrollTop !== 'undefined'
31688
+ ? this.scrollParent.scrollTop
31689
+ : window.scrollY;
31690
+ scrollPos += this.host.offsetTop;
31691
+ if (this.tablePinnedService) {
31692
+ this.tablePinnedService.onScroll({
31693
+ x: typeof this.scrollParent.scrollLeft !== 'undefined'
31694
+ ? this.scrollParent.scrollLeft
31695
+ : window.scrollX,
31696
+ y: scrollPos,
31697
+ });
31698
+ }
31346
31699
  let cumulativeHeight = this.host.offsetTop;
31347
31700
  let blockIndex = 0;
31348
31701
  const blockLen = this.blocks.length;
31349
- while (blockIndex < blockLen &&
31350
- this.cacheScrollPosition >= cumulativeHeight) {
31702
+ while (blockIndex < blockLen && scrollPos >= cumulativeHeight) {
31351
31703
  cumulativeHeight += this.getBlockHeight(blockIndex);
31352
- if (this.cacheScrollPosition < cumulativeHeight) {
31704
+ if (scrollPos < cumulativeHeight) {
31353
31705
  const potentialBlocks = [
31354
31706
  blockIndex,
31355
31707
  blockIndex + 1,
31356
- Math.max(0, blockIndex - 1),
31708
+ // Math.max(0, blockIndex - 1),
31357
31709
  ];
31710
+ console.log(potentialBlocks);
31358
31711
  if (potentialBlocks.toString() !== this.activeBlocks.toString()) {
31359
31712
  this.activeBlocks = potentialBlocks;
31360
31713
  }
@@ -31362,11 +31715,7 @@ class Table {
31362
31715
  }
31363
31716
  blockIndex++;
31364
31717
  }
31365
- });
31366
- };
31367
- this.handleColumnPinned = (positions) => {
31368
- Object.entries(positions).forEach(([key, applied]) => {
31369
- this.tableEle.classList.toggle(`${CSSNAMESPACE}__pinned--${key}`, applied);
31718
+ perMark('scrollHandler', true);
31370
31719
  });
31371
31720
  };
31372
31721
  this.handleResizeChange = (e) => {
@@ -31377,12 +31726,12 @@ class Table {
31377
31726
  classes = [...e.target.className.split(' '), ...classes];
31378
31727
  this.tableWrapperEle.classList.add(...classes.filter((cl) => !!cl));
31379
31728
  };
31380
- this.jsxRenderer = undefined;
31729
+ this.customRenderer = undefined;
31381
31730
  this.type = 'table';
31382
31731
  this.caption = undefined;
31383
31732
  this.showCaption = false;
31384
31733
  this.loading = undefined;
31385
- this.internalLoading = false;
31734
+ this.internalLoading = true;
31386
31735
  this.placeholderSize = 5;
31387
31736
  this.rows = undefined;
31388
31737
  this.columns = [];
@@ -31390,14 +31739,14 @@ class Table {
31390
31739
  this.rowRender = undefined;
31391
31740
  this.footRender = { pinned: 'bottom' };
31392
31741
  this.showFooter = false;
31393
- this.perBlock = 40;
31742
+ this.perBlock = 50;
31394
31743
  this.searchTerm = undefined;
31395
31744
  this.customFilterFn = undefined;
31396
31745
  this.customSortFn = undefined;
31397
31746
  this.defaultSort = true;
31398
31747
  this.virtualTotalItems = 0;
31399
31748
  this.blocks = [];
31400
- this.activeBlocks = [0, 1, 2];
31749
+ this.activeBlocks = [0, 1];
31401
31750
  this.debounceSetLoading = debounce$2(this.debounceSetLoading.bind(this), 50);
31402
31751
  }
31403
31752
  get _loading() {
@@ -31426,6 +31775,8 @@ class Table {
31426
31775
  if (!this.isReady)
31427
31776
  requestAnimationFrame(() => this.setInitialBlockDimension());
31428
31777
  this._loading = false;
31778
+ if (this.tablePinnedService)
31779
+ this.tablePinnedService.assessRows();
31429
31780
  });
31430
31781
  }
31431
31782
  async handleColsChange() {
@@ -31443,6 +31794,10 @@ class Table {
31443
31794
  virtualTotalItemsChangeHandler() {
31444
31795
  this.setBlocks();
31445
31796
  }
31797
+ /** @readonly - shows the currently applied filters */
31798
+ get appliedFilters() {
31799
+ return this.filters;
31800
+ }
31446
31801
  /** Remove any column sorts currently applied
31447
31802
  * @returns a promise which resolves when complete */
31448
31803
  async resetSorting() {
@@ -31485,8 +31840,6 @@ class Table {
31485
31840
  }
31486
31841
  /** Updates a row model at a given index
31487
31842
  * @param row - the row to update.
31488
- * *Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property
31489
- * - rows are augmented with certain properties to aid with efficient rendering
31490
31843
  * @param rowIndex - the row index to insert this row
31491
31844
  */
31492
31845
  async updateRow(row, rowIndex) {
@@ -31517,7 +31870,9 @@ class Table {
31517
31870
  ? document
31518
31871
  : this._scrollParent).removeEventListener('scroll', this.scrollHandler);
31519
31872
  }
31520
- (ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler);
31873
+ (ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler
31874
+ // {passive: true}
31875
+ );
31521
31876
  this._scrollParent = ele;
31522
31877
  }
31523
31878
  // used to fire `nanoTblBlockRendered` on block render change
@@ -31571,17 +31926,20 @@ class Table {
31571
31926
  return Object.assign(Object.assign({}, c), { order: null });
31572
31927
  });
31573
31928
  this.nanoTblAfterSort.emit({ column: column, order });
31929
+ perMark('sort', true);
31574
31930
  }
31575
31931
  async searchStart() {
31576
31932
  this._loading = true;
31577
31933
  const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });
31578
31934
  if (sortEvent.defaultPrevented)
31579
31935
  return;
31936
+ perMark('search');
31580
31937
  // doesn't make sense to leave user in place for a search
31581
31938
  this.scrollToTop();
31582
31939
  try {
31583
31940
  await storeSearch(this.host, this.searchTerm);
31584
31941
  this.nanoTblAfterSearch.emit({ term: this.searchTerm });
31942
+ perMark('search', true);
31585
31943
  }
31586
31944
  catch (e) {
31587
31945
  console.warn('search failed', e);
@@ -31608,6 +31966,7 @@ class Table {
31608
31966
  const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });
31609
31967
  if (sortEvent.defaultPrevented)
31610
31968
  return;
31969
+ perMark('filter');
31611
31970
  this.currentFilters = JSON.stringify(this.filters);
31612
31971
  // doesn't make sense to leave user in place for a search
31613
31972
  this.scrollToTop();
@@ -31616,10 +31975,11 @@ class Table {
31616
31975
  const res = await this.customFilterFn(this.filters);
31617
31976
  // if the response is 'true', the custom filter did it's thing
31618
31977
  // handover to finish and stop loading state.
31619
- // if response is falsey, carry on to do a FE filter
31978
+ // if response is falsy, carry on to do a FE filter
31620
31979
  if (res === true) {
31621
31980
  this.filterComplete();
31622
31981
  this._loading = false;
31982
+ return;
31623
31983
  }
31624
31984
  }
31625
31985
  catch (e) {
@@ -31628,8 +31988,8 @@ class Table {
31628
31988
  console.warn('custom filter failed', e);
31629
31989
  this.currentFilters = '';
31630
31990
  this._loading = false;
31991
+ return;
31631
31992
  }
31632
- return;
31633
31993
  }
31634
31994
  try {
31635
31995
  await storeFilter(this.host, this.filters);
@@ -31645,13 +32005,22 @@ class Table {
31645
32005
  filterComplete() {
31646
32006
  this.columns = this.columns.map((c) => {
31647
32007
  const cFilter = this.filters.find((f) => f.prop === c.prop);
31648
- if (cFilter)
32008
+ // if we found a filter AND
32009
+ // it isn't true / false and has a length OR
32010
+ // it is true or false
32011
+ if (cFilter &&
32012
+ ((typeof cFilter.filter !== 'boolean' && cFilter.filter.length) ||
32013
+ typeof cFilter.filter === 'boolean'))
31649
32014
  c.filter = cFilter.filter;
31650
- else if (c.filter !== null && c.filter !== undefined)
32015
+ // if a filter value is not set OR
32016
+ // it isn't true / false and has no length
32017
+ else if ((c.filter !== null && c.filter !== undefined) ||
32018
+ (!!c.filter && typeof c.filter !== 'boolean' && !c.filter.length))
31651
32019
  c.filter = undefined;
31652
32020
  return c;
31653
32021
  });
31654
32022
  this.nanoTblAfterFilter.emit({ filters: this.filters });
32023
+ perMark('filter', true);
31655
32024
  }
31656
32025
  /** Scrolls to the top immediately - used whilst sorting / filtering */
31657
32026
  scrollToTop(element) {
@@ -31687,6 +32056,7 @@ class Table {
31687
32056
  var _a;
31688
32057
  if (!((_a = this.blockElements) === null || _a === void 0 ? void 0 : _a.length))
31689
32058
  return;
32059
+ perMark('blockDims');
31690
32060
  const testForDimensions = async () => {
31691
32061
  await this.setMeasureElement();
31692
32062
  if (this.unitHeight)
@@ -31710,6 +32080,8 @@ class Table {
31710
32080
  });
31711
32081
  // we're all finished.
31712
32082
  dimensionsReady.then(() => {
32083
+ perMark('blockDims', true);
32084
+ perMark('init', true);
31713
32085
  requestAnimationFrame(() => (this.isReady = true));
31714
32086
  });
31715
32087
  }
@@ -31732,6 +32104,8 @@ class Table {
31732
32104
  if (!!col) {
31733
32105
  await this.sortStart(col.order, col.prop);
31734
32106
  }
32107
+ if (this.tablePinnedService)
32108
+ this.tablePinnedService.assessCols();
31735
32109
  }
31736
32110
  /** Split up all incoming rows into 'blocks' split amongst tbody elements.
31737
32111
  * These can then be hidden / shown to improve performance.
@@ -31742,6 +32116,7 @@ class Table {
31742
32116
  this.blocks = [];
31743
32117
  return;
31744
32118
  }
32119
+ perMark('setBlocks');
31745
32120
  // this.ignoreIO = true;
31746
32121
  let i = 1;
31747
32122
  const l = this.virtualTotalItems > dRows.length
@@ -31764,6 +32139,7 @@ class Table {
31764
32139
  blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });
31765
32140
  }
31766
32141
  this.blocks = blocks;
32142
+ perMark('setBlocks', true);
31767
32143
  }
31768
32144
  /**
31769
32145
  * Returns a block render height.
@@ -31832,6 +32208,7 @@ class Table {
31832
32208
  }
31833
32209
  // Component lifecycle
31834
32210
  async componentWillLoad() {
32211
+ perMark('init');
31835
32212
  // setup stores
31836
32213
  this.store = await generateStore(this.host, this.columns, this.scrollParent, this.isReady);
31837
32214
  await this.handleRowsChange();
@@ -31851,6 +32228,9 @@ class Table {
31851
32228
  }
31852
32229
  componentDidLoad() {
31853
32230
  this.setInitialBlockDimension();
32231
+ if (!this.tablePinnedService) {
32232
+ this.tablePinnedService = new TablePinService(this.tableEle, this.scrollParent);
32233
+ }
31854
32234
  }
31855
32235
  componentShouldUpdate(_newVal, _oldVal, stateName) {
31856
32236
  // stop double rendering - we use the store for rendering internally
@@ -31860,9 +32240,11 @@ class Table {
31860
32240
  return false;
31861
32241
  }
31862
32242
  componentWillRender() {
32243
+ perMark('render');
31863
32244
  }
31864
32245
  componentDidRender() {
31865
32246
  this.setMeasureElement().then(() => this.setBlockHeight());
32247
+ perMark('render', true);
31866
32248
  }
31867
32249
  disconnectedCallback() {
31868
32250
  if (!this.activeWatcherIo)
@@ -31875,28 +32257,31 @@ class Table {
31875
32257
  }
31876
32258
  render() {
31877
32259
  this.blockElements = [];
31878
- return (hAsync(Host, null, hAsync("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), hAsync("nano-resize-observe", { states: "576w sm, 768w md", class: "sm md", onNanoResizeStateChange: this.handleResizeChange }), hAsync("div", { class: `${CSSNAMESPACE}__wrap sm md`, ref: (div) => (this.tableWrapperEle = div), "aria-labelledby": 'table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined }, hAsync("nano-progress-bar", { indeterminate: true, class: {
32260
+ return (hAsync(Host, null, hAsync("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), hAsync("nano-resize-observe", { states: "576w sm, 768w md", class: "sm md", onNanoResizeStateChange: this.handleResizeChange, onNanoResize: () => {
32261
+ if (this.tablePinnedService)
32262
+ this.tablePinnedService.onResize();
32263
+ } }), hAsync("div", { class: `${CSSNAMESPACE}__wrap sm md`, ref: (div) => (this.tableWrapperEle = div), "aria-labelledby": 'nano-table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined }, hAsync("nano-progress-bar", { indeterminate: true, class: {
31879
32264
  [`${CSSNAMESPACE}__progress-bar`]: true,
31880
32265
  [`${CSSNAMESPACE}__progress-bar--show`]: this._loading,
31881
- } }), hAsync("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl) }, hAsync("caption", { class: {
32266
+ } }), hAsync("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl), id: 'nano-table-' + this.renderId }, hAsync("caption", { class: {
31882
32267
  [`${CSSNAMESPACE}__caption`]: true,
31883
32268
  [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,
31884
- }, id: 'table-caption-' + this.renderId }, hAsync("slot", { name: "caption" }, this.caption)), hAsync("thead", null, hAsync(TableHeadFootRow, { rowRenderer: this.headRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
31885
- hAsync(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, onColumnPinned: this.handleColumnPinned, defaults: {
32269
+ }, id: 'nano-table-caption-' + this.renderId }, hAsync("slot", { name: "caption" }, this.caption)), hAsync("thead", null, hAsync(TableHeadFootRow, { rowRenderer: this.headRender }, this.store.config.state.columns.map((colModel) => [
32270
+ hAsync(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, defaults: {
31886
32271
  sortable: this.defaultSort,
31887
32272
  } }),
31888
- ]))), this._loading && !this.blocks.length && (hAsync("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (hAsync("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (hAsync(TableCell$1, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: () => hAsync("nano-skeleton", null) })))))))), hAsync("tr", { hidden: !!this._loading || !!this.blocks.length }, hAsync("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, hAsync("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, hAsync("slot", { name: "no-results" }, "No results found")))), this.blocks.map((block, blockIndex) => (hAsync("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
32273
+ ]))), this._loading && !this.blocks.length && (hAsync("tbody", { class: `${CSSNAMESPACE}__active ${CSSNAMESPACE}__loading` }, [...Array(10).keys()].map((rowIndex) => (hAsync("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (hAsync(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: () => hAsync("nano-skeleton", null) })))))))), hAsync("tr", { hidden: !!this._loading || !!this.blocks.length }, hAsync("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, hAsync("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, hAsync("slot", { name: "no-results" }, "No results found")))), this.blocks.map((block, blockIndex) => (hAsync("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
31889
32274
  this.blockElements.push(tb);
31890
32275
  }, class: {
31891
32276
  [`${CSSNAMESPACE}__inactive`]: !this.activeBlocks.includes(blockIndex),
31892
32277
  [`${CSSNAMESPACE}__active`]: this.activeBlocks.includes(blockIndex),
31893
32278
  } }, this.activeBlocks.includes(blockIndex) ? (block.rows.map((row, i) => {
31894
32279
  const rowIndex = blockIndex > 0 ? blockIndex * this.perBlock + i : i;
31895
- return (hAsync(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (hAsync(TableCell$1, { rowIndex: rowIndex, colIndex: colIndex })))));
31896
- })) : (hAsync("tr", null, hAsync("td", { colSpan: this.store.config.state.columns.length, style: {
32280
+ return (hAsync(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (hAsync(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
32281
+ })) : (hAsync("tr", { class: `${CSSNAMESPACE}__tr--placeholder` }, hAsync("td", { colSpan: this.store.config.state.columns.length, style: {
31897
32282
  height: this.getBlockHeight(blockIndex) + 'px',
31898
- } })))))), this.showFooter && (hAsync("tfoot", null, hAsync(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
31899
- hAsync(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned, onColumnSortClick: this.sortStart, defaults: {
32283
+ } })))))), this.showFooter && (hAsync("tfoot", null, hAsync(TableHeadFootRow, { rowRenderer: this.footRender }, this.store.config.state.columns.map((colModel) => [
32284
+ hAsync(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnSortClick: this.sortStart, defaults: {
31900
32285
  sortable: this.defaultSort,
31901
32286
  } }),
31902
32287
  ]))))), !!this.blocks.length && (hAsync("nano-spinner", { type: "circle", class: {
@@ -31916,7 +32301,7 @@ class Table {
31916
32301
  "$flags$": 4,
31917
32302
  "$tagName$": "nano-table",
31918
32303
  "$members$": {
31919
- "jsxRenderer": [16],
32304
+ "customRenderer": [16],
31920
32305
  "type": [1],
31921
32306
  "caption": [1],
31922
32307
  "showCaption": [4, "show-caption"],
@@ -31935,6 +32320,7 @@ class Table {
31935
32320
  "customSortFn": [16],
31936
32321
  "defaultSort": [4, "default-sort"],
31937
32322
  "virtualTotalItems": [2, "virtual-total-items"],
32323
+ "appliedFilters": [2064],
31938
32324
  "internalLoading": [32],
31939
32325
  "blocks": [32],
31940
32326
  "activeBlocks": [32],