@nanoporetech-digital/components 3.1.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/cjs/dom-d7c33f11.js.map +1 -1
  3. package/dist/cjs/index-41582c2a.js +4 -4
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/{modal-f09e431f.js → modal-e4defcc3.js} +3 -3
  7. package/dist/cjs/{modal-f09e431f.js.map → modal-e4defcc3.js.map} +1 -1
  8. package/dist/cjs/nano-alert.cjs.entry.js +3 -3
  9. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nano-algolia.cjs.entry.js +1 -1
  11. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +1 -1
  13. package/dist/cjs/nano-aspect-ratio.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-checkbox-group.cjs.entry.js +1 -1
  15. package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nano-checkbox.cjs.entry.js +1 -1
  17. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-components.cjs.js +1 -1
  19. package/dist/cjs/nano-datalist_3.cjs.entry.js +2 -2
  20. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  21. package/dist/cjs/nano-date-input.cjs.entry.js +1 -1
  22. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-date-picker.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-date-picker.cjs.entry.js.map +1 -1
  25. package/dist/cjs/nano-details.cjs.entry.js +1 -1
  26. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  27. package/dist/cjs/nano-dialog.cjs.entry.js +3 -3
  28. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nano-drawer.cjs.entry.js +3 -3
  30. package/dist/cjs/nano-drawer.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nano-dropdown.cjs.entry.js +2 -2
  32. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  33. package/dist/cjs/nano-file-upload.cjs.entry.js +1 -1
  34. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  35. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +10 -5
  36. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  37. package/dist/cjs/nano-global-nav.cjs.entry.js +41 -25
  38. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  39. package/dist/cjs/nano-global-search-results.cjs.entry.js +1 -1
  40. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  41. package/dist/cjs/nano-grid_3.cjs.entry.js +2 -2
  42. package/dist/cjs/nano-grid_3.cjs.entry.js.map +1 -1
  43. package/dist/cjs/nano-hero.cjs.entry.js +1 -1
  44. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  45. package/dist/cjs/nano-icon-button.cjs.entry.js +1 -1
  46. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  47. package/dist/cjs/nano-icon.cjs.entry.js +1 -1
  48. package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
  49. package/dist/cjs/nano-input.cjs.entry.js +1 -1
  50. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  51. package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
  52. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  53. package/dist/cjs/nano-progress-bar.cjs.entry.js +2 -2
  54. package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -1
  55. package/dist/cjs/nano-range.cjs.entry.js +1 -1
  56. package/dist/cjs/nano-range.cjs.entry.js.map +1 -1
  57. package/dist/cjs/nano-rating.cjs.entry.js +1 -1
  58. package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
  59. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +23 -12
  60. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  61. package/dist/cjs/nano-slide.cjs.entry.js +1 -1
  62. package/dist/cjs/nano-slide.cjs.entry.js.map +1 -1
  63. package/dist/cjs/nano-slides.cjs.entry.js +1 -1
  64. package/dist/cjs/nano-slides.cjs.entry.js.map +1 -1
  65. package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
  66. package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
  67. package/dist/cjs/nano-split-pane.cjs.entry.js +1 -1
  68. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  69. package/dist/cjs/nano-sticker.cjs.entry.js +1 -1
  70. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  71. package/dist/cjs/nano-tab-content.cjs.entry.js +1 -1
  72. package/dist/cjs/nano-tab-content.cjs.entry.js.map +1 -1
  73. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  74. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  75. package/dist/cjs/nano-tab.cjs.entry.js +1 -1
  76. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  77. package/dist/cjs/{nano-table-844394ad.js → nano-table-2ddb22be.js} +27 -26
  78. package/dist/cjs/nano-table-2ddb22be.js.map +1 -0
  79. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  80. package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
  81. package/dist/cjs/nano-tooltip.cjs.entry.js.map +1 -1
  82. package/dist/cjs/{tabbable-de4c23d8.js → tabbable-bdf10c84.js} +13 -4
  83. package/dist/cjs/tabbable-bdf10c84.js.map +1 -0
  84. package/dist/cjs/{table.worker-1bc19978.js → table.worker-ec62a083.js} +2 -2
  85. package/dist/cjs/table.worker-ec62a083.js.map +1 -0
  86. package/dist/collection/components/alert/alert.css +16 -56
  87. package/dist/collection/components/algolia/algolia.css +5 -22
  88. package/dist/collection/components/aspect-ratio/aspect-ratio.css +2 -4
  89. package/dist/collection/components/checkbox/checkbox-group.css +8 -19
  90. package/dist/collection/components/checkbox/checkbox.css +24 -61
  91. package/dist/collection/components/date-input/date-input.css +8 -29
  92. package/dist/collection/components/date-picker/date-picker.css +22 -61
  93. package/dist/collection/components/details/details.css +7 -27
  94. package/dist/collection/components/dialog/dialog.css +20 -79
  95. package/dist/collection/components/drawer/drawer.css +13 -42
  96. package/dist/collection/components/dropdown/dropdown.css +5 -13
  97. package/dist/collection/components/file-upload/file-upload.css +45 -127
  98. package/dist/collection/components/global-nav/global-nav.js +40 -24
  99. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  100. package/dist/collection/components/global-nav/style/global-nav.css +147 -302
  101. package/dist/collection/components/global-search-results/global-search-results.css +81 -248
  102. package/dist/collection/components/grid/grid.css +21 -76
  103. package/dist/collection/components/hero/hero.css +22 -63
  104. package/dist/collection/components/icon/icon.css +2 -5
  105. package/dist/collection/components/icon-button/icon-button.css +4 -15
  106. package/dist/collection/components/img/img.css +9 -19
  107. package/dist/collection/components/input/input.css +34 -148
  108. package/dist/collection/components/input/input.js +2 -2
  109. package/dist/collection/components/input/input.js.map +1 -1
  110. package/dist/collection/components/menu/menu.css +1 -2
  111. package/dist/collection/components/menu-drawer/menu-drawer.css +16 -47
  112. package/dist/collection/components/nav-item/nav-item.css +73 -147
  113. package/dist/collection/components/nav-item/nav-item.js +8 -3
  114. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  115. package/dist/collection/components/option/option.css +10 -40
  116. package/dist/collection/components/progress-bar/progress-bar.css +5 -26
  117. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  118. package/dist/collection/components/progress-bar/progress-bar.js.map +1 -1
  119. package/dist/collection/components/range/range.css +20 -56
  120. package/dist/collection/components/rating/rating.css +9 -28
  121. package/dist/collection/components/resize-observe/resize-observe.js +38 -12
  122. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  123. package/dist/collection/components/select/select.css +56 -210
  124. package/dist/collection/components/skeleton/skeleton.css +2 -17
  125. package/dist/collection/components/slides/slide.css +4 -13
  126. package/dist/collection/components/slides/slides.css +3 -14
  127. package/dist/collection/components/spinner/spinner.css +34 -122
  128. package/dist/collection/components/split-pane/split-pane.css +4 -18
  129. package/dist/collection/components/sticker/sticker.css +8 -18
  130. package/dist/collection/components/table/table.children.js +10 -10
  131. package/dist/collection/components/table/table.children.js.map +1 -1
  132. package/dist/collection/components/table/table.css +111 -61
  133. package/dist/collection/components/table/table.js +22 -20
  134. package/dist/collection/components/table/table.js.map +1 -1
  135. package/dist/collection/components/table/table.service.js +1 -1
  136. package/dist/collection/components/table/table.service.js.map +1 -1
  137. package/dist/collection/components/tabs/tab-content.css +11 -59
  138. package/dist/collection/components/tabs/tab-group.css +20 -77
  139. package/dist/collection/components/tabs/tab.css +11 -30
  140. package/dist/collection/components/tooltip/tooltip.css +26 -56
  141. package/dist/collection/utils/dom.js.map +1 -1
  142. package/dist/collection/utils/modal.js +1 -1
  143. package/dist/collection/utils/modal.js.map +1 -1
  144. package/dist/collection/utils/tabbable.js +12 -3
  145. package/dist/collection/utils/tabbable.js.map +1 -1
  146. package/dist/components/algolia.js +1 -1
  147. package/dist/components/algolia.js.map +1 -1
  148. package/dist/components/date-picker.js +1 -1
  149. package/dist/components/date-picker.js.map +1 -1
  150. package/dist/components/dom.js.map +1 -1
  151. package/dist/components/dropdown.js +1 -1
  152. package/dist/components/dropdown.js.map +1 -1
  153. package/dist/components/grid.js +1 -1
  154. package/dist/components/grid.js.map +1 -1
  155. package/dist/components/icon-button.js +1 -1
  156. package/dist/components/icon-button.js.map +1 -1
  157. package/dist/components/icon.js +1 -1
  158. package/dist/components/icon.js.map +1 -1
  159. package/dist/components/img.js +1 -1
  160. package/dist/components/img.js.map +1 -1
  161. package/dist/components/input.js +1 -1
  162. package/dist/components/input.js.map +1 -1
  163. package/dist/components/menu.js +1 -1
  164. package/dist/components/menu.js.map +1 -1
  165. package/dist/components/modal.js +1 -1
  166. package/dist/components/modal.js.map +1 -1
  167. package/dist/components/nano-alert.js +1 -1
  168. package/dist/components/nano-alert.js.map +1 -1
  169. package/dist/components/nano-aspect-ratio.js +1 -1
  170. package/dist/components/nano-aspect-ratio.js.map +1 -1
  171. package/dist/components/nano-checkbox-group.js +1 -1
  172. package/dist/components/nano-checkbox-group.js.map +1 -1
  173. package/dist/components/nano-checkbox.js +1 -1
  174. package/dist/components/nano-checkbox.js.map +1 -1
  175. package/dist/components/nano-date-input.js +1 -1
  176. package/dist/components/nano-date-input.js.map +1 -1
  177. package/dist/components/nano-details.js +1 -1
  178. package/dist/components/nano-details.js.map +1 -1
  179. package/dist/components/nano-dialog.js +1 -1
  180. package/dist/components/nano-dialog.js.map +1 -1
  181. package/dist/components/nano-drawer.js +1 -1
  182. package/dist/components/nano-drawer.js.map +1 -1
  183. package/dist/components/nano-file-upload.js +1 -1
  184. package/dist/components/nano-file-upload.js.map +1 -1
  185. package/dist/components/nano-global-nav.js +41 -25
  186. package/dist/components/nano-global-nav.js.map +1 -1
  187. package/dist/components/nano-global-search-results.js +1 -1
  188. package/dist/components/nano-global-search-results.js.map +1 -1
  189. package/dist/components/nano-hero.js +1 -1
  190. package/dist/components/nano-hero.js.map +1 -1
  191. package/dist/components/nano-menu-drawer.js +1 -1
  192. package/dist/components/nano-menu-drawer.js.map +1 -1
  193. package/dist/components/nano-range.js +1 -1
  194. package/dist/components/nano-range.js.map +1 -1
  195. package/dist/components/nano-rating.js +1 -1
  196. package/dist/components/nano-rating.js.map +1 -1
  197. package/dist/components/nano-slide.js +1 -1
  198. package/dist/components/nano-slide.js.map +1 -1
  199. package/dist/components/nano-slides.js +1 -1
  200. package/dist/components/nano-slides.js.map +1 -1
  201. package/dist/components/nano-split-pane.js +1 -1
  202. package/dist/components/nano-split-pane.js.map +1 -1
  203. package/dist/components/nano-tab-content.js +1 -1
  204. package/dist/components/nano-tab-content.js.map +1 -1
  205. package/dist/components/nano-tab-group.js +1 -1
  206. package/dist/components/nano-tab-group.js.map +1 -1
  207. package/dist/components/nano-tab.js +1 -1
  208. package/dist/components/nano-tab.js.map +1 -1
  209. package/dist/components/nano-table.js +35 -28
  210. package/dist/components/nano-table.js.map +1 -1
  211. package/dist/components/nav-item.js +9 -4
  212. package/dist/components/nav-item.js.map +1 -1
  213. package/dist/components/option.js +1 -1
  214. package/dist/components/option.js.map +1 -1
  215. package/dist/components/progress-bar.js +2 -2
  216. package/dist/components/progress-bar.js.map +1 -1
  217. package/dist/components/resize-observe.js +23 -13
  218. package/dist/components/resize-observe.js.map +1 -1
  219. package/dist/components/select.js +1 -1
  220. package/dist/components/select.js.map +1 -1
  221. package/dist/components/skeleton.js +1 -1
  222. package/dist/components/skeleton.js.map +1 -1
  223. package/dist/components/spinner.js +1 -1
  224. package/dist/components/spinner.js.map +1 -1
  225. package/dist/components/sticker.js +1 -1
  226. package/dist/components/sticker.js.map +1 -1
  227. package/dist/components/tabbable.js +12 -3
  228. package/dist/components/tabbable.js.map +1 -1
  229. package/dist/components/tooltip.js +1 -1
  230. package/dist/components/tooltip.js.map +1 -1
  231. package/dist/custom-elements/index.js +147 -106
  232. package/dist/custom-elements/index.js.map +1 -1
  233. package/dist/esm/dom-d3ad49e2.js.map +1 -1
  234. package/dist/esm/index-3c280603.js +4 -4
  235. package/dist/esm/index.js +1 -1
  236. package/dist/esm/loader.js +1 -1
  237. package/dist/esm/{modal-215df46b.js → modal-5c9ce466.js} +3 -3
  238. package/dist/esm/{modal-215df46b.js.map → modal-5c9ce466.js.map} +1 -1
  239. package/dist/esm/nano-alert.entry.js +3 -3
  240. package/dist/esm/nano-alert.entry.js.map +1 -1
  241. package/dist/esm/nano-algolia.entry.js +1 -1
  242. package/dist/esm/nano-algolia.entry.js.map +1 -1
  243. package/dist/esm/nano-aspect-ratio.entry.js +1 -1
  244. package/dist/esm/nano-aspect-ratio.entry.js.map +1 -1
  245. package/dist/esm/nano-checkbox-group.entry.js +1 -1
  246. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  247. package/dist/esm/nano-checkbox.entry.js +1 -1
  248. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  249. package/dist/esm/nano-components.js +1 -1
  250. package/dist/esm/nano-datalist_3.entry.js +2 -2
  251. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  252. package/dist/esm/nano-date-input.entry.js +1 -1
  253. package/dist/esm/nano-date-input.entry.js.map +1 -1
  254. package/dist/esm/nano-date-picker.entry.js +1 -1
  255. package/dist/esm/nano-date-picker.entry.js.map +1 -1
  256. package/dist/esm/nano-details.entry.js +1 -1
  257. package/dist/esm/nano-details.entry.js.map +1 -1
  258. package/dist/esm/nano-dialog.entry.js +3 -3
  259. package/dist/esm/nano-dialog.entry.js.map +1 -1
  260. package/dist/esm/nano-drawer.entry.js +3 -3
  261. package/dist/esm/nano-drawer.entry.js.map +1 -1
  262. package/dist/esm/nano-dropdown.entry.js +2 -2
  263. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  264. package/dist/esm/nano-file-upload.entry.js +1 -1
  265. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  266. package/dist/esm/nano-global-nav-user-profile_3.entry.js +10 -5
  267. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  268. package/dist/esm/nano-global-nav.entry.js +41 -25
  269. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  270. package/dist/esm/nano-global-search-results.entry.js +1 -1
  271. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  272. package/dist/esm/nano-grid_3.entry.js +2 -2
  273. package/dist/esm/nano-grid_3.entry.js.map +1 -1
  274. package/dist/esm/nano-hero.entry.js +1 -1
  275. package/dist/esm/nano-hero.entry.js.map +1 -1
  276. package/dist/esm/nano-icon-button.entry.js +1 -1
  277. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  278. package/dist/esm/nano-icon.entry.js +1 -1
  279. package/dist/esm/nano-icon.entry.js.map +1 -1
  280. package/dist/esm/nano-input.entry.js +1 -1
  281. package/dist/esm/nano-input.entry.js.map +1 -1
  282. package/dist/esm/nano-menu-drawer.entry.js +1 -1
  283. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  284. package/dist/esm/nano-progress-bar.entry.js +2 -2
  285. package/dist/esm/nano-progress-bar.entry.js.map +1 -1
  286. package/dist/esm/nano-range.entry.js +1 -1
  287. package/dist/esm/nano-range.entry.js.map +1 -1
  288. package/dist/esm/nano-rating.entry.js +1 -1
  289. package/dist/esm/nano-rating.entry.js.map +1 -1
  290. package/dist/esm/nano-resize-observe_2.entry.js +23 -12
  291. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  292. package/dist/esm/nano-slide.entry.js +1 -1
  293. package/dist/esm/nano-slide.entry.js.map +1 -1
  294. package/dist/esm/nano-slides.entry.js +1 -1
  295. package/dist/esm/nano-slides.entry.js.map +1 -1
  296. package/dist/esm/nano-spinner.entry.js +1 -1
  297. package/dist/esm/nano-spinner.entry.js.map +1 -1
  298. package/dist/esm/nano-split-pane.entry.js +1 -1
  299. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  300. package/dist/esm/nano-sticker.entry.js +1 -1
  301. package/dist/esm/nano-sticker.entry.js.map +1 -1
  302. package/dist/esm/nano-tab-content.entry.js +1 -1
  303. package/dist/esm/nano-tab-content.entry.js.map +1 -1
  304. package/dist/esm/nano-tab-group.entry.js +1 -1
  305. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  306. package/dist/esm/nano-tab.entry.js +1 -1
  307. package/dist/esm/nano-tab.entry.js.map +1 -1
  308. package/dist/esm/{nano-table-19d19d72.js → nano-table-9d4fbd41.js} +27 -26
  309. package/dist/esm/nano-table-9d4fbd41.js.map +1 -0
  310. package/dist/esm/nano-table.entry.js +1 -1
  311. package/dist/esm/nano-tooltip.entry.js +1 -1
  312. package/dist/esm/nano-tooltip.entry.js.map +1 -1
  313. package/dist/esm/{tabbable-614f515e.js → tabbable-31485ff7.js} +13 -4
  314. package/dist/esm/tabbable-31485ff7.js.map +1 -0
  315. package/dist/esm/{table.worker-c82cecdf.js → table.worker-1ba8ac3f.js} +2 -2
  316. package/dist/esm/table.worker-1ba8ac3f.js.map +1 -0
  317. package/dist/nano-components/index.esm.js +1 -1
  318. package/dist/nano-components/nano-components.css +1 -1
  319. package/dist/nano-components/nano-components.esm.js +1 -1
  320. package/dist/nano-components/{p-35295332.entry.js → p-151aad1e.entry.js} +5 -5
  321. package/dist/nano-components/{p-35295332.entry.js.map → p-151aad1e.entry.js.map} +1 -1
  322. package/dist/nano-components/p-15543295.entry.js +5 -0
  323. package/dist/nano-components/{p-6e3412d2.entry.js.map → p-15543295.entry.js.map} +1 -1
  324. package/dist/nano-components/p-1e709f87.entry.js +5 -0
  325. package/dist/nano-components/p-1e709f87.entry.js.map +1 -0
  326. package/dist/nano-components/p-1f347342.entry.js +5 -0
  327. package/dist/nano-components/{p-02df1f62.entry.js.map → p-1f347342.entry.js.map} +1 -1
  328. package/dist/nano-components/p-216ece9a.js +5 -0
  329. package/dist/nano-components/{p-7ade1695.js.map → p-216ece9a.js.map} +0 -0
  330. package/dist/nano-components/p-23575705.entry.js +5 -0
  331. package/dist/nano-components/{p-6958df8c.entry.js.map → p-23575705.entry.js.map} +1 -1
  332. package/dist/nano-components/p-244223f0.entry.js +5 -0
  333. package/dist/nano-components/{p-6cd59e58.entry.js.map → p-244223f0.entry.js.map} +1 -1
  334. package/dist/nano-components/p-284dd9a2.entry.js +5 -0
  335. package/dist/nano-components/{p-5107646c.entry.js.map → p-284dd9a2.entry.js.map} +1 -1
  336. package/dist/nano-components/p-2cb4615b.entry.js +5 -0
  337. package/dist/nano-components/{p-e3730878.entry.js.map → p-2cb4615b.entry.js.map} +1 -1
  338. package/dist/nano-components/p-36842a50.entry.js +5 -0
  339. package/dist/nano-components/{p-f69f93e9.entry.js.map → p-36842a50.entry.js.map} +1 -1
  340. package/dist/nano-components/p-41addb3a.entry.js +5 -0
  341. package/dist/nano-components/{p-0a5ad0ef.entry.js.map → p-41addb3a.entry.js.map} +1 -1
  342. package/dist/nano-components/{p-9a385481.js → p-45abbbdd.js} +2 -2
  343. package/dist/nano-components/p-45abbbdd.js.map +1 -0
  344. package/dist/nano-components/p-46b348b7.entry.js +5 -0
  345. package/dist/nano-components/{p-28f713fb.entry.js.map → p-46b348b7.entry.js.map} +1 -1
  346. package/dist/nano-components/p-4b69178e.entry.js +5 -0
  347. package/dist/nano-components/{p-5e33798f.entry.js.map → p-4b69178e.entry.js.map} +1 -1
  348. package/dist/nano-components/p-4f0e14b5.entry.js +5 -0
  349. package/dist/nano-components/{p-8f5e0022.entry.js.map → p-4f0e14b5.entry.js.map} +1 -1
  350. package/dist/nano-components/p-559a6492.entry.js +5 -0
  351. package/dist/nano-components/p-559a6492.entry.js.map +1 -0
  352. package/dist/nano-components/p-601e18d5.entry.js +5 -0
  353. package/dist/nano-components/p-601e18d5.entry.js.map +1 -0
  354. package/dist/nano-components/p-69e5a37d.entry.js +5 -0
  355. package/dist/nano-components/{p-282987e6.entry.js.map → p-69e5a37d.entry.js.map} +1 -1
  356. package/dist/nano-components/p-751927d1.entry.js +5 -0
  357. package/dist/nano-components/{p-5d81773d.entry.js.map → p-751927d1.entry.js.map} +1 -1
  358. package/dist/nano-components/p-845ae77e.js.map +1 -1
  359. package/dist/nano-components/p-866e7e88.js +5 -0
  360. package/dist/nano-components/p-866e7e88.js.map +1 -0
  361. package/dist/nano-components/{p-b4a045a2.entry.js → p-89b8ce4f.entry.js} +2 -2
  362. package/dist/nano-components/{p-b4a045a2.entry.js.map → p-89b8ce4f.entry.js.map} +0 -0
  363. package/dist/nano-components/p-9059c8c1.entry.js +5 -0
  364. package/dist/nano-components/{p-d8e8d7e3.entry.js.map → p-9059c8c1.entry.js.map} +1 -1
  365. package/dist/nano-components/p-92504f7f.entry.js +5 -0
  366. package/dist/nano-components/{p-50fcb11c.entry.js.map → p-92504f7f.entry.js.map} +1 -1
  367. package/dist/nano-components/p-99fbae74.entry.js +5 -0
  368. package/dist/nano-components/{p-8a52a411.entry.js.map → p-99fbae74.entry.js.map} +1 -1
  369. package/dist/nano-components/p-9eeed8f5.entry.js +5 -0
  370. package/dist/nano-components/{p-4c97f05f.entry.js.map → p-9eeed8f5.entry.js.map} +1 -1
  371. package/dist/nano-components/p-a183e3c7.entry.js +5 -0
  372. package/dist/nano-components/{p-b290a970.entry.js.map → p-a183e3c7.entry.js.map} +1 -1
  373. package/dist/nano-components/p-a2e38472.entry.js +5 -0
  374. package/dist/nano-components/p-a2e38472.entry.js.map +1 -0
  375. package/dist/nano-components/p-b87539f0.entry.js +5 -0
  376. package/dist/nano-components/{p-efa8c520.entry.js.map → p-b87539f0.entry.js.map} +1 -1
  377. package/dist/nano-components/p-b9c8b99f.entry.js +5 -0
  378. package/dist/nano-components/p-b9c8b99f.entry.js.map +1 -0
  379. package/dist/nano-components/{p-cb79d1ec.js → p-c9a7c7ea.js} +2 -2
  380. package/dist/nano-components/{p-cb79d1ec.js.map → p-c9a7c7ea.js.map} +1 -1
  381. package/dist/nano-components/{p-c45851c3.entry.js → p-d1c8eca4.entry.js} +2 -2
  382. package/dist/nano-components/{p-c45851c3.entry.js.map → p-d1c8eca4.entry.js.map} +1 -1
  383. package/dist/nano-components/p-d8678bdc.entry.js +5 -0
  384. package/dist/nano-components/p-d8678bdc.entry.js.map +1 -0
  385. package/dist/nano-components/p-db4b6602.entry.js +5 -0
  386. package/dist/nano-components/{p-716064b6.entry.js.map → p-db4b6602.entry.js.map} +1 -1
  387. package/dist/nano-components/{p-916e4b6b.entry.js → p-dba8a88d.entry.js} +2 -2
  388. package/dist/nano-components/{p-916e4b6b.entry.js.map → p-dba8a88d.entry.js.map} +1 -1
  389. package/dist/nano-components/p-e4e41e06.entry.js +5 -0
  390. package/dist/nano-components/p-e4e41e06.entry.js.map +1 -0
  391. package/dist/nano-components/p-e5408bc8.entry.js +5 -0
  392. package/dist/nano-components/{p-c5bb5540.entry.js.map → p-e5408bc8.entry.js.map} +1 -1
  393. package/dist/nano-components/p-f43d1d8e.entry.js +5 -0
  394. package/dist/nano-components/p-f43d1d8e.entry.js.map +1 -0
  395. package/dist/nano-components/p-f7471cca.entry.js +5 -0
  396. package/dist/nano-components/{p-66ad1418.entry.js.map → p-f7471cca.entry.js.map} +1 -1
  397. package/dist/nano-components/p-fe94eeff.entry.js +5 -0
  398. package/dist/nano-components/{p-701e8ebf.entry.js.map → p-fe94eeff.entry.js.map} +1 -1
  399. package/dist/nano-components/p-feb9f164.entry.js +5 -0
  400. package/dist/nano-components/{p-81136f24.entry.js.map → p-feb9f164.entry.js.map} +1 -1
  401. package/dist/themes/nanopore.css +1 -1
  402. package/dist/themes/nanopore.css.map +1 -1
  403. package/dist/types/components/global-nav/global-nav.d.ts +8 -3
  404. package/dist/types/components/input/input.d.ts +2 -2
  405. package/dist/types/components/resize-observe/resize-observe.d.ts +5 -2
  406. package/dist/types/components/table/table.d.ts +8 -7
  407. package/dist/types/components.d.ts +4 -0
  408. package/dist/types/utils/dom.d.ts +1 -1
  409. package/docs-json.json +175 -9
  410. package/docs-vscode.json +2 -2
  411. package/package.json +2 -2
  412. package/dist/cjs/nano-table-844394ad.js.map +0 -1
  413. package/dist/cjs/tabbable-de4c23d8.js.map +0 -1
  414. package/dist/cjs/table.worker-1bc19978.js.map +0 -1
  415. package/dist/esm/nano-table-19d19d72.js.map +0 -1
  416. package/dist/esm/tabbable-614f515e.js.map +0 -1
  417. package/dist/esm/table.worker-c82cecdf.js.map +0 -1
  418. package/dist/nano-components/p-02df1f62.entry.js +0 -5
  419. package/dist/nano-components/p-0a5ad0ef.entry.js +0 -5
  420. package/dist/nano-components/p-1ae8c03e.entry.js +0 -5
  421. package/dist/nano-components/p-1ae8c03e.entry.js.map +0 -1
  422. package/dist/nano-components/p-282987e6.entry.js +0 -5
  423. package/dist/nano-components/p-28b43ee9.entry.js +0 -5
  424. package/dist/nano-components/p-28b43ee9.entry.js.map +0 -1
  425. package/dist/nano-components/p-28f713fb.entry.js +0 -5
  426. package/dist/nano-components/p-37553477.entry.js +0 -5
  427. package/dist/nano-components/p-37553477.entry.js.map +0 -1
  428. package/dist/nano-components/p-4c97f05f.entry.js +0 -5
  429. package/dist/nano-components/p-50fcb11c.entry.js +0 -5
  430. package/dist/nano-components/p-5107646c.entry.js +0 -5
  431. package/dist/nano-components/p-5d81773d.entry.js +0 -5
  432. package/dist/nano-components/p-5e33798f.entry.js +0 -5
  433. package/dist/nano-components/p-66ad1418.entry.js +0 -5
  434. package/dist/nano-components/p-6958df8c.entry.js +0 -5
  435. package/dist/nano-components/p-6cd59e58.entry.js +0 -5
  436. package/dist/nano-components/p-6e3412d2.entry.js +0 -5
  437. package/dist/nano-components/p-701e8ebf.entry.js +0 -5
  438. package/dist/nano-components/p-716064b6.entry.js +0 -5
  439. package/dist/nano-components/p-7ade1695.js +0 -5
  440. package/dist/nano-components/p-81136f24.entry.js +0 -5
  441. package/dist/nano-components/p-8a52a411.entry.js +0 -5
  442. package/dist/nano-components/p-8f5e0022.entry.js +0 -5
  443. package/dist/nano-components/p-9a385481.js.map +0 -1
  444. package/dist/nano-components/p-a151dea5.entry.js +0 -5
  445. package/dist/nano-components/p-a151dea5.entry.js.map +0 -1
  446. package/dist/nano-components/p-b290a970.entry.js +0 -5
  447. package/dist/nano-components/p-b7901427.entry.js +0 -5
  448. package/dist/nano-components/p-b7901427.entry.js.map +0 -1
  449. package/dist/nano-components/p-b83a8320.js +0 -5
  450. package/dist/nano-components/p-b83a8320.js.map +0 -1
  451. package/dist/nano-components/p-c5bb5540.entry.js +0 -5
  452. package/dist/nano-components/p-d8e8d7e3.entry.js +0 -5
  453. package/dist/nano-components/p-e3730878.entry.js +0 -5
  454. package/dist/nano-components/p-efa8c520.entry.js +0 -5
  455. package/dist/nano-components/p-f69f93e9.entry.js +0 -5
  456. package/dist/nano-components/p-f71f69c9.entry.js +0 -5
  457. package/dist/nano-components/p-f71f69c9.entry.js.map +0 -1
  458. package/dist/nano-components/p-f95a263c.entry.js +0 -5
  459. package/dist/nano-components/p-f95a263c.entry.js.map +0 -1
  460. package/dist/nano-components/p-fa2a6733.entry.js +0 -5
  461. package/dist/nano-components/p-fa2a6733.entry.js.map +0 -1
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{r as t,c as i,h as s,a as e,g as h}from"./p-1fe12320.js";import{a as n}from"./p-845ae77e.js";import{d as o}from"./p-9746b0a5.js";const r=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--stuck-left:initial;--stuck-right:initial;--stuck-z-index:var(--nano-layer-index-menubar, 10);--top-hide:translateY(-110%);--bottom-hide:translateY(110%);display:block;max-inline-size:100%}:host([sticky]){position:sticky;-webkit-transition:0.3s ease transform;transition:0.3s ease transform;will-change:min-block-size}:host([sticky][stuck]){inset-inline:var(--stuck-left) var(--stuck-right);z-index:var(--stuck-z-index) !important}:host([sticky][hide][placed-top]){-webkit-transform:var(--top-hide);transform:var(--top-hide)}:host([sticky][hide][placed-bottom]){-webkit-transform:var(--bottom-hide);transform:var(--bottom-hide)}:host([sticky][index="1"]){z-index:calc(var(--stuck-z-index) + 1)}:host([sticky][index="2"]){z-index:calc(var(--stuck-z-index) + 2)}:host([sticky][index="3"]){z-index:calc(var(--stuck-z-index) + 3)}:host([sticky][index="4"]){z-index:calc(var(--stuck-z-index) + 4)}:host([sticky][index="5"]){z-index:calc(var(--stuck-z-index) + 5)}.sticker{display:inherit;max-inline-size:inherit;inline-size:100%}.sticker:not(.stuck){inline-size:auto !important}.sticker.sticky{-webkit-transition:0.3s ease all;transition:0.3s ease all;position:relative}:host([index="1"]) .sticker.sticky{z-index:calc(var(--stuck-z-index) + 1)}:host([index="2"]) .sticker.sticky{z-index:calc(var(--stuck-z-index) + 2)}:host([index="3"]) .sticker.sticky{z-index:calc(var(--stuck-z-index) + 3)}:host([index="4"]) .sticker.sticky{z-index:calc(var(--stuck-z-index) + 4)}:host([index="5"]) .sticker.sticky{z-index:calc(var(--stuck-z-index) + 5)}.sticker.stuck{position:fixed;inset-inline:var(--stuck-left) var(--stuck-right);z-index:var(--stuck-z-index);-webkit-transform:translateY(0);transform:translateY(0)}:host([placed-top]) .sticker.stuck{inset-block-start:0}:host([placed-bottom]) .sticker.stuck{inset-block-end:0}:host([placed-top]) .sticker.stuck.hide{-webkit-transform:var(--top-hide);transform:var(--top-hide)}:host([placed-bottom]) .sticker.stuck.hide{-webkit-transform:var(--bottom-hide);transform:var(--bottom-hide)}.sticker-content{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}';function a(t){return t instanceof Document?window.pageYOffset:t.scrollTop}function c(t,i){const s=i instanceof Document?document.documentElement:i;return n(t,s)}const l=class{constructor(s){t(this,s);this.nanoStuck=i(this,"nanoStuck",7);this.nanoUnstuck=i(this,"nanoUnstuck",7);this.nanoHide=i(this,"nanoHide",7);this.nanoShow=i(this,"nanoShow",7);this.isRtl=false;this.scrollPosCache=0;this.scrollPosThresholdCache=0;this.cacheOffset=0;this.pauseResizeWatcher=false;this.listenForScrollParent=false;this.positions=[];this.pauseHide=false;this.hasBootstrapped=false;this.setupParentResizeListener=()=>{if(this.parentSizeObserver){this.parentSizeObserver.disconnect();this.parentSizeObserver=undefined}this.parentSizeObserver=new ResizeObserver((t=>{for(const i of t){let t,s;if(i.contentRect.height)t=i.contentRect.height;if(i.contentRect.width)s=i.contentRect.width;if(typeof this.quietMode==="object"){if(s<this.quietMode.w||t<this.quietMode.h)this.quietModeIsOn=true;else this.quietModeIsOn=false}if(this.breakPointMin){if(s>this.breakPointMin)this.isSticky=true;else this.isSticky=false}if(this.breakPointMax){if(s<this.breakPointMax)this.isSticky=true;else this.isSticky=false}if(this.isRootSticker&&this.sticker&&this.autoResize)this.sticker.style.width=this.host.scrollWidth+"px"}}));const t=this.scrollParent instanceof Document?this.scrollParent.documentElement:this.scrollParent;if(t)this.parentSizeObserver.observe(t)};this.onStickToDisplayEvent=t=>{if(t.detail.sticker!==this.stickToEle)return;switch(t.type){case"nanoHide":this._offset=0;this.cacheOffset=this.offset;this.offset=0;if(!this.isStuck)this.moveTrigger(false);if(!this.isRootSticker&&this.quietModeIsOn){requestAnimationFrame((()=>{this.stickToEle.style.minHeight=this.stickToEleInitSize.height+(this.host.scrollHeight+(typeof this.cacheOffset==="object"?this.cacheOffset.v:this.cacheOffset))+"px";this.stickToEle.setTriggerPos(this.stickToEleInitSize.height*-1)}))}break;case"nanoShow":this._offset=this.stickToEleInitSize.height;this.offset=this.cacheOffset;this.moveTrigger(true);if(!this.isRootSticker&&this.quietModeIsOn){requestAnimationFrame((()=>{this.stickToEle.style.minHeight="";this.stickToEle.setTriggerPos(0)}))}break;case"nanoStuck":this.stickToEleInitSize=this.stickToEle.getBoundingClientRect();this._offset=this.stickToEleInitSize.height;break}};this.onStickEvent=async t=>{const i=t.detail?t.detail.sticker:null;if(!i||i.position!==this.position)return;const s=await i.getTriggerPos();if(t.type==="nanoStuck"&&i!==this.host&&i.scrollParent===this.host.scrollParent){this.stickerIndex++;if(!this.hideOnNewStickers)return;if(this.positions.includes("top")&&this.triggerPos.top<s.top||this.positions.includes("bottom")&&this.triggerPos.top>s.top){this.multiStickerHide=true;this.stuckCounter++}}if(t.type==="nanoUnstuck"&&i!==this.host&&i.scrollParent===this.host.scrollParent){this.stickerIndex--;if(!this.hideOnNewStickers)return;if(this.positions.includes("top")&&this.triggerPos.top<s.top||this.positions.includes("bottom")&&this.triggerPos.top>s.top){this.stuckCounter--;if(this.stuckCounter<1)this.multiStickerHide=false}}};this.onScroll=()=>{const t=a(this.scrollParent);if(t<this.scrollPosCache){if(!this.positions.includes("bottom"))this.handleScrollTo();else this.handleScrollAway(t)}if(t>this.scrollPosCache){if(!this.positions.includes("bottom"))this.handleScrollAway(t);else this.handleScrollTo()}this.scrollPosCache=t};this.isStuck=false;this.isRootSticker=true;this.hide=false;this.scrollHide=false;this.multiStickerHide=false;this.scrollingTo=false;this.quietModeIsOn=false;this.stuckCounter=0;this.stickerIndex=0;this.stickToEle=undefined;this.triggerPos=undefined;this.trigger=undefined;this._offset=0;this.autoResize=true;this.isSticky=true;this.offset=0;this.position="top";this.quietMode={h:600,w:600};this.hideOnNewStickers=true;this.breakPointMax=null;this.breakPointMin=null;this.scrollParent=undefined;this.stickTo=undefined}async isHiding(){return this.hide}async isSticking(){this.shouldStick();return this.isStuck}async setTriggerPos(t){return this._offset=t}async getTriggerPos(){return this.triggerPos}async pauseHiding(t){return this.pauseHide=t}updateTriggerOffset(){if(!this.trigger||!this.scrollParent||!this.listenForScrollParent)return;this.triggerPos=c(this.trigger,this.scrollParent)}stickerResizeListener(){if(this.contentSizeObserver){this.contentSizeObserver.disconnect();this.contentSizeObserver=undefined}this.contentSizeObserver=new ResizeObserver((t=>{for(const i of t){if(this.pauseResizeWatcher)return;if(i.contentRect.height){if(this.position==="top")this.host.style.height=i.contentRect.height+"px";if(this.position==="bottom")this.host.style.minHeight=i.contentRect.height+"px"}}}));this.contentSizeObserver.observe(this.content)}quietModeChange(){if(this.quietMode==="on")requestAnimationFrame((()=>this.quietModeIsOn=true));else if(this.quietMode==="off")requestAnimationFrame((()=>this.quietModeIsOn=false))}setOffset(){this.trigger.setAttribute("style","");let t,i,s,e;const h=this.isRootSticker||this.stickToEle?this.sticker:this.host;if(!h)return;if(typeof this.offset==="object")({v:t,h:i}=this.offset);else t=i=this.offset;if(typeof this._offset==="object")({v:t=s,h:i=e}=this._offset);else s=e=this._offset;const n=s=>{const e=s.match(/(top|bottom)/)?t:i;o(s);h.style[s]=e+"px";if(e)this.host.style.setProperty("--hide-transform-amount",`(110% + ${e}px)`);else this.host.style.setProperty("--hide-transform-amount",null)};const o=h=>{const n=h.match(/(top|bottom)/)?t+s:i+e;this.trigger.style[h]=n*-1+"px";this.trigger.style.position="relative";this.trigger.style.height="1px"};if(this.positions.includes("start")&&this.isRtl||this.positions.includes("end")&&!this.isRtl)n("right");if(this.positions.includes("end")&&this.isRtl||this.positions.includes("start")&&!this.isRtl)n("left");if(this.positions.includes("top"))n("top");if(this.positions.includes("bottom"))n("bottom")}positionChange(){this.positions=this.position.split("-");this.setOffset()}async stuckChange(){if(this.isStuck){if(this.stickToEle){const t=this.host.children;this.slottedContent=Array.from(t);this.slottedContent.forEach((t=>{this.stickToEle.appendChild(t);t.style.order=this.stickerIndex+""}));this.nanoStuck.emit({sticker:this.stickToEle})}else this.nanoStuck.emit({sticker:this.host})}else{this.scrollHide=false;if(this.stickToEle){this.slottedContent.forEach((t=>{this.host.appendChild(t);t.style.order=""}));this.nanoUnstuck.emit({sticker:this.stickToEle})}else this.nanoUnstuck.emit({sticker:this.host})}}attachScrollListeners(){if(this.quietModeIsOn)this.scrollParent.addEventListener("scroll",this.onScroll,{passive:true,capture:false});else if(this.scrollParent){this.scrollParent.removeEventListener("scroll",this.onScroll);this.moveTrigger(true)}}handleParentEvents(t,i=null){if(!this.listenForScrollParent)return;if(i)this.manageListenersOnParent(false,i);if(this.scrollParent)this.manageListenersOnParent(!this.stickToEle)}stickToEleChange(t,i){if(this.stickToEle){this.stickToEle.addEventListener("nanoHide",this.onStickToDisplayEvent);this.stickToEle.addEventListener("nanoShow",this.onStickToDisplayEvent);this.stickToEle.addEventListener("nanoStuck",this.onStickToDisplayEvent);this.stickToEle.addEventListener("nanoUnstuck",this.onStickToDisplayEvent)}if(i){i.removeEventListener("nanoHide",this.onStickToDisplayEvent);i.removeEventListener("nanoShow",this.onStickToDisplayEvent);i.removeEventListener("nanoStuck",this.onStickToDisplayEvent);i.removeEventListener("nanoUnstuck",this.onStickToDisplayEvent)}}stickToChange(){if(this.stickTo)this.stickToEle=this.scrollParent.querySelector(this.stickTo);else this.stickToEle=undefined}visibilityDecisionHandler(){if(this.multiStickerHide||this.scrollHide)this.hide=true;else this.hide=false}handleHideChange(){if(this.hide)this.nanoHide.emit({sticker:this.host});else this.nanoShow.emit({sticker:this.host})}setupIO(){if(this.io){this.io.disconnect();this.io=undefined}if(!this.scrollParent||!this.hasBootstrapped||!this.trigger)return;this.isRootSticker=this.scrollParent instanceof Document;let t=this.scrollParent;if(this.scrollParent instanceof Document)t=null;this.io=new window.IntersectionObserver((t=>{if(this.pauseResizeWatcher||!this.isSticky)return;this.shouldStick(t.slice(-1)[0])}),{root:t});this.io.observe(this.trigger)}manageListenersOnParent(t,i){const s=i||this.scrollParent;if(!s)return;if(!t){try{if(this.quietModeIsOn)s.removeEventListener("scroll",this.onScroll);s.removeEventListener("nanoStuck",this.onStickEvent);s.removeEventListener("nanoUnstuck",this.onStickEvent)}catch(t){console.error("Events haven`t been added")}}else{s.addEventListener("nanoStuck",this.onStickEvent);s.addEventListener("nanoUnstuck",this.onStickEvent);if(this.quietModeIsOn)this.attachScrollListeners()}this.setupParentResizeListener()}handleScrollTo(){this.scrollPosThresholdCache=null;if(!this.scrollHide)return;if(this.scrollingTo!==true){this._offset=this.cacheOffset||this._offset}this.scrollingTo=true;this.scrollHide=false}handleScrollAway(t){if(this.scrollHide)return;if(!this.isStuck)return;if(this.scrollingTo!==false){this.cacheOffset=this._offset;this._offset=0}this.scrollingTo=false;if(!this.scrollPosThresholdCache)this.scrollPosThresholdCache=t;else if(!this.pauseHide&&Math.abs(t-this.scrollPosThresholdCache)>100)this.scrollHide=true}moveTrigger(t){if(this.positions.includes("bottom")&&!t||!this.positions.includes("bottom")&&t){this.host.parentNode.insertBefore(this.trigger,this.host)}else this.host.parentNode.insertBefore(this.trigger,this.host.nextSibling)}getScrollParent(){const t=/(auto|scroll)/;const i=(t,s)=>{if(t.parentNode===null){return s}return i(t.parentNode,s.concat([t]))};const s=(t,i)=>getComputedStyle(t,null).getPropertyValue(i);const e=t=>s(t,"overflow")+s(t,"overflow-y")+s(t,"overflow-x");const h=i=>t.test(e(i));const n=document.documentElement.getBoundingClientRect().height;const o=t=>{if(!(t instanceof HTMLElement))return;const s=i(t,[]);return s.find((t=>h(t)&&t.getBoundingClientRect().height!==n))||document};return o(this.host)}shouldStick(t){let i;if(this.positions.includes("top")){if(!this.isRootSticker)i=c(this.trigger,this.scrollParent).top;else i=this.trigger.getBoundingClientRect().top;this.isStuck=i<-1}else if(this.positions.includes("bottom")){i=this.trigger.getBoundingClientRect().top;const s=t&&t.rootBounds?t.rootBounds:(this.scrollParent instanceof Document?document.documentElement:this.scrollParent).getBoundingClientRect();this.isStuck=i>s.height+s.top}}bootstrapGurantor(){this.hasBootstrapped=true;this.scrollParent=this.scrollParent||this.getScrollParent();this.isRootSticker=this.scrollParent instanceof Document;this.trigger=this.trigger||document.createElement("div");this.trigger.classList.add("sticker-trigger");this.positionChange();this.moveTrigger(true);this.quietModeChange();this.listenForScrollParent=true;this.handleParentEvents(true);this.stickerIndex=Array.from(this.scrollParent.querySelectorAll("nano-sticker")).filter((t=>t.position===this.position)).findIndex((t=>t===this.host));this.setOffset();this.stickerResizeListener();this.setupParentResizeListener();this.slottedContent=Array.from(this.host.children);this.slottedContent.forEach((t=>{t.style.order=this.stickerIndex+""}));this.updateTriggerOffset();this.stickToChange();this.setupIO();this.onStickToDisplayEvent=o(this.onStickToDisplayEvent,50)}connectedCallback(){this.isRtl=this.host.dir==="rtl"||this.host.ownerDocument.dir==="rtl";document.documentElement.addEventListener("nanoComponentsReady",(()=>{setTimeout((t=>this.bootstrapGurantor()),200)}));setTimeout((t=>{if(!this.hasBootstrapped)this.bootstrapGurantor()}),1e3)}disconnectedCallback(){if(this.io){this.io.disconnect();this.io=undefined}if(this.parentSizeObserver){this.parentSizeObserver.disconnect();this.parentSizeObserver=undefined}this.scrollParent=null;this.hasBootstrapped=false}render(){return s(e,{sticky:!this.isRootSticker&&!this.stickToEle&&this.isSticky,hide:this.hide&&this.isStuck,siblings:this.stuckCounter,index:this.stickerIndex,stuck:this.isStuck&&this.isSticky,"placed-bottom":this.positions.includes("bottom"),"placed-top":this.positions.includes("top"),"placed-end":this.positions.includes("end"),"placed-start":this.positions.includes("start")},s("div",{class:{sticker:true,sticky:this.isRootSticker&&this.isSticky,stuck:this.isStuck&&this.isRootSticker&&this.isSticky,hide:this.isRootSticker&&this.hide&&this.isStuck},ref:t=>this.sticker=t},s("div",{class:"sticker-content",ref:t=>this.content=t},s("slot",null))))}get host(){return h(this)}static get watchers(){return{trigger:["updateTriggerOffset"],scrollParent:["updateTriggerOffset","handleParentEvents","setupIO"],position:["stickerResizeListener","positionChange"],quietMode:["quietModeChange"],offset:["setOffset"],_offset:["setOffset"],isStuck:["stuckChange"],quietModeIsOn:["attachScrollListeners"],stickToEle:["handleParentEvents","stickToEleChange"],stickTo:["stickToChange"],multiStickerHide:["visibilityDecisionHandler"],scrollHide:["visibilityDecisionHandler"],hide:["handleHideChange"]}}};l.style=r;export{l as nano_sticker};
5
- //# sourceMappingURL=p-a151dea5.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/sticker/sticker.scss?tag=nano-sticker&encapsulation=shadow","src/components/sticker/sticker.tsx"],"names":["stickerCss","_getScrollTop","ele","Document","window","pageYOffset","scrollTop","_getOffset","parent","parentEle","document","documentElement","getOffset","Sticker","this","isRtl","scrollPosCache","scrollPosThresholdCache","cacheOffset","pauseResizeWatcher","listenForScrollParent","positions","pauseHide","hasBootstrapped","setupParentResizeListener","parentSizeObserver","disconnect","undefined","ResizeObserver","entries","entry","height","width","contentRect","quietMode","w","h","quietModeIsOn","breakPointMin","isSticky","breakPointMax","isRootSticker","sticker","autoResize","style","host","scrollWidth","toWatch","scrollParent","observe","onStickToDisplayEvent","e","detail","stickToEle","type","_offset","offset","isStuck","moveTrigger","requestAnimationFrame","minHeight","stickToEleInitSize","scrollHeight","v","setTriggerPos","getBoundingClientRect","onStickEvent","async","position","incomingTriggerPos","getTriggerPos","stickerIndex","hideOnNewStickers","includes","triggerPos","top","multiStickerHide","stuckCounter","onScroll","y","handleScrollTo","handleScrollAway","[object Object]","hide","shouldStick","pause","trigger","contentSizeObserver","content","setAttribute","_v","_h","setPos","pos","u","match","setTriggetPos","setProperty","split","setOffset","children","slottedContent","Array","from","forEach","child","appendChild","order","nanoStuck","emit","scrollHide","nanoUnstuck","addEventListener","passive","capture","removeEventListener","_","oldParent","manageListenersOnParent","oldEle","stickTo","querySelector","nanoHide","nanoShow","io","root","IntersectionObserver","slice","addEvents","console","error","attachScrollListeners","scrollingTo","currScroll","Math","abs","toInitial","parentNode","insertBefore","nextSibling","regex","parents","_node","ps","concat","prop","getComputedStyle","getPropertyValue","overflow","scroll","test","docHeight","HTMLElement","find","data","scrollAmt","parentBounding","rootBounds","getScrollParent","createElement","classList","add","positionChange","quietModeChange","handleParentEvents","querySelectorAll","filter","findIndex","stickerResizeListener","updateTriggerOffset","stickToChange","setupIO","debounce","dir","ownerDocument","setTimeout","bootstrapGurantor","Host","sticky","siblings","index","stuck","placed-bottom","placed-top","placed-end","placed-start","class","ref","div"],"mappings":"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","sourcesContent":["@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --stuck-left: The left position when your sticker is stuck. This can be useful to force your sticker to fill the viewport for example. Defaults to initial\n * @prop --stuck-right: The right position when your sticker is stuck. This can be useful to force your sticker to fill the viewport for example. Defaults to initial\n * @prop --stuck-z-index: The z-index order to display your sticker. Can be useful when displaying multiple stickers simultaneously. Defaults to #{$layer-index-menubar};\n @prop --top-hide: This is used for the hide transform animation (e.g. when quiet-mode is on). Defaults to translateY(-110%);\n @prop --bottom-hide: This is used for the hide transform animation (e.g. when quiet-mode is on). Defaults to translateY(110%);\n */\n\n --stuck-left: initial;\n --stuck-right: initial;\n --stuck-z-index: #{$layer-index-menubar};\n --top-hide: translateY(-110%);\n --bottom-hide: translateY(110%);\n\n display: block;\n max-inline-size: 100%;\n}\n\n:host([sticky]) {\n position: sticky;\n transition: 0.3s ease transform;\n will-change: min-block-size;\n}\n\n:host([sticky][stuck]) {\n inset-inline: var(--stuck-left) var(--stuck-right);\n z-index: var(--stuck-z-index) !important;\n}\n\n:host([sticky][hide][placed-top]) {\n transform: var(--top-hide);\n}\n\n:host([sticky][hide][placed-bottom]) {\n transform: var(--bottom-hide);\n}\n\n:host([sticky][index='1']) {\n z-index: calc(var(--stuck-z-index) + 1);\n}\n\n:host([sticky][index='2']) {\n z-index: calc(var(--stuck-z-index) + 2);\n}\n\n:host([sticky][index='3']) {\n z-index: calc(var(--stuck-z-index) + 3);\n}\n\n:host([sticky][index='4']) {\n z-index: calc(var(--stuck-z-index) + 4);\n}\n\n:host([sticky][index='5']) {\n z-index: calc(var(--stuck-z-index) + 5);\n}\n\n.sticker {\n display: inherit;\n max-inline-size: inherit;\n inline-size: 100%;\n\n &:not(.stuck) {\n inline-size: auto !important;\n }\n\n &.sticky {\n transition: 0.3s ease all;\n position: relative;\n\n :host([index='1']) & {\n z-index: calc(var(--stuck-z-index) + 1);\n }\n\n :host([index='2']) & {\n z-index: calc(var(--stuck-z-index) + 2);\n }\n\n :host([index='3']) & {\n z-index: calc(var(--stuck-z-index) + 3);\n }\n\n :host([index='4']) & {\n z-index: calc(var(--stuck-z-index) + 4);\n }\n\n :host([index='5']) & {\n z-index: calc(var(--stuck-z-index) + 5);\n }\n }\n\n &.stuck {\n position: fixed;\n inset-inline: var(--stuck-left) var(--stuck-right);\n z-index: var(--stuck-z-index);\n transform: translateY(0);\n\n :host([placed-top]) & {\n inset-block-start: 0;\n }\n\n :host([placed-bottom]) & {\n inset-block-end: 0;\n }\n\n &.hide {\n :host([placed-top]) & {\n transform: var(--top-hide);\n }\n\n :host([placed-bottom]) & {\n transform: var(--bottom-hide);\n }\n }\n }\n}\n\n.sticker-content {\n display: flex;\n flex-wrap: wrap;\n}\n","import {\n Component,\n ComponentInterface,\n h,\n Host,\n Prop,\n State,\n Watch,\n Element,\n Event,\n EventEmitter,\n Method,\n} from '@stencil/core';\nimport { getOffset } from '../../utils/dom';\nimport { debounce } from '../../utils/throttle';\n\nfunction _getScrollTop(ele: HTMLElement | Document) {\n return ele instanceof Document ? window.pageYOffset : ele.scrollTop;\n}\n\nfunction _getOffset(ele: HTMLElement, parent: HTMLElement | Document) {\n const parentEle =\n parent instanceof Document ? document.documentElement : parent;\n return getOffset(ele, parentEle);\n}\n\ntype Positions = 'top' | 'bottom' | 'start' | 'end';\n\n/**\n * The Sticker component is a toolbox for 'sticking' items to scrolling containers.\n *\n */\n@Component({\n tag: 'nano-sticker',\n styleUrl: 'sticker.scss',\n shadow: true,\n})\nexport class Sticker implements ComponentInterface {\n private isRtl: boolean = false;\n private io: IntersectionObserver;\n private contentSizeObserver: ResizeObserver;\n private parentSizeObserver: ResizeObserver;\n private sticker: HTMLDivElement;\n private content: HTMLDivElement;\n private scrollPosCache = 0;\n private scrollPosThresholdCache = 0;\n private cacheOffset: number | { v: number; h: number } = 0;\n private slottedContent: Element[];\n private pauseResizeWatcher = false;\n private listenForScrollParent = false;\n private stickToEleInitSize?: DOMRect;\n private positions: Positions[] = [];\n private pauseHide: boolean = false;\n private hasBootstrapped = false;\n\n @Element() host: HTMLNanoStickerElement;\n\n // Internal State\n\n @State() isStuck = false;\n @State() isRootSticker = true;\n @State() hide = false;\n @State() scrollHide = false;\n @State() multiStickerHide = false;\n @State() scrollingTo = false;\n @State() quietModeIsOn = false;\n @State() stuckCounter = 0;\n @State() stickerIndex = 0;\n @State() stickToEle?: HTMLNanoStickerElement;\n @State() triggerPos: { top: number; left: number };\n @State() trigger: HTMLDivElement;\n @State() _offset: number | { v: number; h: number } = 0;\n\n // Public API\n\n /** Only applicable to root stickers. When applied the sticker will grow or shrink to the scrollParent size */\n @Prop() autoResize = true;\n\n /** Manually enable / disabled sticky behaviour */\n @Prop({ mutable: true }) isSticky = true;\n\n /** Distance the item should be stuck from the sticky edge. */\n @Prop({ mutable: true }) offset: number | { v: number; h: number } = 0;\n\n /** The edge of the scroll-parent to stick to */\n @Prop() position: 'top' | 'bottom' = 'top';\n // other opts I'd like one day. 'start' | 'end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'\n\n /** When applied, the sticker will hide when the scroll-parent\n * is scrolling away from the sticker's stuck position and show when scrolling toward it.\n * By default this will apply when the parent is below either the h or w dimensions */\n @Prop() quietMode: 'on' | 'off' | { h: number; w: number } = {\n h: 600,\n w: 600,\n };\n\n /** When applied stickers will hide upon new stickers being stuck to the same position */\n @Prop() hideOnNewStickers = true;\n\n /** The max width of the item to implement sticky behaviour. */\n @Prop() breakPointMax: null | number = null;\n\n /** The min width of the item to implement sticky behaviour. */\n @Prop() breakPointMin: null | number = null;\n\n /** Define which scroll element to listen & stick to.\n * By default, it will find traverse the DOM to find the closest. */\n @Prop({ mutable: true }) scrollParent?: HTMLElement | Document;\n\n /** Upon being stuck, attach the sticker to another sticker element.\n * A JS query selector that returns a <nano-sticker> */\n @Prop() stickTo: string;\n\n // Broadcasted Events\n\n /** Emitted when a sticker is stuck */\n @Event() nanoStuck!: EventEmitter<{ sticker: HTMLNanoStickerElement }>;\n\n /** Emitted when a sticker is unstuck */\n @Event() nanoUnstuck!: EventEmitter<{ sticker: HTMLNanoStickerElement }>;\n\n /** Emitted when a sticker is hidden */\n @Event() nanoHide!: EventEmitter<{ sticker: HTMLNanoStickerElement }>;\n\n /** Emitted when a sticker is showing */\n @Event() nanoShow!: EventEmitter<{ sticker: HTMLNanoStickerElement }>;\n\n // Public methods\n\n /**\n * Method to return the visibility status of the sticker\n * @returns boolean\n */\n @Method()\n async isHiding() {\n return this.hide;\n }\n\n /**\n * Method to return the stuck status of the sticker\n * @returns boolean\n */\n @Method()\n async isSticking() {\n this.shouldStick();\n return this.isStuck;\n }\n\n /** @internal */\n @Method()\n async setTriggerPos(offset: number | { v: number; h: number }) {\n return (this._offset = offset);\n }\n\n /** @internal */\n @Method()\n async getTriggerPos() {\n return this.triggerPos;\n }\n\n /** @internal */\n @Method()\n async pauseHiding(pause: boolean) {\n return (this.pauseHide = pause);\n }\n\n // Watchers\n\n /** Keep a note of trigger position. Need this to track sticker order in the DOM */\n @Watch('trigger')\n @Watch('scrollParent')\n updateTriggerOffset() {\n if (!this.trigger || !this.scrollParent || !this.listenForScrollParent)\n return;\n this.triggerPos = _getOffset(this.trigger, this.scrollParent);\n }\n\n /** A root sticker is a fixed element Or this sticker is sticking to another.\n * We need a content resize watcher to make sure we maintain a correct placeholder size in the body */\n @Watch('position')\n stickerResizeListener() {\n if (this.contentSizeObserver) {\n this.contentSizeObserver.disconnect();\n this.contentSizeObserver = undefined;\n }\n\n this.contentSizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (this.pauseResizeWatcher) return;\n\n if (entry.contentRect.height) {\n if (this.position === 'top')\n this.host.style.height = entry.contentRect.height + 'px';\n if (this.position === 'bottom')\n this.host.style.minHeight = entry.contentRect.height + 'px';\n }\n }\n });\n this.contentSizeObserver.observe(this.content);\n }\n\n @Watch('quietMode')\n quietModeChange() {\n if (this.quietMode === 'on')\n requestAnimationFrame(() => (this.quietModeIsOn = true));\n else if (this.quietMode === 'off')\n requestAnimationFrame(() => (this.quietModeIsOn = false));\n }\n\n /** offset is part of the public API but we also use it to manipulate trigger points */\n @Watch('offset')\n @Watch('_offset')\n setOffset() {\n this.trigger.setAttribute('style', '');\n let v: number, h: number, _v: number, _h: number;\n const sticker: HTMLElement =\n this.isRootSticker || this.stickToEle ? this.sticker : this.host;\n\n if (!sticker) return;\n\n if (typeof this.offset === 'object') ({ v, h } = this.offset);\n else v = h = this.offset;\n\n if (typeof this._offset === 'object') ({ v = _v, h = _h } = this._offset);\n else _v = _h = this._offset;\n\n const setPos = (pos: 'top' | 'bottom' | 'left' | 'right') => {\n const u = pos.match(/(top|bottom)/) ? v : h;\n setTriggetPos(pos);\n sticker.style[pos] = u + 'px';\n if (u)\n this.host.style.setProperty(\n '--hide-transform-amount',\n `(110% + ${u}px)`\n );\n else this.host.style.setProperty('--hide-transform-amount', null);\n };\n\n const setTriggetPos = (pos: 'top' | 'bottom' | 'left' | 'right') => {\n const u = pos.match(/(top|bottom)/) ? v + _v : h + _h;\n this.trigger.style[pos] = u * -1 + 'px';\n this.trigger.style.position = 'relative';\n this.trigger.style.height = '1px';\n };\n\n if (\n (this.positions.includes('start') && this.isRtl) ||\n (this.positions.includes('end') && !this.isRtl)\n )\n setPos('right');\n\n if (\n (this.positions.includes('end') && this.isRtl) ||\n (this.positions.includes('start') && !this.isRtl)\n )\n setPos('left');\n\n if (this.positions.includes('top')) setPos('top');\n if (this.positions.includes('bottom')) setPos('bottom');\n }\n\n @Watch('position')\n positionChange() {\n this.positions = this.position.split('-') as Positions[];\n this.setOffset();\n }\n\n /** If this sticker is attached to a 'master' sticker (stickToEle),\n * here we move the content of this sticker in and out accordingly */\n @Watch('isStuck')\n async stuckChange() {\n if (this.isStuck) {\n if (this.stickToEle) {\n const content = this.host.children;\n this.slottedContent = Array.from(content);\n\n this.slottedContent.forEach((child: HTMLElement) => {\n this.stickToEle.appendChild(child);\n child.style.order = this.stickerIndex + '';\n });\n\n this.nanoStuck.emit({ sticker: this.stickToEle });\n } else this.nanoStuck.emit({ sticker: this.host });\n } else {\n this.scrollHide = false;\n\n if (this.stickToEle) {\n this.slottedContent.forEach((child: HTMLElement) => {\n this.host.appendChild(child);\n child.style.order = '';\n });\n this.nanoUnstuck.emit({ sticker: this.stickToEle });\n } else this.nanoUnstuck.emit({ sticker: this.host });\n }\n }\n\n /** attach scroll listener. 'hides' stickers when scrolling away from trigger and 'shows' when scrolling toward */\n @Watch('quietModeIsOn')\n attachScrollListeners() {\n if (this.quietModeIsOn)\n this.scrollParent.addEventListener('scroll', this.onScroll, {\n passive: true,\n capture: false,\n });\n else if (this.scrollParent) {\n this.scrollParent.removeEventListener('scroll', this.onScroll);\n this.moveTrigger(true);\n }\n }\n\n /** Add / remove parent scrolling listeners. If there's stickToEle we need to remove them */\n @Watch('scrollParent')\n @Watch('stickToEle')\n handleParentEvents(_, oldParent: null | HTMLElement = null) {\n if (!this.listenForScrollParent) return;\n if (oldParent) this.manageListenersOnParent(false, oldParent);\n if (this.scrollParent) this.manageListenersOnParent(!this.stickToEle);\n }\n\n /** Add remove specific listeners if we're sticking to a sticker.\n * We need to adjust triggers according to the status of the 'master' */\n @Watch('stickToEle')\n stickToEleChange(_, oldEle: null | HTMLNanoStickerElement) {\n if (this.stickToEle) {\n this.stickToEle.addEventListener('nanoHide', this.onStickToDisplayEvent);\n this.stickToEle.addEventListener('nanoShow', this.onStickToDisplayEvent);\n this.stickToEle.addEventListener('nanoStuck', this.onStickToDisplayEvent);\n this.stickToEle.addEventListener(\n 'nanoUnstuck',\n this.onStickToDisplayEvent\n );\n }\n if (oldEle) {\n oldEle.removeEventListener('nanoHide', this.onStickToDisplayEvent);\n oldEle.removeEventListener('nanoShow', this.onStickToDisplayEvent);\n oldEle.removeEventListener('nanoStuck', this.onStickToDisplayEvent);\n oldEle.removeEventListener('nanoUnstuck', this.onStickToDisplayEvent);\n }\n }\n\n /** Find and set the stickToEle from the public, selector string */\n @Watch('stickTo')\n stickToChange() {\n if (this.stickTo)\n this.stickToEle = this.scrollParent.querySelector(this.stickTo);\n else this.stickToEle = undefined;\n }\n\n /** 2 potential criteria for hiding. Multi-stickers or quietmode. */\n @Watch('multiStickerHide')\n @Watch('scrollHide')\n visibilityDecisionHandler() {\n if (this.multiStickerHide || this.scrollHide) this.hide = true;\n else this.hide = false;\n }\n\n @Watch('hide')\n handleHideChange() {\n if (this.hide) this.nanoHide.emit({ sticker: this.host });\n else this.nanoShow.emit({ sticker: this.host });\n }\n\n @Watch('scrollParent')\n setupIO() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n if (!this.scrollParent || !this.hasBootstrapped || !this.trigger) return;\n\n this.isRootSticker = this.scrollParent instanceof Document;\n let root = this.scrollParent;\n if (this.scrollParent instanceof Document) root = null;\n\n this.io = new window.IntersectionObserver(\n (_) => {\n if (this.pauseResizeWatcher || !this.isSticky) return;\n this.shouldStick(_.slice(-1)[0]);\n },\n { root: root as HTMLElement }\n );\n\n this.io.observe(this.trigger);\n }\n\n // Private methods / handlers\n\n /** Assesses the public API quitemode and works out if it should be applied atm.\n * If 'smallscreen', or there is a breakpointmax / min it will add a resizeobserver to conditionally add behaviour */\n private setupParentResizeListener = () => {\n if (this.parentSizeObserver) {\n this.parentSizeObserver.disconnect();\n this.parentSizeObserver = undefined;\n }\n\n this.parentSizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n let height: number, width: number;\n if (entry.contentRect.height) height = entry.contentRect.height;\n if (entry.contentRect.width) width = entry.contentRect.width;\n\n if (typeof this.quietMode === 'object') {\n if (width < this.quietMode.w || height < this.quietMode.h)\n this.quietModeIsOn = true;\n else this.quietModeIsOn = false;\n }\n\n if (this.breakPointMin) {\n if (width > this.breakPointMin) this.isSticky = true;\n else this.isSticky = false;\n }\n\n if (this.breakPointMax) {\n if (width < this.breakPointMax) this.isSticky = true;\n else this.isSticky = false;\n }\n\n if (this.isRootSticker && this.sticker && this.autoResize)\n this.sticker.style.width = this.host.scrollWidth + 'px';\n }\n });\n\n const toWatch =\n this.scrollParent instanceof Document\n ? this.scrollParent.documentElement\n : this.scrollParent;\n if (toWatch) this.parentSizeObserver.observe(toWatch);\n };\n\n /** For stickTo stickers. We listen to the events from the 'master' sticker to ammend the hide/show trigger\n * Main diffs from rootstickers / non is height being on 'master' */\n private onStickToDisplayEvent = (\n e: CustomEvent<{ sticker: HTMLNanoStickerElement }>\n ) => {\n if (e.detail.sticker !== this.stickToEle) return;\n\n switch (e.type) {\n case 'nanoHide':\n this._offset = 0;\n this.cacheOffset = this.offset;\n this.offset = 0;\n /** trigger moves down, underneath sticker if the main sticker hides */\n if (!this.isStuck) this.moveTrigger(false);\n\n /** If it's an actual 'position: sticky' element, we need to give the sticker an appropriate height.\n * This minimises content jumping around as items are added */\n if (!this.isRootSticker && this.quietModeIsOn) {\n requestAnimationFrame(() => {\n this.stickToEle.style.minHeight =\n this.stickToEleInitSize.height +\n (this.host.scrollHeight +\n (typeof this.cacheOffset === 'object'\n ? this.cacheOffset.v\n : this.cacheOffset)) +\n 'px';\n this.stickToEle.setTriggerPos(this.stickToEleInitSize.height * -1);\n });\n }\n break;\n case 'nanoShow':\n this._offset = this.stickToEleInitSize.height;\n this.offset = this.cacheOffset;\n this.moveTrigger(true);\n\n /** reset master sticker size */\n if (!this.isRootSticker && this.quietModeIsOn) {\n requestAnimationFrame(() => {\n this.stickToEle.style.minHeight = '';\n this.stickToEle.setTriggerPos(0);\n });\n }\n break;\n case 'nanoStuck':\n this.stickToEleInitSize = this.stickToEle.getBoundingClientRect();\n this._offset = this.stickToEleInitSize.height;\n break;\n }\n };\n\n /** Add or removes event listeners / observers on scrolling parent\n * for when the scrolling parent changes, or, this sticker is sticking to another */\n private manageListenersOnParent(\n addEvents: boolean,\n ele?: HTMLElement | Document\n ) {\n const scrollParent = ele || this.scrollParent;\n\n if (!scrollParent) return;\n\n if (!addEvents) {\n try {\n if (this.quietModeIsOn)\n scrollParent.removeEventListener('scroll', this.onScroll);\n scrollParent.removeEventListener('nanoStuck', this.onStickEvent);\n scrollParent.removeEventListener('nanoUnstuck', this.onStickEvent);\n } catch (e) {\n console.error('Events haven`t been added');\n }\n } else {\n scrollParent.addEventListener('nanoStuck', this.onStickEvent);\n scrollParent.addEventListener('nanoUnstuck', this.onStickEvent);\n\n if (this.quietModeIsOn) this.attachScrollListeners();\n }\n this.setupParentResizeListener();\n }\n\n /** Handler applied to scrolling parent. When 'hideOnNewStickers' is true, hide this sticker on subsequent stuck stickers. */\n private onStickEvent = async (\n e: CustomEvent<{ sticker: HTMLNanoStickerElement }>\n ) => {\n const sticker = e.detail ? e.detail.sticker : null;\n if (!sticker || sticker.position !== this.position) return;\n\n const incomingTriggerPos = await sticker.getTriggerPos();\n\n if (\n e.type === 'nanoStuck' &&\n sticker !== this.host &&\n sticker.scrollParent === this.host.scrollParent\n ) {\n this.stickerIndex++;\n\n if (!this.hideOnNewStickers) return;\n\n if (\n (this.positions.includes('top') &&\n this.triggerPos.top < incomingTriggerPos.top) ||\n (this.positions.includes('bottom') &&\n this.triggerPos.top > incomingTriggerPos.top)\n ) {\n this.multiStickerHide = true;\n this.stuckCounter++;\n }\n }\n\n if (\n e.type === 'nanoUnstuck' &&\n sticker !== this.host &&\n sticker.scrollParent === this.host.scrollParent\n ) {\n this.stickerIndex--;\n\n if (!this.hideOnNewStickers) return;\n\n if (\n (this.positions.includes('top') &&\n this.triggerPos.top < incomingTriggerPos.top) ||\n (this.positions.includes('bottom') &&\n this.triggerPos.top > incomingTriggerPos.top)\n ) {\n this.stuckCounter--;\n if (this.stuckCounter < 1) this.multiStickerHide = false;\n }\n }\n };\n\n /** Scroll handler applied to scrolling parent. Only applied when quietmode is on.\n * 'hides' stickers when scrolling over 100px away from trigger and 'shows' when scrolling toward */\n private onScroll = () => {\n const y: number = _getScrollTop(this.scrollParent);\n\n // scrolling up\n if (y < this.scrollPosCache) {\n if (!this.positions.includes('bottom')) this.handleScrollTo();\n else this.handleScrollAway(y);\n }\n\n // scrolling down\n if (y > this.scrollPosCache) {\n if (!this.positions.includes('bottom')) this.handleScrollAway(y);\n else this.handleScrollTo();\n }\n this.scrollPosCache = y;\n };\n\n /** Watch for scroll direction. Only applies when quietmode is on.\n * We need to addjust the position of the trigger when the sticker is hidden */\n private handleScrollTo() {\n this.scrollPosThresholdCache = null;\n if (!this.scrollHide) return;\n\n if (this.scrollingTo !== true) {\n this._offset = this.cacheOffset || this._offset;\n }\n this.scrollingTo = true;\n this.scrollHide = false;\n }\n\n private handleScrollAway(currScroll: number) {\n if (this.scrollHide) return;\n\n if (!this.isStuck) return;\n\n if (this.scrollingTo !== false) {\n this.cacheOffset = this._offset;\n this._offset = 0;\n }\n this.scrollingTo = false;\n\n if (!this.scrollPosThresholdCache)\n this.scrollPosThresholdCache = currScroll;\n else if (\n !this.pauseHide &&\n Math.abs(currScroll - this.scrollPosThresholdCache) > 100\n )\n this.scrollHide = true;\n }\n\n private moveTrigger(toInitial?: boolean) {\n if (\n (this.positions.includes('bottom') && !toInitial) ||\n (!this.positions.includes('bottom') && toInitial)\n ) {\n this.host.parentNode.insertBefore(this.trigger, this.host);\n } else\n this.host.parentNode.insertBefore(this.trigger, this.host.nextSibling);\n }\n\n /**\n * Gets the 'closest' scrolling parent\n * @returns either an element with `overflow: scroll | auto` or the parent Document\n */\n private getScrollParent(): HTMLElement | Document {\n const regex = /(auto|scroll)/;\n const parents = (_node: Node, ps: Node[]) => {\n if (_node.parentNode === null) {\n return ps;\n }\n return parents(_node.parentNode, ps.concat([_node]));\n };\n const style = (_node, prop) =>\n getComputedStyle(_node, null).getPropertyValue(prop);\n const overflow = (_node) =>\n style(_node, 'overflow') +\n style(_node, 'overflow-y') +\n style(_node, 'overflow-x');\n const scroll = (_node) => regex.test(overflow(_node));\n const docHeight = document.documentElement.getBoundingClientRect().height;\n\n const scrollParent = (_node: HTMLElement) => {\n if (!(_node instanceof HTMLElement)) return;\n\n const ps = parents(_node, []);\n return (\n ps.find(\n (ele) =>\n scroll(ele) && ele.getBoundingClientRect().height !== docHeight\n ) || document\n );\n };\n\n return scrollParent(this.host);\n }\n\n private shouldStick(data?: IntersectionObserverEntry) {\n let scrollAmt: number;\n\n if (this.positions.includes('top')) {\n if (!this.isRootSticker)\n scrollAmt = _getOffset(this.trigger, this.scrollParent).top;\n else scrollAmt = this.trigger.getBoundingClientRect().top;\n this.isStuck = scrollAmt < -1;\n } else if (this.positions.includes('bottom')) {\n scrollAmt = this.trigger.getBoundingClientRect().top;\n const parentBounding =\n data && data.rootBounds\n ? data.rootBounds\n : (this.scrollParent instanceof Document\n ? document.documentElement\n : this.scrollParent\n ).getBoundingClientRect();\n this.isStuck = scrollAmt > parentBounding.height + parentBounding.top;\n }\n }\n\n private bootstrapGurantor() {\n this.hasBootstrapped = true;\n\n this.scrollParent = this.scrollParent || this.getScrollParent();\n this.isRootSticker = this.scrollParent instanceof Document;\n\n this.trigger = this.trigger || document.createElement('div');\n this.trigger.classList.add('sticker-trigger');\n\n this.positionChange();\n this.moveTrigger(true);\n this.quietModeChange();\n\n this.listenForScrollParent = true;\n this.handleParentEvents(true);\n\n this.stickerIndex = Array.from(\n this.scrollParent.querySelectorAll('nano-sticker')\n )\n .filter(\n (sticker: HTMLNanoStickerElement) => sticker.position === this.position\n )\n .findIndex((sticker) => sticker === this.host);\n\n this.setOffset();\n this.stickerResizeListener();\n this.setupParentResizeListener();\n\n // bit of a hack ... add default 'order'. Required for 'stickTo' elements.\n this.slottedContent = Array.from(this.host.children);\n this.slottedContent.forEach((child: HTMLElement) => {\n child.style.order = this.stickerIndex + '';\n });\n\n this.updateTriggerOffset();\n this.stickToChange();\n this.setupIO();\n this.onStickToDisplayEvent = debounce(this.onStickToDisplayEvent, 50);\n }\n\n // Stencil metthods\n\n connectedCallback() {\n this.isRtl =\n this.host.dir === 'rtl' ||\n (this.host.ownerDocument as Document).dir === 'rtl';\n\n // this is all horrible.... shrug\n document.documentElement.addEventListener('nanoComponentsReady', () => {\n setTimeout((_) => this.bootstrapGurantor(), 200);\n });\n setTimeout((_) => {\n if (!this.hasBootstrapped) this.bootstrapGurantor();\n }, 1000);\n }\n\n disconnectedCallback() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n\n if (this.parentSizeObserver) {\n this.parentSizeObserver.disconnect();\n this.parentSizeObserver = undefined;\n }\n\n this.scrollParent = null;\n this.hasBootstrapped = false;\n }\n\n render() {\n return (\n <Host\n sticky={!this.isRootSticker && !this.stickToEle && this.isSticky}\n hide={this.hide && this.isStuck}\n siblings={this.stuckCounter}\n index={this.stickerIndex}\n stuck={this.isStuck && this.isSticky}\n placed-bottom={this.positions.includes('bottom')}\n placed-top={this.positions.includes('top')}\n placed-end={this.positions.includes('end')}\n placed-start={this.positions.includes('start')}\n >\n <div\n class={{\n sticker: true,\n sticky: this.isRootSticker && this.isSticky,\n stuck: this.isStuck && this.isRootSticker && this.isSticky,\n hide: this.isRootSticker && this.hide && this.isStuck,\n }}\n ref={(div) => (this.sticker = div)}\n >\n <div class=\"sticker-content\" ref={(div) => (this.content = div)}>\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{r as i,c as a,h as o,a as t,g as e}from"./p-1fe12320.js";import{M as s}from"./p-cb79d1ec.js";import{l as n,u as r}from"./p-885b6950.js";import{h as l}from"./p-b933f3c8.js";import{C as d}from"./p-e3860f00.js";import"./p-9a385481.js";import"./p-845ae77e.js";import"./p-9746b0a5.js";import"./p-69a3e911.js";const h=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--content-background:#fafafa;--footer-content:#e4e6e8;--scrim-color:var(--nano-layer-overlay-dark, rgba(74, 74, 74, .5));--box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2));--close-button-color:#b5aea7;--width:60rem;--tint-color:#00607b;--body-padding-v:var(--nano-spacing-large, 20px);--body-padding-h:var(--nano-spacing-large, 20px);--header-padding-v:var(--nano-spacing-medium, 16px);--header-padding-h:var(--nano-spacing-large, 20px);--footer-padding-v:var(--nano-spacing-medium, 16px);--footer-padding-h:var(--nano-spacing-large, 20px)}.dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:fixed;inset:0;z-index:var(--nano-layer-index-modal, 700)}.dialog:not(.dialog--visible){position:absolute;inline-size:1px;block-size:1px;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;pointer-events:none;visibility:hidden}.dialog__panel{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;z-index:2;inline-size:var(--width);max-inline-size:calc(100% - var(--nano-spacing-xlarge, 24px));max-block-size:calc(92% - var(--nano-spacing-xlarge, 24px));background-color:var(--content-background);border-radius:var(--border-radius);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);opacity:0;-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform;transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform}.dialog__panel:focus{outline:none}.dialog--with-ribbon .dialog__panel{-webkit-border-before:5px solid var(--tint-color);border-block-start:5px solid var(--tint-color)}.dialog--open .dialog__panel{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:1;-webkit-transform:none;transform:none}.dialog--nodismiss .dialog__panel{-webkit-animation:cannotClose 0.25s ease-in-out 1;animation:cannotClose 0.25s ease-in-out 1}@-webkit-keyframes cannotClose{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.08);transform:scale(1.08)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes cannotClose{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.08);transform:scale(1.08)}100%{-webkit-transform:scale(1);transform:scale(1)}}.dialog__header{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;min-inline-size:var(--width);inline-size:100%;background-color:var(--content-background);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-transition:var(--nano-transition-fast, 0.1s) box-shadow;transition:var(--nano-transition-fast, 0.1s) box-shadow}.dialog--visible .dialog__header{min-inline-size:auto}[stuck] .dialog__header{-webkit-box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2))}.dialog__title{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-size:var(--nano-fontsize-large, 1.25rem);line-height:1.6;padding-block:var(--header-padding-v);padding-inline:var(--header-padding-h)}.dialog .dialog__close-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:var(--nano-fontsize-xlarge, 1.5rem);padding-block:0;padding-inline:var(--header-padding-h);--color:var(--close-button-color)}.dialog__body{padding-block:0 var(--body-padding-v);padding-inline:var(--body-padding-h)}.dialog:not(.dialog--has-header) .dialog__body{-webkit-padding-before:var(--body-padding-v);padding-block-start:var(--body-padding-v)}.dialog__body ::slotted(*){max-inline-size:100%}.dialog__body-wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;-webkit-overflow-scrolling:touch;border-radius:var(--border-radius)}.dialog:not(.dialog--has-header) .dialog__body-wrap{border-radius:0 0 inherit inherit}.dialog:not(.dialog--has-footer) .dialog__body-wrap{border-radius:inherit inherit 0 0}.dialog__footer{inline-size:100%;padding-block:var(--footer-padding-v);padding-inline:var(--footer-padding-h);background:var(--footer-content);border-radius:0 0 var(--border-radius) var(--border-radius);position:relative;inset-block-start:1px}.dialog--visible .dialog__footer{min-inline-size:auto}.dialog__footer ::slotted(button){-webkit-margin-end:var(--nano-spacing-small, 8px) !important;margin-inline-end:var(--nano-spacing-small, 8px) !important}.dialog:not(.dialog--has-footer) .dialog__footer{display:none}.dialog__close-txt{color:var(--tint-color);border:none;text-decoration:underline;margin:0;text-underline-offset:4px;background-color:transparent;font:inherit;-webkit-box-align:center;cursor:pointer;font-size:var(--nano-fontsize-small, 0.875rem);padding:0.5rem;border-radius:var(--nano-border-radius-small, 2px);-webkit-transition:-webkit-box-shadow 100ms ease-in-out;transition:-webkit-box-shadow 100ms ease-in-out;transition:box-shadow 100ms ease-in-out;transition:box-shadow 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out}.dialog__close-txt:focus{outline:none;-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.dialog__overlay{position:fixed;inset:0;background-color:var(--scrim-color);opacity:0;-webkit-transition:var(--nano-transition-fast, 0.3s) opacity;transition:var(--nano-transition-fast, 0.3s) opacity;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.dialog--open .dialog__overlay{opacity:1}";let c=0;const b=class{constructor(o){i(this,o);this.nanoShow=a(this,"nanoShow",7);this.nanoAfterShow=a(this,"nanoAfterShow",7);this.nanoHide=a(this,"nanoHide",7);this.nanoAfterHide=a(this,"nanoAfterHide",7);this.nanoInitialFocus=a(this,"nanoInitialFocus",7);this.nanoRequestClose=a(this,"nanoRequestClose",7);this.componentId=`dialog-${++c}`;this.willShow=false;this.willHide=false;this.addedTransEnd=false;this.handleKeyDown=i=>{if(i.key==="Escape"){this.requestClose()}};this.requestClose=()=>{const i=this.nanoRequestClose.emit();if(!i.defaultPrevented&&!this.noUserDismiss){this.hide()}else{this.noDismiss=true;setTimeout((i=>this.noDismiss=false),250)}};this.handleTransitionEnd=i=>{if(i.propertyName==="opacity"&&i.composedPath().find((i=>i===this.panel||i===this.overlay))){this.isVisible=this.open;this.willShow=false;this.willHide=false;this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit()}};this.handleSlotChange=()=>{this.hasFooter=l(this.host,"footer")};this.isVisible=false;this.noDismiss=false;this.hasFooter=false;this.showRibbon=true;this.open=false;this.label=undefined;this.noHeader=false;this.noFooter=false;this.noUserDismiss=false;this.storeId=undefined;this.storeMethod="url-hash";this.hoist=false}handleOpenChange(){this.open?this.show():this.hide()}handleHoistChange(){if(!this.hoist||document.body.children[0]===this.host)return;document.body.prepend(this.host)}async show(){if(this.willShow){return}const i=this.nanoShow.emit();if(i.defaultPrevented){this.open=false;return}this.originalTrigger=document.activeElement;this.willShow=true;this.isVisible=true;this.open=true;this.modal.activate();n(this.host);if(this.open){this.host.addEventListener("nanoAfterShow",(()=>{const i=this.nanoInitialFocus.emit();if(!i.defaultPrevented){this.panel.focus({preventScroll:true})}}),{once:true})}}async hide(){if(this.willHide){return}const i=this.nanoHide.emit();if(i.defaultPrevented){this.open=true;return}this.willHide=true;this.open=false;this.modal.deactivate();r(this.host);this.stopVideos();const a=this.originalTrigger;if(a&&typeof a.focus==="function"){setTimeout((()=>a.focus()))}}stopVideos(){const i=Array.from(this.host.querySelectorAll("iframe,video"));i.forEach((i=>{if(i.tagName.toLowerCase()==="video")i.pause();else{const a=i.src;i.src=a}}))}connectedCallback(){this.handleHoistChange();this.modal=new s(this.host);if(this.panel){this.addedTransEnd=true;this.panel.addEventListener("transitionend",this.handleTransitionEnd)}}componentWillLoad(){this.handleSlotChange();if(this.open)this.show();if(this.storeId)d.init(this,["open"],this.storeMethod,this.storeId)}componentDidLoad(){if(!this.addedTransEnd){this.panel.addEventListener("transitionend",this.handleTransitionEnd)}}disconnectedCallback(){if(!this.panel)return;r(this.host);this.addedTransEnd=false;this.panel.removeEventListener("transitionend",this.handleTransitionEnd)}render(){return o(t,{showing:this.isVisible?true:undefined},o("div",{part:"base",class:{dialog:true,"dialog--open":this.open,"dialog--visible":this.isVisible,"dialog--has-footer":!this.noFooter,"dialog--has-header":!this.noHeader,"dialog--nodismiss":this.noDismiss,"dialog--with-ribbon":this.showRibbon},onKeyDown:this.handleKeyDown},o("div",{part:"overlay",class:"dialog__overlay",ref:i=>this.overlay=i,onClick:this.requestClose}),o("div",{ref:i=>this.panel=i,part:"panel",class:"dialog__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:null,"aria-labelledby":!this.noHeader?`${this.componentId}-title`:null,tabIndex:0},o("div",{class:"dialog__body-wrap"},!this.noHeader&&o("nano-sticker",null,o("header",{part:"header",class:"dialog__header"},o("span",{part:"title",class:"dialog__title",id:`${this.componentId}-title`},o("slot",{name:"label"},this.label||String.fromCharCode(65279))),!this.noUserDismiss&&o("nano-icon-button",{exportparts:"base:close-button",class:"dialog__close-icon",label:"close dialog",onClick:this.requestClose,iconName:"light/times"}))),o("div",{part:"body",class:"dialog__body"},o("slot",null)),!this.noFooter&&(this.hasFooter||!this.noUserDismiss)&&o("nano-sticker",{position:"bottom"},o("footer",{part:"footer",class:"dialog__footer"},o("slot",{name:"footer",onSlotchange:this.handleSlotChange}),!this.noUserDismiss&&o("button",{class:"dialog__close-txt",onClick:this.requestClose},"Close")))))))}get host(){return e(this)}static get watchers(){return{open:["handleOpenChange"],hoist:["handleHoistChange"]}}};b.style=h;export{b as nano_dialog};
5
- //# sourceMappingURL=p-b290a970.entry.js.map
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{r as t,c as i,d as e,h as s,a as n,g as o}from"./p-1fe12320.js";import{d as r}from"./p-9746b0a5.js";const a=class{constructor(e){t(this,e);this.nanoResizeStateChange=i(this,"nanoResizeStateChange",7);this.assessChanges=()=>{if(!this.currentWidth&&!this.currentHeight)return;const t={h:new Map,w:new Map};let i=false;Object.keys(this.appliedStates).forEach((e=>{let s;if(e==="h")s=this.currentHeight;else s=this.currentWidth;this.appliedStates[e].forEach(((n,o)=>{if(s>=o&&n.applied===false){n.applied=true;t[e].set(o,n);i=true}else if(s<o&&n.applied===true){n.applied=false;t[e].set(o,n);i=true}}))}));if(i)this.applyChanges(t);else if(!this.classNames.includes("is-ready"))this.classNames=["is-ready"]};this.currentWidth=undefined;this.currentHeight=undefined;this.classNames=[];this.states=undefined}dimensionChanged(){this.assessChanges()}statesChanged(){if(!this.states)return;if(!this.ro)this.attachRO();const t=t=>{const i=t.split(/(\d+)/).filter((t=>t.length));return{bp:parseInt(i[0]),dir:i[1]}};this.appliedStates={h:new Map,w:new Map};this.states.split(",").map((i=>{i=i.trim();if(i.includes(" ")){const[e,...s]=i.split(" ");const{bp:n,dir:o}=t(e);this.appliedStates[o].set(n,{states:s,applied:false})}else{const{bp:e,dir:s}=t(i);this.appliedStates[s].set(e,{applied:false})}}))}applyChanges(t){let i=[...this.classNames];Object.keys(t).forEach((e=>{t[e].forEach((t=>{if(!t.states)return;t.states.map((e=>{if(t.applied)i.push(e);else i=i.filter((t=>t!==e))}))}))}));this.classNames=["is-ready",...i];this.nanoResizeStateChange.emit(this.toSimpleObj(t))}toSimpleObj(t){const i={};Object.keys(t).forEach((e=>{t[e].forEach(((t,s)=>{i[s+e]=t.applied}))}));return i}attachRO(){this.ro=new ResizeObserver((t=>{for(const i of t){this.currentWidth=i.contentRect.width;this.currentHeight=i.contentRect.height}}));this.ro.observe(this.host)}connectedCallback(){this.assessChanges=r(this.assessChanges,50)}componentDidLoad(){if(!this.states)return;if(!this.currentWidth||!this.currentHeight){e((()=>{const{width:t,height:i}=this.host.getBoundingClientRect();this.currentWidth=t;this.currentHeight=i}))}this.statesChanged()}disconnectedCallback(){if(this.ro)this.ro.disconnect()}render(){return s(n,{class:{[this.classNames.join(" ")]:true}},s("slot",null))}get host(){return o(this)}static get watchers(){return{currentHeight:["dimensionChanged"],currentWidth:["dimensionChanged"],states:["statesChanged"]}}};a.style=":host { display: inline-block } div { height: 100%; }";const h=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--base-color-rgb:var(--nano-skeleton-rgb, 228, 230, 232);--color:var(--nano-skeleton-color, rgba(var(--base-color-rgb), 1));--tint:var(--nano-skeleton-tint, rgba(var(--base-color-rgb), 0.5));display:block;position:relative;border-radius:0.25rem;min-block-size:1em;line-height:inherit}.skeleton{display:-webkit-box;display:-ms-flexbox;display:flex;min-inline-size:100%;min-block-size:100%;border-radius:inherit;line-height:inherit}.skeleton__indicator{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;background:var(--color);border-radius:inherit;line-height:inherit}.skeleton.animate .skeleton__indicator{background:-webkit-gradient(linear, right top, left top, from(var(--tint)), color-stop(var(--color)), color-stop(var(--color)), to(var(--tint)));background:linear-gradient(270deg, var(--tint), var(--color), var(--color), var(--tint));background-size:400% 100%;-webkit-animation:loader 6s ease-in-out infinite;animation:loader 6s ease-in-out infinite}@-webkit-keyframes loader{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes loader{0%{background-position:200% 0}to{background-position:-200% 0}}";const l=class{constructor(i){t(this,i);this.animated=true}render(){return s("div",{class:{skeleton:true,animate:this.animated}},s("div",{class:"skeleton__indicator"}," "))}};l.style=h;export{a as nano_resize_observe,l as nano_skeleton};
5
- //# sourceMappingURL=p-b7901427.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/resize-observe/resize-observe.tsx","src/components/skeleton/skeleton.scss?tag=nano-skeleton&encapsulation=shadow","src/components/skeleton/skeleton.tsx"],"names":["ResizeObserve","this","assessChanges","currentWidth","currentHeight","changedStates","h","Map","w","hasChanged","Object","keys","appliedStates","forEach","dimType","dim","state","bp","applied","set","applyChanges","classNames","includes","[object Object]","states","ro","attachRO","toBpDir","bpDir","bpDirSpl","split","filter","bs","length","parseInt","dir","map","st","trim","key","classes","changes","push","cl","nanoResizeStateChange","emit","toSimpleObj","stateMaps","retObj","ResizeObserver","entries","entry","contentRect","width","height","observe","host","debounce","readTask","getBoundingClientRect","statesChanged","disconnect","Host","class","join","skeletonCss","Skeleton","skeleton","animate","animated"],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Prop,\n Element,\n Host,\n State,\n Watch,\n ComponentInterface,\n Event,\n EventEmitter,\n readTask,\n} from '@stencil/core';\nimport { debounce } from '../../utils/throttle';\nimport type { ResizeStateChangeEventDetail } from '../../interface';\n\ntype ResizeObserverState = { states?: string[]; applied?: boolean };\ninterface StateMaps {\n h: Map<number, ResizeObserverState>;\n w: Map<number, ResizeObserverState>;\n}\n\n/**\n * A Resize-Observer utility component.\n * Takes a string list of sizes and optional class-names. Adds class-names and fires `nanoResizeStateChange` events when the component reaches those sizes.\n * @slot - Main slot for any content.\n */\n@Component({\n tag: 'nano-resize-observe',\n shadow: true,\n styles: `:host { display: inline-block } div { height: 100%; }`,\n})\nexport class ResizeObserve implements ComponentInterface {\n private ro: ResizeObserver;\n private appliedStates: StateMaps;\n\n @Element() host: HTMLNanoResizeObserveElement;\n @State() currentWidth: number;\n @State() currentHeight: number;\n @State() classNames: string[] = [];\n\n /** string list of sizes and optional class-names. Adds class-names and fires nanoResizeStateChange events. Upon hitting breakpoints.\n * Format: `states=\"800w, 300h class1 class2\"` */\n @Prop() states: string;\n\n /** A resize break point is switched on or off */\n @Event() nanoResizeStateChange!: EventEmitter<ResizeStateChangeEventDetail>;\n\n @Watch('currentHeight')\n @Watch('currentWidth')\n dimensionChanged() {\n this.assessChanges();\n }\n\n @Watch('states')\n statesChanged() {\n if (!this.states) return;\n if (!this.ro) this.attachRO();\n\n const toBpDir = (bpDir: string) => {\n const bpDirSpl = bpDir.split(/(\\d+)/).filter((bs) => bs.length);\n return { bp: parseInt(bpDirSpl[0]), dir: bpDirSpl[1] };\n };\n this.appliedStates = { h: new Map(), w: new Map() };\n\n // parse state string\n this.states.split(',').map((st) => {\n st = st.trim();\n if (st.includes(' ')) {\n const [key, ...classes] = st.split(' ');\n const { bp, dir } = toBpDir(key);\n this.appliedStates[dir as keyof StateMaps].set(bp, {\n states: classes,\n applied: false,\n });\n } else {\n const { bp, dir } = toBpDir(st);\n this.appliedStates[dir as keyof StateMaps].set(bp, { applied: false });\n }\n });\n }\n\n private assessChanges = () => {\n if (!this.currentWidth && !this.currentHeight) return;\n const changedStates: StateMaps = { h: new Map(), w: new Map() };\n let hasChanged = false;\n\n Object.keys(this.appliedStates).forEach((dimType) => {\n let dim: number;\n if (dimType === 'h') dim = this.currentHeight;\n else dim = this.currentWidth;\n\n this.appliedStates[dimType].forEach(\n (state: ResizeObserverState, bp: number) => {\n if (dim >= bp && state.applied === false) {\n state.applied = true;\n changedStates[dimType].set(bp, state);\n hasChanged = true;\n } else if (dim < bp && state.applied === true) {\n state.applied = false;\n changedStates[dimType].set(bp, state);\n hasChanged = true;\n }\n }\n );\n });\n if (hasChanged) this.applyChanges(changedStates);\n else if (!this.classNames.includes('is-ready'))\n this.classNames = ['is-ready'];\n };\n\n private applyChanges(changes: StateMaps) {\n let classNames = [...this.classNames];\n Object.keys(changes).forEach((dimType: keyof StateMaps) => {\n changes[dimType].forEach((state) => {\n if (!state.states) return;\n state.states.map((st) => {\n if (state.applied) classNames.push(st);\n else classNames = classNames.filter((cl) => cl !== st);\n });\n });\n });\n this.classNames = ['is-ready', ...classNames];\n this.nanoResizeStateChange.emit(this.toSimpleObj(changes));\n }\n\n private toSimpleObj(stateMaps: StateMaps) {\n const retObj = {};\n Object.keys(stateMaps).forEach((dimType: keyof StateMaps) => {\n stateMaps[dimType].forEach((state: ResizeObserverState, bp: number) => {\n retObj[bp + dimType] = state.applied;\n });\n });\n return retObj;\n }\n\n private attachRO() {\n this.ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n this.currentWidth = entry.contentRect.width;\n this.currentHeight = entry.contentRect.height;\n }\n });\n this.ro.observe(this.host);\n }\n\n connectedCallback() {\n this.assessChanges = debounce(this.assessChanges, 50);\n }\n\n componentDidLoad() {\n if (!this.states) return;\n if (!this.currentWidth || !this.currentHeight) {\n readTask(() => {\n const { width, height } = this.host.getBoundingClientRect();\n this.currentWidth = width;\n this.currentHeight = height;\n });\n }\n this.statesChanged();\n }\n\n disconnectedCallback() {\n if (this.ro) this.ro.disconnect();\n }\n\n render() {\n return (\n <Host\n class={{\n [this.classNames.join(' ')]: true,\n }}\n >\n <slot />\n </Host>\n );\n }\n}\n","@import '../../global/style/nano-theme/components';\n\n:host {\n /**\n * @prop --base-color-rgb: default #{$skeleton-color-rgb};\n * @prop --color: default var(--nano-skeleton-color, rgba(var(--base-color-rgb), 1));\n * @prop --tint: default var(--nano-skeleton-tint, rgba(var(--base-color-rgb), .3));\n */\n\n --base-color-rgb: #{$skeleton-color-rgb};\n --color: var(--nano-skeleton-color, rgba(var(--base-color-rgb), 1));\n --tint: var(--nano-skeleton-tint, rgba(var(--base-color-rgb), 0.5));\n\n display: block;\n position: relative;\n border-radius: 0.25rem;\n min-block-size: 1em;\n line-height: inherit;\n}\n\n.skeleton {\n display: flex;\n min-inline-size: 100%;\n min-block-size: 100%;\n border-radius: inherit;\n line-height: inherit;\n}\n\n.skeleton__indicator {\n flex: 1 1 auto;\n background: var(--color);\n border-radius: inherit;\n line-height: inherit;\n}\n\n.skeleton.animate .skeleton__indicator {\n background:\n linear-gradient(\n 270deg,\n var(--tint),\n var(--color),\n var(--color),\n var(--tint)\n );\n background-size: 400% 100%;\n animation: loader 6s ease-in-out infinite;\n}\n\n@keyframes loader {\n 0% {\n background-position: 200% 0;\n }\n\n to {\n background-position: -200% 0;\n }\n}\n","import { Component, Prop, h, ComponentInterface } from '@stencil/core';\n\n/**\n * Skeletons are used to show where content will eventually be drawn.\n * Simple containers for scaffolding layouts that mimic what users will see when content has finished loading.\n * Prevents large areas of empty space during asynchronous operations.\n */\n@Component({\n tag: 'nano-skeleton',\n styleUrl: 'skeleton.scss',\n shadow: true,\n})\nexport class Skeleton implements ComponentInterface {\n /** When `true`, the skeleton will animate. */\n @Prop() animated = true;\n\n render() {\n return (\n <div\n class={{\n skeleton: true,\n animate: this.animated,\n }}\n >\n <div class=\"skeleton__indicator\">&nbsp;</div>\n </div>\n );\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{j as t,h as n,F as e,g as i,e as o,r as s,c as r,d as a,a as l}from"./p-1fe12320.js";import{a as c}from"./p-ee045579.js";import{d as h}from"./p-9746b0a5.js";import{c as d}from"./p-651b3264.js";const b="nano-tbl";const p=(t,n)=>{const e=globalThis[n];return e!=null&&t instanceof e};const f=t=>{if(t!=null){if(p(t,"ArrayBuffer")||p(t,"MessagePort")||p(t,"ImageBitmap")||p(t,"OffscreenCanvas")){return[t]}if(typeof t==="object"){if(t.constructor===Object){t=Object.values(t)}if(Array.isArray(t)){return t.flatMap(f)}return f(t.buffer)}}return[]};let u=0;let _=0;const g=new Map;const w=new Map;const m=(n,e,i)=>{const o=new Worker(n,{name:e});o.addEventListener("message",(({data:n})=>{if(n){const e=n[0];const o=n[1];const s=n[2];if(e===i){const e=n[3];const[i,r,a]=g.get(o);g.delete(o);if(e){const n=e.isError?Object.assign(new Error(e.value.message),e.value):e.value;t(n);r(n)}else{if(a){a.forEach((t=>w.delete(t)))}i(s)}}else if(e===i+".cb"){try{w.get(o)(...s)}catch(n){t(n)}}}}));return o};const x=(t,n,e)=>(...i)=>new Promise(((o,s)=>{let r=u++;let a=0;let l=i.length;let c=[o,s];g.set(r,c);for(;a<l;a++){if(typeof i[a]==="function"){const t=_++;w.set(t,i[a]);i[a]=[n+".cb",t];(c[2]=c[2]||[]).push(t)}}const h=t=>t.postMessage([n,r,e,i],f(i));if(t.then){t.then(h)}else{h(t)}}));const y=import("./p-7ade1695.js").then((t=>t.worker));const k=x(y,"stencil.table.worker","createWorkerStore");const v=x(y,"stencil.table.worker","syncConfigToWorker");const $=x(y,"stencil.table.worker","syncDataToWorker");const C=x(y,"stencil.table.worker","workerFilter");const z=x(y,"stencil.table.worker","workerSearch");const S=x(y,"stencil.table.worker","workerSort");function I(t){const n=JSON.parse(JSON.stringify(t));t.forEach((t=>{if(!!t.sortCompareFn){const e=n.find((n=>n.prop===t.prop));e.sortCompareFn=t.sortCompareFn.toString()}}));return n}const R=new WeakMap;async function T(t,n,e){const i={data:d({rows:[]}),config:d({columns:n}),general:d({workerId:null,scrollParent:e,host:t})};const o=await k(i.data.state.rows,I(i.config.state.columns));i.general.state.workerId=o;R.set(t,i);i.data.use({reset:()=>{if(i.general.state.workerId)$(i.general.state.workerId,null)},dispose:()=>{if(i.general.state.workerId)$(i.general.state.workerId,null)}});i.config.use({reset:()=>{if(i.general.state.workerId)v(i.general.state.workerId,null)},dispose:()=>{if(i.general.state.workerId)v(i.general.state.workerId,null)}});return i}function j(t){return R.get(t)}function O(t,n){const e=R.get(t);if(!e)return;n=n.map(((t,n)=>({...t,__index:n,__uuid:c(Object.values(t).join())})));e.data.state.rows=n;if(e.general.state.workerId)return $(e.general.state.workerId,n)}function M(t,n){const e=R.get(t);if(!e)return;if(e.general.state.workerId)v(e.general.state.workerId,I(n));e.config.state.columns=n}async function F(t,n){const e=R.get(t);if(!e||!e.general.state.workerId)return;try{e.data.state.rows=await z(e.general.state.workerId,n)}catch(t){console.log(t)}}async function A(t,n){const e=R.get(t);if(!e||!e.general.state.workerId)return;try{e.data.state.rows=await C(e.general.state.workerId,n)}catch(t){console.log(t)}}async function B(t,n,e){const i=R.get(t);if(!i||!i.general.state.workerId)return;try{i.data.state.rows=await S(i.general.state.workerId,n,e)}catch(t){console.log(t)}}function P(t,n){const e=N();const i=e.config.state.columns;const o=e.data.state.rows;const s=i[n];const r=s?.prop;const a=o[t];const l=a[i[n].prop];return{prop:r,cellModel:l,column:s,rowIndex:t,rowModel:a}}function W(t){const n=N();const e=n.data.state.rows;const i=e[t];return{row:i,rowIndex:t}}function q(t,n){if(!n)return t;const e={...n,...t};if(n.class){if(typeof n.class==="object"&&typeof e.class==="object"){e.class={...n.class,...e.class}}else if(typeof n.class==="string"&&typeof e.class==="object"){e.class[n.class]=true}else if(typeof e.class==="string"){e.class+=" "+n.class}}if(n.style){e.style={...n.style,...e.style}}return e}function N(){return j(i(o()))}function D(t,n,e){const i={...e};const o=N().config.state.columns[n]?.cellProperties;if(!o)return i;const s=P(t,n);const r=o(s);if(!r)return i;return q(i,r)}function J(t,i){const o=N();const s=o.config.state.columns;const r=s[i]?.cellTemplate;const a=P(t,i);return r?r(n,a):n(e,null,a.cellModel)}function L(t){const i=t?.colTemplate;return i?i(n,t):n(e,null,t.title)}function E(t,n,e=false){const i={[`${b}__${t}`]:true,[`${b}__pin`]:!!n,[`${b}__pin--top`]:n==="top",[`${b}__pin--bottom`]:n==="bottom"};if(e){let t="";Object.entries(i).forEach((([n,e])=>{if(e)t+=n+" "}));return t}return i}const H=new WeakMap;const U=new WeakMap;function G(t,n,e){if(H.get(t))return;const i=N();const o=i.general.state.scrollParent;const s=i.general.state.host;const r=new IntersectionObserver((([t])=>{const i={};if(n==="start"){i.start=t.boundingClientRect.x-(s.getBoundingClientRect().x+o.scrollLeft)<0&&!t.isIntersecting}if(n==="end"){i.end=t.boundingClientRect.right>t.boundingClientRect.width&&!t.isIntersecting}e(i)}),{threshold:[1],rootMargin:"1px 0px 1px 0px",root:o===document.scrollingElement?null:o});H.set(t,r);requestAnimationFrame((()=>r.observe(t)))}function K(t,n,e){if(U.get(t))return;const i=N();const o=i.general.state.scrollParent;const s=i.general.state.host;const r=new IntersectionObserver((([t])=>{const i={};if(n==="top"){i.top=t.boundingClientRect.y-(s.getBoundingClientRect().y+o.scrollTop)<0&&!t.isIntersecting}if(n==="bottom")i.bottom=t.boundingClientRect.height>t.intersectionRect.height&&!t.isIntersecting;e(i)}),{threshold:[.99],rootMargin:"0px 100px 0px 100px",root:o===document.scrollingElement?null:o});U.set(t,r);requestAnimationFrame((()=>r.observe(t)))}const Q=({rowRenderer:t,rowIndex:e,row:i},o)=>{let s={};if(!i){const t=W(e);i=t.row}if(t?.rowProperties){s=t.rowProperties({row:i,rowIndex:e})||s}let r;if(t?.pinned&&typeof t.pinned==="function"){r=t.pinned()}const a={class:E("tr",r)};const l=s?q(a,s):a;return n("tr",{...l,key:i.__uuid},o)};const V=({rowRenderer:t,onColumnPinned:e},i,o)=>{let s={};if(t.rowProperties){s=t.rowProperties()||{}}const r=t.pinned||null;const a={class:E("tr",null)};const l=s?q(a,s):a;const c=t?.template;if(c){let t=c(n,{renderedRow:n("tr",{...l},i)});if(Array.isArray(t)){t=o.map(t,(t=>{if(t.vtag==="tr"){t.vattrs=q({class:E("tr",null,true)},t.vattrs);if(!!t.vchildren){t.vchildren=o.map(t.vchildren,(t=>{if(["td","th"].includes(t.vtag.toString())){t.vattrs=q({class:E(t.vtag.toString(),r,true),ref:t=>{K(t,r,e)}},t.vattrs)}return t}))}}return t}))}return t}return n("tr",{...l},i)};const X=({column:t,headRenderer:i,onColumnOrderClick:o,onColumnPinned:s})=>{function r(n){let e;switch(t.order){case"asc":e="desc";break;case"desc":e=null;break;default:e="asc"}o(e,t.prop,n.target.closest("th"))}let a={};if(t.columnProperties){a=t.columnProperties(t)||a}const l={class:{...E("th",i?.pinned),[`${b}__pin--start`]:t.pinned==="start",[`${b}__pin--end`]:t.pinned==="end",[`${b}__ordered`]:!!t.order,[`${b}__filtered`]:!!t.filter}};let c=a?q(l,a):l;const h=L(t);if(!h)return n(e,null);c=Number(c.colspan)>1?{...c,scope:"colgroup"}:{...c,scope:"col"};if(t.sortable!==false){return n("th",{...c,"aria-sort":t.order?t.order==="asc"?"ascending":"descending":"none",ref:n=>{if(["end","start"].includes(t.pinned))G(n,t.pinned,s);if(["top","bottom"].includes(i.pinned))K(n,i.pinned,s)}},n("button",{class:{[`${b}__order-btn`]:true,[`${b}__cell-content`]:true},onClick:r},L(t),!!t.filter&&n("nano-icon",{name:"light/filter"}),!!t.order&&(t.order==="desc"?n("nano-icon",{name:"solid/long-arrow-down"}):n("nano-icon",{name:"solid/long-arrow-up"})),n("div",{class:`${b}__status-icons`},n("nano-icon",{name:"light/chevron-down"}))))}return n("th",{...c,ref:n=>{if(["end","start"].includes(t.pinned))G(n,t.pinned,s);if(["top","bottom"].includes(i.pinned))K(n,i.pinned,s)}},n("div",{class:`${b}__cell-content`},L(t),!!t.filter&&n("nano-icon",{name:"light/bars-filter"})))};const Y=({rowIndex:t,colIndex:i,nestedContent:o})=>{const s=o||J(t,i);if(!s)return n(e,null);const r=N();const a=r.config.state.columns[i];let l="td";let c=D(t,i,{class:{[`${b}__td`]:true,[`${b}__ordered`]:!!a.order,[`${b}__pin`]:!!a.pinned,[`${b}__pin--start`]:a.pinned==="start",[`${b}__pin--end`]:a.pinned==="end"}});if(a.rowHeader){c=Number(c.rowspan)>1?{...c,scope:"rowgroup"}:{...c,scope:"row"};l="th"}return n(l,{...c},n("div",{class:`${b}__cell-content`},s))};const Z=(()=>{let t;let n;let e;let i;const o=60;const s=()=>{t=null;i=0};s();return()=>{n=window.scrollY;if(t!=null)i=n-t;t=n;window.clearTimeout(e);e=window.setTimeout(s,o);return i}})();function tt(t){let n=getComputedStyle(t);const e=n.position==="absolute";const i=/(auto|scroll)/;if(n.position==="fixed")return document.documentElement;for(let o=t;o=o.parentElement;){n=getComputedStyle(o);if(e&&n.position==="static"){continue}if(i.test(n.overflow+n.overflowY+n.overflowX))return o}return document.documentElement}function nt(t,n=100){const e=t.getBoundingClientRect();const i=window.innerHeight||document.documentElement.clientHeight;if(!e.bottom&&!e.top&&!e.left&&!e.right&&!e.height&&!e.width&&!e.x&&!e.y)return false;return!(Math.floor(100-(e.top>=0?0:e.top)/+-e.height*100)<n||Math.floor(100-(e.bottom-i)/e.height*100)<n)}const et=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}@charset "UTF-8";nano-table{display:table;width:100%;--max-col-width:200px;--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--border-color:var(--nano-color-palegrey, #b5aea7);--border-style:1px solid var(--border-color);--border-tint-color:var(--nano-color-blue, #90c6e7);--border-tint-style:2px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:var(--cell-bg-rgb);--foot-bg-rgb:var(--cell-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding:0.5rem 0.625rem 0.4125rem;--th-padding:0.875rem 0.625rem 0.6875rem;--head-th-padding:var(--th-padding);--foot-th-padding:var(--td-padding);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;border-collapse:separate;background:rgb(var(--cell-bg-rgb));-webkit-border-end:1px solid transparent;border-inline-end:1px solid transparent}.nano-tbl__top-anchor{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__ordered{background-color:var(--ordered-bg);-webkit-border-start:var(--border-style);border-inline-start:var(--border-style);-webkit-border-end:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.nano-tbl__status-icons{margin-inline:auto 10px;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;-webkit-transition:scale 0.25s;transition:scale 0.25s;scale:0;width:100%;height:0}.nano-tbl__progress-bar--show{scale:1;height:auto}.nano-tbl__caption--hide{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);text-align:start;-webkit-border-after:var(--border-style);border-block-end:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}@media (min-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--bookend-col-padding) !important;padding-inline-start:var(--bookend-col-padding) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--bookend-col-padding) !important;padding-inline-end:var(--bookend-col-padding) !important}}thead .nano-tbl__td,thead .nano-tbl__th{font-weight:800;background:rgba(var(--head-bg-rgb), 90%)}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding:var(--head-th-padding)}tfoot .nano-tbl__td,tfoot .nano-tbl__th{font-weight:800;-webkit-border-after:none;border-block-end:none;background:rgba(var(--foot-bg-rgb), 90%)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding:var(--foot-th-padding)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgba(var(--ordered-bg-rgb), 0.8) !important}.nano-tbl__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:var(--td-padding)}.nano-tbl tbody{will-change:scroll-position;visibility:visible}.nano-tbl tbody.nano-tbl__inactive{visibility:hidden}.nano-tbl th[scope=row]{font-weight:800;max-width:65vw;margin:0}.nano-tbl__pin{position:sticky;z-index:1}.nano-tbl__pin--start{inset-inline:-1px auto;-webkit-transition:max-width 0.25s;transition:max-width 0.25s}.nano-tbl__pin--start::after{content:"";position:absolute;inset:0;-webkit-box-shadow:5px 0 4px 0 rgba(0, 0, 0, 0.2);box-shadow:5px 0 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2}@media (max-width: 576px){.nano-tbl__pinned--start .nano-tbl__pin--start{max-width:25vw !important}}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{inset-inline:auto -1px;max-width:min(50vw, 200px);}.nano-tbl__pin--end::after{content:"";position:absolute;inset:0;-webkit-box-shadow:-5px 0 4px 0 rgba(0, 0, 0, 0.2);box-shadow:-5px 0 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--end .nano-tbl__pin--end{z-index:3}.nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}@media (max-width: 576px){.nano-tbl__pin--start~.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start~.nano-tbl__pin--end::after{display:none}}.nano-tbl__pin--top{inset-block:-1px auto}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:4}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5;-webkit-border-before:var(--border-tint-style);border-block-start:var(--border-tint-style)}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th,.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;-webkit-transition:scale 0.25s;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:-1}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}';let it=0;const ot=class{constructor(t){s(this,t);this.nanoTblBlockRendered=r(this,"nanoTblBlockRendered",7);this.nanoTblReady=r(this,"nanoTblReady",7);this.nanoTblBeforeSort=r(this,"nanoTblBeforeSort",7);this.nanoTblAfterSort=r(this,"nanoTblAfterSort",7);this.nanoTblBeforeFilter=r(this,"nanoTblBeforeFilter",7);this.nanoTblAfterFilter=r(this,"nanoTblAfterFilter",7);this.nanoTblBeforeSearch=r(this,"nanoTblBeforeSearch",7);this.nanoTblAfterSearch=r(this,"nanoTblAfterSearch",7);this.debounceSetLoading=t=>{this._loading=t};this.renderId="tbl-"+it++;this.filters=[];this.currentFilters="";this.currentSort="";this.blockIos=new WeakMap;this.blockHeights=[];this.unitHeight=0;this.ignoreIO=true;this._isReady=false;this.sortStart=async(t,n,e)=>{if(this.currentSort===t+":"+n)return;this.loading=true;const i=this.nanoTblBeforeSort.emit({column:n,order:t});if(i.defaultPrevented)return;this.currentSort=t+":"+n;this.scrollToTop(e);if(this.customSortFn){try{await this.customSortFn(n,t);this.sortComplete(t,n)}catch(t){console.warn("custom sort failed",t)}return}try{await B(this.host,n,t);this.sortComplete(t,n)}catch(t){console.warn("sort failed",t);this.currentSort=""}finally{this.loading=false}};this.setupBlockIO=(t,n)=>{if(!t||this.blockIos.has(t))return;const e=new IntersectionObserver((([e])=>{if(this.ignoreIO)return;if(e.isIntersecting){a((()=>{if(this.scrollSpeed<100||nt(t,.01)){this.activeBlocks=[n,n+1,Math.max(0,n-1)];this.nanoTblBlockRendered.emit({block:n,totalBlocks:this.blockElements.length});requestAnimationFrame((()=>this.setBlockHeight()))}}))}}),{threshold:[0],root:this.scrollParent===document.scrollingElement?null:this.scrollParent});e.observe(t);this.blockIos.set(t,e)};this.handleColumnPinned=t=>{Object.entries(t).forEach((([t,n])=>{this.tableEle.classList.toggle(`${b}__pinned--${t}`,n)}))};this.type="table";this.caption=undefined;this.showCaption=false;this._loading=true;this.placeholderSize=5;this.rows=undefined;this.columns=[];this.headRender={pinned:"top"};this.rowRender=undefined;this.footRender={pinned:"bottom"};this.showFooter=false;this.perBlock=60;this.searchTerm=undefined;this.customFilterFn=undefined;this.customSortFn=undefined;this.blocks=[];this.activeBlocks=[0,1,2];this.measureHeight=0;this.debounceSetLoading=h(this.debounceSetLoading.bind(this),50)}get loading(){return this._loading}set loading(t){this.debounceSetLoading(t)}handleRowsChange(){if(!this.rows)return;this.loading=true;Promise.resolve(this.rows).then((async t=>{await O(this.host,t);if(!this.isReady){await this.columnInit();this.setInitialBlockDimension()}this.loading=false}))}handleColsChange(){M(this.host,this.columns);if(this.isReady)this.columnInit()}get blocksLength(){return this.blocks.length}handleSearchTermChange(){this.searchStart()}async resetSorting(){const t=this.columns.find((t=>!!t.order));if(!t)return;return this.sortStart(null,t.prop)}async addSort(t,n){const e=this.columns.find((n=>n.prop===t));if(!e)throw"Cannot find column with "+t;return this.sortStart(n,e.prop)}async resetFilters(){this.filters=[];return this.filterStart()}async addFilters(t,n=true){if(!n)this.filters=[];return this.filterStart(t,n)}set measureEle(t){if(!t)return;this.measureHeight=t.getBoundingClientRect().height;this.unitHeight=t.querySelector("tr")?.getBoundingClientRect().height||this.unitHeight}get isReady(){return this._isReady}set isReady(t){if(t===this._isReady)return;this._isReady=t;if(this.isReady)requestAnimationFrame((()=>this.handleReady()))}scrollListener(){const t=Z();this.scrollSpeed=t<0?t*-1:t}handleReady(){const t=window.location.hash;if(t.length>1){const n=document.querySelector(t);if(n){n.scrollIntoView()}}this.nanoTblReady.emit()}sortComplete(t,n){this.columns=this.columns.map((e=>{if(e.prop===n)return{...e,order:t};return{...e,order:null}}));this.nanoTblAfterSort.emit({column:n,order:t})}async searchStart(){this.loading=true;const t=this.nanoTblBeforeSearch.emit({term:this.searchTerm});if(t.defaultPrevented)return;this.scrollToTop();try{await F(this.host,this.searchTerm);this.nanoTblAfterSearch.emit({term:this.searchTerm})}catch(t){console.warn("search failed",t)}finally{this.loading=false}}async filterStart(t,n=true){if(t){if(n){this.filters=[...this.filters.filter((n=>!t.find((t=>t.prop===n.prop)))),...t]}else{this.filters=t}}if(this.currentFilters===JSON.stringify(this.filters))return;this.loading=true;const e=this.nanoTblBeforeFilter.emit({filters:this.filters});if(e.defaultPrevented)return;this.currentFilters=JSON.stringify(this.filters);this.scrollToTop();if(this.customFilterFn){try{await this.customFilterFn(this.filters);this.filterComplete()}catch(t){console.warn("custom filter failed",t);this.currentFilters=""}return}try{await A(this.host,this.filters);this.filterComplete()}catch(t){console.warn("filter failed",t)}finally{this.loading=false}}filterComplete(){this.columns=this.columns.map((t=>{const n=this.filters.find((n=>n.prop===t.prop));if(n)t.filter=n.filter;return t}));this.nanoTblAfterFilter.emit({filters:this.filters})}scrollToTop(t){const n=this.scrollParent.style?.scrollBehavior;const e=this.scrollParent.scrollLeft;this.scrollParent.style.scrollBehavior="auto";if(this.topAnchorEle&&!nt(this.topAnchorEle,.1))this.topAnchorEle.scrollIntoView();if(t)t.scrollIntoView({block:"start"});if(e)this.scrollParent.scrollLeft=e;if(n)this.scrollParent.style.scrollBehavior=n}setMeasureElement(){a((()=>{this.measureEle=this.blockElements.find((t=>!t?.classList?.contains(`${b}__inactive`)))}))}setInitialBlockDimension(){if(!this.blockElements.length)return;const t=new Promise((t=>{a((()=>{this.setMeasureElement();if(!this.measureEle&&!this.unitHeight)t();this.blockElements.forEach(((n,e)=>{if(!n||!n.classList?.contains(`${b}__inactive`)){if(e===this.blockElements.length-1)t();return}if(e===this.blockElements.length-1)t()}))}))}));t.then((()=>{requestAnimationFrame((()=>{this.isReady=true}))}))}async columnInit(){this.filters=this.columns.filter((t=>!!t.filter)).map((t=>{const{filter:n,prop:e}=t;return{filter:n,prop:e}}));if(this.searchTerm){await this.searchStart()}if(this.filters.length){await this.filterStart()}const t=this.columns.find((t=>!!t.order));if(!!t){await this.sortStart(t.order,t.prop)}}setBlocks(){this.activeBlocks=[0,1,2];this.ignoreIO=true;let t=1;const n=this.store.data.state.rows.length;let e=[];const i=[];this.blockHeights=[];for(t;t<=n;t++){e.push(this.store.data.state.rows[t-1]);if(t%this.perBlock===0){i.push({rows:e,__uuid:c(e.map((t=>t.__uuid)).join())});e=[]}}if(e.length)i.push({rows:e,__uuid:c(e.map((t=>t.__uuid)).join())});this.blocks=i}getBlockHeight(t){if(this.activeBlocks.includes(t))return undefined;if(this.blockHeights.length){const n=this.blockHeights.find((n=>n.blockIndex===t));if(n)return n.height+"px"}const n=this.blocks[t].rows.length;if(n===this.perBlock&&this.measureHeight){return this.measureHeight+"px"}return this.unitHeight?this.unitHeight*n+"px":undefined}setBlockHeight(){a((()=>{this.activeBlocks.forEach((t=>{const n=this.blockElements[t];if(!n)return;const e=n.getBoundingClientRect().height;const i=this.blockHeights.findIndex((n=>n.blockIndex===t));if(i>0){this.blockHeights[i]={height:e,blockIndex:t}}else this.blockHeights.push({height:e,blockIndex:t})}))}))}processSlots(){if(!this.caption&&!this.host.querySelector('[slot="caption"]')){console.error("For accessibility you must set a `title` prop or use the `caption` slot")}}async componentWillLoad(){this.store=await T(this.host,this.columns,this.scrollParent);await this.handleRowsChange();this.processSlots();this.setBlocks();this.store.data.onChange("rows",(()=>this.setBlocks()))}connectedCallback(){a((()=>this.scrollParent=tt(this.host)))}componentDidLoad(){this.setInitialBlockDimension()}componentShouldUpdate(t,n,e){if(["rows","columns"].includes(e))return false}componentWillRender(){}componentDidRender(){requestAnimationFrame((()=>this.ignoreIO=false));this.setMeasureElement()}render(){this.blockElements=[];return n(l,null,n("div",{class:`${b}__top-anchor`,ref:t=>this.topAnchorEle=t}," "),n("div",{"aria-labelledby":"table-caption-"+this.renderId,tabindex:this.type==="grid"?"0":undefined},n("nano-progress-bar",{indeterminate:true,class:{[`${b}__progress-bar`]:true,[`${b}__progress-bar--show`]:this.loading}}),n("table",{role:this.type==="grid"?"grid":undefined,"aria-readonly":this.type==="table"?"true":undefined,"aria-rowcount":this.store.data.state.rows.length,"aria-colcount":this.store.config.state.columns.length,class:`${b}`,ref:t=>this.tableEle=t},n("caption",{class:{[`${b}__caption`]:true,[`${b}__caption--hide`]:!this.showCaption},id:"table-caption-"+this.renderId},n("slot",{name:"caption"},this.caption)),n("thead",null,n(V,{rowRenderer:this.headRender,onColumnPinned:this.handleColumnPinned},this.store.config.state.columns.map((t=>[n(X,{column:t,headRenderer:this.headRender,onColumnOrderClick:this.sortStart,onColumnPinned:this.handleColumnPinned})])))),this.loading&&!this.blocks.length&&[...Array(10).keys()].map((t=>n("tr",null,this.store.config.state.columns.map(((e,i)=>n(Y,{rowIndex:t,colIndex:i,nestedContent:n("nano-skeleton",null)})))))),this.blocks.map(((t,e)=>n("tbody",{key:t.__uuid,id:`tbody-${this.renderId}-${e}`,ref:t=>{this.blockElements.push(t);this.setupBlockIO(t,e)},class:{[`${b}__inactive`]:!this.activeBlocks.includes(e),[`${b}__active`]:this.activeBlocks.includes(e)}},this.activeBlocks.includes(e)?t.rows.map(((t,i)=>{const o=e>0?e*this.perBlock+i:i;return n(Q,{rowRenderer:this.rowRender,row:t},this.store.config.state.columns.map(((t,e)=>n(Y,{rowIndex:o,colIndex:e}))))})):n("td",{colSpan:this.store.config.state.columns.length,style:{height:this.getBlockHeight(e)}})))),this.showFooter&&n("tfoot",null,n(V,{rowRenderer:this.footRender,onColumnPinned:this.handleColumnPinned},this.store.config.state.columns.map((t=>[n(X,{column:t,headRenderer:this.footRender,onColumnPinned:this.handleColumnPinned})]))))),!!this.blocks.length&&n("nano-spinner",{type:"circle",class:{[`${b}__spinner`]:true,[`${b}__spinner--show`]:this.loading}})))}get host(){return i(this)}static get watchers(){return{rows:["handleRowsChange"],columns:["handleColsChange"],searchTerm:["handleSearchTermChange"]}}};ot.style=et;export{ot as T,m as c};
5
- //# sourceMappingURL=p-b83a8320.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/table/table.constants.ts","@worker-helper","src/components/table/table.store.ts","src/components/table/table.service.tsx","src/components/table/table.children.tsx","src/components/table/table.utils.ts","src/components/table/table.scss?tag=nano-table","src/components/table/table.tsx"],"names":["CSSNAMESPACE","isInstanceOf","value","className","C","globalThis","getTransferables","constructor","Object","values","Array","isArray","flatMap","buffer","pendingIds","callbackIds","pending","Map","callbacks","createWorker","workerPath","workerName","workerMsgId","worker","Worker","name","addEventListener","data","workerMsg","id","err","resolve","reject","get","delete","errObj","assign","Error","message","consoleError","forEach","e","createWorkerProxy","exportedMethod","args","Promise","pendingId","i","argLen","length","mainData","set","callbackId","push","postMessage","w","then","colsToWorker","columns","safeColumns","JSON","parse","stringify","c","sortCompareFn","safeCol","find","sc","prop","toString","stores","WeakMap","async","generateStore","host","scrollParent","store","createStore","rows","config","general","workerId","createWorkerStore","state","use","reset","syncDataToWorker","dispose","syncConfigToWorker","getStore","storeSetData","map","row","__index","__uuid","cyrb53","join","storeSetConfig","storeSearch","term","workerSearch","console","log","storeFilter","filters","workerFilter","storeSort","order","workerSort","colDataModel","rowIndex","colIndex","fetchStores","column","rowModel","cellModel","rowDataModel","mergeProperties","current","extra","props","class","style","getElement","getRenderingRef","mergeCellProperties","defaultProps","extraPropsFunc","cellProperties","cellRender","tpl","cellTemplate","model","h","Fragment","colheadFootRender","col","colTemplate","title","baseClasses","type","vPinned","classes","[object Object]","classString","entries","on","stickyHIOs","stickyVIOs","addHObserver","el","pos","cb","root","observer","IntersectionObserver","positions","start","boundingClientRect","x","getBoundingClientRect","scrollLeft","isIntersecting","end","right","width","threshold","rootMargin","document","scrollingElement","requestAnimationFrame","observe","addVObserver","top","y","scrollTop","bottom","height","intersectionRect","TableRow","rowRenderer","children","extraProps","rowProperties","pinned","baseProps","key","TableHeadFootRow","onColumnPinned","utils","template","toRender","renderedRow","node","vtag","vattrs","vchildren","cNode","includes","ref","th","TableColHead","headRenderer","onColumnOrderClick","handleColumnOrderClick","target","closest","columnProperties","filter","content","Number","colspan","scope","sortable","aria-sort","onClick","TableCell","nestedContent","CellType","rowHeader","rowspan","detectScrollSpeed","lastPos","newPos","timer","delta","delay","clear","window","scrollY","clearTimeout","setTimeout","findScrollParent","element","getComputedStyle","excludeStaticParent","position","overflowRegex","documentElement","parent","parentElement","test","overflow","overflowY","overflowX","isInViewport","percentVisible","r","windowHeight","innerHeight","clientHeight","left","Math","floor","tableCss","Table","hostRef","this","debounceSetLoading","l","_loading","renderId","currentFilters","currentSort","blockIos","blockHeights","unitHeight","ignoreIO","_isReady","sortStart","loading","sortEvent","nanoTblBeforeSort","emit","defaultPrevented","scrollToTop","customSortFn","sortComplete","warn","setupBlockIO","blockIndex","has","blockIo","ioEntry","readTask","scrollSpeed","activeBlocks","max","nanoTblBlockRendered","block","totalBlocks","blockElements","setBlockHeight","handleColumnPinned","applied","tableEle","classList","toggle","debounce","bind","isReady","columnInit","setInitialBlockDimension","blocksLength","blocks","searchStart","filterStart","additive","measureEle","measureHeight","querySelector","ready","handleReady","speed","hash","location","idRow","scrollIntoView","nanoTblReady","nanoTblAfterSort","nanoTblBeforeSearch","searchTerm","nanoTblAfterSearch","f","ff","nanoTblBeforeFilter","customFilterFn","filterComplete","cFilter","nanoTblAfterFilter","scrollBehaviour","scrollBehavior","scrollX","topAnchorEle","b","contains","finishResizing","setMeasureElement","perBlock","undefined","cachedBlockHeight","bh","blockLength","fBhI","findIndex","caption","error","handleRowsChange","processSlots","setBlocks","onChange","_newVal","_oldVal","stateName","Host","a","aria-labelledby","tabindex","indeterminate","role","aria-readonly","aria-rowcount","aria-colcount","tbl","showCaption","headRender","colModel","keys","_colModel","tb","rowRender","colSpan","getBlockHeight","showFooter","footRender"],"mappings":"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","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 }>;\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) {\n const store: TableStores = {\n data: createStore({ rows: [] }),\n config: createStore({ columns }),\n general: createStore({ workerId: null, scrollParent, host }),\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\nexport function storeSetData(host: HTMLElement, rows: TableTypes.RowData[]) {\n const store = stores.get(host);\n if (!store) return;\n\n // augment data with some internal props\n rows = rows.map((row, i) => ({\n ...row,\n __index: i,\n __uuid: cyrb53(Object.values(row).join()),\n }));\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 if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, colsToWorker(columns));\n store.config.state.columns = columns;\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.log(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.log(e);\n }\n}\n\nexport async function storeSort(\n host: HTMLElement,\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.log(e);\n }\n}\n","import { getRenderingRef, getElement, VNode, h, Fragment } from '@stencil/core';\nimport { getStore } from './table.store';\nimport type { TableTypes } from '../../interface';\n\n/**\n * Get a model object for custom cell / property renderers.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns a model object which will be passed to custom renderers\n */\nfunction colDataModel(\n rowIndex: number,\n colIndex: number\n): TableTypes.ColumnDataSchemaModel {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const rows = store.data.state.rows;\n\n const column = columns[colIndex];\n const prop: TableTypes.ColumnProp | undefined = column?.prop;\n const rowModel = rows[rowIndex];\n const cellModel = rowModel[columns[colIndex].prop];\n\n return {\n prop,\n cellModel,\n column,\n rowIndex,\n rowModel,\n };\n}\n\n/**\n * Get a model object for custom row renderers.\n * @param rowIndex\n * @returns a model object passed to custom row renderers\n */\nexport function rowDataModel(rowIndex: number): TableTypes.RowDataSchemaModel {\n const store = fetchStores();\n const rows = store.data.state.rows;\n const row = rows[rowIndex];\n\n return {\n row,\n rowIndex,\n };\n}\n\n/**\n * Merges 2 objects of properties together\n * @param current - property object\n * @param extra - additional object property\n * @returns - merged properties that can be applied to a node\n */\nexport function mergeProperties(\n current: TableTypes.EleProps,\n extra: TableTypes.EleProps\n) {\n if (!extra) return current;\n\n // top level merge\n const props: TableTypes.EleProps = { ...extra, ...current };\n\n // deeper merge\n // merge classes maps or strings\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (\n typeof extra.class === 'string' &&\n typeof props.class === 'object'\n ) {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n // merge style\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n}\n\n/**\n * Returns the current nano-table's stores.\n * @returns the current nano-table stores\n */\nexport function fetchStores() {\n return getStore(getElement(getRenderingRef()));\n}\n\n/**\n * Merges any defined cell properties with properties\n * required by `nano-table` functionality\n * @param rowIndex - the current row index being rendered\n * @param colIndex = the current column index being rendered\n * @param defaultProps - default properties required by `nano-table`\n * @returns - the merged properties that will be applied to a node\n */\nexport function mergeCellProperties(\n rowIndex: number,\n colIndex: number,\n defaultProps: TableTypes.EleProps\n): TableTypes.EleProps {\n const props: TableTypes.EleProps = { ...defaultProps };\n const extraPropsFunc =\n fetchStores().config.state.columns[colIndex]?.cellProperties;\n if (!extraPropsFunc) return props;\n\n const data = colDataModel(rowIndex, colIndex);\n const extra = extraPropsFunc(data);\n if (!extra) return props;\n\n return mergeProperties(props, extra);\n}\n\n/**\n * Renders a cell using a custom renderer if set.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns - a JSX node\n */\nexport function cellRender(rowIndex: number, colIndex: number): VNode {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const tpl = columns[colIndex]?.cellTemplate;\n const model = colDataModel(rowIndex, colIndex);\n\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, model)\n ) : (\n <Fragment>{model.cellModel}</Fragment>\n );\n}\n\n/**\n * Renders a table header (within a thead) using a custom template if set.\n * @param col - the current column config object\n * @returns - a JSX node\n */\nexport function colheadFootRender(col: TableTypes.ColumnConfig): VNode {\n const tpl = col?.colTemplate;\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n","import { Fragment, FunctionalComponent, h, VNode } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n cellRender,\n colheadFootRender,\n fetchStores,\n mergeCellProperties,\n mergeProperties,\n rowDataModel,\n} from './table.service';\nimport type { TableTypes } from '../../interface';\n\ntype ValidRenderTypes = 'tr' | 'th' | 'td';\n\ntype PinnedCb = (positions: { [key in TableTypes.Position]?: boolean }) => void;\n\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: false\n): { [key: string]: boolean };\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: true\n): string;\nfunction baseClasses(\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) {\n let classString = '';\n Object.entries(classes).forEach(([className, on]) => {\n if (on) classString += className + ' ';\n });\n return classString;\n }\n return classes;\n}\n\nconst stickyHIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\nconst stickyVIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\n\nfunction addHObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyHIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n const host = store.general.state.host;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'start') {\n positions.start =\n e.boundingClientRect.x -\n (host.getBoundingClientRect().x + root.scrollLeft) <\n 0 && !e.isIntersecting;\n }\n if (pos === 'end') {\n // TODO - sort these out for RtL\n positions.end =\n e.boundingClientRect.right > e.boundingClientRect.width &&\n !e.isIntersecting;\n }\n cb(positions);\n },\n {\n threshold: [1],\n rootMargin: '1px 0px 1px 0px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyHIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\nfunction addVObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyVIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n const host = store.general.state.host;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'top') {\n positions.top =\n e.boundingClientRect.y -\n (host.getBoundingClientRect().y + root.scrollTop) <\n 0 && !e.isIntersecting;\n }\n if (pos === 'bottom')\n positions.bottom =\n e.boundingClientRect.height > e.intersectionRect.height &&\n !e.isIntersecting;\n cb(positions);\n },\n {\n threshold: [0.99],\n rootMargin: '0px 100px 0px 100px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyVIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex?: number;\n row?: TableTypes.RowData;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, row },\n children\n) => {\n let extraProps = {};\n\n if (!row) {\n const model = rowDataModel(rowIndex);\n row = model.row;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ row: row, rowIndex }) || extraProps;\n }\n\n let pinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n pinned = rowRenderer.pinned();\n }\n\n const baseProps = { class: baseClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n\n return (\n <tr {...props} key={row.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: baseClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(h as TableTypes.HFunc<VNode>, {\n renderedRow: <tr {...props}>{children}</tr>,\n });\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: baseClasses('tr', null, 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: baseClasses(\n cNode.vtag.toString() as ValidRenderTypes,\n pinned,\n true\n ),\n ref: (th) => {\n addVObserver(th, pinned, onColumnPinned);\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\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnOrderClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLElement\n ) => void;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnOrderClick,\n onColumnPinned,\n}) => {\n function handleColumnOrderClick(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 onColumnOrderClick(order, column.prop, e.target.closest('th'));\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...baseClasses('th', headRenderer?.pinned),\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__filtered`]: !!column.filter,\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.EleProps).colspan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (column.sortable !== false) {\n return (\n <th\n {...props}\n aria-sort={\n column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n >\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnOrderClick}\n >\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/filter\" />}\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 </th>\n );\n }\n\n return (\n <th\n {...props}\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n >\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/bars-filter\" />}\n </div>\n </th>\n );\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 = nestedContent || cellRender(rowIndex, colIndex);\n if (!content) return <Fragment></Fragment>;\n\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n let CellType = 'td';\n let props = mergeCellProperties(rowIndex, colIndex, {\n class: {\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\n if (column.rowHeader) {\n props =\n Number((props as TableTypes.EleProps).rowspan) > 1\n ? { ...props, scope: 'rowgroup' }\n : { ...props, scope: 'row' };\n CellType = 'th';\n }\n\n return (\n <CellType\n // role=\"gridcell\"\n {...props}\n >\n <div class={`${CSSNAMESPACE}__cell-content`}>{content}</div>\n </CellType>\n );\n};\n","export const detectScrollSpeed = (() => {\n let lastPos: number;\n let newPos: number;\n let timer: number;\n let delta: number;\n const delay = 60; // in \"ms\" (higher means lower fidelity )\n\n const clear = () => {\n lastPos = null;\n delta = 0;\n };\n clear();\n\n return () => {\n newPos = window.scrollY;\n if (lastPos != null) delta = newPos - lastPos;\n lastPos = newPos;\n window.clearTimeout(timer);\n timer = window.setTimeout(clear, delay);\n return delta;\n };\n})();\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 for (let parent = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent);\n if (excludeStaticParent && style.position === 'static') {\n continue;\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX))\n return parent;\n }\n return document.documentElement;\n}\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","@use '../../global/style/utilities/globals' as t;\n\nnano-table {\n display: table;\n width: 100%;\n\n // general\n --max-col-width: 200px;\n\n // text\n --color: var(--nano-color-mediumgrey, #68767e);\n --font-size: 0.87rem;\n --cell-line-height: 1.5;\n\n // borders\n --border-color: var(--nano-color-palegrey, #b5aea7);\n --border-style: 1px solid var(--border-color);\n --border-tint-color: var(--nano-color-blue, #90c6e7);\n --border-tint-style: 2px solid var(--border-tint-color);\n\n // backgrounds\n --cell-bg-rgb: var(--nano-color-white-rgb, 255 255 255);\n --head-bg-rgb: var(--cell-bg-rgb);\n --foot-bg-rgb: var(--cell-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: 0.5rem 0.625rem 0.4125rem;\n --th-padding: 0.875rem 0.625rem 0.6875rem;\n --head-th-padding: var(--th-padding);\n --foot-th-padding: var(--td-padding);\n --bookend-col-padding: 2rem;\n}\n\n.nano-tbl {\n $base: &;\n\n color: var(--color);\n text-align: start;\n width: 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\n // for container queries - not working atm\n\n // tr {\n // container-type: inline-size;\n // }\n\n &__top-anchor {\n @include t.visually-hide;\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 width: 100%;\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 scale: 0;\n width: 100%;\n height: 0;\n\n &--show {\n scale: 1;\n height: auto;\n }\n }\n\n &__caption {\n &--hide {\n @include t.visually-hide;\n }\n }\n\n &__td,\n &__th {\n line-height: var(--cell-line-height);\n text-align: start;\n border-block-end: var(--border-style);\n max-width: var(--max-col-width);\n background-color: rgb(var(--cell-bg-rgb));\n\n // for container queries - not working atm\n\n // @container (min-width: 700px) {\n // &:first-child {\n // padding-inline-start: var(--bookend-col-padding) !important;\n // }\n\n // &:last-child {\n // padding-inline-end: var(--bookend-col-padding) !important;\n // }\n // }\n\n @include t.media-breakpoint-up('md') {\n &:first-child #{$base}__cell-content {\n padding-inline-start: var(--bookend-col-padding) !important;\n }\n\n &:last-child #{$base}__cell-content {\n padding-inline-end: var(--bookend-col-padding) !important;\n }\n }\n\n thead & {\n font-weight: 800;\n background: rgba(var(--head-bg-rgb), 90%);\n\n #{$base}__cell-content {\n padding: var(--head-th-padding);\n }\n }\n\n tfoot & {\n font-weight: 800;\n border-block-end: none;\n background: rgba(var(--foot-bg-rgb), 90%);\n\n #{$base}__cell-content {\n padding: var(--foot-th-padding);\n }\n }\n\n &.nano-tbl__ordered {\n background-color: rgba(var(--ordered-bg-rgb), 0.8) !important;\n }\n }\n\n &__cell-content {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding: var(--td-padding);\n }\n\n tbody {\n will-change: scroll-position;\n visibility: visible;\n\n &.nano-tbl__inactive {\n visibility: hidden;\n }\n }\n\n th[scope='row'] {\n font-weight: 800;\n max-width: 65vw;\n margin: 0;\n }\n\n &__pin {\n position: sticky;\n z-index: 1;\n\n &--start {\n inset-inline: -1px auto;\n transition: max-width 0.25s;\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: 5px 0 4px 0 rgb(0 0 0 / 20%);\n opacity: 0;\n z-index: -1;\n }\n\n #{$base}__pinned--start & {\n z-index: 2;\n\n @include t.media-breakpoint-down('sm') {\n max-width: 25vw !important;\n }\n\n &::after {\n opacity: 1;\n }\n }\n }\n\n &--end {\n inset-inline: auto -1px;\n max-width: min(50vw, 200px);\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: -5px 0 4px 0 rgb(0 0 0 / 20%);\n opacity: 0;\n z-index: -1;\n }\n\n #{$base}__pinned--end & {\n z-index: 3;\n\n &::after {\n opacity: 1;\n }\n }\n\n /*\n I cannot think of a nice way to make stuck-end columns play nice on small screens :(\n Changing the width when stuck (as we do for stuck-start columns) causes the whole positioning to change.\n This fires the IO, thus un-sticks the column, thus causes the IO to fire which sticks the column ∞\n */\n #{$base}__pin--start ~ & {\n @include t.media-breakpoint-down('sm') {\n inset-inline: auto auto;\n\n &::after {\n display: none;\n }\n }\n }\n }\n\n &--top {\n inset-block: -1px auto;\n\n #{$base}__pinned--top & {\n z-index: 4;\n }\n }\n\n &--bottom {\n inset-block: auto -1px;\n\n #{$base}__pinned--bottom & {\n z-index: 5;\n border-block-start: var(--border-tint-style);\n }\n }\n\n &--top#{&}--start {\n #{$base}__pinned--top#{$base}__pinned--start & {\n z-index: 6;\n }\n }\n\n &--top#{&}--end {\n #{$base}__pinned--top#{$base}__pinned--end & {\n z-index: 6;\n }\n }\n\n &--bottom#{&}--start {\n #{$base}__pinned--bottom#{$base}__pinned--start & {\n z-index: 6;\n }\n }\n\n &--bottom#{&}--end {\n #{$base}__pinned--bottom#{$base}__pinned--end & {\n z-index: 6;\n }\n }\n }\n\n thead tr:last-of-type td,\n thead tr:last-of-type th,\n tfoot tr:last-of-type td,\n tfoot tr:last-of-type th {\n border-block-end: var(--border-tint-style);\n }\n\n .unlimited-width {\n max-width: 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: -1;\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 Build,\n Listen,\n} from '@stencil/core';\nimport { cyrb53 } from '../../utils/math';\nimport { debounce } from '../../utils/throttle';\nimport {\n TableColHead,\n TableRow,\n TableCell,\n TableHeadFootRow,\n} from './table.children';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n generateStore,\n storeSearch,\n storeSetConfig,\n storeSetData,\n storeSort,\n storeFilter,\n TableStores,\n} from './table.store';\nimport {\n detectScrollSpeed,\n findScrollParent,\n isInViewport,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\nfunction perMark(name: string, end: boolean = false) {\n if (!Build.isDev) return;\n if (end) {\n performance?.mark('end' + name);\n performance?.measure(name, 'start' + name, 'end' + name);\n const entries = performance?.getEntriesByName(name);\n console.log(entries[entries.length ? entries.length - 1 : 0]);\n } else {\n performance?.mark('start' + name);\n }\n}\n\nlet id = 0;\n/**\n * A performant, accessible and semantic (uses real html `<table />`, `<tr />` etc) table and data-grid solution.\n * - Built-in search\n * - Built-in column filter\n * - Built-in column sort\n * - Easily swap in API / async based search / filter & sort\n * - Pin headers, footers, rows, columns\n * - Add custom rendering at every level\n * - Add custom properties at every level\n *\n * @slot caption - The table's caption. You must either use this or the `caption` attribute.\n */\n@Component({\n tag: 'nano-table',\n styleUrl: 'table.scss',\n})\nexport class Table implements ComponentInterface {\n constructor() {\n this.debounceSetLoading = debounce(this.debounceSetLoading.bind(this), 50);\n }\n // Public API\n\n // Props\n\n /** The type of table. Grid type will make cells navigable by keyboard */\n @Prop() type: 'grid' | 'table' = 'table';\n\n /** A descriptive title of the table.\n * You must use this or the `slot=\"caption\"` for accessibility */\n @Prop() caption: string;\n\n /** Show the caption on-screen */\n @Prop() showCaption: boolean = false;\n\n /** Will show a loading state when true.\n * Will be shown automatically if `rows` is a promise waiting to resolve\n * or when performing custom filtering or sorting */\n @Prop()\n get loading() {\n return this._loading;\n }\n set loading(l: boolean) {\n this.debounceSetLoading(l);\n }\n @State() _loading: boolean = true;\n private debounceSetLoading = (l: boolean) => {\n this._loading = l;\n };\n\n /** When loading rows asynchronously, this will render this number of placeholder rows */\n @Prop() placeholderSize = 5;\n\n /** The data to place in the table */\n @Prop() rows:\n | TableTypes.NanoTable['rows']\n | Promise<TableTypes.NanoTable['rows']>;\n\n @Watch('rows')\n handleRowsChange() {\n if (!this.rows) return;\n\n this.loading = true;\n Promise.resolve(this.rows).then(async (rows) => {\n await storeSetData(this.host, rows);\n\n if (!this.isReady) {\n await this.columnInit();\n this.setInitialBlockDimension();\n }\n this.loading = false;\n });\n }\n\n /** The column config used to generate present the rows of data */\n @Prop({ mutable: true }) columns: TableTypes.NanoTable['columns'] = [];\n\n @Watch('columns')\n handleColsChange() {\n storeSetConfig(this.host, this.columns);\n if (this.isReady) this.columnInit();\n }\n\n /** Used for custom thead row rendering */\n @Prop() headRender: TableTypes.HeadFootRenderer = { pinned: 'top' };\n\n /** Used for custom row rendering */\n @Prop() rowRender: TableTypes.RowRenderer;\n\n /** Used for custom tfoot row rendering */\n @Prop() footRender: TableTypes.HeadFootRenderer = { pinned: 'bottom' };\n\n /** Whether to show a `<tfoot>` component */\n @Prop() showFooter = false;\n\n /** To improve performance, data is split into blocks\n * which are shown / hidden and rendered as they become visible.\n * Use this to control the number of hits within a block -\n * A block should fill a scrolling viewport.\n * The less perBlock the better for performance */\n @Prop() perBlock = 60;\n\n /** The number of total blocks currently rendered in the table. @readonly */\n @Prop()\n get blocksLength() {\n return this.blocks.length;\n }\n\n /** Term to search for in the data */\n @Prop() searchTerm: string;\n\n /** A custom filtering function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the filter on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customFilterFn?: (filters: TableTypes.Filter[]) => Promise<void>;\n\n /** A custom sorting function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the sort on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customSortFn?: (\n property: TableTypes.Prop,\n order: TableTypes.Order\n ) => Promise<void>;\n\n @Watch('searchTerm')\n handleSearchTermChange() {\n this.searchStart();\n }\n\n /** Fired whenever a block is activated by scrolling into view / becoming visible\n * This could be leveraged for infinite scrolling / to fetch more data.\n */\n @Event() nanoTblBlockRendered: EventEmitter<{\n block: number;\n totalBlocks: number;\n }>;\n\n /** Fired when the table has done it's first complete render */\n @Event() nanoTblReady: EventEmitter;\n\n /** Fired before a column is sorted.\n * `event.preventDefault()` to stop sorting. */\n @Event() nanoTblBeforeSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired before a column is filtered.\n * `event.preventDefault()` to stop filtering. */\n @Event() nanoTblBeforeFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired before a general search.\n * `event.preventDefault()` to stop searching. */\n @Event() nanoTblBeforeSearch: EventEmitter<{ term: string }>;\n\n /** Fired after a general / cross column search */\n @Event() nanoTblAfterSearch: EventEmitter<{ term: string }>;\n\n /** Remove any column sorts currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetSorting() {\n const col = this.columns.find((c) => !!c.order);\n if (!col) return;\n return this.sortStart(null, col.prop);\n }\n\n /** Apply a sort on a column\n * @returns a promise which resolves when complete */\n @Method()\n async addSort(column: TableTypes.Prop, order: TableTypes.Order) {\n const col = this.columns.find((c) => c.prop === column);\n if (!col) throw 'Cannot find column with ' + column;\n return this.sortStart(order, col.prop);\n }\n\n /** Remove any column filters currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetFilters() {\n this.filters = [];\n return this.filterStart();\n }\n\n /** Apply a filter on a column\n * @param filters - the filters to apply\n * @param additive - if true, will add the filters to any currently applied\n * @returns a promise which resolves when complete\n */\n @Method()\n async addFilters(filters: TableTypes.Filter[], additive: boolean = true) {\n if (!additive) this.filters = [];\n return this.filterStart(filters, additive);\n }\n\n // Private Logic\n\n // State\n\n @Element() host: HTMLNanoTableElement;\n private renderId = 'tbl-' + id++;\n private store: TableStores;\n private filters: TableTypes.Filter[] = [];\n private currentFilters = '';\n private currentSort = '';\n private tableEle: HTMLTableElement;\n private topAnchorEle: HTMLElement;\n\n // Blocks\n\n /** `tr` elements split into units - defined by `perPage`\n These are show / hidden for perf */\n @State() blocks: TableTypes.TBody[] = [];\n @State() activeBlocks: number[] = [0, 1, 2];\n @State() measureHeight = 0;\n\n private blockElements: HTMLTableSectionElement[];\n private blockIos: WeakMap<HTMLTableSectionElement, IntersectionObserver> =\n new WeakMap();\n private blockHeights: { blockIndex: number; height: number }[] = [];\n // uses the first 'tr' of an active block as our yard stick\n private set measureEle(el: HTMLTableSectionElement) {\n if (!el) return;\n this.measureHeight = el.getBoundingClientRect().height;\n this.unitHeight =\n el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;\n }\n private unitHeight = 0;\n\n // Scroll / IO used for hiding / showing blocks\n\n private ignoreIO = true;\n private scrollParent: HTMLElement;\n private scrollSpeed: number;\n\n // Misc.\n\n private get isReady() {\n return this._isReady;\n }\n private set isReady(ready: boolean) {\n if (ready === this._isReady) return;\n this._isReady = ready;\n if (this.isReady) requestAnimationFrame(() => this.handleReady());\n }\n private _isReady = false;\n\n // Listeners\n\n @Listen('scroll', { target: 'window' })\n scrollListener() {\n // see explanation in `setupBlockIO`\n const speed = detectScrollSpeed();\n this.scrollSpeed = speed < 0 ? speed * -1 : speed;\n }\n\n // Logic\n\n private handleReady() {\n const hash = window.location.hash;\n if (hash.length > 1) {\n const idRow = document.querySelector(hash);\n if (idRow) {\n idRow.scrollIntoView();\n }\n }\n this.nanoTblReady.emit();\n }\n\n /**\n * Start a sort - can be cancelled by `preventDefault`\n * @param order - column order\n * @param column - column config object\n * @returns A promise\n */\n private sortStart = async (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n element?: HTMLElement\n ) => {\n // did order change?\n if (this.currentSort === order + ':' + column) return;\n\n this.loading = true;\n const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });\n if (sortEvent.defaultPrevented) return;\n perMark('sort');\n this.currentSort = order + ':' + column;\n\n // doesn't make sense to leave user in place for a sort\n this.scrollToTop(element);\n\n if (this.customSortFn) {\n try {\n await this.customSortFn(column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('custom sort failed', e);\n }\n return;\n }\n\n try {\n await storeSort(this.host, column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('sort failed', e);\n this.currentSort = '';\n } finally {\n this.loading = false;\n }\n };\n\n /**\n * Complete a sort. Reflects the order to ui.\n * @param order - column order\n * @param column - column config object\n */\n private sortComplete(order: TableTypes.Order, column: TableTypes.Prop) {\n this.columns = this.columns.map((c) => {\n if (c.prop === column) return { ...c, order };\n return { ...c, order: null };\n });\n this.nanoTblAfterSort.emit({ column: column, order });\n perMark('sort', true);\n }\n\n private async searchStart() {\n this.loading = true;\n const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });\n if (sortEvent.defaultPrevented) return;\n perMark('search');\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n try {\n await storeSearch(this.host, this.searchTerm);\n this.nanoTblAfterSearch.emit({ term: this.searchTerm });\n perMark('search', true);\n } catch (e) {\n console.warn('search failed', e);\n } finally {\n this.loading = false;\n }\n }\n\n private async filterStart(\n filters?: TableTypes.Filter[],\n additive: boolean = true\n ) {\n if (filters) {\n if (additive) {\n this.filters = [\n ...this.filters.filter(\n (f) => !filters.find((ff) => ff.prop === f.prop)\n ),\n ...filters,\n ];\n } else {\n this.filters = filters;\n }\n }\n\n if (this.currentFilters === JSON.stringify(this.filters)) return;\n\n this.loading = true;\n const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });\n if (sortEvent.defaultPrevented) return;\n perMark('filter');\n this.currentFilters = JSON.stringify(this.filters);\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n if (this.customFilterFn) {\n try {\n await this.customFilterFn(this.filters);\n this.filterComplete();\n } catch (e) {\n console.warn('custom filter failed', e);\n this.currentFilters = '';\n }\n return;\n }\n\n try {\n await storeFilter(this.host, this.filters);\n this.filterComplete();\n perMark('search', true);\n } catch (e) {\n console.warn('filter failed', e);\n } finally {\n this.loading = false;\n }\n }\n\n private filterComplete() {\n this.columns = this.columns.map((c) => {\n const cFilter = this.filters.find((f) => f.prop === c.prop);\n if (cFilter) c.filter = cFilter.filter;\n return c;\n });\n this.nanoTblAfterFilter.emit({ filters: this.filters });\n perMark('filter', true);\n }\n\n /** Scrolls to the top immediately - used whilst sorting / filtering */\n private scrollToTop(element?: HTMLElement) {\n const scrollBehaviour = this.scrollParent.style?.scrollBehavior;\n const scrollX = this.scrollParent.scrollLeft;\n this.scrollParent.style.scrollBehavior = 'auto';\n\n if (this.topAnchorEle && !isInViewport(this.topAnchorEle, 0.1))\n this.topAnchorEle.scrollIntoView();\n if (element) element.scrollIntoView({ block: 'start' });\n\n if (scrollX) this.scrollParent.scrollLeft = scrollX;\n\n if (scrollBehaviour)\n this.scrollParent.style.scrollBehavior = scrollBehaviour;\n }\n\n private setMeasureElement() {\n readTask(() => {\n this.measureEle = this.blockElements.find(\n (b) => !b?.classList?.contains(`${CSSNAMESPACE}__inactive`)\n );\n });\n }\n\n /**\n * Sets the initial height on tbody elements that are not active\n * These elements have no natural height - on account of all their rows being hidden\n * So we just estimate for now\n */\n private setInitialBlockDimension() {\n if (!this.blockElements.length) return;\n perMark('blockDims');\n\n const finishResizing: Promise<void> = new Promise((resolve) => {\n readTask(() => {\n this.setMeasureElement();\n\n // find the first active block\n if (!this.measureEle && !this.unitHeight) resolve();\n\n this.blockElements.forEach((el, i) => {\n if (!el || !el.classList?.contains(`${CSSNAMESPACE}__inactive`)) {\n if (i === this.blockElements.length - 1) resolve();\n return;\n }\n if (i === this.blockElements.length - 1) resolve();\n });\n });\n });\n\n // we're all finished.\n finishResizing.then(() => {\n perMark('blockDims', true);\n perMark('init', true);\n\n requestAnimationFrame(() => {\n this.isReady = true;\n });\n });\n }\n\n /** Apply initial columns settings */\n private async columnInit() {\n this.filters = this.columns\n .filter((c) => !!c.filter)\n .map((c) => {\n const { filter, prop } = c;\n return { filter, prop };\n });\n\n if (this.searchTerm) {\n await this.searchStart();\n }\n\n if (this.filters.length) {\n await this.filterStart();\n }\n // apply sort\n const col = this.columns.find((c) => !!c.order);\n if (!!col) {\n await this.sortStart(col.order, col.prop);\n }\n }\n\n /** Split up all incoming rows into 'blocks' split amongst tbody elements.\n * These can then be hidden / shown to improve performance.\n */\n private setBlocks() {\n perMark('setBlocks');\n this.activeBlocks = [0, 1, 2];\n this.ignoreIO = true;\n let i = 1;\n const l = this.store.data.state.rows.length;\n let rows: TableTypes.RowData[] = [];\n const blocks: TableTypes.TBody[] = [];\n this.blockHeights = [];\n\n // old skool loop for perf\n for (i; i <= l; i++) {\n rows.push(this.store.data.state.rows[i - 1]);\n\n if (i % this.perBlock === 0) {\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n rows = [];\n }\n }\n if (rows.length)\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n this.blocks = blocks;\n perMark('setBlocks', true);\n }\n\n /**\n * Returns a block render height.\n * If it's currently active - let auto do it's thing\n * If we've rendered it before - return that\n * If all else fails, let's guess it\n * @param blockIndex\n * @returns a height string (incl px)\n */\n private getBlockHeight(blockIndex: number): string {\n if (this.activeBlocks.includes(blockIndex)) return undefined;\n\n if (this.blockHeights.length) {\n const cachedBlockHeight = this.blockHeights.find(\n (bh) => bh.blockIndex === blockIndex\n );\n if (cachedBlockHeight) return cachedBlockHeight.height + 'px';\n }\n const blockLength = this.blocks[blockIndex].rows.length;\n if (blockLength === this.perBlock && this.measureHeight) {\n return this.measureHeight + 'px';\n }\n return this.unitHeight ? this.unitHeight * blockLength + 'px' : undefined;\n }\n\n /** cache the height for all active blocks for later renders */\n private setBlockHeight() {\n readTask(() => {\n this.activeBlocks.forEach((blockIndex) => {\n const el = this.blockElements[blockIndex];\n if (!el) return;\n\n const height = el.getBoundingClientRect().height;\n // cache height to our block heights array\n // for subsequent renders\n const fBhI = this.blockHeights.findIndex(\n (bh) => bh.blockIndex === blockIndex\n );\n if (fBhI > 0) {\n this.blockHeights[fBhI] = { height, blockIndex };\n } else this.blockHeights.push({ height, blockIndex });\n });\n });\n }\n\n /**\n * Attaches an intersection observer to each rendered tbody element\n * shows / hides intersecting blocks' and sets heights for when they're hidden\n * @param el - the tbody element to observe\n * @param blockIndex - the rendering tbody we're attaching the IO to\n */\n private setupBlockIO = (el: HTMLTableSectionElement, blockIndex: number) => {\n if (!el || this.blockIos.has(el)) return;\n\n const blockIo = new IntersectionObserver(\n ([ioEntry]) => {\n if (this.ignoreIO) return;\n\n if (ioEntry.isIntersecting) {\n // This is a bit gross\n // The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast\n // i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.\n // To fix that, we check - for realsies - if the block IS visible.\n // BUT that test is not as sensitive to a block being visible via the IO,\n // so doesn't always fire if scrolling slowly\n // *sigh*\n readTask(() => {\n if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {\n this.activeBlocks = [\n blockIndex,\n blockIndex + 1,\n Math.max(0, blockIndex - 1),\n ];\n this.nanoTblBlockRendered.emit({\n block: blockIndex,\n totalBlocks: this.blockElements.length,\n });\n requestAnimationFrame(() => this.setBlockHeight());\n }\n });\n }\n },\n {\n threshold: [0],\n root:\n this.scrollParent === document.scrollingElement\n ? null\n : this.scrollParent,\n }\n );\n\n blockIo.observe(el);\n this.blockIos.set(el, blockIo);\n };\n\n /** Process slotted content */\n private processSlots() {\n // see if we have slot content\n if (!this.caption && !this.host.querySelector('[slot=\"caption\"]')) {\n console.error(\n 'For accessibility you must set a `title` prop or use the `caption` slot'\n );\n }\n }\n\n private handleColumnPinned = (positions: {\n [key in TableTypes.Position]: boolean;\n }) => {\n Object.entries(positions).forEach(([key, applied]) => {\n this.tableEle.classList.toggle(\n `${CSSNAMESPACE}__pinned--${key}`,\n applied\n );\n });\n };\n\n // Component lifecycle\n\n async componentWillLoad() {\n perMark('init');\n this.store = await generateStore(\n this.host,\n this.columns,\n this.scrollParent\n );\n await this.handleRowsChange();\n this.processSlots();\n this.setBlocks();\n this.store.data.onChange('rows', () => this.setBlocks());\n }\n\n connectedCallback(): void {\n readTask(() => (this.scrollParent = findScrollParent(this.host)));\n }\n\n componentDidLoad(): void {\n this.setInitialBlockDimension();\n }\n\n componentShouldUpdate(_newVal, _oldVal, stateName: keyof Table) {\n // stop double rendering - we use the store for rendering internally\n // the public facing props are kept in-sync with the store\n // but we don't want it to cause renders\n if (['rows', 'columns'].includes(stateName)) return false;\n }\n\n componentWillRender(): void | Promise<void> {\n perMark('render');\n }\n\n componentDidRender(): void {\n requestAnimationFrame(() => (this.ignoreIO = false));\n this.setMeasureElement();\n perMark('render', true);\n }\n\n render() {\n this.blockElements = [];\n\n return (\n <Host>\n <div\n class={`${CSSNAMESPACE}__top-anchor`}\n ref={(a) => (this.topAnchorEle = a)}\n >\n &nbsp;\n </div>\n <div\n aria-labelledby={'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\n <table\n role={this.type === 'grid' ? 'grid' : undefined}\n aria-readonly={this.type === 'table' ? 'true' : undefined}\n aria-rowcount={this.store.data.state.rows.length}\n aria-colcount={this.store.config.state.columns.length}\n class={`${CSSNAMESPACE}`}\n ref={(tbl) => (this.tableEle = tbl)}\n >\n <caption\n class={{\n [`${CSSNAMESPACE}__caption`]: true,\n [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,\n }}\n id={'table-caption-' + this.renderId}\n >\n <slot name=\"caption\">{this.caption}</slot>\n </caption>\n\n {/* Header */}\n <thead>\n <TableHeadFootRow\n rowRenderer={this.headRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.headRender}\n onColumnOrderClick={this.sortStart}\n onColumnPinned={this.handleColumnPinned}\n />,\n ])}\n </TableHeadFootRow>\n </thead>\n\n {this.loading &&\n !this.blocks.length &&\n [...Array(10).keys()].map((rowIndex) => (\n <tr>\n {this.store.config.state.columns.map(\n (_colModel, colIndex) => (\n <TableCell\n rowIndex={rowIndex}\n colIndex={colIndex}\n nestedContent={<nano-skeleton />}\n />\n )\n )}\n </tr>\n ))}\n\n {/* Body */}\n {this.blocks.map((block, blockIndex) => (\n <tbody\n key={block.__uuid}\n id={`tbody-${this.renderId}-${blockIndex}`}\n ref={(tb) => {\n this.blockElements.push(tb);\n this.setupBlockIO(tb, blockIndex);\n }}\n class={{\n [`${CSSNAMESPACE}__inactive`]:\n !this.activeBlocks.includes(blockIndex),\n [`${CSSNAMESPACE}__active`]:\n this.activeBlocks.includes(blockIndex),\n }}\n >\n {this.activeBlocks.includes(blockIndex) ? (\n block.rows.map((row, i) => {\n const rowIndex =\n blockIndex > 0 ? blockIndex * this.perBlock + i : i;\n return (\n <TableRow rowRenderer={this.rowRender} row={row}>\n {this.store.config.state.columns.map(\n (_colModel, colIndex) => (\n <TableCell\n rowIndex={rowIndex}\n colIndex={colIndex}\n />\n )\n )}\n </TableRow>\n );\n })\n ) : (\n <td\n colSpan={this.store.config.state.columns.length}\n style={{\n height: this.getBlockHeight(blockIndex),\n }}\n />\n )}\n </tbody>\n ))}\n\n {/* Footer */}\n {this.showFooter && (\n <tfoot>\n <TableHeadFootRow\n rowRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n />,\n ])}\n </TableHeadFootRow>\n </tfoot>\n )}\n </table>\n\n {!!this.blocks.length && (\n <nano-spinner\n type=\"circle\"\n class={{\n [`${CSSNAMESPACE}__spinner`]: true,\n [`${CSSNAMESPACE}__spinner--show`]: this.loading,\n }}\n />\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{r as i,h as e,a as t,g as o}from"./p-1fe12320.js";const r=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{display:block;--nano-loader-base:#4a4a4a;--nano-loader-tint:#7d7d7d;--theme-color:#fff;--theme-tint-color:#90c6e7;--scrim-color:0, 0, 0;--scrim-direction:90deg;--scrim-opacity-from:0.25;--scrim-opacity-to:0.7;--padding:0;--quote-size:1.3rem;color:var(--theme-color)}:host(.is-xl){--quote-size:3rem}:host([theme=light]){--nano-loader-base:#fff;--nano-loader-tint:white;--theme-color:#4a4a4a;--scrim-color:255, 255, 255;--scrim-opacity-from:0.25;--scrim-opacity-to:1;--scrim-direction:270deg;color:var(--theme-color)}:host([theme=light]) .hero__primary-content{--color:#4a4a4a}.hero{position:relative}.hero--rtl{--scrim-direction:270deg}.hero--secondary:not(.hero--iconbox){--scrim-direction:0deg}.hero__bg-wrap{overflow:hidden}.hero__bg-slot{position:absolute;inset:0}.hero__ctas{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding-block:32px 0;padding-inline:32px;-webkit-margin-after:-64px;margin-block-end:-64px;position:relative;z-index:1}@media (max-width: 52em){.hero__ctas{display:none}}@media (max-width: 58em){.hero__ctas{-webkit-margin-after:-48px;margin-block-end:-48px}}.hero__ctas ::slotted(a.button[slot=secondary-ctas]){padding-block:0.25rem !important;padding-inline:0.5rem !important;font-size:0.875rem !important;margin-block:0 !important;margin-inline:0.25rem !important}.hero__img{display:block;--padding:inherit}.hero__breadcrumbs{display:none;margin-block:20px 0;margin-inline:14px;line-height:14px}.hero--breadcrumb .hero__breadcrumbs{display:block}.is-xl .hero__breadcrumbs{margin-block:0;margin-inline:50px;max-inline-size:50%}.is-xxl .hero__breadcrumbs{margin-block:0;margin-inline:83px}.hero__breadcrumbs ::slotted(*[slot=breadcrumb]){font-size:0.85rem;text-transform:uppercase;letter-spacing:1.5px;font-weight:600;font-stretch:125%;display:inline-block;-webkit-margin-after:16px;margin-block-end:16px;position:relative;z-index:2}.hero--hasbg .hero__breadcrumbs ::slotted(*[slot=breadcrumb]){text-shadow:1px 1px rgba(0, 0, 0, 0.15)}.hero__breadcrumbs ::slotted(a[slot=breadcrumb]){color:var(--theme-tint-color) !important;cursor:pointer}.hero__breadcrumbs ::slotted(.slash[slot=breadcrumb]){color:var(--theme-color);position:relative;margin-block:0;margin-inline:0.5rem;display:inline-block}.hero__scrim{position:absolute;inset:0;z-index:0;background:-webkit-gradient(linear, left top, left bottom, from(var(--scrim-direction)), color-stop(0%, rgba(var(--scrim-color), var(--scrim-opacity-from))), to(rgba(var(--scrim-color), var(--scrim-opacity-to))));background:linear-gradient(var(--scrim-direction), rgba(var(--scrim-color), var(--scrim-opacity-from)) 0%, rgba(var(--scrim-color), var(--scrim-opacity-to)) 100%)}.hero--scrim .hero__scrim{background:none}.hero__content{max-inline-size:1440px;--grid-row-gap:0;margin-block:0;margin-inline:auto;position:relative}.hero__content.is-xl{-webkit-margin-before:50px;margin-block-start:50px;max-inline-size:1540px}.hero__content.is-xxl{-webkit-margin-before:83px;margin-block-start:83px;max-inline-size:1606px}.hero__primary{margin:16px}.hero--breadcrumb .hero__primary{margin-block:0;margin-inline:16px}.hero--backbtn .hero__primary{-webkit-margin-start:0;margin-inline-start:0}.hero__primary ::slotted(nano-icon-button[slot=back-btn]){font-size:2rem}.is-xl .hero__primary{margin-block:0 50px;margin-inline:50px 0}.is-xl .hero__primary ::slotted(nano-icon-button[slot=back-btn]){margin-block:0;margin-inline:-3rem 0}.is-xxl .hero__primary{margin-block:0 83px;margin-inline:83px 0}.hero__primary-content{max-inline-size:45rem;--color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex}.hero--backbtn .hero__primary-content>div{padding-block:10px 0;padding-inline:0}.hero__primary-content ::slotted(h1[slot=primary-content]){line-height:26px !important;margin-block:0 18px !important;font-size:2rem !important}.is-xl .hero__primary-content ::slotted(h1[slot=primary-content]){line-height:31px !important;-webkit-margin-after:30px !important;margin-block-end:30px !important}.is-xl .hero__primary-content ::slotted(.button[slot=primary-content]){-webkit-margin-before:20px !important;margin-block-start:20px !important}.hero__secondary{display:none;block-size:100%;padding-block:0 20px;padding-inline:14px}.hero--secondary .hero__secondary{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.is-xl .hero__secondary{padding-block:0 50px;padding-inline:50px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.is-xxl .hero__secondary{padding-block:0 83px;padding-inline:83px}.hero__icon-box{background:rgba(0, 0, 0, 0.7);padding:24px;inline-size:100%;-webkit-margin-after:auto;margin-block-end:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;color:white}.is-xl .hero__icon-box{max-inline-size:410px;-webkit-box-flex:0;-ms-flex:0 1 410px;flex:0 1 410px}.hero__icon-box ::slotted([slot=icon-box-item]){--nano-color-base:var(--theme-tint-color);--nano-icon-size:32px;--nano-icon-margin-end:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:0.8125rem;-webkit-margin-after:20px;margin-block-end:20px}.hero__icon-box ::slotted(.last[slot=icon-box-item]){-webkit-margin-after:0;margin-block-end:0}.hero__quote-content{-webkit-margin-before:auto;margin-block-start:auto;text-align:center;inline-size:100%}.is-xl .hero__quote-content{max-inline-size:500px;-webkit-box-flex:0;-ms-flex:0 1 500px;flex:0 1 500px;text-align:initial}.hero__quote::before,.hero__quote::after{content:'\"';font-size:var(--quote-size);font-weight:700;font-style:italic;line-height:0;color:#abb6b8;display:inline;position:relative}.hero__quote ::slotted([slot=quote]){font-size:var(--quote-size);font-weight:300;font-style:italic;display:inline}.hero__quote-author{text-align:end;font-size:1rem;opacity:0.8}.hero--sub .hero__content.is-xl{-webkit-margin-before:40px;margin-block-start:40px}.hero--sub .hero__content.is-xl .hero__primary{margin-block:0 40px;margin-inline:50px 0}.hero--sub .hero__content.is-xl .hero__secondary{padding-block:0 50px;padding-inline:40px 50px}.hero--sub .hero__content.is-xl ::slotted(.button[slot=primary-content]){-webkit-margin-before:8px !important;margin-block-start:8px !important}.hero--sub .hero__content.is-xl ::slotted(h1[slot=primary-content]){-webkit-margin-after:18px !important;margin-block-end:18px !important}.hero--sub .hero__content.is-xxl .hero__primary{margin-block:0 40px;margin-inline:83px 0}.hero--sub .hero__content.is-xxl .hero__secondary{padding-block:0 83px;padding-inline:40px 83px}";const n=class{constructor(t){i(this,t);this.handleGridChange=i=>{this.gridSizes=i.detail};this.HeroContent=()=>[!this.hasIconBox&&this.hasCtas?e("div",{class:"hero__ctas"},e("slot",{name:"secondary-ctas"})):"",e("div",{class:"hero__scrim"},e("slot",{name:"scrim"})),e("nano-grid",{onNanoBpChange:this.handleGridChange,class:"hero__content",xlCols:2,xlSize:this.largeScreenBP},e("nano-grid-item",{gridStates:"xl-col-span-2"},e("div",{class:"hero__breadcrumbs"},e("slot",{name:"breadcrumb"}))),e("nano-grid-item",{gridStates:this.hasSecondaryContent?"xl-col-span-1 xl-col-start-1 xl-row-start-2":"xl-col-span-2 xl-col-start-1 xl-row-start-2"},e("div",{class:"hero__primary"},e("div",{class:"hero__primary-content"},e("slot",{name:"back-btn"}),e("div",null,e("slot",{name:"primary-content"}))))),this.hasSecondaryContent&&e("nano-grid-item",{gridStates:"xl-col-span-1 xl-col-start-2 xl-row-start-2"},e("div",{class:"hero__secondary"},e("slot",{name:"secondary-content"}),this.hasIconBox&&e("div",{class:"hero__icon-box"},e("slot",{name:"icon-box"}),e("slot",{name:"icon-box-item"})),this.hasQuote&&e("div",{class:"hero__quote-content"},e("span",{class:"hero__quote"},e("slot",{name:"quote"})),e("div",{class:"hero__quote-author"},e("slot",{name:"quote-author"}))))))];this.gridSizes=[];this.hasIconBox=undefined;this.hasScrim=undefined;this.hasSecondaryContent=undefined;this.hasQuote=undefined;this.hasBg=undefined;this.hasBackBtn=undefined;this.hasCtas=undefined;this.breadCrumbs=undefined;this.iconBoxItems=undefined;this.imgSrc=undefined;this.imgSrcSet=null;this.largeScreenBP=900;this.theme="dark";this.level="top"}breadCrumbChange(){this.breadCrumbs.filter((i=>i.tagName==="A"&&!i.nextElementSibling.classList.contains("slash"))).forEach((i=>{i.insertAdjacentHTML("afterend",'<span slot="breadcrumb" class="slash">/</span>')}))}iconBoxItemChange(){this.iconBoxItems.forEach((i=>i.classList.remove("last")));if(this.iconBoxItems[this.iconBoxItems.length-1]&&this.iconBoxItems[this.iconBoxItems.length-1].classList)this.iconBoxItems[this.iconBoxItems.length-1].classList.add("last")}slotChangeObserver(){if(this.mo)this.mo.disconnect();const i=this.mo=new MutationObserver((()=>this.processSlottedContent()));i.observe(this.host,{childList:true})}processSlottedContent(){this.hasCtas=!!this.host.querySelector('[slot="secondary-ctas"]');this.iconBoxItems=Array.from(this.host.querySelectorAll('[slot="icon-box-item"]'));this.hasIconBox=!!this.host.querySelector('[slot="icon-box"]')||!!this.iconBoxItems.length;this.hasScrim=!!this.host.querySelector('[slot="scrim"]');this.breadCrumbs=Array.from(this.host.querySelectorAll('[slot="breadcrumb"]'));this.hasSecondaryContent=!!this.host.querySelector('[slot="icon-box"]')||!!this.host.querySelector('[slot="quote"]')||!!this.host.querySelector('[slot="icon-box-item"]')||!!this.host.querySelector('[slot="secondary-content"]');this.hasBg=!!this.host.querySelector('[slot="background"]')||!!this.imgSrc;this.hasBackBtn=!!this.host.querySelector('[slot="back-btn"]');this.hasQuote=!!this.host.querySelector('[slot="quote"]')}disconnectedCallback(){if(this.mo)this.mo.disconnect()}componentDidLoad(){this.slotChangeObserver()}componentWillLoad(){this.processSlottedContent()}render(){const i=this.host.dir==="rtl"||this.host.ownerDocument.dir==="rtl";return e(t,{class:{[this.gridSizes.join(" ")]:true}},e("div",{class:{hero:true,"hero--light":this.theme==="light","hero--secondary":this.hasSecondaryContent,"hero--iconbox":this.hasIconBox,"hero--rtl":i,"hero--scrim":this.hasScrim,"hero--breadcrumb":!!this.breadCrumbs.length,"hero--hasbg":this.hasBg,"hero--backbtn":this.hasBackBtn,"hero--sub":this.level==="sub"}},e("div",{class:"hero__bg-wrap"},!!this.imgSrc&&e("nano-img",{class:"hero__img",lazy:false,background:true,srcSet:this.imgSrcSet,src:this.imgSrc},e(this.HeroContent,null)),!this.imgSrc&&[e("div",{class:"hero__bg-slot"},e("slot",{name:"background"})),e(this.HeroContent,null)])))}get host(){return o(this)}static get watchers(){return{breadCrumbs:["breadCrumbChange"],iconBoxItems:["iconBoxItemChange"]}}};n.style=r;export{n as nano_hero};
5
- //# sourceMappingURL=p-c5bb5540.entry.js.map
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{r as n,h as a,g as e}from"./p-1fe12320.js";const t=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{display:inline-block;--base-color-rgb:var(--nano-indicator-rgb, 84, 140, 175);--indicator-color:var(--nano-indicator-color, rgba(var(--base-color-rgb), 1));--track-color:var(--nano-track-color, rgba(var(--base-color-rgb), 0.2));--overlay-color:var(--nano-layer-overlay-light, rgba(255, 255, 255, .7))}.spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}:host([overlay]:not([overlay=false])) .spinner{position:absolute;inset:0}:host([overlay]:not([overlay=false])) .spinner .spinner__loader,:host([overlay]:not([overlay=false])) .spinner .spinner__text{z-index:1}.spinner__overlay{background:var(--overlay-color);position:absolute;inset:0;z-index:0;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.spinner__loader{font-size:var(--spinner-scale, 1em)}.spinner__spin{display:block;margin:auto;inline-size:1em;block-size:1em;border-radius:50%;border:solid 0.1em var(--track-color);border-block-start-color:var(--indicator-color);border-inline-end-color:var(--indicator-color);border-inline-start-color:var(--indicator-color);-webkit-animation:1s linear infinite spin;animation:1s linear infinite spin}.spinner__dna{font-size:0.2286em;display:-webkit-box;display:-ms-flexbox;display:flex}.spinner__dnatrack{position:relative;padding-block:0;padding-inline:0.625em;block-size:4.375em;inline-size:0.625em;overflow:hidden}.spinner__dnatrack::before{content:"";position:absolute;inset-block-start:1.875em;inset-inline-start:50%;-webkit-transform:translateX(-50%) translateZ(0);transform:translateX(-50%) translateZ(0);inline-size:0.0625em;inline-size:max(.0625em, 1px);block-size:0.625em;background:var(--track-color);-webkit-animation:flex 1.5s linear infinite;animation:flex 1.5s linear infinite;-webkit-transform-origin:center center;transform-origin:center center}.spinner__dnatrack--2::before{-webkit-animation:flex 1.5s -1.3s linear infinite;animation:flex 1.5s -1.3s linear infinite}.spinner__dnatrack--3::before{-webkit-animation:flex 1.5s -1.1s linear infinite;animation:flex 1.5s -1.1s linear infinite}.spinner__dnatrack--4::before{-webkit-animation:flex 1.5s -0.9s linear infinite;animation:flex 1.5s -0.9s linear infinite}.spinner__dnatrack--5::before{-webkit-animation:flex 1.5s -0.75s linear infinite;animation:flex 1.5s -0.75s linear infinite}.spinner__dnadot{position:absolute;inline-size:0.5em;block-size:0.5em;border-radius:50% 50%;background:var(--indicator-color);-webkit-animation:rotate 1.5s linear infinite;animation:rotate 1.5s linear infinite;-webkit-transform-origin:center center;transform-origin:center center;inset-inline-start:50%;-webkit-transform:translateX(-50%) translateZ(0) translateY(0);transform:translateX(-50%) translateZ(0) translateY(0)}.spinner__dnadot--2{-webkit-animation:rotate 1.5s -0.75s linear infinite;animation:rotate 1.5s -0.75s linear infinite}.spinner__dnadot--3{-webkit-animation:rotate 1.5s -1.3s linear infinite;animation:rotate 1.5s -1.3s linear infinite}.spinner__dnadot--4{-webkit-animation:rotate 1.5s -0.55s linear infinite;animation:rotate 1.5s -0.55s linear infinite}.spinner__dnadot--5{-webkit-animation:rotate 1.5s -1.1s linear infinite;animation:rotate 1.5s -1.1s linear infinite}.spinner__dnadot--6{-webkit-animation:rotate 1.5s -0.35s linear infinite;animation:rotate 1.5s -0.35s linear infinite}.spinner__dnadot--7{-webkit-animation:rotate 1.5s -0.9s linear infinite;animation:rotate 1.5s -0.9s linear infinite}.spinner__dnadot--8{-webkit-animation:rotate 1.5s -0.15s linear infinite;animation:rotate 1.5s -0.15s linear infinite}.spinner__dnadot--9{-webkit-animation:rotate 1.5s -0.75s linear infinite;animation:rotate 1.5s -0.75s linear infinite}.spinner__dnadot--10{-webkit-animation:rotate 1.5s 0s linear infinite;animation:rotate 1.5s 0s linear infinite}.spinner__text{text-align:center;position:relative;-webkit-margin-before:0.5em;margin-block-start:0.5em}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes rotate{0%,100%{-webkit-transform:translateX(-50%) translateY(0) scale(1);transform:translateX(-50%) translateY(0) scale(1)}25%{-webkit-transform:translateX(-50%) translateY(1.875em) scale(2);transform:translateX(-50%) translateY(1.875em) scale(2)}50%{-webkit-transform:translateX(-50%) translateY(3.75em) scale(1);transform:translateX(-50%) translateY(3.75em) scale(1)}75%{-webkit-transform:translateX(-50%) translateY(1.875em) scale(0.3);transform:translateX(-50%) translateY(1.875em) scale(0.3)}}@keyframes rotate{0%,100%{-webkit-transform:translateX(-50%) translateY(0) scale(1);transform:translateX(-50%) translateY(0) scale(1)}25%{-webkit-transform:translateX(-50%) translateY(1.875em) scale(2);transform:translateX(-50%) translateY(1.875em) scale(2)}50%{-webkit-transform:translateX(-50%) translateY(3.75em) scale(1);transform:translateX(-50%) translateY(3.75em) scale(1)}75%{-webkit-transform:translateX(-50%) translateY(1.875em) scale(0.3);transform:translateX(-50%) translateY(1.875em) scale(0.3)}}@-webkit-keyframes flex{0%,100%{-webkit-transform:translateX(-50%) scaleY(5);transform:translateX(-50%) scaleY(5)}25%{-webkit-transform:translateX(-50%) scaleY(1);transform:translateX(-50%) scaleY(1)}50%{-webkit-transform:translateX(-50%) scaleY(5);transform:translateX(-50%) scaleY(5)}75%{-webkit-transform:translateX(-50%) scaleY(1);transform:translateX(-50%) scaleY(1)}}@keyframes flex{0%,100%{-webkit-transform:translateX(-50%) scaleY(5);transform:translateX(-50%) scaleY(5)}25%{-webkit-transform:translateX(-50%) scaleY(1);transform:translateX(-50%) scaleY(1)}50%{-webkit-transform:translateX(-50%) scaleY(5);transform:translateX(-50%) scaleY(5)}75%{-webkit-transform:translateX(-50%) scaleY(1);transform:translateX(-50%) scaleY(1)}}';const i=class{constructor(a){n(this,a);this.hasText=false;this.type="dna";this.overlay=false}componentWillLoad(){this.hasText=!!this.el.childNodes.length}render(){return a("div",{class:"spinner","aria-busy":"true","aria-live":"polite"},a("div",{class:"spinner__loader"},this.type==="dna"&&a("div",{class:"spinner__dna"},a("div",{class:"spinner__dnatrack spinner__dnatrack--1"},a("div",{class:"spinner__dnadot spinner__dnadot--1"}),a("div",{class:"spinner__dnadot spinner__dnadot--2"})),a("div",{class:"spinner__dnatrack spinner__dnatrack--2"},a("div",{class:"spinner__dnadot spinner__dnadot--3"}),a("div",{class:"spinner__dnadot spinner__dnadot--4"})),a("div",{class:"spinner__dnatrack spinner__dnatrack--3"},a("div",{class:"spinner__dnadot spinner__dnadot--5"}),a("div",{class:"spinner__dnadot spinner__dnadot--6"})),a("div",{class:"spinner__dnatrack spinner__dnatrack--4"},a("div",{class:"spinner__dnadot spinner__dnadot--7"}),a("div",{class:"spinner__dnadot spinner__dnadot--8"})),a("div",{class:"spinner__dnatrack spinner__dnatrack--5"},a("div",{class:"spinner__dnadot spinner__dnadot--9"}),a("div",{class:"spinner__dnadot spinner__dnadot--10"}))),this.type==="circle"&&a("span",{class:"spinner__spin"})),this.hasText&&a("div",{class:"spinner__text"},a("slot",null)),this.overlay&&a("div",{class:"spinner__overlay"}))}get el(){return e(this)}};i.style=t;export{i as nano_spinner};
5
- //# sourceMappingURL=p-d8e8d7e3.entry.js.map