@nanoporetech-digital/components 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/dom-d7c33f11.js.map +1 -1
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/{modal-f09e431f.js → modal-e4defcc3.js} +3 -3
  6. package/dist/cjs/{modal-f09e431f.js.map → modal-e4defcc3.js.map} +1 -1
  7. package/dist/cjs/nano-alert.cjs.entry.js +3 -3
  8. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-algolia.cjs.entry.js +1 -1
  10. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +1 -1
  12. package/dist/cjs/nano-aspect-ratio.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-checkbox-group.cjs.entry.js +1 -1
  14. package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-checkbox.cjs.entry.js +1 -1
  16. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-components.cjs.js +1 -1
  18. package/dist/cjs/nano-datalist_3.cjs.entry.js +2 -2
  19. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  20. package/dist/cjs/nano-date-input.cjs.entry.js +1 -1
  21. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  22. package/dist/cjs/nano-date-picker.cjs.entry.js +1 -1
  23. package/dist/cjs/nano-date-picker.cjs.entry.js.map +1 -1
  24. package/dist/cjs/nano-details.cjs.entry.js +1 -1
  25. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-dialog.cjs.entry.js +3 -3
  27. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  28. package/dist/cjs/nano-drawer.cjs.entry.js +3 -3
  29. package/dist/cjs/nano-drawer.cjs.entry.js.map +1 -1
  30. package/dist/cjs/nano-dropdown.cjs.entry.js +2 -2
  31. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  32. package/dist/cjs/nano-file-upload.cjs.entry.js +1 -1
  33. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +10 -5
  35. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  36. package/dist/cjs/nano-global-nav.cjs.entry.js +27 -14
  37. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nano-global-search-results.cjs.entry.js +1 -1
  39. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  40. package/dist/cjs/nano-grid_3.cjs.entry.js +2 -2
  41. package/dist/cjs/nano-grid_3.cjs.entry.js.map +1 -1
  42. package/dist/cjs/nano-hero.cjs.entry.js +1 -1
  43. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  44. package/dist/cjs/nano-icon-button.cjs.entry.js +1 -1
  45. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  46. package/dist/cjs/nano-icon.cjs.entry.js +1 -1
  47. package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
  48. package/dist/cjs/nano-input.cjs.entry.js +1 -1
  49. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  50. package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
  51. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  52. package/dist/cjs/nano-progress-bar.cjs.entry.js +1 -1
  53. package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -1
  54. package/dist/cjs/nano-range.cjs.entry.js +1 -1
  55. package/dist/cjs/nano-range.cjs.entry.js.map +1 -1
  56. package/dist/cjs/nano-rating.cjs.entry.js +1 -1
  57. package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
  58. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +23 -12
  59. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  60. package/dist/cjs/nano-slide.cjs.entry.js +1 -1
  61. package/dist/cjs/nano-slide.cjs.entry.js.map +1 -1
  62. package/dist/cjs/nano-slides.cjs.entry.js +1 -1
  63. package/dist/cjs/nano-slides.cjs.entry.js.map +1 -1
  64. package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
  65. package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
  66. package/dist/cjs/nano-split-pane.cjs.entry.js +1 -1
  67. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  68. package/dist/cjs/nano-sticker.cjs.entry.js +1 -1
  69. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  70. package/dist/cjs/nano-tab-content.cjs.entry.js +1 -1
  71. package/dist/cjs/nano-tab-content.cjs.entry.js.map +1 -1
  72. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  73. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  74. package/dist/cjs/nano-tab.cjs.entry.js +1 -1
  75. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  76. package/dist/cjs/{nano-table-7dbe799c.js → nano-table-2ddb22be.js} +23 -23
  77. package/dist/cjs/nano-table-2ddb22be.js.map +1 -0
  78. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  79. package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
  80. package/dist/cjs/nano-tooltip.cjs.entry.js.map +1 -1
  81. package/dist/cjs/{tabbable-de4c23d8.js → tabbable-bdf10c84.js} +13 -4
  82. package/dist/cjs/tabbable-bdf10c84.js.map +1 -0
  83. package/dist/cjs/{table.worker-fe960deb.js → table.worker-ec62a083.js} +2 -2
  84. package/dist/cjs/table.worker-ec62a083.js.map +1 -0
  85. package/dist/collection/components/alert/alert.css +16 -56
  86. package/dist/collection/components/algolia/algolia.css +5 -22
  87. package/dist/collection/components/aspect-ratio/aspect-ratio.css +2 -4
  88. package/dist/collection/components/checkbox/checkbox-group.css +8 -19
  89. package/dist/collection/components/checkbox/checkbox.css +24 -61
  90. package/dist/collection/components/date-input/date-input.css +8 -29
  91. package/dist/collection/components/date-picker/date-picker.css +22 -61
  92. package/dist/collection/components/details/details.css +7 -27
  93. package/dist/collection/components/dialog/dialog.css +20 -79
  94. package/dist/collection/components/drawer/drawer.css +13 -42
  95. package/dist/collection/components/dropdown/dropdown.css +5 -13
  96. package/dist/collection/components/file-upload/file-upload.css +45 -127
  97. package/dist/collection/components/global-nav/global-nav.js +26 -13
  98. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  99. package/dist/collection/components/global-nav/style/global-nav.css +138 -298
  100. package/dist/collection/components/global-search-results/global-search-results.css +81 -248
  101. package/dist/collection/components/grid/grid.css +21 -76
  102. package/dist/collection/components/hero/hero.css +22 -63
  103. package/dist/collection/components/icon/icon.css +2 -5
  104. package/dist/collection/components/icon-button/icon-button.css +4 -15
  105. package/dist/collection/components/img/img.css +9 -19
  106. package/dist/collection/components/input/input.css +34 -148
  107. package/dist/collection/components/menu/menu.css +1 -2
  108. package/dist/collection/components/menu-drawer/menu-drawer.css +16 -47
  109. package/dist/collection/components/nav-item/nav-item.css +73 -147
  110. package/dist/collection/components/nav-item/nav-item.js +8 -3
  111. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  112. package/dist/collection/components/option/option.css +10 -40
  113. package/dist/collection/components/progress-bar/progress-bar.css +5 -26
  114. package/dist/collection/components/range/range.css +20 -56
  115. package/dist/collection/components/rating/rating.css +9 -28
  116. package/dist/collection/components/resize-observe/resize-observe.js +38 -12
  117. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  118. package/dist/collection/components/select/select.css +56 -210
  119. package/dist/collection/components/skeleton/skeleton.css +2 -17
  120. package/dist/collection/components/slides/slide.css +4 -13
  121. package/dist/collection/components/slides/slides.css +3 -14
  122. package/dist/collection/components/spinner/spinner.css +34 -122
  123. package/dist/collection/components/split-pane/split-pane.css +4 -18
  124. package/dist/collection/components/sticker/sticker.css +8 -18
  125. package/dist/collection/components/table/table.children.js +10 -10
  126. package/dist/collection/components/table/table.children.js.map +1 -1
  127. package/dist/collection/components/table/table.css +87 -41
  128. package/dist/collection/components/table/table.js +18 -17
  129. package/dist/collection/components/table/table.js.map +1 -1
  130. package/dist/collection/components/table/table.service.js +1 -1
  131. package/dist/collection/components/table/table.service.js.map +1 -1
  132. package/dist/collection/components/tabs/tab-content.css +11 -59
  133. package/dist/collection/components/tabs/tab-group.css +20 -77
  134. package/dist/collection/components/tabs/tab.css +11 -30
  135. package/dist/collection/components/tooltip/tooltip.css +26 -56
  136. package/dist/collection/utils/dom.js.map +1 -1
  137. package/dist/collection/utils/modal.js +1 -1
  138. package/dist/collection/utils/modal.js.map +1 -1
  139. package/dist/collection/utils/tabbable.js +12 -3
  140. package/dist/collection/utils/tabbable.js.map +1 -1
  141. package/dist/components/algolia.js +1 -1
  142. package/dist/components/algolia.js.map +1 -1
  143. package/dist/components/date-picker.js +1 -1
  144. package/dist/components/date-picker.js.map +1 -1
  145. package/dist/components/dom.js.map +1 -1
  146. package/dist/components/dropdown.js +1 -1
  147. package/dist/components/dropdown.js.map +1 -1
  148. package/dist/components/grid.js +1 -1
  149. package/dist/components/grid.js.map +1 -1
  150. package/dist/components/icon-button.js +1 -1
  151. package/dist/components/icon-button.js.map +1 -1
  152. package/dist/components/icon.js +1 -1
  153. package/dist/components/icon.js.map +1 -1
  154. package/dist/components/img.js +1 -1
  155. package/dist/components/img.js.map +1 -1
  156. package/dist/components/input.js +1 -1
  157. package/dist/components/input.js.map +1 -1
  158. package/dist/components/menu.js +1 -1
  159. package/dist/components/menu.js.map +1 -1
  160. package/dist/components/modal.js +1 -1
  161. package/dist/components/modal.js.map +1 -1
  162. package/dist/components/nano-alert.js +1 -1
  163. package/dist/components/nano-alert.js.map +1 -1
  164. package/dist/components/nano-aspect-ratio.js +1 -1
  165. package/dist/components/nano-aspect-ratio.js.map +1 -1
  166. package/dist/components/nano-checkbox-group.js +1 -1
  167. package/dist/components/nano-checkbox-group.js.map +1 -1
  168. package/dist/components/nano-checkbox.js +1 -1
  169. package/dist/components/nano-checkbox.js.map +1 -1
  170. package/dist/components/nano-date-input.js +1 -1
  171. package/dist/components/nano-date-input.js.map +1 -1
  172. package/dist/components/nano-details.js +1 -1
  173. package/dist/components/nano-details.js.map +1 -1
  174. package/dist/components/nano-dialog.js +1 -1
  175. package/dist/components/nano-dialog.js.map +1 -1
  176. package/dist/components/nano-drawer.js +1 -1
  177. package/dist/components/nano-drawer.js.map +1 -1
  178. package/dist/components/nano-file-upload.js +1 -1
  179. package/dist/components/nano-file-upload.js.map +1 -1
  180. package/dist/components/nano-global-nav.js +27 -14
  181. package/dist/components/nano-global-nav.js.map +1 -1
  182. package/dist/components/nano-global-search-results.js +1 -1
  183. package/dist/components/nano-global-search-results.js.map +1 -1
  184. package/dist/components/nano-hero.js +1 -1
  185. package/dist/components/nano-hero.js.map +1 -1
  186. package/dist/components/nano-menu-drawer.js +1 -1
  187. package/dist/components/nano-menu-drawer.js.map +1 -1
  188. package/dist/components/nano-range.js +1 -1
  189. package/dist/components/nano-range.js.map +1 -1
  190. package/dist/components/nano-rating.js +1 -1
  191. package/dist/components/nano-rating.js.map +1 -1
  192. package/dist/components/nano-slide.js +1 -1
  193. package/dist/components/nano-slide.js.map +1 -1
  194. package/dist/components/nano-slides.js +1 -1
  195. package/dist/components/nano-slides.js.map +1 -1
  196. package/dist/components/nano-split-pane.js +1 -1
  197. package/dist/components/nano-split-pane.js.map +1 -1
  198. package/dist/components/nano-tab-content.js +1 -1
  199. package/dist/components/nano-tab-content.js.map +1 -1
  200. package/dist/components/nano-tab-group.js +1 -1
  201. package/dist/components/nano-tab-group.js.map +1 -1
  202. package/dist/components/nano-tab.js +1 -1
  203. package/dist/components/nano-tab.js.map +1 -1
  204. package/dist/components/nano-table.js +21 -21
  205. package/dist/components/nano-table.js.map +1 -1
  206. package/dist/components/nav-item.js +9 -4
  207. package/dist/components/nav-item.js.map +1 -1
  208. package/dist/components/option.js +1 -1
  209. package/dist/components/option.js.map +1 -1
  210. package/dist/components/progress-bar.js +1 -1
  211. package/dist/components/progress-bar.js.map +1 -1
  212. package/dist/components/resize-observe.js +23 -13
  213. package/dist/components/resize-observe.js.map +1 -1
  214. package/dist/components/select.js +1 -1
  215. package/dist/components/select.js.map +1 -1
  216. package/dist/components/skeleton.js +1 -1
  217. package/dist/components/skeleton.js.map +1 -1
  218. package/dist/components/spinner.js +1 -1
  219. package/dist/components/spinner.js.map +1 -1
  220. package/dist/components/sticker.js +1 -1
  221. package/dist/components/sticker.js.map +1 -1
  222. package/dist/components/tabbable.js +12 -3
  223. package/dist/components/tabbable.js.map +1 -1
  224. package/dist/components/tooltip.js +1 -1
  225. package/dist/components/tooltip.js.map +1 -1
  226. package/dist/custom-elements/index.js +128 -91
  227. package/dist/custom-elements/index.js.map +1 -1
  228. package/dist/esm/dom-d3ad49e2.js.map +1 -1
  229. package/dist/esm/index.js +1 -1
  230. package/dist/esm/loader.js +1 -1
  231. package/dist/esm/{modal-215df46b.js → modal-5c9ce466.js} +3 -3
  232. package/dist/esm/{modal-215df46b.js.map → modal-5c9ce466.js.map} +1 -1
  233. package/dist/esm/nano-alert.entry.js +3 -3
  234. package/dist/esm/nano-alert.entry.js.map +1 -1
  235. package/dist/esm/nano-algolia.entry.js +1 -1
  236. package/dist/esm/nano-algolia.entry.js.map +1 -1
  237. package/dist/esm/nano-aspect-ratio.entry.js +1 -1
  238. package/dist/esm/nano-aspect-ratio.entry.js.map +1 -1
  239. package/dist/esm/nano-checkbox-group.entry.js +1 -1
  240. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  241. package/dist/esm/nano-checkbox.entry.js +1 -1
  242. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  243. package/dist/esm/nano-components.js +1 -1
  244. package/dist/esm/nano-datalist_3.entry.js +2 -2
  245. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  246. package/dist/esm/nano-date-input.entry.js +1 -1
  247. package/dist/esm/nano-date-input.entry.js.map +1 -1
  248. package/dist/esm/nano-date-picker.entry.js +1 -1
  249. package/dist/esm/nano-date-picker.entry.js.map +1 -1
  250. package/dist/esm/nano-details.entry.js +1 -1
  251. package/dist/esm/nano-details.entry.js.map +1 -1
  252. package/dist/esm/nano-dialog.entry.js +3 -3
  253. package/dist/esm/nano-dialog.entry.js.map +1 -1
  254. package/dist/esm/nano-drawer.entry.js +3 -3
  255. package/dist/esm/nano-drawer.entry.js.map +1 -1
  256. package/dist/esm/nano-dropdown.entry.js +2 -2
  257. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  258. package/dist/esm/nano-file-upload.entry.js +1 -1
  259. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  260. package/dist/esm/nano-global-nav-user-profile_3.entry.js +10 -5
  261. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  262. package/dist/esm/nano-global-nav.entry.js +27 -14
  263. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  264. package/dist/esm/nano-global-search-results.entry.js +1 -1
  265. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  266. package/dist/esm/nano-grid_3.entry.js +2 -2
  267. package/dist/esm/nano-grid_3.entry.js.map +1 -1
  268. package/dist/esm/nano-hero.entry.js +1 -1
  269. package/dist/esm/nano-hero.entry.js.map +1 -1
  270. package/dist/esm/nano-icon-button.entry.js +1 -1
  271. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  272. package/dist/esm/nano-icon.entry.js +1 -1
  273. package/dist/esm/nano-icon.entry.js.map +1 -1
  274. package/dist/esm/nano-input.entry.js +1 -1
  275. package/dist/esm/nano-input.entry.js.map +1 -1
  276. package/dist/esm/nano-menu-drawer.entry.js +1 -1
  277. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  278. package/dist/esm/nano-progress-bar.entry.js +1 -1
  279. package/dist/esm/nano-progress-bar.entry.js.map +1 -1
  280. package/dist/esm/nano-range.entry.js +1 -1
  281. package/dist/esm/nano-range.entry.js.map +1 -1
  282. package/dist/esm/nano-rating.entry.js +1 -1
  283. package/dist/esm/nano-rating.entry.js.map +1 -1
  284. package/dist/esm/nano-resize-observe_2.entry.js +23 -12
  285. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  286. package/dist/esm/nano-slide.entry.js +1 -1
  287. package/dist/esm/nano-slide.entry.js.map +1 -1
  288. package/dist/esm/nano-slides.entry.js +1 -1
  289. package/dist/esm/nano-slides.entry.js.map +1 -1
  290. package/dist/esm/nano-spinner.entry.js +1 -1
  291. package/dist/esm/nano-spinner.entry.js.map +1 -1
  292. package/dist/esm/nano-split-pane.entry.js +1 -1
  293. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  294. package/dist/esm/nano-sticker.entry.js +1 -1
  295. package/dist/esm/nano-sticker.entry.js.map +1 -1
  296. package/dist/esm/nano-tab-content.entry.js +1 -1
  297. package/dist/esm/nano-tab-content.entry.js.map +1 -1
  298. package/dist/esm/nano-tab-group.entry.js +1 -1
  299. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  300. package/dist/esm/nano-tab.entry.js +1 -1
  301. package/dist/esm/nano-tab.entry.js.map +1 -1
  302. package/dist/esm/{nano-table-93d25a68.js → nano-table-9d4fbd41.js} +23 -23
  303. package/dist/esm/nano-table-9d4fbd41.js.map +1 -0
  304. package/dist/esm/nano-table.entry.js +1 -1
  305. package/dist/esm/nano-tooltip.entry.js +1 -1
  306. package/dist/esm/nano-tooltip.entry.js.map +1 -1
  307. package/dist/esm/{tabbable-614f515e.js → tabbable-31485ff7.js} +13 -4
  308. package/dist/esm/tabbable-31485ff7.js.map +1 -0
  309. package/dist/esm/{table.worker-5d681b97.js → table.worker-1ba8ac3f.js} +2 -2
  310. package/dist/esm/table.worker-1ba8ac3f.js.map +1 -0
  311. package/dist/nano-components/index.esm.js +1 -1
  312. package/dist/nano-components/nano-components.css +1 -1
  313. package/dist/nano-components/nano-components.esm.js +1 -1
  314. package/dist/nano-components/{p-35295332.entry.js → p-151aad1e.entry.js} +5 -5
  315. package/dist/nano-components/{p-35295332.entry.js.map → p-151aad1e.entry.js.map} +1 -1
  316. package/dist/nano-components/p-15543295.entry.js +5 -0
  317. package/dist/nano-components/{p-6e3412d2.entry.js.map → p-15543295.entry.js.map} +1 -1
  318. package/dist/nano-components/p-1e709f87.entry.js +5 -0
  319. package/dist/nano-components/p-1e709f87.entry.js.map +1 -0
  320. package/dist/nano-components/p-1f347342.entry.js +5 -0
  321. package/dist/nano-components/{p-02df1f62.entry.js.map → p-1f347342.entry.js.map} +1 -1
  322. package/dist/nano-components/p-216ece9a.js +5 -0
  323. package/dist/nano-components/{p-39124baa.entry.js.map → p-216ece9a.js.map} +0 -0
  324. package/dist/nano-components/p-23575705.entry.js +5 -0
  325. package/dist/nano-components/{p-6958df8c.entry.js.map → p-23575705.entry.js.map} +1 -1
  326. package/dist/nano-components/p-244223f0.entry.js +5 -0
  327. package/dist/nano-components/{p-6cd59e58.entry.js.map → p-244223f0.entry.js.map} +1 -1
  328. package/dist/nano-components/p-284dd9a2.entry.js +5 -0
  329. package/dist/nano-components/{p-5107646c.entry.js.map → p-284dd9a2.entry.js.map} +1 -1
  330. package/dist/nano-components/p-2cb4615b.entry.js +5 -0
  331. package/dist/nano-components/{p-e3730878.entry.js.map → p-2cb4615b.entry.js.map} +1 -1
  332. package/dist/nano-components/p-36842a50.entry.js +5 -0
  333. package/dist/nano-components/{p-f69f93e9.entry.js.map → p-36842a50.entry.js.map} +1 -1
  334. package/dist/nano-components/p-41addb3a.entry.js +5 -0
  335. package/dist/nano-components/{p-0a5ad0ef.entry.js.map → p-41addb3a.entry.js.map} +1 -1
  336. package/dist/nano-components/{p-9a385481.js → p-45abbbdd.js} +2 -2
  337. package/dist/nano-components/p-45abbbdd.js.map +1 -0
  338. package/dist/nano-components/p-46b348b7.entry.js +5 -0
  339. package/dist/nano-components/{p-28f713fb.entry.js.map → p-46b348b7.entry.js.map} +1 -1
  340. package/dist/nano-components/p-4b69178e.entry.js +5 -0
  341. package/dist/nano-components/{p-5e33798f.entry.js.map → p-4b69178e.entry.js.map} +1 -1
  342. package/dist/nano-components/p-4f0e14b5.entry.js +5 -0
  343. package/dist/nano-components/{p-8f5e0022.entry.js.map → p-4f0e14b5.entry.js.map} +1 -1
  344. package/dist/nano-components/p-559a6492.entry.js +5 -0
  345. package/dist/nano-components/p-559a6492.entry.js.map +1 -0
  346. package/dist/nano-components/p-601e18d5.entry.js +5 -0
  347. package/dist/nano-components/p-601e18d5.entry.js.map +1 -0
  348. package/dist/nano-components/p-69e5a37d.entry.js +5 -0
  349. package/dist/nano-components/{p-282987e6.entry.js.map → p-69e5a37d.entry.js.map} +1 -1
  350. package/dist/nano-components/p-751927d1.entry.js +5 -0
  351. package/dist/nano-components/{p-5d81773d.entry.js.map → p-751927d1.entry.js.map} +1 -1
  352. package/dist/nano-components/p-845ae77e.js.map +1 -1
  353. package/dist/nano-components/p-866e7e88.js +5 -0
  354. package/dist/nano-components/p-866e7e88.js.map +1 -0
  355. package/dist/nano-components/{p-39124baa.entry.js → p-89b8ce4f.entry.js} +2 -2
  356. package/dist/nano-components/{p-619a1c8e.js.map → p-89b8ce4f.entry.js.map} +0 -0
  357. package/dist/nano-components/p-9059c8c1.entry.js +5 -0
  358. package/dist/nano-components/{p-d8e8d7e3.entry.js.map → p-9059c8c1.entry.js.map} +1 -1
  359. package/dist/nano-components/p-92504f7f.entry.js +5 -0
  360. package/dist/nano-components/{p-50fcb11c.entry.js.map → p-92504f7f.entry.js.map} +1 -1
  361. package/dist/nano-components/p-99fbae74.entry.js +5 -0
  362. package/dist/nano-components/{p-8a52a411.entry.js.map → p-99fbae74.entry.js.map} +1 -1
  363. package/dist/nano-components/p-9eeed8f5.entry.js +5 -0
  364. package/dist/nano-components/{p-4c97f05f.entry.js.map → p-9eeed8f5.entry.js.map} +1 -1
  365. package/dist/nano-components/p-a183e3c7.entry.js +5 -0
  366. package/dist/nano-components/{p-b290a970.entry.js.map → p-a183e3c7.entry.js.map} +1 -1
  367. package/dist/nano-components/p-a2e38472.entry.js +5 -0
  368. package/dist/nano-components/p-a2e38472.entry.js.map +1 -0
  369. package/dist/nano-components/p-b87539f0.entry.js +5 -0
  370. package/dist/nano-components/{p-efa8c520.entry.js.map → p-b87539f0.entry.js.map} +1 -1
  371. package/dist/nano-components/p-b9c8b99f.entry.js +5 -0
  372. package/dist/nano-components/p-b9c8b99f.entry.js.map +1 -0
  373. package/dist/nano-components/{p-cb79d1ec.js → p-c9a7c7ea.js} +2 -2
  374. package/dist/nano-components/{p-cb79d1ec.js.map → p-c9a7c7ea.js.map} +1 -1
  375. package/dist/nano-components/{p-c45851c3.entry.js → p-d1c8eca4.entry.js} +2 -2
  376. package/dist/nano-components/{p-c45851c3.entry.js.map → p-d1c8eca4.entry.js.map} +1 -1
  377. package/dist/nano-components/p-d8678bdc.entry.js +5 -0
  378. package/dist/nano-components/p-d8678bdc.entry.js.map +1 -0
  379. package/dist/nano-components/p-db4b6602.entry.js +5 -0
  380. package/dist/nano-components/{p-716064b6.entry.js.map → p-db4b6602.entry.js.map} +1 -1
  381. package/dist/nano-components/{p-916e4b6b.entry.js → p-dba8a88d.entry.js} +2 -2
  382. package/dist/nano-components/{p-916e4b6b.entry.js.map → p-dba8a88d.entry.js.map} +1 -1
  383. package/dist/nano-components/p-e4e41e06.entry.js +5 -0
  384. package/dist/nano-components/p-e4e41e06.entry.js.map +1 -0
  385. package/dist/nano-components/p-e5408bc8.entry.js +5 -0
  386. package/dist/nano-components/{p-c5bb5540.entry.js.map → p-e5408bc8.entry.js.map} +1 -1
  387. package/dist/nano-components/p-f43d1d8e.entry.js +5 -0
  388. package/dist/nano-components/{p-66099557.entry.js.map → p-f43d1d8e.entry.js.map} +1 -1
  389. package/dist/nano-components/p-f7471cca.entry.js +5 -0
  390. package/dist/nano-components/{p-66ad1418.entry.js.map → p-f7471cca.entry.js.map} +1 -1
  391. package/dist/nano-components/p-fe94eeff.entry.js +5 -0
  392. package/dist/nano-components/{p-701e8ebf.entry.js.map → p-fe94eeff.entry.js.map} +1 -1
  393. package/dist/nano-components/p-feb9f164.entry.js +5 -0
  394. package/dist/nano-components/{p-81136f24.entry.js.map → p-feb9f164.entry.js.map} +1 -1
  395. package/dist/themes/nanopore.css +1 -1
  396. package/dist/themes/nanopore.css.map +1 -1
  397. package/dist/types/components/global-nav/global-nav.d.ts +8 -3
  398. package/dist/types/components/resize-observe/resize-observe.d.ts +5 -2
  399. package/dist/types/components/table/table.d.ts +8 -7
  400. package/dist/types/components.d.ts +4 -0
  401. package/dist/types/utils/dom.d.ts +1 -1
  402. package/docs-json.json +167 -7
  403. package/docs-vscode.json +1 -1
  404. package/package.json +2 -2
  405. package/dist/cjs/nano-table-7dbe799c.js.map +0 -1
  406. package/dist/cjs/tabbable-de4c23d8.js.map +0 -1
  407. package/dist/cjs/table.worker-fe960deb.js.map +0 -1
  408. package/dist/collection/components/global-nav/search-widget.js +0 -4
  409. package/dist/collection/components/global-nav/search-widget.js.map +0 -1
  410. package/dist/esm/nano-table-93d25a68.js.map +0 -1
  411. package/dist/esm/tabbable-614f515e.js.map +0 -1
  412. package/dist/esm/table.worker-5d681b97.js.map +0 -1
  413. package/dist/nano-components/p-02df1f62.entry.js +0 -5
  414. package/dist/nano-components/p-0a5ad0ef.entry.js +0 -5
  415. package/dist/nano-components/p-282987e6.entry.js +0 -5
  416. package/dist/nano-components/p-28b43ee9.entry.js +0 -5
  417. package/dist/nano-components/p-28b43ee9.entry.js.map +0 -1
  418. package/dist/nano-components/p-28f713fb.entry.js +0 -5
  419. package/dist/nano-components/p-37553477.entry.js +0 -5
  420. package/dist/nano-components/p-37553477.entry.js.map +0 -1
  421. package/dist/nano-components/p-42fa11c3.entry.js +0 -5
  422. package/dist/nano-components/p-42fa11c3.entry.js.map +0 -1
  423. package/dist/nano-components/p-4c386a43.js +0 -5
  424. package/dist/nano-components/p-4c386a43.js.map +0 -1
  425. package/dist/nano-components/p-4c97f05f.entry.js +0 -5
  426. package/dist/nano-components/p-50fcb11c.entry.js +0 -5
  427. package/dist/nano-components/p-5107646c.entry.js +0 -5
  428. package/dist/nano-components/p-5d81773d.entry.js +0 -5
  429. package/dist/nano-components/p-5e33798f.entry.js +0 -5
  430. package/dist/nano-components/p-619a1c8e.js +0 -5
  431. package/dist/nano-components/p-653a25f8.entry.js +0 -5
  432. package/dist/nano-components/p-653a25f8.entry.js.map +0 -1
  433. package/dist/nano-components/p-66099557.entry.js +0 -5
  434. package/dist/nano-components/p-66ad1418.entry.js +0 -5
  435. package/dist/nano-components/p-6958df8c.entry.js +0 -5
  436. package/dist/nano-components/p-6cd59e58.entry.js +0 -5
  437. package/dist/nano-components/p-6e3412d2.entry.js +0 -5
  438. package/dist/nano-components/p-701e8ebf.entry.js +0 -5
  439. package/dist/nano-components/p-716064b6.entry.js +0 -5
  440. package/dist/nano-components/p-81136f24.entry.js +0 -5
  441. package/dist/nano-components/p-8a52a411.entry.js +0 -5
  442. package/dist/nano-components/p-8f5e0022.entry.js +0 -5
  443. package/dist/nano-components/p-9a385481.js.map +0 -1
  444. package/dist/nano-components/p-a151dea5.entry.js +0 -5
  445. package/dist/nano-components/p-a151dea5.entry.js.map +0 -1
  446. package/dist/nano-components/p-b290a970.entry.js +0 -5
  447. package/dist/nano-components/p-c5bb5540.entry.js +0 -5
  448. package/dist/nano-components/p-d8e8d7e3.entry.js +0 -5
  449. package/dist/nano-components/p-e3730878.entry.js +0 -5
  450. package/dist/nano-components/p-efa8c520.entry.js +0 -5
  451. package/dist/nano-components/p-f69f93e9.entry.js +0 -5
  452. package/dist/nano-components/p-f71f69c9.entry.js +0 -5
  453. package/dist/nano-components/p-f71f69c9.entry.js.map +0 -1
  454. package/dist/nano-components/p-fa2a6733.entry.js +0 -5
  455. package/dist/nano-components/p-fa2a6733.entry.js.map +0 -1
  456. package/dist/types/components/global-nav/search-widget.d.ts +0 -0
@@ -12,6 +12,48 @@
12
12
  }
13
13
  @charset "UTF-8";
14
14
  nano-table {
15
+ /**
16
+ * @prop --max-col-width: Default 200px;
17
+
18
+ * @prop --color: Deafults to var(--nano-color-mediumgrey, #68767e);
19
+ * @prop --font-size: Deafults to 0.87rem;
20
+ * @prop --cell-line-height: Deafults to 1.5;
21
+
22
+ * @prop --border-color: Deafults to var(--nano-color-palegrey, #b5aea7);
23
+ * @prop --border-style: Deafults to thin solid var(--border-color);
24
+ * @prop --border-tint-color: Deafults to var(--nano-color-blue, #90c6e7);
25
+ * @prop --border-tint-style: Deafults to 2px solid var(--border-tint-color);
26
+
27
+ * @prop --cell-bg-rgb: Deafults to var(--nano-color-white-rgb, 255 255 255);
28
+ * @prop --head-bg-rgb: Deafults to var(--cell-bg-rgb);
29
+ * @prop --foot-bg-rgb: Deafults to var(--cell-bg-rgb);
30
+ * @prop --th-row-bg-rgb: Deafults to var(--cell-bg-rgb);
31
+ * @prop --ordered-bg-rgb: Deafults to var(--nano-color-offwhite-rgb, 249 249 251);
32
+
33
+ * @prop --td-padding-start: Deafults to 0.625rem;
34
+ * @prop --td-padding-end: Deafults to 0.625rem;
35
+ * @prop --td-padding-top: Deafults to 0.5rem;
36
+ * @prop --td-padding-bottom: Deafults to 0.4125rem;
37
+
38
+ * @prop --th-padding-start: Deafults to 0.625rem;
39
+ * @prop --th-padding-end: Deafults to 0.625rem;
40
+ * @prop --th-padding-top: Deafults to 0.875rem;
41
+ * @prop --th-padding-bottom: Deafults to 0.6875rem;
42
+
43
+ * @prop --td-padding-v: Deafults to var(--td-padding-top) var(--td-padding-bottom);
44
+ * @prop --td-padding-h: Deafults to var(--td-padding-start) var(--td-padding-end);
45
+
46
+ * @prop --th-padding-v: Deafults to var(--th-padding-top) var(--th-padding-bottom);
47
+ * @prop --th-padding-h: Deafults to var(--th-padding-start) var(--th-padding-end);
48
+
49
+ * @prop --foot-th-padding-v: Deafults to var(--td-padding-top) var(--td-padding-bottom);
50
+ * @prop --foot-th-padding-h: Deafults to var(--td-padding-start) var(--td-padding-end);
51
+
52
+ * @prop --head-th-padding-v: Deafults to var(--th-padding-top) var(--th-padding-bottom);
53
+ * @prop --head-th-padding-h: Deafults to var(--th-padding-start) var(--th-padding-end);
54
+
55
+ * @prop --bookend-col-padding: Deafults to 2rem;
56
+ */
15
57
  display: block;
16
58
  width: 100%;
17
59
  --max-col-width: 200px;
@@ -19,7 +61,7 @@ nano-table {
19
61
  --font-size: 0.87rem;
20
62
  --cell-line-height: 1.5;
21
63
  --border-color: var(--nano-color-palegrey, #b5aea7);
22
- --border-style: 1px solid var(--border-color);
64
+ --border-style: thin solid var(--border-color);
23
65
  --border-tint-color: var(--nano-color-blue, #90c6e7);
24
66
  --border-tint-style: 2px solid var(--border-tint-color);
25
67
  --cell-bg-rgb: var(--nano-color-white-rgb, 255 255 255);
@@ -27,10 +69,22 @@ nano-table {
27
69
  --foot-bg-rgb: var(--cell-bg-rgb);
28
70
  --th-row-bg-rgb: var(--cell-bg-rgb);
29
71
  --ordered-bg-rgb: var(--nano-color-offwhite-rgb, 249 249 251);
30
- --td-padding: 0.5rem 0.625rem 0.4125rem;
31
- --th-padding: 0.875rem 0.625rem 0.6875rem;
32
- --head-th-padding: var(--th-padding);
33
- --foot-th-padding: var(--td-padding);
72
+ --td-padding-start: 0.625rem;
73
+ --td-padding-end: 0.625rem;
74
+ --td-padding-top: 0.5rem;
75
+ --td-padding-bottom: 0.4125rem;
76
+ --th-padding-start: 0.625rem;
77
+ --th-padding-end: 0.625rem;
78
+ --th-padding-top: 0.875rem;
79
+ --th-padding-bottom: 0.6875rem;
80
+ --td-padding-v: var(--td-padding-top) var(--td-padding-bottom);
81
+ --td-padding-h: var(--td-padding-start) var(--td-padding-end);
82
+ --th-padding-v: var(--th-padding-top) var(--th-padding-bottom);
83
+ --th-padding-h: var(--th-padding-start) var(--th-padding-end);
84
+ --foot-th-padding-v: var(--td-padding-top) var(--td-padding-bottom);
85
+ --foot-th-padding-h: var(--td-padding-start) var(--td-padding-end);
86
+ --head-th-padding-v: var(--th-padding-top) var(--th-padding-bottom);
87
+ --head-th-padding-h: var(--th-padding-start) var(--th-padding-end);
34
88
  --bookend-col-padding: 2rem;
35
89
  }
36
90
 
@@ -42,8 +96,7 @@ nano-table {
42
96
  border-spacing: 0 0;
43
97
  border-collapse: separate;
44
98
  background: rgb(var(--cell-bg-rgb));
45
- -webkit-border-end: 1px solid transparent;
46
- border-inline-end: 1px solid transparent;
99
+ border-inline-end: 1px solid transparent;
47
100
  }
48
101
  .nano-tbl__wrap {
49
102
  display: table;
@@ -59,13 +112,12 @@ nano-table {
59
112
  overflow: hidden;
60
113
  padding: 0;
61
114
  position: absolute;
115
+ position: relative;
62
116
  }
63
117
  .nano-tbl__ordered {
64
118
  background-color: var(--ordered-bg);
65
- -webkit-border-start: var(--border-style);
66
- border-inline-start: var(--border-style);
67
- -webkit-border-end: var(--border-style);
68
- border-inline-end: var(--border-style);
119
+ border-inline-start: var(--border-style);
120
+ border-inline-end: var(--border-style);
69
121
  }
70
122
  .nano-tbl__order-btn {
71
123
  padding: 0;
@@ -74,22 +126,15 @@ nano-table {
74
126
  font: inherit;
75
127
  background: none;
76
128
  -webkit-appearance: none;
77
- -moz-appearance: none;
78
129
  appearance: none;
79
130
  color: inherit;
80
- display: -webkit-box;
81
- display: -ms-flexbox;
82
131
  display: flex;
83
132
  gap: 10px;
84
- -webkit-box-align: center;
85
- -ms-flex-align: center;
86
- align-items: center;
133
+ align-items: center;
87
134
  width: 100%;
88
135
  }
89
136
  .nano-tbl__status-icons {
90
137
  margin-inline: auto 10px;
91
- display: -webkit-box;
92
- display: -ms-flexbox;
93
138
  display: flex;
94
139
  gap: 10px;
95
140
  }
@@ -99,7 +144,6 @@ nano-table {
99
144
  inset-block-start: 0;
100
145
  inset-inline: 0;
101
146
  z-index: 10;
102
- -webkit-transition: scale 0.25s;
103
147
  transition: scale 0.25s;
104
148
  scale: 0;
105
149
  width: 100%;
@@ -123,34 +167,41 @@ nano-table {
123
167
  .nano-tbl__td, .nano-tbl__th {
124
168
  line-height: var(--cell-line-height);
125
169
  text-align: start;
126
- -webkit-border-after: var(--border-style);
127
- border-block-end: var(--border-style);
170
+ border-block-start: var(--border-style);
128
171
  max-width: var(--max-col-width);
129
172
  background-color: rgb(var(--cell-bg-rgb));
130
173
  }
131
174
  .md .nano-tbl__td:first-child .nano-tbl__cell-content, .md .nano-tbl__th:first-child .nano-tbl__cell-content {
132
- -webkit-padding-start: var(--bookend-col-padding) !important;
133
- padding-inline-start: var(--bookend-col-padding) !important;
175
+ padding-inline-start: var(--bookend-col-padding);
134
176
  }
135
177
  .md .nano-tbl__td:last-child .nano-tbl__cell-content, .md .nano-tbl__th:last-child .nano-tbl__cell-content {
136
- -webkit-padding-end: var(--bookend-col-padding) !important;
137
- padding-inline-end: var(--bookend-col-padding) !important;
178
+ padding-inline-end: var(--bookend-col-padding);
179
+ }
180
+ @media (max-width: 768px) {
181
+ .nano-tbl__td:first-child .nano-tbl__cell-content, .nano-tbl__th:first-child .nano-tbl__cell-content {
182
+ padding-inline-start: var(--td-padding-start) !important;
183
+ }
184
+ .nano-tbl__td:last-child .nano-tbl__cell-content, .nano-tbl__th:last-child .nano-tbl__cell-content {
185
+ padding-inline-end: var(--td-padding-end) !important;
186
+ }
138
187
  }
139
188
  thead .nano-tbl__td, thead .nano-tbl__th {
140
189
  font-weight: 800;
141
190
  background: rgba(var(--head-bg-rgb), 90%);
191
+ border-block-start: none;
142
192
  }
143
193
  thead .nano-tbl__td .nano-tbl__cell-content, thead .nano-tbl__th .nano-tbl__cell-content {
144
- padding: var(--head-th-padding);
194
+ padding-block: var(--head-th-padding-v);
195
+ padding-inline: var(--head-th-padding-h);
145
196
  }
146
197
  tfoot .nano-tbl__td, tfoot .nano-tbl__th {
147
198
  font-weight: 800;
148
- -webkit-border-after: none;
149
- border-block-end: none;
199
+ border-block-end: none;
150
200
  background: rgba(var(--foot-bg-rgb), 90%);
151
201
  }
152
202
  tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell-content {
153
- padding: var(--foot-th-padding);
203
+ padding-block: var(--foot-th-padding-v);
204
+ padding-inline: var(--foot-th-padding-h);
154
205
  }
155
206
  .nano-tbl__td.nano-tbl__ordered, .nano-tbl__th.nano-tbl__ordered {
156
207
  background-color: rgba(var(--ordered-bg-rgb), 0.8) !important;
@@ -159,7 +210,8 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
159
210
  overflow: hidden;
160
211
  text-overflow: ellipsis;
161
212
  white-space: nowrap;
162
- padding: var(--td-padding);
213
+ padding-block: var(--td-padding-v);
214
+ padding-inline: var(--td-padding-h);
163
215
  }
164
216
  .nano-tbl tbody {
165
217
  will-change: scroll-position;
@@ -181,15 +233,13 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
181
233
  }
182
234
  .nano-tbl__pin--start {
183
235
  inset-inline: -1px auto;
184
- -webkit-transition: max-width 0.25s;
185
236
  transition: max-width 0.25s;
186
237
  }
187
238
  .nano-tbl__pin--start::after {
188
239
  content: "";
189
240
  position: absolute;
190
241
  inset: 0;
191
- -webkit-box-shadow: 5px 0 4px 0 rgba(0, 0, 0, 0.2);
192
- box-shadow: 5px 0 4px 0 rgba(0, 0, 0, 0.2);
242
+ box-shadow: 5px 1px 4px 0 rgba(0, 0, 0, 0.2);
193
243
  opacity: 0;
194
244
  z-index: -1;
195
245
  }
@@ -225,8 +275,7 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
225
275
  content: "";
226
276
  position: absolute;
227
277
  inset: 0;
228
- -webkit-box-shadow: -5px 0 4px 0 rgba(0, 0, 0, 0.2);
229
- box-shadow: -5px 0 4px 0 rgba(0, 0, 0, 0.2);
278
+ box-shadow: -5px 1px 4px 0 rgba(0, 0, 0, 0.2);
230
279
  opacity: 0;
231
280
  z-index: -1;
232
281
  }
@@ -247,8 +296,7 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
247
296
  }
248
297
  .nano-tbl__pinned--bottom .nano-tbl__pin--bottom {
249
298
  z-index: 5;
250
- -webkit-border-before: var(--border-tint-style);
251
- border-block-start: var(--border-tint-style);
299
+ border-block-start: var(--border-tint-style);
252
300
  }
253
301
  .nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start {
254
302
  z-index: 6;
@@ -266,15 +314,13 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
266
314
  .nano-tbl thead tr:last-of-type th,
267
315
  .nano-tbl tfoot tr:last-of-type td,
268
316
  .nano-tbl tfoot tr:last-of-type th {
269
- -webkit-border-after: var(--border-tint-style);
270
- border-block-end: var(--border-tint-style);
317
+ border-block-end: var(--border-tint-style);
271
318
  }
272
319
  .nano-tbl .unlimited-width {
273
320
  max-width: none;
274
321
  }
275
322
  .nano-tbl__spinner {
276
323
  font-size: 1.5rem;
277
- -webkit-transition: scale 0.25s;
278
324
  transition: scale 0.25s;
279
325
  scale: 0;
280
326
  padding: 0.5rem;
@@ -24,13 +24,14 @@ function perMark(name, end = false) {
24
24
  let id = 0;
25
25
  /**
26
26
  * A performant, accessible and semantic (uses real html `<table />`, `<tr />` etc) table and data-grid solution.
27
- * - Built-in search
28
- * - Built-in column filter
29
- * - Built-in column sort
30
- * - Easily swap in API / async based search / filter & sort
31
- * - Pin headers, footers, rows, columns
32
- * - Add custom rendering at every level
33
- * - Add custom properties at every level
27
+ *
28
+ *- Built-in search
29
+ *- Built-in column filter
30
+ *- Built-in column sort
31
+ *- Easily swap in API / async based search / filter & sort
32
+ *- Pin headers, footers, rows, columns
33
+ *- Add custom rendering at every level
34
+ *- Add custom properties at every level
34
35
  *
35
36
  * @slot caption - The table's caption. You must either use this or the `caption` attribute.
36
37
  */
@@ -141,7 +142,7 @@ export class Table {
141
142
  this.type = 'table';
142
143
  this.caption = undefined;
143
144
  this.showCaption = false;
144
- this._loading = true;
145
+ this._loading = false;
145
146
  this.placeholderSize = 5;
146
147
  this.rows = undefined;
147
148
  this.columns = [];
@@ -357,8 +358,8 @@ export class Table {
357
358
  if (this.topAnchorEle && !isInViewport(this.topAnchorEle, 0.1)) {
358
359
  this.host.scrollIntoView();
359
360
  }
360
- if (element)
361
- element.scrollIntoView({ block: 'start' });
361
+ if (element && !isInViewport(element, 1))
362
+ setTimeout(() => element.scrollIntoView({ block: 'start' }), 500);
362
363
  if (scrollX)
363
364
  this.scrollParent.scrollLeft = scrollX;
364
365
  if (scrollBehaviour)
@@ -375,7 +376,7 @@ export class Table {
375
376
  * So we just estimate for now
376
377
  */
377
378
  setInitialBlockDimension() {
378
- if (!this.blockElements.length)
379
+ if (!this.blockElements?.length)
379
380
  return;
380
381
  perMark('blockDims');
381
382
  const finishResizing = new Promise((resolve) => {
@@ -529,15 +530,15 @@ export class Table {
529
530
  }
530
531
  render() {
531
532
  this.blockElements = [];
532
- return (h(Host, null, h("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), h("nano-resize-observe", { "aria-labelledby": 'table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined, states: "576w sm, 768w md" }, h("div", { class: `${CSSNAMESPACE}__wrap` }, h("nano-progress-bar", { indeterminate: true, class: {
533
+ return (h(Host, null, h("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), h("nano-resize-observe", { "aria-labelledby": 'table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined, states: "576w sm, 768w md", class: "sm md" }, h("div", { class: `${CSSNAMESPACE}__wrap` }, h("nano-progress-bar", { indeterminate: true, class: {
533
534
  [`${CSSNAMESPACE}__progress-bar`]: true,
534
- [`${CSSNAMESPACE}__progress-bar--show`]: this.loading,
535
+ [`${CSSNAMESPACE}__progress-bar--show`]: this._loading,
535
536
  } }), h("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-readonly": this.type === 'table' ? 'true' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl) }, h("caption", { class: {
536
537
  [`${CSSNAMESPACE}__caption`]: true,
537
538
  [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,
538
539
  }, id: 'table-caption-' + this.renderId }, h("slot", { name: "caption" }, this.caption)), h("thead", null, h(TableHeadFootRow, { rowRenderer: this.headRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
539
540
  h(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnOrderClick: this.sortStart, onColumnPinned: this.handleColumnPinned }),
540
- ]))), this.loading &&
541
+ ]))), this._loading &&
541
542
  !this.blocks.length &&
542
543
  [...Array(10).keys()].map((rowIndex) => (h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: h("nano-skeleton", null) })))))), this.blocks.map((block, blockIndex) => (h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
543
544
  this.blockElements.push(tb);
@@ -551,10 +552,10 @@ export class Table {
551
552
  })) : (h("td", { colSpan: this.store.config.state.columns.length, style: {
552
553
  height: this.getBlockHeight(blockIndex),
553
554
  } }))))), this.showFooter && (h("tfoot", null, h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
554
- h(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }),
555
+ h(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned, onColumnOrderClick: this.sortStart }),
555
556
  ]))))), !!this.blocks.length && (h("nano-spinner", { type: "circle", class: {
556
557
  [`${CSSNAMESPACE}__spinner`]: true,
557
- [`${CSSNAMESPACE}__spinner--show`]: this.loading,
558
+ [`${CSSNAMESPACE}__spinner--show`]: this._loading,
558
559
  } }))))));
559
560
  }
560
561
  static get is() { return "nano-table"; }
@@ -647,7 +648,7 @@ export class Table {
647
648
  "setter": true,
648
649
  "attribute": "loading",
649
650
  "reflect": false,
650
- "defaultValue": "true"
651
+ "defaultValue": "false"
651
652
  },
652
653
  "placeholderSize": {
653
654
  "type": "number",
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Host,\n Watch,\n State,\n readTask,\n Event,\n EventEmitter,\n Method,\n Build,\n Listen,\n} from '@stencil/core';\nimport { cyrb53 } from '../../utils/math';\nimport { debounce } from '../../utils/throttle';\nimport {\n TableColHead,\n TableRow,\n TableCell,\n TableHeadFootRow,\n} from './table.children';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n generateStore,\n storeSearch,\n storeSetConfig,\n storeSetData,\n storeSort,\n storeFilter,\n TableStores,\n} from './table.store';\nimport {\n detectScrollSpeed,\n findScrollParent,\n isInViewport,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\nfunction perMark(name: string, end: boolean = false) {\n if (!Build.isDev) return;\n if (end) {\n performance?.mark('end' + name);\n performance?.measure(name, 'start' + name, 'end' + name);\n const entries = performance?.getEntriesByName(name);\n console.log(entries[entries.length ? entries.length - 1 : 0]);\n } else {\n performance?.mark('start' + name);\n }\n}\n\nlet id = 0;\n/**\n * A performant, accessible and semantic (uses real html `<table />`, `<tr />` etc) table and data-grid solution.\n * - Built-in search\n * - Built-in column filter\n * - Built-in column sort\n * - Easily swap in API / async based search / filter & sort\n * - Pin headers, footers, rows, columns\n * - Add custom rendering at every level\n * - Add custom properties at every level\n *\n * @slot caption - The table's caption. You must either use this or the `caption` attribute.\n */\n@Component({\n tag: 'nano-table',\n styleUrl: 'table.scss',\n})\nexport class Table implements ComponentInterface {\n constructor() {\n this.debounceSetLoading = debounce(this.debounceSetLoading.bind(this), 50);\n }\n // Public API\n\n // Props\n\n /** The type of table. Grid type will make cells navigable by keyboard */\n @Prop() type: 'grid' | 'table' = 'table';\n\n /** A descriptive title of the table.\n * You must use this or the `slot=\"caption\"` for accessibility */\n @Prop() caption: string;\n\n /** Show the caption on-screen */\n @Prop() showCaption: boolean = false;\n\n /** Will show a loading state when true.\n * Will be shown automatically if `rows` is a promise waiting to resolve\n * or when performing custom filtering or sorting */\n @Prop()\n get loading() {\n return this._loading;\n }\n set loading(l: boolean) {\n this.debounceSetLoading(l);\n }\n @State() _loading: boolean = true;\n private debounceSetLoading = (l: boolean) => {\n this._loading = l;\n };\n\n /** When loading rows asynchronously, this will render this number of placeholder rows */\n @Prop() placeholderSize = 5;\n\n /** The data to place in the table */\n @Prop() rows:\n | TableTypes.NanoTable['rows']\n | Promise<TableTypes.NanoTable['rows']>;\n\n @Watch('rows')\n handleRowsChange() {\n if (!this.rows) return;\n\n this.loading = true;\n Promise.resolve(this.rows).then(async (rows) => {\n await storeSetData(this.host, rows);\n\n if (!this.isReady) {\n await this.columnInit();\n this.setInitialBlockDimension();\n }\n this.loading = false;\n });\n }\n\n /** The column config used to generate present the rows of data */\n @Prop({ mutable: true }) columns: TableTypes.NanoTable['columns'] = [];\n\n @Watch('columns')\n handleColsChange() {\n storeSetConfig(this.host, this.columns);\n if (this.isReady) this.columnInit();\n }\n\n /** Used for custom thead row rendering */\n @Prop() headRender: TableTypes.HeadFootRenderer = { pinned: 'top' };\n\n /** Used for custom row rendering */\n @Prop() rowRender: TableTypes.RowRenderer;\n\n /** Used for custom tfoot row rendering */\n @Prop() footRender: TableTypes.HeadFootRenderer = { pinned: 'bottom' };\n\n /** Whether to show a `<tfoot>` component */\n @Prop() showFooter = false;\n\n /** To improve performance, data is split into blocks\n * which are shown / hidden and rendered as they become visible.\n * Use this to control the number of hits within a block -\n * A block should fill a scrolling viewport.\n * The less perBlock the better for performance */\n @Prop() perBlock = 60;\n\n /** The number of total blocks currently rendered in the table. @readonly */\n @Prop()\n get blocksLength() {\n return this.blocks.length;\n }\n\n /** Term to search for in the data */\n @Prop() searchTerm: string;\n\n /** A custom filtering function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the filter on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customFilterFn?: (filters: TableTypes.Filter[]) => Promise<void>;\n\n /** A custom sorting function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the sort on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customSortFn?: (\n property: TableTypes.Prop,\n order: TableTypes.Order\n ) => Promise<void>;\n\n @Watch('searchTerm')\n handleSearchTermChange() {\n this.searchStart();\n }\n\n /** Fired whenever a block is activated by scrolling into view / becoming visible\n * This could be leveraged for infinite scrolling / to fetch more data.\n */\n @Event() nanoTblBlockRendered: EventEmitter<{\n block: number;\n totalBlocks: number;\n }>;\n\n /** Fired when the table has done it's first complete render */\n @Event() nanoTblReady: EventEmitter;\n\n /** Fired before a column is sorted.\n * `event.preventDefault()` to stop sorting. */\n @Event() nanoTblBeforeSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired before a column is filtered.\n * `event.preventDefault()` to stop filtering. */\n @Event() nanoTblBeforeFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired before a general search.\n * `event.preventDefault()` to stop searching. */\n @Event() nanoTblBeforeSearch: EventEmitter<{ term: string }>;\n\n /** Fired after a general / cross column search */\n @Event() nanoTblAfterSearch: EventEmitter<{ term: string }>;\n\n /** Remove any column sorts currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetSorting() {\n const col = this.columns.find((c) => !!c.order);\n if (!col) return;\n return this.sortStart(null, col.prop);\n }\n\n /** Apply a sort on a column\n * @returns a promise which resolves when complete */\n @Method()\n async addSort(column: TableTypes.Prop, order: TableTypes.Order) {\n const col = this.columns.find((c) => c.prop === column);\n if (!col) throw 'Cannot find column with ' + column;\n return this.sortStart(order, col.prop);\n }\n\n /** Remove any column filters currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetFilters() {\n this.filters = [];\n return this.filterStart();\n }\n\n /** Apply a filter on a column\n * @param filters - the filters to apply\n * @param additive - if true, will add the filters to any currently applied\n * @returns a promise which resolves when complete\n */\n @Method()\n async addFilters(filters: TableTypes.Filter[], additive: boolean = true) {\n if (!additive) this.filters = [];\n return this.filterStart(filters, additive);\n }\n\n // Private Logic\n\n // State\n\n @Element() host: HTMLNanoTableElement;\n private renderId = 'tbl-' + id++;\n private store: TableStores;\n private filters: TableTypes.Filter[] = [];\n private currentFilters = '';\n private currentSort = '';\n private tableEle: HTMLTableElement;\n private topAnchorEle: HTMLElement;\n\n // Blocks\n\n /** `tr` elements split into units - defined by `perPage`\n These are show / hidden for perf */\n @State() blocks: TableTypes.TBody[] = [];\n @State() activeBlocks: number[] = [0, 1, 2];\n @State() measureHeight = 0;\n\n private blockElements: HTMLTableSectionElement[];\n private blockIos: WeakMap<HTMLTableSectionElement, IntersectionObserver> =\n new WeakMap();\n private blockHeights: { blockIndex: number; height: number }[] = [];\n // uses the first 'tr' of an active block as our yard stick\n private set measureEle(el: HTMLTableSectionElement) {\n if (!el) return;\n this.measureHeight = el.getBoundingClientRect().height;\n this.unitHeight =\n el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;\n }\n private unitHeight = 0;\n\n // Scroll / IO used for hiding / showing blocks\n\n private ignoreIO = true;\n private scrollParent: HTMLElement;\n private scrollSpeed: number;\n\n // Misc.\n\n private get isReady() {\n return this._isReady;\n }\n private set isReady(ready: boolean) {\n if (ready === this._isReady) return;\n this._isReady = ready;\n if (this.isReady) requestAnimationFrame(() => this.handleReady());\n }\n private _isReady = false;\n\n // Listeners\n\n @Listen('scroll', { target: 'window' })\n scrollListener() {\n // see explanation in `setupBlockIO`\n const speed = detectScrollSpeed();\n this.scrollSpeed = speed < 0 ? speed * -1 : speed;\n }\n\n // Logic\n\n private handleReady() {\n const hash = window.location.hash;\n if (hash.length > 1) {\n const idRow = document.querySelector(hash);\n if (idRow) {\n idRow.scrollIntoView();\n }\n }\n this.nanoTblReady.emit();\n }\n\n /**\n * Start a sort - can be cancelled by `preventDefault`\n * @param order - column order\n * @param column - column config object\n * @returns A promise\n */\n private sortStart = async (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n element?: HTMLElement\n ) => {\n // did order change?\n if (this.currentSort === order + ':' + column) return;\n\n this.loading = true;\n const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });\n if (sortEvent.defaultPrevented) return;\n perMark('sort');\n this.currentSort = order + ':' + column;\n\n // doesn't make sense to leave user in place for a sort\n this.scrollToTop(element);\n\n if (this.customSortFn) {\n try {\n await this.customSortFn(column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('custom sort failed', e);\n }\n return;\n }\n\n try {\n await storeSort(this.host, column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('sort failed', e);\n this.currentSort = '';\n } finally {\n this.loading = false;\n }\n };\n\n /**\n * Complete a sort. Reflects the order to ui.\n * @param order - column order\n * @param column - column config object\n */\n private sortComplete(order: TableTypes.Order, column: TableTypes.Prop) {\n this.columns = this.columns.map((c) => {\n if (c.prop === column) return { ...c, order };\n return { ...c, order: null };\n });\n this.nanoTblAfterSort.emit({ column: column, order });\n perMark('sort', true);\n }\n\n private async searchStart() {\n this.loading = true;\n const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });\n if (sortEvent.defaultPrevented) return;\n perMark('search');\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n try {\n await storeSearch(this.host, this.searchTerm);\n this.nanoTblAfterSearch.emit({ term: this.searchTerm });\n perMark('search', true);\n } catch (e) {\n console.warn('search failed', e);\n } finally {\n this.loading = false;\n }\n }\n\n private async filterStart(\n filters?: TableTypes.Filter[],\n additive: boolean = true\n ) {\n if (filters) {\n if (additive) {\n this.filters = [\n ...this.filters.filter(\n (f) => !filters.find((ff) => ff.prop === f.prop)\n ),\n ...filters,\n ];\n } else {\n this.filters = filters;\n }\n }\n\n if (this.currentFilters === JSON.stringify(this.filters)) return;\n\n this.loading = true;\n const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });\n if (sortEvent.defaultPrevented) return;\n perMark('filter');\n this.currentFilters = JSON.stringify(this.filters);\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n if (this.customFilterFn) {\n try {\n await this.customFilterFn(this.filters);\n this.filterComplete();\n } catch (e) {\n console.warn('custom filter failed', e);\n this.currentFilters = '';\n }\n return;\n }\n\n try {\n await storeFilter(this.host, this.filters);\n this.filterComplete();\n perMark('search', true);\n } catch (e) {\n console.warn('filter failed', e);\n } finally {\n this.loading = false;\n }\n }\n\n private filterComplete() {\n this.columns = this.columns.map((c) => {\n const cFilter = this.filters.find((f) => f.prop === c.prop);\n if (cFilter) c.filter = cFilter.filter;\n return c;\n });\n this.nanoTblAfterFilter.emit({ filters: this.filters });\n perMark('filter', true);\n }\n\n /** Scrolls to the top immediately - used whilst sorting / filtering */\n private scrollToTop(element?: HTMLElement) {\n const scrollBehaviour = this.scrollParent.style?.scrollBehavior;\n const scrollX = this.scrollParent.scrollLeft;\n this.scrollParent.style.scrollBehavior = 'auto';\n\n if (this.topAnchorEle && !isInViewport(this.topAnchorEle, 0.1)) {\n this.host.scrollIntoView();\n }\n if (element) element.scrollIntoView({ block: 'start' });\n\n if (scrollX) this.scrollParent.scrollLeft = scrollX;\n\n if (scrollBehaviour)\n this.scrollParent.style.scrollBehavior = scrollBehaviour;\n }\n\n private setMeasureElement() {\n readTask(() => {\n this.measureEle = this.blockElements.find(\n (b) => !b?.classList?.contains(`${CSSNAMESPACE}__inactive`)\n );\n });\n }\n\n /**\n * Sets the initial height on tbody elements that are not active\n * These elements have no natural height - on account of all their rows being hidden\n * So we just estimate for now\n */\n private setInitialBlockDimension() {\n if (!this.blockElements.length) return;\n perMark('blockDims');\n\n const finishResizing: Promise<void> = new Promise((resolve) => {\n readTask(() => {\n this.setMeasureElement();\n\n // find the first active block\n if (!this.measureEle && !this.unitHeight) resolve();\n\n this.blockElements.forEach((el, i) => {\n if (!el || !el.classList?.contains(`${CSSNAMESPACE}__inactive`)) {\n if (i === this.blockElements.length - 1) resolve();\n return;\n }\n if (i === this.blockElements.length - 1) resolve();\n });\n });\n });\n\n // we're all finished.\n finishResizing.then(() => {\n perMark('blockDims', true);\n perMark('init', true);\n\n requestAnimationFrame(() => {\n this.isReady = true;\n });\n });\n }\n\n /** Apply initial columns settings */\n private async columnInit() {\n this.filters = this.columns\n .filter((c) => !!c.filter)\n .map((c) => {\n const { filter, prop } = c;\n return { filter, prop };\n });\n\n if (this.searchTerm) {\n await this.searchStart();\n }\n\n if (this.filters.length) {\n await this.filterStart();\n }\n // apply sort\n const col = this.columns.find((c) => !!c.order);\n if (!!col) {\n await this.sortStart(col.order, col.prop);\n }\n }\n\n /** Split up all incoming rows into 'blocks' split amongst tbody elements.\n * These can then be hidden / shown to improve performance.\n */\n private setBlocks() {\n perMark('setBlocks');\n this.activeBlocks = [0, 1, 2];\n this.ignoreIO = true;\n let i = 1;\n const l = this.store.data.state.rows.length;\n let rows: TableTypes.RowData[] = [];\n const blocks: TableTypes.TBody[] = [];\n this.blockHeights = [];\n\n // old skool loop for perf\n for (i; i <= l; i++) {\n rows.push(this.store.data.state.rows[i - 1]);\n\n if (i % this.perBlock === 0) {\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n rows = [];\n }\n }\n if (rows.length)\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n this.blocks = blocks;\n perMark('setBlocks', true);\n }\n\n /**\n * Returns a block render height.\n * If it's currently active - let auto do it's thing\n * If we've rendered it before - return that\n * If all else fails, let's guess it\n * @param blockIndex\n * @returns a height string (incl px)\n */\n private getBlockHeight(blockIndex: number): string {\n if (this.activeBlocks.includes(blockIndex)) return undefined;\n\n if (this.blockHeights.length) {\n const cachedBlockHeight = this.blockHeights.find(\n (bh) => bh.blockIndex === blockIndex\n );\n if (cachedBlockHeight) return cachedBlockHeight.height + 'px';\n }\n const blockLength = this.blocks[blockIndex].rows.length;\n if (blockLength === this.perBlock && this.measureHeight) {\n return this.measureHeight + 'px';\n }\n return this.unitHeight ? this.unitHeight * blockLength + 'px' : undefined;\n }\n\n /** cache the height for all active blocks for later renders */\n private setBlockHeight() {\n readTask(() => {\n this.activeBlocks.forEach((blockIndex) => {\n const el = this.blockElements[blockIndex];\n if (!el) return;\n\n const height = el.getBoundingClientRect().height;\n // cache height to our block heights array\n // for subsequent renders\n const fBhI = this.blockHeights.findIndex(\n (bh) => bh.blockIndex === blockIndex\n );\n if (fBhI > 0) {\n this.blockHeights[fBhI] = { height, blockIndex };\n } else this.blockHeights.push({ height, blockIndex });\n });\n });\n }\n\n /**\n * Attaches an intersection observer to each rendered tbody element\n * shows / hides intersecting blocks' and sets heights for when they're hidden\n * @param el - the tbody element to observe\n * @param blockIndex - the rendering tbody we're attaching the IO to\n */\n private setupBlockIO = (el: HTMLTableSectionElement, blockIndex: number) => {\n if (!el || this.blockIos.has(el)) return;\n\n const blockIo = new IntersectionObserver(\n ([ioEntry]) => {\n if (this.ignoreIO) return;\n\n if (ioEntry.isIntersecting) {\n // This is a bit gross\n // The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast\n // i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.\n // To fix that, we check - for realsies - if the block IS visible.\n // BUT that test is not as sensitive to a block being visible via the IO,\n // so doesn't always fire if scrolling slowly\n // *sigh*\n readTask(() => {\n if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {\n this.activeBlocks = [\n blockIndex,\n blockIndex + 1,\n Math.max(0, blockIndex - 1),\n ];\n this.nanoTblBlockRendered.emit({\n block: blockIndex,\n totalBlocks: this.blockElements.length,\n });\n requestAnimationFrame(() => this.setBlockHeight());\n }\n });\n }\n },\n {\n threshold: [0],\n root:\n this.scrollParent === document.scrollingElement\n ? null\n : this.scrollParent,\n }\n );\n\n blockIo.observe(el);\n this.blockIos.set(el, blockIo);\n };\n\n /** Process slotted content */\n private processSlots() {\n // see if we have slot content\n if (!this.caption && !this.host.querySelector('[slot=\"caption\"]')) {\n console.error(\n 'For accessibility you must set a `title` prop or use the `caption` slot'\n );\n }\n }\n\n private handleColumnPinned = (positions: {\n [key in TableTypes.Position]: boolean;\n }) => {\n Object.entries(positions).forEach(([key, applied]) => {\n this.tableEle.classList.toggle(\n `${CSSNAMESPACE}__pinned--${key}`,\n applied\n );\n });\n };\n\n // Component lifecycle\n\n async componentWillLoad() {\n perMark('init');\n this.store = await generateStore(\n this.host,\n this.columns,\n this.scrollParent\n );\n await this.handleRowsChange();\n this.processSlots();\n this.setBlocks();\n this.store.data.onChange('rows', () => this.setBlocks());\n }\n\n connectedCallback(): void {\n readTask(() => (this.scrollParent = findScrollParent(this.host)));\n }\n\n componentDidLoad(): void {\n this.setInitialBlockDimension();\n }\n\n componentShouldUpdate(_newVal, _oldVal, stateName: keyof Table) {\n // stop double rendering - we use the store for rendering internally\n // the public facing props are kept in-sync with the store\n // but we don't want it to cause renders\n if (['rows', 'columns'].includes(stateName)) return false;\n }\n\n componentWillRender(): void | Promise<void> {\n perMark('render');\n }\n\n componentDidRender(): void {\n requestAnimationFrame(() => (this.ignoreIO = false));\n this.setMeasureElement();\n perMark('render', true);\n }\n\n render() {\n this.blockElements = [];\n\n return (\n <Host>\n <div\n class={`${CSSNAMESPACE}__top-anchor`}\n ref={(a) => (this.topAnchorEle = a)}\n >\n &nbsp;\n </div>\n <nano-resize-observe\n aria-labelledby={'table-caption-' + this.renderId}\n tabindex={this.type === 'grid' ? '0' : undefined}\n states=\"576w sm, 768w md\"\n >\n <div class={`${CSSNAMESPACE}__wrap`}>\n <nano-progress-bar\n indeterminate\n class={{\n [`${CSSNAMESPACE}__progress-bar`]: true,\n [`${CSSNAMESPACE}__progress-bar--show`]: this.loading,\n }}\n />\n <table\n role={this.type === 'grid' ? 'grid' : undefined}\n aria-readonly={this.type === 'table' ? 'true' : undefined}\n aria-rowcount={this.store.data.state.rows.length}\n aria-colcount={this.store.config.state.columns.length}\n class={`${CSSNAMESPACE}`}\n ref={(tbl) => (this.tableEle = tbl)}\n >\n <caption\n class={{\n [`${CSSNAMESPACE}__caption`]: true,\n [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,\n }}\n id={'table-caption-' + this.renderId}\n >\n <slot name=\"caption\">{this.caption}</slot>\n </caption>\n\n {/* Header */}\n <thead>\n <TableHeadFootRow\n rowRenderer={this.headRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.headRender}\n onColumnOrderClick={this.sortStart}\n onColumnPinned={this.handleColumnPinned}\n />,\n ])}\n </TableHeadFootRow>\n </thead>\n\n {this.loading &&\n !this.blocks.length &&\n [...Array(10).keys()].map((rowIndex) => (\n <tr>\n {this.store.config.state.columns.map(\n (_colModel, colIndex) => (\n <TableCell\n rowIndex={rowIndex}\n colIndex={colIndex}\n nestedContent={<nano-skeleton />}\n />\n )\n )}\n </tr>\n ))}\n\n {/* Body */}\n {this.blocks.map((block, blockIndex) => (\n <tbody\n key={block.__uuid}\n id={`tbody-${this.renderId}-${blockIndex}`}\n ref={(tb) => {\n this.blockElements.push(tb);\n this.setupBlockIO(tb, blockIndex);\n }}\n class={{\n [`${CSSNAMESPACE}__inactive`]:\n !this.activeBlocks.includes(blockIndex),\n [`${CSSNAMESPACE}__active`]:\n this.activeBlocks.includes(blockIndex),\n }}\n >\n {this.activeBlocks.includes(blockIndex) ? (\n block.rows.map((row, i) => {\n const rowIndex =\n blockIndex > 0 ? blockIndex * this.perBlock + i : i;\n return (\n <TableRow rowRenderer={this.rowRender} row={row}>\n {this.store.config.state.columns.map(\n (_colModel, colIndex) => (\n <TableCell\n rowIndex={rowIndex}\n colIndex={colIndex}\n />\n )\n )}\n </TableRow>\n );\n })\n ) : (\n <td\n colSpan={this.store.config.state.columns.length}\n style={{\n height: this.getBlockHeight(blockIndex),\n }}\n />\n )}\n </tbody>\n ))}\n\n {/* Footer */}\n {this.showFooter && (\n <tfoot>\n <TableHeadFootRow\n rowRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n />,\n ])}\n </TableHeadFootRow>\n </tfoot>\n )}\n </table>\n\n {!!this.blocks.length && (\n <nano-spinner\n type=\"circle\"\n class={{\n [`${CSSNAMESPACE}__spinner`]: true,\n [`${CSSNAMESPACE}__spinner--show`]: this.loading,\n }}\n />\n )}\n </div>\n </nano-resize-observe>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,IAAI,EACJ,CAAC,EAED,OAAO,EACP,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EAEL,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,GAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,eAAe,CAAC;AAGvB,SAAS,OAAO,CAAC,IAAY,EAAE,MAAe,KAAK;EACjD,IAAI,CAAC,KAAK,CAAC,KAAK;IAAE,OAAO;EACzB,IAAI,GAAG,EAAE;IACP,WAAW,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,WAAW,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GAC/D;OAAM;IACL,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;GACnC;AACH,CAAC;AAED,IAAI,EAAE,GAAG,CAAC,CAAC;AACX;;;;;;;;;;;;GAYG;AAKH,MAAM,OAAO,KAAK;EAChB;IA4BQ,uBAAkB,GAAG,CAAC,CAAU,EAAE,EAAE;MAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC;IAmKM,aAAQ,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC;IAEzB,YAAO,GAAwB,EAAE,CAAC;IAClC,mBAAc,GAAG,EAAE,CAAC;IACpB,gBAAW,GAAG,EAAE,CAAC;IAajB,aAAQ,GACd,IAAI,OAAO,EAAE,CAAC;IACR,iBAAY,GAA6C,EAAE,CAAC;IAQ5D,eAAU,GAAG,CAAC,CAAC;IAEvB,+CAA+C;IAEvC,aAAQ,GAAG,IAAI,CAAC;IAchB,aAAQ,GAAG,KAAK,CAAC;IAwBzB;;;;;OAKG;IACK,cAAS,GAAG,KAAK,EACvB,KAAuB,EACvB,MAAuB,EACvB,OAAqB,EACrB,EAAE;MACF,oBAAoB;MACpB,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG,GAAG,GAAG,MAAM;QAAE,OAAO;MAEtD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;MACzE,IAAI,SAAS,CAAC,gBAAgB;QAAE,OAAO;MACvC,OAAO,CAAC,MAAM,CAAC,CAAC;MAChB,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;MAExC,uDAAuD;MACvD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;MAE1B,IAAI,IAAI,CAAC,YAAY,EAAE;QACrB,IAAI;UACF,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;UACvC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SAClC;QAAC,OAAO,CAAC,EAAE;UACV,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;SACvC;QACD,OAAO;OACR;MAED,IAAI;QACF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;OAClC;MAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;OACvB;cAAS;QACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;OACtB;IACH,CAAC,CAAC;IA8PF;;;;;OAKG;IACK,iBAAY,GAAG,CAAC,EAA2B,EAAE,UAAkB,EAAE,EAAE;MACzE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO;MAEzC,MAAM,OAAO,GAAG,IAAI,oBAAoB,CACtC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE;QACZ,IAAI,IAAI,CAAC,QAAQ;UAAE,OAAO;QAE1B,IAAI,OAAO,CAAC,cAAc,EAAE;UAC1B,sBAAsB;UACtB,6FAA6F;UAC7F,0FAA0F;UAC1F,kEAAkE;UAClE,yEAAyE;UACzE,6CAA6C;UAC7C,SAAS;UACT,QAAQ,CAAC,GAAG,EAAE;YACZ,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;cACpD,IAAI,CAAC,YAAY,GAAG;gBAClB,UAAU;gBACV,UAAU,GAAG,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;eAC5B,CAAC;cACF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC7B,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;eACvC,CAAC,CAAC;cACH,qBAAqB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;aACpD;UACH,CAAC,CAAC,CAAC;SACJ;MACH,CAAC,EACD;QACE,SAAS,EAAE,CAAC,CAAC,CAAC;QACd,IAAI,EACF,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,gBAAgB;UAC7C,CAAC,CAAC,IAAI;UACN,CAAC,CAAC,IAAI,CAAC,YAAY;OACxB,CACF,CAAC;MAEF,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;MACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC;IAYM,uBAAkB,GAAG,CAAC,SAE7B,EAAE,EAAE;MACH,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE;QACnD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAC5B,GAAG,YAAY,aAAa,GAAG,EAAE,EACjC,OAAO,CACR,CAAC;MACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;gBA3mB+B,OAAO;;uBAOT,KAAK;oBAYP,KAAK;2BAMR,CAAC;;mBAwByC,EAAE;sBASpB,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAMjB,EAAE,MAAM,EAAE,QAAQ,EAAE;sBAGjD,KAAK;oBAOP,EAAE;;;;kBA2HiB,EAAE;wBACN,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBAClB,CAAC;IA9MxB,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;GAC5E;EAeD;;uDAEqD;EACrD,IACI,OAAO;IACT,OAAO,IAAI,CAAC,QAAQ,CAAC;EACvB,CAAC;EACD,IAAI,OAAO,CAAC,CAAU;IACpB,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;EAeD,gBAAgB;IACd,IAAI,CAAC,IAAI,CAAC,IAAI;MAAE,OAAO;IAEvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;MAC7C,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;MAEpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACjB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,wBAAwB,EAAE,CAAC;OACjC;MACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;EACL,CAAC;EAMD,gBAAgB;IACd,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,OAAO;MAAE,IAAI,CAAC,UAAU,EAAE,CAAC;EACtC,CAAC;EAqBD,4EAA4E;EAC5E,IACI,YAAY;IACd,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;EAC5B,CAAC;EAqBD,sBAAsB;IACpB,IAAI,CAAC,WAAW,EAAE,CAAC;EACrB,CAAC;EAwCD;uDACqD;EAErD,KAAK,CAAC,YAAY;IAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG;MAAE,OAAO;IACjB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;EACxC,CAAC;EAED;uDACqD;EAErD,KAAK,CAAC,OAAO,CAAC,MAAuB,EAAE,KAAuB;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG;MAAE,MAAM,0BAA0B,GAAG,MAAM,CAAC;IACpD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;EACzC,CAAC;EAED;uDACqD;EAErD,KAAK,CAAC,YAAY;IAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;EAC5B,CAAC;EAED;;;;KAIG;EAEH,KAAK,CAAC,UAAU,CAAC,OAA4B,EAAE,WAAoB,IAAI;IACrE,IAAI,CAAC,QAAQ;MAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACjC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;EAC7C,CAAC;EA2BD,2DAA2D;EAC3D,IAAY,UAAU,CAAC,EAA2B;IAChD,IAAI,CAAC,EAAE;MAAE,OAAO;IAChB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;IACvD,IAAI,CAAC,UAAU;MACb,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,qBAAqB,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC;EAC9E,CAAC;EASD,QAAQ;EAER,IAAY,OAAO;IACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;EACvB,CAAC;EACD,IAAY,OAAO,CAAC,KAAc;IAChC,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ;MAAE,OAAO;IACpC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,IAAI,IAAI,CAAC,OAAO;MAAE,qBAAqB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;EACpE,CAAC;EAGD,YAAY;EAGZ,cAAc;IACZ,oCAAoC;IACpC,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;EACpD,CAAC;EAED,QAAQ;EAEA,WAAW;IACjB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;MAC3C,IAAI,KAAK,EAAE;QACT,KAAK,CAAC,cAAc,EAAE,CAAC;OACxB;KACF;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;EAC3B,CAAC;EA8CD;;;;KAIG;EACK,YAAY,CAAC,KAAuB,EAAE,MAAuB;IACnE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;MACpC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;MAC9C,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACxB,CAAC;EAEO,KAAK,CAAC,WAAW;IACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3E,IAAI,SAAS,CAAC,gBAAgB;MAAE,OAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElB,yDAAyD;IACzD,IAAI,CAAC,WAAW,EAAE,CAAC;IAEnB,IAAI;MACF,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;MAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;MACxD,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KACzB;IAAC,OAAO,CAAC,EAAE;MACV,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;KAClC;YAAS;MACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;EACH,CAAC;EAEO,KAAK,CAAC,WAAW,CACvB,OAA6B,EAC7B,WAAoB,IAAI;IAExB,IAAI,OAAO,EAAE;MACX,IAAI,QAAQ,EAAE;QACZ,IAAI,CAAC,OAAO,GAAG;UACb,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CACjD;UACD,GAAG,OAAO;SACX,CAAC;OACH;WAAM;QACL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;OACxB;KACF;IAED,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;MAAE,OAAO;IAEjE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,IAAI,SAAS,CAAC,gBAAgB;MAAE,OAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnD,yDAAyD;IACzD,IAAI,CAAC,WAAW,EAAE,CAAC;IAEnB,IAAI,IAAI,CAAC,cAAc,EAAE;MACvB,IAAI;QACF,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,EAAE,CAAC;OACvB;MAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;OAC1B;MACD,OAAO;KACR;IAED,IAAI;MACF,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;MAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;MACtB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KACzB;IAAC,OAAO,CAAC,EAAE;MACV,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;KAClC;YAAS;MACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;EACH,CAAC;EAEO,cAAc;IACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;MACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;MAC5D,IAAI,OAAO;QAAE,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;MACvC,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;EAC1B,CAAC;EAED,uEAAuE;EAC/D,WAAW,CAAC,OAAqB;IACvC,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAC7C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC;IAEhD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE;MAC9D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;KAC5B;IACD,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;MACtC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEpE,IAAI,OAAO;MAAE,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC;IAEpD,IAAI,eAAe;MACjB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC;EAC7D,CAAC;EAEO,iBAAiB;IACvB,QAAQ,CAAC,GAAG,EAAE;MACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,YAAY,YAAY,CAAC,CAC5D,CAAC;IACJ,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;KAIG;EACK,wBAAwB;IAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM;MAAE,OAAO;IACxC,OAAO,CAAC,WAAW,CAAC,CAAC;IAErB,MAAM,cAAc,GAAkB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;MAC5D,QAAQ,CAAC,GAAG,EAAE;QACZ,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU;UAAE,OAAO,EAAE,CAAC;QAEpD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;UACnC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,YAAY,YAAY,CAAC,EAAE;YAC/D,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;cAAE,OAAO,EAAE,CAAC;YACnD,OAAO;WACR;UACD,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;MACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;MACvB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;MAC3B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;MAEtB,qBAAqB,CAAC,GAAG,EAAE;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;EACL,CAAC;EAED,qCAAqC;EAC7B,KAAK,CAAC,UAAU;IACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;OACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;OACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;MACT,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;MAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,IAAI,IAAI,CAAC,UAAU,EAAE;MACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;KAC1B;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;MACvB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;KAC1B;IACD,aAAa;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,GAAG,EAAE;MACT,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;KAC3C;EACH,CAAC;EAED;;KAEG;EACK,SAAS;IACf,OAAO,CAAC,WAAW,CAAC,CAAC;IACrB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5C,IAAI,IAAI,GAAyB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAEvB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAE7C,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,GAAG,EAAE,CAAC;OACX;KACF;IACD,IAAI,IAAI,CAAC,MAAM;MACb,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACrB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;EAC7B,CAAC;EAED;;;;;;;KAOG;EACK,cAAc,CAAC,UAAkB;IACvC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;MAAE,OAAO,SAAS,CAAC;IAE7D,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;MAC5B,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAC9C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,UAAU,CACrC,CAAC;MACF,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC;KAC/D;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACxD,IAAI,WAAW,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;MACvD,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAClC;IACD,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;EAC5E,CAAC;EAED,+DAA+D;EACvD,cAAc;IACpB,QAAQ,CAAC,GAAG,EAAE;MACZ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE;UAAE,OAAO;QAEhB,MAAM,MAAM,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;QACjD,0CAA0C;QAC1C,yBAAyB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CACtC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,UAAU,CACrC,CAAC;QACF,IAAI,IAAI,GAAG,CAAC,EAAE;UACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;SAClD;;UAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;MACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;EACL,CAAC;EAoDD,8BAA8B;EACtB,YAAY;IAClB,8BAA8B;IAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE;MACjE,OAAO,CAAC,KAAK,CACX,yEAAyE,CAC1E,CAAC;KACH;EACH,CAAC;EAaD,sBAAsB;EAEtB,KAAK,CAAC,iBAAiB;IACrB,OAAO,CAAC,MAAM,CAAC,CAAC;IAChB,IAAI,CAAC,KAAK,GAAG,MAAM,aAAa,CAC9B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,YAAY,CAClB,CAAC;IACF,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;IACpB,IAAI,CAAC,SAAS,EAAE,CAAC;IACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;EAC3D,CAAC;EAED,iBAAiB;IACf,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACpE,CAAC;EAED,gBAAgB;IACd,IAAI,CAAC,wBAAwB,EAAE,CAAC;EAClC,CAAC;EAED,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAsB;IAC5D,oEAAoE;IACpE,0DAA0D;IAC1D,wCAAwC;IACxC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;MAAE,OAAO,KAAK,CAAC;EAC5D,CAAC;EAED,mBAAmB;IACjB,OAAO,CAAC,QAAQ,CAAC,CAAC;EACpB,CAAC;EAED,kBAAkB;IAChB,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACzB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;EAC1B,CAAC;EAED,MAAM;IACJ,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAExB,OAAO,CACL,EAAC,IAAI;MACH,WACE,KAAK,EAAE,GAAG,YAAY,cAAc,EACpC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,aAG/B;MACN,8CACmB,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EACjD,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAChD,MAAM,EAAC,kBAAkB,EACzB,KAAK,EAAC,OAAO;QAEb,WAAK,KAAK,EAAE,GAAG,YAAY,QAAQ;UACjC,yBACE,aAAa,QACb,KAAK,EAAE;cACL,CAAC,GAAG,YAAY,gBAAgB,CAAC,EAAE,IAAI;cACvC,CAAC,GAAG,YAAY,sBAAsB,CAAC,EAAE,IAAI,CAAC,QAAQ;aACvD,GACD;UACF,aACE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,mBAChC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,mBAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,mBACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EACrD,KAAK,EAAE,GAAG,YAAY,EAAE,EACxB,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YAEnC,eACE,KAAK,EAAE;gBACL,CAAC,GAAG,YAAY,WAAW,CAAC,EAAE,IAAI;gBAClC,CAAC,GAAG,YAAY,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW;eACtD,EACD,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAAC,QAAQ;cAEpC,YAAM,IAAI,EAAC,SAAS,IAAE,IAAI,CAAC,OAAO,CAAQ,CAClC;YAGV;cACE,EAAC,gBAAgB,IACf,WAAW,EAAE,IAAI,CAAC,UAAU,EAC5B,cAAc,EAAE,IAAI,CAAC,kBAAkB,IAEtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACjD,EAAC,YAAY,IACX,MAAM,EAAE,QAAQ,EAChB,YAAY,EAAE,IAAI,CAAC,UAAU,EAC7B,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAClC,cAAc,EAAE,IAAI,CAAC,kBAAkB,GACvC;eACH,CAAC,CACe,CACb;YAEP,IAAI,CAAC,QAAQ;cACZ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;cACnB,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACtC,cACG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAClC,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CACvB,EAAC,SAAS,IACR,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,wBAAiB,GAChC,CACH,CACF,CACE,CACN,CAAC;YAGH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CACtC,aACE,GAAG,EAAE,KAAK,CAAC,MAAM,EACjB,EAAE,EAAE,SAAS,IAAI,CAAC,QAAQ,IAAI,UAAU,EAAE,EAC1C,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;gBACV,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;cACpC,CAAC,EACD,KAAK,EAAE;gBACL,CAAC,GAAG,YAAY,YAAY,CAAC,EAC3B,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzC,CAAC,GAAG,YAAY,UAAU,CAAC,EACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;eACzC,IAEA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;cACxB,MAAM,QAAQ,GACZ,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;cACtD,OAAO,CACL,EAAC,QAAQ,IAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAClC,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CACvB,EAAC,SAAS,IACR,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAClB,CACH,CACF,CACQ,CACZ,CAAC;YACJ,CAAC,CAAC,CACH,CAAC,CAAC,CAAC,CACF,UACE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAC/C,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;eACxC,GACD,CACH,CACK,CACT,CAAC;YAGD,IAAI,CAAC,UAAU,IAAI,CAClB;cACE,EAAC,gBAAgB,IACf,WAAW,EAAE,IAAI,CAAC,UAAU,EAC5B,cAAc,EAAE,IAAI,CAAC,kBAAkB,IAEtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACjD,EAAC,YAAY,IACX,MAAM,EAAE,QAAQ,EAChB,YAAY,EAAE,IAAI,CAAC,UAAU,EAC7B,cAAc,EAAE,IAAI,CAAC,kBAAkB,EACvC,kBAAkB,EAAE,IAAI,CAAC,SAAS,GAClC;eACH,CAAC,CACe,CACb,CACT,CACK;UAEP,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CACvB,oBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;cACL,CAAC,GAAG,YAAY,WAAW,CAAC,EAAE,IAAI;cAClC,CAAC,GAAG,YAAY,iBAAiB,CAAC,EAAE,IAAI,CAAC,QAAQ;aAClD,GACD,CACH,CACG,CACc,CACjB,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Host,\n Watch,\n State,\n readTask,\n Event,\n EventEmitter,\n Method,\n Build,\n Listen,\n} from '@stencil/core';\nimport { cyrb53 } from '../../utils/math';\nimport { debounce } from '../../utils/throttle';\nimport {\n TableColHead,\n TableRow,\n TableCell,\n TableHeadFootRow,\n} from './table.children';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n generateStore,\n storeSearch,\n storeSetConfig,\n storeSetData,\n storeSort,\n storeFilter,\n TableStores,\n} from './table.store';\nimport {\n detectScrollSpeed,\n findScrollParent,\n isInViewport,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\nfunction perMark(name: string, end: boolean = false) {\n if (!Build.isDev) return;\n if (end) {\n performance?.mark('end' + name);\n performance?.measure(name, 'start' + name, 'end' + name);\n const entries = performance?.getEntriesByName(name);\n console.log(entries[entries.length ? entries.length - 1 : 0]);\n } else {\n performance?.mark('start' + name);\n }\n}\n\nlet id = 0;\n/**\n * A performant, accessible and semantic (uses real html `<table />`, `<tr />` etc) table and data-grid solution.\n *\n *- Built-in search\n *- Built-in column filter\n *- Built-in column sort\n *- Easily swap in API / async based search / filter & sort\n *- Pin headers, footers, rows, columns\n *- Add custom rendering at every level\n *- Add custom properties at every level\n *\n * @slot caption - The table's caption. You must either use this or the `caption` attribute.\n */\n@Component({\n tag: 'nano-table',\n styleUrl: 'table.scss',\n})\nexport class Table implements ComponentInterface {\n constructor() {\n this.debounceSetLoading = debounce(this.debounceSetLoading.bind(this), 50);\n }\n // Public API\n\n // Props\n\n /** The type of table. Grid type will make cells navigable by keyboard */\n @Prop() type: 'grid' | 'table' = 'table';\n\n /** A descriptive title of the table.\n * You must use this or the `slot=\"caption\"` for accessibility */\n @Prop() caption: string;\n\n /** Show the caption on-screen */\n @Prop() showCaption: boolean = false;\n\n /** Will show a loading state when true.\n * Will be shown automatically if `rows` is a promise waiting to resolve\n * or when performing custom filtering or sorting */\n @Prop()\n get loading() {\n return this._loading;\n }\n set loading(l: boolean) {\n this.debounceSetLoading(l);\n }\n @State() _loading: boolean = false;\n private debounceSetLoading = (l: boolean) => {\n this._loading = l;\n };\n\n /** When loading rows asynchronously, this will render this number of placeholder rows */\n @Prop() placeholderSize = 5;\n\n /** The data to place in the table */\n @Prop() rows:\n | TableTypes.NanoTable['rows']\n | Promise<TableTypes.NanoTable['rows']>;\n\n @Watch('rows')\n handleRowsChange() {\n if (!this.rows) return;\n\n this.loading = true;\n Promise.resolve(this.rows).then(async (rows) => {\n await storeSetData(this.host, rows);\n\n if (!this.isReady) {\n await this.columnInit();\n this.setInitialBlockDimension();\n }\n this.loading = false;\n });\n }\n\n /** The column config used to generate present the rows of data */\n @Prop({ mutable: true }) columns: TableTypes.NanoTable['columns'] = [];\n\n @Watch('columns')\n handleColsChange() {\n storeSetConfig(this.host, this.columns);\n if (this.isReady) this.columnInit();\n }\n\n /** Used for custom thead row rendering */\n @Prop() headRender: TableTypes.HeadFootRenderer = { pinned: 'top' };\n\n /** Used for custom row rendering */\n @Prop() rowRender: TableTypes.RowRenderer;\n\n /** Used for custom tfoot row rendering */\n @Prop() footRender: TableTypes.HeadFootRenderer = { pinned: 'bottom' };\n\n /** Whether to show a `<tfoot>` component */\n @Prop() showFooter = false;\n\n /** To improve performance, data is split into blocks\n * which are shown / hidden and rendered as they become visible.\n * Use this to control the number of hits within a block -\n * A block should fill a scrolling viewport.\n * The less perBlock the better for performance */\n @Prop() perBlock = 60;\n\n /** The number of total blocks currently rendered in the table. @readonly */\n @Prop()\n get blocksLength() {\n return this.blocks.length;\n }\n\n /** Term to search for in the data */\n @Prop() searchTerm: string;\n\n /** A custom filtering function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the filter on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customFilterFn?: (filters: TableTypes.Filter[]) => Promise<void>;\n\n /** A custom sorting function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the sort on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customSortFn?: (\n property: TableTypes.Prop,\n order: TableTypes.Order\n ) => Promise<void>;\n\n @Watch('searchTerm')\n handleSearchTermChange() {\n this.searchStart();\n }\n\n /** Fired whenever a block is activated by scrolling into view / becoming visible\n * This could be leveraged for infinite scrolling / to fetch more data.\n */\n @Event() nanoTblBlockRendered: EventEmitter<{\n block: number;\n totalBlocks: number;\n }>;\n\n /** Fired when the table has done it's first complete render */\n @Event() nanoTblReady: EventEmitter;\n\n /** Fired before a column is sorted.\n * `event.preventDefault()` to stop sorting. */\n @Event() nanoTblBeforeSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired before a column is filtered.\n * `event.preventDefault()` to stop filtering. */\n @Event() nanoTblBeforeFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired before a general search.\n * `event.preventDefault()` to stop searching. */\n @Event() nanoTblBeforeSearch: EventEmitter<{ term: string }>;\n\n /** Fired after a general / cross column search */\n @Event() nanoTblAfterSearch: EventEmitter<{ term: string }>;\n\n /** Remove any column sorts currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetSorting() {\n const col = this.columns.find((c) => !!c.order);\n if (!col) return;\n return this.sortStart(null, col.prop);\n }\n\n /** Apply a sort on a column\n * @returns a promise which resolves when complete */\n @Method()\n async addSort(column: TableTypes.Prop, order: TableTypes.Order) {\n const col = this.columns.find((c) => c.prop === column);\n if (!col) throw 'Cannot find column with ' + column;\n return this.sortStart(order, col.prop);\n }\n\n /** Remove any column filters currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetFilters() {\n this.filters = [];\n return this.filterStart();\n }\n\n /** Apply a filter on a column\n * @param filters - the filters to apply\n * @param additive - if true, will add the filters to any currently applied\n * @returns a promise which resolves when complete\n */\n @Method()\n async addFilters(filters: TableTypes.Filter[], additive: boolean = true) {\n if (!additive) this.filters = [];\n return this.filterStart(filters, additive);\n }\n\n // Private Logic\n\n // State\n\n @Element() host: HTMLNanoTableElement;\n private renderId = 'tbl-' + id++;\n private store: TableStores;\n private filters: TableTypes.Filter[] = [];\n private currentFilters = '';\n private currentSort = '';\n private tableEle: HTMLTableElement;\n private topAnchorEle: HTMLElement;\n\n // Blocks\n\n /** `tr` elements split into units - defined by `perPage`\n These are show / hidden for perf */\n @State() blocks: TableTypes.TBody[] = [];\n @State() activeBlocks: number[] = [0, 1, 2];\n @State() measureHeight = 0;\n\n private blockElements: HTMLTableSectionElement[];\n private blockIos: WeakMap<HTMLTableSectionElement, IntersectionObserver> =\n new WeakMap();\n private blockHeights: { blockIndex: number; height: number }[] = [];\n // uses the first 'tr' of an active block as our yard stick\n private set measureEle(el: HTMLTableSectionElement) {\n if (!el) return;\n this.measureHeight = el.getBoundingClientRect().height;\n this.unitHeight =\n el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;\n }\n private unitHeight = 0;\n\n // Scroll / IO used for hiding / showing blocks\n\n private ignoreIO = true;\n private scrollParent: HTMLElement;\n private scrollSpeed: number;\n\n // Misc.\n\n private get isReady() {\n return this._isReady;\n }\n private set isReady(ready: boolean) {\n if (ready === this._isReady) return;\n this._isReady = ready;\n if (this.isReady) requestAnimationFrame(() => this.handleReady());\n }\n private _isReady = false;\n\n // Listeners\n\n @Listen('scroll', { target: 'window' })\n scrollListener() {\n // see explanation in `setupBlockIO`\n const speed = detectScrollSpeed();\n this.scrollSpeed = speed < 0 ? speed * -1 : speed;\n }\n\n // Logic\n\n private handleReady() {\n const hash = window.location.hash;\n if (hash.length > 1) {\n const idRow = document.querySelector(hash);\n if (idRow) {\n idRow.scrollIntoView();\n }\n }\n this.nanoTblReady.emit();\n }\n\n /**\n * Start a sort - can be cancelled by `preventDefault`\n * @param order - column order\n * @param column - column config object\n * @returns A promise\n */\n private sortStart = async (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n element?: HTMLElement\n ) => {\n // did order change?\n if (this.currentSort === order + ':' + column) return;\n\n this.loading = true;\n const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });\n if (sortEvent.defaultPrevented) return;\n perMark('sort');\n this.currentSort = order + ':' + column;\n\n // doesn't make sense to leave user in place for a sort\n this.scrollToTop(element);\n\n if (this.customSortFn) {\n try {\n await this.customSortFn(column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('custom sort failed', e);\n }\n return;\n }\n\n try {\n await storeSort(this.host, column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('sort failed', e);\n this.currentSort = '';\n } finally {\n this.loading = false;\n }\n };\n\n /**\n * Complete a sort. Reflects the order to ui.\n * @param order - column order\n * @param column - column config object\n */\n private sortComplete(order: TableTypes.Order, column: TableTypes.Prop) {\n this.columns = this.columns.map((c) => {\n if (c.prop === column) return { ...c, order };\n return { ...c, order: null };\n });\n this.nanoTblAfterSort.emit({ column: column, order });\n perMark('sort', true);\n }\n\n private async searchStart() {\n this.loading = true;\n const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });\n if (sortEvent.defaultPrevented) return;\n perMark('search');\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n try {\n await storeSearch(this.host, this.searchTerm);\n this.nanoTblAfterSearch.emit({ term: this.searchTerm });\n perMark('search', true);\n } catch (e) {\n console.warn('search failed', e);\n } finally {\n this.loading = false;\n }\n }\n\n private async filterStart(\n filters?: TableTypes.Filter[],\n additive: boolean = true\n ) {\n if (filters) {\n if (additive) {\n this.filters = [\n ...this.filters.filter(\n (f) => !filters.find((ff) => ff.prop === f.prop)\n ),\n ...filters,\n ];\n } else {\n this.filters = filters;\n }\n }\n\n if (this.currentFilters === JSON.stringify(this.filters)) return;\n\n this.loading = true;\n const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });\n if (sortEvent.defaultPrevented) return;\n perMark('filter');\n this.currentFilters = JSON.stringify(this.filters);\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n if (this.customFilterFn) {\n try {\n await this.customFilterFn(this.filters);\n this.filterComplete();\n } catch (e) {\n console.warn('custom filter failed', e);\n this.currentFilters = '';\n }\n return;\n }\n\n try {\n await storeFilter(this.host, this.filters);\n this.filterComplete();\n perMark('search', true);\n } catch (e) {\n console.warn('filter failed', e);\n } finally {\n this.loading = false;\n }\n }\n\n private filterComplete() {\n this.columns = this.columns.map((c) => {\n const cFilter = this.filters.find((f) => f.prop === c.prop);\n if (cFilter) c.filter = cFilter.filter;\n return c;\n });\n this.nanoTblAfterFilter.emit({ filters: this.filters });\n perMark('filter', true);\n }\n\n /** Scrolls to the top immediately - used whilst sorting / filtering */\n private scrollToTop(element?: HTMLElement) {\n const scrollBehaviour = this.scrollParent.style?.scrollBehavior;\n const scrollX = this.scrollParent.scrollLeft;\n this.scrollParent.style.scrollBehavior = 'auto';\n\n if (this.topAnchorEle && !isInViewport(this.topAnchorEle, 0.1)) {\n this.host.scrollIntoView();\n }\n if (element && !isInViewport(element, 1))\n setTimeout(() => element.scrollIntoView({ block: 'start' }), 500);\n\n if (scrollX) this.scrollParent.scrollLeft = scrollX;\n\n if (scrollBehaviour)\n this.scrollParent.style.scrollBehavior = scrollBehaviour;\n }\n\n private setMeasureElement() {\n readTask(() => {\n this.measureEle = this.blockElements.find(\n (b) => !b?.classList?.contains(`${CSSNAMESPACE}__inactive`)\n );\n });\n }\n\n /**\n * Sets the initial height on tbody elements that are not active\n * These elements have no natural height - on account of all their rows being hidden\n * So we just estimate for now\n */\n private setInitialBlockDimension() {\n if (!this.blockElements?.length) return;\n perMark('blockDims');\n\n const finishResizing: Promise<void> = new Promise((resolve) => {\n readTask(() => {\n this.setMeasureElement();\n\n // find the first active block\n if (!this.measureEle && !this.unitHeight) resolve();\n\n this.blockElements.forEach((el, i) => {\n if (!el || !el.classList?.contains(`${CSSNAMESPACE}__inactive`)) {\n if (i === this.blockElements.length - 1) resolve();\n return;\n }\n if (i === this.blockElements.length - 1) resolve();\n });\n });\n });\n\n // we're all finished.\n finishResizing.then(() => {\n perMark('blockDims', true);\n perMark('init', true);\n\n requestAnimationFrame(() => {\n this.isReady = true;\n });\n });\n }\n\n /** Apply initial columns settings */\n private async columnInit() {\n this.filters = this.columns\n .filter((c) => !!c.filter)\n .map((c) => {\n const { filter, prop } = c;\n return { filter, prop };\n });\n\n if (this.searchTerm) {\n await this.searchStart();\n }\n\n if (this.filters.length) {\n await this.filterStart();\n }\n // apply sort\n const col = this.columns.find((c) => !!c.order);\n if (!!col) {\n await this.sortStart(col.order, col.prop);\n }\n }\n\n /** Split up all incoming rows into 'blocks' split amongst tbody elements.\n * These can then be hidden / shown to improve performance.\n */\n private setBlocks() {\n perMark('setBlocks');\n this.activeBlocks = [0, 1, 2];\n this.ignoreIO = true;\n let i = 1;\n const l = this.store.data.state.rows.length;\n let rows: TableTypes.RowData[] = [];\n const blocks: TableTypes.TBody[] = [];\n this.blockHeights = [];\n\n // old skool loop for perf\n for (i; i <= l; i++) {\n rows.push(this.store.data.state.rows[i - 1]);\n\n if (i % this.perBlock === 0) {\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n rows = [];\n }\n }\n if (rows.length)\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n this.blocks = blocks;\n perMark('setBlocks', true);\n }\n\n /**\n * Returns a block render height.\n * If it's currently active - let auto do it's thing\n * If we've rendered it before - return that\n * If all else fails, let's guess it\n * @param blockIndex\n * @returns a height string (incl px)\n */\n private getBlockHeight(blockIndex: number): string {\n if (this.activeBlocks.includes(blockIndex)) return undefined;\n\n if (this.blockHeights.length) {\n const cachedBlockHeight = this.blockHeights.find(\n (bh) => bh.blockIndex === blockIndex\n );\n if (cachedBlockHeight) return cachedBlockHeight.height + 'px';\n }\n const blockLength = this.blocks[blockIndex].rows.length;\n if (blockLength === this.perBlock && this.measureHeight) {\n return this.measureHeight + 'px';\n }\n return this.unitHeight ? this.unitHeight * blockLength + 'px' : undefined;\n }\n\n /** cache the height for all active blocks for later renders */\n private setBlockHeight() {\n readTask(() => {\n this.activeBlocks.forEach((blockIndex) => {\n const el = this.blockElements[blockIndex];\n if (!el) return;\n\n const height = el.getBoundingClientRect().height;\n // cache height to our block heights array\n // for subsequent renders\n const fBhI = this.blockHeights.findIndex(\n (bh) => bh.blockIndex === blockIndex\n );\n if (fBhI > 0) {\n this.blockHeights[fBhI] = { height, blockIndex };\n } else this.blockHeights.push({ height, blockIndex });\n });\n });\n }\n\n /**\n * Attaches an intersection observer to each rendered tbody element\n * shows / hides intersecting blocks' and sets heights for when they're hidden\n * @param el - the tbody element to observe\n * @param blockIndex - the rendering tbody we're attaching the IO to\n */\n private setupBlockIO = (el: HTMLTableSectionElement, blockIndex: number) => {\n if (!el || this.blockIos.has(el)) return;\n\n const blockIo = new IntersectionObserver(\n ([ioEntry]) => {\n if (this.ignoreIO) return;\n\n if (ioEntry.isIntersecting) {\n // This is a bit gross\n // The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast\n // i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.\n // To fix that, we check - for realsies - if the block IS visible.\n // BUT that test is not as sensitive to a block being visible via the IO,\n // so doesn't always fire if scrolling slowly\n // *sigh*\n readTask(() => {\n if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {\n this.activeBlocks = [\n blockIndex,\n blockIndex + 1,\n Math.max(0, blockIndex - 1),\n ];\n this.nanoTblBlockRendered.emit({\n block: blockIndex,\n totalBlocks: this.blockElements.length,\n });\n requestAnimationFrame(() => this.setBlockHeight());\n }\n });\n }\n },\n {\n threshold: [0],\n root:\n this.scrollParent === document.scrollingElement\n ? null\n : this.scrollParent,\n }\n );\n\n blockIo.observe(el);\n this.blockIos.set(el, blockIo);\n };\n\n /** Process slotted content */\n private processSlots() {\n // see if we have slot content\n if (!this.caption && !this.host.querySelector('[slot=\"caption\"]')) {\n console.error(\n 'For accessibility you must set a `title` prop or use the `caption` slot'\n );\n }\n }\n\n private handleColumnPinned = (positions: {\n [key in TableTypes.Position]: boolean;\n }) => {\n Object.entries(positions).forEach(([key, applied]) => {\n this.tableEle.classList.toggle(\n `${CSSNAMESPACE}__pinned--${key}`,\n applied\n );\n });\n };\n\n // Component lifecycle\n\n async componentWillLoad() {\n perMark('init');\n this.store = await generateStore(\n this.host,\n this.columns,\n this.scrollParent\n );\n await this.handleRowsChange();\n this.processSlots();\n this.setBlocks();\n this.store.data.onChange('rows', () => this.setBlocks());\n }\n\n connectedCallback(): void {\n readTask(() => (this.scrollParent = findScrollParent(this.host)));\n }\n\n componentDidLoad(): void {\n this.setInitialBlockDimension();\n }\n\n componentShouldUpdate(_newVal, _oldVal, stateName: keyof Table) {\n // stop double rendering - we use the store for rendering internally\n // the public facing props are kept in-sync with the store\n // but we don't want it to cause renders\n if (['rows', 'columns'].includes(stateName)) return false;\n }\n\n componentWillRender(): void | Promise<void> {\n perMark('render');\n }\n\n componentDidRender(): void {\n requestAnimationFrame(() => (this.ignoreIO = false));\n this.setMeasureElement();\n perMark('render', true);\n }\n\n render() {\n this.blockElements = [];\n\n return (\n <Host>\n <div\n class={`${CSSNAMESPACE}__top-anchor`}\n ref={(a) => (this.topAnchorEle = a)}\n >\n &nbsp;\n </div>\n <nano-resize-observe\n aria-labelledby={'table-caption-' + this.renderId}\n tabindex={this.type === 'grid' ? '0' : undefined}\n states=\"576w sm, 768w md\"\n class=\"sm md\"\n >\n <div class={`${CSSNAMESPACE}__wrap`}>\n <nano-progress-bar\n indeterminate\n class={{\n [`${CSSNAMESPACE}__progress-bar`]: true,\n [`${CSSNAMESPACE}__progress-bar--show`]: this._loading,\n }}\n />\n <table\n role={this.type === 'grid' ? 'grid' : undefined}\n aria-readonly={this.type === 'table' ? 'true' : undefined}\n aria-rowcount={this.store.data.state.rows.length}\n aria-colcount={this.store.config.state.columns.length}\n class={`${CSSNAMESPACE}`}\n ref={(tbl) => (this.tableEle = tbl)}\n >\n <caption\n class={{\n [`${CSSNAMESPACE}__caption`]: true,\n [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,\n }}\n id={'table-caption-' + this.renderId}\n >\n <slot name=\"caption\">{this.caption}</slot>\n </caption>\n\n {/* Header */}\n <thead>\n <TableHeadFootRow\n rowRenderer={this.headRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.headRender}\n onColumnOrderClick={this.sortStart}\n onColumnPinned={this.handleColumnPinned}\n />,\n ])}\n </TableHeadFootRow>\n </thead>\n\n {this._loading &&\n !this.blocks.length &&\n [...Array(10).keys()].map((rowIndex) => (\n <tr>\n {this.store.config.state.columns.map(\n (_colModel, colIndex) => (\n <TableCell\n rowIndex={rowIndex}\n colIndex={colIndex}\n nestedContent={<nano-skeleton />}\n />\n )\n )}\n </tr>\n ))}\n\n {/* Body */}\n {this.blocks.map((block, blockIndex) => (\n <tbody\n key={block.__uuid}\n id={`tbody-${this.renderId}-${blockIndex}`}\n ref={(tb) => {\n this.blockElements.push(tb);\n this.setupBlockIO(tb, blockIndex);\n }}\n class={{\n [`${CSSNAMESPACE}__inactive`]:\n !this.activeBlocks.includes(blockIndex),\n [`${CSSNAMESPACE}__active`]:\n this.activeBlocks.includes(blockIndex),\n }}\n >\n {this.activeBlocks.includes(blockIndex) ? (\n block.rows.map((row, i) => {\n const rowIndex =\n blockIndex > 0 ? blockIndex * this.perBlock + i : i;\n return (\n <TableRow rowRenderer={this.rowRender} row={row}>\n {this.store.config.state.columns.map(\n (_colModel, colIndex) => (\n <TableCell\n rowIndex={rowIndex}\n colIndex={colIndex}\n />\n )\n )}\n </TableRow>\n );\n })\n ) : (\n <td\n colSpan={this.store.config.state.columns.length}\n style={{\n height: this.getBlockHeight(blockIndex),\n }}\n />\n )}\n </tbody>\n ))}\n\n {/* Footer */}\n {this.showFooter && (\n <tfoot>\n <TableHeadFootRow\n rowRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n onColumnOrderClick={this.sortStart}\n />,\n ])}\n </TableHeadFootRow>\n </tfoot>\n )}\n </table>\n\n {!!this.blocks.length && (\n <nano-spinner\n type=\"circle\"\n class={{\n [`${CSSNAMESPACE}__spinner`]: true,\n [`${CSSNAMESPACE}__spinner--show`]: this._loading,\n }}\n />\n )}\n </div>\n </nano-resize-observe>\n </Host>\n );\n }\n}\n"]}
@@ -107,7 +107,7 @@ export function cellRender(rowIndex, colIndex) {
107
107
  const columns = store.config.state.columns;
108
108
  const tpl = columns[colIndex]?.cellTemplate;
109
109
  const model = colDataModel(rowIndex, colIndex);
110
- return tpl ? (tpl(h, model)) : (h(Fragment, null, model.cellModel));
110
+ return tpl ? (tpl(h, model)) : (h(Fragment, null, model.cellModel.toString()));
111
111
  }
112
112
  /**
113
113
  * Renders a table header (within a thead) using a custom template if set.
@@ -1 +1 @@
1
- {"version":3,"file":"table.service.js","sourceRoot":"","sources":["../../../src/components/table/table.service.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getRenderingRef, getElement, VNode, h, Fragment } from '@stencil/core';\nimport { getStore } from './table.store';\nimport type { TableTypes } from '../../interface';\n\n/**\n * Get a model object for custom cell / property renderers.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns a model object which will be passed to custom renderers\n */\nfunction colDataModel(\n rowIndex: number,\n colIndex: number\n): TableTypes.ColumnDataSchemaModel {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const rows = store.data.state.rows;\n\n const column = columns[colIndex];\n const prop: TableTypes.ColumnProp | undefined = column?.prop;\n const rowModel = rows[rowIndex];\n const cellModel = rowModel[columns[colIndex].prop];\n\n return {\n prop,\n cellModel,\n column,\n rowIndex,\n rowModel,\n };\n}\n\n/**\n * Get a model object for custom row renderers.\n * @param rowIndex\n * @returns a model object passed to custom row renderers\n */\nexport function rowDataModel(rowIndex: number): TableTypes.RowDataSchemaModel {\n const store = fetchStores();\n const rows = store.data.state.rows;\n const row = rows[rowIndex];\n\n return {\n row,\n rowIndex,\n };\n}\n\n/**\n * Merges 2 objects of properties together\n * @param current - property object\n * @param extra - additional object property\n * @returns - merged properties that can be applied to a node\n */\nexport function mergeProperties(\n current: TableTypes.EleProps,\n extra: TableTypes.EleProps\n) {\n if (!extra) return current;\n\n // top level merge\n const props: TableTypes.EleProps = { ...extra, ...current };\n\n // deeper merge\n // merge classes maps or strings\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (\n typeof extra.class === 'string' &&\n typeof props.class === 'object'\n ) {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n // merge style\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n}\n\n/**\n * Returns the current nano-table's stores.\n * @returns the current nano-table stores\n */\nexport function fetchStores() {\n return getStore(getElement(getRenderingRef()));\n}\n\n/**\n * Merges any defined cell properties with properties\n * required by `nano-table` functionality\n * @param rowIndex - the current row index being rendered\n * @param colIndex = the current column index being rendered\n * @param defaultProps - default properties required by `nano-table`\n * @returns - the merged properties that will be applied to a node\n */\nexport function mergeCellProperties(\n rowIndex: number,\n colIndex: number,\n defaultProps: TableTypes.EleProps\n): TableTypes.EleProps {\n const props: TableTypes.EleProps = { ...defaultProps };\n const extraPropsFunc =\n fetchStores().config.state.columns[colIndex]?.cellProperties;\n if (!extraPropsFunc) return props;\n\n const data = colDataModel(rowIndex, colIndex);\n const extra = extraPropsFunc(data);\n if (!extra) return props;\n\n return mergeProperties(props, extra);\n}\n\n/**\n * Renders a cell using a custom renderer if set.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns - a JSX node\n */\nexport function cellRender(rowIndex: number, colIndex: number): VNode {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const tpl = columns[colIndex]?.cellTemplate;\n const model = colDataModel(rowIndex, colIndex);\n\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, model)\n ) : (\n <Fragment>{model.cellModel}</Fragment>\n );\n}\n\n/**\n * Renders a table header (within a thead) using a custom template if set.\n * @param col - the current column config object\n * @returns - a JSX node\n */\nexport function colheadFootRender(col: TableTypes.ColumnConfig): VNode {\n const tpl = col?.colTemplate;\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n"]}
1
+ {"version":3,"file":"table.service.js","sourceRoot":"","sources":["../../../src/components/table/table.service.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getRenderingRef, getElement, VNode, h, Fragment } from '@stencil/core';\nimport { getStore } from './table.store';\nimport type { TableTypes } from '../../interface';\n\n/**\n * Get a model object for custom cell / property renderers.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns a model object which will be passed to custom renderers\n */\nfunction colDataModel(\n rowIndex: number,\n colIndex: number\n): TableTypes.ColumnDataSchemaModel {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const rows = store.data.state.rows;\n\n const column = columns[colIndex];\n const prop: TableTypes.ColumnProp | undefined = column?.prop;\n const rowModel = rows[rowIndex];\n const cellModel = rowModel[columns[colIndex].prop];\n\n return {\n prop,\n cellModel,\n column,\n rowIndex,\n rowModel,\n };\n}\n\n/**\n * Get a model object for custom row renderers.\n * @param rowIndex\n * @returns a model object passed to custom row renderers\n */\nexport function rowDataModel(rowIndex: number): TableTypes.RowDataSchemaModel {\n const store = fetchStores();\n const rows = store.data.state.rows;\n const row = rows[rowIndex];\n\n return {\n row,\n rowIndex,\n };\n}\n\n/**\n * Merges 2 objects of properties together\n * @param current - property object\n * @param extra - additional object property\n * @returns - merged properties that can be applied to a node\n */\nexport function mergeProperties(\n current: TableTypes.EleProps,\n extra: TableTypes.EleProps\n) {\n if (!extra) return current;\n\n // top level merge\n const props: TableTypes.EleProps = { ...extra, ...current };\n\n // deeper merge\n // merge classes maps or strings\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (\n typeof extra.class === 'string' &&\n typeof props.class === 'object'\n ) {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n // merge style\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n}\n\n/**\n * Returns the current nano-table's stores.\n * @returns the current nano-table stores\n */\nexport function fetchStores() {\n return getStore(getElement(getRenderingRef()));\n}\n\n/**\n * Merges any defined cell properties with properties\n * required by `nano-table` functionality\n * @param rowIndex - the current row index being rendered\n * @param colIndex = the current column index being rendered\n * @param defaultProps - default properties required by `nano-table`\n * @returns - the merged properties that will be applied to a node\n */\nexport function mergeCellProperties(\n rowIndex: number,\n colIndex: number,\n defaultProps: TableTypes.EleProps\n): TableTypes.EleProps {\n const props: TableTypes.EleProps = { ...defaultProps };\n const extraPropsFunc =\n fetchStores().config.state.columns[colIndex]?.cellProperties;\n if (!extraPropsFunc) return props;\n\n const data = colDataModel(rowIndex, colIndex);\n const extra = extraPropsFunc(data);\n if (!extra) return props;\n\n return mergeProperties(props, extra);\n}\n\n/**\n * Renders a cell using a custom renderer if set.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns - a JSX node\n */\nexport function cellRender(rowIndex: number, colIndex: number): VNode {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const tpl = columns[colIndex]?.cellTemplate;\n const model = colDataModel(rowIndex, colIndex);\n\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, model)\n ) : (\n <Fragment>{model.cellModel.toString()}</Fragment>\n );\n}\n\n/**\n * Renders a table header (within a thead) using a custom template if set.\n * @param col - the current column config object\n * @returns - a JSX node\n */\nexport function colheadFootRender(col: TableTypes.ColumnConfig): VNode {\n const tpl = col?.colTemplate;\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n"]}