@nanoporetech-digital/components 5.2.1 → 5.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 (259) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/{_commonjsHelpers-9f2314fc.js → _commonjsHelpers-29614748.js} +1 -17
  3. package/dist/cjs/_commonjsHelpers-29614748.js.map +1 -0
  4. package/dist/cjs/algoliasearch-lite.esm.browser-992a2eff.js +922 -0
  5. package/dist/cjs/algoliasearch-lite.esm.browser-992a2eff.js.map +1 -0
  6. package/dist/cjs/component-store-21cb4901.js +328 -0
  7. package/dist/cjs/component-store-21cb4901.js.map +1 -0
  8. package/dist/cjs/events-db0a42ee.js +39 -0
  9. package/dist/cjs/events-db0a42ee.js.map +1 -0
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/cjs/nano-alert.cjs.entry.js +9 -2
  12. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-algolia-filter.cjs.entry.js +1 -2
  14. package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-algolia-input.cjs.entry.js +8 -4
  16. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-algolia.cjs.entry.js +4 -4
  18. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-components.cjs.js +1 -1
  20. package/dist/cjs/nano-datalist_3.cjs.entry.js +1 -1
  21. package/dist/cjs/nano-dialog.cjs.entry.js +23 -22
  22. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-drawer.cjs.entry.js +169 -111
  24. package/dist/cjs/nano-drawer.cjs.entry.js.map +1 -1
  25. package/dist/cjs/nano-dropdown.cjs.entry.js +16 -2
  26. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  27. package/dist/cjs/nano-global-nav.cjs.entry.js +5 -6
  28. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nano-global-search-results.cjs.entry.js +2 -1
  30. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nano-slides.cjs.entry.js +1 -1
  32. package/dist/cjs/nano-sortable.cjs.entry.js +3 -15
  33. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nano-sticker.cjs.entry.js +16 -9
  35. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  36. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -2
  37. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  38. package/dist/cjs/{nano-table-10a40ab3.js → nano-table-e15cc6b0.js} +6 -6
  39. package/dist/cjs/nano-table-e15cc6b0.js.map +1 -0
  40. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  41. package/dist/cjs/{slot-a448c1a7.js → slot-2dd6ed1d.js} +20 -15
  42. package/dist/cjs/slot-2dd6ed1d.js.map +1 -0
  43. package/dist/cjs/{table.worker-f04588c1.js → table.worker-8759e6ea.js} +2 -2
  44. package/dist/cjs/table.worker-8759e6ea.js.map +1 -0
  45. package/dist/collection/components/alert/alert.css +15 -0
  46. package/dist/collection/components/alert/alert.js +10 -2
  47. package/dist/collection/components/alert/alert.js.map +1 -1
  48. package/dist/collection/components/algolia/algolia-interface.js.map +1 -1
  49. package/dist/collection/components/algolia/algolia.js +1 -1
  50. package/dist/collection/components/algolia/algolia.js.map +1 -1
  51. package/dist/collection/components/dialog/dialog.css +1 -17
  52. package/dist/collection/components/dialog/dialog.js +31 -20
  53. package/dist/collection/components/dialog/dialog.js.map +1 -1
  54. package/dist/collection/components/drawer/drawer.css +136 -67
  55. package/dist/collection/components/drawer/drawer.js +282 -154
  56. package/dist/collection/components/drawer/drawer.js.map +1 -1
  57. package/dist/collection/components/dropdown/dropdown.css +10 -0
  58. package/dist/collection/components/dropdown/dropdown.js +15 -1
  59. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  60. package/dist/collection/components/global-nav/global-nav.js +2 -2
  61. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  62. package/dist/collection/components/global-nav/style/global-nav.css +5 -1
  63. package/dist/collection/components/global-search-results/global-search-results.js +2 -1
  64. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  65. package/dist/collection/components/sticker/sticker.js +16 -9
  66. package/dist/collection/components/sticker/sticker.js.map +1 -1
  67. package/dist/collection/components/table/table.pin-service.js +4 -4
  68. package/dist/collection/components/table/table.pin-service.js.map +1 -1
  69. package/dist/collection/utils/events.js +17 -0
  70. package/dist/collection/utils/events.js.map +1 -1
  71. package/dist/collection/utils/slot.js +19 -14
  72. package/dist/collection/utils/slot.js.map +1 -1
  73. package/dist/collection/utils/store/get-set.js +6 -12
  74. package/dist/collection/utils/store/get-set.js.map +1 -1
  75. package/dist/components/_commonjsHelpers.js +1 -16
  76. package/dist/components/_commonjsHelpers.js.map +1 -1
  77. package/dist/components/algolia.js +2 -2
  78. package/dist/components/algolia.js.map +1 -1
  79. package/dist/components/algoliasearch-lite.esm.browser.js +920 -0
  80. package/dist/components/algoliasearch-lite.esm.browser.js.map +1 -0
  81. package/dist/components/component-store.js +68 -2001
  82. package/dist/components/component-store.js.map +1 -1
  83. package/dist/components/dropdown.js +16 -2
  84. package/dist/components/dropdown.js.map +1 -1
  85. package/dist/components/events.js +36 -0
  86. package/dist/components/events.js.map +1 -0
  87. package/dist/components/nano-alert.js +10 -2
  88. package/dist/components/nano-alert.js.map +1 -1
  89. package/dist/components/nano-algolia-input.js +6 -1
  90. package/dist/components/nano-algolia-input.js.map +1 -1
  91. package/dist/components/nano-dialog.js +21 -20
  92. package/dist/components/nano-dialog.js.map +1 -1
  93. package/dist/components/nano-drawer.js +205 -122
  94. package/dist/components/nano-drawer.js.map +1 -1
  95. package/dist/components/nano-global-nav.js +4 -4
  96. package/dist/components/nano-global-nav.js.map +1 -1
  97. package/dist/components/nano-global-search-results.js +2 -1
  98. package/dist/components/nano-global-search-results.js.map +1 -1
  99. package/dist/components/nano-sortable.js +1 -13
  100. package/dist/components/nano-sortable.js.map +1 -1
  101. package/dist/components/slot.js +19 -14
  102. package/dist/components/slot.js.map +1 -1
  103. package/dist/components/sticker.js +16 -9
  104. package/dist/components/sticker.js.map +1 -1
  105. package/dist/components/table.js +4 -4
  106. package/dist/components/table.js.map +1 -1
  107. package/dist/esm/{_commonjsHelpers-e401b2a2.js → _commonjsHelpers-04a0e019.js} +2 -17
  108. package/dist/esm/_commonjsHelpers-04a0e019.js.map +1 -0
  109. package/dist/esm/algoliasearch-lite.esm.browser-04891fdc.js +920 -0
  110. package/dist/esm/algoliasearch-lite.esm.browser-04891fdc.js.map +1 -0
  111. package/dist/esm/component-store-65d7e36a.js +326 -0
  112. package/dist/esm/component-store-65d7e36a.js.map +1 -0
  113. package/dist/esm/events-6a805b42.js +36 -0
  114. package/dist/esm/events-6a805b42.js.map +1 -0
  115. package/dist/esm/loader.js +1 -1
  116. package/dist/esm/nano-alert.entry.js +9 -2
  117. package/dist/esm/nano-alert.entry.js.map +1 -1
  118. package/dist/esm/nano-algolia-filter.entry.js +1 -2
  119. package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
  120. package/dist/esm/nano-algolia-input.entry.js +7 -3
  121. package/dist/esm/nano-algolia-input.entry.js.map +1 -1
  122. package/dist/esm/nano-algolia.entry.js +4 -4
  123. package/dist/esm/nano-algolia.entry.js.map +1 -1
  124. package/dist/esm/nano-components.js +1 -1
  125. package/dist/esm/nano-datalist_3.entry.js +1 -1
  126. package/dist/esm/nano-dialog.entry.js +23 -22
  127. package/dist/esm/nano-dialog.entry.js.map +1 -1
  128. package/dist/esm/nano-drawer.entry.js +171 -113
  129. package/dist/esm/nano-drawer.entry.js.map +1 -1
  130. package/dist/esm/nano-dropdown.entry.js +16 -2
  131. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  132. package/dist/esm/nano-global-nav.entry.js +5 -6
  133. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  134. package/dist/esm/nano-global-search-results.entry.js +2 -1
  135. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  136. package/dist/esm/nano-slides.entry.js +1 -1
  137. package/dist/esm/nano-sortable.entry.js +1 -13
  138. package/dist/esm/nano-sortable.entry.js.map +1 -1
  139. package/dist/esm/nano-sticker.entry.js +16 -9
  140. package/dist/esm/nano-sticker.entry.js.map +1 -1
  141. package/dist/esm/nano-tab-group.entry.js +1 -2
  142. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  143. package/dist/esm/{nano-table-2bbcaa8d.js → nano-table-5c5bd3f2.js} +6 -6
  144. package/dist/esm/nano-table-5c5bd3f2.js.map +1 -0
  145. package/dist/esm/nano-table.entry.js +1 -1
  146. package/dist/esm/{slot-a4f6e2af.js → slot-8126e238.js} +20 -15
  147. package/dist/esm/slot-8126e238.js.map +1 -0
  148. package/dist/esm/{table.worker-7324ad73.js → table.worker-e7f4f50c.js} +2 -2
  149. package/dist/esm/table.worker-e7f4f50c.js.map +1 -0
  150. package/dist/nano-components/nano-components.css +1 -1
  151. package/dist/nano-components/nano-components.esm.js +1 -1
  152. package/dist/nano-components/nano-components.esm.js.map +1 -1
  153. package/dist/nano-components/p-0301e8f7.entry.js +5 -0
  154. package/dist/nano-components/p-0301e8f7.entry.js.map +1 -0
  155. package/dist/nano-components/p-27422aa9.entry.js +5 -0
  156. package/dist/nano-components/{p-6920ad69.entry.js.map → p-27422aa9.entry.js.map} +1 -1
  157. package/dist/nano-components/{p-52ae36ec.js → p-2d79f5b3.js} +2 -2
  158. package/dist/nano-components/{p-0697795a.entry.js → p-31c23d6e.entry.js} +2 -2
  159. package/dist/nano-components/p-31c23d6e.entry.js.map +1 -0
  160. package/dist/nano-components/p-487de04d.entry.js.map +1 -1
  161. package/dist/nano-components/p-570d2e50.entry.js +5 -0
  162. package/dist/nano-components/p-570d2e50.entry.js.map +1 -0
  163. package/dist/nano-components/{p-3eb6d833.entry.js → p-5a4b3fa9.entry.js} +2 -2
  164. package/dist/nano-components/p-653ae985.js +5 -0
  165. package/dist/nano-components/p-653ae985.js.map +1 -0
  166. package/dist/nano-components/p-676a4744.entry.js +5 -0
  167. package/dist/nano-components/{p-d0eefd52.entry.js.map → p-676a4744.entry.js.map} +1 -1
  168. package/dist/nano-components/p-8fe51abf.js +5 -0
  169. package/dist/nano-components/{p-4884b65a.entry.js → p-90cd4f56.entry.js} +2 -2
  170. package/dist/nano-components/p-90cd4f56.entry.js.map +1 -0
  171. package/dist/nano-components/p-9ba81ed2.js +5 -0
  172. package/dist/nano-components/p-9ba81ed2.js.map +1 -0
  173. package/dist/nano-components/p-9bfdee71.js +5 -0
  174. package/dist/nano-components/p-9bfdee71.js.map +1 -0
  175. package/dist/nano-components/p-a8d6ca38.entry.js +5 -0
  176. package/dist/nano-components/p-a8d6ca38.entry.js.map +1 -0
  177. package/dist/nano-components/p-ace7743c.entry.js +5 -0
  178. package/dist/nano-components/p-ace7743c.entry.js.map +1 -0
  179. package/dist/nano-components/{p-39aec880.entry.js → p-bab2888b.entry.js} +2 -2
  180. package/dist/nano-components/p-bdb5b6fc.entry.js +5 -0
  181. package/dist/nano-components/p-bdb5b6fc.entry.js.map +1 -0
  182. package/dist/nano-components/p-cad86fb8.js +5 -0
  183. package/dist/nano-components/p-cad86fb8.js.map +1 -0
  184. package/dist/nano-components/p-dc565459.js +5 -0
  185. package/dist/nano-components/p-dc565459.js.map +1 -0
  186. package/dist/nano-components/p-ede12d35.entry.js +5 -0
  187. package/dist/nano-components/p-ede12d35.entry.js.map +1 -0
  188. package/dist/nano-components/p-f504b1df.entry.js +7 -0
  189. package/dist/nano-components/p-f504b1df.entry.js.map +1 -0
  190. package/dist/nano-components/{p-db370094.entry.js → p-f7a4c62b.entry.js} +2 -2
  191. package/dist/themes/london-calling.css.map +1 -1
  192. package/dist/themes/nanopore.cn.css.map +1 -1
  193. package/dist/themes/nanopore.css.map +1 -1
  194. package/dist/types/components/alert/alert.d.ts +1 -0
  195. package/dist/types/components/algolia/algolia-interface.d.ts +1 -1
  196. package/dist/types/components/algolia/algolia.d.ts +1 -1
  197. package/dist/types/components/dialog/dialog.d.ts +15 -4
  198. package/dist/types/components/drawer/drawer.d.ts +69 -50
  199. package/dist/types/components/sticker/sticker.d.ts +4 -4
  200. package/dist/types/components.d.ts +50 -28
  201. package/dist/types/types/algolia.d.ts +4 -0
  202. package/dist/types/types/scss.vars.d.ts +4 -0
  203. package/dist/types/utils/events.d.ts +7 -0
  204. package/dist/types/utils/slot.d.ts +3 -3
  205. package/docs-json.json +268 -61
  206. package/docs-vscode.json +28 -11
  207. package/hydrate/index.js +1335 -2236
  208. package/package.json +4 -4
  209. package/dist/cjs/_commonjsHelpers-9f2314fc.js.map +0 -1
  210. package/dist/cjs/algoliasearch.umd-689c1560.js +0 -15
  211. package/dist/cjs/algoliasearch.umd-689c1560.js.map +0 -1
  212. package/dist/cjs/component-store-f1dc1276.js +0 -2261
  213. package/dist/cjs/component-store-f1dc1276.js.map +0 -1
  214. package/dist/cjs/nano-table-10a40ab3.js.map +0 -1
  215. package/dist/cjs/slot-a448c1a7.js.map +0 -1
  216. package/dist/cjs/table.worker-f04588c1.js.map +0 -1
  217. package/dist/components/algoliasearch.umd.js +0 -13
  218. package/dist/components/algoliasearch.umd.js.map +0 -1
  219. package/dist/esm/_commonjsHelpers-e401b2a2.js.map +0 -1
  220. package/dist/esm/algoliasearch.umd-4f7efa84.js +0 -13
  221. package/dist/esm/algoliasearch.umd-4f7efa84.js.map +0 -1
  222. package/dist/esm/component-store-c23ebc9c.js +0 -2259
  223. package/dist/esm/component-store-c23ebc9c.js.map +0 -1
  224. package/dist/esm/nano-table-2bbcaa8d.js.map +0 -1
  225. package/dist/esm/slot-a4f6e2af.js.map +0 -1
  226. package/dist/esm/table.worker-7324ad73.js.map +0 -1
  227. package/dist/nano-components/p-0697795a.entry.js.map +0 -1
  228. package/dist/nano-components/p-17b099cc.entry.js +0 -5
  229. package/dist/nano-components/p-17b099cc.entry.js.map +0 -1
  230. package/dist/nano-components/p-1a0b5bc3.js +0 -5
  231. package/dist/nano-components/p-1a0b5bc3.js.map +0 -1
  232. package/dist/nano-components/p-4884b65a.entry.js.map +0 -1
  233. package/dist/nano-components/p-58cf5446.js +0 -5
  234. package/dist/nano-components/p-58cf5446.js.map +0 -1
  235. package/dist/nano-components/p-6920ad69.entry.js +0 -5
  236. package/dist/nano-components/p-69a3e911.js +0 -5
  237. package/dist/nano-components/p-7baa9e14.entry.js +0 -5
  238. package/dist/nano-components/p-7baa9e14.entry.js.map +0 -1
  239. package/dist/nano-components/p-9b533dc3.js +0 -5
  240. package/dist/nano-components/p-9b533dc3.js.map +0 -1
  241. package/dist/nano-components/p-a362bd23.entry.js +0 -5
  242. package/dist/nano-components/p-a362bd23.entry.js.map +0 -1
  243. package/dist/nano-components/p-b04fd7ca.entry.js +0 -5
  244. package/dist/nano-components/p-b04fd7ca.entry.js.map +0 -1
  245. package/dist/nano-components/p-b72df1aa.entry.js +0 -5
  246. package/dist/nano-components/p-b72df1aa.entry.js.map +0 -1
  247. package/dist/nano-components/p-ce5efc3f.entry.js +0 -5
  248. package/dist/nano-components/p-ce5efc3f.entry.js.map +0 -1
  249. package/dist/nano-components/p-d0eefd52.entry.js +0 -5
  250. package/dist/nano-components/p-e2b2b015.entry.js +0 -5
  251. package/dist/nano-components/p-e2b2b015.entry.js.map +0 -1
  252. package/dist/nano-components/p-ed6adde2.js +0 -7
  253. package/dist/nano-components/p-ed6adde2.js.map +0 -1
  254. package/dist/types/dom.ie.d.ts +0 -3
  255. /package/dist/nano-components/{p-39aec880.entry.js.map → p-2d79f5b3.js.map} +0 -0
  256. /package/dist/nano-components/{p-3eb6d833.entry.js.map → p-5a4b3fa9.entry.js.map} +0 -0
  257. /package/dist/nano-components/{p-52ae36ec.js.map → p-8fe51abf.js.map} +0 -0
  258. /package/dist/nano-components/{p-69a3e911.js.map → p-bab2888b.entry.js.map} +0 -0
  259. /package/dist/nano-components/{p-db370094.entry.js.map → p-f7a4c62b.entry.js.map} +0 -0
@@ -229,8 +229,8 @@ export class TablePinService {
229
229
  // so only aggregate height / offset when cacheParent is different from current parent.
230
230
  // Devs can override this behaviour by manually setting `--pin-bottom` on the table row
231
231
  if (cacheParent !== currParent) {
232
- currParent.style.setProperty('--pin-top', `${heightAggregate}px`);
233
- heightAggregate += height;
232
+ currParent.style.setProperty('--pin-top', `${heightAggregate - 1}px`);
233
+ heightAggregate += height - 1;
234
234
  cacheParent = currParent;
235
235
  }
236
236
  resolve();
@@ -268,8 +268,8 @@ export class TablePinService {
268
268
  // so only aggregate height / offset when cacheParent is different from current parent.
269
269
  // Devs can override this behaviour by manually setting `--pin-bottom` on the table row
270
270
  if (cacheParent !== currParent) {
271
- currParent.style.setProperty('--pin-bottom', `${heightAggregate}px`);
272
- heightAggregate += height;
271
+ currParent.style.setProperty('--pin-bottom', `${heightAggregate - 1}px`);
272
+ heightAggregate += height - 1;
273
273
  cacheParent = currParent;
274
274
  }
275
275
  resolve();
@@ -1 +1 @@
1
- {"version":3,"file":"table.pin-service.js","sourceRoot":"","sources":["../../../src/components/table/table.pin-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { readTask, writeTask } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\n\nfunction addStyleSheet(id, css) {\n const styleSheet =\n (document.getElementById(id) as HTMLStyleElement) ||\n document.createElement('style');\n styleSheet.id = id;\n styleSheet.innerHTML = css;\n if (!styleSheet.isConnected) document.head.append(styleSheet);\n}\n\n/**\n * Manages the complex business of table 'pinning'; sticking columns and rows to the scrolling parent element.\n *\n * *knowing* when an element is pinned is tricky.\n * Managing the display of multiple, side-by-side pinned elements is trickier still.\n *\n * Pinning table columns are very different from pinning table rows:\n * - Rows are actual elements we can select, measure and apply styles to.\n * - Columns are disparate collections of elements that are much harder to select, measure and apply styles to.\n *\n * With this in mind, how columns and rows are pinned is different:\n * Rows can have changes applied directly, Columns have changes applied via dynamic stylesheets.\n *\n * The service is slightly opinionated on how it pins rows and columns (with some room for override):\n * - Pinned columns are stuck consecutively, without overlapping.\n * e.g. If column 'name' and 'surname' are both `pin: 'start'`; 'surname' will display **next** to name.\n * Both columns are important for context\n *\n * - Pinned rows are set to overlap *when* they have the same ancestor,\n * and stuck consecutively when they have a different ancestor.\n * e.g. `tbody > tr.pin ~ tr.pin` the second row will **overlap** the first; it's unlikely both rows will be important for context.\n * `thead > tr.pin`, `tbody > tr.pin`. Both rows are required for context so will require next to each other.\n *\n * Devs can override this behaviour by setting `--pin-start`, `--pin-end`, `--pin-top`, `--pin-bottom` custom vars.\n */\nexport class TablePinService {\n // Private state\n\n private cachedColMeta: WeakMap<HTMLElement, { width: number; idx: number }> =\n new WeakMap();\n private tableId: string;\n private tableEle: HTMLTableElement;\n private scrollElement: HTMLElement;\n private startColumns: HTMLCollection;\n private endColumns: HTMLCollection;\n private topRows: HTMLCollection;\n private bottomRows: HTMLCollection;\n private tableDims: { height: number; width: number };\n\n constructor(table: HTMLTableElement, scrollElement: HTMLElement) {\n this.tableEle = table;\n this.tableId = this.tableEle.id;\n this.scrollElement = scrollElement;\n\n // Secret sauce - `getElementsByClassName` is a live collection.\n // An HTMLCollection will keep itself up-to-date as elements come and go\n // So we can keep assessing on scroll\n\n this.startColumns = table\n .querySelector('thead')\n .getElementsByClassName(`${CSSNAMESPACE}__pin--start`);\n this.endColumns = table\n .querySelector('thead')\n .getElementsByClassName(`${CSSNAMESPACE}__pin--end`);\n this.topRows = table.getElementsByClassName(`${CSSNAMESPACE}__pin--top`);\n this.bottomRows = table.getElementsByClassName(\n `${CSSNAMESPACE}__pin--bottom`\n );\n this.onResize();\n }\n\n // Pinned cols & change detection\n private get pinnedStart() {\n return this._pinnedStart;\n }\n private set pinnedStart(cols: HTMLElement[]) {\n this._pinnedStart = cols;\n this.handlePinnedStartChange();\n }\n private _pinnedStart: HTMLElement[] = [];\n\n /**\n * Called when columns are either pinned or unpinned.\n * Attaches a tiny stylesheet to target the 'last' start column.\n * (e.g. We only want to apply drop shadow on last pinned start column - not all pinned columns)\n */\n private handlePinnedStartChange() {\n writeTask(() => {\n if (this.pinnedStart.length) {\n this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--start`);\n const lastActiveCol = this.cachedColMeta.get(\n this.pinnedStart[this.pinnedStart.length - 1]\n );\n\n addStyleSheet(\n `${this.tableId}-col-start-active-style`,\n /* css */ `\n #${this.tableId} tr > :nth-child(${lastActiveCol.idx + 1}) {\n --pin-start-active: 1;\n }\n `\n );\n } else {\n this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--start`);\n addStyleSheet(`${this.tableId}-col-start-active-style`, ``);\n }\n });\n }\n\n private get pinnedEnd() {\n return this._pinnedEnd;\n }\n private set pinnedEnd(cols: HTMLElement[]) {\n this._pinnedEnd = cols;\n this.handlePinnedEndChange();\n }\n private _pinnedEnd: HTMLElement[] = [];\n\n /**\n * Called when columns are either pinned or unpinned.\n * Attaches a tiny stylesheet to target the 'first' end column.\n * (e.g. We only want to apply drop shadow on first pinned end column - not all pinned columns)\n */\n private handlePinnedEndChange() {\n writeTask(() => {\n if (this.pinnedEnd.length) {\n this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--end`);\n const firstActiveCol = this.cachedColMeta.get(this.pinnedEnd[0]);\n\n addStyleSheet(\n `${this.tableId}-col-end-active-style`,\n /* css */ `\n #${this.tableId} tr > :nth-child(${\n firstActiveCol.idx + 1\n }) { --pin-end-active: 1; }\n `\n );\n } else {\n this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--end`);\n addStyleSheet(`${this.tableId}-col-end-active-style`, ``);\n }\n });\n }\n\n private get cssColDimensionCacheKey() {\n return this._cssColDimensionCacheKey;\n }\n private set cssColDimensionCacheKey(key: string) {\n if (key === this._cssColDimensionCacheKey) return;\n this._cssColDimensionCacheKey = key;\n this.createPinnedColDimensionStyles();\n }\n private _cssColDimensionCacheKey: string = '';\n\n /**\n * To only generate column dimension styles when necessary we\n * maintain a cache key string via serialised column meta.\n * Only when this key changes do we generate a new stylesheet\n */\n private generateCssCacheKey() {\n let key = '';\n for (const col of this.startColumns) {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n key += `${colMeta.idx}-start-${colMeta.width}`;\n }\n for (const col of this.endColumns) {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n key += `${colMeta.idx}-start-${colMeta.width}`;\n }\n this.cssColDimensionCacheKey = key;\n }\n\n /**\n * Generates pinned column width offset styles\n * so pinned columns can appear stuck together,\n * then attaches a stylesheet.\n */\n private createPinnedColDimensionStyles() {\n let widthS = 0;\n let widthE = 0;\n const startCols = Array.from(this.startColumns);\n const endCols = Array.from(this.endColumns).reverse();\n\n const css = /* css */ `\n ${startCols\n .map((col) => {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n widthS += colMeta.width || 0;\n return /* css */ `\n #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ td,\n #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ th {\n --pin-start: ${widthS - 1}px;\n }\n `;\n })\n .join('')}\n ${endCols\n .map((col) => {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n widthE += colMeta.width;\n return /* css */ `\n #${this.tableId} tr > td:has(~ :nth-child(${colMeta.idx + 1})),\n #${this.tableId} tr > th:has(~ :nth-child(${colMeta.idx + 1})) {\n --pin-end: ${widthE - 1}px;\n }\n `;\n })\n .join('')}\n `;\n addStyleSheet(`${this.tableId}-dimension-style`, css);\n }\n\n private getParentOffsets() {\n const { x, y } = this.scrollElement.getBoundingClientRect();\n\n let offsetX = x;\n let offsetY = y;\n\n if (this.scrollElement === document.documentElement) {\n offsetX = this.scrollElement.offsetLeft;\n offsetY = this.scrollElement.offsetTop;\n }\n return { offsetX, offsetY };\n }\n\n /**\n * Loops through all 'top' & 'bottom' rows (on scroll or resize)\n * Manages their visual state by applying classes on stuck / unstuck\n * And their pinned offset / distance\n */\n public assessRows() {\n if (!this.topRows.length && !this.bottomRows.length) return;\n\n // top rows\n if (this.topRows.length) {\n readTask(async () => {\n let heightAggregate = 0;\n let cacheParent: HTMLElement;\n const { offsetY } = this.getParentOffsets();\n\n for (const topRow of this.topRows) {\n const { y, height } = topRow.getBoundingClientRect();\n const currParent = topRow.parentElement;\n // we'll use the applied `--pin-top` css var to decide row offset.\n // This allows devs to override this behaviour through selector specificity\n const pinTop = getComputedStyle(topRow).getPropertyValue('--pin-top');\n const offset = pinTop !== '' ? parseFloat(pinTop) : heightAggregate;\n\n // we need to wait for the row to finish sticking\n // and generating it's offset (`--pin-top`) so we can see, on\n // subsequent rows *if* the offset was applied\n await new Promise<void>((resolve) =>\n writeTask(() => {\n if (y - offsetY <= offset) {\n topRow.classList.add(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--top`\n );\n } else {\n topRow.classList.remove(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--top`\n );\n }\n\n // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)\n // so only aggregate height / offset when cacheParent is different from current parent.\n // Devs can override this behaviour by manually setting `--pin-bottom` on the table row\n if (cacheParent !== currParent) {\n currParent.style.setProperty(\n '--pin-top',\n `${heightAggregate}px`\n );\n heightAggregate += height;\n cacheParent = currParent;\n }\n resolve();\n })\n );\n }\n });\n }\n\n // bottom rows\n if (this.bottomRows.length) {\n const bottomRows = Array.from(this.bottomRows).reverse();\n readTask(async () => {\n let cacheParent: HTMLElement;\n let heightAggregate = 0;\n const { offsetY } = this.getParentOffsets();\n\n for (const bottomRow of bottomRows) {\n if (!bottomRow.isConnected) continue;\n\n const { y, height } = bottomRow.getBoundingClientRect();\n const currParent = bottomRow.parentElement;\n // we'll use the applied `--pin-bottom` css var to decide row offset.\n // This allows devs to override this behaviour through selector specificity\n const pinBottom =\n getComputedStyle(bottomRow).getPropertyValue('--pin-bottom');\n const offset =\n pinBottom !== '' ? parseFloat(pinBottom) : heightAggregate;\n\n // we need to wait for the row to finish sticking\n // and generating it's offset (`--pin-bottom`) to we can see, on\n // subsequent rows *if* the offset was applied\n await new Promise<void>((resolve) =>\n writeTask(() => {\n if (this.tableDims.height + offsetY - (y + height) <= offset) {\n bottomRow.classList.add(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--bottom`\n );\n } else {\n bottomRow.classList.remove(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--bottom`\n );\n }\n\n // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)\n // so only aggregate height / offset when cacheParent is different from current parent.\n // Devs can override this behaviour by manually setting `--pin-bottom` on the table row\n if (cacheParent !== currParent) {\n currParent.style.setProperty(\n '--pin-bottom',\n `${heightAggregate}px`\n );\n heightAggregate += height;\n cacheParent = currParent;\n }\n resolve();\n })\n );\n }\n });\n }\n }\n\n /**\n * Loops through all 'start' & 'end' columns (on scroll or resize)\n * Caches meta about each column (e.g. size, position-index)\n * and decides which columns are pinned\n */\n public async assessCols() {\n if (!this.startColumns.length && !this.endColumns.length) return;\n\n let boundBox: DOMRect;\n let currPinned: HTMLElement;\n let parentEles: Element[];\n\n const done = new Promise<void>((resolve) => {\n // start cols\n if (this.startColumns.length) {\n readTask(() => {\n const { offsetX } = this.getParentOffsets();\n // cumulatively add widths of columns together\n // 'cos columns stick together\n let widthAggregate = offsetX;\n parentEles = Array.from(this.startColumns[0].parentElement.children);\n\n for (const startCol of this.startColumns) {\n boundBox = startCol.getBoundingClientRect();\n // cache meta for later\n this.cachedColMeta.set(startCol as HTMLElement, {\n width: boundBox.width,\n idx: parentEles.indexOf(startCol),\n });\n\n currPinned = this.pinnedStart.find((c) => c === startCol);\n if (boundBox.x < widthAggregate) {\n // this column is pinned\n if (!currPinned)\n this.pinnedStart = [\n ...this.pinnedStart,\n startCol as HTMLElement,\n ];\n } else if (currPinned) {\n // this column is unpinned\n this.pinnedStart = this.pinnedStart.filter((c) => c !== startCol);\n }\n widthAggregate += boundBox.width;\n }\n if (!this.endColumns.length) resolve();\n });\n }\n\n // end cols\n if (this.endColumns.length) {\n readTask(() => {\n const endCols = Array.from(this.endColumns).reverse();\n parentEles = Array.from(this.endColumns[0].parentElement.children);\n const { offsetX } = this.getParentOffsets();\n // cumulatively add widths of columns together\n // 'cos columns stick together\n let widthAggregate = 0;\n\n for (const endCol of endCols) {\n boundBox = endCol.getBoundingClientRect();\n // cache meta for later\n this.cachedColMeta.set(endCol as HTMLElement, {\n width: boundBox.width,\n idx: parentEles.indexOf(endCol),\n });\n\n currPinned = this.pinnedEnd.find((c) => c === endCol);\n if (\n this.tableDims.width + offsetX - boundBox.right <=\n widthAggregate\n ) {\n // this column is pinned\n if (!currPinned)\n this.pinnedEnd = [endCol as HTMLElement, ...this.pinnedEnd];\n } else if (currPinned) {\n // this column is unpinned\n this.pinnedEnd = this.pinnedEnd.filter((c) => c !== endCol);\n }\n widthAggregate += boundBox.width;\n }\n resolve();\n });\n }\n });\n\n await done;\n // potentially generate a new css stylesheet if anything changed\n this.generateCssCacheKey();\n }\n\n private cacheX = 0;\n private cacheY = 0;\n\n public onScroll(pos: { x: number; y: number }) {\n if (this.cacheX !== pos.x) {\n this.cacheX = pos.x;\n this.assessCols();\n }\n if (this.cacheY !== pos.y) {\n this.cacheY = pos.y;\n this.assessRows();\n }\n }\n\n public onResize() {\n const width = this.scrollElement.clientWidth;\n const height = this.scrollElement.clientHeight;\n\n this.tableDims = { width, height };\n this.assessCols();\n this.assessRows();\n }\n}\n"]}
1
+ {"version":3,"file":"table.pin-service.js","sourceRoot":"","sources":["../../../src/components/table/table.pin-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { readTask, writeTask } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\n\nfunction addStyleSheet(id, css) {\n const styleSheet =\n (document.getElementById(id) as HTMLStyleElement) ||\n document.createElement('style');\n styleSheet.id = id;\n styleSheet.innerHTML = css;\n if (!styleSheet.isConnected) document.head.append(styleSheet);\n}\n\n/**\n * Manages the complex business of table 'pinning'; sticking columns and rows to the scrolling parent element.\n *\n * *knowing* when an element is pinned is tricky.\n * Managing the display of multiple, side-by-side pinned elements is trickier still.\n *\n * Pinning table columns are very different from pinning table rows:\n * - Rows are actual elements we can select, measure and apply styles to.\n * - Columns are disparate collections of elements that are much harder to select, measure and apply styles to.\n *\n * With this in mind, how columns and rows are pinned is different:\n * Rows can have changes applied directly, Columns have changes applied via dynamic stylesheets.\n *\n * The service is slightly opinionated on how it pins rows and columns (with some room for override):\n * - Pinned columns are stuck consecutively, without overlapping.\n * e.g. If column 'name' and 'surname' are both `pin: 'start'`; 'surname' will display **next** to name.\n * Both columns are important for context\n *\n * - Pinned rows are set to overlap *when* they have the same ancestor,\n * and stuck consecutively when they have a different ancestor.\n * e.g. `tbody > tr.pin ~ tr.pin` the second row will **overlap** the first; it's unlikely both rows will be important for context.\n * `thead > tr.pin`, `tbody > tr.pin`. Both rows are required for context so will require next to each other.\n *\n * Devs can override this behaviour by setting `--pin-start`, `--pin-end`, `--pin-top`, `--pin-bottom` custom vars.\n */\nexport class TablePinService {\n // Private state\n\n private cachedColMeta: WeakMap<HTMLElement, { width: number; idx: number }> =\n new WeakMap();\n private tableId: string;\n private tableEle: HTMLTableElement;\n private scrollElement: HTMLElement;\n private startColumns: HTMLCollection;\n private endColumns: HTMLCollection;\n private topRows: HTMLCollection;\n private bottomRows: HTMLCollection;\n private tableDims: { height: number; width: number };\n\n constructor(table: HTMLTableElement, scrollElement: HTMLElement) {\n this.tableEle = table;\n this.tableId = this.tableEle.id;\n this.scrollElement = scrollElement;\n\n // Secret sauce - `getElementsByClassName` is a live collection.\n // An HTMLCollection will keep itself up-to-date as elements come and go\n // So we can keep assessing on scroll\n\n this.startColumns = table\n .querySelector('thead')\n .getElementsByClassName(`${CSSNAMESPACE}__pin--start`);\n this.endColumns = table\n .querySelector('thead')\n .getElementsByClassName(`${CSSNAMESPACE}__pin--end`);\n this.topRows = table.getElementsByClassName(`${CSSNAMESPACE}__pin--top`);\n this.bottomRows = table.getElementsByClassName(\n `${CSSNAMESPACE}__pin--bottom`\n );\n this.onResize();\n }\n\n // Pinned cols & change detection\n private get pinnedStart() {\n return this._pinnedStart;\n }\n private set pinnedStart(cols: HTMLElement[]) {\n this._pinnedStart = cols;\n this.handlePinnedStartChange();\n }\n private _pinnedStart: HTMLElement[] = [];\n\n /**\n * Called when columns are either pinned or unpinned.\n * Attaches a tiny stylesheet to target the 'last' start column.\n * (e.g. We only want to apply drop shadow on last pinned start column - not all pinned columns)\n */\n private handlePinnedStartChange() {\n writeTask(() => {\n if (this.pinnedStart.length) {\n this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--start`);\n const lastActiveCol = this.cachedColMeta.get(\n this.pinnedStart[this.pinnedStart.length - 1]\n );\n\n addStyleSheet(\n `${this.tableId}-col-start-active-style`,\n /* css */ `\n #${this.tableId} tr > :nth-child(${lastActiveCol.idx + 1}) {\n --pin-start-active: 1;\n }\n `\n );\n } else {\n this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--start`);\n addStyleSheet(`${this.tableId}-col-start-active-style`, ``);\n }\n });\n }\n\n private get pinnedEnd() {\n return this._pinnedEnd;\n }\n private set pinnedEnd(cols: HTMLElement[]) {\n this._pinnedEnd = cols;\n this.handlePinnedEndChange();\n }\n private _pinnedEnd: HTMLElement[] = [];\n\n /**\n * Called when columns are either pinned or unpinned.\n * Attaches a tiny stylesheet to target the 'first' end column.\n * (e.g. We only want to apply drop shadow on first pinned end column - not all pinned columns)\n */\n private handlePinnedEndChange() {\n writeTask(() => {\n if (this.pinnedEnd.length) {\n this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--end`);\n const firstActiveCol = this.cachedColMeta.get(this.pinnedEnd[0]);\n\n addStyleSheet(\n `${this.tableId}-col-end-active-style`,\n /* css */ `\n #${this.tableId} tr > :nth-child(${\n firstActiveCol.idx + 1\n }) { --pin-end-active: 1; }\n `\n );\n } else {\n this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--end`);\n addStyleSheet(`${this.tableId}-col-end-active-style`, ``);\n }\n });\n }\n\n private get cssColDimensionCacheKey() {\n return this._cssColDimensionCacheKey;\n }\n private set cssColDimensionCacheKey(key: string) {\n if (key === this._cssColDimensionCacheKey) return;\n this._cssColDimensionCacheKey = key;\n this.createPinnedColDimensionStyles();\n }\n private _cssColDimensionCacheKey: string = '';\n\n /**\n * To only generate column dimension styles when necessary we\n * maintain a cache key string via serialised column meta.\n * Only when this key changes do we generate a new stylesheet\n */\n private generateCssCacheKey() {\n let key = '';\n for (const col of this.startColumns) {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n key += `${colMeta.idx}-start-${colMeta.width}`;\n }\n for (const col of this.endColumns) {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n key += `${colMeta.idx}-start-${colMeta.width}`;\n }\n this.cssColDimensionCacheKey = key;\n }\n\n /**\n * Generates pinned column width offset styles\n * so pinned columns can appear stuck together,\n * then attaches a stylesheet.\n */\n private createPinnedColDimensionStyles() {\n let widthS = 0;\n let widthE = 0;\n const startCols = Array.from(this.startColumns);\n const endCols = Array.from(this.endColumns).reverse();\n\n const css = /* css */ `\n ${startCols\n .map((col) => {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n widthS += colMeta.width || 0;\n return /* css */ `\n #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ td,\n #${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ th {\n --pin-start: ${widthS - 1}px;\n }\n `;\n })\n .join('')}\n ${endCols\n .map((col) => {\n const colMeta = this.cachedColMeta.get(col as HTMLElement);\n widthE += colMeta.width;\n return /* css */ `\n #${this.tableId} tr > td:has(~ :nth-child(${colMeta.idx + 1})),\n #${this.tableId} tr > th:has(~ :nth-child(${colMeta.idx + 1})) {\n --pin-end: ${widthE - 1}px;\n }\n `;\n })\n .join('')}\n `;\n addStyleSheet(`${this.tableId}-dimension-style`, css);\n }\n\n private getParentOffsets() {\n const { x, y } = this.scrollElement.getBoundingClientRect();\n\n let offsetX = x;\n let offsetY = y;\n\n if (this.scrollElement === document.documentElement) {\n offsetX = this.scrollElement.offsetLeft;\n offsetY = this.scrollElement.offsetTop;\n }\n return { offsetX, offsetY };\n }\n\n /**\n * Loops through all 'top' & 'bottom' rows (on scroll or resize)\n * Manages their visual state by applying classes on stuck / unstuck\n * And their pinned offset / distance\n */\n public assessRows() {\n if (!this.topRows.length && !this.bottomRows.length) return;\n\n // top rows\n if (this.topRows.length) {\n readTask(async () => {\n let heightAggregate = 0;\n let cacheParent: HTMLElement;\n const { offsetY } = this.getParentOffsets();\n\n for (const topRow of this.topRows) {\n const { y, height } = topRow.getBoundingClientRect();\n const currParent = topRow.parentElement;\n // we'll use the applied `--pin-top` css var to decide row offset.\n // This allows devs to override this behaviour through selector specificity\n const pinTop = getComputedStyle(topRow).getPropertyValue('--pin-top');\n const offset = pinTop !== '' ? parseFloat(pinTop) : heightAggregate;\n\n // we need to wait for the row to finish sticking\n // and generating it's offset (`--pin-top`) so we can see, on\n // subsequent rows *if* the offset was applied\n await new Promise<void>((resolve) =>\n writeTask(() => {\n if (y - offsetY <= offset) {\n topRow.classList.add(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--top`\n );\n } else {\n topRow.classList.remove(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--top`\n );\n }\n\n // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)\n // so only aggregate height / offset when cacheParent is different from current parent.\n // Devs can override this behaviour by manually setting `--pin-bottom` on the table row\n if (cacheParent !== currParent) {\n currParent.style.setProperty(\n '--pin-top',\n `${heightAggregate - 1}px`\n );\n heightAggregate += height - 1;\n cacheParent = currParent;\n }\n resolve();\n })\n );\n }\n });\n }\n\n // bottom rows\n if (this.bottomRows.length) {\n const bottomRows = Array.from(this.bottomRows).reverse();\n readTask(async () => {\n let cacheParent: HTMLElement;\n let heightAggregate = 0;\n const { offsetY } = this.getParentOffsets();\n\n for (const bottomRow of bottomRows) {\n if (!bottomRow.isConnected) continue;\n\n const { y, height } = bottomRow.getBoundingClientRect();\n const currParent = bottomRow.parentElement;\n // we'll use the applied `--pin-bottom` css var to decide row offset.\n // This allows devs to override this behaviour through selector specificity\n const pinBottom =\n getComputedStyle(bottomRow).getPropertyValue('--pin-bottom');\n const offset =\n pinBottom !== '' ? parseFloat(pinBottom) : heightAggregate;\n\n // we need to wait for the row to finish sticking\n // and generating it's offset (`--pin-bottom`) to we can see, on\n // subsequent rows *if* the offset was applied\n await new Promise<void>((resolve) =>\n writeTask(() => {\n if (this.tableDims.height + offsetY - (y + height) <= offset) {\n bottomRow.classList.add(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--bottom`\n );\n } else {\n bottomRow.classList.remove(\n `${CSSNAMESPACE}__pinned`,\n `${CSSNAMESPACE}__pinned--bottom`\n );\n }\n\n // by default, we only want to stick one row from each parental block (thead, tbody, tfoot)\n // so only aggregate height / offset when cacheParent is different from current parent.\n // Devs can override this behaviour by manually setting `--pin-bottom` on the table row\n if (cacheParent !== currParent) {\n currParent.style.setProperty(\n '--pin-bottom',\n `${heightAggregate - 1}px`\n );\n heightAggregate += height - 1;\n cacheParent = currParent;\n }\n resolve();\n })\n );\n }\n });\n }\n }\n\n /**\n * Loops through all 'start' & 'end' columns (on scroll or resize)\n * Caches meta about each column (e.g. size, position-index)\n * and decides which columns are pinned\n */\n public async assessCols() {\n if (!this.startColumns.length && !this.endColumns.length) return;\n\n let boundBox: DOMRect;\n let currPinned: HTMLElement;\n let parentEles: Element[];\n\n const done = new Promise<void>((resolve) => {\n // start cols\n if (this.startColumns.length) {\n readTask(() => {\n const { offsetX } = this.getParentOffsets();\n // cumulatively add widths of columns together\n // 'cos columns stick together\n let widthAggregate = offsetX;\n parentEles = Array.from(this.startColumns[0].parentElement.children);\n\n for (const startCol of this.startColumns) {\n boundBox = startCol.getBoundingClientRect();\n // cache meta for later\n this.cachedColMeta.set(startCol as HTMLElement, {\n width: boundBox.width,\n idx: parentEles.indexOf(startCol),\n });\n\n currPinned = this.pinnedStart.find((c) => c === startCol);\n if (boundBox.x < widthAggregate) {\n // this column is pinned\n if (!currPinned)\n this.pinnedStart = [\n ...this.pinnedStart,\n startCol as HTMLElement,\n ];\n } else if (currPinned) {\n // this column is unpinned\n this.pinnedStart = this.pinnedStart.filter((c) => c !== startCol);\n }\n widthAggregate += boundBox.width;\n }\n if (!this.endColumns.length) resolve();\n });\n }\n\n // end cols\n if (this.endColumns.length) {\n readTask(() => {\n const endCols = Array.from(this.endColumns).reverse();\n parentEles = Array.from(this.endColumns[0].parentElement.children);\n const { offsetX } = this.getParentOffsets();\n // cumulatively add widths of columns together\n // 'cos columns stick together\n let widthAggregate = 0;\n\n for (const endCol of endCols) {\n boundBox = endCol.getBoundingClientRect();\n // cache meta for later\n this.cachedColMeta.set(endCol as HTMLElement, {\n width: boundBox.width,\n idx: parentEles.indexOf(endCol),\n });\n\n currPinned = this.pinnedEnd.find((c) => c === endCol);\n if (\n this.tableDims.width + offsetX - boundBox.right <=\n widthAggregate\n ) {\n // this column is pinned\n if (!currPinned)\n this.pinnedEnd = [endCol as HTMLElement, ...this.pinnedEnd];\n } else if (currPinned) {\n // this column is unpinned\n this.pinnedEnd = this.pinnedEnd.filter((c) => c !== endCol);\n }\n widthAggregate += boundBox.width;\n }\n resolve();\n });\n }\n });\n\n await done;\n // potentially generate a new css stylesheet if anything changed\n this.generateCssCacheKey();\n }\n\n private cacheX = 0;\n private cacheY = 0;\n\n public onScroll(pos: { x: number; y: number }) {\n if (this.cacheX !== pos.x) {\n this.cacheX = pos.x;\n this.assessCols();\n }\n if (this.cacheY !== pos.y) {\n this.cacheY = pos.y;\n this.assessRows();\n }\n }\n\n public onResize() {\n const width = this.scrollElement.clientWidth;\n const height = this.scrollElement.clientHeight;\n\n this.tableDims = { width, height };\n this.assessCols();\n this.assessRows();\n }\n}\n"]}
@@ -24,4 +24,21 @@ export function removeListeners(el, events, fn) {
24
24
  .split(' ')
25
25
  .forEach((e) => el.removeEventListener(e, fn));
26
26
  }
27
+ /**
28
+ * Waits for a specific event to be emitted from an element.
29
+ * Ignores events that bubble up from child elements.
30
+ * @param el an html element
31
+ * @param eventName name of the event
32
+ */
33
+ export function waitForEvent(el, eventName) {
34
+ return new Promise((resolve) => {
35
+ function done(event) {
36
+ if (event.target === el) {
37
+ el.removeEventListener(eventName, done);
38
+ resolve();
39
+ }
40
+ }
41
+ el.addEventListener(eventName, done);
42
+ });
43
+ }
27
44
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAsB,EACtB,MAAc,EACd,EAAsB,EACtB,IAA8B;EAE9B,MAAM;KACH,KAAK,CAAC,GAAG,CAAC;KACV,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,EAAE,CAAC,gBAAgB,CAAC,CAA8B,EAAE,EAAE,EAAE,IAAI,CAAC,CAC9D,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAsB,EACtB,MAAc,EACd,EAAsB;EAEtB,MAAM;KACH,KAAK,CAAC,GAAG,CAAC;KACV,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAA8B,EAAE,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC","sourcesContent":["/**\n * Add multiple event listeners with the same callback function\n * @param el the element which emits events\n * @param events the event names to listen to (string separated by a space)\n * @param fn the function to call\n * @param opts the event options to apply\n */\nexport function addListeners(\n el: Element | Document,\n events: string,\n fn: (e: Event) => void,\n opts?: AddEventListenerOptions\n) {\n events\n .split(' ')\n .forEach((e) =>\n el.addEventListener(e as keyof HTMLElementEventMap, fn, opts)\n );\n}\n\n/**\n * Remove multiple event listeners with the same callback function\n * @param el the element which emits events\n * @param events the event names to listen to (string separated by a space)\n * @param fn the function to call\n */\nexport function removeListeners(\n el: Element | Document,\n events: string,\n fn: (e: Event) => void\n) {\n events\n .split(' ')\n .forEach((e) => el.removeEventListener(e as keyof HTMLElementEventMap, fn));\n}\n"]}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAsB,EACtB,MAAc,EACd,EAAsB,EACtB,IAA8B;EAE9B,MAAM;KACH,KAAK,CAAC,GAAG,CAAC;KACV,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,EAAE,CAAC,gBAAgB,CAAC,CAA8B,EAAE,EAAE,EAAE,IAAI,CAAC,CAC9D,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAsB,EACtB,MAAc,EACd,EAAsB;EAEtB,MAAM;KACH,KAAK,CAAC,GAAG,CAAC;KACV,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAA8B,EAAE,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAe,EAAE,SAAiB;EAC7D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;IACnC,SAAS,IAAI,CAAC,KAAY;MACxB,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE;QACvB,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,CAAC;OACX;IACH,CAAC;IAED,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;EACvC,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * Add multiple event listeners with the same callback function\n * @param el the element which emits events\n * @param events the event names to listen to (string separated by a space)\n * @param fn the function to call\n * @param opts the event options to apply\n */\nexport function addListeners(\n el: Element | Document,\n events: string,\n fn: (e: Event) => void,\n opts?: AddEventListenerOptions\n) {\n events\n .split(' ')\n .forEach((e) =>\n el.addEventListener(e as keyof HTMLElementEventMap, fn, opts)\n );\n}\n\n/**\n * Remove multiple event listeners with the same callback function\n * @param el the element which emits events\n * @param events the event names to listen to (string separated by a space)\n * @param fn the function to call\n */\nexport function removeListeners(\n el: Element | Document,\n events: string,\n fn: (e: Event) => void\n) {\n events\n .split(' ')\n .forEach((e) => el.removeEventListener(e as keyof HTMLElementEventMap, fn));\n}\n\n/**\n * Waits for a specific event to be emitted from an element.\n * Ignores events that bubble up from child elements.\n * @param el an html element\n * @param eventName name of the event\n */\nexport function waitForEvent(el: HTMLElement, eventName: string) {\n return new Promise<void>((resolve) => {\n function done(event: Event) {\n if (event.target === el) {\n el.removeEventListener(eventName, done);\n resolve();\n }\n }\n\n el.addEventListener(eventName, done);\n });\n}\n"]}
@@ -37,27 +37,32 @@ export function getTextContent(slot) {
37
37
  /**
38
38
  * Determines whether an element has a slot. If name is specified, the function will look for a corresponding named
39
39
  * slot, otherwise it will look for a "default" slot (e.g. a non-empty text node or an element with no slot attribute).
40
- * @param el
41
- * @param name
40
+ * @param host a custom element host
41
+ * @param name a slot to find
42
42
  * @returns boolean
43
43
  */
44
- export function hasSlot(el, name) {
44
+ export function hasSlot(host, name) {
45
45
  // Look for a named slot
46
46
  if (name) {
47
- return el.querySelector(`[slot="${name}"]`) !== null;
47
+ return host.querySelector(`[slot="${name}"]`) !== null;
48
48
  }
49
49
  // Look for a default slot
50
- return [...Array.from(el.childNodes)].some((node) => {
51
- if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== '') {
52
- return true;
53
- }
54
- if (node.nodeType === node.ELEMENT_NODE) {
55
- const el = node;
56
- if (!el.hasAttribute('slot')) {
50
+ if (this.host.shadowRoot) {
51
+ return [...Array.from(host.childNodes)].some((node) => {
52
+ if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== '') {
57
53
  return true;
58
54
  }
59
- }
60
- return false;
61
- });
55
+ if (node.nodeType === node.ELEMENT_NODE) {
56
+ const el = node;
57
+ if (!el.hasAttribute('slot')) {
58
+ return true;
59
+ }
60
+ }
61
+ return false;
62
+ });
63
+ }
64
+ // non-shadow component...TODO - only for 'scoped' components atm
65
+ if (host.querySelector(`:not(.sc-${host.tagName.toLowerCase()}):not([slot])`))
66
+ return true;
62
67
  }
63
68
  //# sourceMappingURL=slot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot.js","sourceRoot":"","sources":["../../src/utils/slot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAqB;EAChD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;EACpD,IAAI,IAAI,GAAG,EAAE,CAAC;EAEd,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACtB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;MACvC,IAAI,IAAK,IAAoB,CAAC,SAAS,CAAC;KACzC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;MACpC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;KAC1B;EACH,CAAC,CAAC,CAAC;EAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAqB;EAClD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;EACpD,IAAI,IAAI,GAAG,EAAE,CAAC;EAEd,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACtB,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;EACjC,CAAC,CAAC,CAAC;EAEH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,EAAe,EAAE,IAAa;EACpD,wBAAwB;EACxB,IAAI,IAAI,EAAE;IACR,OAAO,EAAE,CAAC,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;GACtD;EAED,0BAA0B;EAC1B,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IAClD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;MACtE,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;MACvC,MAAM,EAAE,GAAG,IAAmB,CAAC;MAC/B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC5B,OAAO,IAAI,CAAC;OACb;KACF;IAED,OAAO,KAAK,CAAC;EACf,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * Given a slot, this function iterates over all of its assigned elements and text nodes and returns the concatenated\n * HTML as a string. This is useful because we can't use slot.innerHTML as an alternative.\n * @param slot\n * @returns a concatenated string from html and text nodes\n */\nexport function getInnerHTML(slot: HTMLSlotElement): string {\n const nodes = slot.assignedNodes({ flatten: true });\n let html = '';\n\n [...nodes].map((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n html += (node as HTMLElement).outerHTML;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n html += node.textContent;\n }\n });\n\n return html;\n}\n\n/**\n * Given a slot, this function iterates over all of its assigned text nodes and returns the concatenated text as a\n * string. This is useful because we can't use slot.textContent as an alternative.\n * @param slot\n * @returns a concatenated string of text\n */\nexport function getTextContent(slot: HTMLSlotElement): string {\n const nodes = slot.assignedNodes({ flatten: true });\n let text = '';\n\n [...nodes].map((node) => {\n text += node.textContent + ' ';\n });\n\n return text.trim();\n}\n\n/**\n * Determines whether an element has a slot. If name is specified, the function will look for a corresponding named\n * slot, otherwise it will look for a \"default\" slot (e.g. a non-empty text node or an element with no slot attribute).\n * @param el\n * @param name\n * @returns boolean\n */\nexport function hasSlot(el: HTMLElement, name?: string) {\n // Look for a named slot\n if (name) {\n return el.querySelector(`[slot=\"${name}\"]`) !== null;\n }\n\n // Look for a default slot\n return [...Array.from(el.childNodes)].some((node) => {\n if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== '') {\n return true;\n }\n\n if (node.nodeType === node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (!el.hasAttribute('slot')) {\n return true;\n }\n }\n\n return false;\n });\n}\n"]}
1
+ {"version":3,"file":"slot.js","sourceRoot":"","sources":["../../src/utils/slot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAqB;EAChD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;EACpD,IAAI,IAAI,GAAG,EAAE,CAAC;EAEd,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACtB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;MACvC,IAAI,IAAK,IAAoB,CAAC,SAAS,CAAC;KACzC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;MACpC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;KAC1B;EACH,CAAC,CAAC,CAAC;EAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAqB;EAClD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;EACpD,IAAI,IAAI,GAAG,EAAE,CAAC;EAEd,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACtB,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;EACjC,CAAC,CAAC,CAAC;EAEH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,IAAiB,EAAE,IAAa;EACtD,wBAAwB;EACxB,IAAI,IAAI,EAAE;IACR,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;GACxD;EAED,0BAA0B;EAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;IACxB,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;MACpD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACtE,OAAO,IAAI,CAAC;OACb;MAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;QACvC,MAAM,EAAE,GAAG,IAAmB,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;UAC5B,OAAO,IAAI,CAAC;SACb;OACF;MAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;GACJ;EAED,iEAAiE;EACjE,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC;IAC3E,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Given a slot, this function iterates over all of its assigned elements and text nodes and returns the concatenated\n * HTML as a string. This is useful because we can't use slot.innerHTML as an alternative.\n * @param slot\n * @returns a concatenated string from html and text nodes\n */\nexport function getInnerHTML(slot: HTMLSlotElement): string {\n const nodes = slot.assignedNodes({ flatten: true });\n let html = '';\n\n [...nodes].map((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n html += (node as HTMLElement).outerHTML;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n html += node.textContent;\n }\n });\n\n return html;\n}\n\n/**\n * Given a slot, this function iterates over all of its assigned text nodes and returns the concatenated text as a\n * string. This is useful because we can't use slot.textContent as an alternative.\n * @param slot\n * @returns a concatenated string of text\n */\nexport function getTextContent(slot: HTMLSlotElement): string {\n const nodes = slot.assignedNodes({ flatten: true });\n let text = '';\n\n [...nodes].map((node) => {\n text += node.textContent + ' ';\n });\n\n return text.trim();\n}\n\n/**\n * Determines whether an element has a slot. If name is specified, the function will look for a corresponding named\n * slot, otherwise it will look for a \"default\" slot (e.g. a non-empty text node or an element with no slot attribute).\n * @param host a custom element host\n * @param name a slot to find\n * @returns boolean\n */\nexport function hasSlot(host: HTMLElement, name?: string) {\n // Look for a named slot\n if (name) {\n return host.querySelector(`[slot=\"${name}\"]`) !== null;\n }\n\n // Look for a default slot\n if (this.host.shadowRoot) {\n return [...Array.from(host.childNodes)].some((node) => {\n if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== '') {\n return true;\n }\n\n if (node.nodeType === node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n if (!el.hasAttribute('slot')) {\n return true;\n }\n }\n\n return false;\n });\n }\n\n // non-shadow component...TODO - only for 'scoped' components atm\n if (host.querySelector(`:not(.sc-${host.tagName.toLowerCase()}):not([slot])`))\n return true;\n}\n"]}
@@ -1,17 +1,15 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import * as qs from 'qs';
4
+ import { parse, stringify } from 'tyqs';
5
5
  const STORAGE_NAME_SPACE = 'nano-component-store:';
6
6
  const urlRead = (from = 'hash', win = window) => {
7
7
  if (!win || !win.location)
8
8
  return {};
9
9
  if (from === 'hash' && win.location.hash)
10
- return qs.parse(win.location.hash.replace(/^\#/, ''), {
11
- strictNullHandling: true,
12
- });
10
+ return parse(win.location.hash.replace(/^\#/, ''));
13
11
  else if (from === 'query' && win.location.search)
14
- return qs.parse(win.location.search, { ignoreQueryPrefix: true });
12
+ return parse(win.location.search.replace(/^\?/, ''));
15
13
  return {};
16
14
  };
17
15
  const urlSave = (object, to = 'hash', win = window, method = 'replace') => {
@@ -21,11 +19,7 @@ const urlSave = (object, to = 'hash', win = window, method = 'replace') => {
21
19
  const basePath = to === 'query'
22
20
  ? win.location.pathname
23
21
  : win.location.pathname + win.location.search;
24
- let queryStr = qs.stringify(object, {
25
- strictNullHandling: true,
26
- addQueryPrefix: false,
27
- encodeValuesOnly: true,
28
- });
22
+ let queryStr = stringify(object);
29
23
  if (!queryStr || !queryStr.length) {
30
24
  if (!oldQuery || !oldQuery.length)
31
25
  return;
@@ -52,7 +46,7 @@ const urlSave = (object, to = 'hash', win = window, method = 'replace') => {
52
46
  };
53
47
  export const urlSet = (id, data, to = 'hash', win = window, method = 'replace') => {
54
48
  // sanitize the incoming key
55
- id = Object.keys(qs.parse(id))[0];
49
+ id = Object.keys(parse(id))[0];
56
50
  const object = {};
57
51
  object[id] = data;
58
52
  let currentData = urlRead(to, win);
@@ -61,7 +55,7 @@ export const urlSet = (id, data, to = 'hash', win = window, method = 'replace')
61
55
  };
62
56
  export const urlGet = (key, to = 'hash', win = window) => {
63
57
  // sanitize the incoming key
64
- key = Object.keys(qs.parse(key))[0];
58
+ key = Object.keys(parse(key))[0];
65
59
  const currentData = urlRead(to, win);
66
60
  return currentData[key] || null;
67
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"get-set.js","sourceRoot":"","sources":["../../../src/utils/store/get-set.ts"],"names":[],"mappings":"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","sourcesContent":["import * as qs from 'qs';\n\nconst STORAGE_NAME_SPACE = 'nano-component-store:';\n\nconst urlRead = (\n from: 'hash' | 'query' = 'hash',\n win: Window = window\n): void | object => {\n if (!win || !win.location) return {};\n if (from === 'hash' && win.location.hash)\n return qs.parse(win.location.hash.replace(/^\\#/, ''), {\n strictNullHandling: true,\n });\n else if (from === 'query' && win.location.search)\n return qs.parse(win.location.search, { ignoreQueryPrefix: true });\n return {};\n};\n\nconst urlSave = (\n object: object,\n to: 'hash' | 'query' = 'hash',\n win: Window = window,\n method: 'replace' | 'push' = 'replace'\n) => {\n if (!win || !win.history) return;\n const oldQuery = to === 'query' ? win.location.search : win.location.hash;\n const basePath =\n to === 'query'\n ? win.location.pathname\n : win.location.pathname + win.location.search;\n let queryStr = qs.stringify(object, {\n strictNullHandling: true,\n addQueryPrefix: false,\n encodeValuesOnly: true,\n });\n\n if (!queryStr || !queryStr.length) {\n if (!oldQuery || !oldQuery.length) return;\n if (method === 'replace') win.history.replaceState(null, null, basePath);\n else win.history.pushState(null, null, basePath);\n return;\n }\n\n if (to === 'hash' && win.location.hash === '#' + queryStr) {\n try {\n (document.querySelector('#' + queryStr) as HTMLElement).focus();\n } catch (e) {}\n return;\n }\n queryStr = (to === 'hash' ? '#' : '?') + queryStr;\n if (queryStr === oldQuery) return;\n if (method === 'replace')\n win.history.replaceState(null, null, basePath + queryStr);\n else win.history.pushState(null, null, basePath + queryStr);\n};\n\nexport const urlSet = (\n id: string,\n data: object,\n to: 'hash' | 'query' = 'hash',\n win: Window = window,\n method: 'replace' | 'push' = 'replace'\n) => {\n // sanitize the incoming key\n id = Object.keys(qs.parse(id))[0];\n const object = {};\n object[id] = data;\n\n let currentData = urlRead(to, win);\n currentData = { ...currentData, ...object };\n urlSave(currentData, to, win, method);\n};\n\nexport const urlGet = (\n key: string,\n to: 'hash' | 'query' = 'hash',\n win: Window = window\n) => {\n // sanitize the incoming key\n key = Object.keys(qs.parse(key))[0];\n const currentData = urlRead(to, win);\n return currentData[key] || null;\n};\n\nexport const sessionSet = (\n key: string,\n object: object,\n win: Window = window\n) => {\n try {\n if (!object) {\n win.sessionStorage.removeItem(STORAGE_NAME_SPACE + key);\n return;\n }\n win.sessionStorage.setItem(\n STORAGE_NAME_SPACE + key,\n JSON.stringify(object)\n );\n } catch (e) {\n throw e;\n }\n};\n\nexport const sessionGet = (key: string, win: Window = window) => {\n try {\n const configStr = win.sessionStorage.getItem(STORAGE_NAME_SPACE + key);\n return configStr !== null ? JSON.parse(configStr) : null;\n } catch (e) {\n throw e;\n }\n};\n\nexport const storageSet = (\n key: string,\n object: object,\n win: Window = window\n) => {\n try {\n if (!object) {\n win.localStorage.removeItem(STORAGE_NAME_SPACE + key);\n return;\n }\n win.localStorage.setItem(STORAGE_NAME_SPACE + key, JSON.stringify(object));\n } catch (e) {\n throw e;\n }\n};\n\nexport const storageGet = (key: string, win: Window = window) => {\n try {\n const configStr = win.localStorage.getItem(STORAGE_NAME_SPACE + key);\n return configStr !== null ? JSON.parse(configStr) : null;\n } catch (e) {\n throw e;\n }\n};\n"]}
1
+ {"version":3,"file":"get-set.js","sourceRoot":"","sources":["../../../src/utils/store/get-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAExC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAEnD,MAAM,OAAO,GAAG,CACd,OAAyB,MAAM,EAC/B,MAAc,MAAM,EACL,EAAE;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;IAAE,OAAO,EAAE,CAAC;EACrC,IAAI,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI;IACtC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;OAChD,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM;IAC9C,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;EACvD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CACd,MAAc,EACd,KAAuB,MAAM,EAC7B,MAAc,MAAM,EACpB,SAA6B,SAAS,EACtC,EAAE;EACF,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;IAAE,OAAO;EACjC,MAAM,QAAQ,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;EAC1E,MAAM,QAAQ,GACZ,EAAE,KAAK,OAAO;IACZ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ;IACvB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;EAClD,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;EAEjC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;IACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;MAAE,OAAO;IAC1C,IAAI,MAAM,KAAK,SAAS;MAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;;MACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO;GACR;EAED,IAAI,EAAE,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,GAAG,QAAQ,EAAE;IACzD,IAAI;MACD,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,QAAQ,CAAiB,CAAC,KAAK,EAAE,CAAC;KACjE;IAAC,OAAO,CAAC,EAAE,GAAE;IACd,OAAO;GACR;EACD,QAAQ,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;EAClD,IAAI,QAAQ,KAAK,QAAQ;IAAE,OAAO;EAClC,IAAI,MAAM,KAAK,SAAS;IACtB,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;;IACvD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,EAAU,EACV,IAAY,EACZ,KAAuB,MAAM,EAC7B,MAAc,MAAM,EACpB,SAA6B,SAAS,EACtC,EAAE;EACF,4BAA4B;EAC5B,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/B,MAAM,MAAM,GAAG,EAAE,CAAC;EAClB,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;EAElB,IAAI,WAAW,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;EACnC,WAAW,mCAAQ,WAAW,GAAK,MAAM,CAAE,CAAC;EAC5C,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAAW,EACX,KAAuB,MAAM,EAC7B,MAAc,MAAM,EACpB,EAAE;EACF,4BAA4B;EAC5B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACjC,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;EACrC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,GAAW,EACX,MAAc,EACd,MAAc,MAAM,EACpB,EAAE;EACF,IAAI;IACF,IAAI,CAAC,MAAM,EAAE;MACX,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;MACxD,OAAO;KACR;IACD,GAAG,CAAC,cAAc,CAAC,OAAO,CACxB,kBAAkB,GAAG,GAAG,EACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvB,CAAC;GACH;EAAC,OAAO,CAAC,EAAE;IACV,MAAM,CAAC,CAAC;GACT;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,MAAc,MAAM,EAAE,EAAE;EAC9D,IAAI;IACF,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;IACvE,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;GAC1D;EAAC,OAAO,CAAC,EAAE;IACV,MAAM,CAAC,CAAC;GACT;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,GAAW,EACX,MAAc,EACd,MAAc,MAAM,EACpB,EAAE;EACF,IAAI;IACF,IAAI,CAAC,MAAM,EAAE;MACX,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;MACtD,OAAO;KACR;IACD,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;GAC5E;EAAC,OAAO,CAAC,EAAE;IACV,MAAM,CAAC,CAAC;GACT;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,MAAc,MAAM,EAAE,EAAE;EAC9D,IAAI;IACF,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;IACrE,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;GAC1D;EAAC,OAAO,CAAC,EAAE;IACV,MAAM,CAAC,CAAC;GACT;AACH,CAAC,CAAC","sourcesContent":["import { parse, stringify } from 'tyqs';\n\nconst STORAGE_NAME_SPACE = 'nano-component-store:';\n\nconst urlRead = (\n from: 'hash' | 'query' = 'hash',\n win: Window = window\n): void | object => {\n if (!win || !win.location) return {};\n if (from === 'hash' && win.location.hash)\n return parse(win.location.hash.replace(/^\\#/, ''));\n else if (from === 'query' && win.location.search)\n return parse(win.location.search.replace(/^\\?/, ''));\n return {};\n};\n\nconst urlSave = (\n object: object,\n to: 'hash' | 'query' = 'hash',\n win: Window = window,\n method: 'replace' | 'push' = 'replace'\n) => {\n if (!win || !win.history) return;\n const oldQuery = to === 'query' ? win.location.search : win.location.hash;\n const basePath =\n to === 'query'\n ? win.location.pathname\n : win.location.pathname + win.location.search;\n let queryStr = stringify(object);\n\n if (!queryStr || !queryStr.length) {\n if (!oldQuery || !oldQuery.length) return;\n if (method === 'replace') win.history.replaceState(null, null, basePath);\n else win.history.pushState(null, null, basePath);\n return;\n }\n\n if (to === 'hash' && win.location.hash === '#' + queryStr) {\n try {\n (document.querySelector('#' + queryStr) as HTMLElement).focus();\n } catch (e) {}\n return;\n }\n queryStr = (to === 'hash' ? '#' : '?') + queryStr;\n if (queryStr === oldQuery) return;\n if (method === 'replace')\n win.history.replaceState(null, null, basePath + queryStr);\n else win.history.pushState(null, null, basePath + queryStr);\n};\n\nexport const urlSet = (\n id: string,\n data: object,\n to: 'hash' | 'query' = 'hash',\n win: Window = window,\n method: 'replace' | 'push' = 'replace'\n) => {\n // sanitize the incoming key\n id = Object.keys(parse(id))[0];\n const object = {};\n object[id] = data;\n\n let currentData = urlRead(to, win);\n currentData = { ...currentData, ...object };\n urlSave(currentData, to, win, method);\n};\n\nexport const urlGet = (\n key: string,\n to: 'hash' | 'query' = 'hash',\n win: Window = window\n) => {\n // sanitize the incoming key\n key = Object.keys(parse(key))[0];\n const currentData = urlRead(to, win);\n return currentData[key] || null;\n};\n\nexport const sessionSet = (\n key: string,\n object: object,\n win: Window = window\n) => {\n try {\n if (!object) {\n win.sessionStorage.removeItem(STORAGE_NAME_SPACE + key);\n return;\n }\n win.sessionStorage.setItem(\n STORAGE_NAME_SPACE + key,\n JSON.stringify(object)\n );\n } catch (e) {\n throw e;\n }\n};\n\nexport const sessionGet = (key: string, win: Window = window) => {\n try {\n const configStr = win.sessionStorage.getItem(STORAGE_NAME_SPACE + key);\n return configStr !== null ? JSON.parse(configStr) : null;\n } catch (e) {\n throw e;\n }\n};\n\nexport const storageSet = (\n key: string,\n object: object,\n win: Window = window\n) => {\n try {\n if (!object) {\n win.localStorage.removeItem(STORAGE_NAME_SPACE + key);\n return;\n }\n win.localStorage.setItem(STORAGE_NAME_SPACE + key, JSON.stringify(object));\n } catch (e) {\n throw e;\n }\n};\n\nexport const storageGet = (key: string, win: Window = window) => {\n try {\n const configStr = win.localStorage.getItem(STORAGE_NAME_SPACE + key);\n return configStr !== null ? JSON.parse(configStr) : null;\n } catch (e) {\n throw e;\n }\n};\n"]}
@@ -17,25 +17,10 @@ function createCommonjsModule(fn, basedir, module) {
17
17
  }, fn(module, module.exports), module.exports;
18
18
  }
19
19
 
20
- function getAugmentedNamespace(n) {
21
- if (n.__esModule) return n;
22
- var a = Object.defineProperty({}, '__esModule', {value: true});
23
- Object.keys(n).forEach(function (k) {
24
- var d = Object.getOwnPropertyDescriptor(n, k);
25
- Object.defineProperty(a, k, d.get ? d : {
26
- enumerable: true,
27
- get: function () {
28
- return n[k];
29
- }
30
- });
31
- });
32
- return a;
33
- }
34
-
35
20
  function commonjsRequire () {
36
21
  throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
37
22
  }
38
23
 
39
- export { commonjsGlobal as a, getAugmentedNamespace as b, createCommonjsModule as c, getDefaultExportFromCjs as g };
24
+ export { commonjsGlobal as a, createCommonjsModule as c, getDefaultExportFromCjs as g };
40
25
 
41
26
  //# sourceMappingURL=_commonjsHelpers.js.map
@@ -1 +1 @@
1
- {"file":"_commonjsHelpers.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
1
+ {"file":"_commonjsHelpers.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -2,7 +2,7 @@
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
4
  import { getElement, getRenderingRef, proxyCustomElement, HTMLElement, createEvent, writeTask, readTask, Build, h, Host } from '@stencil/core/internal/client';
5
- import { a as algoliasearch_umd } from './algoliasearch.umd.js';
5
+ import { a as algoliasearch } from './algoliasearch-lite.esm.browser.js';
6
6
  import { g as getDirectChildren } from './dom.js';
7
7
  import { C as ComponentStore } from './component-store.js';
8
8
  import { g as getDefaultExportFromCjs, c as createCommonjsModule, a as commonjsGlobal } from './_commonjsHelpers.js';
@@ -521,7 +521,7 @@ const Algolia = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
521
521
  initAlgoliaClient() {
522
522
  if (!this.appId || !this.apiKey)
523
523
  return;
524
- this.algoliaClient = algoliasearch_umd(this.appId, this.apiKey);
524
+ this.algoliaClient = algoliasearch(this.appId, this.apiKey);
525
525
  }
526
526
  initAlgoliaIndex() {
527
527
  if (!this.algoliaClient || !this.searchIndex)