@nanoporetech-digital/components 3.7.1 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (781) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/cjs/{algolia-data-9152d0ef.js → algolia-data-fb13160a.js} +2 -2
  3. package/dist/cjs/{algolia-data-9152d0ef.js.map → algolia-data-fb13160a.js.map} +1 -1
  4. package/dist/cjs/{algoliasearch.umd-7ee60729.js → algoliasearch.umd-689c1560.js} +3 -3
  5. package/dist/cjs/{algoliasearch.umd-7ee60729.js.map → algoliasearch.umd-689c1560.js.map} +1 -1
  6. package/dist/cjs/{component-store-d7c8c326.js → component-store-b80bdb26.js} +25 -12
  7. package/dist/cjs/component-store-b80bdb26.js.map +1 -0
  8. package/dist/cjs/{dom-d7c33f11.js → dom-7acf7afd.js} +15 -15
  9. package/dist/cjs/dom-7acf7afd.js.map +1 -0
  10. package/dist/cjs/{form-control-57c71246.js → form-control-845951ac.js} +4 -4
  11. package/dist/cjs/form-control-845951ac.js.map +1 -0
  12. package/dist/{esm/global-8047b4ff.js → cjs/global-3a6a7873.js} +5 -14
  13. package/dist/cjs/global-3a6a7873.js.map +1 -0
  14. package/dist/cjs/{index-bb2a6ab8.js → index-5e11be36.js} +2 -2
  15. package/dist/cjs/{index-bb2a6ab8.js.map → index-5e11be36.js.map} +1 -1
  16. package/dist/cjs/{index-ece1cb9e.js → index-72ee0363.js} +2 -10
  17. package/dist/cjs/index-72ee0363.js.map +1 -0
  18. package/dist/cjs/{index-41582c2a.js → index-e1b5c3ea.js} +1438 -516
  19. package/dist/cjs/index-e1b5c3ea.js.map +1 -0
  20. package/dist/cjs/index.cjs.js +18 -35
  21. package/dist/cjs/index.cjs.js.map +1 -1
  22. package/dist/cjs/loader.cjs.js +5 -4
  23. package/dist/cjs/loader.cjs.js.map +1 -1
  24. package/dist/cjs/{modal-e4defcc3.js → modal-5884a6de.js} +3 -2
  25. package/dist/cjs/modal-5884a6de.js.map +1 -0
  26. package/dist/cjs/nano-accordion.cjs.entry.js +4 -7
  27. package/dist/cjs/nano-accordion.cjs.entry.js.map +1 -1
  28. package/dist/cjs/nano-alert.cjs.entry.js +25 -19
  29. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  30. package/dist/cjs/nano-algolia-filter.cjs.entry.js +5 -5
  31. package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
  32. package/dist/cjs/nano-algolia-input.cjs.entry.js +4 -4
  33. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nano-algolia-pagination.cjs.entry.js +2 -2
  35. package/dist/cjs/nano-algolia-results.cjs.entry.js +2 -2
  36. package/dist/cjs/nano-algolia.cjs.entry.js +8 -8
  37. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +1 -1
  39. package/dist/cjs/nano-checkbox-group.cjs.entry.js +52 -9
  40. package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
  41. package/dist/cjs/nano-checkbox.cjs.entry.js +8 -8
  42. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  43. package/dist/cjs/nano-components.cjs.js +8 -4
  44. package/dist/cjs/nano-components.cjs.js.map +1 -1
  45. package/dist/cjs/nano-datalist_3.cjs.entry.js +46 -36
  46. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  47. package/dist/cjs/nano-date-input.cjs.entry.js +6 -6
  48. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  49. package/dist/cjs/nano-date-picker.cjs.entry.js +4 -4
  50. package/dist/cjs/nano-date-picker.cjs.entry.js.map +1 -1
  51. package/dist/cjs/nano-demo.cjs.entry.js +13 -9
  52. package/dist/cjs/nano-demo.cjs.entry.js.map +1 -1
  53. package/dist/cjs/nano-details.cjs.entry.js +4 -4
  54. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  55. package/dist/cjs/nano-dialog.cjs.entry.js +6 -6
  56. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  57. package/dist/cjs/nano-drawer.cjs.entry.js +5 -5
  58. package/dist/cjs/nano-drawer.cjs.entry.js.map +1 -1
  59. package/dist/cjs/nano-dropdown.cjs.entry.js +9 -4
  60. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  61. package/dist/cjs/nano-field-validator.cjs.entry.js +4 -3
  62. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
  63. package/dist/cjs/nano-file-upload.cjs.entry.js +5 -5
  64. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  65. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +54 -67
  66. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  67. package/dist/cjs/nano-global-nav.cjs.entry.js +54 -26
  68. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  69. package/dist/cjs/nano-global-search-results.cjs.entry.js +6 -4
  70. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  71. package/dist/cjs/nano-grid_3.cjs.entry.js +8 -7
  72. package/dist/cjs/nano-grid_3.cjs.entry.js.map +1 -1
  73. package/dist/cjs/nano-hero.cjs.entry.js +4 -2
  74. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  75. package/dist/cjs/nano-icon-button.cjs.entry.js +2 -2
  76. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  77. package/dist/cjs/nano-icon.cjs.entry.js +7 -14
  78. package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
  79. package/dist/cjs/nano-input.cjs.entry.js +19 -33
  80. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  81. package/dist/cjs/nano-menu-drawer.cjs.entry.js +3 -3
  82. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  83. package/dist/cjs/nano-progress-bar_2.cjs.entry.js +4 -4
  84. package/dist/cjs/nano-progress-bar_2.cjs.entry.js.map +1 -1
  85. package/dist/cjs/nano-range.cjs.entry.js +4 -4
  86. package/dist/cjs/nano-range.cjs.entry.js.map +1 -1
  87. package/dist/cjs/nano-rating.cjs.entry.js +2 -2
  88. package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
  89. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +18 -10
  90. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  91. package/dist/cjs/nano-slide.cjs.entry.js +1 -1
  92. package/dist/cjs/nano-slides.cjs.entry.js +11 -21
  93. package/dist/cjs/nano-slides.cjs.entry.js.map +1 -1
  94. package/dist/cjs/nano-spinner.cjs.entry.js +3 -3
  95. package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
  96. package/dist/cjs/nano-split-pane.cjs.entry.js +15 -13
  97. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  98. package/dist/cjs/nano-sticker.cjs.entry.js +6 -4
  99. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  100. package/dist/cjs/nano-tab-content.cjs.entry.js +9 -3
  101. package/dist/cjs/nano-tab-content.cjs.entry.js.map +1 -1
  102. package/dist/cjs/nano-tab-group.cjs.entry.js +18 -12
  103. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  104. package/dist/cjs/nano-tab.cjs.entry.js +2 -2
  105. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  106. package/dist/cjs/{nano-table-820b04d5.js → nano-table-e76a8dde.js} +115 -150
  107. package/dist/cjs/nano-table-e76a8dde.js.map +1 -0
  108. package/dist/cjs/nano-table.cjs.entry.js +3 -3
  109. package/dist/cjs/{popover-508bcedb.js → popover-088646b2.js} +61 -50
  110. package/dist/cjs/popover-088646b2.js.map +1 -0
  111. package/dist/cjs/{scroll-9bb5e060.js → scroll-a197d9c4.js} +2 -2
  112. package/dist/cjs/{scroll-9bb5e060.js.map → scroll-a197d9c4.js.map} +1 -1
  113. package/dist/cjs/{table.worker-9e238d16.js → table.worker-988d87da.js} +4 -4
  114. package/dist/cjs/table.worker-988d87da.js.map +1 -0
  115. package/dist/cjs/{theme-50275e1a.js → theme-9cbe28c5.js} +2 -7
  116. package/dist/cjs/theme-9cbe28c5.js.map +1 -0
  117. package/dist/collection/collection-manifest.json +2 -2
  118. package/dist/collection/components/accordion/accordion.js +1 -4
  119. package/dist/collection/components/accordion/accordion.js.map +1 -1
  120. package/dist/collection/components/alert/alert.css +4 -3
  121. package/dist/collection/components/alert/alert.helpers.js +6 -24
  122. package/dist/collection/components/alert/alert.helpers.js.map +1 -1
  123. package/dist/collection/components/alert/alert.js +19 -13
  124. package/dist/collection/components/alert/alert.js.map +1 -1
  125. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  126. package/dist/collection/components/algolia/algolia-filter.js.map +1 -1
  127. package/dist/collection/components/algolia/algolia-input.js.map +1 -1
  128. package/dist/collection/components/algolia/algolia.css +2 -1
  129. package/dist/collection/components/algolia/algolia.js +3 -3
  130. package/dist/collection/components/algolia/algolia.js.map +1 -1
  131. package/dist/collection/components/checkbox/checkbox-group.css +16 -10
  132. package/dist/collection/components/checkbox/checkbox-group.js +91 -7
  133. package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
  134. package/dist/collection/components/checkbox/checkbox.css +14 -12
  135. package/dist/collection/components/checkbox/checkbox.js +5 -5
  136. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  137. package/dist/collection/components/datalist/datalist.js +39 -31
  138. package/dist/collection/components/datalist/datalist.js.map +1 -1
  139. package/dist/collection/components/date-input/date-input.css +3 -3
  140. package/dist/collection/components/date-input/date-input.js +3 -3
  141. package/dist/collection/components/date-input/date-input.js.map +1 -1
  142. package/dist/collection/components/date-picker/date-picker.css +15 -11
  143. package/dist/collection/components/date-picker/date-picker.js +1 -1
  144. package/dist/collection/components/date-picker/date-picker.js.map +1 -1
  145. package/dist/collection/components/demo/demo.js +12 -8
  146. package/dist/collection/components/demo/demo.js.map +1 -1
  147. package/dist/collection/components/details/details.css +2 -1
  148. package/dist/collection/components/details/details.js +1 -1
  149. package/dist/collection/components/details/details.js.map +1 -1
  150. package/dist/collection/components/dialog/dialog.css +8 -5
  151. package/dist/collection/components/dialog/dialog.helpers.js +3 -11
  152. package/dist/collection/components/dialog/dialog.helpers.js.map +1 -1
  153. package/dist/collection/components/drawer/drawer.css +2 -2
  154. package/dist/collection/components/dropdown/dropdown.css +1 -1
  155. package/dist/collection/components/dropdown/dropdown.js +6 -1
  156. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  157. package/dist/collection/components/field-validator/field-validator.js +2 -1
  158. package/dist/collection/components/field-validator/field-validator.js.map +1 -1
  159. package/dist/collection/components/file-upload/file-upload.css +35 -25
  160. package/dist/collection/components/file-upload/file-upload.js +4 -4
  161. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  162. package/dist/collection/components/form-control/form-control.js +2 -2
  163. package/dist/collection/components/form-control/form-control.js.map +1 -1
  164. package/dist/collection/components/global-nav/global-nav-user-profile.js +6 -7
  165. package/dist/collection/components/global-nav/global-nav-user-profile.js.map +1 -1
  166. package/dist/collection/components/global-nav/global-nav.js +61 -11
  167. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  168. package/dist/collection/components/global-nav/style/global-nav.css +92 -48
  169. package/dist/collection/components/global-search-results/global-search-results.css +83 -44
  170. package/dist/collection/components/global-search-results/global-search-results.js +4 -2
  171. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  172. package/dist/collection/components/grid/grid-item.css +1 -1
  173. package/dist/collection/components/grid/grid.css +1 -0
  174. package/dist/collection/components/grid/grid.js +2 -0
  175. package/dist/collection/components/grid/grid.js.map +1 -1
  176. package/dist/collection/components/hero/hero.css +110 -18
  177. package/dist/collection/components/hero/hero.js +2 -0
  178. package/dist/collection/components/hero/hero.js.map +1 -1
  179. package/dist/collection/components/icon/icon.css +2 -2
  180. package/dist/collection/components/icon/icon.js +3 -10
  181. package/dist/collection/components/icon/icon.js.map +1 -1
  182. package/dist/collection/components/icon-button/icon-button.css +1 -1
  183. package/dist/collection/components/img/img.css +0 -1
  184. package/dist/collection/components/img/img.js +3 -4
  185. package/dist/collection/components/img/img.js.map +1 -1
  186. package/dist/collection/components/input/input.css +54 -32
  187. package/dist/collection/components/input/input.js +14 -28
  188. package/dist/collection/components/input/input.js.map +1 -1
  189. package/dist/collection/components/menu/menu.js +4 -2
  190. package/dist/collection/components/menu/menu.js.map +1 -1
  191. package/dist/collection/components/menu-drawer/menu-drawer.css +20 -13
  192. package/dist/collection/components/menu-drawer/menu-drawer.js +1 -1
  193. package/dist/collection/components/menu-drawer/menu-drawer.js.map +1 -1
  194. package/dist/collection/components/nav-item/nav-item.css +31 -16
  195. package/dist/collection/components/nav-item/nav-item.js +4 -4
  196. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  197. package/dist/collection/components/option/option.css +4 -2
  198. package/dist/collection/components/progress-bar/progress-bar.css +4 -4
  199. package/dist/collection/components/range/range.css +11 -9
  200. package/dist/collection/components/rating/rating.css +9 -5
  201. package/dist/collection/components/resize-observe/resize-observe.js +17 -6
  202. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  203. package/dist/collection/components/select/select.css +59 -34
  204. package/dist/collection/components/select/select.js +42 -55
  205. package/dist/collection/components/select/select.js.map +1 -1
  206. package/dist/collection/components/skeleton/skeleton.css +5 -5
  207. package/dist/collection/components/slides/slides.css +4 -2
  208. package/dist/collection/components/slides/slides.js +9 -19
  209. package/dist/collection/components/slides/slides.js.map +1 -1
  210. package/dist/collection/components/spinner/spinner.css +13 -8
  211. package/dist/collection/components/spinner/spinner.js +1 -1
  212. package/dist/collection/components/spinner/spinner.js.map +1 -1
  213. package/dist/collection/components/split-pane/split-pane.css +1 -1
  214. package/dist/collection/components/split-pane/split-pane.js +13 -11
  215. package/dist/collection/components/split-pane/split-pane.js.map +1 -1
  216. package/dist/collection/components/sticker/sticker.js +4 -2
  217. package/dist/collection/components/sticker/sticker.js.map +1 -1
  218. package/dist/collection/components/table/table.cell.js +8 -8
  219. package/dist/collection/components/table/table.cell.js.map +1 -1
  220. package/dist/collection/components/table/table.css +46 -25
  221. package/dist/collection/components/table/table.header.js +6 -19
  222. package/dist/collection/components/table/table.header.js.map +1 -1
  223. package/dist/collection/components/table/table.js +85 -93
  224. package/dist/collection/components/table/table.js.map +1 -1
  225. package/dist/collection/components/table/table.row.js +8 -8
  226. package/dist/collection/components/table/table.row.js.map +1 -1
  227. package/dist/collection/components/table/table.store.js +2 -1
  228. package/dist/collection/components/table/table.store.js.map +1 -1
  229. package/dist/collection/components/table/table.utils.js +8 -7
  230. package/dist/collection/components/table/table.utils.js.map +1 -1
  231. package/dist/collection/components/tabs/tab-content.css +7 -2
  232. package/dist/collection/components/tabs/tab-content.js +12 -1
  233. package/dist/collection/components/tabs/tab-content.js.map +1 -1
  234. package/dist/collection/components/tabs/tab-group.css +13 -10
  235. package/dist/collection/components/tabs/tab-group.js +17 -7
  236. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  237. package/dist/collection/components/tabs/tab.css +21 -12
  238. package/dist/collection/components/tooltip/tooltip.css +25 -16
  239. package/dist/collection/global/script/global.js +2 -13
  240. package/dist/collection/global/script/global.js.map +1 -1
  241. package/dist/collection/index.js +17 -0
  242. package/dist/collection/index.js.map +1 -1
  243. package/dist/collection/utils/dom.js +16 -15
  244. package/dist/collection/utils/dom.js.map +1 -1
  245. package/dist/collection/utils/fetch.js +15 -12
  246. package/dist/collection/utils/fetch.js.map +1 -1
  247. package/dist/collection/utils/gesture/index.js +1 -9
  248. package/dist/collection/utils/gesture/index.js.map +1 -1
  249. package/dist/collection/utils/modal.js +2 -1
  250. package/dist/collection/utils/modal.js.map +1 -1
  251. package/dist/collection/utils/store/get-set.js +1 -1
  252. package/dist/collection/utils/store/get-set.js.map +1 -1
  253. package/dist/collection/utils/testing/index.js +1 -0
  254. package/dist/collection/utils/testing/index.js.map +1 -1
  255. package/dist/collection/utils/theme.js +1 -6
  256. package/dist/collection/utils/theme.js.map +1 -1
  257. package/dist/components/algolia.js +3 -3
  258. package/dist/components/algolia.js.map +1 -1
  259. package/dist/components/algoliasearch.umd.js +2 -2
  260. package/dist/components/algoliasearch.umd.js.map +1 -1
  261. package/dist/components/component-store.js +23 -10
  262. package/dist/components/component-store.js.map +1 -1
  263. package/dist/components/datalist.js +39 -31
  264. package/dist/components/datalist.js.map +1 -1
  265. package/dist/components/date-picker.js +2 -2
  266. package/dist/components/date-picker.js.map +1 -1
  267. package/dist/components/dom.js +17 -15
  268. package/dist/components/dom.js.map +1 -1
  269. package/dist/components/dropdown.js +7 -2
  270. package/dist/components/dropdown.js.map +1 -1
  271. package/dist/components/form-control.js +2 -2
  272. package/dist/components/form-control.js.map +1 -1
  273. package/dist/components/global-nav-user-profile.js +4 -3
  274. package/dist/components/global-nav-user-profile.js.map +1 -1
  275. package/dist/components/grid-item.js +1 -1
  276. package/dist/components/grid-item.js.map +1 -1
  277. package/dist/components/grid.js +3 -1
  278. package/dist/components/grid.js.map +1 -1
  279. package/dist/components/icon-button.js +1 -1
  280. package/dist/components/icon-button.js.map +1 -1
  281. package/dist/components/icon.js +4 -11
  282. package/dist/components/icon.js.map +1 -1
  283. package/dist/components/img.js +4 -5
  284. package/dist/components/img.js.map +1 -1
  285. package/dist/components/index.d.ts +9 -0
  286. package/dist/components/index.js +23 -52
  287. package/dist/components/index.js.map +1 -1
  288. package/dist/components/index3.js +635 -1069
  289. package/dist/components/index3.js.map +1 -1
  290. package/dist/components/input.js +15 -29
  291. package/dist/components/input.js.map +1 -1
  292. package/dist/components/menu.js +4 -2
  293. package/dist/components/menu.js.map +1 -1
  294. package/dist/components/modal.js +2 -1
  295. package/dist/components/modal.js.map +1 -1
  296. package/dist/components/nano-accordion.js +1 -4
  297. package/dist/components/nano-accordion.js.map +1 -1
  298. package/dist/components/nano-alert.js +20 -14
  299. package/dist/components/nano-alert.js.map +1 -1
  300. package/dist/components/nano-algolia-filter.js +2 -2
  301. package/dist/components/nano-algolia-filter.js.map +1 -1
  302. package/dist/components/nano-algolia-input.js.map +1 -1
  303. package/dist/components/nano-checkbox-group.js +53 -9
  304. package/dist/components/nano-checkbox-group.js.map +1 -1
  305. package/dist/components/nano-checkbox.js +6 -6
  306. package/dist/components/nano-checkbox.js.map +1 -1
  307. package/dist/components/nano-date-input.js +4 -4
  308. package/dist/components/nano-date-input.js.map +1 -1
  309. package/dist/components/nano-demo.js +12 -8
  310. package/dist/components/nano-demo.js.map +1 -1
  311. package/dist/components/nano-details.js +2 -2
  312. package/dist/components/nano-details.js.map +1 -1
  313. package/dist/components/nano-dialog.js +1 -1
  314. package/dist/components/nano-dialog.js.map +1 -1
  315. package/dist/components/nano-drawer.js +1 -1
  316. package/dist/components/nano-drawer.js.map +1 -1
  317. package/dist/components/nano-field-validator.js +2 -1
  318. package/dist/components/nano-field-validator.js.map +1 -1
  319. package/dist/components/nano-file-upload.js +4 -4
  320. package/dist/components/nano-file-upload.js.map +1 -1
  321. package/dist/components/nano-global-nav.js +51 -22
  322. package/dist/components/nano-global-nav.js.map +1 -1
  323. package/dist/components/nano-global-search-results.js +5 -3
  324. package/dist/components/nano-global-search-results.js.map +1 -1
  325. package/dist/components/nano-hero.js +3 -1
  326. package/dist/components/nano-hero.js.map +1 -1
  327. package/dist/components/nano-menu-drawer.js +2 -2
  328. package/dist/components/nano-menu-drawer.js.map +1 -1
  329. package/dist/components/nano-range.js +2 -2
  330. package/dist/components/nano-range.js.map +1 -1
  331. package/dist/components/nano-rating.js +1 -1
  332. package/dist/components/nano-rating.js.map +1 -1
  333. package/dist/components/nano-slides.js +10 -20
  334. package/dist/components/nano-slides.js.map +1 -1
  335. package/dist/components/nano-split-pane.js +14 -12
  336. package/dist/components/nano-split-pane.js.map +1 -1
  337. package/dist/components/nano-tab-content.js +10 -3
  338. package/dist/components/nano-tab-content.js.map +1 -1
  339. package/dist/components/nano-tab-group.js +18 -8
  340. package/dist/components/nano-tab-group.js.map +1 -1
  341. package/dist/components/nano-tab.js +1 -1
  342. package/dist/components/nano-tab.js.map +1 -1
  343. package/dist/components/nav-item.js +5 -5
  344. package/dist/components/nav-item.js.map +1 -1
  345. package/dist/components/option.js +1 -1
  346. package/dist/components/option.js.map +1 -1
  347. package/dist/components/popover.js +60 -49
  348. package/dist/components/popover.js.map +1 -1
  349. package/dist/components/progress-bar.js +1 -1
  350. package/dist/components/progress-bar.js.map +1 -1
  351. package/dist/components/resize-observe.js +16 -8
  352. package/dist/components/resize-observe.js.map +1 -1
  353. package/dist/components/select.js +43 -56
  354. package/dist/components/select.js.map +1 -1
  355. package/dist/components/skeleton.js +1 -1
  356. package/dist/components/skeleton.js.map +1 -1
  357. package/dist/components/spinner.js +2 -2
  358. package/dist/components/spinner.js.map +1 -1
  359. package/dist/components/sticker.js +4 -2
  360. package/dist/components/sticker.js.map +1 -1
  361. package/dist/components/table.js +117 -152
  362. package/dist/components/table.js.map +1 -1
  363. package/dist/components/theme.js +1 -6
  364. package/dist/components/theme.js.map +1 -1
  365. package/dist/components/tooltip.js +1 -1
  366. package/dist/components/tooltip.js.map +1 -1
  367. package/dist/esm/{algolia-data-b5cd0c58.js → algolia-data-c4ed188c.js} +2 -2
  368. package/dist/esm/{algolia-data-b5cd0c58.js.map → algolia-data-c4ed188c.js.map} +1 -1
  369. package/dist/esm/{algoliasearch.umd-86359963.js → algoliasearch.umd-4f7efa84.js} +3 -3
  370. package/dist/esm/{algoliasearch.umd-86359963.js.map → algoliasearch.umd-4f7efa84.js.map} +1 -1
  371. package/dist/esm/{component-store-ec512820.js → component-store-6eccd724.js} +25 -12
  372. package/dist/esm/component-store-6eccd724.js.map +1 -0
  373. package/dist/esm/{dom-d3ad49e2.js → dom-311c9e1e.js} +15 -15
  374. package/dist/esm/dom-311c9e1e.js.map +1 -0
  375. package/dist/esm/{form-control-84bac7a2.js → form-control-3284c2c9.js} +4 -4
  376. package/dist/esm/form-control-3284c2c9.js.map +1 -0
  377. package/dist/{cjs/global-989678ec.js → esm/global-f6e05656.js} +3 -16
  378. package/dist/esm/global-f6e05656.js.map +1 -0
  379. package/dist/esm/{index-c752dae1.js → index-38484737.js} +2 -2
  380. package/dist/esm/{index-c752dae1.js.map → index-38484737.js.map} +1 -1
  381. package/dist/esm/{index-3c280603.js → index-b4e277ad.js} +1438 -517
  382. package/dist/esm/index-b4e277ad.js.map +1 -0
  383. package/dist/{components/index4.js → esm/index-f626f476.js} +2 -10
  384. package/dist/esm/index-f626f476.js.map +1 -0
  385. package/dist/esm/index.js +18 -36
  386. package/dist/esm/index.js.map +1 -1
  387. package/dist/esm/loader.js +5 -4
  388. package/dist/esm/loader.js.map +1 -1
  389. package/dist/esm/{modal-5c9ce466.js → modal-1f3223cd.js} +3 -2
  390. package/dist/esm/modal-1f3223cd.js.map +1 -0
  391. package/dist/esm/nano-accordion.entry.js +4 -7
  392. package/dist/esm/nano-accordion.entry.js.map +1 -1
  393. package/dist/esm/nano-alert.entry.js +25 -19
  394. package/dist/esm/nano-alert.entry.js.map +1 -1
  395. package/dist/esm/nano-algolia-filter.entry.js +5 -5
  396. package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
  397. package/dist/esm/nano-algolia-input.entry.js +4 -4
  398. package/dist/esm/nano-algolia-input.entry.js.map +1 -1
  399. package/dist/esm/nano-algolia-pagination.entry.js +2 -2
  400. package/dist/esm/nano-algolia-results.entry.js +2 -2
  401. package/dist/esm/nano-algolia.entry.js +8 -8
  402. package/dist/esm/nano-algolia.entry.js.map +1 -1
  403. package/dist/esm/nano-aspect-ratio.entry.js +1 -1
  404. package/dist/esm/nano-checkbox-group.entry.js +52 -9
  405. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  406. package/dist/esm/nano-checkbox.entry.js +8 -8
  407. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  408. package/dist/esm/nano-components.js +5 -4
  409. package/dist/esm/nano-components.js.map +1 -1
  410. package/dist/esm/nano-datalist_3.entry.js +46 -36
  411. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  412. package/dist/esm/nano-date-input.entry.js +6 -6
  413. package/dist/esm/nano-date-input.entry.js.map +1 -1
  414. package/dist/esm/nano-date-picker.entry.js +4 -4
  415. package/dist/esm/nano-date-picker.entry.js.map +1 -1
  416. package/dist/esm/nano-demo.entry.js +13 -9
  417. package/dist/esm/nano-demo.entry.js.map +1 -1
  418. package/dist/esm/nano-details.entry.js +4 -4
  419. package/dist/esm/nano-details.entry.js.map +1 -1
  420. package/dist/esm/nano-dialog.entry.js +6 -6
  421. package/dist/esm/nano-dialog.entry.js.map +1 -1
  422. package/dist/esm/nano-drawer.entry.js +5 -5
  423. package/dist/esm/nano-drawer.entry.js.map +1 -1
  424. package/dist/esm/nano-dropdown.entry.js +9 -4
  425. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  426. package/dist/esm/nano-field-validator.entry.js +4 -3
  427. package/dist/esm/nano-field-validator.entry.js.map +1 -1
  428. package/dist/esm/nano-file-upload.entry.js +5 -5
  429. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  430. package/dist/esm/nano-global-nav-user-profile_3.entry.js +54 -67
  431. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  432. package/dist/esm/nano-global-nav.entry.js +54 -26
  433. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  434. package/dist/esm/nano-global-search-results.entry.js +6 -4
  435. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  436. package/dist/esm/nano-grid_3.entry.js +8 -7
  437. package/dist/esm/nano-grid_3.entry.js.map +1 -1
  438. package/dist/esm/nano-hero.entry.js +4 -2
  439. package/dist/esm/nano-hero.entry.js.map +1 -1
  440. package/dist/esm/nano-icon-button.entry.js +2 -2
  441. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  442. package/dist/esm/nano-icon.entry.js +7 -14
  443. package/dist/esm/nano-icon.entry.js.map +1 -1
  444. package/dist/esm/nano-input.entry.js +19 -33
  445. package/dist/esm/nano-input.entry.js.map +1 -1
  446. package/dist/esm/nano-menu-drawer.entry.js +3 -3
  447. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  448. package/dist/esm/nano-progress-bar_2.entry.js +4 -4
  449. package/dist/esm/nano-progress-bar_2.entry.js.map +1 -1
  450. package/dist/esm/nano-range.entry.js +4 -4
  451. package/dist/esm/nano-range.entry.js.map +1 -1
  452. package/dist/esm/nano-rating.entry.js +2 -2
  453. package/dist/esm/nano-rating.entry.js.map +1 -1
  454. package/dist/esm/nano-resize-observe_2.entry.js +18 -10
  455. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  456. package/dist/esm/nano-slide.entry.js +1 -1
  457. package/dist/esm/nano-slides.entry.js +11 -21
  458. package/dist/esm/nano-slides.entry.js.map +1 -1
  459. package/dist/esm/nano-spinner.entry.js +3 -3
  460. package/dist/esm/nano-spinner.entry.js.map +1 -1
  461. package/dist/esm/nano-split-pane.entry.js +15 -13
  462. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  463. package/dist/esm/nano-sticker.entry.js +6 -4
  464. package/dist/esm/nano-sticker.entry.js.map +1 -1
  465. package/dist/esm/nano-tab-content.entry.js +9 -3
  466. package/dist/esm/nano-tab-content.entry.js.map +1 -1
  467. package/dist/esm/nano-tab-group.entry.js +18 -12
  468. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  469. package/dist/esm/nano-tab.entry.js +2 -2
  470. package/dist/esm/nano-tab.entry.js.map +1 -1
  471. package/dist/esm/{nano-table-1f4fe4ad.js → nano-table-5ff91f0f.js} +115 -150
  472. package/dist/esm/nano-table-5ff91f0f.js.map +1 -0
  473. package/dist/esm/nano-table.entry.js +3 -3
  474. package/dist/esm/polyfills/css-shim.js +1 -1
  475. package/dist/esm/{popover-e748bb61.js → popover-02e6714d.js} +61 -50
  476. package/dist/esm/popover-02e6714d.js.map +1 -0
  477. package/dist/esm/{scroll-a1e59d8c.js → scroll-e5825d8d.js} +2 -2
  478. package/dist/esm/{scroll-a1e59d8c.js.map → scroll-e5825d8d.js.map} +1 -1
  479. package/dist/esm/{table.worker-ddbd23c3.js → table.worker-5c1bb1ce.js} +4 -4
  480. package/dist/esm/table.worker-5c1bb1ce.js.map +1 -0
  481. package/dist/esm/{theme-931bd452.js → theme-82feb8cf.js} +2 -7
  482. package/dist/esm/theme-82feb8cf.js.map +1 -0
  483. package/dist/nano-components/index.esm.js +1 -1
  484. package/dist/nano-components/index.esm.js.map +1 -1
  485. package/dist/nano-components/nano-components.esm.js +1 -1
  486. package/dist/nano-components/nano-components.esm.js.map +1 -1
  487. package/dist/nano-components/{p-1a8e60c4.entry.js → p-0411f019.entry.js} +2 -2
  488. package/dist/nano-components/p-0411f019.entry.js.map +1 -0
  489. package/dist/nano-components/p-13b2d70c.entry.js +5 -0
  490. package/dist/nano-components/p-13b2d70c.entry.js.map +1 -0
  491. package/dist/nano-components/p-167b9165.js.map +1 -1
  492. package/dist/nano-components/p-1d21b2ce.entry.js +5 -0
  493. package/dist/nano-components/p-1d21b2ce.entry.js.map +1 -0
  494. package/dist/nano-components/p-2155fc2c.js.map +1 -1
  495. package/dist/nano-components/p-257432ff.js +5 -0
  496. package/dist/nano-components/p-257432ff.js.map +1 -0
  497. package/dist/nano-components/p-264903b5.entry.js +5 -0
  498. package/dist/nano-components/p-264903b5.entry.js.map +1 -0
  499. package/dist/nano-components/p-320366a2.entry.js +5 -0
  500. package/dist/nano-components/p-320366a2.entry.js.map +1 -0
  501. package/dist/nano-components/p-364434b4.entry.js +5 -0
  502. package/dist/nano-components/p-364434b4.entry.js.map +1 -0
  503. package/dist/nano-components/{p-3f25fc76.entry.js → p-36d5a41d.entry.js} +2 -2
  504. package/dist/nano-components/p-36d5a41d.entry.js.map +1 -0
  505. package/dist/nano-components/{p-1e709f87.entry.js → p-371fe61d.entry.js} +2 -2
  506. package/dist/nano-components/p-371fe61d.entry.js.map +1 -0
  507. package/dist/nano-components/p-3d658ce2.entry.js +5 -0
  508. package/dist/nano-components/p-3d658ce2.entry.js.map +1 -0
  509. package/dist/nano-components/p-3e95778d.entry.js +5 -0
  510. package/dist/nano-components/p-3e95778d.entry.js.map +1 -0
  511. package/dist/nano-components/p-400d698f.entry.js +5 -0
  512. package/dist/nano-components/p-400d698f.entry.js.map +1 -0
  513. package/dist/nano-components/p-411bb8f1.js +5 -0
  514. package/dist/nano-components/p-411bb8f1.js.map +1 -0
  515. package/dist/nano-components/p-41811365.js +5 -0
  516. package/dist/nano-components/p-41811365.js.map +1 -0
  517. package/dist/nano-components/p-45abbbdd.js.map +1 -1
  518. package/dist/nano-components/{p-885b6950.js → p-45b7682a.js} +2 -2
  519. package/dist/nano-components/p-45b7682a.js.map +1 -0
  520. package/dist/nano-components/p-4b1d73e9.entry.js +5 -0
  521. package/dist/nano-components/p-4b1d73e9.entry.js.map +1 -0
  522. package/dist/nano-components/{p-69e5a37d.entry.js → p-4e104cb1.entry.js} +2 -2
  523. package/dist/nano-components/p-4e104cb1.entry.js.map +1 -0
  524. package/dist/nano-components/p-51bc8b59.js +5 -0
  525. package/dist/nano-components/p-51bc8b59.js.map +1 -0
  526. package/dist/nano-components/p-5a466c9f.entry.js +5 -0
  527. package/dist/nano-components/p-5a466c9f.entry.js.map +1 -0
  528. package/dist/nano-components/{p-bd05b3aa.entry.js → p-5f1b94f0.entry.js} +2 -2
  529. package/dist/nano-components/{p-bd05b3aa.entry.js.map → p-5f1b94f0.entry.js.map} +1 -1
  530. package/dist/nano-components/p-60823325.entry.js +5 -0
  531. package/dist/nano-components/p-60823325.entry.js.map +1 -0
  532. package/dist/nano-components/p-6760e54a.entry.js +5 -0
  533. package/dist/nano-components/p-6760e54a.entry.js.map +1 -0
  534. package/dist/nano-components/p-69774e99.entry.js +5 -0
  535. package/dist/nano-components/p-69774e99.entry.js.map +1 -0
  536. package/dist/nano-components/p-69a3e911.js.map +1 -1
  537. package/dist/nano-components/p-6bca2d00.entry.js +5 -0
  538. package/dist/nano-components/p-6bca2d00.entry.js.map +1 -0
  539. package/dist/nano-components/p-74a7fc4f.js.map +1 -1
  540. package/dist/nano-components/{p-dba8a88d.entry.js → p-78169835.entry.js} +2 -2
  541. package/dist/nano-components/p-78169835.entry.js.map +1 -0
  542. package/dist/nano-components/p-817eda34.entry.js +5 -0
  543. package/dist/nano-components/p-817eda34.entry.js.map +1 -0
  544. package/dist/nano-components/p-866c73c0.entry.js +5 -0
  545. package/dist/nano-components/p-866c73c0.entry.js.map +1 -0
  546. package/dist/nano-components/p-87a76a81.entry.js +5 -0
  547. package/dist/nano-components/{p-41addb3a.entry.js.map → p-87a76a81.entry.js.map} +1 -1
  548. package/dist/nano-components/p-8907dd24.entry.js +5 -0
  549. package/dist/nano-components/p-8907dd24.entry.js.map +1 -0
  550. package/dist/nano-components/p-90365d7b.entry.js +5 -0
  551. package/dist/nano-components/p-90365d7b.entry.js.map +1 -0
  552. package/dist/nano-components/p-909a424c.js +5 -0
  553. package/dist/nano-components/p-909a424c.js.map +1 -0
  554. package/dist/nano-components/p-9746b0a5.js.map +1 -1
  555. package/dist/nano-components/p-9cf5fda3.entry.js +5 -0
  556. package/dist/nano-components/p-9cf5fda3.entry.js.map +1 -0
  557. package/dist/nano-components/p-9fcd383f.entry.js +5 -0
  558. package/dist/nano-components/p-9fcd383f.entry.js.map +1 -0
  559. package/dist/nano-components/p-9fda481b.entry.js +5 -0
  560. package/dist/nano-components/p-9fda481b.entry.js.map +1 -0
  561. package/dist/nano-components/p-abd6b774.entry.js +5 -0
  562. package/dist/nano-components/p-abd6b774.entry.js.map +1 -0
  563. package/dist/nano-components/p-b933f3c8.js.map +1 -1
  564. package/dist/nano-components/{p-2828788c.js → p-bb07c3d0.js} +2 -2
  565. package/dist/nano-components/p-bb07c3d0.js.map +1 -0
  566. package/dist/nano-components/p-bb6f7c39.js +5 -0
  567. package/dist/nano-components/p-bb6f7c39.js.map +1 -0
  568. package/dist/nano-components/p-bf91c50e.js +6 -0
  569. package/dist/nano-components/p-bf91c50e.js.map +1 -0
  570. package/dist/nano-components/{p-b40eedcb.entry.js → p-bfbfec85.entry.js} +2 -2
  571. package/dist/nano-components/p-bfbfec85.entry.js.map +1 -0
  572. package/dist/nano-components/{p-447a5910.entry.js → p-c0681b2b.entry.js} +2 -2
  573. package/dist/nano-components/p-c0681b2b.entry.js.map +1 -0
  574. package/dist/nano-components/p-c0ca353b.entry.js +5 -0
  575. package/dist/nano-components/p-c0ca353b.entry.js.map +1 -0
  576. package/dist/nano-components/p-c4e8d584.entry.js +5 -0
  577. package/dist/nano-components/p-c4e8d584.entry.js.map +1 -0
  578. package/dist/nano-components/p-cecb9af1.js.map +1 -1
  579. package/dist/nano-components/p-d4f6ec9f.js +5 -0
  580. package/dist/nano-components/p-d4f6ec9f.js.map +1 -0
  581. package/dist/nano-components/p-d753f35a.entry.js +5 -0
  582. package/dist/nano-components/p-d753f35a.entry.js.map +1 -0
  583. package/dist/nano-components/{p-651b3264.js → p-d7ff8f12.js} +2 -2
  584. package/dist/nano-components/p-d7ff8f12.js.map +1 -0
  585. package/dist/nano-components/{p-0582afcc.js → p-d92b762b.js} +2 -2
  586. package/dist/nano-components/p-d92b762b.js.map +1 -0
  587. package/dist/nano-components/p-de25ba80.entry.js +5 -0
  588. package/dist/nano-components/p-de25ba80.entry.js.map +1 -0
  589. package/dist/nano-components/{p-c9a7c7ea.js → p-e04f2333.js} +2 -2
  590. package/dist/nano-components/p-e04f2333.js.map +1 -0
  591. package/dist/nano-components/p-e19d6a92.entry.js +5 -0
  592. package/dist/nano-components/p-e19d6a92.entry.js.map +1 -0
  593. package/dist/nano-components/{p-63834d50.js → p-ed2e6f32.js} +2 -2
  594. package/dist/nano-components/p-ed2e6f32.js.map +1 -0
  595. package/dist/nano-components/p-ed69b27b.entry.js +5 -0
  596. package/dist/nano-components/p-ed69b27b.entry.js.map +1 -0
  597. package/dist/nano-components/{p-a0b93616.js → p-ed6adde2.js} +3 -3
  598. package/dist/nano-components/p-ed6adde2.js.map +1 -0
  599. package/dist/nano-components/p-ee045579.js.map +1 -1
  600. package/dist/nano-components/{p-151aad1e.entry.js → p-f2875bf0.entry.js} +4 -4
  601. package/dist/nano-components/p-f2875bf0.entry.js.map +1 -0
  602. package/dist/nano-components/p-f28c802d.entry.js +5 -0
  603. package/dist/nano-components/p-f28c802d.entry.js.map +1 -0
  604. package/dist/nano-components/{p-a2d0d7b9.entry.js → p-f47776fd.entry.js} +2 -2
  605. package/dist/nano-components/p-f47776fd.entry.js.map +1 -0
  606. package/dist/nano-components/p-f8f89998.js.map +1 -1
  607. package/dist/nano-components/p-fccd59e4.entry.js +5 -0
  608. package/dist/nano-components/p-fccd59e4.entry.js.map +1 -0
  609. package/dist/nano-components/p-fe1446cd.entry.js +5 -0
  610. package/dist/nano-components/p-fe1446cd.entry.js.map +1 -0
  611. package/dist/themes/london-calling.css +1 -1
  612. package/dist/themes/london-calling.css.map +1 -1
  613. package/dist/themes/nanopore.css +1 -1
  614. package/dist/themes/nanopore.css.map +1 -1
  615. package/dist/types/components/alert/alert-interface.d.ts +1 -1
  616. package/dist/types/components/algolia/algolia-input.d.ts +1 -1
  617. package/dist/types/components/algolia/algolia.d.ts +2 -2
  618. package/dist/types/components/checkbox/checkbox-group.d.ts +11 -0
  619. package/dist/types/components/date-picker/date-picker-interface.d.ts +2 -2
  620. package/dist/types/components/date-picker/duet-date-picker/date-adapter.d.ts +3 -3
  621. package/dist/types/components/date-picker/duet-date-picker/date-localization.d.ts +3 -3
  622. package/dist/types/components/date-picker/duet-date-picker/date-picker-day.d.ts +1 -1
  623. package/dist/types/components/date-picker/duet-date-picker/date-picker-month.d.ts +1 -1
  624. package/dist/types/components/field-validator/field-validator-interface.d.ts +4 -4
  625. package/dist/types/components/file-upload/file-upload.d.ts +1 -1
  626. package/dist/types/components/global-nav/global-nav.d.ts +12 -6
  627. package/dist/types/components/icon/icon.d.ts +3 -3
  628. package/dist/types/components/menu/menu.d.ts +1 -1
  629. package/dist/types/components/nav-item/nav-item.d.ts +1 -1
  630. package/dist/types/components/range/range-interface.d.ts +2 -2
  631. package/dist/types/components/resize-observe/resize-observe.d.ts +1 -0
  632. package/dist/types/components/slides/slides-interface.d.ts +2 -2
  633. package/dist/types/components/slides/slides.d.ts +0 -2
  634. package/dist/types/components/table/table.cell.d.ts +1 -1
  635. package/dist/types/components/table/table.d.ts +9 -14
  636. package/dist/types/components/table/table.header.d.ts +1 -1
  637. package/dist/types/components/table/table.row.d.ts +2 -2
  638. package/dist/types/components/table/table.utils.d.ts +2 -1
  639. package/dist/types/components/tabs/tab-content.d.ts +2 -0
  640. package/dist/types/components.d.ts +829 -9
  641. package/dist/types/index.d.ts +5 -0
  642. package/dist/types/stencil-public-runtime.d.ts +48 -3
  643. package/dist/types/utils/dom.d.ts +9 -0
  644. package/dist/types/utils/gesture/index.d.ts +1 -1
  645. package/dist/types/utils/popover.d.ts +1 -1
  646. package/dist/types/utils/store/component-store.d.ts +2 -2
  647. package/dist/types/utils/testing/index.d.ts +1 -1
  648. package/docs-json.json +89 -50
  649. package/docs-vscode.json +8 -4
  650. package/hydrate/index.d.ts +853 -0
  651. package/{dist/custom-elements → hydrate}/index.js +11476 -7950
  652. package/hydrate/package.json +6 -0
  653. package/loader/index.d.ts +9 -0
  654. package/package.json +24 -16
  655. package/dist/cjs/component-store-d7c8c326.js.map +0 -1
  656. package/dist/cjs/dom-d7c33f11.js.map +0 -1
  657. package/dist/cjs/form-control-57c71246.js.map +0 -1
  658. package/dist/cjs/global-989678ec.js.map +0 -1
  659. package/dist/cjs/index-41582c2a.js.map +0 -1
  660. package/dist/cjs/index-75b61776.js +0 -1077
  661. package/dist/cjs/index-75b61776.js.map +0 -1
  662. package/dist/cjs/index-ece1cb9e.js.map +0 -1
  663. package/dist/cjs/modal-e4defcc3.js.map +0 -1
  664. package/dist/cjs/nano-table-820b04d5.js.map +0 -1
  665. package/dist/cjs/popover-508bcedb.js.map +0 -1
  666. package/dist/cjs/table.worker-9e238d16.js.map +0 -1
  667. package/dist/cjs/theme-50275e1a.js.map +0 -1
  668. package/dist/components/index4.js.map +0 -1
  669. package/dist/custom-elements/index.d.ts +0 -339
  670. package/dist/custom-elements/index.js.map +0 -1
  671. package/dist/esm/component-store-ec512820.js.map +0 -1
  672. package/dist/esm/dom-d3ad49e2.js.map +0 -1
  673. package/dist/esm/form-control-84bac7a2.js.map +0 -1
  674. package/dist/esm/global-8047b4ff.js.map +0 -1
  675. package/dist/esm/index-3bbaffe4.js +0 -1075
  676. package/dist/esm/index-3bbaffe4.js.map +0 -1
  677. package/dist/esm/index-3c280603.js.map +0 -1
  678. package/dist/esm/index-dc076ea6.js +0 -649
  679. package/dist/esm/index-dc076ea6.js.map +0 -1
  680. package/dist/esm/modal-5c9ce466.js.map +0 -1
  681. package/dist/esm/nano-table-1f4fe4ad.js.map +0 -1
  682. package/dist/esm/popover-e748bb61.js.map +0 -1
  683. package/dist/esm/table.worker-ddbd23c3.js.map +0 -1
  684. package/dist/esm/theme-931bd452.js.map +0 -1
  685. package/dist/nano-components/p-0582afcc.js.map +0 -1
  686. package/dist/nano-components/p-135fed16.entry.js +0 -5
  687. package/dist/nano-components/p-135fed16.entry.js.map +0 -1
  688. package/dist/nano-components/p-151aad1e.entry.js.map +0 -1
  689. package/dist/nano-components/p-15543295.entry.js +0 -5
  690. package/dist/nano-components/p-15543295.entry.js.map +0 -1
  691. package/dist/nano-components/p-1a8e60c4.entry.js.map +0 -1
  692. package/dist/nano-components/p-1e709f87.entry.js.map +0 -1
  693. package/dist/nano-components/p-1f347342.entry.js +0 -5
  694. package/dist/nano-components/p-1f347342.entry.js.map +0 -1
  695. package/dist/nano-components/p-1fe12320.js +0 -6
  696. package/dist/nano-components/p-1fe12320.js.map +0 -1
  697. package/dist/nano-components/p-23575705.entry.js +0 -5
  698. package/dist/nano-components/p-23575705.entry.js.map +0 -1
  699. package/dist/nano-components/p-2828788c.js.map +0 -1
  700. package/dist/nano-components/p-284dd9a2.entry.js +0 -5
  701. package/dist/nano-components/p-284dd9a2.entry.js.map +0 -1
  702. package/dist/nano-components/p-2a97ef51.entry.js +0 -5
  703. package/dist/nano-components/p-2a97ef51.entry.js.map +0 -1
  704. package/dist/nano-components/p-36842a50.entry.js +0 -5
  705. package/dist/nano-components/p-36842a50.entry.js.map +0 -1
  706. package/dist/nano-components/p-3a1026d1.entry.js +0 -5
  707. package/dist/nano-components/p-3a1026d1.entry.js.map +0 -1
  708. package/dist/nano-components/p-3f25fc76.entry.js.map +0 -1
  709. package/dist/nano-components/p-41addb3a.entry.js +0 -5
  710. package/dist/nano-components/p-447a5910.entry.js.map +0 -1
  711. package/dist/nano-components/p-4b69178e.entry.js +0 -5
  712. package/dist/nano-components/p-4b69178e.entry.js.map +0 -1
  713. package/dist/nano-components/p-559a6492.entry.js +0 -5
  714. package/dist/nano-components/p-559a6492.entry.js.map +0 -1
  715. package/dist/nano-components/p-5d149792.entry.js +0 -5
  716. package/dist/nano-components/p-5d149792.entry.js.map +0 -1
  717. package/dist/nano-components/p-63834d50.js.map +0 -1
  718. package/dist/nano-components/p-651b3264.js.map +0 -1
  719. package/dist/nano-components/p-69e5a37d.entry.js.map +0 -1
  720. package/dist/nano-components/p-6ad194e4.entry.js +0 -5
  721. package/dist/nano-components/p-6ad194e4.entry.js.map +0 -1
  722. package/dist/nano-components/p-6cb77d5c.entry.js +0 -5
  723. package/dist/nano-components/p-6cb77d5c.entry.js.map +0 -1
  724. package/dist/nano-components/p-73860775.js +0 -5
  725. package/dist/nano-components/p-73860775.js.map +0 -1
  726. package/dist/nano-components/p-77cad8d1.js +0 -5
  727. package/dist/nano-components/p-77cad8d1.js.map +0 -1
  728. package/dist/nano-components/p-793588d1.js +0 -5
  729. package/dist/nano-components/p-793588d1.js.map +0 -1
  730. package/dist/nano-components/p-7b3638b7.js +0 -5
  731. package/dist/nano-components/p-7b3638b7.js.map +0 -1
  732. package/dist/nano-components/p-845ae77e.js +0 -5
  733. package/dist/nano-components/p-845ae77e.js.map +0 -1
  734. package/dist/nano-components/p-885b6950.js.map +0 -1
  735. package/dist/nano-components/p-8d747891.js +0 -5
  736. package/dist/nano-components/p-8d747891.js.map +0 -1
  737. package/dist/nano-components/p-9059c8c1.entry.js +0 -5
  738. package/dist/nano-components/p-9059c8c1.entry.js.map +0 -1
  739. package/dist/nano-components/p-92504f7f.entry.js +0 -5
  740. package/dist/nano-components/p-92504f7f.entry.js.map +0 -1
  741. package/dist/nano-components/p-99fbae74.entry.js +0 -5
  742. package/dist/nano-components/p-99fbae74.entry.js.map +0 -1
  743. package/dist/nano-components/p-9a4297e1.entry.js +0 -5
  744. package/dist/nano-components/p-9a4297e1.entry.js.map +0 -1
  745. package/dist/nano-components/p-9eeed8f5.entry.js +0 -5
  746. package/dist/nano-components/p-9eeed8f5.entry.js.map +0 -1
  747. package/dist/nano-components/p-a0b93616.js.map +0 -1
  748. package/dist/nano-components/p-a183e3c7.entry.js +0 -5
  749. package/dist/nano-components/p-a183e3c7.entry.js.map +0 -1
  750. package/dist/nano-components/p-a2d0d7b9.entry.js.map +0 -1
  751. package/dist/nano-components/p-a5abfed9.entry.js +0 -5
  752. package/dist/nano-components/p-a5abfed9.entry.js.map +0 -1
  753. package/dist/nano-components/p-b25e79b8.entry.js +0 -5
  754. package/dist/nano-components/p-b25e79b8.entry.js.map +0 -1
  755. package/dist/nano-components/p-b40eedcb.entry.js.map +0 -1
  756. package/dist/nano-components/p-b55ffa92.entry.js +0 -5
  757. package/dist/nano-components/p-b55ffa92.entry.js.map +0 -1
  758. package/dist/nano-components/p-b87539f0.entry.js +0 -5
  759. package/dist/nano-components/p-b87539f0.entry.js.map +0 -1
  760. package/dist/nano-components/p-c9a7c7ea.js.map +0 -1
  761. package/dist/nano-components/p-ca567f01.entry.js +0 -5
  762. package/dist/nano-components/p-ca567f01.entry.js.map +0 -1
  763. package/dist/nano-components/p-cc5e7acb.entry.js +0 -5
  764. package/dist/nano-components/p-cc5e7acb.entry.js.map +0 -1
  765. package/dist/nano-components/p-d5303933.entry.js +0 -5
  766. package/dist/nano-components/p-d5303933.entry.js.map +0 -1
  767. package/dist/nano-components/p-d565991d.entry.js +0 -5
  768. package/dist/nano-components/p-d565991d.entry.js.map +0 -1
  769. package/dist/nano-components/p-dba8a88d.entry.js.map +0 -1
  770. package/dist/nano-components/p-dc50b93c.entry.js +0 -5
  771. package/dist/nano-components/p-dc50b93c.entry.js.map +0 -1
  772. package/dist/nano-components/p-e3860f00.js +0 -5
  773. package/dist/nano-components/p-e3860f00.js.map +0 -1
  774. package/dist/nano-components/p-e5408bc8.entry.js +0 -5
  775. package/dist/nano-components/p-e5408bc8.entry.js.map +0 -1
  776. package/dist/nano-components/p-ea2de992.js +0 -19
  777. package/dist/nano-components/p-ea2de992.js.map +0 -1
  778. package/dist/nano-components/p-f7471cca.entry.js +0 -5
  779. package/dist/nano-components/p-f7471cca.entry.js.map +0 -1
  780. package/dist/nano-components/p-fe94eeff.entry.js +0 -5
  781. package/dist/nano-components/p-fe94eeff.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["async","clientFetch","url","_a","body","customConfig","__rest","headers","Accept","Cache","config","Object","assign","method","credentials","keepalive","mode","JSON","stringify","id","setTimeout","window","AbortController","controller","timeout","abort","signal","response","fetch","clearTimeout","ok","json","errorMessage","text","Error","globalNavCss","THRESHOLDBREAKS","about","main","login","search","icon","GlobalNav","this","currSize","thresholdsGoingUp","THRESHOLDLIMIT","keys","length","autocompleteEles","currAIndex","isLoggedIn","myAccData","aboutNavItms","siteNavItms","loggedInNavItms","setResizingState","state","debounceSetResizingState","debounce","isResizing","onMenuBtnKeyDown","ev","key","modalOpen","menuClose","menuOpen","onMenuBtnClick","e","preventDefault","menuDiv","style","display","modalIsOpen","menuWrapDiv","addEventListener","focus","preventScroll","threshold","scrollHeight","innerHeight","document","overflow","menuFullScreen","overflowX","onMenuHidden","removeEventListener","activeElement","menuBtn","mainBarDiv","force","relatedTarget","closestElement","closest","requestAnimationFrame","secondaryMenuOpen","subMenuClose","target","open","onUserBtnClick","userMenuOpen","onUserBtnKeyDown","onUserMenuBlur","onSearchBtnClick","searchBarShown","searchbarShow","searchbarHide","onSearchBtnKeyDown","onSearchBarShown","searchBarEl","searchInput","setFocus","showAutocomplete","searchValInternal","onSearchBarHidden","height","onSearchInput","value","isSearchValSet","searchLoading","detail","type","onSearchChange","searchValue","autocompleteResults","nanoSearchReset","emit","currentIndex","currentSelectedIndex","processSearchResults","alogliaIndex","attributesToSnippet","hitsPerPage","filters","Math","floor","Date","now","console","error","scopeSearch","onSearchSubmit","showAutocompleteResults","algoliaSearchResults","queries","internalSearchIndeces","map","index","indexName","query","facets","algoliaClient","multipleQueries","nanoSearchError","results","result","i","name","selected","domain","domains","allGroup","nanoSearchResult","client","apiKey","searchApiKey","appId","searchAppId","onSearchIndexChange","indexStr","selectedIndex","find","searchIndex","switchIndexSubmit","onAutocompleteBlur","hits","onAutocompleteInteract","testIndex","el","shadowRoot","found","ele","setActiveElement","click","encodeURIComponent","location","href","protocol","host","handleMyAccountData","myAccountData","user","links","myAccountUser","processMyAccLinks","processMyAccData","remoteDataReady","env","userProfileUrl","getMyAccountData","ssoDataUrl","import","foundIndex","changeInternalSearchVal","initAlgoliaClient","algoliasearch","addAlgoliaIndeces","addIndeces","searchIndeces","forEach","initIndex","thresholdChange","newThreshold","oldThreshold","ratioChange","intersectRatio","thresholdReady","menuItems","barItems","readTask","Array","from","querySelectorAll","push","writeTask","item","classList","add","remove","assessReady","ready","remoteReady","attachIO","isReady","nanoIsReady","setupAutocompleteBlur","closeSearchBar","slotChange","thresholdClasses","classes","onWindowResize","innerWidth","secondaryOpen","secondaryMenu","stopPropagation","menuSelectedItems","menuContentDiv","minHeight","secondaryClose","displayTransition","userLinkPanel","widgetHeight","querySelector","toString","autocompleteSnippet","hit","lookFor","_snippetResult","prop","matchLevel","title","substring","resetHitFocus","autocompleteEle","setAttribute","assessSlottedContent","hasSiteSlot","hasLoggedinSlot","hasPromotionSlot","aboutSlotLen","iconSlotLen","mainSlotLen","overflowSlotLen","searchSlotLen","io","root","IntersectionObserver","data","slice","intersectionRatio","observe","componentDidLoad","debounceResize","bind","componentWillLoad","ComponentStore","init","MutationObserver","mo","childList","subtree","disconnectedCallback","disconnect","undefined","connectedCallback","getMyAccData","autocompleteList","content","scrollingUp","currentScopeHits","scopeChangeSuggestions","scopeSuggestReducer","total","currentSuggestReducer","reduce","scopeSuggestions","h","class","role","ref","a","tabindex","innerHTML","button","onClick","onMouseDown","hidden","onKeyDown","searchWidget","onSubmit","label","hideLabel","showInlineError","onNanoChange","mask","slot","placeholder","input","onNanoInput","onNanoFocus","render","isRtl","ownerDocument","dir","Host","join","resizing","div","activeMyAccountSections","includes","msgUrl","msgCount","cartUrl","cartCount","urls","ssoRedirect","link","address","small_avatar_url","forgot_password","logout","quietMode","w","btn","showLogo","logoUrl","src","getAssetPath","alt","showSearch","_b","show","onTouchEnd","domainFor","origin","dm","multiResults","singleResult","match","indeces","api_key","app_id","cart","count","notifications","messages","area"],"sources":["./src/utils/fetch.ts","./src/components/global-nav/style/global-nav.scss?tag=nano-global-nav&encapsulation=shadow","./src/components/global-nav/global-nav.tsx"],"sourcesContent":["interface FetchInputConfig {\n body?: { [prop: string]: string };\n headers?: { [prop: string]: string };\n [prop: string]: any;\n}\n\nexport async function clientFetch(\n url: string,\n { body, ...customConfig }: FetchInputConfig = {}\n) {\n const headers: { [prop: string]: string } = {\n Accept: 'application/json, text/plain, */*',\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n Cache: 'no-cache',\n };\n const config: RequestInit = {\n method: body ? 'POST' : 'GET',\n credentials: 'include',\n keepalive: true,\n mode: 'cors',\n ...customConfig,\n headers: {\n ...headers,\n ...customConfig.headers,\n },\n };\n if (body) {\n config.body = JSON.stringify(body);\n }\n\n let id = setTimeout(() => {}, 0);\n if (window.AbortController) {\n const controller = new AbortController();\n const { timeout = 500 } = customConfig;\n id = setTimeout(() => controller.abort(), timeout);\n config.signal = controller.signal;\n }\n\n const response = await fetch(url, config);\n clearTimeout(id);\n\n if (response.ok) {\n return await response.json();\n } else {\n const errorMessage = await response.text();\n return new Error(errorMessage);\n }\n}\n","@use 'sass:map';\n@use 'sass:list';\n@use '../../../global/style/nano-theme/form' as nanoForm;\n\n// globals\n@import '../../../global/style/utilities/globals';\n@import '../../../global/style/nano-theme/base';\n@import '../../../global/style/nano-theme/colours';\n@import '../../../global/style/nano-theme/layers';\n\n// local\n@import 'setup';\n@import 'bar';\n@import 'burger';\n@import 'search';\n@import 'user';\n\n:host {\n /**\n * @prop --bar-vertical-padding: Defaults to 21px;\n * @prop --bar-item-spacing: Defaults to 16px;\n * @prop --bar-background: Defaults to white;\n * @prop --bar-text-color: Defaults to #196c82;\n * @prop --bar-color-shade: Defaults to rgb(19, 89, 111);\n * @prop --bar-color-tint: Defaults to rgb(19, 89, 111);\n * @prop --bar-color-focus: Defaults to #001a21;\n * @prop --bar-user-panel-bg: Defaults to #016d86;\n\n * @prop --menu-background: Defaults to #001a21;\n * @prop --menu-text-color: Defaults to white;\n * @prop --bar-dropdown-bg: Defaults to #196c82;\n * @prop --bar-dropdown-text: Defaults to white;\n * @prop --menu-user-profile-bg: Defaults to #001a21;\n * @prop --menu-user-panel-bg: Defaults to #193037;\n * @prop --menu-padding: Defaults to 12px;\n * @prop --menu-hint-color: Defaults to #33484d;\n * @prop --menu-title-text: Defaults to #{map.get($colors, lightblue)};\n * @prop --menu-icon-color: Defaults to white;\n\n * @prop --login-button-bg: Defaults to #17bb75;\n * @prop --login-button-text: Defaults to white;\n */\n\n --bar-vertical-padding: 21px;\n --bar-item-spacing: 13px;\n --bar-background: white;\n --bar-text-color: #196c82;\n --bar-color-shade: rgb(12 90 113);\n --bar-color-tint: rgb(19 89 111);\n --bar-color-focus: #99a3a6;\n --bar-user-panel-bg: #016d86;\n --bar-dropdown-bg: #196c82;\n --bar-dropdown-text: white;\n --menu-background: #001a21;\n --menu-text-color: white;\n --menu-user-profile-bg: #001a21;\n --menu-user-panel-bg: #193037;\n --menu-padding: 12px;\n --menu-hint-color: #33484d;\n --menu-title-text: #{map.get($colors, lightblue)};\n --menu-icon-color: white;\n --login-button-bg: #17bb75;\n --login-button-text: white;\n\n // not sure if this required any more.\n --padding: 12px;\n --padding-top: var(--padding);\n --padding-end: var(--padding);\n --padding-bottom: var(--padding);\n --padding-start: var(--padding);\n\n display: flex;\n flex-direction: column;\n position: relative;\n line-height: 1.5;\n height: 100%;\n font-size: 0.9375em;\n font-size: clamp(0.77rem, 1vw, 0.9rem);\n\n input,\n select,\n button {\n font-family: inherit;\n appearance: none;\n font-size: inherit;\n }\n\n a,\n button {\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n box-shadow: #{nanoForm.$control-focus-style};\n //\n }\n }\n}\n","import {\n Component,\n h,\n Host,\n Element,\n State,\n Watch,\n Event,\n EventEmitter,\n Prop,\n Listen,\n Build,\n getAssetPath,\n readTask,\n writeTask,\n Method,\n VNode,\n ComponentInterface,\n} from '@stencil/core';\nimport algoliasearch, { SearchClient as AlgoliaClient } from 'algoliasearch';\nimport { closestElement } from '../../utils/dom';\nimport { clientFetch } from '../../utils/fetch';\nimport { ComponentStore } from '../../utils/store/component-store';\nimport { debounce } from '../../utils/throttle';\nimport { displayTransition } from '../../utils/transitions';\nimport type {\n InputChangeEventDetail,\n SelectChangeEventDetail,\n AlgoliaResults,\n SearchIndex,\n MyAccountLink,\n AloliaSearchResultDetail,\n AlgoliaMultiResult,\n MyAccountUser,\n MyAccountData,\n NavItemEventDetail,\n AlgoliaResultHit,\n AlgoliaNetworkError,\n AlgoliaMultiResults,\n} from '../../interface';\n\n// the 'breakpoints' where different segments of content go into or out-of the burger / overflow menu\nconst THRESHOLDBREAKS = {\n about: 0,\n main: 1,\n login: 2,\n search: 3,\n icon: 4,\n};\n\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n *\n * @slot main - main nav items. Should be used with nano-nav-item's\n * @slot icon - nano-nav-item's displayed alongside icon links that come from MyAccount\n * @slot loggedin - nano-nav-item's to display when users are signed in, alongside links from from MyAccount (within the overflow menu panel).\n * @slot about - nano-nav-item's to display with about links that come from MyAccount\n * @slot site - nano-nav-item's to display with site links that come from MyAccount\n * @slot overflow - items to always display in the overflow menu\n * @slot search - when not using myaccount search OR show-search=\"false\" you can utilise the search slot\n * @slot promotion - a free area for any promotional content, displayed within the overflow menu panel\n * @slot logo - when show-logo=\"false\" you can utilise the logo slot\n * @slot - if using search functionality, place a `<nano-search-results />` element in the default slot\n */\n@Component({\n tag: 'nano-global-nav',\n styleUrl: 'style/global-nav.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class GlobalNav implements ComponentInterface {\n // position and dimension state\n private io: IntersectionObserver;\n private debounceResize: () => {};\n private debounceSetResizingState: () => {};\n private currSize: number = 0;\n private thresholdsGoingUp: boolean = false;\n private THRESHOLDLIMIT = Object.keys(THRESHOLDBREAKS).length;\n\n // menu\n private menuDiv: HTMLElement;\n private menuBtn: HTMLButtonElement;\n private menuWrapDiv: HTMLDivElement;\n private menuContentDiv: HTMLDivElement;\n private menuSelectedItems: NodeListOf<HTMLNanoNavItemElement>;\n\n // search\n private searchBarEl: HTMLDivElement;\n private searchInput: HTMLNanoInputElement;\n private algoliaClient: AlgoliaClient;\n private currentIndex: SearchIndex;\n private autocompleteResults: AlgoliaResults | null;\n private autocompleteEles: Array<HTMLAnchorElement | HTMLButtonElement> = [];\n private currAIndex: number = -1;\n private algoliaSearchResults: AlgoliaMultiResults | null;\n private scopeSearch: AlgoliaMultiResults | null;\n\n // general\n private mainBarDiv: HTMLElement;\n // private barsDiv: HTMLDivElement;\n // private siteContent: HTMLDivElement;\n private userLinkPanel: HTMLDivElement;\n private isLoggedIn: boolean = false;\n\n private myAccData: MyAccountData = null;\n\n // myaccount links\n private aboutNavItms: MyAccountLink[] = [];\n private siteNavItms: MyAccountLink[] = [];\n private loggedInNavItms: MyAccountLink[] = [];\n\n // user profile link\n @State() userProfileUrl: string = '';\n\n // has slot tests\n private mo?: MutationObserver;\n @State() hasLoggedinSlot: boolean = false;\n @State() hasSiteSlot: boolean = false;\n @State() hasPromotionSlot: boolean = false;\n\n // slot item number tests\n @State() aboutSlotLen: number = 0;\n @State() iconSlotLen: number = 0;\n @State() mainSlotLen: number = 0;\n @State() overflowSlotLen: number = 0;\n @State() searchSlotLen: number = 0;\n\n @State() internalSearchIndeces: Array<SearchIndex> = [];\n @State() thresholdReady: boolean = false;\n @State() remoteDataReady: boolean = false;\n @State() ready: boolean = false;\n @State() isResizing: boolean = false;\n @State() intersectRatio: number;\n @State() threshold: number = this.THRESHOLDLIMIT;\n @State() modalOpen: boolean = false;\n @State() modalIsOpen: boolean = false;\n @State() searchBarShown: boolean = false;\n @State() scrollingUp: boolean = true;\n @State() searchLoading: boolean = false;\n @State() showAutocomplete: boolean = false;\n @State() secondaryMenuOpen: HTMLNanoNavItemElement = null;\n @State() userMenuOpen: boolean = false;\n @State() menuFullScreen: boolean = false;\n @State() searchValInternal: string = '';\n\n @Element() private el: HTMLNanoGlobalNavElement;\n\n /**\n * Connect to local, dev, test or prod MyAccount\n * environments to retrieve global nav / sso data.\n * Alternatively, you can use the `ssoDataUrl` prop.\n */\n @Prop() env?: 'local' | 'dev' | 'test' | 'prod' = 'prod';\n\n /**\n * A base url to retrieve global nav / sso data.\n * `nav_bar_data.json` will be appended to this url.\n * An alternative to the pre-defined `env` urls\n */\n @Prop() ssoDataUrl?: string;\n\n /**\n * An alternative to both 'env' and 'ssoDataUrl'.\n * You can directly provide a JSON object of myaccount data.\n * (e.g. https://myaccount.nanoporetech.com/nav_bar_data.json)\n * This is useful for SSR\n */\n @Prop() myAccountData: MyAccountData | null;\n @Watch('myAccountData')\n handleMyAccountData() {\n if (!this.myAccountData) return;\n\n if (!this.myAccountData.user || !this.myAccountData.links) return;\n\n this.myAccData = this.myAccountData;\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n\n this.processMyAccLinks();\n this.processMyAccData();\n this.remoteDataReady = true;\n }\n\n /**\n * Where to take user after SSO login\n */\n @Prop() ssoRedirect: string = encodeURIComponent(window.location.href);\n\n /**\n * Whether to attempt to get global nav / sso data from MyAccount\n */\n @Prop() getMyAccountData: boolean = true;\n\n /**\n * Active MyAccount link sections. By default all will show.\n */\n @Prop() activeMyAccountSections: (\n | 'about'\n | 'loggedin'\n | 'sites'\n | 'icons'\n )[] = null;\n\n /**\n * Whether to show search functionality\n */\n @Prop() showSearch: boolean = true;\n\n /**\n * Whether to show Nanopore logo\n */\n @Prop() showLogo: boolean = true;\n\n /**\n * The link to put on the logo\n */\n @Prop() logoUrl: string = location.protocol + '//' + location.host;\n\n /**\n * An array of Algolia search indexes (and optional display names). Will be automatically populated from MyAccount\n */\n @Prop() searchIndeces: Array<SearchIndex> = [];\n\n /**\n * Logged in user details automatically populated from MyAccount\n */\n @Prop({ mutable: true }) myAccountUser: MyAccountUser = null;\n\n /**\n * An Algolia App ID key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchAppId: string;\n\n /**\n * An Algolia API Key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchApiKey: string;\n\n /**\n * A search value to passed to Algolia to programmatically get or to preload search results\n */\n @Prop({ mutable: true }) searchValue: string = '';\n\n /**\n * Algolia search index to programmatically set or to set an initial index\n */\n @Prop({ mutable: true }) searchIndex: string = 'all_prod_en';\n\n /**\n * MyAccount store cart count.\n */\n @Prop({ mutable: true }) cartCount: number = 0;\n\n /**\n * MyAccount un-read message count.\n */\n @Prop({ mutable: true }) msgCount: number = 0;\n\n /**\n * Url to the Nanopore store cart. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) cartUrl: string = null;\n\n /**\n * Url to the Nanopore message center. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) msgUrl: string = null;\n\n /**\n * Emitted when the global nav is ready.\n */\n @Event() nanoIsReady!: EventEmitter<void>;\n\n /**\n * Emitted when search results are successfully returned from Algolia.\n */\n @Event() nanoSearchResult!: EventEmitter<AloliaSearchResultDetail>;\n\n /**\n * Emitted when algolia returns an error.\n */\n @Event() nanoSearchError!: EventEmitter<AlgoliaNetworkError>;\n\n /**\n * Emitted when search field is cleared.\n */\n @Event() nanoSearchReset!: EventEmitter<AloliaSearchResultDetail>;\n\n /**\n * Submit the search form (a search value must be present)\n */\n @Method()\n async submitSearch() {\n this.onSearchSubmit();\n this.showAutocomplete = false;\n return;\n }\n\n @Watch('env')\n @Watch('ssoDataUrl')\n async getMyAccData() {\n if (!!this.myAccData) return;\n\n switch (this.env) {\n case 'prod':\n this.userProfileUrl = 'https://community.nanoporetech.com/profile/me';\n case 'local':\n case 'dev':\n case 'test':\n default:\n this.userProfileUrl =\n 'https://community-test.nanoporetech.com/profile/me';\n break;\n }\n\n if (!this.getMyAccountData || this.myAccData) {\n this.remoteDataReady = true;\n return;\n }\n\n let url = this.ssoDataUrl;\n\n if (!url) {\n switch (this.env) {\n case 'dev':\n url = 'https://myaccount-dev.nanoporetech.com/';\n break;\n case 'test':\n url = 'https://myaccount-test.nanoporetech.com/';\n break;\n default:\n url = 'https://myaccount.nanoporetech.com/';\n break;\n }\n }\n\n const config = { timeout: 5000 };\n\n try {\n if (this.env === 'local') {\n this.myAccData = (await import(\n `./assets/local-my-account.json`\n )) as unknown as MyAccountData;\n } else {\n this.myAccData = await clientFetch(url + 'nav_bar_data.json', config);\n }\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n this.processMyAccLinks();\n this.processMyAccData();\n setTimeout(() => (this.remoteDataReady = true), 300);\n } catch (e) {\n console.error(e);\n this.remoteDataReady = true;\n }\n }\n\n @Watch('searchIndex')\n currentSelectedIndex() {\n if (!this.internalSearchIndeces.length) {\n return;\n }\n if (!this.searchIndex) return this.internalSearchIndeces[0];\n\n const foundIndex = this.internalSearchIndeces.find(\n (index) => index.index === this.searchIndex\n );\n\n if (!foundIndex) {\n this.currentIndex = this.internalSearchIndeces[0];\n console.error('index not found');\n return;\n }\n\n this.currentIndex = foundIndex;\n return foundIndex;\n }\n\n @Watch('searchValInternal')\n changeInternalSearchVal() {\n if (this.searchValInternal !== this.searchValue)\n this.searchValue = this.searchValInternal;\n }\n\n @Watch('searchApiKey')\n @Watch('searchAppId')\n initAlgoliaClient() {\n if (!this.searchAppId || !this.searchApiKey) return;\n\n this.algoliaClient = algoliasearch(this.searchAppId, this.searchApiKey);\n this.addAlgoliaIndeces();\n }\n\n @Watch('searchIndeces')\n addIndeces() {\n this.internalSearchIndeces = [\n ...this.internalSearchIndeces,\n ...this.searchIndeces,\n ];\n }\n\n @Watch('internalSearchIndeces')\n addAlgoliaIndeces() {\n if (!this.algoliaClient || !this.internalSearchIndeces.length) return;\n\n this.internalSearchIndeces.forEach((searchIndex) => {\n searchIndex.alogliaIndex = this.algoliaClient.initIndex(\n searchIndex.index\n );\n });\n if (!this.searchIndex)\n this.searchIndex = this.internalSearchIndeces[0].index;\n }\n\n @Watch('threshold')\n thresholdChange(newThreshold, oldThreshold) {\n if (newThreshold > oldThreshold) {\n // we've resized to larger screen.\n this.thresholdsGoingUp = true;\n this.setResizingState(true);\n }\n }\n\n /**\n * Primary logic for resizing changes.\n * When content doesn't fit - we loop down through break points until it does\n */\n @Watch('intersectRatio')\n ratioChange() {\n if (this.intersectRatio < 1 && this.threshold > 0) {\n // content doesn't fit\n if (this.thresholdsGoingUp) this.setResizingState(true);\n this.threshold--;\n setTimeout(() => this.ratioChange(), 500);\n } else {\n this.thresholdReady = true;\n\n // content now fits so add / remove context classes\n // on nav-items depending on whether they're added to bar or burger.\n // if (this.siteContent) {\n // this.siteContent.style.minHeight = `calc(100% - ${\n // this.barsDiv.clientHeight + 1\n // }px)`;\n // }\n\n let menuItems: Array<Element>, barItems: Array<Element>;\n readTask(() => {\n menuItems = [\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"site\"]')),\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"overflow\"]')\n ),\n ];\n barItems = [];\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.login)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.main)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.about)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n });\n\n writeTask(() => {\n menuItems.forEach((item) => {\n item.classList.add('nano-global-nav-menu');\n item.classList.remove('nano-global-nav-bar');\n });\n barItems.forEach((item) => {\n item.classList.remove('nano-global-nav-menu');\n item.classList.add('nano-global-nav-bar');\n });\n });\n }\n }\n\n @Watch('thresholdReady')\n @Watch('remoteDataReady')\n assessReady() {\n if (this.thresholdReady && this.remoteDataReady) {\n this.ready = true;\n }\n }\n\n @Watch('remoteDataReady')\n remoteReady() {\n this.attachIO();\n }\n\n @Watch('ready')\n isReady() {\n this.nanoIsReady.emit();\n }\n\n /**\n * Add / remove events when autocomplete results show / hide.\n */\n @Watch('showAutocomplete')\n setupAutocompleteBlur() {\n this.searchInput.clientWidth; // force reflow\n if (this.showAutocomplete) {\n this.el.shadowRoot.addEventListener('click', this.onAutocompleteBlur);\n } else {\n this.el.shadowRoot.removeEventListener('click', this.onAutocompleteBlur);\n }\n }\n\n @Watch('secondaryMenuOpen')\n closeSearchBar() {\n if (!!this.secondaryMenuOpen && this.searchBarShown) this.searchbarHide();\n }\n\n /**\n * As relevant slotted items change, reset resizing breakpoints\n */\n @Watch('aboutSlotLen')\n @Watch('iconSlotLen')\n @Watch('mainSlotLen')\n @Watch('overflowSlotLen')\n @Watch('searchSlotLen')\n slotChange() {\n this.threshold = this.THRESHOLDLIMIT;\n if (this.ready) this.ratioChange();\n }\n\n // General classes for visuals\n\n private thresholdClasses() {\n const classes = [];\n let i = 0;\n for (i; i < this.threshold; i++) classes.push('threshold-' + (i + 1));\n return classes;\n }\n\n /**\n * provides 'isResizing' - we use this to fade content out on 'breakpoint' increase\n * (when the screen size increases). Otherwise the stepping through of\n * breakpoints to calculate if content currently fits shows on screen (looks ugly)\n */\n private setResizingState = (state: boolean = false) => {\n if (typeof this.debounceSetResizingState === 'undefined') {\n this.debounceSetResizingState = debounce(this.setResizingState, 600);\n }\n if (state) {\n this.isResizing = true;\n this.debounceSetResizingState();\n } else {\n this.isResizing = false;\n this.thresholdsGoingUp = false;\n }\n };\n\n // Global DOM Events\n\n private onWindowResize() {\n if (\n this.threshold < this.THRESHOLDLIMIT &&\n window.innerWidth > this.currSize\n ) {\n this.threshold = this.THRESHOLDLIMIT;\n this.ratioChange();\n }\n this.currSize = window.innerWidth;\n this.searchBarShown = false;\n }\n\n // Burger / Overflow Menu\n\n // listen to nav-item secondary open / close events primarily for resizing the menu\n @Listen('nanoOpen')\n secondaryOpen(ev: CustomEvent & { target: HTMLNanoNavItemElement }) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = ev.target;\n\n if (!this.menuSelectedItems) {\n this.menuSelectedItems = this.el.querySelectorAll(\n 'nano-nav-item.selected'\n );\n this.menuSelectedItems.forEach((i) => i.classList.remove('selected'));\n this.menuSelectedItems.forEach((i) => (i.selected = false));\n }\n\n this.menuContentDiv.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent & { target: HTMLNanoNavItemElement }) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n\n setTimeout(() => {\n if (this.secondaryMenuOpen === ev.target && this.menuSelectedItems) {\n this.secondaryMenuOpen = null;\n this.menuContentDiv.style.minHeight = '';\n this.menuSelectedItems.forEach((i) => i.classList.add('selected'));\n this.menuSelectedItems.forEach((i) => (i.selected = true));\n this.menuSelectedItems = null;\n }\n }, 200);\n }\n\n private onMenuBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.modalOpen ? this.menuClose(ev, true) : this.menuOpen();\n break;\n }\n };\n\n private onMenuBtnClick = (ev: MouseEvent) => {\n this.menuClose(ev, true);\n };\n\n private menuOpen = (e?: MouseEvent) => {\n if (e) e.preventDefault();\n\n this.menuDiv.style.display = 'block';\n // need to open menu in stages\n // wait for re-flow after changing display\n // wait for repaint after animate, then focus\n\n this.menuDiv.clientWidth; // force reflow\n\n this.modalOpen = true;\n this.modalIsOpen = true;\n this.menuWrapDiv.addEventListener('focusout', this.menuClose);\n\n this.menuDiv.clientWidth; // force reflow\n\n this.menuWrapDiv.focus({ preventScroll: true });\n if (\n this.threshold < 2 ||\n this.menuWrapDiv.scrollHeight > window.innerHeight\n ) {\n document.body.style.overflow = 'hidden';\n this.menuFullScreen = true;\n } else document.body.style.overflowX = 'hidden';\n };\n\n private onMenuHidden = () => {\n this.menuDiv.removeEventListener('transitionend', this.onMenuHidden);\n this.menuWrapDiv.removeEventListener('focusout', this.menuClose);\n\n document.body.style.overflow = '';\n this.menuDiv.style.display = 'none';\n this.modalIsOpen = false;\n this.menuFullScreen = false;\n\n setTimeout(() => {\n if (document.activeElement === document.body && this.menuBtn)\n this.mainBarDiv.focus({ preventScroll: true });\n }, 50);\n };\n\n private menuClose = (\n ev?: FocusEvent | MouseEvent | KeyboardEvent | TouchEvent,\n force: boolean = false\n ) => {\n if (force) {\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\n return;\n }\n\n const e = ev as FocusEvent;\n if (\n e &&\n e.relatedTarget &&\n closestElement('#global-nav-menu', e.relatedTarget as HTMLElement)\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('#global-nav-menu')\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('[slot=\"promotion\"]')\n )\n return;\n\n requestAnimationFrame(() => {\n if (!!this.secondaryMenuOpen) return;\n\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\n });\n };\n\n private subMenuClose = (ev?: MouseEvent) => {\n ev.preventDefault();\n (ev.target as HTMLNanoNavItemElement).closest('nano-nav-item').open = false;\n };\n\n // User profile menu\n\n private onUserBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n this.userMenuOpen = !this.userMenuOpen;\n };\n\n private onUserBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.userMenuOpen = !this.userMenuOpen;\n break;\n }\n };\n\n private onUserMenuBlur = (ev: FocusEvent) => {\n if (!ev.relatedTarget) {\n this.userMenuOpen = false;\n return;\n }\n if (!!(ev.relatedTarget as HTMLElement).closest('.user-links-panel'))\n return false;\n this.userMenuOpen = false;\n };\n\n @Watch('userMenuOpen')\n async handleUserMenu() {\n await displayTransition(this.userLinkPanel, 'show', this.userMenuOpen);\n if (this.userMenuOpen) {\n this.userLinkPanel.focus();\n this.userLinkPanel.addEventListener('focusout', this.onUserMenuBlur);\n } else {\n this.userLinkPanel.removeEventListener('focusout', this.onUserMenuBlur);\n this.el.focus();\n }\n }\n\n // Search bar (smaller screens / mobile)\n\n private onSearchBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n if (!this.searchBarShown) this.searchbarShow();\n else this.searchbarHide();\n };\n\n private onSearchBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.searchBarShown ? this.searchbarHide() : this.searchbarShow();\n break;\n }\n };\n\n private searchbarShow() {\n this.searchBarShown = true;\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarShown);\n this.searchBarEl.style.display = 'block';\n\n setTimeout(() => {\n const widgetHeight =\n Math.floor(\n this.searchBarEl.querySelector('.search-widget').scrollHeight\n ) - 1;\n this.searchBarEl.style.height = widgetHeight.toString() + 'px';\n }, 50);\n }\n\n private onSearchBarShown = () => {\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarShown\n );\n if (this.searchInput) this.searchInput.setFocus();\n this.searchBarEl.style.overflow = 'visible';\n };\n\n private searchbarHide = (ev?: FocusEvent) => {\n if (\n ev &&\n ev.relatedTarget &&\n (ev.relatedTarget as HTMLElement).closest('#global-nav-search-bar')\n )\n return;\n\n this.showAutocomplete = false;\n if (this.searchValInternal.length && ev) return;\n\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarHidden);\n this.searchBarEl.style.overflow = 'hidden';\n this.searchBarEl.style.height = '0px';\n };\n\n private onSearchBarHidden = () => {\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarHidden\n );\n this.searchBarEl.style.display = 'none';\n this.searchBarShown = false;\n };\n\n // Algolia search\n\n private autocompleteSnippet(hit: AlgoliaResultHit) {\n const lookFor = ['title']; // , 'body'\n if (hit._snippetResult) {\n const found = lookFor.find(\n (prop) =>\n hit._snippetResult[prop] &&\n hit._snippetResult[prop].matchLevel !== 'none'\n );\n\n if (found) {\n if (found !== 'title')\n return (\n (hit.title.length > 15\n ? hit.title.substring(0, 15) + ' ...'\n : hit.title) +\n ' ' +\n hit._snippetResult[found].value\n );\n else return hit._snippetResult['title'].value;\n }\n }\n return hit.title;\n }\n\n private onSearchInput = (ev: CustomEvent<InputEvent>) => {\n this.searchValInternal = this.searchInput.value;\n\n if (!this.isSearchValSet()) {\n this.searchLoading = false;\n return;\n }\n\n if (ev.detail.type === 'input') {\n this.showAutocomplete = false;\n this.searchLoading = true;\n }\n };\n\n private onSearchChange = async (ev?: CustomEvent<InputChangeEventDetail>) => {\n this.searchValInternal = this.searchValue = ev\n ? ev.detail.value\n : this.searchValInternal;\n this.showAutocomplete = false;\n this.autocompleteResults = null;\n\n if (!this.isSearchValSet()) {\n if (!this.searchValInternal.length) {\n this.nanoSearchReset.emit();\n }\n this.searchLoading = false;\n return;\n }\n if (!this.currentIndex) this.currentSelectedIndex();\n\n try {\n this.autocompleteResults = this.processSearchResults(\n (await this.currentIndex.alogliaIndex.search(this.searchValInternal, {\n attributesToSnippet: ['body:5', 'title:8'],\n hitsPerPage: 5,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n })) as any\n ) as AlgoliaResults;\n } catch (e) {\n console.error(e);\n }\n\n this.scopeSearch = null;\n this.scopeSearch = await this.onSearchSubmit(null, false);\n\n this.searchLoading = false;\n this.showAutocompleteResults();\n };\n\n private onSearchSubmit = async (ev?, emit: boolean = true) => {\n if (ev) ev.preventDefault();\n if (!this.isSearchValSet()) return;\n this.searchLoading = true;\n this.algoliaSearchResults = null;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n const queries = this.internalSearchIndeces.map((index) => {\n return {\n indexName: index.index,\n query: this.searchValInternal,\n facets: index.filters,\n hitsPerPage: 10,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n };\n });\n\n try {\n this.algoliaSearchResults = this.processSearchResults(\n (await this.algoliaClient.multipleQueries(queries)) as any\n ) as AlgoliaMultiResults;\n } catch (e) {\n this.nanoSearchError.emit(e as AlgoliaNetworkError);\n }\n this.searchLoading = false;\n if (!this.algoliaSearchResults) return;\n\n this.algoliaSearchResults.results.map((result, i) => {\n result.indexName = this.internalSearchIndeces[i].name;\n result.selected =\n this.currentIndex.name === this.internalSearchIndeces[i].name;\n result.domain = this.currentIndex.domain || null;\n result.domains = this.myAccData.domains || null;\n result.allGroup = !!this.internalSearchIndeces[i].allGroup;\n result.filters = this.internalSearchIndeces[i].filters;\n });\n\n if (emit) {\n this.nanoSearchResult.emit({\n results: this.algoliaSearchResults.results,\n client: { apiKey: this.searchApiKey, appId: this.searchAppId },\n });\n this.showAutocomplete = false;\n }\n return this.algoliaSearchResults;\n };\n\n private onSearchIndexChange = async (\n index: CustomEvent<SelectChangeEventDetail> | string\n ) => {\n const ev = index as CustomEvent<SelectChangeEventDetail>;\n let indexStr = index as string;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n if (ev.detail && ev.detail.value.length)\n indexStr = ev.detail.value as string;\n if (!indexStr || !indexStr.length) return;\n if (this.currentIndex.index === indexStr) return;\n\n const selectedIndex = this.internalSearchIndeces.find(\n (index) => index.index === indexStr\n );\n if (!selectedIndex || !selectedIndex.alogliaIndex) return;\n\n this.searchIndex = selectedIndex.index;\n if (this.isSearchValSet()) await this.onSearchChange();\n };\n\n private isSearchValSet() {\n if (this.searchValInternal.length < 3) return false;\n return true;\n }\n\n private switchIndexSubmit = async (index: string) => {\n if (this.isSearchValSet()) {\n await this.onSearchIndexChange(index);\n this.onSearchSubmit();\n } else this.onSearchIndexChange(index);\n };\n\n // Autocomplete\n\n @Watch('showAutocomplete')\n resetHitFocus() {\n this.currAIndex = -1;\n }\n\n private onAutocompleteBlur = (ev: MouseEvent) => {\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n if (ev && ev.target && (ev.target as HTMLElement).closest('.search-widget'))\n return;\n this.showAutocomplete = false;\n };\n\n private showAutocompleteResults = () => {\n if (!this.autocompleteResults || !this.autocompleteResults.hits) return;\n this.showAutocomplete = true;\n };\n\n private setActiveElement(\n autocompleteEle: HTMLAnchorElement | HTMLButtonElement\n ) {\n this.autocompleteEles.map((ele) =>\n ele.setAttribute('aria-selected', 'false')\n );\n autocompleteEle.focus({ preventScroll: true });\n autocompleteEle.setAttribute('aria-selected', 'true');\n }\n\n private onAutocompleteInteract = (ev: KeyboardEvent) => {\n // list open, navigate items with arrows\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n let testIndex = this.currAIndex;\n\n switch (ev.key) {\n case 'Tab':\n setTimeout(() => {\n if (\n !this.el.shadowRoot.activeElement ||\n !this.el.shadowRoot.activeElement.closest('.search-widget')\n ) {\n this.showAutocomplete = false;\n return;\n } else {\n const found = this.autocompleteEles.find((ele, i) => {\n if (ele === this.el.shadowRoot.activeElement) {\n this.currAIndex = i;\n return true;\n }\n });\n if (found) this.setActiveElement(found);\n else this.currAIndex = -1;\n }\n });\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n if (ev.key === 'ArrowDown') testIndex++;\n else if (ev.key === 'ArrowUp') testIndex--;\n\n const found = this.autocompleteEles[testIndex];\n if (\n found ||\n testIndex < 0 ||\n testIndex > this.autocompleteEles.length - 1\n )\n ev.preventDefault();\n this.searchInput.clientWidth; // force reflow\n\n if (found) {\n this.setActiveElement(found);\n this.currAIndex = testIndex;\n } else if (testIndex < 0) {\n this.searchInput.setFocus();\n this.currAIndex = -1;\n }\n break;\n case 'Enter':\n case ' ':\n if (this.autocompleteEles[this.currAIndex]) {\n this.autocompleteEles[this.currAIndex].click();\n }\n break;\n }\n };\n\n // Various.\n\n /**\n * Assesses what content is present in which slots\n */\n private assessSlottedContent() {\n readTask(() => {\n this.hasSiteSlot = !!this.el.querySelectorAll('[slot=\"site\"]').length;\n this.hasLoggedinSlot =\n !!this.el.querySelectorAll('[slot=\"loggedin\"]').length;\n this.hasPromotionSlot =\n !!this.el.querySelectorAll('[slot=\"promotion\"]').length;\n\n this.aboutSlotLen = this.el.querySelectorAll('[slot=\"about\"]').length;\n this.iconSlotLen = this.el.querySelectorAll('[slot=\"icon\"]').length;\n this.mainSlotLen = this.el.querySelectorAll('[slot=\"main\"]').length;\n this.overflowSlotLen =\n this.el.querySelectorAll('[slot=\"overflow\"]').length;\n this.searchSlotLen = this.el.querySelectorAll('[slot=\"search\"]').length;\n });\n }\n\n /**\n * Attach the IntersectionObserver - from which all threshold / breakpoint logic hinges\n */\n private attachIO() {\n if (this.io) return;\n const root = this.el.shadowRoot.querySelector('.global-nav .main-bar');\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).IntersectionObserver &&\n !!root\n ) {\n const io = (this.io = new (window as any).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n this.intersectRatio = data.slice(-1)[0].intersectionRatio;\n },\n { root, threshold: 1 }\n ));\n io.observe(root.querySelector('.measure-ele'));\n }\n }\n\n // Stencil Lifecycle / Rendering\n\n componentDidLoad() {\n if (Build.isBrowser) {\n this.debounceResize = debounce(this.onWindowResize.bind(this), 300);\n\n window.addEventListener('resize', this.debounceResize);\n this.currSize = window.innerWidth;\n }\n\n this.initAlgoliaClient();\n this.addAlgoliaIndeces();\n if (this.remoteDataReady) this.attachIO();\n }\n\n componentWillLoad() {\n ComponentStore.init(\n this,\n ['searchIndex', 'searchValue'],\n 'url-hash',\n 'gns'\n );\n\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).MutationObserver\n ) {\n const mo = (this.mo = new MutationObserver(() => {\n this.assessSlottedContent();\n }));\n mo.observe(this.el, { childList: true, subtree: false });\n }\n this.assessSlottedContent();\n }\n\n disconnectedCallback() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n if (this.mo) {\n this.mo.disconnect();\n this.mo = undefined;\n }\n if (Build.isBrowser)\n window.removeEventListener('resize', this.debounceResize);\n }\n\n connectedCallback() {\n this.handleMyAccountData();\n this.getMyAccData();\n }\n\n // Render output\n\n private autocompleteList(): VNode {\n let content;\n if (this.showAutocomplete && this.scrollingUp) {\n let currentScopeHits = 0;\n let scopeChangeSuggestions = 0;\n\n const scopeSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index !== this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n const currentSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index === this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n\n if (this.scopeSearch) {\n scopeChangeSuggestions = this.scopeSearch.results.reduce(\n scopeSuggestReducer,\n 0\n );\n currentScopeHits = this.scopeSearch.results.reduce(\n currentSuggestReducer,\n 0\n );\n }\n\n if (\n (this.autocompleteResults && this.autocompleteResults.hits.length) ||\n (scopeChangeSuggestions && !currentScopeHits)\n ) {\n let scopeSuggestions = 0;\n\n content = (\n <div>\n {!currentScopeHits && (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found in{' '}\n <strong>{this.currentIndex.name}</strong>. Try another phrase.\n </div>\n )}\n {this.autocompleteResults && [\n this.autocompleteResults.hits.map((hit, i) => {\n return (\n <a\n role=\"option\"\n ref={(a) => this.autocompleteEles.push(a)}\n tabindex=\"-1\"\n id={'autocomplete-hit-' + i}\n href={hit.url}\n class=\"search-autocomplete-hit\"\n innerHTML={this.autocompleteSnippet(hit)}\n ></a>\n );\n }),\n ]}\n {(!currentScopeHits || this.currentIndex.allGroup) &&\n this.scopeSearch &&\n this.scopeSearch.results && [\n this.scopeSearch.results.map((result, i) => {\n if (\n !result.hits.length ||\n result.index === this.currentIndex.index ||\n scopeSuggestions > 1\n )\n return;\n scopeSuggestions++;\n return (\n <button\n role=\"option\"\n ref={(button) => this.autocompleteEles.push(button)}\n tabindex=\"-1\"\n id={'autocomplete-scope-' + i}\n class=\"search-autocomplete-hit\"\n onClick={() => this.switchIndexSubmit(result.index)}\n onMouseDown={() => this.switchIndexSubmit(result.index)}\n >\n \"{this.searchValInternal}\"{' '}\n <div class=\"search-autocomplete-hit-scope\">\n in {result.indexName}\n </div>\n </button>\n );\n }),\n ]}\n {!!currentScopeHits && (\n <div class=\"search-autocomplete-foot\">\n <button\n role=\"option\"\n class=\"search-autocomplete-submit\"\n ref={(button) => this.autocompleteEles.push(button)}\n id={'autocomplete-foot'}\n onClick={this.onSearchSubmit}\n onMouseDown={this.onSearchSubmit}\n >\n View all results\n </button>\n </div>\n )}\n </div>\n );\n } else if (!currentScopeHits) {\n content = (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found. Try\n another phrase.\n </div>\n );\n }\n }\n\n return (\n <div\n class=\"search-autocomplete\"\n role=\"listbox\"\n id=\"autocomplete-results\"\n aria-expanded={this.showAutocomplete ? 'true' : 'false'}\n hidden={!this.showAutocomplete}\n onKeyDown={this.onAutocompleteInteract}\n >\n {content}\n </div>\n );\n }\n\n private searchWidget(): VNode[] {\n return [\n <form\n class=\"search-inputs\"\n onSubmit={this.onSearchSubmit}\n id=\"global-nav-search\"\n >\n <nano-select\n class=\"search-input\"\n label=\"Which area of content would you like to search?\"\n hideLabel={true}\n showInlineError={false}\n value={this.searchIndex}\n onNanoChange={this.onSearchIndexChange}\n mask={true}\n >\n {this.internalSearchIndeces.map((index) => {\n return (\n <nano-option\n selected={index.index === this.searchIndex}\n value={index.index}\n >\n {index.name || index.index}\n </nano-option>\n );\n })}\n <nano-icon\n name=\"light/chevron-down\"\n class=\"select-input__arrow\"\n slot=\"down-arrow\"\n />\n </nano-select>\n <nano-input\n class=\"search-input\"\n label=\"What would you like to search for?\"\n aria-label=\"What would you like to search for\"\n hideLabel={true}\n showInlineError={false}\n clear-input\n placeholder=\"Search Nanopore\"\n type=\"text\"\n ref={(input) => (this.searchInput = input)}\n onNanoChange={this.onSearchChange}\n onNanoInput={this.onSearchInput}\n onKeyDown={this.onAutocompleteInteract}\n debounce={500}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n this.autocompleteEles[this.currAIndex]\n ? this.autocompleteEles[this.currAIndex].id\n : false\n }\n aria-controls=\"autocomplete-results\"\n onNanoFocus={this.showAutocompleteResults}\n value={this.searchValue}\n role=\"textbox\"\n >\n <button\n class={{\n 'search-icon': true,\n 'search-icon--search': true,\n 'search-icon--show': !!this.searchValue && !this.searchLoading,\n }}\n slot=\"end\"\n onMouseDown={(e) => {\n this.searchValInternal = this.searchInput.value;\n this.onSearchSubmit(e, true);\n }}\n >\n <nano-icon name=\"light/search\"></nano-icon>\n </button>\n <span\n class={{\n 'search-icon': true,\n 'search-icon--loader': true,\n 'search-icon--show': this.searchLoading,\n }}\n slot=\"end\"\n >\n <nano-icon name=\"light/spinner-third\"></nano-icon>\n </span>\n </nano-input>\n <input type=\"submit\" />\n </form>,\n ];\n }\n\n render() {\n this.autocompleteEles = [];\n const isRtl = (this.el.ownerDocument as Document).dir === 'rtl';\n\n const searchWidget = this.searchWidget();\n searchWidget.push(this.autocompleteList());\n\n return (\n <Host\n class={{\n [this.thresholdClasses().join(' ')]: true,\n ready: this.ready,\n 'search-bar-shown': this.searchBarShown && this.scrollingUp,\n 'search-auto-complete-shown':\n this.showAutocomplete && this.scrollingUp,\n 'modal-open': this.modalIsOpen,\n resizing: this.isResizing,\n }}\n dir={isRtl ? 'rtl' : null}\n role=\"navigation\"\n >\n <div\n class={{\n 'global-nav': true,\n 'scrolling-down': !this.scrollingUp,\n }}\n >\n {/* START BURGER / OVERFLOW MENU */}\n <nav\n id=\"global-nav-menu\"\n class={{\n 'gn-menu': true,\n open: this.modalOpen,\n 'has-promotion': this.hasPromotionSlot,\n 'menu-full-screen': this.menuFullScreen,\n 'secondary-open': !!this.secondaryMenuOpen,\n }}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n ref={(div) => (this.menuDiv = div)}\n >\n <div\n class=\"gn-menu_wrap\"\n ref={(div) => (this.menuWrapDiv = div)}\n tabindex=\"-1\"\n >\n <div class=\"gn-menu_actions\">\n <button\n class=\"menu-btn icon-btn icon-btn\"\n onMouseDown={this.onMenuBtnClick}\n onKeyDown={this.onMenuBtnKeyDown}\n >\n {this.threshold < this.THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/times\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n {this.threshold >= this.THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon name=\"light/bell\"></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon name=\"light/shopping-cart\"></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {this.myAccData && this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register{' '}\n <nano-icon name=\"solid/chevron-right\"></nano-icon>\n </a>\n )}\n </div>\n\n <div\n class=\"content-wrap\"\n ref={(div) => (this.menuContentDiv = div)}\n >\n <div class=\"content\">\n <nav class=\"nav-links nav-links--main\" role=\"menu\">\n <slot name=\"overflow\" />\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.main &&\n !!this.mainSlotLen && <slot name=\"main\" />}\n </nav>\n\n {/* ABOUT AND SITE MENU IN BURGER */}\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.hasSiteSlot) ||\n !!this.siteNavItms.length) && (\n <div>\n {/* SITES MENU (Always in burger) */}\n {(this.hasSiteSlot || !!this.siteNavItms.length) && [\n (this.threshold >= this.THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n <h4 class=\"nav-links_title nav-links_title--sites\">\n Sites\n </h4>\n <nav\n class=\"nav-links nav-links--sub nav-links--sites\"\n aria-label=\"Different company site links\"\n >\n <slot name=\"site\" />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n </div>\n ),\n ((this.threshold < this.THRESHOLDLIMIT - 2 &&\n this.mainSlotLen >= 2) ||\n this.overflowSlotLen >= 2) && (\n <nav\n class=\"nav-links\"\n aria-label=\"Different company site links\"\n >\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n Sites\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n Sites\n </button>\n <div class=\"content--sub\">\n <slot name=\"site\" />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n ),\n ]}\n </div>\n )}\n </div>\n\n {this.isLoggedIn &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login &&\n (this.loggedInNavItms.length || this.hasLoggedinSlot) && (\n <nav class=\"nav-links\" aria-label=\"Your user account links\">\n <nano-nav-item class=\"nano-global-nav user-nav nano-global-nav-menu\">\n {this.myAccountUser.name}\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n {this.myAccountUser.name}\n </button>\n {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"content--sub\">\n <slot name=\"loggedin\" />\n {this.loggedInNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n </nano-nav-item>\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n )}\n\n <slot name=\"promotion\" />\n\n {this.myAccData && this.myAccData.urls.logout && (\n <div class=\"login-btn logout-btn\">\n <a href={this.myAccData.urls.logout + this.ssoRedirect}>\n Logout\n </a>\n </div>\n )}\n </div>\n </div>\n </nav>\n {/* END BURGER / OVERFLOW MENU */}\n\n {/* START MAIN NAV BAR */}\n <div class=\"sticker-trigger\" />\n <nano-sticker\n auto-resize=\"false\"\n break-point-max=\"800\"\n quietMode={{ h: 600, w: 800 }}\n >\n <div class=\"bars\">\n <nav\n class=\"main-bar\"\n aria-label=\"Main site navigation\"\n tabindex=\"-1\"\n ref={(div) => (this.mainBarDiv = div)}\n role={\n !!this.mainSlotLen &&\n this.threshold >= this.THRESHOLDLIMIT - THRESHOLDBREAKS.main\n ? 'menu'\n : undefined\n }\n >\n {(this.hasPromotionSlot ||\n !!this.overflowSlotLen ||\n ((this.myAccData || !!this.iconSlotLen) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login) ||\n (!!this.mainSlotLen &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.main) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <button\n class=\"menu-btn icon-btn\"\n onMouseDown={this.menuOpen}\n onKeyDown={this.onMenuBtnKeyDown}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n aria-controls=\"global-nav-menu\"\n ref={(btn) => (this.menuBtn = btn)}\n >\n <nano-icon\n name=\"light/bars\"\n aria-label=\"open menu\"\n ></nano-icon>\n </button>\n )}\n\n {this.showLogo && (\n <a href={this.logoUrl} class=\"logo-link\">\n <img\n src={getAssetPath(`./assets/ont-logo.svg`)}\n alt=\"Oxford Nanopore Technologies Logo\"\n class=\"logo\"\n />\n </a>\n )}\n {!this.showLogo && (\n <div class=\"logo-link\">\n <slot name=\"logo\" />\n </div>\n )}\n\n <div class=\"nav-links nav-links--main\">\n <slot name=\"main\" />\n </div>\n\n {/* search widget displayed in the bar (there is enough space to show it) */}\n {this.mainSlotLen === 0 &&\n this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search && [\n this.showSearch && !!this.internalSearchIndeces.length && (\n <div\n class=\"search-widget\"\n role=\"combobox\"\n aria-owns=\"autocomplete-results\"\n aria-expanded={\n this.showAutocomplete && this.autocompleteResults\n ? 'true'\n : 'false'\n }\n >\n {searchWidget}\n </div>\n ),\n (!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />,\n ]}\n\n {/* Bar Icon buttons */}\n\n {/* Bar search icon button (when not enough to show search in bar) */}\n {(this.mainSlotLen > 0 ||\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search) &&\n ((this.showSearch && !!this.internalSearchIndeces.length) ||\n !!this.searchSlotLen) && (\n <button\n class={{\n 'icon-btn': true,\n 'search-btn': true,\n 'search-btn--open': this.searchBarShown,\n }}\n aria-controls=\"global-nav-search-bar\"\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n onMouseDown={this.onSearchBtnClick}\n onKeyDown={this.onSearchBtnKeyDown}\n >\n <nano-icon name=\"light/search\"></nano-icon>\n </button>\n )}\n\n {/* Bar cart and notifications */}\n {this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon name=\"light/bell\"></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && !!this.cartCount && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon name=\"light/shopping-cart\"></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {/* Bar about links */}\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company. Links\"\n role=\"menu\"\n >\n <slot name=\"about\" />\n {!!this.aboutNavItms.length && (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-bar\">\n <a\n href={this.aboutNavItms[0].address}\n target={this.aboutNavItms[0].target}\n >\n {this.aboutNavItms[0].title}\n </a>\n </nano-nav-item>\n )}\n </nav>\n )}\n\n {/* Bar login button / User panel */}\n {this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('loggedin')) &&\n this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login && [\n this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register\n </a>\n ),\n this.myAccountUser && (\n <div class=\"user-links\">\n <button\n class={{\n 'icon-btn': true,\n 'user-links-btn': true,\n open: this.userMenuOpen,\n }}\n onMouseDown={this.onUserBtnClick}\n onKeyDown={this.onUserBtnKeyDown}\n >\n {' '}\n {this.myAccountUser.name}\n <nano-icon name=\"solid/caret-down\"></nano-icon>\n </button>\n <div\n class=\"user-links-panel\"\n tabindex=\"-1\"\n ref={(div) => (this.userLinkPanel = div)}\n >\n {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"user-links-panel-content\">\n {this.loggedInNavItms.map((link) => {\n return (\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n );\n })}\n </div>\n <div class=\"user-links-panel-foot\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n <a\n href={\n this.myAccData.urls.logout + this.ssoRedirect\n }\n >\n Logout\n </a>\n </div>\n </div>\n </div>\n ),\n ]}\n <span class=\"measure-ele\"></span>\n </nav>\n\n {/* Search widget shown in bar underneath main bar when there is not enough space */}\n {(this.mainSlotLen > 0 ||\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search) && (\n <div\n id=\"global-nav-search-bar\"\n class={{\n 'search-bar': true,\n show: this.searchBarShown,\n }}\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n role=\"region\"\n tabindex=\"-1\"\n ref={(div) => (this.searchBarEl = div)}\n >\n <div class=\"search-widget\">\n {this.showSearch && !!this.internalSearchIndeces.length && (\n <div>{searchWidget}</div>\n )}\n {(!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />}\n </div>\n </div>\n )}\n </div>\n </nano-sticker>\n {/* END MAIN NAV BAR */}\n\n {(this.threshold < this.THRESHOLDLIMIT - 3 ||\n this.menuFullScreen) && (\n <div\n class={{\n mask: true,\n open: this.modalOpen,\n }}\n onClick={this.menuClose}\n onTouchEnd={this.menuClose}\n ></div>\n )}\n </div>\n <div class=\"site-content\">\n <slot />\n </div>\n </Host>\n );\n }\n\n // Data processing\n\n private domainFor(origin: string): string {\n if (!this.myAccData) return '';\n const domain = this.myAccData.domains.find((dm) => dm.origin === origin);\n return domain ? domain.domain : '';\n }\n\n private processSearchResults(results: AlgoliaMultiResults | AlgoliaResults) {\n const multiResults = results as AlgoliaMultiResults;\n const singleResult = results as AlgoliaResults;\n\n if (multiResults.results) {\n multiResults.results.forEach((result, i) => {\n multiResults.results[i] = this.processSearchResults(\n result\n ) as AlgoliaResults;\n });\n return multiResults;\n } else {\n singleResult.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url =\n location.protocol + '//' + this.domainFor(hit.origin) + hit.url;\n });\n return singleResult;\n }\n }\n\n private processMyAccData() {\n if (!this.myAccData || !this.myAccData.search.indeces.length) return;\n\n if (this.myAccData.search.api_key)\n this.searchApiKey = this.myAccData.search.api_key;\n if (this.myAccData.search.app_id)\n this.searchAppId = this.myAccData.search.app_id;\n\n if (this.myAccData.cart.count) this.cartCount = this.myAccData.cart.count;\n if (this.myAccData.notifications.count)\n this.msgCount = this.myAccData.notifications.count;\n\n if (!this.searchAppId || !this.searchApiKey) return;\n this.internalSearchIndeces = [\n ...this.myAccData.search.indeces,\n ...this.searchIndeces,\n ];\n\n if (this.myAccData.urls.cart && !this.cartUrl)\n this.cartUrl = this.myAccData.urls.cart;\n if (this.myAccData.urls.messages && !this.msgUrl)\n this.msgUrl = this.myAccData.urls.messages;\n }\n\n private processMyAccLinks() {\n if (!this.myAccData.links || !this.myAccData.links.length) return;\n\n this.myAccData.links.forEach((link) => {\n switch (link.area) {\n case 'left-side-logged-in':\n case 'left-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('sites')\n )\n break;\n if (this.isLoggedIn && link.area === 'left-side-logged-in')\n this.siteNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'left-side-logged-out')\n this.siteNavItms.push(link);\n break;\n case 'right-side-logged-in':\n case 'right-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('about')\n )\n break;\n if (this.isLoggedIn && link.area === 'right-side-logged-in')\n this.aboutNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'right-side-logged-out')\n this.aboutNavItms.push(link);\n break;\n case 'profile-panel-list':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('loggedin')\n )\n break;\n this.loggedInNavItms.push(link);\n break;\n }\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ import{h as e,r as t,c as a,a as s,g as i}from"./p-bf91c50e.js";import{i as n,g as o,b as d,p as r,D as l,d as c,s as h,e as u,f as b,h as p,j as _,k as f,l as v,a as g}from"./p-cecb9af1.js";import{f as y}from"./p-f8f89998.js";import{c as m}from"./p-411bb8f1.js";const x={buttonLabel:"Choose date",placeholder:"YYYY-MM-DD",selectedDateMessage:"Selected date is",prevMonthLabel:"Previous month",nextMonthLabel:"Next month",monthSelectLabel:"Month",yearSelectLabel:"Year",closeLabel:"Close window",keyboardInstruction:"You can use arrow keys to navigate dates",calendarHeading:"Choose a date",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]};const k=({focusedDay:t,today:a,day:s,onDaySelect:i,onKeyboardNavigation:o,focusedDayRef:d,inRange:r,disabled:l,isSelected:c})=>{const h=n(s,a);const u=n(s,t);const b=s.getMonth()!==t.getMonth()||l;const p=!r;function _(e){i(e,s)}return e("button",{class:{"duet-date__day":true,"is-outside":p,"is-disabled":b,"is-today":h},tabIndex:u?0:-1,onClick:_,onKeyDown:o,disabled:p,type:"button","aria-pressed":c?"true":"false",ref:e=>{if(u&&e&&d){d(e)}}},e("span",{"aria-hidden":"true"},s.getDate()),e("span",{class:"duet-date__vhidden"},s.toLocaleDateString(undefined,{day:"numeric",month:"long"})))};function w(e,t){const a=[];for(let s=0;s<e.length;s+=t){a.push(e.slice(s,s+t))}return a}function D(e,t,a){return e.map(((s,i)=>{const n=(i+t)%e.length;return a(e[n])}))}const z=({selectedDate:t,focusedDate:a,labelledById:s,localization:i,firstDayOfWeek:r,min:l,max:c,onDateSelect:h,onKeyboardNavigation:u,focusedDayRef:b,onMouseDown:p,onFocusIn:_,isDateDisabled:f})=>{const v=new Date;const g=o(a,r);return e("table",{class:"duet-date__table",role:"grid","aria-labelledby":s,onFocusin:_,onMouseDown:p},e("thead",null,e("tr",null,D(i.dayNames,r,(t=>e("th",{class:"duet-date__table-header",scope:"col"},e("span",{"aria-hidden":"true"},t.substr(0,2)),e("span",{class:"duet-date__vhidden"},t)))))),e("tbody",null,w(g,7).map((s=>e("tr",{class:"duet-date__row"},s.map((s=>e("td",{class:"duet-date__cell",role:"gridcell","aria-selected":n(s,t)?"true":undefined},e(k,{day:s,today:v,focusedDay:a,inRange:d(s,l,c),onDaySelect:h,onKeyboardNavigation:u,focusedDayRef:b,disabled:f(s),isSelected:n(s,t)})))))))))};const M=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--background:var(--nano-layer-bg, #fff);--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--inactive-color:var(--nano-button-color, #f0efed);display:block;font-size:16px}:host(.nano-color){--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(--nano-color-contrast);--focus-shadow:0 0 0 0.1875rem rgb(var(--nano-color-tint-rgb)/0.56)}.duet-date *,.duet-date *::before,.duet-date *::after{box-sizing:border-box;margin:0}.duet-date{box-sizing:border-box;color:currentcolor;display:block;margin:0;position:relative;text-align:start;inline-size:100%}.duet-date__dialog{display:flex;inset-block-start:100%;max-inline-size:100%;inline-size:100%}.duet-date__dialog.is-left{inset-inline:auto 0;inline-size:auto}.duet-date__dialog-content{background:var(--background);min-inline-size:290px;padding-block:16px 20px;padding-inline:16px;position:relative;transform:none;max-inline-size:100%;inline-size:100%}.duet-date__table{border-collapse:collapse;border-spacing:0;font-size:1em;line-height:1.25;text-align:center;inline-size:100%}.duet-date__table-header{font-size:0.75em;font-weight:600;letter-spacing:1px;line-height:1.25;-webkit-padding-after:8px;padding-block-end:8px;text-decoration:none;text-transform:uppercase}.duet-date__cell{text-align:center}.duet-date__day{-webkit-appearance:none;appearance:none;background:transparent;border:0;border-radius:50%;cursor:pointer;display:inline-block;font-size:0.875em;font-variant-numeric:tabular-nums;line-height:1.25;position:relative;text-align:center;vertical-align:middle;z-index:1;transition:0.15s ease all;block-size:2.5em;inline-size:2.5em}.duet-date__day.is-today{box-shadow:0 0 0 1px var(--active-color);position:relative}.duet-date__day:hover::before,.duet-date__day.is-today::before{content:"";background:var(--active-color);border-radius:50%;opacity:0.16;position:absolute;inset:0}[aria-selected=true] .duet-date__day{background:var(--active-color) !important;color:var(--active-text-color);box-shadow:none;outline:0}.duet-date__day:active{background:var(--active-color);box-shadow:var(--focus-shadow);color:var(--active-text-color)}.duet-date__day:focus{box-shadow:var(--focus-shadow);outline:0}.duet-date__day.is-disabled{background:transparent;box-shadow:none;cursor:default;opacity:0.5}.duet-date__day.is-disabled::before{display:none}.duet-date__day.is-outside{background:var(--inactive-color);box-shadow:none;cursor:default;opacity:0.6;pointer-events:none}.duet-date__day.is-outside::before{display:none}.duet-date__header{align-items:center;display:flex;justify-content:space-between;-webkit-margin-after:16px;margin-block-end:16px;inline-size:100%}.duet-date__nav{white-space:nowrap}.duet-date__prev,.duet-date__next{background:var(--inactive-color);align-items:center;-webkit-appearance:none;appearance:none;border:0;border-radius:50%;cursor:pointer;display:inline-flex;justify-content:space-around;-webkit-margin-start:8px;margin-inline-start:8px;padding:0;transition:background-color 300ms ease;font-size:0.9em;block-size:2.2em;inline-size:2.2em}.duet-date__prev:focus,.duet-date__next:focus{box-shadow:var(--focus-shadow);outline:0}.duet-date__prev:active:focus,.duet-date__next:active:focus{box-shadow:none}.duet-date__prev:disabled,.duet-date__next:disabled{cursor:default;opacity:0.5}.duet-date__prev nano-icon,.duet-date__next nano-icon{margin-block:0;margin-inline:auto}.duet-date__select{display:inline-flex;-webkit-margin-before:4px;margin-block-start:4px;position:relative}.duet-date__select span{-webkit-margin-end:4px;margin-inline-end:4px}.duet-date__select select{cursor:pointer;font-size:1em;block-size:100%;inset-inline-start:0;opacity:0;position:absolute;inset-block-start:0;inline-size:100%;z-index:2}.duet-date__select select.focus-visible:focus+.duet-date__select-label{box-shadow:var(--focus-shadow)}.duet-date__select-label{align-items:center;border-radius:4px;display:flex;font-size:1.25em;font-weight:600;line-height:1.25;padding-block:0;padding-inline:8px 4px;pointer-events:none;position:relative;inline-size:100%;z-index:1}.duet-date__select-label nano-icon{font-size:0.55em}.duet-date__vhidden{border:0;clip:rect(1px, 1px, 1px, 1px);block-size:1px;overflow:hidden;padding:0;position:absolute;inset-block-start:0;inline-size:1px}';function S(e,t){const a=[];for(let s=e;s<=t;s++){a.push(s)}return a}let C=0;const F=class{constructor(e){t(this,e);this.nanoDatePicked=a(this,"nanoDatePicked",7);this.dateId=`nano-datepicker-${C++}`;this.monthSelectId=this.dateId+"-"+"month";this.yearSelectId=this.dateId+"-"+"year";this.dialogLabelId=this.dateId+"-"+"dialog";this.initialTouchX=null;this.initialTouchY=null;this.enableActiveFocus=()=>{this.activeFocus=true};this.disableActiveFocus=()=>{this.activeFocus=false};this.handleTouchStart=e=>{const t=e.changedTouches[0];this.initialTouchX=t.pageX;this.initialTouchY=t.pageY};this.handleTouchMove=e=>{e.preventDefault()};this.handleTouchEnd=e=>{const t=e.changedTouches[0];const a=t.pageX-this.initialTouchX;const s=t.pageY-this.initialTouchY;const i=70;const n=Math.abs(a)>=i&&Math.abs(s)<=i;if(n){this.addMonths(a<0?1:-1)}this.initialTouchY=null;this.initialTouchX=null};this.handleNextMonthClick=e=>{e.preventDefault();this.addMonths(1)};this.handlePreviousMonthClick=e=>{e.preventDefault();this.addMonths(-1)};this.handleKeyboardNavigation=e=>{if(e.key==="Tab"&&!e.shiftKey&&this.isModal){e.preventDefault();const t=this.firstFocusEle||this.firstFocusableElement;t.focus();return}let t=true;switch(e.key){case"ArrowRight":this.addDays(1);break;case"ArrowLeft":this.addDays(-1);break;case"ArrowDown":this.addDays(7);break;case"ArrowUp":this.addDays(-7);break;case"PageUp":if(e.shiftKey){this.addYears(-1)}else{this.addMonths(-1)}break;case"PageDown":if(e.shiftKey){this.addYears(1)}else{this.addMonths(1)}break;case"Home":this.startOfWeek();break;case"End":this.endOfWeek();break;default:t=false}if(t){e.preventDefault();this.enableActiveFocus()}};this.handleDaySelect=(e,t)=>{const a=!this.isDateDisabled(t);const s=d(t,r(this.min),r(this.max));if(!s||!a){return}if(t.getMonth()===this.focusedDay.getMonth()){this.setValue(t)}else{this.setFocusedDay(t)}};this.handleMonthSelect=e=>{this.setMonth(parseInt(e.target.value,10))};this.handleYearSelect=e=>{this.setYear(parseInt(e.target.value,10))};this.processFocusedDayNode=e=>{this.focusedDayNode=e;if(this.activeFocus){setTimeout((()=>e.focus()),0)}};this.activeFocus=false;this.focusedDay=new Date;this.selectedDate="";this.min="";this.max="";this.firstDayOfWeek=l.Monday;this.localization=x;this.color=undefined;this.isDateDisabled=()=>false;this.isModal=false;this.firstFocusEle=undefined}async setFocus(e=false,t=false){this.setFocusedDay(r(this.selectedDate)||new Date);if(e){setTimeout((e=>this.focusedDayNode.focus()),20);return}clearTimeout(this.focusTimeoutId);this.focusTimeoutId=setTimeout((()=>{if(t)y.force(this.monthSelectNode);this.monthSelectNode.focus()}),20)}handleSelectedDateChange(){this.setFocus(true)}addDays(e){this.setFocusedDay(c(this.focusedDay,e))}addMonths(e){this.setMonth(this.focusedDay.getMonth()+e)}addYears(e){this.setYear(this.focusedDay.getFullYear()+e)}startOfWeek(){this.setFocusedDay(h(this.focusedDay,this.firstDayOfWeek))}endOfWeek(){this.setFocusedDay(u(this.focusedDay,this.firstDayOfWeek))}setMonth(e){const t=b(p(this.focusedDay),e);const a=_(t);const s=b(this.focusedDay,e);this.setFocusedDay(f(s,t,a))}setYear(e){const t=v(p(this.focusedDay),e);const a=_(t);const s=v(this.focusedDay,e);this.setFocusedDay(f(s,t,a))}setFocusedDay(e){this.focusedDay=f(e,r(this.min),r(this.max))}setValue(e){this.selectedDate=g(e);this.nanoDatePicked.emit({value:this.selectedDate,valueAsDate:e})}connectedCallback(){if(this.yearSelectNode)y.observe(this.yearSelectNode);if(this.monthSelectNode)y.observe(this.monthSelectNode)}componentWillLoad(){this.handleSelectedDateChange()}componentDidLoad(){this.connectedCallback()}disconnectedCallback(){y.unobserve(this.yearSelectNode);y.unobserve(this.monthSelectNode)}render(){const t=r(this.selectedDate);const a=(t||this.focusedDay).getFullYear();const i=this.focusedDay.getMonth();const n=this.focusedDay.getFullYear();const o=r(this.min);const l=r(this.max);const c=o!=null&&o.getMonth()===i&&o.getFullYear()===n;const h=l!=null&&l.getMonth()===i&&l.getFullYear()===n;let u=a-10;let b=a+10;if(o)u=o.getFullYear();if(l)b=l.getFullYear();return e(s,{class:Object.assign({},m(this.color))},e("div",{class:"duet-date"},e("div",{class:{"duet-date__dialog":true,"is-active":true},onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},e("div",{class:"duet-date__dialog-content"},e("div",{class:"duet-date__vhidden duet-date__instructions","aria-live":"polite"},this.localization.keyboardInstruction),e("div",{class:"duet-date__header",onFocusin:this.disableActiveFocus},e("div",null,e("h2",{id:this.dialogLabelId,class:"duet-date__vhidden","aria-live":"polite"},this.localization.monthNames[i]," ",this.focusedDay.getFullYear()),e("label",{htmlFor:this.monthSelectId,class:"duet-date__vhidden"},this.localization.monthSelectLabel),e("div",{class:"duet-date__select"},e("select",{id:this.monthSelectId,class:"duet-date__select--month",ref:e=>this.firstFocusableElement=this.monthSelectNode=e,onChange:this.handleMonthSelect},this.localization.monthNames.map(((t,a)=>e("option",{key:t,value:a,selected:a===i,disabled:!d(new Date(n,a,1),o?p(o):null,l?_(l):null)},t)))),e("div",{class:"duet-date__select-label","aria-hidden":"true"},e("span",null,this.localization.monthNamesShort[i]),e("nano-icon",{name:"light/chevron-down"}))),e("label",{htmlFor:this.yearSelectId,class:"duet-date__vhidden"},this.localization.yearSelectLabel),e("div",{class:"duet-date__select"},e("select",{id:this.yearSelectId,class:"duet-date__select--year",onChange:this.handleYearSelect,ref:e=>this.yearSelectNode=e},S(u,b).map((t=>e("option",{key:t,selected:t===n},t)))),e("div",{class:"duet-date__select-label","aria-hidden":"true"},e("span",null,this.focusedDay.getFullYear()),e("nano-icon",{name:"light/chevron-down"})))),e("div",{class:"duet-date__nav"},e("button",{class:"duet-date__prev",onClick:this.handlePreviousMonthClick,disabled:c,type:"button"},e("nano-icon",{name:"light/chevron-left"}),e("span",{class:"duet-date__vhidden"},this.localization.prevMonthLabel)),e("button",{class:"duet-date__next",onClick:this.handleNextMonthClick,disabled:h,type:"button"},e("nano-icon",{name:"light/chevron-right"}),e("span",{class:"duet-date__vhidden"},this.localization.nextMonthLabel)))),e("div",null,e(z,{selectedDate:t,focusedDate:this.focusedDay,onDateSelect:this.handleDaySelect,onKeyboardNavigation:this.handleKeyboardNavigation,labelledById:this.dialogLabelId,localization:this.localization,firstDayOfWeek:this.firstDayOfWeek,focusedDayRef:this.processFocusedDayNode,min:o,max:l,isDateDisabled:this.isDateDisabled}))))))}get host(){return i(this)}static get watchers(){return{selectedDate:["handleSelectedDateChange"]}}};F.style=M;export{F as nano_date_picker};
5
+ //# sourceMappingURL=p-abd6b774.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["localization","buttonLabel","placeholder","selectedDateMessage","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","closeLabel","keyboardInstruction","calendarHeading","dayNames","monthNames","monthNamesShort","DatePickerDay","focusedDay","today","day","onDaySelect","onKeyboardNavigation","focusedDayRef","inRange","disabled","isSelected","isToday","isEqual","isFocused","isDisabled","getMonth","isOutsideRange","handleClick","e","h","class","tabIndex","onClick","onKeyDown","type","ref","el","getDate","toLocaleDateString","undefined","month","chunk","array","chunkSize","result","i","length","push","slice","mapWithOffset","startingOffset","mapFn","map","_","adjustedIndex","DatePickerMonth","selectedDate","focusedDate","labelledById","firstDayOfWeek","min","max","onDateSelect","onMouseDown","onFocusIn","isDateDisabled","Date","days","getViewOfMonth","role","onFocusin","dayName","scope","substr","week","datePickerCss","range","from","to","dateIds","DatePicker","this","dateId","monthSelectId","yearSelectId","dialogLabelId","initialTouchX","initialTouchY","enableActiveFocus","activeFocus","disableActiveFocus","handleTouchStart","event","touch","changedTouches","pageX","pageY","handleTouchMove","preventDefault","handleTouchEnd","distX","distY","threshold","isHorizontalSwipe","Math","abs","addMonths","handleNextMonthClick","handlePreviousMonthClick","handleKeyboardNavigation","key","shiftKey","isModal","ele","firstFocusEle","firstFocusableElement","focus","handled","addDays","addYears","startOfWeek","endOfWeek","handleDaySelect","_event","isAllowed","isInRange","parseISODate","setValue","setFocusedDay","handleMonthSelect","setMonth","parseInt","target","value","handleYearSelect","setYear","processFocusedDayNode","element","focusedDayNode","setTimeout","DaysOfWeek","Monday","defaultLocalization","async","forceFocusVisible","clearTimeout","focusTimeoutId","focusVisible","force","monthSelectNode","handleSelectedDateChange","setFocus","months","years","getFullYear","startOfMonth","endOfMonth","date","dateClamp","year","printISODate","nanoDatePicked","emit","valueAsDate","connectedCallback","yearSelectNode","observe","componentWillLoad","componentDidLoad","disconnectedCallback","unobserve","render","selectedYear","focusedMonth","focusedYear","minDate","maxDate","prevMonthDisabled","nextMonthDisabled","minYear","maxYear","Host","Object","assign","createColorClasses","color","onTouchMove","onTouchStart","onTouchEnd","id","htmlFor","onChange","selected","name"],"sources":["./src/components/date-picker/duet-date-picker/date-localization.ts","./src/components/date-picker/duet-date-picker/date-picker-day.tsx","./src/components/date-picker/duet-date-picker/date-picker-month.tsx","./src/components/date-picker/date-picker.scss?tag=nano-date-picker&encapsulation=shadow","./src/components/date-picker/date-picker.tsx"],"sourcesContent":["type MonthsNames = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n];\ntype DayNames = [string, string, string, string, string, string, string];\n\nexport type DuetLocalizedText = {\n buttonLabel: string;\n placeholder: string;\n selectedDateMessage: string;\n prevMonthLabel: string;\n nextMonthLabel: string;\n monthSelectLabel: string;\n yearSelectLabel: string;\n closeLabel: string;\n keyboardInstruction: string;\n calendarHeading: string;\n dayNames: DayNames;\n monthNames: MonthsNames;\n monthNamesShort: MonthsNames;\n};\n\nconst localization: DuetLocalizedText = {\n buttonLabel: 'Choose date',\n placeholder: 'YYYY-MM-DD',\n selectedDateMessage: 'Selected date is',\n prevMonthLabel: 'Previous month',\n nextMonthLabel: 'Next month',\n monthSelectLabel: 'Month',\n yearSelectLabel: 'Year',\n closeLabel: 'Close window',\n keyboardInstruction: 'You can use arrow keys to navigate dates',\n calendarHeading: 'Choose a date',\n dayNames: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ],\n monthNames: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n monthNamesShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ],\n};\n\nexport default localization;\n","import { h, FunctionalComponent } from '@stencil/core';\nimport { isEqual } from '../../../utils/date-utils';\n\nexport type DatePickerDayProps = {\n focusedDay: Date;\n today: Date;\n day: Date;\n inRange: boolean;\n disabled: boolean;\n onDaySelect: (event: MouseEvent, day: Date) => void;\n onKeyboardNavigation: (event: KeyboardEvent) => void;\n focusedDayRef?: (element: HTMLButtonElement) => void;\n isSelected;\n};\n\nexport const DatePickerDay: FunctionalComponent<DatePickerDayProps> = ({\n focusedDay,\n today,\n day,\n onDaySelect,\n onKeyboardNavigation,\n focusedDayRef,\n inRange,\n disabled,\n isSelected,\n}) => {\n const isToday = isEqual(day, today);\n const isFocused = isEqual(day, focusedDay);\n const isDisabled = day.getMonth() !== focusedDay.getMonth() || disabled;\n const isOutsideRange = !inRange;\n\n function handleClick(e) {\n onDaySelect(e, day);\n }\n\n return (\n <button\n class={{\n 'duet-date__day': true,\n 'is-outside': isOutsideRange,\n 'is-disabled': isDisabled,\n 'is-today': isToday,\n }}\n tabIndex={isFocused ? 0 : -1}\n onClick={handleClick}\n onKeyDown={onKeyboardNavigation}\n disabled={isOutsideRange}\n type=\"button\"\n aria-pressed={isSelected ? 'true' : 'false'}\n ref={(el) => {\n if (isFocused && el && focusedDayRef) {\n focusedDayRef(el);\n }\n }}\n >\n <span aria-hidden=\"true\">{day.getDate()}</span>\n <span class=\"duet-date__vhidden\">\n {day.toLocaleDateString(undefined, { day: 'numeric', month: 'long' })}\n </span>\n </button>\n );\n};\n","import { h, FunctionalComponent } from '@stencil/core';\nimport {\n getViewOfMonth,\n inRange,\n DaysOfWeek,\n isEqual,\n} from '../../../utils/date-utils';\nimport { DatePickerDay, DatePickerDayProps } from './date-picker-day';\nimport type { DateDisabledPredicate } from '../../../interface';\nimport type { DuetLocalizedText } from './date-localization';\n\nfunction chunk<T>(array: T[], chunkSize: number): T[][] {\n const result = [];\n\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n\nfunction mapWithOffset<T, U>(\n array: T[],\n startingOffset: number,\n mapFn: (item: T) => U\n): U[] {\n return array.map((_, i) => {\n const adjustedIndex = (i + startingOffset) % array.length;\n return mapFn(array[adjustedIndex]);\n });\n}\n\ntype DatePickerMonthProps = {\n selectedDate: Date;\n focusedDate: Date;\n labelledById: string;\n localization: DuetLocalizedText;\n firstDayOfWeek: DaysOfWeek;\n min?: Date;\n max?: Date;\n onDateSelect: DatePickerDayProps['onDaySelect'];\n onKeyboardNavigation: DatePickerDayProps['onKeyboardNavigation'];\n focusedDayRef: (element: HTMLButtonElement) => void;\n onFocusIn?: (e: FocusEvent) => void;\n onMouseDown?: (e: MouseEvent) => void;\n isDateDisabled: DateDisabledPredicate;\n};\n\nexport const DatePickerMonth: FunctionalComponent<DatePickerMonthProps> = ({\n selectedDate,\n focusedDate,\n labelledById,\n localization,\n firstDayOfWeek,\n min,\n max,\n onDateSelect,\n onKeyboardNavigation,\n focusedDayRef,\n onMouseDown,\n onFocusIn,\n isDateDisabled,\n}) => {\n const today = new Date();\n const days = getViewOfMonth(focusedDate, firstDayOfWeek);\n\n return (\n <table\n class=\"duet-date__table\"\n role=\"grid\"\n aria-labelledby={labelledById}\n // @ts-ignore\n onFocusin={onFocusIn}\n onMouseDown={onMouseDown}\n >\n <thead>\n <tr>\n {mapWithOffset(localization.dayNames, firstDayOfWeek, (dayName) => (\n <th class=\"duet-date__table-header\" scope=\"col\">\n <span aria-hidden=\"true\">{dayName.substr(0, 2)}</span>\n <span class=\"duet-date__vhidden\">{dayName}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {chunk(days, 7).map((week) => (\n <tr class=\"duet-date__row\">\n {week.map((day) => (\n <td\n class=\"duet-date__cell\"\n role=\"gridcell\"\n aria-selected={isEqual(day, selectedDate) ? 'true' : undefined}\n >\n <DatePickerDay\n day={day}\n today={today}\n focusedDay={focusedDate}\n inRange={inRange(day, min, max)}\n onDaySelect={onDateSelect}\n onKeyboardNavigation={onKeyboardNavigation}\n focusedDayRef={focusedDayRef}\n disabled={isDateDisabled(day)}\n isSelected={isEqual(day, selectedDate)}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n","@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --background: defaults to #{$layer-bg-color}\n * @prop --active-color: defaults to var(--nano-color-base, #{nano-color(primary,base)})\n * @prop --active-text-color: defaults to var(--nano-color-contrast, #{nano-color(primary, contrast)})\n * @prop --focus-shadow: defaults to #{$control-focus-style}\n * @prop --inactive-color: defaults to #{$button-bg-color}\n */\n\n --background: #{$layer-bg-color};\n --active-color: var(--nano-color-base, #{nano-color(primary, base)});\n --active-text-color:\n var(\n --nano-color-contrast,\n #{nano-color(primary, contrast)}\n );\n --focus-shadow: #{$control-focus-style};\n --inactive-color: #{$button-bg-color};\n\n display: block;\n font-size: 16px;\n}\n\n:host(.nano-color) {\n --active-color: var(--nano-color-base, #{nano-color(primary, base)});\n --active-text-color: #{current-color(contrast)};\n --focus-shadow: #{$control-focus-size current-color(tint, 0.56)};\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER\n// ---------------------------------------------\n\n.duet-date *,\n.duet-date *::before,\n.duet-date *::after {\n box-sizing: border-box;\n margin: 0;\n}\n\n.duet-date {\n box-sizing: border-box;\n color: currentcolor;\n display: block;\n margin: 0;\n position: relative;\n text-align: start;\n inline-size: 100%;\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ DIALOG\n// ---------------------------------------------\n\n.duet-date__dialog {\n display: flex;\n inset-block-start: 100%;\n max-inline-size: 100%;\n inline-size: 100%;\n\n &.is-left {\n inset-inline: auto 0;\n inline-size: auto;\n }\n}\n\n.duet-date__dialog-content {\n background: var(--background);\n min-inline-size: 290px;\n padding-block: 16px 20px;\n padding-inline: 16px;\n position: relative;\n transform: none;\n max-inline-size: 100%;\n inline-size: 100%;\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ TABLE\n// ---------------------------------------------\n\n.duet-date__table {\n border-collapse: collapse;\n border-spacing: 0;\n font-size: 1em;\n line-height: 1.25;\n text-align: center;\n inline-size: 100%;\n}\n\n.duet-date__table-header {\n font-size: 0.75em;\n font-weight: 600;\n letter-spacing: 1px;\n line-height: 1.25;\n padding-block-end: 8px;\n text-decoration: none;\n text-transform: uppercase;\n}\n\n.duet-date__cell {\n text-align: center;\n}\n\n.duet-date__day {\n appearance: none;\n background: transparent;\n border: 0;\n border-radius: 50%;\n cursor: pointer;\n display: inline-block;\n font-size: 0.875em;\n font-variant-numeric: tabular-nums;\n line-height: 1.25;\n position: relative;\n text-align: center;\n vertical-align: middle;\n z-index: 1;\n transition: 0.15s ease all;\n block-size: 2.5em;\n inline-size: 2.5em;\n\n &.is-today {\n box-shadow: 0 0 0 1px var(--active-color);\n position: relative;\n }\n\n &:hover::before,\n &.is-today::before {\n content: '';\n background: var(--active-color);\n border-radius: 50%;\n opacity: 0.16;\n position: absolute;\n inset: 0;\n }\n\n [aria-selected='true'] & {\n background: var(--active-color) !important;\n color: var(--active-text-color);\n box-shadow: none;\n outline: 0;\n }\n\n &:active {\n background: var(--active-color);\n box-shadow: var(--focus-shadow);\n color: var(--active-text-color);\n }\n\n &:focus {\n box-shadow: var(--focus-shadow);\n outline: 0;\n }\n\n &.is-disabled {\n background: transparent;\n box-shadow: none;\n cursor: default;\n opacity: 0.5;\n\n &::before {\n display: none;\n }\n }\n\n &.is-outside {\n background: var(--inactive-color);\n box-shadow: none;\n cursor: default;\n opacity: 0.6;\n pointer-events: none;\n\n &::before {\n display: none;\n }\n }\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ HEADER\n// ---------------------------------------------\n\n.duet-date__header {\n align-items: center;\n display: flex;\n justify-content: space-between;\n margin-block-end: 16px;\n inline-size: 100%;\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ NAVIGATION\n// ---------------------------------------------\n\n.duet-date__nav {\n white-space: nowrap;\n}\n\n.duet-date__prev,\n.duet-date__next {\n background: var(--inactive-color);\n align-items: center;\n appearance: none;\n border: 0;\n border-radius: 50%;\n cursor: pointer;\n display: inline-flex;\n justify-content: space-around;\n margin-inline-start: 8px;\n padding: 0;\n transition: background-color 300ms ease;\n font-size: 0.9em;\n block-size: 2.2em;\n inline-size: 2.2em;\n\n &:focus {\n box-shadow: var(--focus-shadow);\n outline: 0;\n }\n\n &:active:focus {\n box-shadow: none;\n }\n\n &:disabled {\n cursor: default;\n opacity: 0.5;\n }\n\n nano-icon {\n margin-block: 0;\n margin-inline: auto;\n }\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ SELECT\n// ---------------------------------------------\n\n.duet-date__select {\n display: inline-flex;\n margin-block-start: 4px;\n position: relative;\n\n span {\n margin-inline-end: 4px;\n }\n\n select {\n cursor: pointer;\n font-size: 1em;\n block-size: 100%;\n inset-inline-start: 0;\n opacity: 0;\n position: absolute;\n inset-block-start: 0;\n inline-size: 100%;\n z-index: 2;\n\n &.focus-visible:focus + .duet-date__select-label {\n box-shadow: var(--focus-shadow);\n }\n }\n}\n\n.duet-date__select-label {\n align-items: center;\n border-radius: 4px;\n display: flex;\n font-size: 1.25em;\n font-weight: 600;\n line-height: 1.25;\n padding-block: 0;\n padding-inline: 8px 4px;\n pointer-events: none;\n position: relative;\n inline-size: 100%;\n z-index: 1;\n\n nano-icon {\n font-size: 0.55em;\n }\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ VISUALLY HIDDEN\n// ---------------------------------------------\n\n.duet-date__vhidden {\n border: 0;\n clip: rect(1px, 1px, 1px, 1px);\n block-size: 1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n inset-block-start: 0;\n inline-size: 1px;\n}\n","import {\n Component,\n ComponentInterface,\n Host,\n Prop,\n Element,\n h,\n Event,\n EventEmitter,\n State,\n Method,\n Watch,\n} from '@stencil/core';\nimport {\n addDays,\n startOfWeek,\n endOfWeek,\n setMonth,\n setYear,\n dateClamp,\n inRange,\n endOfMonth,\n startOfMonth,\n printISODate,\n parseISODate,\n DaysOfWeek,\n} from '../../utils/date-utils';\n\nimport { focusVisible } from '../../utils/focus-visible';\nimport { createColorClasses } from '../../utils/theme';\nimport defaultLocalization from './duet-date-picker/date-localization';\nimport { DatePickerMonth } from './duet-date-picker/date-picker-month';\nimport type {\n PickerChangeEvent,\n DuetLocalizedText,\n DateDisabledPredicate,\n Color,\n} from '../../interface';\n\nfunction range(from: number, to: number) {\n const result: number[] = [];\n for (let i = from; i <= to; i++) {\n result.push(i);\n }\n return result;\n}\n\nlet dateIds = 0;\n\n/**\n * A highly performant, small and accessible date-picker.\n * Customised from [Duet date-picker](https://duetds.github.io/date-picker/).\n */\n@Component({\n tag: 'nano-date-picker',\n styleUrl: 'date-picker.scss',\n shadow: true,\n})\nexport class DatePicker implements ComponentInterface {\n private dateId = `nano-datepicker-${dateIds++}`;\n private monthSelectId = this.dateId + '-' + 'month';\n private yearSelectId = this.dateId + '-' + 'year';\n private dialogLabelId = this.dateId + '-' + 'dialog';\n\n private firstFocusableElement: HTMLElement;\n private monthSelectNode: HTMLElement;\n private yearSelectNode: HTMLElement;\n private focusedDayNode: HTMLButtonElement;\n\n private focusTimeoutId: ReturnType<typeof setTimeout>;\n\n private initialTouchX: number = null;\n private initialTouchY: number = null;\n\n @Element() host: HTMLNanoDatePickerElement;\n\n @State() activeFocus = false;\n @State() focusedDay = new Date();\n\n // Public Property API\n\n /** Selected Date. Must be in IS0-8601 format: YYYY-MM-DD. */\n @Prop({ mutable: true }) selectedDate: string = '';\n\n /** Minimum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.\n * This setting can be used alone or together with the max property. */\n @Prop() min: string = '';\n\n /** Maximum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.\n * This setting can be used alone or together with the min property. */\n @Prop() max: string = '';\n\n /** Which day is considered first day of the week? `0` for Sunday, `1` for Monday, etc.\n * Default is Monday. */\n @Prop() firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday;\n\n /** Button labels, day names, month names, etc, used for localization.\n * Default is English. */\n @Prop() localization: DuetLocalizedText = defaultLocalization;\n\n /** The color to use from the application's color palette. */\n @Prop() color?: Color;\n\n /**\n * Controls which days are disabled and therefore disallowed.\n * For example, this can be used to disallow selection of weekends.\n * @returns `false` for not disabled and `true` for disabled\n */\n @Prop() isDateDisabled: DateDisabledPredicate = () => false;\n\n /** Controls whether the picker is a modal or dialog,\n * popup control and will therefore keep focus within the control */\n @Prop() isModal: boolean = false;\n\n /** @internal First focusable element. Relevant for keeping focus within the control */\n @Prop() firstFocusEle: HTMLElement;\n\n // Events\n\n /** Event emitted when a date is selected. */\n @Event() nanoDatePicked: EventEmitter<PickerChangeEvent>;\n\n // Public methods API\n\n /** Focus to the calendar\n * @param day - focus to the current selected day\n * @param forceFocusVisible - force visible focus - required if opened via keyboad\n */\n @Method()\n async setFocus(day = false, forceFocusVisible = false) {\n this.setFocusedDay(parseISODate(this.selectedDate) || new Date());\n\n if (day) {\n setTimeout((_) => this.focusedDayNode.focus(), 20);\n return;\n }\n clearTimeout(this.focusTimeoutId);\n this.focusTimeoutId = setTimeout(() => {\n if (forceFocusVisible) focusVisible.force(this.monthSelectNode);\n this.monthSelectNode.focus();\n }, 20);\n }\n\n @Watch('selectedDate')\n handleSelectedDateChange() {\n this.setFocus(true);\n }\n\n // Local methods.\n\n private enableActiveFocus = () => {\n this.activeFocus = true;\n };\n\n private disableActiveFocus = () => {\n this.activeFocus = false;\n };\n\n private addDays(days: number) {\n this.setFocusedDay(addDays(this.focusedDay, days));\n }\n\n private addMonths(months: number) {\n this.setMonth(this.focusedDay.getMonth() + months);\n }\n\n private addYears(years: number) {\n this.setYear(this.focusedDay.getFullYear() + years);\n }\n\n private startOfWeek() {\n this.setFocusedDay(startOfWeek(this.focusedDay, this.firstDayOfWeek));\n }\n\n private endOfWeek() {\n this.setFocusedDay(endOfWeek(this.focusedDay, this.firstDayOfWeek));\n }\n\n private setMonth(month: number) {\n const min = setMonth(startOfMonth(this.focusedDay), month);\n const max = endOfMonth(min);\n const date = setMonth(this.focusedDay, month);\n\n this.setFocusedDay(dateClamp(date, min, max));\n }\n\n private setYear(year: number) {\n const min = setYear(startOfMonth(this.focusedDay), year);\n const max = endOfMonth(min);\n const date = setYear(this.focusedDay, year);\n\n this.setFocusedDay(dateClamp(date, min, max));\n }\n\n private setFocusedDay(day: Date) {\n this.focusedDay = dateClamp(\n day,\n parseISODate(this.min),\n parseISODate(this.max)\n );\n }\n\n private handleTouchStart = (event: TouchEvent) => {\n const touch = event.changedTouches[0];\n this.initialTouchX = touch.pageX;\n this.initialTouchY = touch.pageY;\n };\n\n private handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n };\n\n private handleTouchEnd = (event: TouchEvent) => {\n const touch = event.changedTouches[0];\n const distX = touch.pageX - this.initialTouchX; // get horizontal dist traveled\n const distY = touch.pageY - this.initialTouchY; // get vertical dist traveled\n const threshold = 70;\n\n const isHorizontalSwipe =\n Math.abs(distX) >= threshold && Math.abs(distY) <= threshold;\n\n if (isHorizontalSwipe) {\n this.addMonths(distX < 0 ? 1 : -1);\n }\n\n this.initialTouchY = null;\n this.initialTouchX = null;\n };\n\n private handleNextMonthClick = (event: MouseEvent) => {\n event.preventDefault();\n this.addMonths(1);\n };\n\n private handlePreviousMonthClick = (event: MouseEvent) => {\n event.preventDefault();\n this.addMonths(-1);\n };\n\n private handleKeyboardNavigation = (event: KeyboardEvent) => {\n // handle tab separately, since it needs to be treated\n // differently to other keyboard interactions\n if (event.key === 'Tab' && !event.shiftKey && this.isModal) {\n event.preventDefault();\n const ele = this.firstFocusEle || this.firstFocusableElement;\n ele.focus();\n return;\n }\n\n let handled = true;\n\n switch (event.key) {\n case 'ArrowRight':\n this.addDays(1);\n break;\n case 'ArrowLeft':\n this.addDays(-1);\n break;\n case 'ArrowDown':\n this.addDays(7);\n break;\n case 'ArrowUp':\n this.addDays(-7);\n break;\n case 'PageUp':\n if (event.shiftKey) {\n this.addYears(-1);\n } else {\n this.addMonths(-1);\n }\n break;\n case 'PageDown':\n if (event.shiftKey) {\n this.addYears(1);\n } else {\n this.addMonths(1);\n }\n break;\n case 'Home':\n this.startOfWeek();\n break;\n case 'End':\n this.endOfWeek();\n break;\n default:\n handled = false;\n }\n\n if (handled) {\n event.preventDefault();\n this.enableActiveFocus();\n }\n };\n\n private handleDaySelect = (_event: MouseEvent, day: Date) => {\n const isAllowed = !this.isDateDisabled(day);\n const isInRange = inRange(\n day,\n parseISODate(this.min),\n parseISODate(this.max)\n );\n\n if (!isInRange || !isAllowed) {\n return;\n }\n\n if (day.getMonth() === this.focusedDay.getMonth()) {\n this.setValue(day);\n } else {\n this.setFocusedDay(day);\n }\n };\n\n private handleMonthSelect = (e) => {\n this.setMonth(parseInt(e.target.value, 10));\n };\n\n private handleYearSelect = (e) => {\n this.setYear(parseInt(e.target.value, 10));\n };\n\n private setValue(date: Date) {\n this.selectedDate = printISODate(date);\n this.nanoDatePicked.emit({\n value: this.selectedDate,\n valueAsDate: date,\n });\n }\n\n private processFocusedDayNode = (element: HTMLButtonElement) => {\n this.focusedDayNode = element;\n\n if (this.activeFocus) {\n setTimeout(() => element.focus(), 0);\n }\n };\n\n connectedCallback() {\n if (this.yearSelectNode) focusVisible.observe(this.yearSelectNode);\n if (this.monthSelectNode) focusVisible.observe(this.monthSelectNode);\n }\n\n componentWillLoad() {\n this.handleSelectedDateChange();\n }\n\n componentDidLoad() {\n this.connectedCallback();\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.yearSelectNode);\n focusVisible.unobserve(this.monthSelectNode);\n }\n\n render() {\n const valueAsDate = parseISODate(this.selectedDate);\n const selectedYear = (valueAsDate || this.focusedDay).getFullYear();\n const focusedMonth = this.focusedDay.getMonth();\n const focusedYear = this.focusedDay.getFullYear();\n\n const minDate = parseISODate(this.min);\n const maxDate = parseISODate(this.max);\n const prevMonthDisabled =\n minDate != null &&\n minDate.getMonth() === focusedMonth &&\n minDate.getFullYear() === focusedYear;\n const nextMonthDisabled =\n maxDate != null &&\n maxDate.getMonth() === focusedMonth &&\n maxDate.getFullYear() === focusedYear;\n\n let minYear = selectedYear - 10;\n let maxYear = selectedYear + 10;\n if (minDate) minYear = minDate.getFullYear();\n if (maxDate) maxYear = maxDate.getFullYear();\n\n return (\n <Host class={{ ...createColorClasses(this.color) }}>\n <div class=\"duet-date\">\n <div\n class={{\n 'duet-date__dialog': true,\n 'is-active': true,\n }}\n onTouchMove={this.handleTouchMove}\n onTouchStart={this.handleTouchStart}\n onTouchEnd={this.handleTouchEnd}\n >\n <div class=\"duet-date__dialog-content\">\n <div\n class=\"duet-date__vhidden duet-date__instructions\"\n aria-live=\"polite\"\n >\n {this.localization.keyboardInstruction}\n </div>\n {/**\n * With onFocusIn, which is what TS types expect, Stencil ends up listening to a\n * focusIn event, which is wrong as it needs to be focusin. So we had to use onFocusin\n * here which is wrong for the TS types, but ends up with the correct event listener\n * in Stencil. See issue: https://github.com/ionic-team/stencil/issues/2628\n */}\n {/* @ts-ignore */}\n <div\n class=\"duet-date__header\"\n onFocusin={this.disableActiveFocus}\n >\n <div>\n <h2\n id={this.dialogLabelId}\n class=\"duet-date__vhidden\"\n aria-live=\"polite\"\n >\n {this.localization.monthNames[focusedMonth]}{' '}\n {this.focusedDay.getFullYear()}\n </h2>\n <label\n htmlFor={this.monthSelectId}\n class=\"duet-date__vhidden\"\n >\n {this.localization.monthSelectLabel}\n </label>\n <div class=\"duet-date__select\">\n <select\n id={this.monthSelectId}\n class=\"duet-date__select--month\"\n ref={(element) =>\n (this.firstFocusableElement = this.monthSelectNode =\n element)\n }\n onChange={this.handleMonthSelect}\n >\n {this.localization.monthNames.map((month, i) => (\n <option\n key={month}\n value={i}\n selected={i === focusedMonth}\n disabled={\n !inRange(\n new Date(focusedYear, i, 1),\n minDate ? startOfMonth(minDate) : null,\n maxDate ? endOfMonth(maxDate) : null\n )\n }\n >\n {month}\n </option>\n ))}\n </select>\n <div class=\"duet-date__select-label\" aria-hidden=\"true\">\n <span>\n {this.localization.monthNamesShort[focusedMonth]}\n </span>\n <nano-icon name=\"light/chevron-down\"></nano-icon>\n </div>\n </div>\n\n <label htmlFor={this.yearSelectId} class=\"duet-date__vhidden\">\n {this.localization.yearSelectLabel}\n </label>\n <div class=\"duet-date__select\">\n <select\n id={this.yearSelectId}\n class=\"duet-date__select--year\"\n onChange={this.handleYearSelect}\n ref={(element) => (this.yearSelectNode = element)}\n >\n {range(minYear, maxYear).map((year) => (\n <option key={year} selected={year === focusedYear}>\n {year}\n </option>\n ))}\n </select>\n <div class=\"duet-date__select-label\" aria-hidden=\"true\">\n <span>{this.focusedDay.getFullYear()}</span>\n <nano-icon name=\"light/chevron-down\"></nano-icon>\n </div>\n </div>\n </div>\n\n <div class=\"duet-date__nav\">\n <button\n class=\"duet-date__prev\"\n onClick={this.handlePreviousMonthClick}\n disabled={prevMonthDisabled}\n type=\"button\"\n >\n <nano-icon name=\"light/chevron-left\"></nano-icon>\n <span class=\"duet-date__vhidden\">\n {this.localization.prevMonthLabel}\n </span>\n </button>\n <button\n class=\"duet-date__next\"\n onClick={this.handleNextMonthClick}\n disabled={nextMonthDisabled}\n type=\"button\"\n >\n <nano-icon name=\"light/chevron-right\"></nano-icon>\n <span class=\"duet-date__vhidden\">\n {this.localization.nextMonthLabel}\n </span>\n </button>\n </div>\n </div>\n <div>\n <DatePickerMonth\n selectedDate={valueAsDate}\n focusedDate={this.focusedDay}\n onDateSelect={this.handleDaySelect}\n onKeyboardNavigation={this.handleKeyboardNavigation}\n labelledById={this.dialogLabelId}\n localization={this.localization}\n firstDayOfWeek={this.firstDayOfWeek}\n focusedDayRef={this.processFocusedDayNode}\n min={minDate}\n max={maxDate}\n isDateDisabled={this.isDateDisabled}\n />\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["src/utils/slot.ts"],"names":["getTextContent","slot","nodes","assignedNodes","flatten","text","map","node","nodeType","Node","TEXT_NODE","textContent","hasSlot","el","name","querySelector","Array","from","childNodes","some","trim","ELEMENT_NODE","hasAttribute"],"mappings":";;;SA6BgBA,EAAeC,GAC7B,MAAMC,EAAQD,EAAKE,cAAc,CAAEC,QAAS,OAC5C,IAAIC,EAAO,GAEX,IAAIH,GAAOI,KAAKC,IACd,GAAIA,EAAKC,WAAaC,KAAKC,UAAW,CACpCL,GAAQE,EAAKI,gBAIjB,OAAON,WAUOO,EAAQC,EAAiBC,GAEvC,GAAIA,EAAM,CACR,OAAOD,EAAGE,cAAc,UAAUD,SAAc,KAIlD,MAAO,IAAIE,MAAMC,KAAKJ,EAAGK,aAAaC,MAAMZ,IAC1C,GAAIA,EAAKC,WAAaD,EAAKG,WAAaH,EAAKI,YAAYS,SAAW,GAAI,CACtE,OAAO,KAGT,GAAIb,EAAKC,WAAaD,EAAKc,aAAc,CACvC,MAAMR,EAAKN,EACX,IAAKM,EAAGS,aAAa,QAAS,CAC5B,OAAO,MAIX,OAAO","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 if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent;\n }\n });\n\n return text;\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,"names":["getTextContent","slot","nodes","assignedNodes","flatten","text","map","node","nodeType","Node","TEXT_NODE","textContent","hasSlot","el","name","querySelector","Array","from","childNodes","some","trim","ELEMENT_NODE","hasAttribute"],"sources":["./src/utils/slot.ts"],"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 if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent;\n }\n });\n\n return text;\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"],"mappings":";;;SA6BgBA,EAAeC,GAC7B,MAAMC,EAAQD,EAAKE,cAAc,CAAEC,QAAS,OAC5C,IAAIC,EAAO,GAEX,IAAIH,GAAOI,KAAKC,IACd,GAAIA,EAAKC,WAAaC,KAAKC,UAAW,CACpCL,GAAQE,EAAKI,W,KAIjB,OAAON,CACT,C,SASgBO,EAAQC,EAAiBC,GAEvC,GAAIA,EAAM,CACR,OAAOD,EAAGE,cAAc,UAAUD,SAAc,I,CAIlD,MAAO,IAAIE,MAAMC,KAAKJ,EAAGK,aAAaC,MAAMZ,IAC1C,GAAIA,EAAKC,WAAaD,EAAKG,WAAaH,EAAKI,YAAYS,SAAW,GAAI,CACtE,OAAO,I,CAGT,GAAIb,EAAKC,WAAaD,EAAKc,aAAc,CACvC,MAAMR,EAAKN,EACX,IAAKM,EAAGS,aAAa,QAAS,CAC5B,OAAO,I,EAIX,OAAO,KAAK,GAEhB,Q"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- class t{constructor(){this.gestureId=0;this.requestedStart=new Map;this.disabledGestures=new Map;this.disabledScroll=new Set}createGesture(t){return new e(this,this.newID(),t.name,t.priority||0,!!t.disableScroll)}createBlocker(t={}){return new s(this,this.newID(),t.disable,!!t.disableScroll)}start(t,e,s){if(!this.canStart(t)){this.requestedStart.delete(e);return false}this.requestedStart.set(e,s);return true}capture(t,e,s){if(!this.start(t,e,s)){return false}const n=this.requestedStart;let i=-1e4;n.forEach((t=>{i=Math.max(i,t)}));if(i===s){this.capturedId=e;n.clear();const s=new CustomEvent("ionGestureCaptured",{detail:{gestureName:t}});document.dispatchEvent(s);return true}n.delete(e);return false}release(t){this.requestedStart.delete(t);if(this.capturedId===t){this.capturedId=undefined}}disableGesture(t,e){let s=this.disabledGestures.get(t);if(s===undefined){s=new Set;this.disabledGestures.set(t,s)}s.add(e)}enableGesture(t,e){const s=this.disabledGestures.get(t);if(s!==undefined){s.delete(e)}}disableScroll(t){this.disabledScroll.add(t);if(this.disabledScroll.size===1){document.body.classList.add(n)}}enableScroll(t){this.disabledScroll.delete(t);if(this.disabledScroll.size===0){document.body.classList.remove(n)}}canStart(t){if(this.capturedId!==undefined){return false}if(this.isDisabled(t)){return false}return true}isCaptured(){return this.capturedId!==undefined}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(t){const e=this.disabledGestures.get(t);if(e&&e.size>0){return true}return false}newID(){this.gestureId++;return this.gestureId}}class e{constructor(t,e,s,n,i){this.id=e;this.name=s;this.disableScroll=i;this.priority=n*1e6+e;this.ctrl=t}canStart(){if(!this.ctrl){return false}return this.ctrl.canStart(this.name)}start(){if(!this.ctrl){return false}return this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl){return false}const t=this.ctrl.capture(this.name,this.id,this.priority);if(t&&this.disableScroll){this.ctrl.disableScroll(this.id)}return t}release(){if(this.ctrl){this.ctrl.release(this.id);if(this.disableScroll){this.ctrl.enableScroll(this.id)}}}destroy(){this.release();this.ctrl=undefined}}class s{constructor(t,e,s,n){this.id=e;this.disable=s;this.disableScroll=n;this.ctrl=t}block(){if(!this.ctrl){return}if(this.disable){for(const t of this.disable){this.ctrl.disableGesture(t,this.id)}}if(this.disableScroll){this.ctrl.disableScroll(this.id)}}unblock(){if(!this.ctrl){return}if(this.disable){for(const t of this.disable){this.ctrl.enableGesture(t,this.id)}}if(this.disableScroll){this.ctrl.enableScroll(this.id)}}destroy(){this.unblock();this.ctrl=undefined}}const n="backdrop-no-scroll";const i=new t;const r=(t,e,s,n)=>{const i=o(t)?{capture:!!n.capture,passive:!!n.passive}:!!n.capture;let r;let f;if(t["__zone_symbol__addEventListener"]){r="__zone_symbol__addEventListener";f="__zone_symbol__removeEventListener"}else{r="addEventListener";f="removeEventListener"}t[r](e,s,i);return()=>{t[f](e,s,i)}};const o=t=>{if(f===undefined){try{const e=Object.defineProperty({},"passive",{get:()=>{f=true}});t.addEventListener("optsTest",(()=>{}),e)}catch(t){f=false}}return!!f};let f;const c=2e3;const u=(t,e,s,n,i)=>{let o;let f;let u;let a;let h;let d;let m;let p=0;const b=n=>{p=Date.now()+c;if(!e(n)){return}if(!f&&s){f=r(t,"touchmove",s,i)}if(!u){u=r(t,"touchend",y,i)}if(!a){a=r(t,"touchcancel",y,i)}};const v=n=>{if(p>Date.now()){return}if(!e(n)){return}if(!d&&s){d=r(l(t),"mousemove",s,i)}if(!m){m=r(l(t),"mouseup",w,i)}};const y=t=>{_();if(n){n(t)}};const w=t=>{S();if(n){n(t)}};const _=()=>{if(f){f()}if(u){u()}if(a){a()}f=u=a=undefined};const S=()=>{if(d){d()}if(m){m()}d=m=undefined};const D=()=>{_();S()};const M=(e=true)=>{if(!e){if(o){o()}if(h){h()}o=h=undefined;D()}else{if(!o){o=r(t,"touchstart",b,i)}if(!h){h=r(t,"mousedown",v,i)}}};const g=()=>{M(false);n=s=e=undefined};return{enable:M,stop:D,destroy:g}};const l=t=>t instanceof Document?t:t.ownerDocument;const a=(t,e,s)=>{const n=s*(Math.PI/180);const i=t==="x";const r=Math.cos(n);const o=e*e;let f=0;let c=0;let u=false;let l=0;return{start(t,e){f=t;c=e;l=0;u=true},detect(t,e){if(!u){return false}const s=t-f;const n=e-c;const a=s*s+n*n;if(a<o){return false}const h=Math.sqrt(a);const d=(i?s:n)/h;if(d>r){l=1}else if(d<-r){l=-1}else{l=0}u=false;return true},isGesture(){return l!==0},getDirection(){return l}}};const h=t=>{let e=false;let s=false;let n=true;let r=false;const o={disableScroll:false,direction:"x",gesturePriority:0,passive:true,maxAngle:40,threshold:10,...t};const f=o.canStart;const c=o.onWillStart;const l=o.onStart;const h=o.onEnd;const b=o.notCaptured;const v=o.onMove;const y=o.threshold;const w=o.passive;const _=o.blurOnStart;const S={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:undefined,data:undefined};const D=a(o.direction,o.threshold,o.maxAngle);const M=i.createGesture({name:t.gestureName,priority:t.gesturePriority,disableScroll:t.disableScroll});const g=t=>{const e=p(t);if(s||!n){return false}m(t,S);S.startX=S.currentX;S.startY=S.currentY;S.startTime=S.currentTime=e;S.velocityX=S.velocityY=S.deltaX=S.deltaY=0;S.event=t;if(f&&f(S)===false){return false}M.release();if(!M.start()){return false}s=true;if(y===0){return k()}D.start(S.startX,S.startY);return true};const E=t=>{if(e){if(!r&&n){r=true;d(S,t);requestAnimationFrame(G)}return}d(S,t);if(D.detect(S.currentX,S.currentY)){if(!D.isGesture()||!k()){T()}}};const G=()=>{if(!e){return}r=false;if(v){v(S)}};const k=()=>{if(M&&!M.capture()){return false}e=true;n=false;S.startX=S.currentX;S.startY=S.currentY;S.startTime=S.currentTime;if(c){c(S).then(L)}else{L()}return true};const x=()=>{if(typeof document!=="undefined"){const t=document.activeElement;if(t!==null&&t.blur){t.blur()}}};const L=()=>{if(_){x()}if(l){l(S)}n=true};const X=()=>{e=false;s=false;r=false;n=true;M.release()};const Y=t=>{const s=e;const i=n;X();if(!i){return}d(S,t);if(s){if(h){h(S)}return}if(b){b(S)}};const C=u(o.el,g,E,Y,{capture:false,passive:w});const T=()=>{X();C.stop();if(b){b(S)}};return{enable(t=true){if(!t){if(e){Y(undefined)}X()}C.enable(t)},destroy(){M.destroy();C.destroy()}}};const d=(t,e)=>{if(!e){return}const s=t.currentX;const n=t.currentY;const i=t.currentTime;m(e,t);const r=t.currentX;const o=t.currentY;const f=t.currentTime=p(e);const c=f-i;if(c>0&&c<100){const e=(r-s)/c;const i=(o-n)/c;t.velocityX=e*.7+t.velocityX*.3;t.velocityY=i*.7+t.velocityY*.3}t.deltaX=r-t.startX;t.deltaY=o-t.startY;t.event=e};const m=(t,e)=>{let s=0;let n=0;if(t){const e=t.changedTouches;if(e&&e.length>0){const t=e[0];s=t.clientX;n=t.clientY}else if(t.pageX!==undefined){s=t.pageX;n=t.pageY}}e.currentX=s;e.currentY=n};const p=t=>t.timeStamp||Date.now();export{i as GESTURE_CONTROLLER,h as createGesture};
5
- //# sourceMappingURL=p-2828788c.js.map
4
+ class t{constructor(){this.gestureId=0;this.requestedStart=new Map;this.disabledGestures=new Map;this.disabledScroll=new Set}createGesture(t){return new e(this,this.newID(),t.name,t.priority||0,!!t.disableScroll)}createBlocker(t={}){return new s(this,this.newID(),t.disable,!!t.disableScroll)}start(t,e,s){if(!this.canStart(t)){this.requestedStart.delete(e);return false}this.requestedStart.set(e,s);return true}capture(t,e,s){if(!this.start(t,e,s)){return false}const n=this.requestedStart;let i=-1e4;n.forEach((t=>{i=Math.max(i,t)}));if(i===s){this.capturedId=e;n.clear();const s=new CustomEvent("ionGestureCaptured",{detail:{gestureName:t}});document.dispatchEvent(s);return true}n.delete(e);return false}release(t){this.requestedStart.delete(t);if(this.capturedId===t){this.capturedId=undefined}}disableGesture(t,e){let s=this.disabledGestures.get(t);if(s===undefined){s=new Set;this.disabledGestures.set(t,s)}s.add(e)}enableGesture(t,e){const s=this.disabledGestures.get(t);if(s!==undefined){s.delete(e)}}disableScroll(t){this.disabledScroll.add(t);if(this.disabledScroll.size===1){document.body.classList.add(n)}}enableScroll(t){this.disabledScroll.delete(t);if(this.disabledScroll.size===0){document.body.classList.remove(n)}}canStart(t){if(this.capturedId!==undefined){return false}if(this.isDisabled(t)){return false}return true}isCaptured(){return this.capturedId!==undefined}isScrollDisabled(){return this.disabledScroll.size>0}isDisabled(t){const e=this.disabledGestures.get(t);if(e&&e.size>0){return true}return false}newID(){this.gestureId++;return this.gestureId}}class e{constructor(t,e,s,n,i){this.id=e;this.name=s;this.disableScroll=i;this.priority=n*1e6+e;this.ctrl=t}canStart(){if(!this.ctrl){return false}return this.ctrl.canStart(this.name)}start(){if(!this.ctrl){return false}return this.ctrl.start(this.name,this.id,this.priority)}capture(){if(!this.ctrl){return false}const t=this.ctrl.capture(this.name,this.id,this.priority);if(t&&this.disableScroll){this.ctrl.disableScroll(this.id)}return t}release(){if(this.ctrl){this.ctrl.release(this.id);if(this.disableScroll){this.ctrl.enableScroll(this.id)}}}destroy(){this.release();this.ctrl=undefined}}class s{constructor(t,e,s,n){this.id=e;this.disable=s;this.disableScroll=n;this.ctrl=t}block(){if(!this.ctrl){return}if(this.disable){for(const t of this.disable){this.ctrl.disableGesture(t,this.id)}}if(this.disableScroll){this.ctrl.disableScroll(this.id)}}unblock(){if(!this.ctrl){return}if(this.disable){for(const t of this.disable){this.ctrl.enableGesture(t,this.id)}}if(this.disableScroll){this.ctrl.enableScroll(this.id)}}destroy(){this.unblock();this.ctrl=undefined}}const n="backdrop-no-scroll";const i=new t;const r=(t,e,s,n)=>{const i=o(t)?{capture:!!n.capture,passive:!!n.passive}:!!n.capture;let r;let f;if(t["__zone_symbol__addEventListener"]){r="__zone_symbol__addEventListener";f="__zone_symbol__removeEventListener"}else{r="addEventListener";f="removeEventListener"}t[r](e,s,i);return()=>{t[f](e,s,i)}};const o=t=>{if(f===undefined){try{const e=Object.defineProperty({},"passive",{get:()=>{f=true}});t.addEventListener("optsTest",(()=>{}),e)}catch(t){f=false}}return!!f};let f;const c=2e3;const u=(t,e,s,n,i)=>{let o;let f;let u;let a;let h;let d;let m;let p=0;const b=n=>{p=Date.now()+c;if(!e(n)){return}if(!f&&s){f=r(t,"touchmove",s,i)}if(!u){u=r(t,"touchend",y,i)}if(!a){a=r(t,"touchcancel",y,i)}};const v=n=>{if(p>Date.now()){return}if(!e(n)){return}if(!d&&s){d=r(l(t),"mousemove",s,i)}if(!m){m=r(l(t),"mouseup",w,i)}};const y=t=>{_();if(n){n(t)}};const w=t=>{S();if(n){n(t)}};const _=()=>{if(f){f()}if(u){u()}if(a){a()}f=u=a=undefined};const S=()=>{if(d){d()}if(m){m()}d=m=undefined};const D=()=>{_();S()};const M=(e=true)=>{if(!e){if(o){o()}if(h){h()}o=h=undefined;D()}else{if(!o){o=r(t,"touchstart",b,i)}if(!h){h=r(t,"mousedown",v,i)}}};const g=()=>{M(false);n=s=e=undefined};return{enable:M,stop:D,destroy:g}};const l=t=>t instanceof Document?t:t.ownerDocument;const a=(t,e,s)=>{const n=s*(Math.PI/180);const i=t==="x";const r=Math.cos(n);const o=e*e;let f=0;let c=0;let u=false;let l=0;return{start(t,e){f=t;c=e;l=0;u=true},detect(t,e){if(!u){return false}const s=t-f;const n=e-c;const a=s*s+n*n;if(a<o){return false}const h=Math.sqrt(a);const d=(i?s:n)/h;if(d>r){l=1}else if(d<-r){l=-1}else{l=0}u=false;return true},isGesture(){return l!==0},getDirection(){return l}}};const h=t=>{let e=false;let s=false;let n=true;let r=false;const o=Object.assign({disableScroll:false,direction:"x",gesturePriority:0,passive:true,maxAngle:40,threshold:10},t);const f=o.canStart;const c=o.onWillStart;const l=o.onStart;const h=o.onEnd;const b=o.notCaptured;const v=o.onMove;const y=o.threshold;const w=o.passive;const _=o.blurOnStart;const S={type:"pan",startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,event:undefined,data:undefined};const D=a(o.direction,o.threshold,o.maxAngle);const M=i.createGesture({name:t.gestureName,priority:t.gesturePriority,disableScroll:t.disableScroll});const g=t=>{const e=p(t);if(s||!n){return false}m(t,S);S.startX=S.currentX;S.startY=S.currentY;S.startTime=S.currentTime=e;S.velocityX=S.velocityY=S.deltaX=S.deltaY=0;S.event=t;if(f&&f(S)===false){return false}M.release();if(!M.start()){return false}s=true;if(y===0){return k()}D.start(S.startX,S.startY);return true};const E=t=>{if(e){if(!r&&n){r=true;d(S,t);requestAnimationFrame(G)}return}d(S,t);if(D.detect(S.currentX,S.currentY)){if(!D.isGesture()||!k()){T()}}};const G=()=>{if(!e){return}r=false;if(v){v(S)}};const k=()=>{if(M&&!M.capture()){return false}e=true;n=false;S.startX=S.currentX;S.startY=S.currentY;S.startTime=S.currentTime;if(c){c(S).then(L)}else{L()}return true};const x=()=>{if(typeof document!=="undefined"){const t=document.activeElement;if(t!==null&&t.blur){t.blur()}}};const L=()=>{if(_){x()}if(l){l(S)}n=true};const X=()=>{e=false;s=false;r=false;n=true;M.release()};const Y=t=>{const s=e;const i=n;X();if(!i){return}d(S,t);if(s){if(h){h(S)}return}if(b){b(S)}};const C=u(o.el,g,E,Y,{capture:false,passive:w});const T=()=>{X();C.stop();if(b){b(S)}};return{enable(t=true){if(!t){if(e){Y(undefined)}X()}C.enable(t)},destroy(){M.destroy();C.destroy()}}};const d=(t,e)=>{if(!e){return}const s=t.currentX;const n=t.currentY;const i=t.currentTime;m(e,t);const r=t.currentX;const o=t.currentY;const f=t.currentTime=p(e);const c=f-i;if(c>0&&c<100){const e=(r-s)/c;const i=(o-n)/c;t.velocityX=e*.7+t.velocityX*.3;t.velocityY=i*.7+t.velocityY*.3}t.deltaX=r-t.startX;t.deltaY=o-t.startY;t.event=e};const m=(t,e)=>{let s=0;let n=0;if(t){const e=t.changedTouches;if(e&&e.length>0){const t=e[0];s=t.clientX;n=t.clientY}else if(t.pageX!==undefined){s=t.pageX;n=t.pageY}}e.currentX=s;e.currentY=n};const p=t=>t.timeStamp||Date.now();export{i as GESTURE_CONTROLLER,h as createGesture};
5
+ //# sourceMappingURL=p-bb07c3d0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GestureController","constructor","this","gestureId","requestedStart","Map","disabledGestures","disabledScroll","Set","createGesture","config","GestureDelegate","newID","name","priority","disableScroll","createBlocker","opts","BlockerDelegate","disable","start","gestureName","id","canStart","delete","set","capture","maxPriority","forEach","value","Math","max","capturedId","clear","event","CustomEvent","detail","document","dispatchEvent","release","undefined","disableGesture","get","add","enableGesture","size","body","classList","BACKDROP_NO_SCROLL","enableScroll","remove","isDisabled","isCaptured","isScrollDisabled","disabled","ctrl","captured","destroy","block","gesture","unblock","GESTURE_CONTROLLER","addEventListener","el","eventName","callback","listenerOpts","supportsPassive","passive","node","_sPassive","Object","defineProperty","e","MOUSE_WAIT","createPointerEvents","pointerDown","pointerMove","pointerUp","options","rmTouchStart","rmTouchMove","rmTouchEnd","rmTouchCancel","rmMouseStart","rmMouseMove","rmMouseUp","lastTouchEvent","handleTouchStart","ev","Date","now","handleTouchEnd","handleMouseDown","getDocument","handleMouseUp","stopTouch","stopMouse","stop","enable","isEnabled","Document","ownerDocument","createPanRecognizer","direction","thresh","maxAngle","radians","PI","isDirX","maxCosine","cos","threshold","startX","startY","dirty","isPan","x","y","detect","deltaX","deltaY","distance","hypotenuse","sqrt","cosine","isGesture","getDirection","hasCapturedPan","hasStartedPan","hasFiredStart","isMoveQueued","finalConfig","assign","gesturePriority","onWillStart","onStart","onEnd","notCaptured","onMove","blurOnStart","type","startTime","currentX","currentY","velocityX","velocityY","currentTime","data","pan","timeStamp","updateDetail","tryToCapturePan","calcGestureData","requestAnimationFrame","fireOnMove","abortGesture","then","fireOnStart","blurActiveElement","activeElement","blur","reset","tmpHasCaptured","tmpHasFiredStart","pointerEvents","prevX","prevY","prevT","timestamp","timeDelta","changedTouches","length","touch","clientX","clientY","pageX","pageY"],"sources":["./src/utils/gesture/gesture-controller.ts","./src/utils/gesture/listener.ts","./src/utils/gesture/pointer-events.ts","./src/utils/gesture/recognizers.ts","./src/utils/gesture/index.ts"],"sourcesContent":["class GestureController {\n private gestureId = 0;\n private requestedStart = new Map<number, number>();\n private disabledGestures = new Map<string, Set<number>>();\n private disabledScroll = new Set<number>();\n private capturedId?: number;\n\n /**\n * Creates a gesture delegate based on the GestureConfig passed\n * @param config\n * @returns a new gesture delegate\n */\n createGesture(config: GestureConfig): GestureDelegate {\n return new GestureDelegate(\n this,\n this.newID(),\n config.name,\n config.priority || 0,\n !!config.disableScroll\n );\n }\n\n /**\n * Creates a blocker that will block any other gesture events from firing. Set in the ion-gesture component.\n * @param opts\n * @returns a new blocker delegate\n */\n createBlocker(opts: BlockerConfig = {}): BlockerDelegate {\n return new BlockerDelegate(\n this,\n this.newID(),\n opts.disable,\n !!opts.disableScroll\n );\n }\n\n start(gestureName: string, id: number, priority: number): boolean {\n if (!this.canStart(gestureName)) {\n this.requestedStart.delete(id);\n return false;\n }\n this.requestedStart.set(id, priority);\n return true;\n }\n\n capture(gestureName: string, id: number, priority: number): boolean {\n if (!this.start(gestureName, id, priority)) {\n return false;\n }\n const requestedStart = this.requestedStart;\n let maxPriority = -10000;\n\n requestedStart.forEach((value) => {\n maxPriority = Math.max(maxPriority, value);\n });\n\n if (maxPriority === priority) {\n this.capturedId = id;\n requestedStart.clear();\n\n const event = new CustomEvent('ionGestureCaptured', {\n detail: { gestureName },\n });\n document.dispatchEvent(event);\n return true;\n }\n requestedStart.delete(id);\n\n return false;\n }\n\n release(id: number) {\n this.requestedStart.delete(id);\n\n if (this.capturedId === id) {\n this.capturedId = undefined;\n }\n }\n\n disableGesture(gestureName: string, id: number) {\n let set = this.disabledGestures.get(gestureName);\n if (set === undefined) {\n set = new Set<number>();\n this.disabledGestures.set(gestureName, set);\n }\n set.add(id);\n }\n\n enableGesture(gestureName: string, id: number) {\n const set = this.disabledGestures.get(gestureName);\n if (set !== undefined) {\n set.delete(id);\n }\n }\n\n disableScroll(id: number) {\n this.disabledScroll.add(id);\n if (this.disabledScroll.size === 1) {\n document.body.classList.add(BACKDROP_NO_SCROLL);\n }\n }\n\n enableScroll(id: number) {\n this.disabledScroll.delete(id);\n if (this.disabledScroll.size === 0) {\n document.body.classList.remove(BACKDROP_NO_SCROLL);\n }\n }\n\n canStart(gestureName: string): boolean {\n if (this.capturedId !== undefined) {\n // a gesture already captured\n return false;\n }\n\n if (this.isDisabled(gestureName)) {\n return false;\n }\n\n return true;\n }\n\n isCaptured(): boolean {\n return this.capturedId !== undefined;\n }\n\n isScrollDisabled(): boolean {\n return this.disabledScroll.size > 0;\n }\n\n isDisabled(gestureName: string): boolean {\n const disabled = this.disabledGestures.get(gestureName);\n if (disabled && disabled.size > 0) {\n return true;\n }\n return false;\n }\n\n private newID(): number {\n this.gestureId++;\n return this.gestureId;\n }\n}\n\nclass GestureDelegate {\n private ctrl?: GestureController;\n private priority: number;\n\n constructor(\n ctrl: GestureController,\n private id: number,\n private name: string,\n priority: number,\n private disableScroll: boolean\n ) {\n this.priority = priority * 1000000 + id;\n this.ctrl = ctrl;\n }\n\n canStart(): boolean {\n if (!this.ctrl) {\n return false;\n }\n\n return this.ctrl.canStart(this.name);\n }\n\n start(): boolean {\n if (!this.ctrl) {\n return false;\n }\n\n return this.ctrl.start(this.name, this.id, this.priority);\n }\n\n capture(): boolean {\n if (!this.ctrl) {\n return false;\n }\n\n const captured = this.ctrl.capture(this.name, this.id, this.priority);\n if (captured && this.disableScroll) {\n this.ctrl.disableScroll(this.id);\n }\n\n return captured;\n }\n\n release() {\n if (this.ctrl) {\n this.ctrl.release(this.id);\n\n if (this.disableScroll) {\n this.ctrl.enableScroll(this.id);\n }\n }\n }\n\n destroy() {\n this.release();\n this.ctrl = undefined;\n }\n}\n\nclass BlockerDelegate {\n private ctrl?: GestureController;\n\n constructor(\n ctrl: GestureController,\n private id: number,\n private disable: string[] | undefined,\n private disableScroll: boolean\n ) {\n this.ctrl = ctrl;\n }\n\n block() {\n if (!this.ctrl) {\n return;\n }\n if (this.disable) {\n for (const gesture of this.disable) {\n this.ctrl.disableGesture(gesture, this.id);\n }\n }\n\n if (this.disableScroll) {\n this.ctrl.disableScroll(this.id);\n }\n }\n\n unblock() {\n if (!this.ctrl) {\n return;\n }\n if (this.disable) {\n for (const gesture of this.disable) {\n this.ctrl.enableGesture(gesture, this.id);\n }\n }\n if (this.disableScroll) {\n this.ctrl.enableScroll(this.id);\n }\n }\n\n destroy() {\n this.unblock();\n this.ctrl = undefined;\n }\n}\n\nexport interface GestureConfig {\n name: string;\n priority?: number;\n disableScroll?: boolean;\n}\n\nexport interface BlockerConfig {\n disable?: string[];\n disableScroll?: boolean;\n}\n\nconst BACKDROP_NO_SCROLL = 'backdrop-no-scroll';\nexport const GESTURE_CONTROLLER = new GestureController();\n","export const addEventListener = (\n el: any,\n eventName: string,\n callback: EventListenerOrEventListenerObject,\n opts: {\n passive?: boolean;\n capture?: boolean;\n }\n): (() => void) => {\n // use event listener options when supported\n // otherwise it's just a boolean for the \"capture\" arg\n const listenerOpts = supportsPassive(el)\n ? {\n capture: !!opts.capture,\n passive: !!opts.passive,\n }\n : !!opts.capture;\n\n let add: string;\n let remove: string;\n if (el['__zone_symbol__addEventListener']) {\n add = '__zone_symbol__addEventListener';\n remove = '__zone_symbol__removeEventListener';\n } else {\n add = 'addEventListener';\n remove = 'removeEventListener';\n }\n\n el[add](eventName, callback, listenerOpts);\n return () => {\n el[remove](eventName, callback, listenerOpts);\n };\n};\n\nconst supportsPassive = (node: Node) => {\n if (_sPassive === undefined) {\n try {\n const opts = Object.defineProperty({}, 'passive', {\n get: () => {\n _sPassive = true;\n },\n });\n node.addEventListener(\n 'optsTest',\n () => {\n return;\n },\n opts\n );\n } catch (e) {\n _sPassive = false;\n }\n }\n return !!_sPassive;\n};\n\nlet _sPassive: boolean | undefined;\n","import { addEventListener } from './listener';\n\nconst MOUSE_WAIT = 2000;\n\nexport const createPointerEvents = (\n el: Node,\n pointerDown: any,\n pointerMove: any,\n pointerUp: any,\n options: {\n passive?: boolean;\n capture?: boolean;\n }\n) => {\n let rmTouchStart: (() => void) | undefined;\n let rmTouchMove: (() => void) | undefined;\n let rmTouchEnd: (() => void) | undefined;\n let rmTouchCancel: (() => void) | undefined;\n let rmMouseStart: (() => void) | undefined;\n let rmMouseMove: (() => void) | undefined;\n let rmMouseUp: (() => void) | undefined;\n let lastTouchEvent = 0;\n\n const handleTouchStart = (ev: any) => {\n lastTouchEvent = Date.now() + MOUSE_WAIT;\n if (!pointerDown(ev)) {\n return;\n }\n if (!rmTouchMove && pointerMove) {\n rmTouchMove = addEventListener(el, 'touchmove', pointerMove, options);\n }\n if (!rmTouchEnd) {\n rmTouchEnd = addEventListener(el, 'touchend', handleTouchEnd, options);\n }\n if (!rmTouchCancel) {\n rmTouchCancel = addEventListener(\n el,\n 'touchcancel',\n handleTouchEnd,\n options\n );\n }\n };\n\n const handleMouseDown = (ev: any) => {\n if (lastTouchEvent > Date.now()) {\n return;\n }\n if (!pointerDown(ev)) {\n return;\n }\n if (!rmMouseMove && pointerMove) {\n rmMouseMove = addEventListener(\n getDocument(el),\n 'mousemove',\n pointerMove,\n options\n );\n }\n if (!rmMouseUp) {\n rmMouseUp = addEventListener(\n getDocument(el),\n 'mouseup',\n handleMouseUp,\n options\n );\n }\n };\n\n const handleTouchEnd = (ev: any) => {\n stopTouch();\n if (pointerUp) {\n pointerUp(ev);\n }\n };\n\n const handleMouseUp = (ev: any) => {\n stopMouse();\n if (pointerUp) {\n pointerUp(ev);\n }\n };\n\n const stopTouch = () => {\n if (rmTouchMove) {\n rmTouchMove();\n }\n if (rmTouchEnd) {\n rmTouchEnd();\n }\n if (rmTouchCancel) {\n rmTouchCancel();\n }\n rmTouchMove = rmTouchEnd = rmTouchCancel = undefined;\n };\n\n const stopMouse = () => {\n if (rmMouseMove) {\n rmMouseMove();\n }\n if (rmMouseUp) {\n rmMouseUp();\n }\n rmMouseMove = rmMouseUp = undefined;\n };\n\n const stop = () => {\n stopTouch();\n stopMouse();\n };\n\n const enable = (isEnabled = true) => {\n if (!isEnabled) {\n if (rmTouchStart) {\n rmTouchStart();\n }\n if (rmMouseStart) {\n rmMouseStart();\n }\n rmTouchStart = rmMouseStart = undefined;\n stop();\n } else {\n if (!rmTouchStart) {\n rmTouchStart = addEventListener(\n el,\n 'touchstart',\n handleTouchStart,\n options\n );\n }\n if (!rmMouseStart) {\n rmMouseStart = addEventListener(\n el,\n 'mousedown',\n handleMouseDown,\n options\n );\n }\n }\n };\n\n const destroy = () => {\n enable(false);\n pointerUp = pointerMove = pointerDown = undefined;\n };\n\n return {\n enable,\n stop,\n destroy,\n };\n};\n\nconst getDocument = (node: Node) => {\n return node instanceof Document ? node : node.ownerDocument;\n};\n\nexport interface PointerEventsConfig {\n element?: HTMLElement;\n pointerDown: (ev: any) => boolean;\n pointerMove?: (ev: any) => void;\n pointerUp?: (ev: any) => void;\n zone?: boolean;\n capture?: boolean;\n passive?: boolean;\n}\n","export interface PanRecognizer {\n start(x: number, y: number): void;\n detect(x: number, y: number): boolean;\n isGesture(): boolean;\n getDirection(): number;\n}\n\nexport const createPanRecognizer = (\n direction: string,\n thresh: number,\n maxAngle: number\n): PanRecognizer => {\n const radians = maxAngle * (Math.PI / 180);\n const isDirX = direction === 'x';\n const maxCosine = Math.cos(radians);\n const threshold = thresh * thresh;\n\n let startX = 0;\n let startY = 0;\n\n let dirty = false;\n let isPan = 0;\n\n return {\n start(x: number, y: number) {\n startX = x;\n startY = y;\n isPan = 0;\n dirty = true;\n },\n\n detect(x: number, y: number): boolean {\n if (!dirty) {\n return false;\n }\n\n const deltaX = x - startX;\n const deltaY = y - startY;\n const distance = deltaX * deltaX + deltaY * deltaY;\n\n if (distance < threshold) {\n return false;\n }\n const hypotenuse = Math.sqrt(distance);\n const cosine = (isDirX ? deltaX : deltaY) / hypotenuse;\n\n if (cosine > maxCosine) {\n isPan = 1;\n } else if (cosine < -maxCosine) {\n isPan = -1;\n } else {\n isPan = 0;\n }\n\n dirty = false;\n return true;\n },\n\n isGesture(): boolean {\n return isPan !== 0;\n },\n\n getDirection(): number {\n return isPan;\n },\n };\n};\n","import { GESTURE_CONTROLLER } from './gesture-controller';\nimport { createPointerEvents } from './pointer-events';\nimport { createPanRecognizer } from './recognizers';\n\nexport const createGesture = (config: GestureConfig): Gesture => {\n let hasCapturedPan = false;\n let hasStartedPan = false;\n let hasFiredStart = true;\n let isMoveQueued = false;\n\n const finalConfig = {\n disableScroll: false,\n direction: 'x',\n gesturePriority: 0,\n passive: true,\n maxAngle: 40,\n threshold: 10,\n\n ...config,\n };\n\n const canStart = finalConfig.canStart;\n const onWillStart = finalConfig.onWillStart;\n const onStart = finalConfig.onStart;\n const onEnd = finalConfig.onEnd;\n const notCaptured = finalConfig.notCaptured;\n const onMove = finalConfig.onMove;\n const threshold = finalConfig.threshold;\n const passive = finalConfig.passive;\n const blurOnStart = finalConfig.blurOnStart;\n\n const detail = {\n type: 'pan',\n startX: 0,\n startY: 0,\n startTime: 0,\n currentX: 0,\n currentY: 0,\n velocityX: 0,\n velocityY: 0,\n deltaX: 0,\n deltaY: 0,\n currentTime: 0,\n event: undefined as any,\n data: undefined,\n };\n\n const pan = createPanRecognizer(\n finalConfig.direction,\n finalConfig.threshold,\n finalConfig.maxAngle\n );\n const gesture = GESTURE_CONTROLLER.createGesture({\n name: config.gestureName,\n priority: config.gesturePriority,\n disableScroll: config.disableScroll,\n });\n\n const pointerDown = (ev: UIEvent): boolean => {\n const timeStamp = now(ev);\n if (hasStartedPan || !hasFiredStart) {\n return false;\n }\n\n updateDetail(ev, detail);\n detail.startX = detail.currentX;\n detail.startY = detail.currentY;\n detail.startTime = detail.currentTime = timeStamp;\n detail.velocityX = detail.velocityY = detail.deltaX = detail.deltaY = 0;\n detail.event = ev;\n\n // Check if gesture can start\n if (canStart && canStart(detail) === false) {\n return false;\n }\n // Release fallback\n gesture.release();\n\n // Start gesture\n if (!gesture.start()) {\n return false;\n }\n\n hasStartedPan = true;\n if (threshold === 0) {\n return tryToCapturePan();\n }\n pan.start(detail.startX, detail.startY);\n return true;\n };\n\n const pointerMove = (ev: UIEvent) => {\n // fast path, if gesture is currently captured\n // do minimum job to get user-land even dispatched\n if (hasCapturedPan) {\n if (!isMoveQueued && hasFiredStart) {\n isMoveQueued = true;\n calcGestureData(detail, ev);\n requestAnimationFrame(fireOnMove);\n }\n return;\n }\n\n // gesture is currently being detected\n calcGestureData(detail, ev);\n if (pan.detect(detail.currentX, detail.currentY)) {\n if (!pan.isGesture() || !tryToCapturePan()) {\n abortGesture();\n }\n }\n };\n\n const fireOnMove = () => {\n // Since fireOnMove is called inside a RAF, onEnd() might be called,\n // we must double check hasCapturedPan\n if (!hasCapturedPan) {\n return;\n }\n isMoveQueued = false;\n if (onMove) {\n onMove(detail);\n }\n };\n\n const tryToCapturePan = (): boolean => {\n if (gesture && !gesture.capture()) {\n return false;\n }\n hasCapturedPan = true;\n hasFiredStart = false;\n\n // reset start position since the real user-land event starts here\n // If the pan detector threshold is big, not resetting the start position\n // will cause a jump in the animation equal to the detector threshold.\n // the array of positions used to calculate the gesture velocity does not\n // need to be cleaned, more points in the positions array always results in a\n // more accurate value of the velocity.\n detail.startX = detail.currentX;\n detail.startY = detail.currentY;\n detail.startTime = detail.currentTime;\n\n if (onWillStart) {\n onWillStart(detail).then(fireOnStart);\n } else {\n fireOnStart();\n }\n return true;\n };\n\n const blurActiveElement = () => {\n /* tslint:disable-next-line */\n if (typeof document !== 'undefined') {\n const activeElement = document.activeElement as HTMLElement | null;\n if (activeElement !== null && activeElement.blur) {\n activeElement.blur();\n }\n }\n };\n\n const fireOnStart = () => {\n if (blurOnStart) {\n blurActiveElement();\n }\n if (onStart) {\n onStart(detail);\n }\n hasFiredStart = true;\n };\n\n const reset = () => {\n hasCapturedPan = false;\n hasStartedPan = false;\n isMoveQueued = false;\n hasFiredStart = true;\n\n gesture.release();\n };\n\n // END *************************\n\n const pointerUp = (ev: UIEvent | undefined) => {\n const tmpHasCaptured = hasCapturedPan;\n const tmpHasFiredStart = hasFiredStart;\n reset();\n\n if (!tmpHasFiredStart) {\n return;\n }\n calcGestureData(detail, ev);\n\n // Try to capture press\n if (tmpHasCaptured) {\n if (onEnd) {\n onEnd(detail);\n }\n return;\n }\n\n // Not captured any event\n if (notCaptured) {\n notCaptured(detail);\n }\n };\n\n const pointerEvents = createPointerEvents(\n finalConfig.el,\n pointerDown,\n pointerMove,\n pointerUp,\n {\n capture: false,\n passive,\n }\n );\n\n const abortGesture = () => {\n reset();\n pointerEvents.stop();\n if (notCaptured) {\n notCaptured(detail);\n }\n };\n\n return {\n enable(enable = true) {\n if (!enable) {\n if (hasCapturedPan) {\n pointerUp(undefined);\n }\n\n reset();\n }\n pointerEvents.enable(enable);\n },\n destroy() {\n gesture.destroy();\n pointerEvents.destroy();\n },\n };\n};\n\nconst calcGestureData = (detail: GestureDetail, ev: UIEvent | undefined) => {\n if (!ev) {\n return;\n }\n const prevX = detail.currentX;\n const prevY = detail.currentY;\n const prevT = detail.currentTime;\n\n updateDetail(ev, detail);\n\n const currentX = detail.currentX;\n const currentY = detail.currentY;\n const timestamp = (detail.currentTime = now(ev));\n const timeDelta = timestamp - prevT;\n if (timeDelta > 0 && timeDelta < 100) {\n const velocityX = (currentX - prevX) / timeDelta;\n const velocityY = (currentY - prevY) / timeDelta;\n detail.velocityX = velocityX * 0.7 + detail.velocityX * 0.3;\n detail.velocityY = velocityY * 0.7 + detail.velocityY * 0.3;\n }\n detail.deltaX = currentX - detail.startX;\n detail.deltaY = currentY - detail.startY;\n detail.event = ev;\n};\n\nconst updateDetail = (ev: any, detail: GestureDetail) => {\n // get X coordinates for either a mouse click\n // or a touch depending on the given event\n let x = 0;\n let y = 0;\n if (ev) {\n const changedTouches = ev.changedTouches;\n if (changedTouches && changedTouches.length > 0) {\n const touch = changedTouches[0];\n x = touch.clientX;\n y = touch.clientY;\n } else if (ev.pageX !== undefined) {\n x = ev.pageX;\n y = ev.pageY;\n }\n }\n detail.currentX = x;\n detail.currentY = y;\n};\n\nconst now = (ev: UIEvent) => {\n return ev.timeStamp || Date.now();\n};\n\nexport interface GestureDetail {\n type: string;\n startX: number;\n startY: number;\n startTime: number;\n currentX: number;\n currentY: number;\n velocityX: number;\n velocityY: number;\n deltaX: number;\n deltaY: number;\n currentTime: number;\n event: UIEvent;\n data?: any;\n}\n\nexport type GestureCallback = (detail: GestureDetail) => boolean | void;\n\nexport interface Gesture {\n enable(enable?: boolean): void;\n destroy(): void;\n}\n\nexport interface GestureConfig {\n el: Node;\n disableScroll?: boolean;\n\n direction?: 'x' | 'y';\n gestureName: string;\n gesturePriority?: number;\n passive?: boolean;\n maxAngle?: number;\n threshold?: number;\n blurOnStart?: boolean;\n\n canStart?: GestureCallback;\n onWillStart?: (_: GestureDetail) => Promise<void>;\n onStart?: GestureCallback;\n onMove?: GestureCallback;\n onEnd?: GestureCallback;\n notCaptured?: GestureCallback;\n}\n\nexport { GESTURE_CONTROLLER };\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ import{h as l}from"./p-bf91c50e.js";const e=({label:e,hasLabelSlot:r,controlId:a,labelId:t,floatLabel:s,placeholder:o,hideLabel:c,hasValue:n,rtl:_,showCharCount:d,maxlength:m,charCount:i})=>{if(!e&&!r)return;if(s){return l("label",{class:"form-ctrl__float-label",htmlFor:a,id:t},e&&e,!e&&r&&l("slot",{name:"label"}),d&&l("span",{class:"form-ctrl__label-charcount"},m?` ${i}/${m}`:` ${i}`))}else{return l("label",{class:{"form-ctrl__label":true,"visually-hide":c},htmlFor:a,id:t},l("div",{class:"form-ctrl__label-wrap"},o&&n&&_&&l("span",{class:"form-ctrl__label-placeholder"},o," / "),l("span",{class:"form-ctrl__labeltext"},e&&e,!e&&r&&l("slot",{name:"label"})),o&&n&&!_&&l("span",{class:"form-ctrl__label-placeholder"}," / ",o)),d&&l("span",{class:"form-ctrl__label-charcount"},m?m-i+" left":i+" characters"))}};const r=(r,a)=>{const{rtl:t,floatLabel:s,label:o,moreId:c,helperEndId:n,type:_,hasHelperSlot:d,showInlineError:m,errorMessage:i,hasHelperEndSlot:f}=r;const h=f?"nano-resize-observe":"div";return l(h,{states:"350w has-enough-width",class:{"has-label":o!==null&&!s,"has-float-label":o!==null&&s,"has-helper-end":f,rtl:t,"form-ctrl":true}},l("div",{class:"form-ctrl__wrapper"},!s?e(Object.assign({},r)):"",l("div",{class:{"form-ctrl__input":true,"form-ctrl__textarea":_==="textarea"}},s&&e(Object.assign(Object.assign({},r),{rtl:t})),a),m||d?l("div",{class:"form-ctrl__more",id:c},!!m?l("div",{class:"form-ctrl__error","aria-live":"polite"},i):"",l("div",{class:"form-ctrl__helper"},l("slot",{name:"helper"}))):""),f?l("div",{class:"form-ctrl__helper-end",id:n},l("slot",{name:"helper-end"})):"")};const a=(e,r)=>{const{clearControl:a,onClearText:t,readonly:s,disabled:o,control:c,ref:n,endSlot:_,endValueSlot:d,startSlot:m}=e;const i=()=>{c.setFocus()};return l("div",{class:"form-ctrl__input-wrap",ref:l=>{if(n)n(l)}},l("span",{class:"form-ctrl__slot-start"},l("slot",{name:"start"}),m),r,a&&!s&&!o&&l("button",{type:"button",class:"icon form-ctrl__clear-btn",tabindex:"-1",onTouchStart:t,onMouseDown:t},l("nano-icon",{name:"light/times"})),l("span",{class:"form-ctrl__slot-value-end",onClick:i},l("slot",{name:"value-end"}),d),l("span",{class:"form-ctrl__slot-end"},l("slot",{name:"end"}),_))};export{r as F,a};
5
+ //# sourceMappingURL=p-bb6f7c39.js.map