@nanoporetech-digital/components 6.0.1 → 6.2.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 (295) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/cjs/index-14451c95.js +6 -2
  3. package/dist/cjs/index-browser.cjs-d4554470.js +39 -0
  4. package/dist/cjs/index-browser.cjs-d4554470.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/nano-algolia.cjs.entry.js +6 -1
  7. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  8. package/dist/cjs/nano-animation.cjs.entry.js +1209 -0
  9. package/dist/cjs/nano-animation.cjs.entry.js.map +1 -0
  10. package/dist/cjs/nano-components.cjs.js +1 -1
  11. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-global-nav.cjs.entry.js +24 -25
  13. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-global-search-results.cjs.entry.js +51 -27
  15. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nano-hero.cjs.entry.js +1 -1
  17. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-intersection-observe.cjs.entry.js +131 -0
  19. package/dist/cjs/nano-intersection-observe.cjs.entry.js.map +1 -0
  20. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -1
  21. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  22. package/dist/cjs/nano-sticker.cjs.entry.js +2 -27
  23. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  24. package/dist/cjs/{nano-table-400049cc.js → nano-table-06530d49.js} +5 -25
  25. package/dist/cjs/nano-table-06530d49.js.map +1 -0
  26. package/dist/cjs/nano-table.cjs.entry.js +2 -1
  27. package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
  28. package/dist/cjs/scroll-parent-87393de2.js +31 -0
  29. package/dist/cjs/scroll-parent-87393de2.js.map +1 -0
  30. package/dist/cjs/search-insights-b2bb12bd.js +50 -0
  31. package/dist/cjs/search-insights-b2bb12bd.js.map +1 -0
  32. package/dist/cjs/{table.worker-a37f8365.js → table.worker-b4922b9b.js} +3 -2
  33. package/dist/cjs/table.worker-b4922b9b.js.map +1 -0
  34. package/dist/collection/collection-manifest.json +2 -1
  35. package/dist/collection/components/algolia/algolia-interface.js.map +1 -1
  36. package/dist/collection/components/algolia/algolia.js +8 -3
  37. package/dist/collection/components/algolia/algolia.js.map +1 -1
  38. package/dist/collection/components/animation/animation.js +547 -0
  39. package/dist/collection/components/animation/animation.js.map +1 -0
  40. package/dist/collection/components/animation/animations/attention_seekers/bounce.js +43 -0
  41. package/dist/collection/components/animation/animations/attention_seekers/flash.js +7 -0
  42. package/dist/collection/components/animation/animations/attention_seekers/headShake.js +8 -0
  43. package/dist/collection/components/animation/animations/attention_seekers/heartBeat.js +7 -0
  44. package/dist/collection/components/animation/animations/attention_seekers/jello.js +15 -0
  45. package/dist/collection/components/animation/animations/attention_seekers/pulse.js +5 -0
  46. package/dist/collection/components/animation/animations/attention_seekers/rubberBand.js +9 -0
  47. package/dist/collection/components/animation/animations/attention_seekers/shake.js +13 -0
  48. package/dist/collection/components/animation/animations/attention_seekers/shakeX.js +13 -0
  49. package/dist/collection/components/animation/animations/attention_seekers/shakeY.js +13 -0
  50. package/dist/collection/components/animation/animations/attention_seekers/swing.js +7 -0
  51. package/dist/collection/components/animation/animations/attention_seekers/tada.js +13 -0
  52. package/dist/collection/components/animation/animations/attention_seekers/wobble.js +18 -0
  53. package/dist/collection/components/animation/animations/back_entrances/backInDown.js +5 -0
  54. package/dist/collection/components/animation/animations/back_entrances/backInLeft.js +5 -0
  55. package/dist/collection/components/animation/animations/back_entrances/backInRight.js +5 -0
  56. package/dist/collection/components/animation/animations/back_entrances/backInUp.js +5 -0
  57. package/dist/collection/components/animation/animations/back_exits/backOutDown.js +5 -0
  58. package/dist/collection/components/animation/animations/back_exits/backOutLeft.js +5 -0
  59. package/dist/collection/components/animation/animations/back_exits/backOutRight.js +5 -0
  60. package/dist/collection/components/animation/animations/back_exits/backOutUp.js +5 -0
  61. package/dist/collection/components/animation/animations/bouncing_entrances/bounceIn.js +14 -0
  62. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInDown.js +20 -0
  63. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInLeft.js +16 -0
  64. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInRight.js +16 -0
  65. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInUp.js +16 -0
  66. package/dist/collection/components/animation/animations/bouncing_exits/bounceOut.js +6 -0
  67. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutDown.js +14 -0
  68. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutLeft.js +12 -0
  69. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutRight.js +8 -0
  70. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutUp.js +18 -0
  71. package/dist/collection/components/animation/animations/easings/easings.js +35 -0
  72. package/dist/collection/components/animation/animations/easings/easings.js.map +1 -0
  73. package/dist/collection/components/animation/animations/fading_entrances/fadeIn.js +4 -0
  74. package/dist/collection/components/animation/animations/fading_entrances/fadeInBottomLeft.js +4 -0
  75. package/dist/collection/components/animation/animations/fading_entrances/fadeInBottomRight.js +4 -0
  76. package/dist/collection/components/animation/animations/fading_entrances/fadeInDown.js +4 -0
  77. package/dist/collection/components/animation/animations/fading_entrances/fadeInDownBig.js +4 -0
  78. package/dist/collection/components/animation/animations/fading_entrances/fadeInLeft.js +4 -0
  79. package/dist/collection/components/animation/animations/fading_entrances/fadeInLeftBig.js +4 -0
  80. package/dist/collection/components/animation/animations/fading_entrances/fadeInRight.js +4 -0
  81. package/dist/collection/components/animation/animations/fading_entrances/fadeInRightBig.js +4 -0
  82. package/dist/collection/components/animation/animations/fading_entrances/fadeInTopLeft.js +4 -0
  83. package/dist/collection/components/animation/animations/fading_entrances/fadeInTopRight.js +4 -0
  84. package/dist/collection/components/animation/animations/fading_entrances/fadeInUp.js +4 -0
  85. package/dist/collection/components/animation/animations/fading_entrances/fadeInUpBig.js +4 -0
  86. package/dist/collection/components/animation/animations/fading_exits/fadeOut.js +4 -0
  87. package/dist/collection/components/animation/animations/fading_exits/fadeOutBottomLeft.js +4 -0
  88. package/dist/collection/components/animation/animations/fading_exits/fadeOutBottomRight.js +4 -0
  89. package/dist/collection/components/animation/animations/fading_exits/fadeOutDown.js +4 -0
  90. package/dist/collection/components/animation/animations/fading_exits/fadeOutDownBig.js +4 -0
  91. package/dist/collection/components/animation/animations/fading_exits/fadeOutLeft.js +4 -0
  92. package/dist/collection/components/animation/animations/fading_exits/fadeOutLeftBig.js +4 -0
  93. package/dist/collection/components/animation/animations/fading_exits/fadeOutRight.js +4 -0
  94. package/dist/collection/components/animation/animations/fading_exits/fadeOutRightBig.js +4 -0
  95. package/dist/collection/components/animation/animations/fading_exits/fadeOutTopLeft.js +4 -0
  96. package/dist/collection/components/animation/animations/fading_exits/fadeOutTopRight.js +4 -0
  97. package/dist/collection/components/animation/animations/fading_exits/fadeOutUp.js +4 -0
  98. package/dist/collection/components/animation/animations/fading_exits/fadeOutUpBig.js +4 -0
  99. package/dist/collection/components/animation/animations/flippers/flip.js +32 -0
  100. package/dist/collection/components/animation/animations/flippers/flipInX.js +20 -0
  101. package/dist/collection/components/animation/animations/flippers/flipInY.js +20 -0
  102. package/dist/collection/components/animation/animations/flippers/flipOutX.js +13 -0
  103. package/dist/collection/components/animation/animations/flippers/flipOutY.js +13 -0
  104. package/dist/collection/components/animation/animations/index.js +203 -0
  105. package/dist/collection/components/animation/animations/index.js.map +1 -0
  106. package/dist/collection/components/animation/animations/lightspeed/lightSpeedInLeft.js +10 -0
  107. package/dist/collection/components/animation/animations/lightspeed/lightSpeedInRight.js +10 -0
  108. package/dist/collection/components/animation/animations/lightspeed/lightSpeedOutLeft.js +8 -0
  109. package/dist/collection/components/animation/animations/lightspeed/lightSpeedOutRight.js +8 -0
  110. package/dist/collection/components/animation/animations/rotating_entrances/rotateIn.js +4 -0
  111. package/dist/collection/components/animation/animations/rotating_entrances/rotateInDownLeft.js +4 -0
  112. package/dist/collection/components/animation/animations/rotating_entrances/rotateInDownRight.js +4 -0
  113. package/dist/collection/components/animation/animations/rotating_entrances/rotateInUpLeft.js +4 -0
  114. package/dist/collection/components/animation/animations/rotating_entrances/rotateInUpRight.js +4 -0
  115. package/dist/collection/components/animation/animations/rotating_exits/rotateOut.js +4 -0
  116. package/dist/collection/components/animation/animations/rotating_exits/rotateOutDownLeft.js +4 -0
  117. package/dist/collection/components/animation/animations/rotating_exits/rotateOutDownRight.js +4 -0
  118. package/dist/collection/components/animation/animations/rotating_exits/rotateOutUpLeft.js +4 -0
  119. package/dist/collection/components/animation/animations/rotating_exits/rotateOutUpRight.js +4 -0
  120. package/dist/collection/components/animation/animations/sliding_entrances/slideInDown.js +4 -0
  121. package/dist/collection/components/animation/animations/sliding_entrances/slideInLeft.js +4 -0
  122. package/dist/collection/components/animation/animations/sliding_entrances/slideInRight.js +4 -0
  123. package/dist/collection/components/animation/animations/sliding_entrances/slideInUp.js +4 -0
  124. package/dist/collection/components/animation/animations/sliding_exits/slideOutDown.js +4 -0
  125. package/dist/collection/components/animation/animations/sliding_exits/slideOutLeft.js +4 -0
  126. package/dist/collection/components/animation/animations/sliding_exits/slideOutRight.js +4 -0
  127. package/dist/collection/components/animation/animations/sliding_exits/slideOutUp.js +4 -0
  128. package/dist/collection/components/animation/animations/specials/hinge.js +18 -0
  129. package/dist/collection/components/animation/animations/specials/jackInTheBox.js +11 -0
  130. package/dist/collection/components/animation/animations/specials/rollIn.js +8 -0
  131. package/dist/collection/components/animation/animations/specials/rollOut.js +8 -0
  132. package/dist/collection/components/animation/animations/zooming_entrances/zoomIn.js +4 -0
  133. package/dist/collection/components/animation/animations/zooming_entrances/zoomInDown.js +14 -0
  134. package/dist/collection/components/animation/animations/zooming_entrances/zoomInLeft.js +14 -0
  135. package/dist/collection/components/animation/animations/zooming_entrances/zoomInRight.js +14 -0
  136. package/dist/collection/components/animation/animations/zooming_entrances/zoomInUp.js +14 -0
  137. package/dist/collection/components/animation/animations/zooming_exits/zoomOut.js +5 -0
  138. package/dist/collection/components/animation/animations/zooming_exits/zoomOutDown.js +14 -0
  139. package/dist/collection/components/animation/animations/zooming_exits/zoomOutLeft.js +12 -0
  140. package/dist/collection/components/animation/animations/zooming_exits/zoomOutRight.js +12 -0
  141. package/dist/collection/components/animation/animations/zooming_exits/zoomOutUp.js +14 -0
  142. package/dist/collection/components/global-nav/global-nav-interface.js.map +1 -1
  143. package/dist/collection/components/global-nav/global-nav.js +25 -25
  144. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  145. package/dist/collection/components/global-search-results/global-search-results.js +51 -27
  146. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  147. package/dist/collection/components/hero/hero.css +0 -1
  148. package/dist/collection/components/intersection-observe/intersection-observe.js +256 -0
  149. package/dist/collection/components/intersection-observe/intersection-observe.js.map +1 -0
  150. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  151. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  152. package/dist/collection/components/select/select.js +5 -5
  153. package/dist/collection/components/select/select.js.map +1 -1
  154. package/dist/collection/components/sticker/sticker.js +2 -27
  155. package/dist/collection/components/sticker/sticker.js.map +1 -1
  156. package/dist/collection/components/table/table.js +2 -1
  157. package/dist/collection/components/table/table.js.map +1 -1
  158. package/dist/collection/components/table/table.utils.js +0 -21
  159. package/dist/collection/components/table/table.utils.js.map +1 -1
  160. package/dist/collection/utils/scroll-parent.js +26 -0
  161. package/dist/collection/utils/scroll-parent.js.map +1 -0
  162. package/dist/collection/utils/search-insights.js +46 -0
  163. package/dist/collection/utils/search-insights.js.map +1 -0
  164. package/dist/components/algolia.js +6 -1
  165. package/dist/components/algolia.js.map +1 -1
  166. package/dist/components/index-browser.cjs.js +37 -0
  167. package/dist/components/index-browser.cjs.js.map +1 -0
  168. package/dist/components/index.d.ts +2 -1
  169. package/dist/components/index.js +2 -1
  170. package/dist/components/index.js.map +1 -1
  171. package/dist/components/{nano-aspect-ratio.d.ts → nano-animation.d.ts} +4 -4
  172. package/dist/components/nano-animation.js +1239 -0
  173. package/dist/components/nano-animation.js.map +1 -0
  174. package/dist/components/nano-global-nav.js +24 -25
  175. package/dist/components/nano-global-nav.js.map +1 -1
  176. package/dist/components/nano-global-search-results.js +51 -27
  177. package/dist/components/nano-global-search-results.js.map +1 -1
  178. package/dist/components/nano-hero.js +1 -1
  179. package/dist/components/nano-hero.js.map +1 -1
  180. package/dist/components/nano-intersection-observe.d.ts +11 -0
  181. package/dist/components/nano-intersection-observe.js +149 -0
  182. package/dist/components/nano-intersection-observe.js.map +1 -0
  183. package/dist/components/resize-observe.js +1 -1
  184. package/dist/components/resize-observe.js.map +1 -1
  185. package/dist/components/scroll-parent.js +29 -0
  186. package/dist/components/scroll-parent.js.map +1 -0
  187. package/dist/components/search-insights.js +48 -0
  188. package/dist/components/search-insights.js.map +1 -0
  189. package/dist/components/select.js.map +1 -1
  190. package/dist/components/sticker.js +2 -27
  191. package/dist/components/sticker.js.map +1 -1
  192. package/dist/components/table.js +1 -21
  193. package/dist/components/table.js.map +1 -1
  194. package/dist/esm/index-9695db0a.js +6 -2
  195. package/dist/esm/index-browser.cjs-bf702094.js +37 -0
  196. package/dist/esm/index-browser.cjs-bf702094.js.map +1 -0
  197. package/dist/esm/loader.js +1 -1
  198. package/dist/esm/nano-algolia.entry.js +6 -1
  199. package/dist/esm/nano-algolia.entry.js.map +1 -1
  200. package/dist/esm/nano-animation.entry.js +1205 -0
  201. package/dist/esm/nano-animation.entry.js.map +1 -0
  202. package/dist/esm/nano-components.js +1 -1
  203. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  204. package/dist/esm/nano-global-nav.entry.js +24 -25
  205. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  206. package/dist/esm/nano-global-search-results.entry.js +51 -27
  207. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  208. package/dist/esm/nano-hero.entry.js +1 -1
  209. package/dist/esm/nano-hero.entry.js.map +1 -1
  210. package/dist/esm/nano-intersection-observe.entry.js +127 -0
  211. package/dist/esm/nano-intersection-observe.entry.js.map +1 -0
  212. package/dist/esm/nano-resize-observe_2.entry.js +1 -1
  213. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  214. package/dist/esm/nano-sticker.entry.js +2 -27
  215. package/dist/esm/nano-sticker.entry.js.map +1 -1
  216. package/dist/esm/{nano-table-a6641aef.js → nano-table-c85a2fd3.js} +3 -23
  217. package/dist/esm/nano-table-c85a2fd3.js.map +1 -0
  218. package/dist/esm/nano-table.entry.js +2 -1
  219. package/dist/esm/nano-table.entry.js.map +1 -1
  220. package/dist/esm/scroll-parent-bab1cbf7.js +29 -0
  221. package/dist/esm/scroll-parent-bab1cbf7.js.map +1 -0
  222. package/dist/esm/search-insights-f64a6b4c.js +48 -0
  223. package/dist/esm/search-insights-f64a6b4c.js.map +1 -0
  224. package/dist/esm/{table.worker-6b597e20.js → table.worker-761fba3e.js} +3 -2
  225. package/dist/esm/table.worker-761fba3e.js.map +1 -0
  226. package/dist/nano-components/index-browser.cjs-bf702094.js +5 -0
  227. package/dist/nano-components/index-browser.cjs-bf702094.js.map +1 -0
  228. package/dist/nano-components/nano-algolia.entry.js +1 -1
  229. package/dist/nano-components/nano-algolia.entry.js.map +1 -1
  230. package/dist/nano-components/nano-animation.entry.js +5 -0
  231. package/dist/nano-components/nano-animation.entry.js.map +1 -0
  232. package/dist/nano-components/nano-components.css +1 -1
  233. package/dist/nano-components/nano-components.esm.js +1 -1
  234. package/dist/nano-components/nano-components.esm.js.map +1 -1
  235. package/dist/nano-components/nano-global-nav-user-profile_3.entry.js.map +1 -1
  236. package/dist/nano-components/nano-global-nav.entry.js +1 -1
  237. package/dist/nano-components/nano-global-nav.entry.js.map +1 -1
  238. package/dist/nano-components/nano-global-search-results.entry.js +1 -1
  239. package/dist/nano-components/nano-global-search-results.entry.js.map +1 -1
  240. package/dist/nano-components/nano-hero.entry.js +1 -1
  241. package/dist/nano-components/nano-hero.entry.js.map +1 -1
  242. package/dist/nano-components/nano-intersection-observe.entry.js +5 -0
  243. package/dist/nano-components/nano-intersection-observe.entry.js.map +1 -0
  244. package/dist/nano-components/nano-resize-observe_2.entry.js +1 -1
  245. package/dist/nano-components/nano-resize-observe_2.entry.js.map +1 -1
  246. package/dist/nano-components/nano-sticker.entry.js +1 -1
  247. package/dist/nano-components/nano-sticker.entry.js.map +1 -1
  248. package/dist/nano-components/nano-table-c85a2fd3.js +5 -0
  249. package/dist/nano-components/nano-table-c85a2fd3.js.map +1 -0
  250. package/dist/nano-components/nano-table.entry.js +1 -1
  251. package/dist/nano-components/scroll-parent-bab1cbf7.js +5 -0
  252. package/dist/nano-components/scroll-parent-bab1cbf7.js.map +1 -0
  253. package/dist/nano-components/search-insights-f64a6b4c.js +5 -0
  254. package/dist/nano-components/search-insights-f64a6b4c.js.map +1 -0
  255. package/dist/nano-components/table.worker-761fba3e.js +5 -0
  256. package/dist/types/components/algolia/algolia-interface.d.ts +2 -1
  257. package/dist/types/components/algolia/algolia.d.ts +7 -1
  258. package/dist/types/components/animation/animation.d.ts +74 -0
  259. package/dist/types/components/animation/animations/easings/easings.d.ts +31 -0
  260. package/dist/types/components/animation/animations/index.d.ts +101 -0
  261. package/dist/types/components/global-nav/global-nav-interface.d.ts +1 -0
  262. package/dist/types/components/global-nav/global-nav.d.ts +2 -6
  263. package/dist/types/components/global-search-results/global-search-results.d.ts +13 -7
  264. package/dist/types/components/intersection-observe/intersection-observe.d.ts +45 -0
  265. package/dist/types/components/select/select.d.ts +2 -4
  266. package/dist/types/components/sticker/sticker.d.ts +0 -5
  267. package/dist/types/components/table/table.utils.d.ts +0 -6
  268. package/dist/types/components.d.ts +213 -43
  269. package/dist/types/interface.d.ts +7 -2
  270. package/dist/types/utils/scroll-parent.d.ts +6 -0
  271. package/dist/types/utils/search-insights.d.ts +22 -0
  272. package/docs-json.json +1031 -117
  273. package/docs-vscode.json +488 -8
  274. package/hydrate/index.js +1636 -249
  275. package/package.json +3 -2
  276. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +0 -53
  277. package/dist/cjs/nano-aspect-ratio.cjs.entry.js.map +0 -1
  278. package/dist/cjs/nano-table-400049cc.js.map +0 -1
  279. package/dist/cjs/table.worker-a37f8365.js.map +0 -1
  280. package/dist/collection/components/aspect-ratio/aspect-ratio.css +0 -38
  281. package/dist/collection/components/aspect-ratio/aspect-ratio.js +0 -106
  282. package/dist/collection/components/aspect-ratio/aspect-ratio.js.map +0 -1
  283. package/dist/components/nano-aspect-ratio.js +0 -70
  284. package/dist/components/nano-aspect-ratio.js.map +0 -1
  285. package/dist/esm/nano-aspect-ratio.entry.js +0 -49
  286. package/dist/esm/nano-aspect-ratio.entry.js.map +0 -1
  287. package/dist/esm/nano-table-a6641aef.js.map +0 -1
  288. package/dist/esm/table.worker-6b597e20.js.map +0 -1
  289. package/dist/nano-components/nano-aspect-ratio.entry.js +0 -5
  290. package/dist/nano-components/nano-aspect-ratio.entry.js.map +0 -1
  291. package/dist/nano-components/nano-table-a6641aef.js +0 -5
  292. package/dist/nano-components/nano-table-a6641aef.js.map +0 -1
  293. package/dist/nano-components/table.worker-6b597e20.js +0 -5
  294. package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +0 -19
  295. /package/dist/nano-components/{table.worker-6b597e20.js.map → table.worker-761fba3e.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"file":"nano-table-06530d49.js","mappings":"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","names":["consoleError","createStore","cyrb53","getElement","getRenderingRef","h","Fragment","writeTask","readTask","debounce","findScrollParent","Host"],"sources":["./src/components/table/table.constants.ts","@worker-helper","./src/components/table/table.store.ts","./src/components/table/table.utils.tsx","./src/components/table/table.header.tsx","./src/components/table/table.cell.tsx","./src/components/table/table.row.tsx","./src/components/table/table.pin-service.ts","./src/components/table/table.scss?tag=nano-table","./src/components/table/table.tsx"],"sourcesContent":["export const CSSNAMESPACE = 'nano-tbl';\n","\nimport { consoleError } from '@stencil/core/internal';\n\n\nconst isInstanceOf = (value, className) => {\n const C = globalThis[className];\n return C != null && value instanceof C;\n}\nconst getTransferables = (value) => {\n if (value != null) {\n if (\n isInstanceOf(value, \"ArrayBuffer\") ||\n isInstanceOf(value, \"MessagePort\") ||\n isInstanceOf(value, \"ImageBitmap\") ||\n isInstanceOf(value, \"OffscreenCanvas\")\n ) {\n return [value];\n }\n if (typeof value === \"object\") {\n if (value.constructor === Object) {\n value = Object.values(value);\n }\n if (Array.isArray(value)) {\n return value.flatMap(getTransferables);\n }\n return getTransferables(value.buffer);\n }\n }\n return [];\n};\n\nlet pendingIds = 0;\nlet callbackIds = 0;\nconst pending = new Map();\nconst callbacks = new Map();\n\nexport const createWorker = (workerPath, workerName, workerMsgId) => {\n const worker = new Worker(workerPath, {name:workerName});\n\n worker.addEventListener('message', ({data}) => {\n if (data) {\n const workerMsg = data[0];\n const id = data[1];\n const value = data[2];\n\n if (workerMsg === workerMsgId) {\n const err = data[3];\n const [resolve, reject, callbackIds] = pending.get(id);\n pending.delete(id);\n\n if (err) {\n const errObj = (err.isError)\n ? Object.assign(new Error(err.value.message), err.value)\n : err.value;\n\n consoleError(errObj);\n reject(errObj);\n } else {\n if (callbackIds) {\n callbackIds.forEach(id => callbacks.delete(id));\n }\n resolve(value);\n }\n } else if (workerMsg === workerMsgId + '.cb') {\n try {\n callbacks.get(id)(...value);\n } catch (e) {\n consoleError(e);\n }\n }\n }\n });\n\n return worker;\n};\n\nexport const createWorkerProxy = (worker, workerMsgId, exportedMethod) => (\n (...args) => new Promise((resolve, reject) => {\n let pendingId = pendingIds++;\n let i = 0;\n let argLen = args.length;\n let mainData = [resolve, reject];\n pending.set(pendingId, mainData);\n\n for (; i < argLen; i++) {\n if (typeof args[i] === 'function') {\n const callbackId = callbackIds++;\n callbacks.set(callbackId, args[i]);\n args[i] = [workerMsgId + '.cb', callbackId];\n (mainData[2] = mainData[2] || []).push(callbackId);\n }\n }\n const postMessage = (w) => (\n w.postMessage(\n [workerMsgId, pendingId, exportedMethod, args],\n getTransferables(args)\n )\n );\n if (worker.then) {\n worker.then(postMessage);\n } else {\n postMessage(worker);\n }\n })\n);\n","import { createStore, ObservableMap } from '@stencil/store';\nimport { cyrb53 } from '../../utils/math';\nimport {\n createWorkerStore,\n syncConfigToWorker,\n syncDataToWorker,\n workerFilter,\n workerSearch,\n workerSort,\n} from './table.worker';\nimport type { TableTypes } from '../../interface';\n\nexport interface TableStores {\n data: ObservableMap<{ rows: TableTypes.NanoTable['rows'] }>;\n config: ObservableMap<{ columns: TableTypes.NanoTable['columns'] }>;\n general: ObservableMap<{\n workerId: string;\n scrollParent: HTMLElement;\n host: HTMLNanoTableElement;\n isReady: boolean;\n isActive?: boolean;\n }>;\n}\n\nfunction colsToWorker(columns: TableTypes.NanoTable['columns']) {\n const safeColumns: Partial<TableTypes.ColumnConfig>[] = JSON.parse(\n JSON.stringify(columns)\n );\n columns.forEach((c) => {\n if (!!c?.sortCompareFn) {\n const safeCol = safeColumns.find((sc) => sc.prop === c.prop);\n safeCol.sortCompareFn = c.sortCompareFn.toString();\n }\n });\n return safeColumns;\n}\n\nconst stores: WeakMap<HTMLElement, TableStores> = new WeakMap();\n\nexport async function generateStore(\n host: HTMLNanoTableElement,\n columns: TableTypes.NanoTable['columns'],\n scrollParent: HTMLElement,\n isReady: boolean\n) {\n const store: TableStores = {\n data: createStore({ rows: [] }),\n config: createStore({ columns }),\n general: createStore({ workerId: null, scrollParent, host, isReady }),\n };\n\n const id = await createWorkerStore(\n store.data.state.rows,\n colsToWorker(store.config.state.columns)\n );\n store.general.state.workerId = id;\n stores.set(host, store);\n\n // sync data from our store to our worker\n\n store.data.use({\n reset: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n });\n store.config.use({\n reset: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n });\n return store;\n}\n\nexport function getStore(host: HTMLElement) {\n return stores.get(host);\n}\n\nfunction getDataType(value: any): TableTypes.ColumnType {\n if (value instanceof Date) {\n return 'date';\n }\n if (['number', 'string', 'boolean'].includes(typeof value)) {\n return typeof value as 'string' | 'number' | 'boolean';\n }\n return 'unknown';\n}\n\nexport function storeSetData(host: HTMLElement, rows: TableTypes.RowData[]) {\n const store = stores.get(host);\n if (!store) return;\n\n const cols = store.config.state.columns;\n const dateCols: (keyof TableTypes.RowData)[] = cols\n .filter((col) => col.type === 'date')\n .reduce((prev, curr) => {\n return [...prev, curr.prop];\n }, []);\n const unknownCols: TableTypes.RowData[] = cols.filter((col) => !col.type);\n\n // augments data with some internal props.\n // discern unknown column types\n // convert dates to numbers for worker\n rows = rows.map((row, i) => {\n // try our best to discern the column type (from first row) if unset\n if (unknownCols.length && i === 0) {\n store.config.state.columns = cols.map((col) => {\n if (unknownCols.includes(col) && row[col.prop] && !col.type) {\n col.type = getDataType(row[col.prop]);\n if (col.type === 'date') dateCols.push(col.prop);\n }\n return col;\n });\n }\n\n // convert date columns into numbers to send to our worker\n dateCols.forEach((colName) => {\n // coerce any date type;\n // Date(), timestamp, valid date string\n const coerceDate = new Date(row[colName]) ?? null;\n if (!!coerceDate && Number(coerceDate)) row[colName] = Number(coerceDate);\n });\n\n row['__index'] = i;\n row['__uuid'] = cyrb53(cols.map((c) => row[c.prop]).join());\n\n return row;\n });\n store.data.state.rows = rows;\n\n if (store.general.state.workerId)\n return syncDataToWorker(store.general.state.workerId, rows);\n}\n\nexport function storeSetConfig(\n host: HTMLElement,\n columns: TableTypes.ColumnConfig[]\n) {\n const store = stores.get(host);\n if (!store) return;\n\n store.config.state.columns = columns;\n\n if (store.general.state.workerId)\n return syncConfigToWorker(\n store.general.state.workerId,\n colsToWorker(columns)\n );\n}\n\nexport async function storeSearch(host: HTMLElement, term: string) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSearch(\n store.general.state.workerId,\n term\n );\n } catch (e) {\n console.warn(e);\n }\n}\n\nexport async function storeFilter(\n host: HTMLElement,\n filters: TableTypes.Filter[]\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerFilter(\n store.general.state.workerId,\n filters\n );\n } catch (e) {\n console.warn(e);\n }\n}\n\nexport async function storeSort(\n host: HTMLNanoTableElement,\n prop: TableTypes.Prop,\n order: TableTypes.Order\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSort(\n store.general.state.workerId,\n prop,\n order\n );\n } catch (e) {\n console.warn(e);\n }\n}\n","import { getRenderingRef, getElement, VNode, h, Fragment } from '@stencil/core';\nimport { getStore } from './table.store';\nimport { CSSNAMESPACE } from './table.constants';\nimport type { TableTypes } from '../../interface';\n\ntype ValidRenderTypes = 'tr' | 'th' | 'td';\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 */\nexport function colDataModel(\n rowIndex: number,\n colIndex: number\n): TableTypes.RenderModel {\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 ? 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 rowModel = rows[rowIndex];\n\n return {\n rowModel,\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 T extends TableTypes.CellProps | TableTypes.CellProps\n>(current: T, extra: T) {\n if (!extra) return current;\n\n // top level merge\n const props: T = { ...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.CellProps\n): TableTypes.CellProps {\n const props: TableTypes.CellProps = { ...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 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?.columnTemplate;\n return tpl ? (\n tpl(h as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n\n/**\n * Renders a class string or map for pinned classes on the v axis.\n * @param type - element tagName\n * @param vPinned - whether element is currently pinned vertically to top or bottom\n * @param toString - render as a string (defaults to class map)\n * @returns a class string or class map\n */\nexport function headerPinClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: false\n): { [key: string]: boolean };\nexport function headerPinClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: true\n): string;\nexport function headerPinClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString = false\n): { [key: string]: boolean } | string {\n const classes = {\n [`${CSSNAMESPACE}__${type}`]: true,\n [`${CSSNAMESPACE}__pin`]: !!vPinned,\n [`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',\n [`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',\n };\n\n if (toString) return classListToStr(classes);\n return classes;\n}\n\n/**\n * Turns a class map {'string': boolean} to class string\n * @param classes - the class map to convert\n * @returns a class string\n */\nexport function classListToStr(classes: { [key: string]: boolean }): string {\n let classString = '';\n Object.entries(classes).forEach(([className, on]) => {\n if (on) classString += className + ' ';\n });\n return classString;\n}\n\n/**\n * Checks whether an element is currently viewable within the viewport\n * @param el - element to check\n * @param percentVisible - the percentage of the element that should be within the viewport\n * @returns true if the element's area percentage is visible\n */\nexport function isInViewport(el: Element, percentVisible = 100) {\n const r = el.getBoundingClientRect();\n const windowHeight =\n window.innerHeight || document.documentElement.clientHeight;\n\n if (\n !r.bottom &&\n !r.top &&\n !r.left &&\n !r.right &&\n !r.height &&\n !r.width &&\n !r.x &&\n !r.y\n )\n return false;\n\n return !(\n Math.floor(100 - ((r.top >= 0 ? 0 : r.top) / +-r.height) * 100) <\n percentVisible ||\n Math.floor(100 - ((r.bottom - windowHeight) / r.height) * 100) <\n percentVisible\n );\n}\n","import { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n colheadFootRender,\n headerPinClasses,\n mergeProperties,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\n// TABLE HEADERS\n// (thead > tr > th, tfoot > tr > th)\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnSortClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLTableCellElement\n ) => void;\n defaults: { sortable?: boolean };\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n onColumnSortClick,\n defaults,\n}) => {\n // Sort handling\n\n function handleColumnSortClick(e: MouseEvent & { target: HTMLElement }) {\n let order;\n switch (column.order) {\n case 'asc':\n order = 'desc';\n break;\n case 'desc':\n order = null;\n break;\n default:\n order = 'asc';\n }\n onColumnSortClick(order, column.prop, e.target.closest('th'));\n }\n\n function isSortable() {\n return (\n (!!defaults.sortable && column.sortable !== false) ||\n (!defaults.sortable && column.sortable === true)\n );\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...headerPinClasses('th', column.pinned),\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__filtered`]:\n column.filter !== undefined && column.filter !== null,\n },\n };\n let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const content = colheadFootRender(column);\n\n if (!content) return <Fragment></Fragment>;\n\n props =\n Number((props as TableTypes.CellProps).colSpan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (isSortable()) {\n const sort = column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n\n props = { ...props, 'aria-sort': sort };\n }\n\n return (\n <th {...props} key={column.prop}>\n {isSortable() ? (\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnSortClick}\n >\n {colheadFootRender(column)}\n {column.filter !== undefined && column.filter !== null && (\n <nano-icon name=\"light/filter\" />\n )}\n {!!column.order &&\n (column.order === 'desc' ? (\n <nano-icon name=\"solid/long-arrow-down\" />\n ) : (\n <nano-icon name=\"solid/long-arrow-up\" />\n ))}\n <div class={`${CSSNAMESPACE}__status-icons`}>\n <nano-icon name=\"light/chevron-down\" />\n </div>\n </button>\n ) : (\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {column.filter !== undefined && column.filter !== null && (\n <nano-icon name=\"light/bars-filter\" />\n )}\n </div>\n )}\n </th>\n );\n};\n","import {\n Fragment,\n FunctionalComponent,\n h,\n VNode,\n getRenderingRef,\n} from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n classListToStr,\n colDataModel,\n fetchStores,\n mergeCellProperties,\n} from './table.utils';\nimport type { NanoResizeObserveCustomEvent, TableTypes } from '../../interface';\nimport type { Table } from './table';\n\n// TABLE CELL\n// (tbody > tr > td, tbody > tr > th)\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 */\nfunction cellRender(\n rowIndex: number,\n colIndex: number\n): VNode | string | Element {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const tpl = columns[colIndex]?.cellTemplate;\n const model = colDataModel(rowIndex, colIndex);\n const tableInstance = getRenderingRef() as Table;\n\n if (!!model.cellModel && columns[colIndex].type === 'date') {\n const d = new Date(model.cellModel);\n if (d instanceof Date && !isNaN(d as any)) {\n model.cellModel = !tpl\n ? `${new Date(model.cellModel).toLocaleDateString()} ${new Date(\n model.cellModel\n ).toLocaleTimeString()}`\n : d;\n }\n }\n\n // Wrap the h pragma, then we can know if we're using Stencil's\n // jsx renderer or a different one\n let hCalled = false;\n const hWrap = (...args: [any[]]) => {\n hCalled = true;\n return h(...args);\n };\n let tplResult = tpl ? tpl(hWrap, model) : undefined;\n\n if (\n tplResult &&\n tableInstance.customRenderer &&\n tplResult['$attrs$'] === undefined &&\n !(tplResult instanceof Element) &&\n typeof tplResult !== 'string' &&\n !hCalled\n ) {\n // template result is jsx *not* from Stencil.\n // Render it now and output it later.\n const templateEle = document.createElement('template');\n // @ts-expect-error\n const result = tableInstance.customRenderer(tplResult, templateEle.content);\n // custom rendering can render to the templateEle OR return a promise<string>\n tplResult = result && result['then'] ? result : templateEle;\n }\n\n return tplResult ? (\n tplResult\n ) : model.cellModel !== undefined && model.cellModel !== null ? (\n <Fragment>{model.cellModel?.toString()}</Fragment>\n ) : (\n ''\n );\n}\n\nexport const baseCellClasses = (\n colIndex: number,\n toString: boolean = false\n) => {\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n\n const classes = {\n [`${CSSNAMESPACE}__td`]: true,\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__pin`]: !!column.pinned,\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n };\n\n if (toString) return classListToStr(classes);\n return classes;\n};\n\ntype TableCellProps = {\n rowIndex: number;\n colIndex: number;\n nestedContent?: () => VNode;\n};\n\nexport const TableCell: FunctionalComponent<TableCellProps> = ({\n rowIndex,\n colIndex,\n nestedContent,\n}) => {\n const Content = (): TableTypes.TplResult =>\n nestedContent\n ? nestedContent()\n : cellRender(rowIndex, colIndex) || (\n <span class=\"placeholder\">&nbsp;</span>\n );\n\n let CellType = 'td';\n const tableInstance = getRenderingRef() as Table;\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n let props = mergeCellProperties(rowIndex, colIndex, {\n class: baseCellClasses(colIndex),\n });\n\n if (column.rowHeader) {\n props =\n Number((props as TableTypes.CellProps).rowSpan) > 1\n ? { ...props, scope: 'rowgroup' }\n : { ...props, scope: 'row' };\n CellType = 'th';\n }\n\n const ContentWrap = (props) => {\n const content = Content();\n\n return (\n <div\n ref={(d) => {\n if (!d) return;\n\n if (content instanceof Element) {\n // custom rendered an element\n d.replaceChildren();\n d.append(content['content'] || content);\n } else if (content['then']) {\n // custom rendered a promise. Most likely within SSR.\n // @ts-expect-error\n content.then((res) => (d.innerHTML = res));\n }\n }}\n {...props}\n class={{\n [`${CSSNAMESPACE}__cell-content`]: true,\n [`${CSSNAMESPACE}__cell-content--wrap`]: !!column.wrap,\n }}\n innerHTML={\n typeof content === 'string' && content.includes('<')\n ? content\n : undefined\n }\n >\n {(typeof content !== 'string' || !content.includes('<')) &&\n !content['then'] &&\n !(content instanceof Element) &&\n content}\n </div>\n );\n };\n\n return (\n <CellType\n role={tableInstance.type === 'grid' ? 'gridcell' : undefined}\n {...props}\n >\n {column.autoTooltip && !column.wrap ? (\n <nano-resize-observe\n notifyContentFit=\"x\"\n onNanoResizeContentFitChange={(\n e: NanoResizeObserveCustomEvent<{ x: boolean }>\n ) =>\n ((e.target.firstElementChild as HTMLNanoTooltipElement).disabled =\n e.detail.x)\n }\n >\n <nano-tooltip\n disabled\n placement=\"top\"\n onNanoShow={(e) =>\n ((e.target.closest(CellType) as HTMLElement).style.zIndex = '100')\n }\n onNanoHide={(e) =>\n ((e.target.closest(CellType) as HTMLElement).style.zIndex = '')\n }\n >\n <ContentWrap />\n <span slot=\"content\">\n <Content />\n </span>\n </nano-tooltip>\n </nano-resize-observe>\n ) : (\n <ContentWrap />\n )}\n </CellType>\n );\n};\n","import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport { headerPinClasses, mergeProperties, rowDataModel } from './table.utils';\nimport { baseCellClasses } from './table.cell';\nimport { CSSNAMESPACE } from './table.constants';\nimport type { TableTypes } from '../../interface';\n\n// TABLE ROWS\n// (thead > tr, tfoot > tr, tr)\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex: number;\n rowModel: TableTypes.RowData;\n onRowPinned?: TableTypes.PinnedCb;\n};\n\nconst tableCellContent = (\n props: TableTypes.TableRowCellHelperProps,\n children: VNode[],\n ctx: 'col' | 'row'\n): VNode => {\n const cell = (\n <div\n {...props.wrapperProps}\n class={{\n [`${CSSNAMESPACE}__cell-content`]: true,\n [`${CSSNAMESPACE}__cell-content--wrap`]: props.wrap,\n }}\n >\n {children}\n </div>\n );\n return props.header ? (\n <th scope={ctx} {...props.cellProps}>\n {cell}\n </th>\n ) : (\n <td {...props.cellProps}>{cell}</td>\n );\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, rowModel },\n children,\n utils\n) => {\n // helper, generates <td> or <th>\n const TableCell: FunctionalComponent<TableTypes.TableRowCellHelperProps> = (\n { header, wrap, cellProps, wrapperProps },\n children\n ): VNode => {\n return tableCellContent(\n { header, wrap, cellProps, wrapperProps },\n children,\n 'row'\n );\n };\n\n let extraProps = {};\n\n if (!rowModel) {\n const model = rowDataModel(rowIndex);\n rowModel = model.rowModel;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;\n }\n\n let rowPinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n rowPinned = rowRenderer.pinned({ rowModel, rowIndex });\n }\n\n const props = mergeProperties(\n { class: headerPinClasses('tr', rowPinned, true) },\n extraProps\n );\n const tpl = rowRenderer?.template;\n\n /**\n * Applies appropriate classes to td / th VNodes;\n * which can be supplied by user defined templates\n * @param children virtual / jsx node array\n * @returns virtual / jsx node array\n */\n const applyCellClasses = (children: VNode[]) => {\n return utils.map(children, (cNode, i) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: baseCellClasses(i, true),\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n };\n\n if (tpl) {\n let toRender = tpl(\n h as TableTypes.HFunc<VNode>,\n {\n renderedRow: (\n <tr {...props} key={rowModel.__uuid}>\n {children}\n </tr>\n ),\n rowModel,\n rowIndex,\n },\n TableCell\n );\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node, i) => {\n if (node.vtag === 'tr') {\n if (!node.vkey) node.vkey = `${rowModel.__uuid}_${i}`;\n\n node.vattrs = mergeProperties(\n { class: headerPinClasses('tr', rowPinned, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = applyCellClasses(node.vchildren);\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return (\n <tr {...props} key={rowModel.__uuid}>\n {applyCellClasses(children)}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onRowPinned?: TableTypes.PinnedCb;\n onColPinned?: TableTypes.PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer }, // onRowPinned, onColPinned\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const TableHeadFootCell: FunctionalComponent<\n TableTypes.TableRowCellHelperProps\n > = ({ header, wrap, cellProps, wrapperProps }, children): VNode => {\n return tableCellContent(\n { header, wrap, cellProps, wrapperProps },\n children,\n 'col'\n );\n };\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: headerPinClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(\n h as TableTypes.HFunc<VNode>,\n {\n renderedRow: <tr {...props}>{children}</tr>,\n },\n TableHeadFootCell\n );\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: headerPinClasses('tr', pinned, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: headerPinClasses(\n cNode.vtag.toString() as 'th' | 'td',\n pinned,\n true\n ),\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return <tr {...props}>{children}</tr>;\n};\n","import { readTask, writeTask } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\n\nfunction addStyleSheet(id, css) {\n const styleSheet =\n (document.getElementById(id) as HTMLStyleElement) ||\n document.createElement('style');\n styleSheet.id = id;\n styleSheet.innerHTML = css;\n if (!styleSheet.isConnected) document.head.append(styleSheet);\n}\n\n/**\n * Manages the complex business of table 'pinning'; sticking columns and rows to the scrolling parent element.\n *\n * *knowing* when an element is pinned is tricky.\n * Managing the display of multiple, side-by-side pinned elements is trickier still.\n *\n * Pinning table columns are very different from pinning table rows:\n * - Rows are actual elements we can select, measure and apply styles to.\n * - Columns are disparate collections of elements that are much harder to select, measure and apply styles to.\n *\n * With this in mind, how columns and rows are pinned is different:\n * Rows can have changes applied directly, Columns have changes applied via dynamic stylesheets.\n *\n * The service is slightly opinionated on how it pins rows and columns (with some room for override):\n * - Pinned columns are stuck consecutively, without overlapping.\n * e.g. If column 'name' and 'surname' are both `pin: 'start'`; 'surname' will display **next** to name.\n * Both columns are important for context\n *\n * - Pinned rows are set to overlap *when* they have the same ancestor,\n * and stuck consecutively when they have a different ancestor.\n * e.g. `tbody > tr.pin ~ tr.pin` the second row will **overlap** the first; it's unlikely both rows will be important for context.\n * `thead > tr.pin`, `tbody > tr.pin`. Both rows are required for context so will require next to each other.\n *\n * Devs can override this behaviour by setting `--pin-start`, `--pin-end`, `--pin-top`, `--pin-bottom` custom vars.\n */\nexport class TablePinService {\n // Private state\n\n private cachedColMeta: WeakMap<HTMLElement, { width: number; idx: number }> =\n new WeakMap();\n private tableId: string;\n private tableEle: HTMLTableElement;\n private scrollElement: HTMLElement;\n private startColumns: HTMLCollection;\n private endColumns: HTMLCollection;\n private topRows: HTMLCollection;\n private bottomRows: HTMLCollection;\n private tableDims: { height: number; width: number };\n\n constructor(table: HTMLTableElement, scrollElement: HTMLElement) {\n this.tableEle = table;\n this.tableId = this.tableEle.id;\n this.scrollElement = scrollElement;\n\n // Secret sauce - `getElementsByClassName` is a live collection.\n // An HTMLCollection will keep itself up-to-date as elements come and go\n // So we can keep assessing on scroll\n\n this.startColumns = table\n .querySelector('thead')\n .getElementsByClassName(`${CSSNAMESPACE}__pin--start`);\n this.endColumns = table\n .querySelector('thead')\n .getElementsByClassName(`${CSSNAMESPACE}__pin--end`);\n this.topRows = table.getElementsByClassName(`${CSSNAMESPACE}__pin--top`);\n this.bottomRows = table.getElementsByClassName(\n `${CSSNAMESPACE}__pin--bottom`\n );\n this.onResize();\n }\n\n // Pinned cols & change detection\n private get pinnedStart() {\n return this._pinnedStart;\n }\n private set pinnedStart(cols: HTMLElement[]) {\n this._pinnedStart = cols;\n this.handlePinnedStartChange();\n }\n private _pinnedStart: HTMLElement[] = [];\n\n /**\n * Called when columns are either pinned or unpinned.\n * Attaches a tiny stylesheet to target the 'last' start column.\n * (e.g. We only want to apply drop shadow on last pinned start column - not all pinned columns)\n */\n private handlePinnedStartChange() {\n writeTask(() => {\n if (this.pinnedStart.length) {\n this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--start`);\n const lastActiveCol = this.cachedColMeta.get(\n this.pinnedStart[this.pinnedStart.length - 1]\n );\n\n addStyleSheet(\n `${this.tableId}-col-start-active-style`,\n /* css */ `\n #${this.tableId} tr > :nth-child(${lastActiveCol.idx + 1}) {\n --pin-start-active: 1;\n }\n `\n );\n } else {\n this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--start`);\n addStyleSheet(`${this.tableId}-col-start-active-style`, ``);\n }\n });\n }\n\n private get pinnedEnd() {\n return this._pinnedEnd;\n }\n private set pinnedEnd(cols: HTMLElement[]) {\n this._pinnedEnd = cols;\n this.handlePinnedEndChange();\n }\n private _pinnedEnd: HTMLElement[] = [];\n\n /**\n * Called when columns are either pinned or unpinned.\n * Attaches a tiny stylesheet to target the 'first' end column.\n * (e.g. We only want to apply drop shadow on first pinned end column - not all pinned columns)\n */\n private handlePinnedEndChange() {\n writeTask(() => {\n if (this.pinnedEnd.length) {\n this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--end`);\n const firstActiveCol = this.cachedColMeta.get(this.pinnedEnd[0]);\n\n addStyleSheet(\n `${this.tableId}-col-end-active-style`,\n /* css */ `\n #${this.tableId} tr > :nth-child(${\n firstActiveCol.idx + 1\n }) { --pin-end-active: 1; }\n `\n );\n } else {\n this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--end`);\n addStyleSheet(`${this.tableId}-col-end-active-style`, ``);\n }\n });\n }\n\n private get cssColDimensionCacheKey() {\n return this._cssColDimensionCacheKey;\n }\n private set cssColDimensionCacheKey(key: string) {\n if (key === this._cssColDimensionCacheKey) return;\n this._cssColDimensionCacheKey = key;\n this.createPinnedColDimensionStyles();\n }\n private _cssColDimensionCacheKey: string = '';\n\n /**\n * To only generate column dimension styles when necessary we\n * maintain a cache key string via serialised column meta.\n * Only when this key changes do we generate a new stylesheet\n */\n private generateCssCacheKey() {\n let key = '';\n for (const col of this.startColumns) {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n key += `${colMeta.idx}-start-${colMeta.width}`;\n }\n for (const col of this.endColumns) {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n key += `${colMeta.idx}-start-${colMeta.width}`;\n }\n this.cssColDimensionCacheKey = key;\n }\n\n /**\n * Generates pinned column width offset styles\n * so pinned columns can appear stuck together,\n * then attaches a stylesheet.\n */\n private createPinnedColDimensionStyles() {\n let widthS = 0;\n let widthE = 0;\n const startCols = Array.from(this.startColumns);\n const endCols = Array.from(this.endColumns).reverse();\n\n const css = /* css */ `\n ${startCols\n .map((col) => {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n widthS += colMeta.width - 1 || -1;\n return /* css */ `\n #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ td,\n #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ th {\n --pin-start: ${widthS - 1}px;\n }\n `;\n })\n .join('')}\n ${endCols\n .map((col) => {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n widthE += colMeta.width - 1 || -1;\n return /* css */ `\n #${this.tableId} tr > td:has(~ :nth-child(${colMeta.idx + 1})),\n #${this.tableId} tr > th:has(~ :nth-child(${colMeta.idx + 1})) {\n --pin-end: ${widthE - 1}px;\n }\n `;\n })\n .join('')}\n `;\n addStyleSheet(`${this.tableId}-dimension-style`, css);\n }\n\n private getParentOffsets() {\n const { x, y } = this.scrollElement.getBoundingClientRect();\n\n let offsetX = x;\n let offsetY = y;\n\n if (this.scrollElement === document.documentElement) {\n offsetX = this.scrollElement.offsetLeft;\n offsetY = this.scrollElement.offsetTop;\n }\n return { offsetX, offsetY };\n }\n\n /**\n * Loops through all 'top' & 'bottom' rows (on scroll or resize)\n * Manages their visual state by applying classes on stuck / unstuck\n * And their pinned offset / distance\n */\n public assessRows() {\n if (!this.topRows.length && !this.bottomRows.length) return;\n\n // top rows\n if (this.topRows.length) {\n readTask(async () => {\n let heightAggregate = 0;\n let cacheParent: HTMLElement;\n const { offsetY } = this.getParentOffsets();\n\n for (const topRow of this.topRows) {\n const { y, height } = topRow.getBoundingClientRect();\n const currParent = topRow.parentElement;\n // we'll use the applied `--pin-top` css var to decide row offset.\n // This allows devs to override this behaviour through selector specificity\n const pinTop = getComputedStyle(topRow).getPropertyValue('--pin-top');\n const offset = pinTop !== '' ? parseFloat(pinTop) : heightAggregate;\n\n // we need to wait for the row to finish sticking\n // and generating it's offset (`--pin-top`) so we can see, on\n // subsequent rows *if* the offset was applied\n await new Promise<void>((resolve) =>\n writeTask(() => {\n if (y - offsetY <= offset) {\n topRow.classList.add(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--top`\n );\n } else {\n topRow.classList.remove(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--top`\n );\n }\n\n // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)\n // so only aggregate height / offset when cacheParent is different from current parent.\n // Devs can override this behaviour by manually setting `--pin-bottom` on the table row\n if (cacheParent !== currParent) {\n currParent.style.setProperty(\n '--pin-top',\n `${heightAggregate - 1}px`\n );\n heightAggregate += height - 1;\n cacheParent = currParent;\n }\n resolve();\n })\n );\n }\n });\n }\n\n // bottom rows\n if (this.bottomRows.length) {\n const bottomRows = Array.from(this.bottomRows).reverse();\n readTask(async () => {\n let cacheParent: HTMLElement;\n let heightAggregate = 0;\n const { offsetY } = this.getParentOffsets();\n\n for (const bottomRow of bottomRows) {\n if (!bottomRow.isConnected) continue;\n\n const { y, height } = bottomRow.getBoundingClientRect();\n const currParent = bottomRow.parentElement;\n // we'll use the applied `--pin-bottom` css var to decide row offset.\n // This allows devs to override this behaviour through selector specificity\n const pinBottom =\n getComputedStyle(bottomRow).getPropertyValue('--pin-bottom');\n const offset =\n pinBottom !== '' ? parseFloat(pinBottom) : heightAggregate;\n\n // we need to wait for the row to finish sticking\n // and generating it's offset (`--pin-bottom`) to we can see, on\n // subsequent rows *if* the offset was applied\n await new Promise<void>((resolve) =>\n writeTask(() => {\n if (this.tableDims.height + offsetY - (y + height) <= offset) {\n bottomRow.classList.add(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--bottom`\n );\n } else {\n bottomRow.classList.remove(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--bottom`\n );\n }\n\n // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)\n // so only aggregate height / offset when cacheParent is different from current parent.\n // Devs can override this behaviour by manually setting `--pin-bottom` on the table row\n if (cacheParent !== currParent) {\n currParent.style.setProperty(\n '--pin-bottom',\n `${heightAggregate - 1}px`\n );\n heightAggregate += height - 1;\n cacheParent = currParent;\n }\n resolve();\n })\n );\n }\n });\n }\n }\n\n /**\n * Loops through all 'start' & 'end' columns (on scroll or resize)\n * Caches meta about each column (e.g. size, position-index)\n * and decides which columns are pinned\n */\n public async assessCols() {\n if (!this.startColumns.length && !this.endColumns.length) return;\n\n let boundBox: DOMRect;\n let currPinned: HTMLElement;\n let parentEles: Element[];\n\n const done = new Promise<void>((resolve) => {\n // start cols\n if (this.startColumns.length) {\n readTask(() => {\n const { offsetX } = this.getParentOffsets();\n // cumulatively add widths of columns together\n // 'cos columns stick together\n let widthAggregate = offsetX;\n parentEles = Array.from(this.startColumns[0].parentElement.children);\n\n for (const startCol of this.startColumns) {\n boundBox = startCol.getBoundingClientRect();\n // cache meta for later\n this.cachedColMeta.set(startCol as HTMLElement, {\n width: boundBox.width,\n idx: parentEles.indexOf(startCol),\n });\n\n currPinned = this.pinnedStart.find((c) => c === startCol);\n if (boundBox.x < widthAggregate) {\n // this column is pinned\n if (!currPinned)\n this.pinnedStart = [\n ...this.pinnedStart,\n startCol as HTMLElement,\n ];\n } else if (currPinned) {\n // this column is unpinned\n this.pinnedStart = this.pinnedStart.filter((c) => c !== startCol);\n }\n widthAggregate += boundBox.width;\n }\n if (!this.endColumns.length) resolve();\n });\n }\n\n // end cols\n if (this.endColumns.length) {\n readTask(() => {\n const endCols = Array.from(this.endColumns).reverse();\n parentEles = Array.from(this.endColumns[0].parentElement.children);\n const { offsetX } = this.getParentOffsets();\n // cumulatively add widths of columns together\n // 'cos columns stick together\n let widthAggregate = 0;\n\n for (const endCol of endCols) {\n boundBox = endCol.getBoundingClientRect();\n // cache meta for later\n this.cachedColMeta.set(endCol as HTMLElement, {\n width: boundBox.width,\n idx: parentEles.indexOf(endCol),\n });\n\n currPinned = this.pinnedEnd.find((c) => c === endCol);\n if (\n this.tableDims.width + offsetX - boundBox.right <=\n widthAggregate\n ) {\n // this column is pinned\n if (!currPinned)\n this.pinnedEnd = [endCol as HTMLElement, ...this.pinnedEnd];\n } else if (currPinned) {\n // this column is unpinned\n this.pinnedEnd = this.pinnedEnd.filter((c) => c !== endCol);\n }\n widthAggregate += boundBox.width;\n }\n resolve();\n });\n }\n });\n\n await done;\n // potentially generate a new css stylesheet if anything changed\n this.generateCssCacheKey();\n }\n\n private cacheX = 0;\n private cacheY = 0;\n\n public onScroll(pos: { x: number; y: number }) {\n if (this.cacheX !== pos.x) {\n this.cacheX = pos.x;\n this.assessCols();\n }\n if (this.cacheY !== pos.y) {\n this.cacheY = pos.y;\n this.assessRows();\n }\n }\n\n public onResize() {\n const width = this.scrollElement.clientWidth;\n const height = this.scrollElement.clientHeight;\n\n this.tableDims = { width, height };\n this.assessCols();\n this.assessRows();\n }\n}\n","@use '../../global/style/utilities/globals' as t;\n@use '../../global/style/nano-theme/form' as f;\n\nnano-table {\n /**\n * @prop --max-col-width: Default 200px;\n\n * @prop --color: Deafults to var(--nano-color-mediumgrey, #68767e);\n * @prop --font-size: Deafults to 0.87rem;\n * @prop --cell-line-height: Deafults to 1.5;\n\n * @prop --border-color: Deafults to var(--nano-color-palegrey, #b5aea7);\n * @prop --border-style: Deafults to thin solid var(--border-color);\n * @prop --border-tint-color: Deafults to var(--nano-color-blue, #90c6e7);\n * @prop --border-tint-style: Deafults to 2px solid var(--border-tint-color);\n\n * @prop --cell-bg-rgb: Deafults to var(--nano-color-white-rgb, 255 255 255);\n * @prop --head-bg-rgb: Deafults to var(--cell-bg-rgb);\n * @prop --foot-bg-rgb: Deafults to var(--cell-bg-rgb);\n * @prop --th-row-bg-rgb: Deafults to var(--cell-bg-rgb);\n * @prop --ordered-bg-rgb: Deafults to var(--nano-color-offwhite-rgb, 249 249 251);\n\n * @prop --td-padding-start: Deafults to 0.625rem;\n * @prop --td-padding-end: Deafults to 0.625rem;\n * @prop --td-padding-top: Deafults to 0.5rem;\n * @prop --td-padding-bottom: Deafults to 0.4125rem;\n\n * @prop --th-padding-start: Deafults to 0.625rem;\n * @prop --th-padding-end: Deafults to 0.625rem;\n * @prop --th-padding-top: Deafults to 0.875rem;\n * @prop --th-padding-bottom: Deafults to 0.6875rem;\n\n * @prop --td-padding-v: Deafults to var(--td-padding-top) var(--td-padding-bottom);\n * @prop --td-padding-h: Deafults to var(--td-padding-start) var(--td-padding-end);\n\n * @prop --th-padding-v: Deafults to var(--th-padding-top) var(--th-padding-bottom);\n * @prop --th-padding-h: Deafults to var(--th-padding-start) var(--th-padding-end);\n\n * @prop --foot-th-padding-v: Deafults to var(--td-padding-top) var(--td-padding-bottom);\n * @prop --foot-th-padding-h: Deafults to var(--td-padding-start) var(--td-padding-end);\n\n * @prop --head-th-padding-v: Deafults to var(--th-padding-top) var(--th-padding-bottom);\n * @prop --head-th-padding-h: Deafults to var(--th-padding-start) var(--th-padding-end);\n\n * @prop --bookend-col-padding: Deafults to 2rem;\n */\n\n display: block;\n inline-size: 100%;\n\n // general\n --max-col-width: clamp(200px, 500px, 50vw);\n\n // text\n --color: var(--nano-color-mediumgrey, #68767e);\n --font-size: 0.87rem;\n --cell-line-height: 1.5;\n --thead-font-size: 0.95rem;\n --thead-color: #455560;\n --tfoot-color: #455560;\n\n // borders\n --border-color: #dddbda;\n --border-style: thin solid var(--border-color);\n --border-tint-color: #0084a9;\n --border-tint-style: 3px solid var(--border-tint-color);\n\n // backgrounds\n --cell-bg-rgb: var(--nano-color-white-rgb, 255 255 255);\n --head-bg-rgb: 250 250 249;\n --foot-bg-rgb: var(--head-bg-rgb);\n --th-row-bg-rgb: var(--cell-bg-rgb);\n --ordered-bg-rgb: var(--nano-color-offwhite-rgb, 249 249 251);\n\n // spacing\n --td-padding-start: 0.625rem;\n --td-padding-end: 0.625rem;\n --td-padding-top: 0.6rem;\n --td-padding-bottom: 0.6125rem;\n --th-padding-start: 0.725rem;\n --th-padding-end: 0.625rem;\n --th-padding-top: 0.875rem;\n --th-padding-bottom: 0.6875rem;\n --td-padding-v: var(--td-padding-top) var(--td-padding-bottom);\n --td-padding-h: var(--td-padding-start) var(--td-padding-end);\n --th-padding-v: var(--th-padding-top) var(--th-padding-bottom);\n --th-padding-h: var(--th-padding-start) var(--th-padding-end);\n --foot-th-padding-v: var(--td-padding-top) var(--td-padding-bottom);\n --foot-th-padding-h: var(--td-padding-start) var(--td-padding-end);\n --head-th-padding-v: var(--th-padding-top) var(--th-padding-bottom);\n --head-th-padding-h: var(--th-padding-start) var(--th-padding-end);\n --bookend-col-padding: 2rem;\n}\n\n.nano-tbl {\n $base: &;\n\n color: var(--color);\n text-align: start;\n inline-size: 100%;\n font-size: var(--font-size);\n border-spacing: 0 0;\n border-collapse: separate;\n background: rgb(var(--cell-bg-rgb));\n border-inline-end: 1px solid transparent;\n border-block-start: 1px solid transparent;\n position: relative;\n z-index: 1;\n\n &__wrap {\n display: table;\n min-inline-size: 100%;\n // container-type: inline-size;\n }\n\n &__top-anchor {\n @include t.visually-hide;\n\n position: relative;\n }\n\n &__ordered {\n background-color: var(--ordered-bg);\n border-inline-start: var(--border-style);\n border-inline-end: var(--border-style);\n }\n\n &__order-btn {\n padding: 0;\n border: none;\n outline: none;\n font: inherit;\n background: none;\n appearance: none;\n color: inherit;\n display: flex;\n gap: 10px;\n align-items: center;\n inline-size: 100%;\n\n &:focus-visible {\n outline: none;\n box-shadow: #{f.$control-focus-style} inset;\n }\n }\n\n &__status-icons {\n margin-inline: auto 10px;\n display: flex;\n gap: 10px;\n }\n\n &__progress-bar {\n font-size: 0.2rem;\n position: sticky;\n inset-block-start: 0;\n inset-inline: 0;\n z-index: 10;\n transition: scale 0.25s;\n transform: scale(0);\n inline-size: 100%;\n block-size: 0;\n\n &--show {\n transform: scale(1);\n block-size: auto;\n }\n }\n\n &__caption {\n &--hide {\n @include t.visually-hide;\n }\n }\n\n // Shared styles in th, td across thead / tbody / tfoot\n\n &__td,\n &__th {\n line-height: var(--cell-line-height);\n text-align: start;\n border-block-start: var(--border-style);\n max-inline-size: var(--max-col-width);\n background-color: rgb(var(--cell-bg-rgb));\n\n // @container (min-width: 700px) {\n // color: red !important;\n // }\n\n tbody:first-of-type tr:first-child & {\n border-block-start: none;\n }\n\n tbody:last-of-type tr:last-child & {\n border-block-end: var(--border-style);\n }\n\n // 'bookend' (larger) padding on larger screens\n .md & {\n &:first-child #{$base}__cell-content {\n padding-inline-start: var(--bookend-col-padding);\n }\n\n &:last-child #{$base}__cell-content {\n padding-inline-end: var(--bookend-col-padding);\n }\n }\n\n // force override of bookend on small screens css media\n // queries are faster than the breakpoints from `nano-resize-observer`\n @include t.media-breakpoint-down('md') {\n &:first-child #{$base}__cell-content {\n padding-inline-start: var(--td-padding-start) !important;\n }\n\n &:last-child #{$base}__cell-content {\n padding-inline-end: var(--td-padding-end) !important;\n }\n }\n\n thead & {\n color: var(--thead-color);\n font-weight: 800;\n background: rgb(var(--head-bg-rgb) / 100%);\n font-size: var(--thead-font-size);\n border-block-start: none !important;\n\n #{$base}__cell-content {\n padding-block: var(--head-th-padding-v);\n padding-inline: var(--head-th-padding-h);\n }\n\n .nano-sortable__keyboard-handle {\n position: absolute;\n inset-inline-end: 5px;\n inset-block-start: 50%;\n transform: translateY(-50%);\n background: white;\n z-index: 10;\n }\n }\n\n tfoot & {\n color: var(--tfoot-color);\n font-weight: 800;\n border-block-start: none;\n background: rgb(var(--foot-bg-rgb) / 100%);\n font-size: var(--thead-font-size);\n\n #{$base}__cell-content {\n padding-block: var(--foot-th-padding-v);\n padding-inline: var(--foot-th-padding-h);\n }\n }\n\n &.nano-tbl__ordered {\n background-color: rgb(var(--ordered-bg-rgb) / 80%) !important;\n }\n }\n\n &__cell-content {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-block: var(--td-padding-v);\n padding-inline: var(--td-padding-h);\n\n &--no-result {\n padding-block: 2rem;\n }\n\n &--wrap {\n white-space: normal;\n overflow: visible;\n }\n }\n\n tbody {\n will-change: scroll-position;\n opacity: 1;\n transition: 0.1s ease opacity;\n\n &#{$base}__loading {\n z-index: -1;\n position: relative;\n }\n\n &#{$base}__inactive {\n opacity: 0;\n }\n #{$base}__tr:has(~ #{$base}__tr--placeholder) {\n display: none;\n }\n #{$base}__tr--placeholder ~ #{$base}__tr {\n display: none;\n }\n }\n\n // tbody th\n\n th[scope='row'] {\n font-weight: 800;\n margin: 0;\n }\n\n // pinned styles\n\n &__tr {\n --base-z: 0;\n }\n\n &__pin {\n $pin: &;\n\n z-index: var(--z, var(--base-z, 0));\n\n #{$base}__th, #{$base}__td {\n z-index: var(--z, var(--base-z, 0));\n }\n\n // Pinned start columns\n // Base: table ... tr > th.__pin--start, td.__pin--start\n // Pinned: table.__pinned--start ... tr > th.__pin--end, td.__pin--start\n\n &--start {\n // base styles\n position: sticky;\n inset-inline-start: var(--pin-start, -1px);\n // transition: max-width 0.25s ease;\n\n &::after {\n // Perf: Box shadow applied on pseudo element\n // and hidden / shown > than applying new box shadow on the fly\n\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: 5px 0 4px -1px rgb(0 0 0 / 20%);\n opacity: var(--pin-start-active, 0);\n z-index: -1;\n }\n\n // pinned styles\n #{$base}__pinned--start & {\n // max-width: 125px !important;\n --z: calc(var(--base-z) + 3) !important;\n\n // .sm & {\n // max-width: var(--max-col-width) !important;\n // }\n }\n }\n\n // Pinned end columns\n // Base: table ... tr > th.__pin--end, td.__pin--end\n // Pinned: table.__pinned--end ... tr > th.__pin--end, td.__pin--end\n\n &--end {\n // base styles\n position: sticky;\n\n // Pinned end columns are deactivated on smaller screens\n #{$base}__pin--start + & {\n inset-inline-end: auto !important;\n\n &::after {\n display: none;\n }\n }\n\n // Breakpoint for larger screens\n .sm & {\n // base styles\n inset-inline-end: var(--pin-end, -1px);\n max-inline-size: min(50vw, 200px);\n\n &::after {\n // Perf: Box shadow applied on pseudo element\n // and hidden / shown > than applying new box shadow on the fly\n\n display: block !important;\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: -5px 1px 4px -1px rgb(0 0 0 / 20%);\n opacity: var(--pin-end-active, 0);\n z-index: -1;\n }\n }\n\n // pinned styles\n #{$base}__pinned--end & {\n .sm & {\n --z: calc(var(--base-z) + 2) !important;\n }\n }\n }\n\n // Pinned top rows\n // Base: table ... tr.__pin--top\n // Pinned: table ... tr.__pin--top.__pinned--top\n\n &--top {\n // base styles\n #{$base}__th, #{$base}__td {\n position: sticky;\n inset-block-start: var(--pin-top, -1px);\n }\n\n #{$base}__pin--end, #{$base}__pin--start {\n --z: calc(var(--base-z) + 1);\n }\n\n // pinned styles\n &#{$base}__pinned--top {\n --base-z: 4;\n }\n\n // tbody pinned styles\n tbody & {\n &#{$base}__pinned--top {\n #{$base}__th, #{$base}__td {\n box-shadow: 1px 3px 4px -1px rgb(0 0 0 / 10%);\n }\n }\n }\n }\n\n // Pinned bottom rows\n // Base: table ... tr.__pin--bottom\n // Pinned: table ... tr.__pin--bottom.__pinned--bottom\n\n &--bottom {\n // base styles\n #{$base}__th, #{$base}__td {\n position: sticky;\n inset-block-end: var(--pin-bottom, -1px);\n }\n\n #{$base}__pin--end, #{$base}__pin--start {\n --z: calc(var(--base-z) + 1);\n }\n\n // pinned styles\n &#{$base}__pinned--bottom {\n --base-z: 5;\n\n // for pinned bottom rows, we want the first to be overlaid on-top of later rows\n &:has(~ &) {\n #{$base}__pin {\n --base-z: 6;\n }\n }\n }\n\n // tbody pinned styles\n tbody & {\n &#{$base}__pinned--bottom {\n #{$base}__th, #{$base}__td {\n box-shadow: 1px -3px 4px -1px rgb(0 0 0 / 7%);\n }\n }\n }\n }\n }\n // end pinned styles\n\n thead tr:last-of-type {\n td,\n th {\n border-block-end: var(--border-tint-style);\n }\n }\n\n tfoot tr:first-of-type {\n td,\n th {\n border-block-start: none;\n }\n }\n\n tfoot tr:last-of-type {\n td,\n th {\n border-block-start: var(--border-style);\n border-block-end: var(--border-tint-style);\n }\n }\n\n tfoot tr.nano-tbl__pin--bottom {\n &:first-of-type {\n .nano-tbl__pinned--bottom & {\n td,\n th {\n border-block-start: var(--border-tint-style) !important;\n }\n }\n }\n\n &:last-of-type {\n .nano-tbl__pinned--bottom & {\n td,\n th {\n border-block-end: none !important;\n }\n }\n }\n }\n\n .unlimited-width {\n max-inline-size: none;\n }\n\n &__spinner {\n font-size: 1.5rem;\n transition: scale 0.25s;\n scale: 0;\n padding: 0.5rem;\n position: absolute;\n inset-block-end: 0;\n inset-inline-start: calc(50% - 0.75rem);\n z-index: 0;\n\n &--show {\n scale: 1;\n position: sticky;\n }\n }\n\n nano-skeleton {\n line-height: var(--cell-line-height);\n }\n}\n","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} from '@stencil/core';\nimport { cyrb53 } from '../../utils/math';\nimport { debounce } from '../../utils/throttle';\nimport {\n NanoResizeObserveCustomEvent,\n ResizeStateChangeEventDetail,\n TableTypes,\n} from '../../interface';\nimport { findScrollParent } from '../../utils/scroll-parent';\nimport { TableColHead } from './table.header';\nimport { TableRow, TableHeadFootRow } from './table.row';\nimport { TableCell } from './table.cell';\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 { isInViewport } from './table.utils';\nimport { TablePinService } from './table.pin-service';\n\nconst measurePerf = false;\n\nfunction perMark(name: string, end: boolean = false) {\n if (!performance || !measurePerf) 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.info(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 * @slot no-results - text to display when search or filtering yields no results\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 /** Function called whenever `col.cellTemplate` renders an unknown object.\n * The function should render a valid HTMLElement to the cell arg.\n * Example usage - render JSX from a 3rd party lib and append the result to the cell element. */\n @Prop() customRenderer: (\n node: any,\n cell: HTMLElement\n ) => void | Promise<string>;\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 set to true.\n * By default, will be shown automatically if `rows` is a promise waiting to resolve / or falsy\n * *or* when performing custom filtering or sorting.\n * *Note* when set manually, will overwrite any internal loading state.\n * Set to 'undefined' to revert to default behaviour. */\n @Prop() loading: boolean = undefined;\n\n get _loading() {\n return this.loading !== undefined ? this.loading : this.internalLoading;\n }\n set _loading(l: boolean) {\n if (this.loading !== undefined) return;\n this.debounceSetLoading(l);\n }\n private debounceSetLoading(l: boolean) {\n this.internalLoading = l;\n }\n @State() internalLoading = true;\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({ mutable: true }) rows:\n | TableTypes.NanoTable['rows']\n | Promise<TableTypes.NanoTable['rows']>;\n\n @Watch('rows')\n handleRowsChange() {\n if (!this.rows) {\n this._loading = true;\n return;\n }\n\n this._loading = true;\n Promise.resolve(this.rows).then(async (rows) => {\n await storeSetData(this.host, rows);\n\n // reset everything\n this.currentFilters = '';\n this.currentSort = '';\n await this.columnInit();\n\n if (!this.isReady)\n requestAnimationFrame(() => this.setInitialBlockDimension());\n this._loading = false;\n if (this.tablePinnedService) this.tablePinnedService.assessRows();\n });\n }\n\n /** The column config used to present the rows of data */\n @Prop({ mutable: true }) columns: TableTypes.NanoTable<any>['columns'] = [];\n\n @Watch('columns')\n async handleColsChange() {\n await 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 = 50;\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 * If the promise resolves as `true` the column UI will be updated.\n * If the promise resolves as falsy, the sort will be performed by the component.\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?: (\n filters: TableTypes.Filter[]\n ) => Promise<true | TableTypes.Falsy>;\n\n /** A custom sorting function. Should return a promise.\n * If the promise resolves as `true` the column UI will be updated.\n * If the promise resolves as falsey, the sort will be performed by the component.\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<true | TableTypes.Falsy>;\n\n /**\n * The default sortable option for all columns.\n * `true` will enable column sorting unless you set `sortable: false` on a column\n * `false` will disable column sorting unless you set `sortable: true` on a column\n */\n @Prop() defaultSort = true;\n\n @Watch('searchTerm')\n handleSearchTermChange() {\n this.searchStart();\n }\n\n /** Use this to render the table with roughly the correct dimensions.\n * a use-case might be; fetch a small initial dataset to minimise load-time,\n * render the table with the correct dimensions, the table becomes interactive,\n * load the rest of the data\n */\n @Prop() virtualTotalItems: number = 0;\n\n @Watch('virtualTotalItems')\n virtualTotalItemsChangeHandler() {\n this.setBlocks();\n }\n\n /** @readonly - shows the currently applied filters */\n @Prop()\n get appliedFilters() {\n return this.filters;\n }\n\n /** Fired when the table has done it's first complete render */\n @Event() nanoTblReady: EventEmitter;\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 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 /** Fired before a general search.\n * `event.preventDefault()` to stop searching. */\n @Event() nanoTblBeforeEdit: 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 as TableTypes.NanoTable['columns']).find(\n (c) => !!c.order\n );\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 as TableTypes.NanoTable['columns']).find(\n (c) => c.prop === column\n );\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 /** Remove filters from a column\n * @param columnNames - the filters to apply\n * @returns a promise which resolves when complete\n */\n @Method()\n async removeFilters(columnNames: TableTypes.Prop[]) {\n this.filters = this.filters.filter((f) => !columnNames.includes(f.prop));\n return this.filterStart();\n }\n\n /** Updates a row model at a given index\n * @param row - the row to update.\n * @param rowIndex - the row index to insert this row\n */\n @Method()\n async updateRow(row: TableTypes.RowData, rowIndex: number) {\n (this.rows as TableTypes.NanoTable['rows']).splice(rowIndex, 1, row);\n this.handleRowsChange();\n }\n\n // TODO.\n // change this.rows to be a Map instead?\n // this will allow 'padding' < inserting row data at a non-adjacent index\n\n // /**\n // * During pagination or infinite scroll\n // * you may not always want to load data in serial order.\n // * This method allows you to insert a block of results at a particular index.\n // * Use in-conjunction with `virtualTotalItems`\n // * @param blockIndex - where to insert\n // * @param rows - what to insert\n // */\n // @Method()\n // async insertBlock(blockIndex: number, rows: TableTypes.NanoTable['rows']) {\n // this.pauseAutoBlockAssign = true;\n // const cRows = (this.rows as TableTypes.NanoTable['rows']);\n\n // if (cRows.length < (blockIndex * this.perBlock)) {\n // (this.rows as TableTypes.NanoTable['rows'])\n // }\n\n // (this.rows as TableTypes.NanoTable['rows']).splice((blockIndex * this.perBlock)-1, 0, ...rows);\n\n // console.log(this.rows)\n // debugger;\n\n // await this.handleRowsChange(this.rows);\n // this.blocks[blockIndex] = {rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join())};\n // this.blocks = this.blocks;\n // this.pauseAutoBlockAssign = true;\n\n // console.log(this.rows, this.blocks)\n // }\n\n // Private 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 private tableWrapperEle: HTMLElement;\n private activeWatcherIo: IntersectionObserver;\n private tablePinnedService: TablePinService;\n\n // Block view management\n\n /** `tr` elements split into units - defined by `perBlock`\n These are show / hidden for perf */\n @State() blocks: TableTypes.TBody[] = [];\n @State() activeBlocks: number[] = [0, 1];\n\n private measureHeight = 0;\n private blockElements: HTMLTableSectionElement[];\n private blockHeights: { blockIndex: number; height: number }[] = [];\n\n // uses the first 'tr' of an active block as our yard stick\n private set measureEle(el: HTMLTableSectionElement) {\n if (!el) return;\n const potentialHeight = el.getBoundingClientRect().height;\n this.measureHeight =\n Math.abs(this.measureHeight - potentialHeight) < 5\n ? this.measureHeight\n : potentialHeight;\n this.unitHeight =\n el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;\n }\n\n private unitHeight = 0;\n\n private get scrollParent() {\n return this._scrollParent;\n }\n\n private set scrollParent(ele: HTMLElement) {\n if (ele === this._scrollParent) return;\n\n if (this._scrollParent) {\n (this._scrollParent === document.documentElement\n ? document\n : this._scrollParent\n ).removeEventListener('scroll', this.scrollHandler);\n }\n (ele === document.documentElement ? document : ele).addEventListener(\n 'scroll',\n this.scrollHandler\n // {passive: true}\n );\n this._scrollParent = ele;\n }\n\n private _scrollParent: HTMLElement;\n\n // used to fire `nanoTblBlockRendered` on block render change\n private get primaryBlockIndex() {\n return this._primaryBlockIndex;\n }\n\n private set primaryBlockIndex(blockIndex) {\n if (this._primaryBlockIndex === blockIndex) return;\n\n this._primaryBlockIndex = blockIndex;\n\n // fire block change event\n this.nanoTblBlockRendered.emit({\n block: blockIndex,\n totalBlocks: this.blockElements.length,\n });\n }\n\n private _primaryBlockIndex;\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 // Private Logic\n\n // Listeners\n\n private handleReady() {\n const hash = window.location.hash;\n if (hash.length > 1) {\n try {\n const idRow = document.querySelector(hash);\n if (idRow) idRow.scrollIntoView();\n } catch (e) {}\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 const res = await this.customSortFn(column, order);\n\n // if the response is 'true', the custom sort did it's thing\n // handover to finish and stop loading state.\n // if response is falsey, carry on to do a FE sort\n if (res === true) {\n this.sortComplete(order, column);\n this._loading = false;\n return;\n }\n } catch (e) {\n // if response errored, stop loading state\n // clear current sort cache\n console.warn('custom sort failed', e);\n this.currentSort = '';\n this._loading = false;\n return;\n }\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 if (this.blocks.length) 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 const res = await this.customFilterFn(this.filters);\n\n // if the response is 'true', the custom filter did it's thing\n // handover to finish and stop loading state.\n // if response is falsy, carry on to do a FE filter\n if (res === true) {\n this.filterComplete();\n this._loading = false;\n return;\n }\n } catch (e) {\n // if response errored, stop loading state\n // clear current sort cache\n console.warn('custom filter failed', e);\n this.currentFilters = '';\n this._loading = false;\n return;\n }\n }\n\n try {\n await storeFilter(this.host, this.filters);\n this.filterComplete();\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 we found a filter AND\n // it isn't true / false and has a length OR\n // it is true or false\n if (\n cFilter &&\n ((typeof cFilter.filter !== 'boolean' && cFilter.filter.length) ||\n typeof cFilter.filter === 'boolean')\n )\n c.filter = cFilter.filter;\n // if a filter value is not set OR\n // it isn't true / false and has no length\n else if (\n (c.filter !== null && c.filter !== undefined) ||\n (!!c.filter && typeof c.filter !== 'boolean' && !c.filter.length)\n )\n c.filter = undefined;\n\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 this.scrollHandler();\n }\n\n private setMeasureElement(): Promise<void> {\n return new Promise((resolve) => {\n readTask(() => {\n this.measureEle = this.blockElements.find(\n (b) => !b?.classList?.contains(`${CSSNAMESPACE}__inactive`)\n );\n resolve();\n });\n });\n }\n\n /**\n * Makes sure we have dimensions on at least one, active tbody element.\n * We'll use this is a yard stick for inactive tbody elements in future.\n * These elements have no natural height (on account of all their rows being hidden)\n */\n private setInitialBlockDimension() {\n if (!this.blockElements?.length) return;\n perMark('blockDims');\n\n const testForDimensions = async () => {\n await this.setMeasureElement();\n if (this.unitHeight) return true;\n return false;\n };\n\n const dimensionsReady: Promise<void> = new Promise(async (resolve) => {\n if (await testForDimensions()) resolve();\n else {\n // it's likely this table is hidden in the dom.\n // we need to wait until it's visible\n const observer = new IntersectionObserver(\n async () => {\n if (await testForDimensions()) {\n resolve();\n observer.disconnect();\n }\n },\n { root: this.scrollParent }\n );\n observer.observe(this.tableEle);\n }\n });\n\n // we're all finished.\n dimensionsReady.then(() => {\n perMark('blockDims', true);\n perMark('init', true);\n requestAnimationFrame(() => (this.isReady = true));\n });\n }\n\n /** Apply initial columns settings */\n private async columnInit() {\n this.filters = (this.columns as TableTypes.NanoTable['columns'])\n .filter((c) => c.filter !== undefined && c.filter !== null)\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 as TableTypes.NanoTable['columns']).find(\n (c) => !!c.order\n );\n if (!!col) {\n await this.sortStart(col.order, col.prop);\n }\n if (this.tablePinnedService) this.tablePinnedService.assessCols();\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 const dRows = this.store.data.state.rows;\n if (!dRows.length) {\n this.blocks = [];\n return;\n }\n\n perMark('setBlocks');\n // this.ignoreIO = true;\n let i = 1;\n const l =\n this.virtualTotalItems > dRows.length\n ? this.virtualTotalItems\n : dRows.length;\n let rows: TableTypes.RowData[] = [];\n const blocks: TableTypes.TBody[] = [];\n\n // old skool loop for perf\n for (i; i <= l; i++) {\n rows.push(this.store.data.state.rows[i - 1] || { __uuid: '' });\n\n if (i % this.perBlock === 0) {\n // assign a UUID for the whole block\n // for block diffing\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n rows = [];\n }\n }\n\n // any leftover rows\n if (rows.length) {\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n }\n\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): number {\n if (this.blockHeights.length) {\n const cachedBlockHeight = this.blockHeights.find(\n (bh) => bh.blockIndex === blockIndex\n );\n if (cachedBlockHeight && cachedBlockHeight.height)\n return cachedBlockHeight.height;\n }\n const blockLength = this.blocks[blockIndex].rows.length;\n if (blockLength === this.perBlock && this.measureHeight) {\n return this.measureHeight;\n }\n return this.unitHeight ? this.unitHeight * blockLength : 100;\n }\n\n /** cache the height for all active blocks for later renders */\n private setBlockHeight() {\n this.activeBlocks.forEach((blockIndex) => {\n const el = this.blockElements[blockIndex];\n if (!el) return;\n\n readTask(() => {\n if (el.classList.contains(`${CSSNAMESPACE}__inactive`)) return;\n\n const height = el.getBoundingClientRect().height;\n // cache height to our block heights array\n // for subsequent renders\n const fBhIdx = this.blockHeights.findIndex(\n (bh) => bh.blockIndex === blockIndex\n );\n if (fBhIdx > -1) {\n this.blockHeights[fBhIdx] = { height, blockIndex };\n } else this.blockHeights.push({ height, blockIndex });\n });\n });\n }\n\n /**\n * On scroll, loop through all blocks' heights and cumulatively, add them together.\n * When we find that the scroll position is less than this cumulative block height -\n * stop loop - it's on the current active block.\n */\n private scrollHandler = () => {\n let scrollPos: number = 0;\n\n perMark('scrollHandler');\n // don't listen if this table isn't in the viewport\n if (!this.store?.general.state.isActive || !this.rows) return;\n if (this.primaryBlockIndex === undefined) this.primaryBlockIndex = 0;\n\n readTask(() => {\n scrollPos =\n typeof this.scrollParent.scrollTop !== 'undefined'\n ? this.scrollParent.scrollTop\n : window.scrollY;\n scrollPos += this.host.offsetTop;\n\n if (this.tablePinnedService) {\n this.tablePinnedService.onScroll({\n x:\n typeof this.scrollParent.scrollLeft !== 'undefined'\n ? this.scrollParent.scrollLeft\n : window.scrollX,\n y: scrollPos,\n });\n }\n\n let cumulativeHeight = this.host.offsetTop;\n let blockIndex = 0;\n const blockLen = this.blocks.length;\n\n while (blockIndex < blockLen && scrollPos >= cumulativeHeight) {\n cumulativeHeight += this.getBlockHeight(blockIndex);\n\n if (scrollPos < cumulativeHeight) {\n const potentialBlocks = [\n blockIndex,\n blockIndex + 1,\n // Math.max(0, blockIndex - 1),\n ];\n if (potentialBlocks.toString() !== this.activeBlocks.toString()) {\n this.activeBlocks = potentialBlocks;\n }\n this.primaryBlockIndex = blockIndex;\n }\n blockIndex++;\n }\n perMark('scrollHandler', true);\n });\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 `caption` prop or use the `caption` slot'\n );\n }\n }\n\n private handleResizeChange = (\n e: NanoResizeObserveCustomEvent<ResizeStateChangeEventDetail>\n ) => {\n this.tableWrapperEle.className = '';\n\n let classes: string[] = [`${CSSNAMESPACE}__wrap`];\n if (e.target?.className)\n classes = [...e.target.className.split(' '), ...classes];\n\n this.tableWrapperEle.classList.add(...classes.filter((cl) => !!cl));\n };\n\n /** Adds an IO. Makes sure our scroll listener is only active when\n * the table is in viewport */\n private setupActiveWatcher() {\n if (!this.host || !this.scrollParent || !this.store) return;\n\n if (this.activeWatcherIo) {\n this.activeWatcherIo.disconnect();\n this.activeWatcherIo = undefined;\n }\n const io = (this.activeWatcherIo = new IntersectionObserver(\n async ([e]) => {\n if (e.isIntersecting) this.store.general.state.isActive = true;\n else this.store.general.state.isActive = false;\n },\n { root: this.scrollParent, threshold: 0 }\n ));\n io.observe(this.host);\n }\n\n // Component lifecycle\n\n async componentWillLoad() {\n perMark('init');\n // setup stores\n this.store = await generateStore(\n this.host,\n this.columns,\n this.scrollParent,\n this.isReady\n );\n await this.handleRowsChange();\n this.store.general.onChange('isActive', () => {\n this.scrollHandler();\n });\n this.store.data.onChange('rows', () => this.setBlocks());\n\n // setup dom and attach listeners\n this.processSlots();\n this.setBlocks();\n this.scrollParent = findScrollParent(this.host);\n this.setupActiveWatcher();\n }\n\n connectedCallback(): void {\n this.scrollParent = findScrollParent(this.host);\n this.setupActiveWatcher();\n }\n\n componentDidLoad(): void {\n this.setInitialBlockDimension();\n if (!this.tablePinnedService) {\n this.tablePinnedService = new TablePinService(\n this.tableEle,\n this.scrollParent\n );\n }\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 if (measurePerf) console.info(stateName, _newVal, _oldVal);\n }\n\n componentWillRender(): void | Promise<void> {\n perMark('render');\n }\n\n componentDidRender(): void {\n this.setMeasureElement().then(() => this.setBlockHeight());\n perMark('render', true);\n }\n\n disconnectedCallback(): void {\n if (!this.activeWatcherIo) return;\n this.activeWatcherIo.disconnect();\n this.activeWatcherIo = undefined;\n\n (this.scrollParent === document.documentElement\n ? document\n : this.scrollParent\n ).removeEventListener('scroll', this.scrollHandler);\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\n <nano-resize-observe\n states=\"576w sm, 768w md\"\n class=\"sm md\"\n onNanoResizeStateChange={this.handleResizeChange}\n onNanoResize={() => {\n if (this.tablePinnedService) this.tablePinnedService.onResize();\n }}\n ></nano-resize-observe>\n\n <div\n class={`${CSSNAMESPACE}__wrap sm md`}\n ref={(div) => (this.tableWrapperEle = div)}\n aria-labelledby={'nano-table-caption-' + this.renderId}\n tabindex={this.type === 'grid' ? '0' : undefined}\n >\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-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 id={'nano-table-' + this.renderId}\n >\n <caption\n class={{\n [`${CSSNAMESPACE}__caption`]: true,\n [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,\n }}\n id={'nano-table-caption-' + this.renderId}\n >\n <slot name=\"caption\">{this.caption}</slot>\n </caption>\n\n {/* Header */}\n <thead>\n <TableHeadFootRow rowRenderer={this.headRender}>\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.headRender}\n onColumnSortClick={this.sortStart}\n defaults={{\n sortable: this.defaultSort,\n }}\n />,\n ])}\n </TableHeadFootRow>\n </thead>\n\n {this._loading && !this.blocks.length && (\n <tbody class={`${CSSNAMESPACE}__active ${CSSNAMESPACE}__loading`}>\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 </tbody>\n )}\n\n <tr hidden={!!this._loading || !!this.blocks.length}>\n <th\n class={`${CSSNAMESPACE}__th`}\n colSpan={this.store.config.state.columns.length}\n >\n <div class=\"nano-tbl__cell-content nano-tbl__cell-content--no-result\">\n <slot name=\"no-results\">No results found</slot>\n </div>\n </th>\n </tr>\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 }}\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\n rowRenderer={this.rowRender}\n rowModel={row}\n rowIndex={rowIndex}\n >\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 <tr class={`${CSSNAMESPACE}__tr--placeholder`}>\n <td\n colSpan={this.store.config.state.columns.length}\n style={{\n height: this.getBlockHeight(blockIndex) + 'px',\n }}\n />\n </tr>\n )}\n </tbody>\n ))}\n\n {/* Footer */}\n {this.showFooter && (\n <tfoot>\n <TableHeadFootRow rowRenderer={this.footRender}>\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.footRender}\n onColumnSortClick={this.sortStart}\n defaults={{\n sortable: this.defaultSort,\n }}\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 </Host>\n );\n }\n}\n"],"version":3}
@@ -5,10 +5,11 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const nanoTable_entry = require('./nano-table-400049cc.js');
8
+ const nanoTable_entry = require('./nano-table-06530d49.js');
9
9
  require('./index-14451c95.js');
10
10
  require('./math-a8123703.js');
11
11
  require('./throttle-dfa64b9e.js');
12
+ require('./scroll-parent-87393de2.js');
12
13
  require('./index-f6f89d47.js');
13
14
 
14
15
 
@@ -1 +1 @@
1
- {"file":"nano-table.entry.cjs.js","mappings":";;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
1
+ {"file":"nano-table.entry.cjs.js","mappings":";;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -0,0 +1,31 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ 'use strict';
5
+
6
+ /**
7
+ * Attempts to find the closest scrolling parental element
8
+ * @param element - the element from which to traverse up the DOM
9
+ * @returns - the closest scrolling parental element
10
+ */
11
+ function findScrollParent(element) {
12
+ let style = getComputedStyle(element);
13
+ const excludeStaticParent = style.position === 'absolute';
14
+ const overflowRegex = /(auto|scroll)/;
15
+ if (style.position === 'fixed')
16
+ return document.documentElement;
17
+ for (let parent = element; (parent = parent.parentElement);) {
18
+ style = getComputedStyle(parent);
19
+ if (excludeStaticParent && style.position === 'static') {
20
+ continue;
21
+ }
22
+ if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {
23
+ return parent;
24
+ }
25
+ }
26
+ return document.documentElement;
27
+ }
28
+
29
+ exports.findScrollParent = findScrollParent;
30
+
31
+ //# sourceMappingURL=scroll-parent-87393de2.js.map
@@ -0,0 +1 @@
1
+ {"file":"scroll-parent-87393de2.js","mappings":";;;;;AAAA;;;;;SAKgB,gBAAgB,CAAC,OAAoB;EACnD,IAAI,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;EACtC,MAAM,mBAAmB,GAAG,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC;EAC1D,MAAM,aAAa,GAAG,eAAe,CAAC;EAEtC,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;IAAE,OAAO,QAAQ,CAAC,eAAe,CAAC;EAEhE,KAAK,IAAI,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,aAAa,IAAK;IAC5D,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,mBAAmB,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;MACtD,SAAS;KACV;IACD,IACE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EACtE;MACA,OAAO,MAAM,CAAC;KACf;GACF;EACD,OAAO,QAAQ,CAAC,eAAe,CAAC;AAClC;;;;","names":[],"sources":["./src/utils/scroll-parent.ts"],"sourcesContent":["/**\n * Attempts to find the closest scrolling parental element\n * @param element - the element from which to traverse up the DOM\n * @returns - the closest scrolling parental element\n */\nexport function findScrollParent(element: HTMLElement) {\n let style = getComputedStyle(element);\n const excludeStaticParent = style.position === 'absolute';\n const overflowRegex = /(auto|scroll)/;\n\n if (style.position === 'fixed') return document.documentElement;\n\n for (let parent = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent);\n if (excludeStaticParent && style.position === 'static') {\n continue;\n }\n if (\n overflowRegex.test(style.overflow + style.overflowY + style.overflowX)\n ) {\n return parent;\n }\n }\n return document.documentElement;\n}\n"],"version":3}
@@ -0,0 +1,50 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ 'use strict';
5
+
6
+ let searchInsights;
7
+ const searchInsight = {
8
+ /**
9
+ * Initialise algolia search insights.
10
+ * Will asynchronously import the search-insight library
11
+ * @param appId
12
+ * @param apiKey
13
+ */
14
+ init: async (appId, apiKey) => {
15
+ if (searchInsights)
16
+ return;
17
+ searchInsights = (await Promise.resolve().then(function () { return require('./index-browser.cjs-d4554470.js'); }).then(function (n) { return n.indexBrowser_cjs; })).default;
18
+ searchInsights('init', {
19
+ appId,
20
+ apiKey,
21
+ });
22
+ },
23
+ /**
24
+ * Sends a `clickedObjectIDsAfterSearch` event to algolia search-insights.
25
+ * `init(...)` Must have been called first.
26
+ * @param params
27
+ */
28
+ sendClick: (params) => {
29
+ if (!searchInsights) {
30
+ console.error('You must call `init()` first');
31
+ return;
32
+ }
33
+ searchInsights('clickedObjectIDsAfterSearch', { ...params });
34
+ },
35
+ /**
36
+ * Associates algolia analytics with a user id
37
+ * @param userToken
38
+ */
39
+ setUser: (userToken) => {
40
+ if (!searchInsights) {
41
+ console.error('You must call `init()` first');
42
+ return;
43
+ }
44
+ searchInsights('setUserToken', userToken);
45
+ },
46
+ };
47
+
48
+ exports.searchInsight = searchInsight;
49
+
50
+ //# sourceMappingURL=search-insights-b2bb12bd.js.map
@@ -0,0 +1 @@
1
+ {"file":"search-insights-b2bb12bd.js","mappings":";;;;;AAGA,IAAI,cAAqC,CAAC;MAEpC,aAAa,GAAG;;;;;;;EAOpB,IAAI,EAAE,OAAO,KAAa,EAAE,MAAc;IACxC,IAAI,cAAc;MAAE,OAAO;IAE3B,cAAc,GAAG,CAAC,MAAM,oDAAO,iCAAiB,uDAAC,EAAE,OAAO,CAAC;IAC3D,cAAc,CAAC,MAAM,EAAE;MACrB,KAAK;MACL,MAAM;KACP,CAAC,CAAC;GACJ;;;;;;EAOD,SAAS,EAAE,CAAC,MAAgC;IAC1C,IAAI,CAAC,cAAc,EAAE;MACnB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;MAC9C,OAAO;KACR;IACD,cAAc,CAAC,6BAA6B,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;GAC9D;;;;;EAMD,OAAO,EAAE,CAAC,SAAiB;IACzB,IAAI,CAAC,cAAc,EAAE;MACnB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;MAC9C,OAAO;KACR;IACD,cAAc,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;GAC3C;;;;;","names":[],"sources":["./src/utils/search-insights.ts"],"sourcesContent":["import type SearchInsights from 'search-insights';\nimport type { InsightsSearchClickEvent } from 'search-insights/dist/click';\n\nlet searchInsights: typeof SearchInsights;\n\nconst searchInsight = {\n /**\n * Initialise algolia search insights.\n * Will asynchronously import the search-insight library\n * @param appId\n * @param apiKey\n */\n init: async (appId: string, apiKey: string) => {\n if (searchInsights) return;\n\n searchInsights = (await import('search-insights')).default;\n searchInsights('init', {\n appId,\n apiKey,\n });\n },\n\n /**\n * Sends a `clickedObjectIDsAfterSearch` event to algolia search-insights.\n * `init(...)` Must have been called first.\n * @param params\n */\n sendClick: (params: InsightsSearchClickEvent) => {\n if (!searchInsights) {\n console.error('You must call `init()` first');\n return;\n }\n searchInsights('clickedObjectIDsAfterSearch', { ...params });\n },\n\n /**\n * Associates algolia analytics with a user id\n * @param userToken\n */\n setUser: (userToken: string) => {\n if (!searchInsights) {\n console.error('You must call `init()` first');\n return;\n }\n searchInsights('setUserToken', userToken);\n },\n};\n\nexport default searchInsight;\n"],"version":3}
@@ -3,10 +3,11 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const nanoTable_entry = require('./nano-table-400049cc.js');
6
+ const nanoTable_entry = require('./nano-table-06530d49.js');
7
7
  require('./index-14451c95.js');
8
8
  require('./math-a8123703.js');
9
9
  require('./throttle-dfa64b9e.js');
10
+ require('./scroll-parent-87393de2.js');
10
11
  require('./index-f6f89d47.js');
11
12
 
12
13
  const workerName = 'table.worker';
@@ -22,4 +23,4 @@ exports.workerMsgId = workerMsgId;
22
23
  exports.workerName = workerName;
23
24
  exports.workerPath = workerPath;
24
25
 
25
- //# sourceMappingURL=table.worker-a37f8365.js.map
26
+ //# sourceMappingURL=table.worker-b4922b9b.js.map
@@ -0,0 +1 @@
1
+ {"file":"table.worker-b4922b9b.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -7,7 +7,7 @@
7
7
  "./components/algolia/algolia-pagination.js",
8
8
  "./components/algolia/algolia-results.js",
9
9
  "./components/algolia/algolia.js",
10
- "./components/aspect-ratio/aspect-ratio.js",
10
+ "./components/animation/animation.js",
11
11
  "./components/checkbox/checkbox-group.js",
12
12
  "./components/checkbox/checkbox.js",
13
13
  "./components/datalist/datalist.js",
@@ -29,6 +29,7 @@
29
29
  "./components/icon-button/icon-button.js",
30
30
  "./components/img/img.js",
31
31
  "./components/input/input.js",
32
+ "./components/intersection-observe/intersection-observe.js",
32
33
  "./components/menu/menu.js",
33
34
  "./components/menu-drawer/menu-drawer.js",
34
35
  "./components/nav-item/nav-item.js",
@@ -1 +1 @@
1
- {"version":3,"file":"algolia-interface.js","sourceRoot":"","sources":["../../../src/components/algolia/algolia-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { SearchIndex as AlgoliaIndex } from 'algoliasearch/lite';\nimport type { AlgoliaResultHit } from '../../interface';\n\nexport interface IndexResult {\n searchIndex?: SearchIndex;\n index?: string;\n indexName?: string;\n totalHits: number;\n totalHitsWithFilters: number;\n hitsPerPage: number;\n currentPage: number;\n totalPages: number;\n query: string;\n results: Array<AlgoliaResultHit>;\n origFilters?: AlgoliaFacet;\n dynFilters?: AlgoliaFacet;\n appliedFilters: AppliedFilter[];\n domain?: string;\n domains?: [\n {\n origin: string;\n domain: string;\n }\n ];\n}\n\nexport interface AppliedFilter {\n name: string;\n values: Array<string>;\n}\n\nexport interface AlgoliaFacet {\n [prop: string]: {\n [prop: string]: number;\n };\n}\n\nexport interface FilterChangeEventDetail {\n filterId: string;\n facetName: string;\n value: Array<string>;\n operator: 'or' | 'and';\n}\n\nexport interface PageChangeEventDetail {\n page: number;\n}\n\nexport interface AloliaSearchResultDetail {\n meta: {\n index: string;\n indexTitle: string;\n domain: string;\n filters: [string];\n query: string;\n replicas?: {\n name: string;\n index: string;\n }[];\n };\n client: { apiKey: string; appId: string };\n}\n\nexport interface SearchIndex {\n index: string;\n name?: string;\n alogliaIndex?: AlgoliaIndex;\n domain?: string;\n autocompleteField?: string;\n allGroup?: boolean;\n filters?: [string];\n hitsPerPage?: number;\n replicas?: {\n name: string;\n index: string;\n }[];\n}\n"]}
1
+ {"version":3,"file":"algolia-interface.js","sourceRoot":"","sources":["../../../src/components/algolia/algolia-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { SearchIndex as AlgoliaIndex } from 'algoliasearch/lite';\nimport type { AlgoliaResultHit } from '../../interface';\n\nexport interface IndexResult {\n searchIndex?: SearchIndex;\n index?: string;\n indexName?: string;\n totalHits: number;\n totalHitsWithFilters: number;\n hitsPerPage: number;\n currentPage: number;\n totalPages: number;\n query: string;\n queryID: string;\n results: Array<AlgoliaResultHit>;\n origFilters?: AlgoliaFacet;\n dynFilters?: AlgoliaFacet;\n appliedFilters: AppliedFilter[];\n domain?: string;\n domains?: [\n {\n origin: string;\n domain: string;\n }\n ];\n}\n\nexport interface AppliedFilter {\n name: string;\n values: Array<string>;\n}\n\nexport interface AlgoliaFacet {\n [prop: string]: {\n [prop: string]: number;\n };\n}\n\nexport interface FilterChangeEventDetail {\n filterId: string;\n facetName: string;\n value: Array<string>;\n operator: 'or' | 'and';\n}\n\nexport interface PageChangeEventDetail {\n page: number;\n}\n\nexport interface AloliaSearchResultDetail {\n meta: {\n index: string;\n indexTitle: string;\n domain: string;\n filters: [string];\n query?: string;\n replicas?: {\n name: string;\n index: string;\n }[];\n };\n client: { apiKey: string; appId: string };\n}\n\nexport interface SearchIndex {\n index: string;\n name?: string;\n alogliaIndex?: AlgoliaIndex;\n domain?: string;\n autocompleteField?: string;\n allGroup?: boolean;\n filters?: [string];\n hitsPerPage?: number;\n replicas?: {\n name: string;\n index: string;\n }[];\n}\n"]}
@@ -52,7 +52,10 @@ export class Algolia {
52
52
  await this.updateContent();
53
53
  setTimeout((_) => (this.isLoading = false), 800);
54
54
  this.showResults = true;
55
- this.nanoResultsShown.emit(this.indexResults);
55
+ this.nanoResultsShown.emit({
56
+ meta: this.indexResults,
57
+ client: { appId: this.appId, apiKey: this.apiKey },
58
+ });
56
59
  }, 200);
57
60
  };
58
61
  // Takes all current filters (dynamic and static)
@@ -97,6 +100,7 @@ export class Algolia {
97
100
  const searchParams = {
98
101
  filters: this.algoliaFilterStr(),
99
102
  page: this.indexResults ? this.indexResults.currentPage : 0,
103
+ clickAnalytics: true,
100
104
  };
101
105
  if (this.searchIndex.filters)
102
106
  searchParams.facets = this.searchIndex.filters;
@@ -109,6 +113,7 @@ export class Algolia {
109
113
  // Setup initial meta on new queries. Some of it should not change on filter / pagination
110
114
  if (eventType === SearchChangeEvent.Init || !this.indexResults) {
111
115
  this.indexResults = {
116
+ queryID: result.queryID,
112
117
  currentPage: 0,
113
118
  totalHits: result.nbHits,
114
119
  hitsPerPage: null,
@@ -973,8 +978,8 @@ export class Algolia {
973
978
  "text": "Emitted when results and all filters are shown and have loaded."
974
979
  },
975
980
  "complexType": {
976
- "original": "IndexResult",
977
- "resolved": "IndexResult",
981
+ "original": "{\n meta: IndexResult;\n client: { apiKey: string; appId: string };\n }",
982
+ "resolved": "{ meta: IndexResult; client: { apiKey: string; appId: string; }; }",
978
983
  "references": {
979
984
  "IndexResult": {
980
985
  "location": "import",