@nanoporetech-digital/components 1.14.0-alpha.0 → 1.15.2

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 (492) hide show
  1. package/CHANGELOG.md +645 -17
  2. package/dist/cjs/{algolia-data-4d5ee8da.js → algolia-data-a98ccf4f.js} +2 -2
  3. package/dist/cjs/algolia-data-a98ccf4f.js.map +1 -0
  4. package/dist/cjs/algoliasearch.umd-5dc661c5.js +12 -0
  5. package/dist/cjs/algoliasearch.umd-5dc661c5.js.map +1 -0
  6. package/dist/cjs/{component-store-4dfd3a12.js → component-store-8d99743e.js} +2 -2
  7. package/dist/cjs/{component-store-4dfd3a12.js.map → component-store-8d99743e.js.map} +1 -1
  8. package/dist/cjs/{global-befb7a64.js → global-aa92d50f.js} +5 -3
  9. package/dist/cjs/global-aa92d50f.js.map +1 -0
  10. package/dist/cjs/{index-197e7a3f.js → index-f12395b8.js} +3 -1
  11. package/dist/cjs/index-f12395b8.js.map +1 -0
  12. package/dist/cjs/loader.cjs.js +3 -3
  13. package/dist/cjs/nano-accordion.cjs.entry.js +1 -1
  14. package/dist/cjs/nano-alert.cjs.entry.js +2 -2
  15. package/dist/cjs/nano-algolia-filter.cjs.entry.js +3 -3
  16. package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-algolia-input.cjs.entry.js +5 -5
  18. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-algolia-pagination.cjs.entry.js +2 -2
  20. package/dist/cjs/nano-algolia-results.cjs.entry.js +2 -2
  21. package/dist/cjs/nano-algolia.cjs.entry.js +5 -5
  22. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-checkbox-group.cjs.entry.js +2 -2
  25. package/dist/cjs/nano-checkbox.cjs.entry.js +2 -2
  26. package/dist/cjs/nano-components.cjs.js +3 -3
  27. package/dist/cjs/nano-date-input.cjs.entry.js +43 -15
  28. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nano-date-picker_2.cjs.entry.js +31 -11
  30. package/dist/cjs/nano-date-picker_2.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nano-details.cjs.entry.js +14 -8
  32. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  33. package/dist/cjs/nano-dialog.cjs.entry.js +5 -9
  34. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  35. package/dist/cjs/nano-drawer.cjs.entry.js +1 -1
  36. package/dist/cjs/nano-file-upload.cjs.entry.js +7 -14
  37. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nano-global-nav.cjs.entry.js +4 -4
  39. package/dist/cjs/nano-global-search-results.cjs.entry.js +2 -2
  40. package/dist/cjs/nano-grid_3.cjs.entry.js +1 -1
  41. package/dist/cjs/nano-hero.cjs.entry.js +1 -1
  42. package/dist/cjs/nano-icon-button.cjs.entry.js +2 -2
  43. package/dist/cjs/nano-icon.cjs.entry.js +1 -1
  44. package/dist/cjs/nano-input.cjs.entry.js +12 -2
  45. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  46. package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
  47. package/dist/cjs/nano-menu.cjs.entry.js +2 -2
  48. package/dist/cjs/nano-nav-item_2.cjs.entry.js +2 -2
  49. package/dist/cjs/nano-range.cjs.entry.js +2 -2
  50. package/dist/cjs/nano-rating.cjs.entry.js +1 -1
  51. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -1
  52. package/dist/cjs/nano-select-option.cjs.entry.js +1 -1
  53. package/dist/cjs/nano-slide.cjs.entry.js +1 -1
  54. package/dist/cjs/nano-slides.cjs.entry.js +2 -2
  55. package/dist/cjs/nano-spinner.cjs.entry.js +2 -2
  56. package/dist/cjs/nano-sticker.cjs.entry.js +1 -1
  57. package/dist/cjs/nano-tab-content.cjs.entry.js +1 -1
  58. package/dist/cjs/nano-tab-group.cjs.entry.js +3 -3
  59. package/dist/cjs/nano-tab.cjs.entry.js +2 -2
  60. package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
  61. package/dist/collection/components/accordion/accordion.js +1 -1
  62. package/dist/collection/components/alert/alert.css +3 -3
  63. package/dist/collection/components/alert/alert.js +1 -1
  64. package/dist/collection/components/algolia/algolia-data.js.map +1 -1
  65. package/dist/collection/components/algolia/algolia-filter.js +3 -3
  66. package/dist/collection/components/algolia/algolia-filter.js.map +1 -1
  67. package/dist/collection/components/algolia/algolia-input.js +7 -7
  68. package/dist/collection/components/algolia/algolia-input.js.map +1 -1
  69. package/dist/collection/components/algolia/algolia-results.js +1 -1
  70. package/dist/collection/components/algolia/algolia.js +7 -7
  71. package/dist/collection/components/algolia/algolia.js.map +1 -1
  72. package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js +7 -2
  73. package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js.map +1 -1
  74. package/dist/collection/components/checkbox/checkbox-group.css +2 -2
  75. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  76. package/dist/collection/components/checkbox/checkbox.css +2 -2
  77. package/dist/collection/components/checkbox/checkbox.js +3 -3
  78. package/dist/collection/components/date-input/date-input.css +0 -4
  79. package/dist/collection/components/date-input/date-input.js +70 -21
  80. package/dist/collection/components/date-input/date-input.js.map +1 -1
  81. package/dist/collection/components/date-picker/date-picker.css +15 -4
  82. package/dist/collection/components/date-picker/date-picker.js +44 -16
  83. package/dist/collection/components/date-picker/date-picker.js.map +1 -1
  84. package/dist/collection/components/details/details.css +3 -3
  85. package/dist/collection/components/details/details.js +13 -7
  86. package/dist/collection/components/details/details.js.map +1 -1
  87. package/dist/collection/components/dialog/dialog.css +2 -3
  88. package/dist/collection/components/dialog/dialog.js +6 -10
  89. package/dist/collection/components/dialog/dialog.js.map +1 -1
  90. package/dist/collection/components/dropdown/dropdown.js +2 -1
  91. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  92. package/dist/collection/components/file-upload/file-upload-interface.js.map +1 -1
  93. package/dist/collection/components/file-upload/file-upload.css +9 -17
  94. package/dist/collection/components/file-upload/file-upload.js +17 -20
  95. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  96. package/dist/collection/components/global-nav/global-nav.css +2 -2
  97. package/dist/collection/components/global-nav/global-nav.js +4 -4
  98. package/dist/collection/components/global-search-results/global-search-results.css +3 -3
  99. package/dist/collection/components/grid/grid-item.js +1 -1
  100. package/dist/collection/components/icon/icon.js +1 -1
  101. package/dist/collection/components/icon-button/icon-button.css +2 -2
  102. package/dist/collection/components/input/input.css +5 -6
  103. package/dist/collection/components/input/input.js +25 -6
  104. package/dist/collection/components/input/input.js.map +1 -1
  105. package/dist/collection/components/menu/menu.css +7 -7
  106. package/dist/collection/components/nav-item/nav-item.js +4 -4
  107. package/dist/collection/components/range/range.css +4 -4
  108. package/dist/collection/components/range/range.js +4 -4
  109. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  110. package/dist/collection/components/select/select.css +4 -4
  111. package/dist/collection/components/select/select.js +5 -5
  112. package/dist/collection/components/slides/slides.css +2 -2
  113. package/dist/collection/components/slides/slides.js +7 -7
  114. package/dist/collection/components/spinner/spinner.css +2 -2
  115. package/dist/collection/components/tabs/tab-group.css +6 -6
  116. package/dist/collection/components/tabs/tab-group.js +2 -2
  117. package/dist/collection/components/tabs/tab.css +2 -2
  118. package/dist/collection/global/script/global.js +4 -2
  119. package/dist/collection/global/script/global.js.map +1 -1
  120. package/dist/collection/utils/testing/index.js +91 -18
  121. package/dist/collection/utils/testing/index.js.map +1 -1
  122. package/dist/custom-elements/index.js +131 -74
  123. package/dist/custom-elements/index.js.map +1 -1
  124. package/dist/esm/{algolia-data-6db3f5f2.js → algolia-data-b31a9800.js} +2 -2
  125. package/dist/esm/algolia-data-b31a9800.js.map +1 -0
  126. package/dist/esm/algoliasearch.umd-7ecbe0e9.js +10 -0
  127. package/dist/esm/algoliasearch.umd-7ecbe0e9.js.map +1 -0
  128. package/dist/esm/{component-store-6736ee0f.js → component-store-93172454.js} +2 -2
  129. package/dist/esm/{component-store-6736ee0f.js.map → component-store-93172454.js.map} +1 -1
  130. package/dist/esm/{global-c85d24a2.js → global-118ae701.js} +5 -3
  131. package/dist/esm/global-118ae701.js.map +1 -0
  132. package/dist/esm/{index-8e9bc704.js → index-912ef959.js} +3 -1
  133. package/dist/esm/index-912ef959.js.map +1 -0
  134. package/dist/esm/loader.js +3 -3
  135. package/dist/esm/nano-accordion.entry.js +1 -1
  136. package/dist/esm/nano-alert.entry.js +2 -2
  137. package/dist/esm/nano-algolia-filter.entry.js +3 -3
  138. package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
  139. package/dist/esm/nano-algolia-input.entry.js +5 -5
  140. package/dist/esm/nano-algolia-input.entry.js.map +1 -1
  141. package/dist/esm/nano-algolia-pagination.entry.js +2 -2
  142. package/dist/esm/nano-algolia-results.entry.js +2 -2
  143. package/dist/esm/nano-algolia.entry.js +5 -5
  144. package/dist/esm/nano-algolia.entry.js.map +1 -1
  145. package/dist/esm/nano-aspect-ratio.entry.js +1 -1
  146. package/dist/esm/nano-checkbox-group.entry.js +2 -2
  147. package/dist/esm/nano-checkbox.entry.js +2 -2
  148. package/dist/esm/nano-components.js +3 -3
  149. package/dist/esm/nano-date-input.entry.js +43 -15
  150. package/dist/esm/nano-date-input.entry.js.map +1 -1
  151. package/dist/esm/nano-date-picker_2.entry.js +31 -11
  152. package/dist/esm/nano-date-picker_2.entry.js.map +1 -1
  153. package/dist/esm/nano-details.entry.js +14 -8
  154. package/dist/esm/nano-details.entry.js.map +1 -1
  155. package/dist/esm/nano-dialog.entry.js +5 -9
  156. package/dist/esm/nano-dialog.entry.js.map +1 -1
  157. package/dist/esm/nano-drawer.entry.js +1 -1
  158. package/dist/esm/nano-file-upload.entry.js +7 -14
  159. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  160. package/dist/esm/nano-global-nav.entry.js +4 -4
  161. package/dist/esm/nano-global-search-results.entry.js +2 -2
  162. package/dist/esm/nano-grid_3.entry.js +1 -1
  163. package/dist/esm/nano-hero.entry.js +1 -1
  164. package/dist/esm/nano-icon-button.entry.js +2 -2
  165. package/dist/esm/nano-icon.entry.js +1 -1
  166. package/dist/esm/nano-input.entry.js +12 -2
  167. package/dist/esm/nano-input.entry.js.map +1 -1
  168. package/dist/esm/nano-menu-drawer.entry.js +1 -1
  169. package/dist/esm/nano-menu.entry.js +2 -2
  170. package/dist/esm/nano-nav-item_2.entry.js +2 -2
  171. package/dist/esm/nano-range.entry.js +2 -2
  172. package/dist/esm/nano-rating.entry.js +1 -1
  173. package/dist/esm/nano-resize-observe_2.entry.js +1 -1
  174. package/dist/esm/nano-select-option.entry.js +1 -1
  175. package/dist/esm/nano-slide.entry.js +1 -1
  176. package/dist/esm/nano-slides.entry.js +2 -2
  177. package/dist/esm/nano-spinner.entry.js +2 -2
  178. package/dist/esm/nano-sticker.entry.js +1 -1
  179. package/dist/esm/nano-tab-content.entry.js +1 -1
  180. package/dist/esm/nano-tab-group.entry.js +3 -3
  181. package/dist/esm/nano-tab.entry.js +2 -2
  182. package/dist/esm/nano-tooltip.entry.js +1 -1
  183. package/dist/esm-es5/{algolia-data-6db3f5f2.js → algolia-data-b31a9800.js} +2 -2
  184. package/dist/esm-es5/algolia-data-b31a9800.js.map +1 -0
  185. package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js +4 -0
  186. package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js.map +1 -0
  187. package/dist/esm-es5/{component-store-6736ee0f.js → component-store-93172454.js} +2 -2
  188. package/dist/esm-es5/{component-store-6736ee0f.js.map → component-store-93172454.js.map} +0 -0
  189. package/dist/esm-es5/{global-c85d24a2.js → global-118ae701.js} +2 -2
  190. package/dist/esm-es5/global-118ae701.js.map +1 -0
  191. package/dist/esm-es5/index-912ef959.js +2 -0
  192. package/dist/esm-es5/index-912ef959.js.map +1 -0
  193. package/dist/esm-es5/loader.js +1 -1
  194. package/dist/esm-es5/loader.js.map +1 -1
  195. package/dist/esm-es5/nano-accordion.entry.js +1 -1
  196. package/dist/esm-es5/nano-alert.entry.js +1 -1
  197. package/dist/esm-es5/nano-algolia-filter.entry.js +1 -1
  198. package/dist/esm-es5/nano-algolia-filter.entry.js.map +1 -1
  199. package/dist/esm-es5/nano-algolia-input.entry.js +1 -1
  200. package/dist/esm-es5/nano-algolia-input.entry.js.map +1 -1
  201. package/dist/esm-es5/nano-algolia-pagination.entry.js +1 -1
  202. package/dist/esm-es5/nano-algolia-results.entry.js +1 -1
  203. package/dist/esm-es5/nano-algolia.entry.js +1 -1
  204. package/dist/esm-es5/nano-algolia.entry.js.map +1 -1
  205. package/dist/esm-es5/nano-aspect-ratio.entry.js +1 -1
  206. package/dist/esm-es5/nano-checkbox-group.entry.js +1 -1
  207. package/dist/esm-es5/nano-checkbox.entry.js +1 -1
  208. package/dist/esm-es5/nano-components.js +1 -1
  209. package/dist/esm-es5/nano-components.js.map +1 -1
  210. package/dist/esm-es5/nano-date-input.entry.js +1 -1
  211. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  212. package/dist/esm-es5/nano-date-picker_2.entry.js +1 -1
  213. package/dist/esm-es5/nano-date-picker_2.entry.js.map +1 -1
  214. package/dist/esm-es5/nano-details.entry.js +1 -1
  215. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  216. package/dist/esm-es5/nano-dialog.entry.js +1 -1
  217. package/dist/esm-es5/nano-dialog.entry.js.map +1 -1
  218. package/dist/esm-es5/nano-drawer.entry.js +1 -1
  219. package/dist/esm-es5/nano-file-upload.entry.js +1 -1
  220. package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
  221. package/dist/esm-es5/nano-global-nav.entry.js +1 -1
  222. package/dist/esm-es5/nano-global-search-results.entry.js +1 -1
  223. package/dist/esm-es5/nano-grid_3.entry.js +1 -1
  224. package/dist/esm-es5/nano-hero.entry.js +1 -1
  225. package/dist/esm-es5/nano-icon-button.entry.js +1 -1
  226. package/dist/esm-es5/nano-icon.entry.js +1 -1
  227. package/dist/esm-es5/nano-input.entry.js +1 -1
  228. package/dist/esm-es5/nano-input.entry.js.map +1 -1
  229. package/dist/esm-es5/nano-menu-drawer.entry.js +1 -1
  230. package/dist/esm-es5/nano-menu.entry.js +1 -1
  231. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  232. package/dist/esm-es5/nano-range.entry.js +1 -1
  233. package/dist/esm-es5/nano-rating.entry.js +1 -1
  234. package/dist/esm-es5/nano-resize-observe_2.entry.js +1 -1
  235. package/dist/esm-es5/nano-select-option.entry.js +1 -1
  236. package/dist/esm-es5/nano-slide.entry.js +1 -1
  237. package/dist/esm-es5/nano-slides.entry.js +2 -2
  238. package/dist/esm-es5/nano-spinner.entry.js +1 -1
  239. package/dist/esm-es5/nano-sticker.entry.js +1 -1
  240. package/dist/esm-es5/nano-tab-content.entry.js +1 -1
  241. package/dist/esm-es5/nano-tab-group.entry.js +1 -1
  242. package/dist/esm-es5/nano-tab.entry.js +1 -1
  243. package/dist/esm-es5/nano-tooltip.entry.js +1 -1
  244. package/dist/nano-components/nano-components.esm.js +1 -1
  245. package/dist/nano-components/nano-components.esm.js.map +1 -1
  246. package/dist/nano-components/nano-components.js +1 -1
  247. package/dist/nano-components/{p-dbd71a33.system.entry.js → p-007c6041.system.entry.js} +2 -2
  248. package/dist/nano-components/{p-dbd71a33.system.entry.js.map → p-007c6041.system.entry.js.map} +0 -0
  249. package/dist/nano-components/{p-83bf885b.entry.js → p-02177814.entry.js} +2 -2
  250. package/dist/nano-components/{p-83bf885b.entry.js.map → p-02177814.entry.js.map} +0 -0
  251. package/dist/nano-components/{p-df2764c8.system.entry.js → p-046af455.system.entry.js} +2 -2
  252. package/dist/nano-components/{p-df2764c8.system.entry.js.map → p-046af455.system.entry.js.map} +0 -0
  253. package/dist/nano-components/p-05c062ae.js +4 -0
  254. package/dist/nano-components/p-05c062ae.js.map +1 -0
  255. package/dist/nano-components/{p-4d17169a.entry.js → p-104a9d64.entry.js} +2 -2
  256. package/dist/nano-components/p-104a9d64.entry.js.map +1 -0
  257. package/dist/nano-components/{p-55b80a92.system.entry.js → p-10f24f67.system.entry.js} +2 -2
  258. package/dist/nano-components/{p-55b80a92.system.entry.js.map → p-10f24f67.system.entry.js.map} +0 -0
  259. package/dist/nano-components/{p-6403dd02.system.entry.js → p-1c7614c4.system.entry.js} +2 -2
  260. package/dist/nano-components/p-1c7614c4.system.entry.js.map +1 -0
  261. package/dist/nano-components/{p-007c6ccc.system.entry.js → p-1d16e897.system.entry.js} +2 -2
  262. package/dist/nano-components/{p-007c6ccc.system.entry.js.map → p-1d16e897.system.entry.js.map} +0 -0
  263. package/dist/nano-components/{p-daf1462f.system.entry.js → p-21a6f295.system.entry.js} +2 -2
  264. package/dist/nano-components/{p-daf1462f.system.entry.js.map → p-21a6f295.system.entry.js.map} +0 -0
  265. package/dist/nano-components/{p-acbc08ea.system.entry.js → p-273b19b0.system.entry.js} +2 -2
  266. package/dist/nano-components/{p-acbc08ea.system.entry.js.map → p-273b19b0.system.entry.js.map} +0 -0
  267. package/dist/nano-components/p-28123e6e.entry.js +2 -0
  268. package/dist/nano-components/p-28123e6e.entry.js.map +1 -0
  269. package/dist/nano-components/{p-f1cd2d9b.entry.js → p-2ae39fa1.entry.js} +2 -2
  270. package/dist/nano-components/{p-f1cd2d9b.entry.js.map → p-2ae39fa1.entry.js.map} +0 -0
  271. package/dist/nano-components/{p-9393bfbb.system.entry.js → p-2edaf0eb.system.entry.js} +3 -3
  272. package/dist/nano-components/{p-9393bfbb.system.entry.js.map → p-2edaf0eb.system.entry.js.map} +0 -0
  273. package/dist/nano-components/{p-e7e898f5.system.entry.js → p-2f876f68.system.entry.js} +2 -2
  274. package/dist/nano-components/{p-e7e898f5.system.entry.js.map → p-2f876f68.system.entry.js.map} +0 -0
  275. package/dist/nano-components/{p-19962dda.system.entry.js → p-305ba54b.system.entry.js} +2 -2
  276. package/dist/nano-components/{p-19962dda.system.entry.js.map → p-305ba54b.system.entry.js.map} +0 -0
  277. package/dist/nano-components/{p-5f9e92b0.system.entry.js → p-30a22cd0.system.entry.js} +2 -2
  278. package/dist/nano-components/{p-5f9e92b0.system.entry.js.map → p-30a22cd0.system.entry.js.map} +0 -0
  279. package/dist/nano-components/{p-cc8fb176.system.entry.js → p-31c52d0a.system.entry.js} +2 -2
  280. package/dist/nano-components/{p-cc8fb176.system.entry.js.map → p-31c52d0a.system.entry.js.map} +0 -0
  281. package/dist/nano-components/{p-c6f7ce64.system.entry.js → p-325f32b3.system.entry.js} +2 -2
  282. package/dist/nano-components/p-325f32b3.system.entry.js.map +1 -0
  283. package/dist/nano-components/{p-3f9a70f8.entry.js → p-3b2ea5fd.entry.js} +2 -2
  284. package/dist/nano-components/{p-3f9a70f8.entry.js.map → p-3b2ea5fd.entry.js.map} +0 -0
  285. package/dist/nano-components/{p-0283a2ec.js → p-4370f8ae.js} +2 -2
  286. package/dist/nano-components/p-4370f8ae.js.map +1 -0
  287. package/dist/nano-components/{p-8097b205.system.js → p-4647a31f.system.js} +2 -2
  288. package/dist/nano-components/{p-8097b205.system.js.map → p-4647a31f.system.js.map} +0 -0
  289. package/dist/nano-components/{p-447ed63d.system.entry.js → p-491096f0.system.entry.js} +2 -2
  290. package/dist/nano-components/p-491096f0.system.entry.js.map +1 -0
  291. package/dist/nano-components/{p-1de83f90.system.entry.js → p-4e21bfe1.system.entry.js} +2 -2
  292. package/dist/nano-components/{p-1de83f90.system.entry.js.map → p-4e21bfe1.system.entry.js.map} +0 -0
  293. package/dist/nano-components/{p-6855167a.entry.js → p-4fa0b560.entry.js} +2 -2
  294. package/dist/nano-components/{p-6855167a.entry.js.map → p-4fa0b560.entry.js.map} +0 -0
  295. package/dist/nano-components/{p-7db31794.system.entry.js → p-4fbc3c8b.system.entry.js} +2 -2
  296. package/dist/nano-components/{p-7db31794.system.entry.js.map → p-4fbc3c8b.system.entry.js.map} +0 -0
  297. package/dist/nano-components/{p-5198e4c6.system.js → p-508484f8.system.js} +2 -2
  298. package/dist/nano-components/p-508484f8.system.js.map +1 -0
  299. package/dist/nano-components/p-5672ebbb.system.entry.js +2 -0
  300. package/dist/nano-components/p-5672ebbb.system.entry.js.map +1 -0
  301. package/dist/nano-components/{p-7a8ea050.entry.js → p-574143b5.entry.js} +2 -2
  302. package/dist/nano-components/{p-7a8ea050.entry.js.map → p-574143b5.entry.js.map} +0 -0
  303. package/dist/nano-components/{p-ff530ea6.system.entry.js → p-57434dc5.system.entry.js} +2 -2
  304. package/dist/nano-components/{p-ff530ea6.system.entry.js.map → p-57434dc5.system.entry.js.map} +0 -0
  305. package/dist/nano-components/{p-44cf7aeb.entry.js → p-574f1393.entry.js} +2 -2
  306. package/dist/nano-components/p-574f1393.entry.js.map +1 -0
  307. package/dist/nano-components/{p-24ad4b09.entry.js → p-580eac05.entry.js} +2 -2
  308. package/dist/nano-components/{p-24ad4b09.entry.js.map → p-580eac05.entry.js.map} +0 -0
  309. package/dist/nano-components/{p-fc9828c7.entry.js → p-59aba360.entry.js} +2 -2
  310. package/dist/nano-components/{p-fc9828c7.entry.js.map → p-59aba360.entry.js.map} +0 -0
  311. package/dist/nano-components/{p-c8945124.system.js → p-698a8ab3.system.js} +2 -2
  312. package/dist/nano-components/p-698a8ab3.system.js.map +1 -0
  313. package/dist/nano-components/{p-c05d2d62.entry.js → p-6a3eee01.entry.js} +2 -2
  314. package/dist/nano-components/{p-c05d2d62.entry.js.map → p-6a3eee01.entry.js.map} +0 -0
  315. package/dist/nano-components/{p-ddaa8946.entry.js → p-6aab52a0.entry.js} +2 -2
  316. package/dist/nano-components/p-6aab52a0.entry.js.map +1 -0
  317. package/dist/nano-components/{p-4b9a1f76.entry.js → p-6dc59ae8.entry.js} +2 -2
  318. package/dist/nano-components/{p-4b9a1f76.entry.js.map → p-6dc59ae8.entry.js.map} +0 -0
  319. package/dist/nano-components/{p-057177d7.entry.js → p-6eba639a.entry.js} +3 -3
  320. package/dist/nano-components/{p-057177d7.entry.js.map → p-6eba639a.entry.js.map} +0 -0
  321. package/dist/nano-components/{p-185dedd1.system.entry.js → p-73d969d0.system.entry.js} +2 -2
  322. package/dist/nano-components/{p-185dedd1.system.entry.js.map → p-73d969d0.system.entry.js.map} +0 -0
  323. package/dist/nano-components/{p-4a319e09.system.entry.js → p-7dc79f13.system.entry.js} +2 -2
  324. package/dist/nano-components/{p-4a319e09.system.entry.js.map → p-7dc79f13.system.entry.js.map} +0 -0
  325. package/dist/nano-components/{p-fd6ff03f.entry.js → p-7df31b1c.entry.js} +2 -2
  326. package/dist/nano-components/{p-fd6ff03f.entry.js.map → p-7df31b1c.entry.js.map} +0 -0
  327. package/dist/nano-components/{p-172053d0.system.entry.js → p-7e208086.system.entry.js} +2 -2
  328. package/dist/nano-components/{p-172053d0.system.entry.js.map → p-7e208086.system.entry.js.map} +0 -0
  329. package/dist/nano-components/{p-173755c4.system.entry.js → p-7e4129b4.system.entry.js} +2 -2
  330. package/dist/nano-components/{p-173755c4.system.entry.js.map → p-7e4129b4.system.entry.js.map} +0 -0
  331. package/dist/nano-components/{p-f3bb5f81.entry.js → p-7e68796f.entry.js} +2 -2
  332. package/dist/nano-components/{p-f3bb5f81.entry.js.map → p-7e68796f.entry.js.map} +0 -0
  333. package/dist/nano-components/{p-a17e6ab1.entry.js → p-81d7fd45.entry.js} +2 -2
  334. package/dist/nano-components/{p-a17e6ab1.entry.js.map → p-81d7fd45.entry.js.map} +0 -0
  335. package/dist/nano-components/{p-981f997c.entry.js → p-82571543.entry.js} +2 -2
  336. package/dist/nano-components/p-82571543.entry.js.map +1 -0
  337. package/dist/nano-components/{p-016c6482.system.entry.js → p-844a1134.system.entry.js} +2 -2
  338. package/dist/nano-components/{p-016c6482.system.entry.js.map → p-844a1134.system.entry.js.map} +0 -0
  339. package/dist/nano-components/p-8535a942.entry.js +2 -0
  340. package/dist/nano-components/{p-6d718c9a.entry.js.map → p-8535a942.entry.js.map} +1 -1
  341. package/dist/nano-components/{p-e422c66f.entry.js → p-8c1d85ae.entry.js} +2 -2
  342. package/dist/nano-components/{p-e422c66f.entry.js.map → p-8c1d85ae.entry.js.map} +0 -0
  343. package/dist/nano-components/{p-46f84983.system.entry.js → p-8ed6acea.system.entry.js} +2 -2
  344. package/dist/nano-components/{p-46f84983.system.entry.js.map → p-8ed6acea.system.entry.js.map} +0 -0
  345. package/dist/nano-components/p-9164e5e2.system.entry.js +2 -0
  346. package/dist/nano-components/p-9164e5e2.system.entry.js.map +1 -0
  347. package/dist/nano-components/{p-896b7462.system.entry.js → p-9371d81b.system.entry.js} +2 -2
  348. package/dist/nano-components/{p-896b7462.system.entry.js.map → p-9371d81b.system.entry.js.map} +0 -0
  349. package/dist/nano-components/{p-b49d1e17.system.entry.js → p-95a4c3f2.system.entry.js} +2 -2
  350. package/dist/nano-components/{p-b49d1e17.system.entry.js.map → p-95a4c3f2.system.entry.js.map} +0 -0
  351. package/dist/nano-components/{p-06cc7501.entry.js → p-96ba0d00.entry.js} +2 -2
  352. package/dist/nano-components/{p-06cc7501.entry.js.map → p-96ba0d00.entry.js.map} +0 -0
  353. package/dist/nano-components/p-99637978.entry.js +2 -0
  354. package/dist/nano-components/p-99637978.entry.js.map +1 -0
  355. package/dist/nano-components/{p-56a8af2c.entry.js → p-9ccd832b.entry.js} +2 -2
  356. package/dist/nano-components/{p-56a8af2c.entry.js.map → p-9ccd832b.entry.js.map} +0 -0
  357. package/dist/nano-components/{p-2116ecb5.js → p-a1680208.js} +2 -2
  358. package/dist/nano-components/{p-2116ecb5.js.map → p-a1680208.js.map} +0 -0
  359. package/dist/nano-components/{p-b4a53bea.entry.js → p-a53a193c.entry.js} +2 -2
  360. package/dist/nano-components/{p-b4a53bea.entry.js.map → p-a53a193c.entry.js.map} +0 -0
  361. package/dist/nano-components/{p-b74ba77b.system.entry.js → p-a7ac7964.system.entry.js} +2 -2
  362. package/dist/nano-components/{p-b74ba77b.system.entry.js.map → p-a7ac7964.system.entry.js.map} +0 -0
  363. package/dist/nano-components/{p-30c68e8e.system.entry.js → p-aadd8c31.system.entry.js} +2 -2
  364. package/dist/nano-components/{p-30c68e8e.system.entry.js.map → p-aadd8c31.system.entry.js.map} +0 -0
  365. package/dist/nano-components/p-ab666582.entry.js +2 -0
  366. package/dist/nano-components/p-ab666582.entry.js.map +1 -0
  367. package/dist/nano-components/p-acd5d0f0.system.entry.js +2 -0
  368. package/dist/nano-components/p-acd5d0f0.system.entry.js.map +1 -0
  369. package/dist/nano-components/p-af9f6453.system.js +2 -0
  370. package/dist/nano-components/p-af9f6453.system.js.map +1 -0
  371. package/dist/nano-components/p-b1d3ab54.system.entry.js +2 -0
  372. package/dist/nano-components/p-b1d3ab54.system.entry.js.map +1 -0
  373. package/dist/nano-components/{p-bd04677f.entry.js → p-b3131821.entry.js} +2 -2
  374. package/dist/nano-components/{p-bd04677f.entry.js.map → p-b3131821.entry.js.map} +0 -0
  375. package/dist/nano-components/{p-ef46375f.entry.js → p-b7a58722.entry.js} +2 -2
  376. package/dist/nano-components/{p-ef46375f.entry.js.map → p-b7a58722.entry.js.map} +0 -0
  377. package/dist/nano-components/p-bb0619e6.js +2 -0
  378. package/dist/nano-components/p-bb0619e6.js.map +1 -0
  379. package/dist/nano-components/{p-081356e2.entry.js → p-c3f861c5.entry.js} +2 -2
  380. package/dist/nano-components/{p-081356e2.entry.js.map → p-c3f861c5.entry.js.map} +0 -0
  381. package/dist/nano-components/{p-ab384425.system.entry.js → p-c655e010.system.entry.js} +2 -2
  382. package/dist/nano-components/{p-ab384425.system.entry.js.map → p-c655e010.system.entry.js.map} +0 -0
  383. package/dist/nano-components/p-c72b22be.entry.js +2 -0
  384. package/dist/nano-components/p-c72b22be.entry.js.map +1 -0
  385. package/dist/nano-components/{p-d7ddc7e3.entry.js → p-d250987a.entry.js} +2 -2
  386. package/dist/nano-components/{p-d7ddc7e3.entry.js.map → p-d250987a.entry.js.map} +0 -0
  387. package/dist/nano-components/{p-b1badcb1.system.entry.js → p-d393d10a.system.entry.js} +2 -2
  388. package/dist/nano-components/{p-b1badcb1.system.entry.js.map → p-d393d10a.system.entry.js.map} +0 -0
  389. package/dist/nano-components/{p-868872fa.entry.js → p-db271541.entry.js} +2 -2
  390. package/dist/nano-components/{p-868872fa.entry.js.map → p-db271541.entry.js.map} +0 -0
  391. package/dist/nano-components/p-dccd86ec.system.js +4 -0
  392. package/dist/nano-components/p-dccd86ec.system.js.map +1 -0
  393. package/dist/nano-components/p-e0cc37fb.entry.js +2 -0
  394. package/dist/nano-components/{p-b19e2af5.entry.js.map → p-e0cc37fb.entry.js.map} +1 -1
  395. package/dist/nano-components/{p-db4ba5d8.system.entry.js → p-e28536b4.system.entry.js} +2 -2
  396. package/dist/nano-components/{p-db4ba5d8.system.entry.js.map → p-e28536b4.system.entry.js.map} +0 -0
  397. package/dist/nano-components/{p-b2804245.entry.js → p-ebf34764.entry.js} +2 -2
  398. package/dist/nano-components/{p-b2804245.entry.js.map → p-ebf34764.entry.js.map} +0 -0
  399. package/dist/nano-components/p-edddeaae.system.js +2 -0
  400. package/dist/nano-components/{p-f2d24fc6.system.js.map → p-edddeaae.system.js.map} +1 -1
  401. package/dist/nano-components/{p-d7a2499b.entry.js → p-ef5d9308.entry.js} +2 -2
  402. package/dist/nano-components/{p-d7a2499b.entry.js.map → p-ef5d9308.entry.js.map} +0 -0
  403. package/dist/nano-components/p-f234e064.system.entry.js +2 -0
  404. package/dist/nano-components/p-f234e064.system.entry.js.map +1 -0
  405. package/dist/nano-components/{p-6dae7bdd.system.entry.js → p-f27c9429.system.entry.js} +2 -2
  406. package/dist/nano-components/{p-6dae7bdd.system.entry.js.map → p-f27c9429.system.entry.js.map} +0 -0
  407. package/dist/nano-components/{p-3c25067f.entry.js → p-f3688bce.entry.js} +2 -2
  408. package/dist/nano-components/{p-3c25067f.entry.js.map → p-f3688bce.entry.js.map} +0 -0
  409. package/dist/nano-components/{p-66a5132f.system.entry.js → p-f86db7c0.system.entry.js} +2 -2
  410. package/dist/nano-components/{p-66a5132f.system.entry.js.map → p-f86db7c0.system.entry.js.map} +0 -0
  411. package/dist/nano-components/{p-7e259efb.system.entry.js → p-fa86645d.system.entry.js} +2 -2
  412. package/dist/nano-components/p-fa86645d.system.entry.js.map +1 -0
  413. package/dist/nano-components/{p-b5ff5764.entry.js → p-fdfa03d7.entry.js} +2 -2
  414. package/dist/nano-components/{p-b5ff5764.entry.js.map → p-fdfa03d7.entry.js.map} +0 -0
  415. package/dist/nano-components/p-ff2ff5b0.js +2 -0
  416. package/dist/nano-components/p-ff2ff5b0.js.map +1 -0
  417. package/dist/nano-components/p-ff5890b4.entry.js +2 -0
  418. package/dist/nano-components/p-ff5890b4.entry.js.map +1 -0
  419. package/dist/nano-components/{p-dbe19aba.entry.js → p-ffab923c.entry.js} +2 -2
  420. package/dist/nano-components/{p-dbe19aba.entry.js.map → p-ffab923c.entry.js.map} +0 -0
  421. package/dist/themes/nanopore.css +1 -1
  422. package/dist/types/components/date-input/date-input.d.ts +9 -0
  423. package/dist/types/components/date-picker/date-picker.d.ts +9 -4
  424. package/dist/types/components/details/details.d.ts +1 -0
  425. package/dist/types/components/file-upload/file-upload-interface.d.ts +4 -3
  426. package/dist/types/components/file-upload/file-upload.d.ts +2 -12
  427. package/dist/types/components/input/input.d.ts +1 -0
  428. package/dist/types/components.d.ts +16 -7
  429. package/dist/types/utils/testing/index.d.ts +4 -1
  430. package/docs-json.json +60 -31
  431. package/docs-vscode.json +4 -0
  432. package/package.json +11 -10
  433. package/dist/cjs/algolia-data-4d5ee8da.js.map +0 -1
  434. package/dist/cjs/algoliasearch.umd-51f0001d.js +0 -12
  435. package/dist/cjs/algoliasearch.umd-51f0001d.js.map +0 -1
  436. package/dist/cjs/global-befb7a64.js.map +0 -1
  437. package/dist/cjs/index-197e7a3f.js.map +0 -1
  438. package/dist/esm/algolia-data-6db3f5f2.js.map +0 -1
  439. package/dist/esm/algoliasearch.umd-2c129faa.js +0 -10
  440. package/dist/esm/algoliasearch.umd-2c129faa.js.map +0 -1
  441. package/dist/esm/global-c85d24a2.js.map +0 -1
  442. package/dist/esm/index-8e9bc704.js.map +0 -1
  443. package/dist/esm-es5/algolia-data-6db3f5f2.js.map +0 -1
  444. package/dist/esm-es5/algoliasearch.umd-2c129faa.js +0 -4
  445. package/dist/esm-es5/algoliasearch.umd-2c129faa.js.map +0 -1
  446. package/dist/esm-es5/global-c85d24a2.js.map +0 -1
  447. package/dist/esm-es5/index-8e9bc704.js +0 -2
  448. package/dist/esm-es5/index-8e9bc704.js.map +0 -1
  449. package/dist/nano-components/p-01e5c484.system.entry.js +0 -2
  450. package/dist/nano-components/p-01e5c484.system.entry.js.map +0 -1
  451. package/dist/nano-components/p-0283a2ec.js.map +0 -1
  452. package/dist/nano-components/p-03e4f363.system.js +0 -2
  453. package/dist/nano-components/p-03e4f363.system.js.map +0 -1
  454. package/dist/nano-components/p-19aecfb6.js +0 -2
  455. package/dist/nano-components/p-19aecfb6.js.map +0 -1
  456. package/dist/nano-components/p-23da4de5.js +0 -4
  457. package/dist/nano-components/p-23da4de5.js.map +0 -1
  458. package/dist/nano-components/p-2e2b4393.system.entry.js +0 -2
  459. package/dist/nano-components/p-2e2b4393.system.entry.js.map +0 -1
  460. package/dist/nano-components/p-32c68c7c.entry.js +0 -2
  461. package/dist/nano-components/p-32c68c7c.entry.js.map +0 -1
  462. package/dist/nano-components/p-38ed336b.entry.js +0 -2
  463. package/dist/nano-components/p-38ed336b.entry.js.map +0 -1
  464. package/dist/nano-components/p-447ed63d.system.entry.js.map +0 -1
  465. package/dist/nano-components/p-44cf7aeb.entry.js.map +0 -1
  466. package/dist/nano-components/p-4573be34.entry.js +0 -2
  467. package/dist/nano-components/p-4573be34.entry.js.map +0 -1
  468. package/dist/nano-components/p-4d17169a.entry.js.map +0 -1
  469. package/dist/nano-components/p-5198e4c6.system.js.map +0 -1
  470. package/dist/nano-components/p-6403dd02.system.entry.js.map +0 -1
  471. package/dist/nano-components/p-68eb3c21.entry.js +0 -2
  472. package/dist/nano-components/p-68eb3c21.entry.js.map +0 -1
  473. package/dist/nano-components/p-6d718c9a.entry.js +0 -2
  474. package/dist/nano-components/p-6edd2945.system.entry.js +0 -2
  475. package/dist/nano-components/p-6edd2945.system.entry.js.map +0 -1
  476. package/dist/nano-components/p-7e259efb.system.entry.js.map +0 -1
  477. package/dist/nano-components/p-981f997c.entry.js.map +0 -1
  478. package/dist/nano-components/p-b19e2af5.entry.js +0 -2
  479. package/dist/nano-components/p-c6f7ce64.system.entry.js.map +0 -1
  480. package/dist/nano-components/p-c8945124.system.js.map +0 -1
  481. package/dist/nano-components/p-cb750e49.system.js +0 -4
  482. package/dist/nano-components/p-cb750e49.system.js.map +0 -1
  483. package/dist/nano-components/p-ddaa8946.entry.js.map +0 -1
  484. package/dist/nano-components/p-eb090a2c.system.entry.js +0 -2
  485. package/dist/nano-components/p-eb090a2c.system.entry.js.map +0 -1
  486. package/dist/nano-components/p-f2d24fc6.system.js +0 -2
  487. package/dist/nano-components/p-f31f23ad.entry.js +0 -2
  488. package/dist/nano-components/p-f31f23ad.entry.js.map +0 -1
  489. package/dist/nano-components/p-fc189b6d.js +0 -2
  490. package/dist/nano-components/p-fc189b6d.js.map +0 -1
  491. package/dist/nano-components/p-fd4630d0.system.entry.js +0 -2
  492. package/dist/nano-components/p-fd4630d0.system.entry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/date-picker/duet-date-picker/date-utils.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/duet-date-picker/date-localization.ts","src/components/date-picker/date-picker.tsx","src/components/date-picker/date-picker.scss?tag=nano-date-picker&encapsulation=shadow","src/components/dropdown/dropdown.tsx","src/components/dropdown/dropdown.scss?tag=nano-dropdown&encapsulation=shadow"],"names":["DaysOfWeek","isEqual","a","b","getFullYear","getMonth","getDate","addDays","date","days","d","Date","setDate","inRange","min","max","time","getTime","clamp","DatePickerDay","focusedDay","today","day","onDaySelect","onKeyboardNavigation","focusedDayRef","disabled","isSelected","isToday","isFocused","isDisabled","isOutsideRange","h","class","duet-date__day","is-outside","is-disabled","is-today","tabIndex","onClick","e","onKeyDown","type","aria-pressed","ref","el","aria-hidden","toLocaleDateString","undefined","month","DatePickerMonth","selectedDate","focusedDate","labelledById","localization","firstDayOfWeek","onDateSelect","onMouseDown","onFocusIn","isDateDisabled","Monday","start","end","current","push","getDaysInRange","getDay","diff","startOfWeek","startOfMonth","endOfWeek","endOfMonth","getViewOfMonth","role","aria-labelledby","onFocusin","startingOffset","mapFn","dayName","scope","substr","array","dayNames","map","_","i","length","result","slice","chunk","week","aria-selected","buttonLabel","placeholder","selectedDateMessage","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","closeLabel","keyboardInstruction","calendarHeading","monthNames","monthNamesShort","NanoDatePicker","[object Object]","hostRef","this","monthSelectId","createIdentifier","yearSelectId","dialogLabelId","initialTouchX","initialTouchY","activeFocus","defaultLocalization","isModal","enableActiveFocus","disableActiveFocus","handleTouchStart","event","touch","changedTouches","pageX","pageY","handleTouchMove","preventDefault","handleTouchEnd","distX","distY","Math","abs","addMonths","handleNextMonthClick","handlePreviousMonthClick","handleKeyboardNavigation","key","shiftKey","firstFocusEle","firstFocusableElement","focus","handled","addYears","handleDaySelect","_event","isAllowed","parseISODate","setValue","setFocusedDay","handleMonthSelect","setMonth","parseInt","target","value","handleYearSelect","setYear","processFocusedDayNode","element","focusedDayNode","setTimeout","clearTimeout","focusTimeoutId","monthSelectNode","setFocus","months","years","year","printISODate","nanoDatePicked","emit","valueAsDate","handleSelectedDateChange","selectedYear","focusedMonth","focusedYear","minDate","maxDate","prevMonthDisabled","nextMonthDisabled","minYear","maxYear","Host","Object","assign","createColorClasses","color","duet-date__dialog","is-active","onTouchMove","onTouchStart","onTouchEnd","aria-live","id","htmlFor","onChange","selected","name","from","to","range","Dropdown","dropdownId","dropDownIds","labelId","ignoreOpenWatcher","menuFocused","autoOpen","open","closeOnSelect","tetherTo","placement","distance","skidding","hoist","togglePanel","hide","show","handleTriggerKeyDown","includes","stopPropagation","handleTriggerSlotChange","updateAccessibleTrigger","createPopover","popover","setOptions","strategy","ev","tagName","toLowerCase","detail","secondaryMenu","panel","classList","add","transitionDone","then","remove","style","minHeight","scrollHeight","parentElement","nanoShow","defaultPrevented","document","addEventListener","handleDocumentMouseDown","handleDocumentKeyDown","nanoHide","removeEventListener","host","querySelector","accessibleTrigger","Array","querySelectorAll","getNearestTabbableElement","setAttribute","activeElement","closest","containingElement","menu","getMenu","dispatchEvent","KeyboardEvent","destroy","Popover","trigger","positioner","transitionElement","onAfterHide","nanoAfterHide","onAfterShow","nanoAfterShow","onTransitionEnd","scrollTop","bind","handlePanelSelect","part","dropdown","dropdown--open","aria-expanded","aria-haspopup","onSlotchange","split","join","aria-modal","dialogTitle"],"mappings":"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","sourcesContent":["const ISO_DATE_FORMAT = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nexport enum DaysOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\nexport function createDate(year: string, month: string, day: string): Date {\n var dayInt = parseInt(day, 10);\n var monthInt = parseInt(month, 10);\n var yearInt = parseInt(year, 10);\n\n const isValid =\n Number.isInteger(yearInt) && // all parts should be integers\n Number.isInteger(monthInt) &&\n Number.isInteger(dayInt) &&\n monthInt > 0 && // month must be 1-12\n monthInt <= 12 &&\n dayInt > 0 && // day must be 1-31\n dayInt <= 31 &&\n yearInt > 0;\n\n if (isValid) {\n return new Date(yearInt, monthInt - 1, dayInt);\n }\n}\n\n/**\n * @param value date string in ISO format YYYY-MM-DD\n */\nexport function parseISODate(value: string): Date {\n if (!value) {\n return;\n }\n\n const matches = value.match(ISO_DATE_FORMAT);\n\n if (matches) {\n return createDate(matches[1], matches[2], matches[3]);\n }\n}\n\n/**\n * print date in format YYYY-MM-DD\n * @param date\n */\nexport function printISODate(date: Date): string {\n if (!date) {\n return '';\n }\n\n var d = date.getDate().toString(10);\n var m = (date.getMonth() + 1).toString(10);\n var y = date.getFullYear().toString(10);\n\n // days are not zero-indexed, so pad if less than 10\n if (date.getDate() < 10) {\n d = `0${d}`;\n }\n\n // months *are* zero-indexed, pad if less than 9!\n if (date.getMonth() < 9) {\n m = `0${m}`;\n }\n\n return `${y}-${m}-${d}`;\n}\n\n/**\n * Compare if two dates are equal in terms of day, month, and year\n */\nexport function isEqual(a: Date, b: Date): boolean {\n if (a == null || b == null) {\n return false;\n }\n\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function addDays(date: Date, days: number): Date {\n var d = new Date(date);\n d.setDate(d.getDate() + days);\n return d;\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const d = new Date(date);\n d.setMonth(date.getMonth() + months);\n return d;\n}\n\nexport function addYears(date: Date, years: number): Date {\n const d = new Date(date);\n d.setFullYear(date.getFullYear() + years);\n return d;\n}\n\nexport function startOfWeek(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date {\n var d = new Date(date);\n var day = d.getDay();\n var diff = (day < firstDayOfWeek ? 7 : 0) + day - firstDayOfWeek;\n\n d.setDate(d.getDate() - diff);\n return d;\n}\n\nexport function endOfWeek(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date {\n var d = new Date(date);\n var day = d.getDay();\n var diff = (day < firstDayOfWeek ? -7 : 0) + 6 - (day - firstDayOfWeek);\n\n d.setDate(d.getDate() + diff);\n return d;\n}\n\nexport function startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nexport function endOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const d = new Date(date);\n d.setMonth(month);\n return d;\n}\n\nexport function setYear(date: Date, year: number): Date {\n const d = new Date(date);\n d.setFullYear(year);\n return d;\n}\n\n/**\n * Check if date is within a min and max\n */\nexport function inRange(date: Date, min?: Date, max?: Date): boolean {\n return clamp(date, min, max) === date;\n}\n\n/**\n * Ensures date is within range, returns min or max if out of bounds\n */\nexport function clamp(date: Date, min?: Date, max?: Date): Date {\n const time = date.getTime();\n\n if (min && min instanceof Date && time < min.getTime()) {\n return min;\n }\n\n if (max && max instanceof Date && time > max.getTime()) {\n return max;\n }\n\n return date;\n}\n\n/**\n * given start and end date, return an (inclusive) array of all dates in between\n * @param start\n * @param end\n */\nfunction getDaysInRange(start: Date, end: Date): Date[] {\n const days: Date[] = [];\n let current = start;\n\n while (!isEqual(current, end)) {\n days.push(current);\n current = addDays(current, 1);\n }\n\n days.push(current);\n\n return days;\n}\n\n/**\n * given a date, return an array of dates from a calendar perspective\n * @param date\n * @param firstDayOfWeek\n */\nexport function getViewOfMonth(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date[] {\n const start = startOfWeek(startOfMonth(date), firstDayOfWeek);\n const end = endOfWeek(endOfMonth(date), firstDayOfWeek);\n\n return getDaysInRange(start, end);\n}\n\n/**\n * Form random hash\n */\nexport function chr4() {\n return Math.random().toString(16).slice(-4);\n}\n\n/**\n * Create random identifier with a prefix\n * @param prefix\n */\nexport function createIdentifier(prefix) {\n return `${prefix}-${chr4()}${chr4()}-${chr4()}-${chr4()}-${chr4()}-${chr4()}${chr4()}${chr4()}`;\n}\n","import { h, FunctionalComponent } from '@stencil/core';\nimport { isEqual } from './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 { DuetLocalizedText } from './date-localization';\nimport { DatePickerDay, DatePickerDayProps } from './date-picker-day';\nimport { getViewOfMonth, inRange, DaysOfWeek, isEqual } from './date-utils';\nimport { DateDisabledPredicate } from '../../../interface';\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","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 {\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 clamp,\n inRange,\n endOfMonth,\n startOfMonth,\n printISODate,\n parseISODate,\n createIdentifier,\n DaysOfWeek,\n} from '../../utils/date-utils';\nimport { DatePickerMonth } from './duet-date-picker/date-picker-month';\nimport defaultLocalization from './duet-date-picker/date-localization';\n\nimport {\n PickerChangeEvent,\n DuetLocalizedText,\n DateDisabledPredicate,\n Color,\n} from '../../interface';\nimport { createColorClasses } from '../../utils';\n\nfunction range(from: number, to: number) {\n var result: number[] = [];\n for (var i = from; i <= to; i++) {\n result.push(i);\n }\n return result;\n}\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 NanoDatePicker implements ComponentInterface {\n private monthSelectId = createIdentifier('NanoDateMonth');\n private yearSelectId = createIdentifier('NanoDateYear');\n private dialogLabelId = createIdentifier('NanoDateLabel');\n\n private firstFocusableElement: HTMLElement;\n private monthSelectNode: 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 /** Controls which days are disabled and therefore disallowed.\n * For example, this can be used to disallow selection of weekends. */\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. If day set, will focus to the current selected day.\n * @param day\n */\n @Method()\n async setFocus(day: boolean = 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(() => this.monthSelectNode.focus(), 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(clamp(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(clamp(date, min, max));\n }\n\n private setFocusedDay(day: Date) {\n this.focusedDay = clamp(\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 let ele = this.firstFocusEle || this.firstFocusableElement;\n ele.focus();\n return;\n }\n\n var 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 componentWillLoad() {\n this.handleSelectedDateChange();\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 >\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","@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: left;\n width: 100%;\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ DIALOG\n// ---------------------------------------------\n\n.duet-date__dialog {\n display: flex;\n top: 100%;\n max-width: 100%;\n width: 100%;\n\n &.is-left {\n left: auto;\n right: 0;\n width: auto;\n }\n}\n\n.duet-date__dialog-content {\n background: var(--background);\n min-width: 290px;\n padding: 16px 16px 20px;\n position: relative;\n transform: none;\n max-width: 100%;\n width: 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 width: 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-bottom: 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 -moz-appearance: none;\n -webkit-appearance: none;\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 height: 2.5em;\n width: 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 bottom: 0;\n left: 0;\n opacity: 0.16;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n [aria-selected='true'] & {\n background: var(--active-color);\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-bottom: 16px;\n width: 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 -moz-appearance: none;\n -webkit-appearance: none;\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-left: 8px;\n padding: 0;\n transition: background-color 300ms ease;\n font-size: 0.9em;\n height: 2.2em;\n width: 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: 0 auto;\n }\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ SELECT\n// ---------------------------------------------\n\n.duet-date__select {\n display: inline-flex;\n margin-top: 4px;\n position: relative;\n\n span {\n margin-right: 4px;\n }\n\n select {\n cursor: pointer;\n font-size: 1em;\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 2;\n\n &: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: 0 4px 0 8px;\n pointer-events: none;\n position: relative;\n width: 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 height: 1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n top: 0;\n width: 1px;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n Watch,\n h,\n Listen,\n ComponentInterface,\n} from '@stencil/core';\nimport Popover from '../../utils/popover';\nimport { transitionDone } from '../../utils';\nimport { NavItemEventDetail } from '../../interface';\nimport { getNearestTabbableElement } from '../../utils/tabbable';\n\n/**\n * Dropdowns show additional content in a panel.\n * Designed to work well with nano-menu components to provide a list of options (works well with nano-nav-items).\n * @slot trigger - The dropdown's trigger.\n * @slot - The dropdown's content.\n */\n@Component({\n tag: 'nano-dropdown',\n styleUrl: 'dropdown.scss',\n shadow: true,\n})\nexport class Dropdown implements ComponentInterface {\n private dropdownId = `dropdown-${dropDownIds++}`;\n private labelId = this.dropdownId + '-title';\n private ignoreOpenWatcher = false;\n private panel: HTMLElement;\n private popover: Popover;\n private trigger: HTMLElement;\n private positioner: HTMLElement;\n private menuFocused: boolean = false;\n\n @Element() host: HTMLNanoDropdownElement;\n\n /** Determines if the dropdown should open automatically when the trigger is clicked */\n @Prop() autoOpen = true;\n\n /** Indicates whether or not the dropdown is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n @Watch('open')\n handleOpenChange() {\n if (!this.ignoreOpenWatcher) {\n this.open ? this.show() : this.hide();\n this.updateAccessibleTrigger();\n }\n }\n\n /**\n * Determines whether the dropdown should hide when a menu item is selected.\n */\n @Prop() closeOnSelect = true;\n\n /**\n * The dropdown will close when the user interacts outside of this element (e.g. clicking).\n */\n @Prop({ mutable: true }) containingElement: HTMLElement;\n\n /**\n * If you don't want to use the trigger slot, you can use this to 'tether' the dropdown to another element.\n * And you will still need to control when the component is opened (using show() / hide() or the `open` prop)\n */\n @Prop() tetherTo: HTMLElement = null;\n\n @Watch('tetherTo')\n handleTetherToChange() {\n this.createPopover();\n this.updateAccessibleTrigger();\n }\n\n /**\n * The preferred placement of the dropdown panel. Note that the actual placement may vary as needed to keep the panel\n * inside of the viewport.\n */\n @Prop() placement:\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end' = 'bottom-start';\n\n /**\n * The distance in pixels from which to offset the panel away from its trigger.\n */\n @Prop() distance = 2;\n\n /**\n * The distance in pixels from which to offset the panel along its trigger.\n */\n @Prop() skidding = 0;\n\n /**\n * Enable this option to prevent the panel from being clipped when the component is placed inside a container with\n * `overflow: auto|scroll`.\n */\n @Prop() hoist = false;\n\n @Watch('placement')\n @Watch('distance')\n @Watch('skidding')\n @Watch('hoist')\n handlePopoverOptionsChange() {\n this.popover.setOptions({\n strategy: this.hoist ? 'fixed' : 'absolute',\n placement: this.placement,\n skidding: this.skidding,\n distance: this.distance,\n });\n }\n\n /**\n * Title used to describe the dropdown content for accessibility\n */\n @Prop() dialogTitle!: string;\n\n // Events\n\n /**\n * Emitted when the dropdown opens. Calling `event.preventDefault()` will prevent it from being opened.\n */\n @Event() nanoShow: EventEmitter;\n\n /**\n * Emitted after the dropdown opens and all transitions are complete.\n */\n @Event() nanoAfterShow: EventEmitter;\n\n /**\n * Emitted when the dropdown closes. Calling `event.preventDefault()` will prevent it from being closed.\n */\n @Event() nanoHide: EventEmitter;\n\n /**\n * Emitted after the dropdown closes and all transitions are complete.\n */\n @Event() nanoAfterHide: EventEmitter;\n\n // Listeners\n\n @Listen('nanoFocus')\n menuFocus(ev: CustomEvent) {\n let target = ev.target as HTMLElement;\n if (\n !target ||\n !target.tagName ||\n target.tagName.toLowerCase() !== 'nano-menu'\n )\n return;\n this.menuFocused = true;\n }\n\n @Listen('nanoOpen')\n secondaryOpen(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n\n this.panel.classList.add('loading');\n transitionDone(this.panel).then(() =>\n this.panel.classList.remove('loading')\n );\n this.panel.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n if (!(ev.target as HTMLElement).parentElement) return;\n this.panel.style.minHeight =\n (ev.target as HTMLElement).parentElement.scrollHeight + 'px';\n }\n\n @Listen('nanoSelect')\n handlePanelSelect(event: CustomEvent) {\n const target = event.target as HTMLElement;\n\n // Hide the dropdown when a menu item is selected\n if (this.closeOnSelect && target.tagName.toLowerCase() === 'nano-menu')\n this.hide();\n }\n\n // Methods\n\n /** Shows the dropdown panel */\n @Method()\n async show() {\n this.ignoreOpenWatcher = true;\n this.open = true;\n\n const nanoShow = this.nanoShow.emit();\n\n if (nanoShow.defaultPrevented) {\n this.open = false;\n this.ignoreOpenWatcher = false;\n return;\n }\n\n this.popover.show();\n this.ignoreOpenWatcher = false;\n\n document.addEventListener('mousedown', this.handleDocumentMouseDown);\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n }\n\n /** Hides the dropdown panel */\n @Method()\n async hide() {\n this.ignoreOpenWatcher = true;\n this.open = false;\n\n const nanoHide = this.nanoHide.emit();\n\n if (nanoHide.defaultPrevented) {\n this.open = true;\n this.ignoreOpenWatcher = false;\n return;\n }\n\n if (this.popover) this.popover.hide();\n this.ignoreOpenWatcher = false;\n\n document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n\n this.menuFocused = false;\n }\n\n // Private methods\n\n private getMenu() {\n return this.host.querySelector('nano-menu') as HTMLNanoMenuElement;\n }\n\n private togglePanel = () => {\n if (!this.autoOpen) return;\n this.open ? this.hide() : this.show();\n };\n\n // Slotted triggers can be arbitrary content, but we need to link them to the dropdown panel with `aria-haspopup` and\n // `aria-expanded`. These must be applied to the \"accessible trigger\" (the tabbable portion of the trigger element\n // that gets slotted in) so screen readers will understand them. The accessible trigger could be the slotted element,\n private updateAccessibleTrigger() {\n let accessibleTrigger: HTMLElement;\n if (!this.tetherTo) {\n const assignedElements = Array.from(\n this.host.querySelectorAll('[slot=\"trigger\"]')\n );\n accessibleTrigger = assignedElements.map(getNearestTabbableElement)[0];\n } else {\n accessibleTrigger = this.tetherTo;\n }\n\n if (accessibleTrigger) {\n accessibleTrigger.setAttribute('aria-haspopup', 'true');\n accessibleTrigger.setAttribute(\n 'aria-expanded',\n this.open ? 'true' : 'false'\n );\n }\n }\n\n // Handlers\n\n private handleDocumentKeyDown(event: KeyboardEvent) {\n // Close when escape is pressed\n if (event.key === 'Escape') {\n this.hide();\n return;\n }\n\n // Close when tabbing results in the focus leaving the close element\n if (event.key === 'Tab') {\n setTimeout(() => {\n if (\n document.activeElement &&\n document.activeElement.closest(\n this.containingElement.tagName.toLowerCase()\n ) !== this.containingElement\n ) {\n this.hide();\n return;\n }\n });\n }\n\n const menu = this.getMenu();\n\n // If a menu is present, focus on it when certain keys are pressed\n if (menu && ['ArrowDown', 'ArrowUp'].includes(event.key)) {\n if (!this.open || this.menuFocused) return;\n event.preventDefault();\n menu.setFocus();\n return;\n }\n\n // All other keys focus the menu and pass the event through to menu (necessary for type-to-search to work)\n if (menu && event.target !== menu) {\n menu.dispatchEvent(new KeyboardEvent(event.type, event));\n return;\n }\n }\n\n private handleDocumentMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n // Close when clicking outside of the close element\n if (\n target.closest(this.containingElement.tagName.toLowerCase()) !==\n this.containingElement\n ) {\n this.hide();\n return;\n }\n }\n\n private handleTriggerKeyDown = (event: KeyboardEvent) => {\n // Open the panel when pressing down or up while focused on the trigger\n if (!this.open && ['ArrowDown', 'ArrowUp', ' '].includes(event.key)) {\n this.show();\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private handleTriggerSlotChange = () => {\n this.updateAccessibleTrigger();\n };\n\n private createPopover() {\n if (this.popover) {\n this.hide();\n this.popover.destroy();\n this.popover = null;\n }\n\n this.popover = new Popover(this.tetherTo || this.trigger, this.positioner, {\n strategy: this.hoist ? 'fixed' : 'absolute',\n placement: this.placement,\n distance: this.distance,\n skidding: this.skidding,\n transitionElement: this.panel,\n onAfterHide: () => this.nanoAfterHide.emit(),\n onAfterShow: () => this.nanoAfterShow.emit(),\n onTransitionEnd: () => {\n if (!this.open) {\n this.panel.scrollTop = 0;\n }\n },\n });\n // Show on init if open\n if (this.open) {\n this.show();\n }\n }\n\n // Stencil hooks\n\n connectedCallback() {\n this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);\n this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);\n this.handlePanelSelect = this.handlePanelSelect.bind(this);\n\n if (!this.containingElement) this.containingElement = this.host;\n }\n\n componentDidLoad() {\n this.createPopover();\n }\n\n disconnectedCallback() {\n this.hide();\n if (this.popover) this.popover.destroy();\n }\n\n render() {\n return (\n <div\n part=\"base\"\n id={this.dropdownId}\n class={{\n dropdown: true,\n 'dropdown--open': this.open,\n }}\n aria-expanded={this.open ? 'true' : 'false'}\n aria-haspopup=\"true\"\n >\n <span\n part=\"trigger\"\n class=\"dropdown__trigger\"\n ref={(el) => (this.trigger = el)}\n onKeyDown={this.handleTriggerKeyDown}\n onClick={this.togglePanel}\n >\n <slot name=\"trigger\" onSlotchange={this.handleTriggerSlotChange} />\n </span>\n\n <div ref={(el) => (this.positioner = el)} class=\"dropdown__positioner\">\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class={`dropdown__panel ${this.placement.split('-').join(' ')}`}\n aria-hidden={!this.open}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={this.dialogTitle ? this.labelId : undefined}\n >\n {this.dialogTitle && (\n <h2\n id={this.labelId}\n class=\"dropdown__accessible-title\"\n aria-live=\"polite\"\n >\n {this.dialogTitle}\n </h2>\n )}\n <slot />\n </div>\n </div>\n </div>\n );\n }\n}\n\nlet dropDownIds = 0;\n","@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --width: width of the dropdown. Defaults to 'auto'\n * @prop --border: Defaults to #{$layer-border-style}\n * @prop --border-radius: Defaults to #{$layer-bg-color};\n * @prop --background: Defaults to #{$layer-bg-color};\n * @prop --padding: padding of the drop down. Default to '10px 0';\n */\n\n --width: auto;\n --border: #{$layer-border-style};\n --border-radius: #{$layer-border-radius};\n --background: #{$layer-bg-color};\n --padding: 10px 0;\n --overflow: hidden;\n --dropdown-z-index: #{$layer-index-dropdown};\n}\n\n.dropdown {\n position: relative;\n\n &__trigger {\n display: block;\n }\n\n &__positioner {\n position: absolute;\n z-index: var(--dropdown-z-index);\n\n @media (max-width: 35.9375em) {\n z-index: 100;\n }\n }\n\n &__panel {\n padding: var(--padding);\n background: var(--background);\n width: var(--width);\n border: var(--border);\n border-radius: var(--border-radius);\n color: currentColor;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n opacity: 0;\n transition: 0.2s ease opacity, 0.2s ease transform, 0.2s ease min-height;\n min-height: 20px;\n overflow: var(--overflow);\n box-sizing: content-box !important;\n\n &.top {\n transform: translateY(-20px) translateZ(0);\n }\n\n &.bottom {\n transform: translateY(20px) translateZ(0);\n }\n\n .dropdown__positioner.popover-visible & {\n opacity: 1;\n transform: translateY(0) translateZ(0);\n }\n\n ::slotted(nano-menu) {\n max-height: 50vh;\n }\n }\n\n &__accessible-title {\n @include visually-hide();\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- import{r as o,c as i,h as a,e as t,g as s}from"./p-fc189b6d.js";import{l as e,u as r}from"./p-5af040f4.js";import{M as n}from"./p-8c9e74c7.js";import{r as d}from"./p-ed2efbeb.js";import{C as l}from"./p-2116ecb5.js";import{h}from"./p-cd494bc6.js";import"./p-a0ddf496.js";import"./p-a5917bdc.js";import"./p-dfe5a97d.js";import"./p-0e826935.js";let b=0,c=class{constructor(a){o(this,a),this.nanoShow=i(this,"nanoShow",7),this.nanoAfterShow=i(this,"nanoAfterShow",7),this.nanoHide=i(this,"nanoHide",7),this.nanoAfterHide=i(this,"nanoAfterHide",7),this.nanoInitialFocus=i(this,"nanoInitialFocus",7),this.nanoRequestClose=i(this,"nanoRequestClose",7),this.componentId="dialog-"+ ++b,this.willShow=!1,this.willHide=!1,this.addedTransEnd=!1,this.isVisible=!1,this.noDismiss=!1,this.hasFooter=!1,this.showRibbon=!0,this.open=!1,this.label="",this.noHeader=!1,this.noFooter=!1,this.noUserDismiss=!1,this.storeMethod="url-hash",this.handleKeyDown=o=>{"Escape"===o.key&&this.requestClose()},this.requestClose=()=>{this.nanoRequestClose.emit().defaultPrevented||this.noUserDismiss?(this.noDismiss=!0,setTimeout((()=>this.noDismiss=!1),250)):this.hide()},this.handleTransitionEnd=o=>{"opacity"===o.propertyName&&o.composedPath().find((o=>o===this.panel||o===this.overlay))&&(this.isVisible=this.open,this.willShow=!1,this.willHide=!1,this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit())},this.handleSlotChange=()=>{this.hasFooter=h(this.host,"footer")}}handleOpenChange(){this.open?this.show():this.hide()}async show(){this.willShow||(this.nanoShow.emit().defaultPrevented?this.open=!1:(this.originalTrigger=document.activeElement,this.willShow=!0,this.isVisible=!0,this.open=!0,this.modal.activate(),e(this.host),this.open&&d((()=>{this.nanoInitialFocus.emit().defaultPrevented||this.panel.focus({preventScroll:!0})}))))}async hide(){if(this.willHide)return;if(this.nanoHide.emit().defaultPrevented)return void(this.open=!0);this.willHide=!0,this.open=!1,this.modal.deactivate(),r(this.host),this.stopVideos();const o=this.originalTrigger;o&&"function"==typeof o.focus&&setTimeout((()=>o.focus()))}stopVideos(){Array.from(this.host.querySelectorAll("iframe,video")).forEach((o=>{"video"===o.tagName.toLowerCase()?o.pause():o.src=o.src}))}connectedCallback(){this.modal=new n(this.host),this.panel&&(this.addedTransEnd=!0,this.panel.addEventListener("transitionend",this.handleTransitionEnd))}componentWillLoad(){this.handleSlotChange(),this.open&&this.show(),this.storeId&&l.init(this,["open"],this.storeMethod,this.storeId)}componentDidLoad(){this.addedTransEnd||this.panel.addEventListener("transitionend",this.handleTransitionEnd)}disconnectedCallback(){r(this.host),this.addedTransEnd=!1,this.panel.removeEventListener("transitionend",this.handleTransitionEnd)}render(){return a(t,{showing:!!this.isVisible||void 0},a("div",{part:"base",class:{dialog:!0,"dialog--open":this.open,"dialog--visible":this.isVisible,"dialog--has-footer":!this.noFooter,"dialog--has-header":!this.noHeader,"dialog--nodismiss":this.noDismiss,"dialog--with-ribbon":this.showRibbon},onKeyDown:this.handleKeyDown},a("div",{part:"overlay",class:"dialog__overlay",ref:o=>this.overlay=o,onClick:this.requestClose}),a("div",{ref:o=>this.panel=o,part:"panel",class:"dialog__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:null,"aria-labelledby":this.noHeader?null:`${this.componentId}-title`,tabIndex:0},a("div",{class:"dialog__body-wrap"},!this.noHeader&&a("nano-sticker",null,a("header",{part:"header",class:"dialog__header"},a("span",{part:"title",class:"dialog__title",id:`${this.componentId}-title`},a("slot",{name:"label"},this.label||String.fromCharCode(65279))),!this.noUserDismiss&&a("nano-icon-button",{exportparts:"base:close-button",class:"dialog__close-icon",label:"close dialog",onClick:this.requestClose,iconName:"light/times"}))),a("div",{part:"body",class:"dialog__body"},a("slot",null)),!this.noFooter&&(this.hasFooter||!this.noUserDismiss)&&a("nano-sticker",{position:"bottom"},a("footer",{part:"footer",class:"dialog__footer"},a("slot",{name:"footer",onSlotchange:this.handleSlotChange}),!this.noUserDismiss&&a("button",{class:"dialog__close-txt",onClick:this.requestClose},"Close")))))))}get host(){return s(this)}static get watchers(){return{open:["handleOpenChange"]}}};c.style=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--content-background:#fafafa;--footer-content:#e4e6e8;--scrim-color:var(--nano-layer-overlay-dark, rgba(74, 74, 74, .5));--box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));--close-button-color:#b5aea7;--width:60rem;--tint-color:#0084a9;--body-padding-v:var(--nano-spacing-large, 20px);--body-padding-h:var(--nano-spacing-large, 20px);--header-padding-v:var(--nano-spacing-medium, 16px);--header-padding-h:var(--nano-spacing-large, 20px);--footer-padding-v:var(--nano-spacing-medium, 16px);--footer-padding-h:var(--nano-spacing-large, 20px)}.dialog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--nano-layer-index-modal, 700)}.dialog:not(.dialog--visible){position:absolute;width:1px;height:1px;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;pointer-events:none;visibility:hidden}.dialog__panel{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;z-index:2;width:var(--width);max-width:calc(100% - var(--nano-spacing-xlarge, 24px));max-height:calc(92% - var(--nano-spacing-xlarge, 24px));background-color:var(--content-background);border-radius:var(--border-radius);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);opacity:0;-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform;transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform;overflow:auto}.dialog__panel:focus{outline:none}.dialog--with-ribbon .dialog__panel{border-top:5px solid var(--tint-color)}.dialog--open .dialog__panel{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:1;-webkit-transform:none;transform:none}.dialog--nodismiss .dialog__panel{-webkit-animation:cannotClose 0.25s ease-in-out 1;animation:cannotClose 0.25s ease-in-out 1}@-webkit-keyframes cannotClose{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.08);transform:scale(1.08)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes cannotClose{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.08);transform:scale(1.08)}100%{-webkit-transform:scale(1);transform:scale(1)}}.dialog__header{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;min-width:var(--width);width:100%;background-color:var(--content-background);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-transition:var(--nano-transition-fast, 0.1s) box-shadow;transition:var(--nano-transition-fast, 0.1s) box-shadow}.dialog--visible .dialog__header{min-width:auto}[stuck] .dialog__header{-webkit-box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2))}.dialog__title{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-size:var(--nano-fontsize-large, 1.25rem);line-height:1.6;padding:var(--header-padding-v) var(--header-padding-h)}.dialog .dialog__close-icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:var(--nano-fontsize-xlarge, 1.5rem);padding:0 var(--header-padding-h);--color:var(--close-button-color)}.dialog__body{padding:0 var(--body-padding-h) var(--body-padding-v)}.dialog:not(.dialog--has-header) .dialog__body{padding-top:var(--body-padding-v)}.dialog__body ::slotted(*){max-width:100%}.dialog__body-wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;-webkit-overflow-scrolling:touch;border-radius:var(--border-radius)}.dialog:not(.dialog--has-header) .dialog__body-wrap{border-radius:0 0 inherit inherit}.dialog:not(.dialog--has-footer) .dialog__body-wrap{border-radius:inherit inherit 0 0}.dialog__footer{width:100%;padding:var(--footer-padding-v) var(--footer-padding-h);background:var(--footer-content);border-radius:0 0 var(--border-radius) var(--border-radius);position:relative;top:1px}.dialog--visible .dialog__footer{min-width:auto}.dialog__footer ::slotted(button){margin-right:var(--nano-spacing-small, 8px) !important}.dialog:not(.dialog--has-footer) .dialog__footer{display:none}.dialog__close-txt{color:var(--tint-color);border:none;text-decoration:underline;margin:0;text-underline-offset:4px;background-color:transparent;font:inherit;-webkit-box-align:center;cursor:pointer;font-size:var(--nano-fontsize-small, 0.875rem);padding:0.5rem;border-radius:var(--nano-border-radius-small, 2px);-webkit-transition:-webkit-box-shadow 100ms ease-in-out;transition:-webkit-box-shadow 100ms ease-in-out;transition:box-shadow 100ms ease-in-out;transition:box-shadow 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out}.dialog__close-txt:focus{outline:none;-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.dialog__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--scrim-color);opacity:0;-webkit-transition:var(--nano-transition-fast, 0.3s) opacity;transition:var(--nano-transition-fast, 0.3s) opacity;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.dialog--open .dialog__overlay{opacity:1}";export{c as nano_dialog}
2
- //# sourceMappingURL=p-38ed336b.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/dialog/dialog.tsx","src/components/dialog/dialog.scss?tag=nano-dialog&encapsulation=shadow"],"names":["id","Dialog","[object Object]","hostRef","this","componentId","willShow","willHide","addedTransEnd","isVisible","noDismiss","hasFooter","showRibbon","open","label","noHeader","noFooter","noUserDismiss","storeMethod","handleKeyDown","event","key","requestClose","nanoRequestClose","emit","defaultPrevented","setTimeout","hide","handleTransitionEnd","propertyName","composedPath","find","node","panel","overlay","nanoAfterShow","nanoAfterHide","handleSlotChange","hasSlot","host","show","nanoShow","originalTrigger","document","activeElement","modal","activate","lockBodyScrolling","raf","nanoInitialFocus","focus","preventScroll","nanoHide","deactivate","unlockBodyScrolling","stopVideos","trigger","Array","from","querySelectorAll","forEach","video","tagName","toLowerCase","pause","src","Modal","addEventListener","storeId","ComponentStore","init","removeEventListener","h","Host","showing","undefined","part","class","dialog","dialog--open","dialog--visible","dialog--has-footer","dialog--has-header","dialog--nodismiss","dialog--with-ribbon","onKeyDown","ref","el","onClick","role","aria-modal","aria-hidden","aria-label","aria-labelledby","tabIndex","name","String","fromCharCode","exportparts","iconName","position","onSlotchange"],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n ComponentInterface,\n} from '@stencil/core';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../../utils/scroll';\nimport Modal from '../../utils/modal';\nimport { hasSlot, raf } from '../../utils';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\n\nlet id = 0;\n\n/**\n * Dialogs, sometimes called \"modals\", appear above the page and require the user's immediate attention.\n *\n * @slot - The dialog's content.\n * @slot label - The dialog's label. Alternatively, you can use the label prop.\n * @slot footer - The dialog's footer, usually one or more buttons representing various options.\n */\n@Component({\n tag: 'nano-dialog',\n styleUrl: 'dialog.scss',\n shadow: true,\n})\nexport class Dialog implements ComponentInterface {\n private componentId = `dialog-${++id}`;\n private modal: Modal;\n private panel: HTMLElement;\n private willShow = false;\n private willHide = false;\n private originalTrigger: HTMLElement | null;\n private overlay: HTMLElement;\n private addedTransEnd = false;\n\n @Element() host: HTMLNanoDialogElement;\n @State() isVisible = false;\n @State() noDismiss = false;\n @State() hasFooter = false;\n\n /** Show a colour ribbon at the top of the modal */\n @Prop() showRibbon = true;\n\n /** Indicates whether or not the dialog is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The dialog's label as displayed in the header. You should always include a relevant\n * label even when using `no-header`, as it is required for proper accessibility. */\n @Prop() label = '';\n\n /** Set to true to disable the header. This will also remove the default close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noHeader = false;\n\n /** Set to true to disable the footer. This will also remove the footer close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noFooter = false;\n\n /** An alternative to `preventDefault()` on the `nanoRequestClose` event. This will hide the close button and disable clicks on the overlay or presses the `Escape` key */\n @Prop() noUserDismiss = false;\n\n /** Store search queries (against this ID) to the component store. Use in conjunction with storeMethod */\n @Prop() storeId?: string;\n\n /** The method of storage. Either session storage, url hash (after the '#') or url query (after the '?'). */\n @Prop() storeMethod: StorageMethods = 'url-hash';\n\n @Watch('open')\n handleOpenChange() {\n this.open ? this.show() : this.hide();\n }\n\n /** Emitted when the dialog opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the dialog opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the dialog closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the dialog closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Emitted when the dialog opens and the panel gains focus. Calling `event.preventDefault()` will prevent\n * focus and allow you to set it on a different element in the dialog, such as an input or button. */\n @Event() nanoInitialFocus: EventEmitter;\n\n /** Emitted when the user clicks the close button, clicks the overlay, or presses the `Escape` key. Calling `event.preventDefault()` will prevent the dialog from closing. */\n @Event() nanoRequestClose: EventEmitter;\n\n /** Shows the dialog */\n @Method()\n async show() {\n if (this.willShow) {\n return;\n }\n\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return;\n }\n\n this.originalTrigger = document.activeElement as HTMLElement;\n this.willShow = true;\n this.isVisible = true;\n this.open = true;\n this.modal.activate();\n\n lockBodyScrolling(this.host);\n\n if (this.open) {\n // Wait for the next frame before setting initial focus so the dialog is technically visible\n raf(() => {\n const nanoInitialFocus = this.nanoInitialFocus.emit();\n if (!nanoInitialFocus.defaultPrevented) {\n this.panel.focus({ preventScroll: true });\n }\n });\n }\n }\n\n /** Hides the dialog */\n @Method()\n async hide() {\n if (this.willHide) {\n return;\n }\n\n const nanoHide = this.nanoHide.emit();\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return;\n }\n\n this.willHide = true;\n this.open = false;\n this.modal.deactivate();\n unlockBodyScrolling(this.host);\n this.stopVideos();\n\n // Restore focus to the original trigger\n const trigger = this.originalTrigger;\n if (trigger && typeof trigger.focus === 'function') {\n setTimeout(() => trigger.focus());\n }\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n const nanoOverlayDismiss = this.nanoRequestClose.emit();\n\n if (!nanoOverlayDismiss.defaultPrevented && !this.noUserDismiss) {\n this.hide();\n } else {\n this.noDismiss = true;\n setTimeout((_) => (this.noDismiss = false), 250);\n }\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n event\n .composedPath()\n .find((node) => node === this.panel || node === this.overlay)\n ) {\n // Ensure we only emit one event when the target element is no longer visible\n this.isVisible = this.open;\n this.willShow = false;\n this.willHide = false;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n }\n };\n\n private handleSlotChange = () => {\n this.hasFooter = hasSlot(this.host, 'footer');\n };\n\n private stopVideos() {\n var videos: (HTMLVideoElement | HTMLIFrameElement)[] = Array.from(\n this.host.querySelectorAll('iframe,video')\n );\n videos.forEach((video) => {\n if (video.tagName.toLowerCase() === 'video')\n (video as HTMLVideoElement).pause();\n else {\n const src = video.src;\n video.src = src;\n }\n });\n }\n\n connectedCallback() {\n this.modal = new Modal(this.host);\n if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n componentWillLoad() {\n this.handleSlotChange();\n // Show on init if open\n if (this.open) this.show();\n if (this.storeId)\n ComponentStore.init(this, ['open'], this.storeMethod, this.storeId);\n }\n\n componentDidLoad() {\n if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n render() {\n return (\n <Host showing={this.isVisible ? true : undefined}>\n <div\n part=\"base\"\n class={{\n dialog: true,\n 'dialog--open': this.open,\n 'dialog--visible': this.isVisible,\n 'dialog--has-footer': !this.noFooter,\n 'dialog--has-header': !this.noHeader,\n 'dialog--nodismiss': this.noDismiss,\n 'dialog--with-ribbon': this.showRibbon,\n }}\n onKeyDown={this.handleKeyDown}\n >\n <div\n part=\"overlay\"\n class=\"dialog__overlay\"\n ref={(el) => (this.overlay = el)}\n onClick={this.requestClose}\n />\n\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class=\"dialog__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-label={this.noHeader ? this.label : null}\n aria-labelledby={\n !this.noHeader ? `${this.componentId}-title` : null\n }\n tabIndex={0}\n >\n <div class=\"dialog__body-wrap\">\n {!this.noHeader && (\n <nano-sticker>\n <header part=\"header\" class=\"dialog__header\">\n <span\n part=\"title\"\n class=\"dialog__title\"\n id={`${this.componentId}-title`}\n >\n <slot name=\"label\">\n {/* If there's no label, use an invisible character to prevent the heading from collapsing */}\n {this.label || String.fromCharCode(65279)}\n </slot>\n </span>\n {!this.noUserDismiss && (\n <nano-icon-button\n exportparts=\"base:close-button\"\n class=\"dialog__close-icon\"\n label=\"close dialog\"\n onClick={this.requestClose}\n iconName=\"light/times\"\n />\n )}\n </header>\n </nano-sticker>\n )}\n <div part=\"body\" class=\"dialog__body\">\n <slot />\n </div>\n {!this.noFooter && (this.hasFooter || !this.noUserDismiss) && (\n <nano-sticker position=\"bottom\">\n <footer part=\"footer\" class=\"dialog__footer\">\n <slot name=\"footer\" onSlotchange={this.handleSlotChange} />\n {!this.noUserDismiss && (\n <button\n class=\"dialog__close-txt\"\n onClick={this.requestClose}\n >\n Close\n </button>\n )}\n </footer>\n </nano-sticker>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n","@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n@import '../../global/style/nano-theme/form';\n\n/**\n * @prop --width: The preferred width of the dialog. Note that the dialog will shrink to accommodate smaller screens.\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --content-background: defaults to #{$layer-bg-color};\n * @prop --footer-background: defaults to #{$color-celsius};\n * @prop --box-shadow: defaults to $layer-shadow-xlarge;\n * @prop --close-button-color: defaults to #{$color-mediumgrey};\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --tint-color: colour used to highlight items in the dialog - top ribbon, bottom close button. Default #{$color-blue};\n * @prop --width: defaults to 31rem;\n */\n:host {\n --border-radius: #{$layer-border-radius};\n --content-background: #fafafa;\n --footer-content: #{$color-lightgrey};\n --scrim-color: #{$layer-overlay-dark};\n --box-shadow: #{$layer-shadow-large};\n --close-button-color: #{$color-palegrey};\n --width: 60rem;\n --tint-color: #{$color-blue};\n --body-padding-v: #{$spacing-large};\n --body-padding-h: #{$spacing-large};\n --header-padding-v: #{$spacing-medium};\n --header-padding-h: #{$spacing-large};\n --footer-padding-v: #{$spacing-medium};\n --footer-padding-h: #{$spacing-large};\n}\n\n.dialog {\n $self: &;\n\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: #{$layer-index-modal};\n\n &:not(.dialog--visible) {\n @include hidden;\n }\n\n &__panel {\n display: flex;\n flex-direction: column;\n z-index: 2;\n width: var(--width);\n max-width: calc(100% - #{$spacing-xlarge});\n max-height: calc(92% - #{$spacing-xlarge});\n background-color: var(--content-background);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n opacity: 0;\n transform: scale(0.8);\n transition: #{$transition-fast} opacity, #{$transition-fast} transform;\n overflow: auto;\n\n &:focus {\n outline: none;\n }\n\n .dialog--with-ribbon & {\n border-top: 5px solid var(--tint-color);\n }\n\n .dialog--open & {\n display: flex;\n opacity: 1;\n transform: none;\n }\n\n .dialog--nodismiss & {\n animation: cannotClose 0.25s ease-in-out 1;\n\n @keyframes cannotClose {\n 0% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(1.08);\n }\n\n 100% {\n transform: scale(1);\n }\n }\n }\n }\n\n &__header {\n flex: 0 0 auto;\n display: flex;\n min-width: var(--width);\n width: 100%;\n background-color: var(--content-background);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n transition: #{$transition-xfast} box-shadow;\n\n .dialog--visible & {\n min-width: auto;\n }\n\n [stuck] & {\n box-shadow: #{$layer-shadow-medium};\n }\n }\n\n &__title {\n flex: 1 1 auto;\n font-size: #{$fontsize-large};\n line-height: 1.6;\n padding: var(--header-padding-v) var(--header-padding-h);\n }\n\n & &__close-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: #{$fontsize-xlarge};\n padding: 0 var(--header-padding-h);\n\n --color: var(--close-button-color);\n }\n\n &__body {\n padding: 0 var(--body-padding-h) var(--body-padding-v);\n\n .dialog:not(.dialog--has-header) & {\n padding-top: var(--body-padding-v);\n }\n\n & ::slotted(*) {\n max-width: 100%;\n }\n\n &-wrap {\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n border-radius: var(--border-radius);\n\n .dialog:not(.dialog--has-header) & {\n border-radius: 0 0 inherit inherit;\n }\n\n .dialog:not(.dialog--has-footer) & {\n border-radius: inherit inherit 0 0;\n }\n }\n }\n\n &__footer {\n width: 100%;\n padding: var(--footer-padding-v) var(--footer-padding-h);\n background: var(--footer-content);\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n position: relative;\n top: 1px;\n\n .dialog--visible & {\n min-width: auto;\n }\n\n ::slotted(button) {\n margin-right: #{$spacing-small} !important;\n }\n\n .dialog:not(.dialog--has-footer) & {\n display: none;\n }\n }\n\n &__close-txt {\n color: var(--tint-color);\n border: none;\n text-decoration: underline;\n margin: 0;\n text-underline-offset: 4px;\n background-color: transparent;\n font: inherit;\n -webkit-box-align: center;\n cursor: pointer;\n font-size: #{$fontsize-small};\n padding: 0.5rem;\n border-radius: #{$border-radius-small};\n transition: box-shadow 100ms ease-in-out;\n\n &:focus {\n outline: none;\n box-shadow: #{$control-focus-style};\n }\n }\n\n &__overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n .dialog--open & {\n opacity: 1;\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/details/details.scss?tag=nano-details&encapsulation=shadow","src/components/details/details.tsx"],"names":["detailsCss","Details","exports","class_1","hostRef","_this","this","slideId","slideIds","stateChanging","isLoading","label","open","noHandle","iconRotation","onKeyDown","ev","key","onMouseDown","prototype","toggleClick","show","hide","nanoClosed","emit","displayTransition","contentEl","then","style","height","nanoOpened","contentArea","scrollHeight","resize","readTask","writeTask","componentWillLoad","hasStartSlot","el","querySelector","hasEndSlot","setTimeout","componentDidLoad","connectedCallback","mo","MutationObserver","observe","childList","subtree","attributes","ro","ResizeObserver","disconnectedCallback","disconnect","render","h","Host","class","Object","assign","createColorClasses","color","loaded","aria-controls","aria-expanded","display","transform","name","ref","div","tabindex","id"],"mappings":"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","sourcesContent":["@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/form';\n\n:host {\n /**\n * @prop --padding: Default to 1em;\n\n * @prop --btn-padding: Defaults to var(--padding);\n * @prop --btn-bg-color: Defaults to var(--nano-color-contrast, #dad6d3);\n * @prop --btn-bg-color--open: Defaults to var(--nano-color-base, #dad6d3);\n * @prop --btn-bg-color--hover: Defaults to var(--nano-color-tint, #{$color-offwhite});\n\n * @prop --btn-text-color: Defaults to var(--nano-color-base, #455556);\n * @prop --btn-text-color--open: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n * @prop --btn-text-color--hover: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n\n * @prop --content-bg-color: Defaults to transparent;\n * @prop --content-text-color: Defaults to #455556;\n * @prop --content-transition: Defaults to height .2s ease-out;\n\n * @prop --border-width: Defaults to none;\n * @prop --border-color: Defaults to none;\n * @prop --border-style: Defaults to none;\n * @prop --border-radius: Defaults to none;\n * @prop --box-shadow: Defaults to none;\n * @prop --focus-style: Defaults to #{$control-focus-style}\n */\n\n @include text-inherit();\n\n --padding: 1em;\n --btn-padding: var(--padding);\n --btn-bg-color: var(--nano-color-contrast, #dad6d3);\n --btn-bg-color--open: var(--nano-color-base, #dad6d3);\n --btn-bg-color--hover: var(--nano-color-tint, #{$color-offwhite});\n --btn-text-color: var(--nano-color-base, #455556);\n --btn-text-color--open: var(--nano-color-contrast, var(--btn-text-color));\n --btn-text-color--hover: var(--nano-color-contrast, var(--btn-text-color));\n --content-bg-color: transparent;\n --content-text-color: #455556;\n --content-transition: height 0.2s ease-out;\n --border-width: none;\n --border-color: none;\n --border-style: none;\n --border-radius: none;\n --box-shadow: none;\n --focus-style: #{$control-focus-style};\n\n display: block;\n border-style: var(--border-style);\n border-width: var(--border-width-dims);\n border-color: var(--border-color);\n border-radius: var(--border-radius-dims);\n box-shadow: var(--box-shadow);\n}\n\n:host(:last-of-type) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n --border-radius-dims: 0 0 var(--border-radius) var(--border-radius);\n\n .open .content {\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n }\n}\n\n:host(:first-of-type) {\n --border-radius-dims: var(--border-radius) var(--border-radius) 0 0;\n --border-width-dims: var(--border-width);\n}\n\n:host(:first-of-type:last-of-type) {\n --border-radius-dims: var(--border-radius);\n --border-width-dims: var(--border-width);\n}\n\n:host(:not(:last-of-type):not(:first-of-type)) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n}\n\n:host(.nano-color) {\n --btn-bg-color: var(--nano-color-contrast, #{nano-color(primary, contrast)});\n --btn-bg-color--open: var(--nano-color-base, #{nano-color(primary, base)});\n --btn-bg-color--hover: var(--nano-color-tint, #{nano-color(primary, tint)});\n --btn-text-color: var(--nano-color-base, #{nano-color(primary, base)});\n --btn-text-color--open:\n var(\n --nano-color-contrast,\n #{nano-color(primary, contrast)}\n );\n --btn-text-color--hover:\n var(\n --nano-color-contrast,\n #{nano-color(primary, contrast)}\n );\n}\n\nbutton {\n @include input-cover;\n\n padding: var(--btn-padding);\n text-align: inherit;\n position: relative;\n font-size: 1em;\n margin: 0;\n transition: 0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;\n display: flex;\n align-items: center;\n background: var(--btn-bg-color);\n color: var(--btn-text-color);\n border-radius: var(--border-radius-dims);\n\n &:focus {\n box-shadow: var(--focus-style);\n outline: none;\n position: relative;\n z-index: 1;\n }\n\n :hover & {\n background: var(--btn-bg-color--hover);\n color: var(--btn-text-color--hover);\n }\n\n .open & {\n background: var(--btn-bg-color--open);\n color: var(--btn-text-color--open);\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .label {\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n flex: 1;\n display: inline-block;\n }\n\n .icon {\n line-height: 0;\n flex-direction: column;\n justify-content: center;\n display: inline-block;\n color: currentColor;\n transition: 0.3s ease transform;\n transform-origin: center;\n\n &--start {\n @include margin(0, var(--padding), 0, 0);\n }\n\n &--end {\n @include margin(0, 0, 0, var(--padding));\n }\n\n ::slotted(nano-icon) {\n --color: 'currentColor';\n }\n }\n}\n\n.content {\n color: var(--content-text-color);\n background: var(--content-bg-color);\n height: 0;\n overflow: hidden;\n transition: 0.2s ease border-radius;\n outline: none;\n\n .loaded & {\n transition: var(--content-transition), 0.2s ease border-radius;\n }\n\n > * {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n\n .open & {\n opacity: 1;\n }\n }\n\n &__area {\n padding: var(--padding);\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n Prop,\n h,\n Element,\n Watch,\n Host,\n State,\n writeTask,\n readTask,\n} from '@stencil/core';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Color } from '../../interface';\nimport { createColorClasses } from '../../utils/theme';\nimport { testLegacyStyle, displayTransition } from '../../utils';\n\n/**\n * A simple element used to hide or reveal more content with slide effect. Can be used independently or nested within a [accordion](story/components-accordion--accordion) element to add 'one item open at a time' support.\n */\n/**\n * @slot - content that will be hidden / revealed\n * @slot icon-start - used for icons at the start of the handle\n * @slot label - can be used when you wish to insert complex label markup\n * @slot icon-end - used for icons at the end of the handle\n */\n@Component({\n tag: 'nano-details',\n styleUrl: 'details.scss',\n shadow: true,\n})\nexport class Details {\n private hasStartSlot: boolean;\n private hasEndSlot: boolean;\n private slideId = `nano-details-${slideIds++}`;\n private mo?: MutationObserver;\n private ro?: ResizeObserver;\n private contentArea: HTMLDivElement;\n private stateChanging: boolean = false;\n\n @State() isLoading = true;\n\n @Element() private el: HTMLNanoDetailsElement;\n\n private contentEl: HTMLElement;\n\n /**\n * Button / handle text to be used if no complex markup required.\n * Otherwise use label slot.\n */\n @Prop() label: string = '';\n\n /**\n * Should item be open on load\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Have no handle - you will need to control the hiding / showing of content with script\n */\n @Prop() noHandle: boolean = false;\n\n /**\n * Icon slot rotation amount (degrees) on open\n */\n @Prop() iconRotation: number = 90;\n\n /**\n * Color to use from your application's color palette.\n */\n @Prop() color?: Color;\n\n /**\n * Emitted when the component opens.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoOpened: EventEmitter;\n\n /**\n * Emitted when the component closes.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoClosed: EventEmitter;\n\n @Watch('open')\n toggleClick() {\n this.stateChanging = true;\n if (this.open) this.show();\n else this.hide();\n }\n\n private onKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.open = !this.open;\n break;\n }\n };\n\n private onMouseDown = () => {\n if (this.stateChanging) return;\n this.open = !this.open;\n };\n\n private hide() {\n this.nanoClosed.emit(this.open);\n displayTransition(this.contentEl, 'is-shown', false).then(\n () => (this.stateChanging = false)\n );\n this.contentEl.style.height = '0px';\n }\n\n private show() {\n this.nanoOpened.emit();\n displayTransition(this.contentEl, 'is-shown', true).then(\n () => (this.stateChanging = false)\n );\n this.contentEl.style.height = this.contentArea.scrollHeight + 'px';\n }\n\n private resize() {\n if (\n !this.open ||\n !this.contentArea ||\n !this.contentEl ||\n this.stateChanging\n )\n return;\n readTask(() => {\n if (this.contentArea.scrollHeight > 0) {\n writeTask(() => {\n // this.contentEl.style.transition = 'none';\n this.contentEl.style.height = this.contentArea.scrollHeight + 'px';\n // this.contentEl.style.transition = '';\n });\n }\n });\n }\n\n componentWillLoad() {\n this.hasStartSlot = !!this.el.querySelector('[slot=\"icon-start\"]');\n this.hasEndSlot = !!this.el.querySelector('[slot=\"icon-end\"]');\n setTimeout(() => {\n this.isLoading = false;\n }, 100);\n }\n\n componentDidLoad() {\n if (this.open) {\n // disable animation on start\n setTimeout(() => {\n this.show();\n }, 0);\n }\n }\n\n connectedCallback() {\n testLegacyStyle(this.el);\n const mo = (this.mo = new MutationObserver(() => this.resize()));\n mo.observe(this.el, { childList: true, subtree: true, attributes: true });\n\n const ro = (this.ro = new ResizeObserver(() => this.resize()));\n ro.observe(this.el);\n }\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n if (this.ro) this.ro.disconnect();\n }\n\n render() {\n return (\n <Host class={{ ...createColorClasses(this.color) }}>\n <div\n class={{\n open: this.open,\n loaded: !this.isLoading,\n }}\n >\n <button\n onKeyDown={this.onKeyDown}\n onMouseDown={this.onMouseDown}\n aria-controls={this.slideId}\n aria-expanded={this.open ? 'true' : 'false'}\n style={{ display: this.noHandle ? 'none' : '' }}\n >\n {this.hasStartSlot ? (\n <span\n class=\"icon icon--start\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-start\" />\n </span>\n ) : (\n ''\n )}\n <div class=\"label\">\n {this.label ? this.label : <slot name=\"label\" />}\n </div>\n {this.hasEndSlot ? (\n <span\n class=\"icon icon--end\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-end\" />\n </span>\n ) : (\n ''\n )}\n </button>\n <div\n class=\"content\"\n ref={(div) => (this.contentEl = div)}\n tabindex=\"-1\"\n id={this.slideId}\n >\n <div ref={(div) => (this.contentArea = div)} class=\"content__area\">\n <slot />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n\nlet slideIds = 0;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["node_modules/stencil-wormhole/dist/esm/universe.js","node_modules/squirrelly/dist/browser/squirrelly.min.js","src/utils/template.ts","src/utils/promise-queue.ts","src/components/algolia/algolia.scss?tag=nano-algolia&encapsulation=shadow","src/components/algolia/algolia.tsx"],"names":["multiverse","Map","updateConsumer","_a","state","updater","fields","forEach","field","Universe","children","creator","getRenderingRef","has","universe","get","wormholes","opening","e","t","n","r","a","Error","prototype","Object","setPrototypeOf","__proto__","slice","split","i","length","s","Array","join","create","name","value","enumerable","Function","Promise","SyntaxError","hasOwnProperty","call","c","o","l","f","u","p","test","replace","h","rmWhitespace","lastIndex","prefixes","b","reduce","RegExp","tags","d","g","v","m","trim","raw","async","push","search","exec","y","x","w","F","S","index","I","indexOf","autoTrim","isArray","String","trimLeft","trimRight","R","T","plugins","processAST","useWith","varName","processFnString","res","defaultFilter","autoEscape","storage","nativeHelpers","this","cache","define","remove","reset","load","&","<",">","\"","'","each","params","then","foreach","keys","include","templates","extends","content","useScope","if","try","block","E","j","helpers","filters","H","bind","O","message","_","compile","compileScope","compileScopeIntoFunction","compileToString","defaultConfig","getConfig","parse","render","defineProperty","exports","squirrel","str","options","year","month","day","Date","parseInt","toLocaleDateString","format","date","getDate","toString","getMonth","getFullYear","map","val","toUpperCase","charAt","substr","result","domain","domains","origin","found","find","dm","match","location","protocol","toLowerCase","Squirrel","PromiseQueue","[object Object]","queue","workingOnPromise","stop","limit","promise","resolve","reject","dequeue","item","shift","catch","err","pendingPromise","CANSHADOW","document","head","attachShadow","Algolia","hostRef","staticFacetFilters","dynFacetFilters","hasLoadSlot","placedAlgoliaEles","promiseQueue","_dynFacetFilters","indeces","filterChanged","changeEvent","SearchChangeEvent","Init","isLoading","wormholeState","showResults","resultsPage","searchIndex","searchIndexName","listenTo","query","operator","tplEngine","tplRenderFn","replicaIndex","browseIndex","minChars","storeMethod","searchChange","algoliaIndex","handleSearchReset","setTimeout","resetPage","algoliaSearch","updateContent","nanoResultsShown","emit","indexResults","makeAppliedFilters","appliedFtrs","makeAppliedFilter","facetFilters","values","filter","appFilter","facetName","eventType","enqueue","queueSearch","nanoBeforeQuery","clearAllFacetFilters","searchParams","algoliaFilterStr","page","currentPage","facets","hitsPerPage","fixDomain","totalHits","nbHits","origFilters","legacy","totalHitsWithFilters","results","totalPages","appliedFilters","indexName","dynFilters","hits","nbPages","Page","Replica","nanoAfterQuery","currentHits","handleInputChange","ev","target","inputField","onResultDisplay","writeTask","resultsDiv","removeEventListener","defaultDiv","style","display","classList","add","minHeight","width","facetValue","filterId","element","stopPropagation","detail","Math","min","max","dynFilterObj","assign","Filter","host","ownerDocument","algoliaClient","initIndex","onPageChange","appId","apiKey","algoliasearch","querySelector","attachInputListener","scrollWidth","scrollHeight","addEventListener","slottedInput","focus","preventScroll","hit","url","facetFilterObj","groupFilters","filterOp","or","and","not","formatVal","operatorGrp","filterName","filterStrParts","filterProp","toLocaleUpperCase","setup","eventName","tagName","toLocaleLowerCase","updateContentQueue","outputTo","outputSlot","tpl","tmpCont","createElement","innerHTML","algoliaEles","from","querySelectorAll","el","placeholder","dataset","placeholderId","parentNode","replaceChild","childrenResolver","ele","readTask","tplSlot","getDirectChildren","HTMLInputElement","searchIndexNameChange","initAlgoliaClient","initAlgoliaIndex","initialState","getElement","set","connectedCallback","disconnectedCallback","delete","event","consumer","onOpen","connectedCallback_1","disconnectedCallback_1","storeId","ComponentStore","init","internalIndexSwitch","debounce","browseIndexChange","dispatchEvent","CustomEvent","globalStoreMethod","Host","class","show-results","is-loading","aria-busy","hidden","loader","loading","overlay","type","aria-live","ref","div","tabindex"],"mappings":"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","sourcesContent":["import { getElement, getRenderingRef } from \"@stencil/core\";\nvar multiverse = new Map();\nvar updateConsumer = function (_a, state) {\n var fields = _a.fields, updater = _a.updater;\n fields.forEach(function (field) { updater(field, state[field]); });\n};\nexport var Universe = {\n create: function (creator, initialState) {\n var el = getElement(creator);\n var wormholes = new Map();\n var universe = { wormholes: wormholes, state: initialState };\n multiverse.set(creator, universe);\n var connectedCallback = creator.connectedCallback;\n creator.connectedCallback = function () {\n multiverse.set(creator, universe);\n if (connectedCallback) {\n connectedCallback.call(creator);\n }\n };\n var disconnectedCallback = creator.disconnectedCallback;\n creator.disconnectedCallback = function () {\n multiverse.delete(creator);\n if (disconnectedCallback) {\n disconnectedCallback.call(creator);\n }\n };\n el.addEventListener('openWormhole', function (event) {\n event.stopPropagation();\n var _a = event.detail, consumer = _a.consumer, onOpen = _a.onOpen;\n if (wormholes.has(consumer))\n return;\n if (typeof consumer !== 'symbol') {\n var connectedCallback_1 = consumer.connectedCallback, disconnectedCallback_1 = consumer.disconnectedCallback;\n consumer.connectedCallback = function () {\n wormholes.set(consumer, event.detail);\n if (connectedCallback_1) {\n connectedCallback_1.call(consumer);\n }\n };\n consumer.disconnectedCallback = function () {\n wormholes.delete(consumer);\n if (disconnectedCallback_1) {\n disconnectedCallback_1.call(consumer);\n }\n };\n }\n wormholes.set(consumer, event.detail);\n updateConsumer(event.detail, universe.state);\n onOpen === null || onOpen === void 0 ? void 0 : onOpen.resolve(function () { wormholes.delete(consumer); });\n });\n el.addEventListener('closeWormhole', function (event) {\n var consumer = event.detail;\n wormholes.delete(consumer);\n });\n },\n Provider: function (_a, children) {\n var state = _a.state;\n var creator = getRenderingRef();\n if (multiverse.has(creator)) {\n var universe = multiverse.get(creator);\n universe.state = state;\n universe.wormholes.forEach(function (opening) { updateConsumer(opening, state); });\n }\n return children;\n }\n};\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).Sqrl={})}(this,(function(e){\"use strict\";function t(e){var n,r,a=new Error(e);return n=a,r=t.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,a}function n(e,n,r){var a=n.slice(0,r).split(/\\n/),i=a.length,s=a[i-1].length+1;throw t(e+=\" at line \"+i+\" col \"+s+\":\\n\\n \"+n.split(/\\n/)[i-1]+\"\\n \"+Array(s).join(\" \")+\"^\")}t.prototype=Object.create(Error.prototype,{name:{value:\"Squirrelly Error\",enumerable:!1}});var r=new Function(\"return this\")().Promise,a=!1;try{a=new Function(\"return (async function(){}).constructor\")()}catch(e){if(!(e instanceof SyntaxError))throw e}function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function s(e,t,n){for(var r in t)i(t,r)&&(null==t[r]||\"object\"!=typeof t[r]||\"storage\"!==r&&\"prefixes\"!==r||n?e[r]=t[r]:e[r]=s({},t[r]));return e}var c=/^async +/,o=/`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\\${)[^\\\\`])*`/g,l=/'(?:\\\\[\\s\\w\"'\\\\`]|[^\\n\\r'\\\\])*?'/g,f=/\"(?:\\\\[\\s\\w\"'\\\\`]|[^\\n\\r\"\\\\])*?\"/g,u=/[.*+\\-?^${}()|[\\]\\\\]/g;function p(e){return u.test(e)?e.replace(u,\"\\\\$&\"):e}function h(e,r){r.rmWhitespace&&(e=e.replace(/[\\r\\n]+/g,\"\\n\").replace(/^\\s+|\\s+$/gm,\"\")),o.lastIndex=0,l.lastIndex=0,f.lastIndex=0;var a=r.prefixes,i=[a.h,a.b,a.i,a.r,a.c,a.e].reduce((function(e,t){return e&&t?e+\"|\"+p(t):t?p(t):e}),\"\"),s=new RegExp(\"([|()]|=>)|('|\\\"|`|\\\\/\\\\*)|\\\\s*((\\\\/)?(-|_)?\"+p(r.tags[1])+\")\",\"g\"),u=new RegExp(\"([^]*?)\"+p(r.tags[0])+\"(-|_)?\\\\s*(\"+i+\")?\\\\s*\",\"g\"),h=0,d=!1;function g(t,a){var i,p={f:[]},g=0,v=\"c\";function m(t){var a=e.slice(h,t),i=a.trim();if(\"f\"===v)\"safe\"===i?p.raw=!0:r.async&&c.test(i)?(i=i.replace(c,\"\"),p.f.push([i,\"\",!0])):p.f.push([i,\"\"]);else if(\"fp\"===v)p.f[p.f.length-1][1]+=i;else if(\"err\"===v){if(i){var s=a.search(/\\S/);n(\"invalid syntax\",e,h+s)}}else p[v]=i;h=t+1}for(\"h\"===a||\"b\"===a||\"c\"===a?v=\"n\":\"r\"===a&&(p.raw=!0,a=\"i\"),s.lastIndex=h;null!==(i=s.exec(e));){var y=i[1],x=i[2],b=i[3],w=i[4],F=i[5],S=i.index;if(y)\"(\"===y?(0===g&&(\"n\"===v?(m(S),v=\"p\"):\"f\"===v&&(m(S),v=\"fp\")),g++):\")\"===y?0===--g&&\"c\"!==v&&(m(S),v=\"err\"):0===g&&\"|\"===y?(m(S),v=\"f\"):\"=>\"===y&&(m(S),h+=1,v=\"res\");else if(x){if(\"/*\"===x){var I=e.indexOf(\"*/\",s.lastIndex);-1===I&&n(\"unclosed comment\",e,i.index),s.lastIndex=I+2}else if(\"'\"===x){l.lastIndex=i.index,l.exec(e)?s.lastIndex=l.lastIndex:n(\"unclosed string\",e,i.index)}else if('\"'===x){f.lastIndex=i.index,f.exec(e)?s.lastIndex=f.lastIndex:n(\"unclosed string\",e,i.index)}else if(\"`\"===x){o.lastIndex=i.index,o.exec(e)?s.lastIndex=o.lastIndex:n(\"unclosed string\",e,i.index)}}else if(b)return m(S),h=S+i[0].length,u.lastIndex=h,d=F,w&&\"h\"===a&&(a=\"s\"),p.t=a,p}return n(\"unclosed tag\",e,t),p}var v=function i(s,o){s.b=[],s.d=[];var l,f=!1,p=[];function v(e,t){e&&(e=function(e,t,n,r){var a,i;return\"string\"==typeof t.autoTrim?a=i=t.autoTrim:Array.isArray(t.autoTrim)&&(a=t.autoTrim[1],i=t.autoTrim[0]),(n||!1===n)&&(a=n),(r||!1===r)&&(i=r),\"slurp\"===a&&\"slurp\"===i?e.trim():(\"_\"===a||\"slurp\"===a?e=String.prototype.trimLeft?e.trimLeft():e.replace(/^[\\s\\uFEFF\\xA0]+/,\"\"):\"-\"!==a&&\"nl\"!==a||(e=e.replace(/^(?:\\n|\\r|\\r\\n)/,\"\")),\"_\"===i||\"slurp\"===i?e=String.prototype.trimRight?e.trimRight():e.replace(/[\\s\\uFEFF\\xA0]+$/,\"\"):\"-\"!==i&&\"nl\"!==i||(e=e.replace(/(?:\\n|\\r|\\r\\n)$/,\"\")),e)}(e,r,d,t))&&(e=e.replace(/\\\\|'/g,\"\\\\$&\").replace(/\\r\\n|\\n|\\r/g,\"\\\\n\"),p.push(e))}for(;null!==(l=u.exec(e));){var m,y=l[1],x=l[2],b=l[3]||\"\";for(var w in a)if(a[w]===b){m=w;break}v(y,x),h=l.index+l[0].length,m||n(\"unrecognized tag type: \"+b,e,h);var F=g(l.index,m),S=F.t;if(\"h\"===S){var I=F.n||\"\";r.async&&c.test(I)&&(F.a=!0,F.n=I.replace(c,\"\")),F=i(F),p.push(F)}else if(\"c\"===S){if(s.n===F.n)return f?(f.d=p,s.b.push(f)):s.d=p,s;n(\"Helper start and end don't match\",e,l.index+l[0].length)}else if(\"b\"===S){f?(f.d=p,s.b.push(f)):s.d=p;var R=F.n||\"\";r.async&&c.test(R)&&(F.a=!0,F.n=R.replace(c,\"\")),f=F,p=[]}else if(\"s\"===S){var T=F.n||\"\";r.async&&c.test(T)&&(F.a=!0,F.n=T.replace(c,\"\")),p.push(F)}else p.push(F)}if(!o)throw t('unclosed helper \"'+s.n+'\"');return v(e.slice(h,e.length),!1),s.d=p,s}({f:[]},!0);if(r.plugins)for(var m=0;m<r.plugins.length;m++){var y=r.plugins[m];y.processAST&&(v.d=y.processAST(v.d,r))}return v.d}function d(e,t){var n=h(e,t),r=\"var tR='';\"+(t.useWith?\"with(\"+t.varName+\"||{}){\":\"\")+x(n,t)+\"if(cb){cb(null,tR)} return tR\"+(t.useWith?\"}\":\"\");if(t.plugins)for(var a=0;a<t.plugins.length;a++){var i=t.plugins[a];i.processFnString&&(r=i.processFnString(r,t))}return r}function g(e,t){for(var n=0;n<t.length;n++){var r=t[n][0],a=t[n][1];e=(t[n][2]?\"await \":\"\")+\"c.l('F','\"+r+\"')(\"+e,a&&(e+=\",\"+a),e+=\")\"}return e}function v(e,t,n,r,a,i){var s=\"{exec:\"+(a?\"async \":\"\")+y(n,t,e)+\",params:[\"+r+\"]\";return i&&(s+=\",name:'\"+i+\"'\"),a&&(s+=\",async:true\"),s+=\"}\"}function m(e,t){for(var n=\"[\",r=0;r<e.length;r++){var a=e[r];n+=v(t,a.res||\"\",a.d,a.p||\"\",a.a,a.n),r<e.length&&(n+=\",\")}return n+=\"]\"}function y(e,t,n){return\"function(\"+t+\"){var tR='';\"+x(e,n)+\"return tR}\"}function x(e,t){for(var n=0,r=e.length,a=\"\";n<r;n++){var i=e[n];if(\"string\"==typeof i){a+=\"tR+='\"+i+\"';\"}else{var s=i.t,c=i.c||\"\",o=i.f,l=i.n||\"\",f=i.p||\"\",u=i.res||\"\",p=i.b,h=!!i.a;if(\"i\"===s){t.defaultFilter&&(c=\"c.l('F','\"+t.defaultFilter+\"')(\"+c+\")\");var d=g(c,o);!i.raw&&t.autoEscape&&(d=\"c.l('F','e')(\"+d+\")\"),a+=\"tR+=\"+d+\";\"}else if(\"h\"===s)if(t.storage.nativeHelpers.get(l))a+=t.storage.nativeHelpers.get(l)(i,t);else{var y=(h?\"await \":\"\")+\"c.l('H','\"+l+\"')(\"+v(t,u,i.d,f,h);y+=p?\",\"+m(p,t):\",[]\",a+=\"tR+=\"+g(y+=\",c)\",o)+\";\"}else\"s\"===s?a+=\"tR+=\"+g((h?\"await \":\"\")+\"c.l('H','\"+l+\"')({params:[\"+f+\"]},[],c)\",o)+\";\":\"e\"===s&&(a+=c+\"\\n\")}}return a}var b=function(){function e(e){this.cache=e}return e.prototype.define=function(e,t){this.cache[e]=t},e.prototype.get=function(e){return this.cache[e]},e.prototype.remove=function(e){delete this.cache[e]},e.prototype.reset=function(){this.cache={}},e.prototype.load=function(e){s(this.cache,e,!0)},e}();function w(e,n,r,a){if(n&&n.length>0)throw t((a?\"Native\":\"\")+\"Helper '\"+e+\"' doesn't accept blocks\");if(r&&r.length>0)throw t((a?\"Native\":\"\")+\"Helper '\"+e+\"' doesn't accept filters\")}var F={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"};function S(e){return F[e]}var I=new b({}),R=new b({each:function(e,t){var n=\"\",r=e.params[0];if(w(\"each\",t,!1),e.async)return new Promise((function(t){!function e(t,n,r,a,i){r(t[n],n).then((function(s){a+=s,n===t.length-1?i(a):e(t,n+1,r,a,i)}))}(r,0,e.exec,n,t)}));for(var a=0;a<r.length;a++)n+=e.exec(r[a],a);return n},foreach:function(e,t){var n=e.params[0];if(w(\"foreach\",t,!1),e.async)return new Promise((function(t){!function e(t,n,r,a,i,s){a(n[r],t[n[r]]).then((function(c){i+=c,r===n.length-1?s(i):e(t,n,r+1,a,i,s)}))}(n,Object.keys(n),0,e.exec,\"\",t)}));var r=\"\";for(var a in n)i(n,a)&&(r+=e.exec(a,n[a]));return r},include:function(e,n,r){w(\"include\",n,!1);var a=r.storage.templates.get(e.params[0]);if(!a)throw t('Could not fetch template \"'+e.params[0]+'\"');return a(e.params[1],r)},extends:function(e,n,r){var a=e.params[1]||{};a.content=e.exec();for(var i=0;i<n.length;i++){var s=n[i];a[s.name]=s.exec()}var c=r.storage.templates.get(e.params[0]);if(!c)throw t('Could not fetch template \"'+e.params[0]+'\"');return c(a,r)},useScope:function(e,t){return w(\"useScope\",t,!1),e.exec(e.params[0])}}),T=new b({if:function(e,t){w(\"if\",!1,e.f,!0);var n=\"if(\"+e.p+\"){\"+x(e.d,t)+\"}\";if(e.b)for(var r=0;r<e.b.length;r++){var a=e.b[r];\"else\"===a.n?n+=\"else{\"+x(a.d,t)+\"}\":\"elif\"===a.n&&(n+=\"else if(\"+a.p+\"){\"+x(a.d,t)+\"}\")}return n},try:function(e,n){if(w(\"try\",!1,e.f,!0),!e.b||1!==e.b.length||\"catch\"!==e.b[0].n)throw t(\"native helper 'try' only accepts 1 block, 'catch'\");var r=\"try{\"+x(e.d,n)+\"}\",a=e.b[0];return r+=\"catch\"+(a.res?\"(\"+a.res+\")\":\"\")+\"{\"+x(a.d,n)+\"}\"},block:function(e,t){return w(\"block\",e.b,e.f,!0),\"if(!\"+t.varName+\"[\"+e.p+\"]){tR+=(\"+y(e.d,\"\",t)+\")()}else{tR+=\"+t.varName+\"[\"+e.p+\"]}\"}}),E=new b({e:function(e){var t=String(e);return/[&<>\"']/.test(t)?t.replace(/[&<>\"']/g,S):t}}),j={varName:\"it\",autoTrim:[!1,\"nl\"],autoEscape:!0,defaultFilter:!1,tags:[\"{{\",\"}}\"],l:function(e,n){if(\"H\"===e){var r=this.storage.helpers.get(n);if(r)return r;throw t(\"Can't find helper '\"+n+\"'\")}if(\"F\"===e){var a=this.storage.filters.get(n);if(a)return a;throw t(\"Can't find filter '\"+n+\"'\")}},async:!1,storage:{helpers:R,nativeHelpers:T,filters:E,templates:I},prefixes:{h:\"@\",b:\"#\",i:\"\",r:\"*\",c:\"/\",e:\"!\"},cache:!1,plugins:[],useWith:!1};function H(e,t){var n={};return s(n,j),t&&s(n,t),e&&s(n,e),n.l.bind(n),n}function O(e,n){var r=H(n||{}),i=Function;if(r.async){if(!a)throw t(\"This environment doesn't support async/await\");i=a}try{return new i(r.varName,\"c\",\"cb\",d(e,r))}catch(n){throw n instanceof SyntaxError?t(\"Bad template syntax\\n\\n\"+n.message+\"\\n\"+Array(n.message.length+1).join(\"=\")+\"\\n\"+d(e,r)):n}}function _(e,t){var n;return t.cache&&t.name&&t.storage.templates.get(t.name)?t.storage.templates.get(t.name):(n=\"function\"==typeof e?e:O(e,t),t.cache&&t.name&&t.storage.templates.define(t.name,n),n)}j.l.bind(j),e.compile=O,e.compileScope=x,e.compileScopeIntoFunction=y,e.compileToString=d,e.defaultConfig=j,e.filters=E,e.getConfig=H,e.helpers=R,e.nativeHelpers=T,e.parse=h,e.render=function(e,n,a,i){var s=H(a||{});if(!s.async)return _(e,s)(n,s);if(!i){if(\"function\"==typeof r)return new r((function(t,r){try{t(_(e,s)(n,s))}catch(e){r(e)}}));throw t(\"Please provide a callback function, this env doesn't support Promises\")}try{_(e,s)(n,s,i)}catch(e){return i(e)}},e.templates=I,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n//# sourceMappingURL=squirrelly.min.js.map\n","import { IndexResult, AlgoliaResultHit } from '../interface';\nimport * as Sqrl from 'squirrelly';\n\nconst squirrel = Sqrl;\n\nsquirrel.filters.define(\n 'date_long',\n (\n str: string,\n options: {\n year: 'numeric' | '2-digit';\n month: 'numeric' | '2-digit' | 'long';\n day: 'numeric' | '2-digit';\n } = { year: 'numeric', month: 'long', day: 'numeric' }\n ) => {\n if (!str) return;\n let date = new Date(parseInt(str) * 1000);\n str = date.toLocaleDateString('en-GB', options);\n return str;\n }\n);\n\nsquirrel.filters.define(\n 'date_short',\n (str: string, format: string = 'd/m/y') => {\n if (!str) return;\n let date = new Date(parseInt(str) * 1000);\n str = format.replace(/(d)/, date.getDate().toString());\n str = str.replace(/(m)/, (date.getMonth() + 1).toString());\n str = str.replace(/(y)/, date.getFullYear().toString());\n return str;\n }\n);\n\nsquirrel.filters.define('public_name', (str: string) => {\n if (!str) return;\n str = str\n .split('_')\n .map((val) => {\n return val.length < 3 ? val.toUpperCase() : val;\n })\n .join(' ');\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\n\nsquirrel.filters.define('trim_to', (str: string, length: number = 100) => {\n if (!str) return;\n if (str.length <= length) return str;\n return str.substr(0, length) + '...';\n});\n\nsquirrel.filters.define('classname', (str: string) => {\n if (!str) return;\n return str.replace(/[\\W]+/g, '');\n});\n\nsquirrel.filters.define(\n 'abs_url',\n (str: string, index: IndexResult = null, result?: AlgoliaResultHit) => {\n if (!index) return str;\n if (!str) return;\n\n let domain = undefined;\n if (index.domains && result && result.origin) {\n let found = index.domains.find((dm) => dm.origin === result.origin);\n domain = found ? found.domain : '';\n } else if (index.domain) domain = index.domain;\n\n if (!domain) return str;\n return str.match(/^http/) ? str : location.protocol + '//' + domain + str;\n }\n);\n\nsquirrel.filters.define(\n 'replace',\n (str: string, search?: string, replace?: string) =>\n str.replace(search, replace)\n);\nsquirrel.filters.define('remove_spaces', (str: string) =>\n str.replace(/ /g, '_')\n);\nsquirrel.filters.define(\n 'add_spaces',\n (str: string) => (str = str.replace(/[_\\-]/g, ' '))\n);\nsquirrel.filters.define(\n 'capitalise',\n (str: string) => (str = str.charAt(0).toUpperCase() + str.slice(1))\n);\nsquirrel.filters.define(\n 'lowercase',\n (str: string) => (str = str.toLowerCase())\n);\n\nexport const Squirrel = squirrel;\n","export class PromiseQueue {\n public queue = [];\n private workingOnPromise = false;\n static pendingPromise = false;\n public stop = false;\n public limit = null;\n\n public enqueue(promise: () => Promise<unknown>) {\n return new Promise((resolve, reject) => {\n this.queue.push({\n promise,\n resolve,\n reject,\n });\n this.dequeue();\n });\n }\n\n public dequeue() {\n if (this.workingOnPromise) {\n return false;\n }\n if (this.stop) {\n this.queue = [];\n this.stop = false;\n return;\n }\n const item = this.queue.shift();\n if (!item) {\n return false;\n }\n try {\n this.workingOnPromise = true;\n item\n .promise()\n .then((value) => {\n this.workingOnPromise = false;\n item.resolve(value);\n this.dequeue();\n })\n .catch((err) => {\n this.workingOnPromise = false;\n item.reject(err);\n this.dequeue();\n });\n } catch (err) {\n this.workingOnPromise = false;\n item.reject(err);\n this.dequeue();\n }\n return true;\n }\n}\n",":host {\n position: relative;\n display: block;\n\n ::slotted([slot='search-template']),\n &::slotted([slot='search-template']) {\n display: none !important;\n }\n}\n\n.loader {\n opacity: 0;\n position: fixed;\n height: 100%;\n width: 100%;\n min-height: 100%;\n max-height: 100vh !important;\n max-width: 100vw !important;\n left: 0;\n top: 0;\n z-index: -10;\n font-size: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: opacity 0.2s ease, z-index 0.01s ease 0.2s;\n\n &.loading {\n opacity: 1;\n z-index: 10;\n transition: z-index 0.01s ease, opacity 0.2s ease 0.01s;\n }\n}\n\n.default {\n height: 100%;\n\n &:focus {\n outline: none;\n }\n}\n\n.results {\n opacity: 0;\n outline: none;\n overflow: auto;\n transition:\n transform 0.3s ease,\n opacity 0.3s ease,\n visibility 0.01s ease 0.3s,\n z-index 0.01s ease 0.3s;\n transform: translate(0, 100px);\n visibility: hidden;\n z-index: -1;\n position: absolute;\n top: 0;\n left: 0;\n display: none;\n\n &-container {\n position: relative;\n }\n\n &.show {\n transition:\n z-index 0.01s ease,\n visibility 0.01s ease,\n transform 0.3s ease 0.01s,\n opacity 0.3s ease 0.01s;\n transform: translate(0, 0);\n visibility: visible;\n opacity: 1;\n z-index: 10;\n overflow: hidden;\n }\n\n &.shown {\n height: auto !important;\n width: auto !important;\n display: block;\n position: static;\n transform: none;\n z-index: auto;\n visibility: inherit;\n opacity: initial;\n }\n}\n","import {\n Component,\n h,\n Element,\n Host,\n Prop,\n Watch,\n State,\n Listen,\n Method,\n EventEmitter,\n Event,\n Build,\n writeTask,\n ComponentInterface,\n readTask,\n} from '@stencil/core';\nimport {\n AlgoliaMultiResult,\n IndexResult,\n AlgoliaResultHit,\n FilterChangeEventDetail,\n PageChangeEventDetail,\n AppliedFilter,\n AlgoliaFacet,\n SearchIndex,\n} from '../../interface';\nimport { Universe, SearchChangeEvent } from './algolia-data';\nimport { debounce, getDirectChildren } from '../../utils';\nimport algoliasearch, {\n SearchClient as AlgoliaClient,\n SearchIndex as AlgoliaIndex,\n} from 'algoliasearch';\nimport { Squirrel } from '../../utils/template';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\nimport { PromiseQueue } from '../../utils/promise-queue';\n\ninterface FacetFilterQueryBlock {\n or: Array<string>;\n and: Array<string>;\n not: Array<string>;\n name: string;\n}\ninterface FacetFilter extends FilterChangeEventDetail {\n element: HTMLNanoAlgoliaFilterElement;\n}\ntype FilterGroup = { [prop: string]: FacetFilter };\n\nconst CANSHADOW = !!document.head.attachShadow;\n\n/**\n * Algolia search container to contain and sync nano-algolia-results and nano-algolia-filter components.\n * Can optionally contain nano-algolia-input components or use them as a 'resultsEmitter'\n * @slot search-input - optional. Should contain an algolia-input component.\n * @slot loader - optional. Elements to show when search results are loading.\n * @slot template - optional. Template string (format depends on 'tplEngine' property). May contain other algolia-... components with nested templates.\n * @slot output - Search result output. Will be a placeholder for template output or optionally nest algolia-... components.\n */\n@Component({\n tag: 'nano-algolia',\n shadow: true,\n styleUrl: 'algolia.scss',\n})\nexport class Algolia implements ComponentInterface {\n // filters that have an initial value\n private staticFacetFilters: FilterGroup = {};\n private dynFacetFilters: FilterGroup = {};\n private tplSlot: HTMLElement;\n private outputSlot: HTMLElement;\n private slottedInput: HTMLElement;\n private hasLoadSlot: boolean = false;\n private resultsDiv: HTMLDivElement;\n private defaultDiv: HTMLDivElement;\n private tpl: string;\n private facets: AlgoliaFacet;\n private placedAlgoliaEles: Element[] = [];\n private algoliaClient: AlgoliaClient;\n // lots of stuff happens asynchronously. This makes sure they fire in the corrent order\n private promiseQueue = new PromiseQueue();\n\n @Element() host: HTMLNanoAlgoliaElement;\n\n // Internal state\n\n // filters that change via a template. They have no initial value\n @State() _dynFacetFilters: FilterGroup = {};\n @State() inputField: HTMLNanoInputElement | HTMLInputElement;\n @State() algoliaIndex: AlgoliaIndex;\n @State() indeces: IndexResult[] = [];\n @State() resultsEmitterEle: HTMLElement;\n @State() indexResults: IndexResult;\n @State() filterChanged: string = '';\n @State() currentHits: AlgoliaResultHit[];\n @State() changeEvent: SearchChangeEvent = SearchChangeEvent.Init;\n @State() isLoading: boolean = false;\n @State() wormholeState: any = this;\n\n // Public props\n\n /**\n * Show the result panel. By default it will automatically show when the result receives new hits.\n */\n @Prop({ mutable: true }) showResults: boolean = false;\n\n /**\n * The current algolia page of results currently being viewed or to get.\n */\n @Prop({ mutable: true }) resultsPage: number = 0;\n\n /**\n * An Algolia App ID key. Used in conjunction with 'searchIndex' & 'apiKey'.\n */\n @Prop() appId: string;\n\n /**\n * An Algolia API Key. Used in conjunction with 'searchIndex' & 'appId'.\n */\n @Prop() apiKey: string;\n\n /**\n * Algolia search index. Used in conjunction with 'apiKey' & 'appId'.\n * ```\n * { index: string, // algolia index name\n * domain?: string, // used in template filters to resolve incomplete url fields\n * filters?: [string], // algolia facets to retrive\n * hitsPerPage?: number,\n * name?: string // human readable index name\n * }\n * ```\n */\n @Prop() searchIndex: SearchIndex = {} as SearchIndex;\n\n /**\n * Algolia search index name. Alternative to 'searchIndex'.\n * A simplified shortcut for setting an index.\n * Properties such as hitsPerPage and facets will come from the algolia index\n */\n @Prop({ mutable: true }) searchIndexName: string = '';\n\n /**\n * JS querSelector string of a `nano-input` / `input` element from which\n * to listen to `nano-change` or `change` events and change the `query` prop.\n * Not required if an appropriate field is in the 'search-input' slot\n */\n @Prop() listenTo?: string = null;\n\n /**\n * The query string used to search the index. Will automtically be set with any slotted\n * `search-input` input elements or from elements linked to from `listen-to`\n */\n @Prop({ mutable: true }) query: string = '';\n\n /**\n * The external operator joining filter values.\n */\n @Prop() operator: 'or' | 'and' = 'and';\n\n /**\n * Query filters to apply to all searches.\n * Refer to https://www.algolia.com/doc/api-reference/api-parameters/filters for format.\n */\n @Prop() filters: Array<string> = [];\n\n /**\n * Template engine to use when rendering results and filters.\n * Defaults to Squirrel v8 (https://squirrelly.js.org/). This gives you access\n * to the underlying squirrel object allowing you to modify it's configuration / add filters.\n */\n @Prop() tplEngine: Object = Squirrel;\n\n /**\n * Template engine render function to use when rendering results and filters.\n * Defaults to Squirrel v8's render (https://squirrelly.js.org/).\n */\n @Prop() tplRenderFn: (...args: any[]) => string = Squirrel.render;\n\n /**\n * Changes the index without removing any current filters. Most appropriate for algolia replicas.\n */\n @Prop() replicaIndex: string = '';\n\n /**\n * Will maintain a search all / '*' on init and reset allowing for a view\n * then filter experience rather than a search first experience\n */\n @Prop() browseIndex: boolean = false;\n\n /**\n * Minimum number of characters before performing a search\n */\n @Prop() minChars: number = 2;\n\n /**\n * Store search queries (against this ID) to the component store.\n * Use in conjunction with storeMethod\n */\n @Prop() storeId?: string;\n\n /**\n * The method of storage.\n * Either session storage, url hash (after the '#') or url query (after the '?').\n */\n @Prop() storeMethod: StorageMethods = 'session';\n\n // Events\n\n /**\n * Emitted when the algolia element has been created.\n */\n @Event() nanoDidLoad!: EventEmitter<HTMLNanoAlgoliaElement>;\n\n /**\n * Emitted when results and all filters are shown and have loaded.\n */\n @Event({ bubbles: false }) nanoResultsShown!: EventEmitter<IndexResult>;\n\n /**\n * Emitted before an algolia search.\n */\n @Event() nanoBeforeQuery!: EventEmitter<IndexResult>;\n\n /**\n * Emitted after an algolia search.\n */\n @Event() nanoAfterQuery!: EventEmitter<IndexResult>;\n\n // Public methods\n\n /**\n * @param facetName - will clear all filter selections of that type\n * @param facetValue - will remove a single filter selection\n * Remove facet filters (as set from nano-algolia-filter elements).\n * The omission or both will remove all facet filters\n */\n @Method()\n async removeFilters(facetName?: string, facetValue?: string) {\n if (!facetName && !facetValue) this.clearAllFacetFilters();\n else {\n Object.keys(this._dynFacetFilters).forEach((filterId) => {\n if (\n facetName &&\n this._dynFacetFilters[filterId].facetName === facetName\n ) {\n if (!facetValue) this._dynFacetFilters[filterId].element.value = '';\n else {\n this._dynFacetFilters[filterId].element.value =\n this._dynFacetFilters[filterId].value.filter(\n (val) => val !== facetValue\n );\n }\n }\n });\n }\n }\n\n // Listeners to external events\n\n // a child nano-algolia-... updated their template\n @Listen('nanoTplUpdated')\n onAllTplUpdate(ev: CustomEvent) {\n ev.stopPropagation();\n }\n\n // a nano-algolia-pagination or nano-algolia-results changed the page\n @Listen('nanoPageChanged')\n async onPageChange(ev?: CustomEvent) {\n if (!this.indexResults) return;\n let page = this.resultsPage;\n if (ev) {\n ev.stopPropagation();\n page = (ev.detail as PageChangeEventDetail).page;\n }\n\n page = Math.min(this.indexResults.totalPages - 1, page);\n page = Math.max(page, 0);\n\n if (this.indexResults.currentPage === page) return;\n\n this.indexResults.currentPage = page;\n await this.algoliaSearch(SearchChangeEvent.Page);\n }\n\n /**\n * nano-algolia-filter changed value.\n * If that happened before a indexResults were setup, it was a static filter.\n * Static filters persist accross search changes\n */\n @Listen('nanoFilterChanged')\n async onFilterChange(ev: CustomEvent) {\n ev.stopPropagation();\n\n let dynFilterObj: FilterGroup = {};\n let filter = ev.detail as FacetFilter;\n filter.element = ev.target as HTMLNanoAlgoliaFilterElement;\n\n if (this.indexResults) {\n if (this.staticFacetFilters[filter.filterId])\n this.staticFacetFilters[filter.filterId] = filter;\n else {\n dynFilterObj[filter.filterId] = filter;\n this._dynFacetFilters = { ...this._dynFacetFilters, ...dynFilterObj };\n }\n\n this.indexResults.appliedFilters = this.makeAppliedFilters();\n } else this.staticFacetFilters[filter.filterId] = filter;\n\n this.filterChanged =\n filter.value && filter.value.length ? filter.filterId : 'all';\n\n this.resetPage();\n this.algoliaSearch(SearchChangeEvent.Filter);\n }\n\n // Internal state watchers\n\n // Filters can fire a change event, cause a re-render then get detached.\n // This can cause filter dupes. Check to see if the original element is still in the DOM.\n @Watch('_dynFacetFilters')\n dynFacetFiltersChange() {\n Object.values(this._dynFacetFilters).forEach((filter) => {\n if (this.host.ownerDocument === filter.element.ownerDocument)\n this.dynFacetFilters[filter.filterId] = filter;\n else delete this.dynFacetFilters[filter.filterId];\n });\n }\n\n @Watch('browseIndex')\n browseIndexChange() {\n if (\n this.browseIndex &&\n (!this.query || this.query.length < this.minChars)\n ) {\n this.query = '*';\n }\n }\n\n @Watch('inputField')\n inputFieldSet() {\n if (!this.inputField) return;\n if (\n this.query !== '*' &&\n this.inputField &&\n this.inputField.value !== this.query\n )\n this.inputField.value = this.query;\n }\n\n @Watch('query')\n queryChange() {\n this.searchChange();\n }\n private searchChange = async () => {\n if (!this.algoliaIndex) return;\n\n if (!this.query || this.query.length < this.minChars) {\n if (!this.browseIndex) {\n if (!this.query || this.query.length === 0) {\n this.handleSearchReset();\n return;\n } else return;\n } else if (this.query !== '*') {\n this.query = '*';\n return;\n }\n }\n // Do an initialise search (setup searchIndex)\n this.isLoading = true;\n\n setTimeout(async () => {\n // Clear dynamic filters and reset page\n this.resetPage();\n\n await this.algoliaSearch(SearchChangeEvent.Init);\n // Populate master content - optionally from template\n await this.updateContent();\n\n setTimeout((_) => (this.isLoading = false), 800);\n this.showResults = true;\n this.nanoResultsShown.emit(this.indexResults);\n }, 200);\n };\n\n @Watch('replicaIndex')\n async internalIndexSwitch() {\n if (\n !this.replicaIndex ||\n !this.indexResults ||\n this.indexResults.index === this.replicaIndex\n )\n return;\n this.indexResults.index = this.replicaIndex;\n this.algoliaIndex = this.algoliaClient.initIndex(this.indexResults.index);\n this.resetPage();\n this.algoliaSearch(SearchChangeEvent.Replica);\n }\n\n @Watch('resultsPage')\n pageChange() {\n this.onPageChange();\n }\n\n @Watch('searchIndexName')\n searchIndexNameChange() {\n if (\n !this.searchIndexName ||\n !this.searchIndexName.length ||\n (this.searchIndex && this.searchIndex.index === this.searchIndexName)\n )\n return;\n this.searchIndex = { index: this.searchIndexName };\n }\n\n @Watch('apiKey')\n @Watch('appId')\n initAlgoliaClient() {\n if (!this.appId || !this.apiKey) return;\n this.algoliaClient = algoliasearch(this.appId, this.apiKey);\n }\n\n @Watch('searchIndex')\n initAlgoliaIndex() {\n if (!this.algoliaClient || !this.searchIndex) return;\n if (this.searchIndex.index) {\n if (this.replicaIndex) this.searchIndex.index = this.replicaIndex;\n this.searchIndexName = this.searchIndex.index;\n this.algoliaIndex = this.algoliaClient.initIndex(this.searchIndex.index);\n this.searchChange();\n }\n }\n\n @Watch('listenTo')\n newListenTo() {\n if (!this.listenTo) this.attachInputListener(false);\n else {\n setTimeout(() => {\n this.inputField = document.querySelector(this.listenTo);\n if (this.inputField) this.attachInputListener(true);\n }, 50);\n }\n }\n\n @Watch('showResults')\n showResultsChange() {\n if (!this.resultsDiv || !this.defaultDiv) return;\n\n if (this.showResults) {\n this.resultsDiv.style.width = this.host.scrollWidth + 'px';\n this.resultsDiv.style.minHeight = this.host.scrollHeight + 'px';\n\n writeTask(() => {\n this.resultsDiv.addEventListener('transitionend', this.onResultDisplay);\n this.resultsDiv.style.display = 'block';\n setTimeout(() => this.resultsDiv.classList.add('show'), 50);\n });\n } else {\n writeTask(() => {\n this.resultsDiv.classList.remove('shown');\n this.defaultDiv.style.display = 'block';\n setTimeout(() => {\n this.resultsDiv.addEventListener(\n 'transitionend',\n this.onResultDisplay\n );\n this.resultsDiv.classList.remove('show');\n\n if (!!this.slottedInput)\n this.slottedInput.focus({ preventScroll: true });\n else this.defaultDiv.focus({ preventScroll: true });\n }, 50);\n });\n }\n }\n\n // Internal methods\n\n private fixDomain(results: AlgoliaMultiResult) {\n if (!this.searchIndex || !this.searchIndex.domain) return results;\n results.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url = location.protocol + '//' + this.searchIndex.domain + hit.url;\n });\n return results;\n }\n\n // Takes all current filters (dynamic and static)\n // and merges common filters' values togther\n private makeAppliedFilters = (): AppliedFilter[] => {\n let appliedFtrs: AppliedFilter[] = [];\n\n const makeAppliedFilter = (facetFilters: {\n [prop: string]: FacetFilter;\n }) => {\n Object.values(facetFilters).forEach((filter) => {\n if (filter.value && filter.value.length) {\n let found = appliedFtrs.find(\n (appFilter) => appFilter.name === filter.facetName\n );\n if (!found)\n appliedFtrs.push({\n name: filter.facetName,\n values: [...filter.value],\n });\n else found.values = [...found.values, ...filter.value];\n }\n });\n };\n makeAppliedFilter(this.dynFacetFilters);\n makeAppliedFilter(this.staticFacetFilters);\n\n if (appliedFtrs.length) return appliedFtrs;\n return null;\n };\n\n // Queue up a search\n private algoliaSearch = async (eventType: SearchChangeEvent) => {\n return this.promiseQueue.enqueue(() => this.queueSearch(eventType));\n };\n\n // Do a search\n private queueSearch = async (eventType: SearchChangeEvent) => {\n if (\n !this.algoliaIndex ||\n !this.query ||\n !this.searchIndex ||\n !this.searchIndex.index\n )\n return;\n\n this.nanoBeforeQuery.emit(this.indexResults);\n\n // clear all facet filters on init (new query)\n if (SearchChangeEvent.Init === eventType) this.clearAllFacetFilters();\n\n let searchParams: any = {\n filters: this.algoliaFilterStr(),\n page: this.indexResults ? this.indexResults.currentPage : 0,\n };\n\n if (this.searchIndex.filters)\n searchParams.facets = this.searchIndex.filters;\n if (this.searchIndex.hitsPerPage)\n searchParams.hitsPerPage = this.searchIndex.hitsPerPage;\n\n let result = (await this.algoliaIndex.search(\n this.query,\n searchParams\n )) as AlgoliaMultiResult;\n result = this.fixDomain(result);\n\n // set event type - this informs children components why things changed\n this.changeEvent = eventType;\n\n // Setup initial meta on new queries. Some of it should not change on filter / pagination\n if (eventType === SearchChangeEvent.Init || !this.indexResults) {\n this.indexResults = {\n currentPage: 0,\n totalHits: result.nbHits,\n hitsPerPage: null,\n origFilters: result.facets,\n query: this.query,\n domain: this.searchIndex.domain || null,\n legacy: !CANSHADOW,\n totalHitsWithFilters: 0,\n results: [],\n totalPages: 0,\n appliedFilters: this.makeAppliedFilters(),\n indexName: this.searchIndex.name || null,\n index: this.searchIndex.index,\n };\n }\n\n this.indexResults.dynFilters = result.facets;\n this.indexResults.results = result.hits as AlgoliaResultHit[];\n this.indexResults.totalHitsWithFilters = result.nbHits;\n this.indexResults.currentPage = result.page;\n this.indexResults.totalPages = result.nbPages;\n this.indexResults.hitsPerPage = result.hitsPerPage;\n this.indexResults.query = result.query;\n // console.log('I GOT NEW RESULTS', eventType, this.query, this.algoliaFilterStr(), this.indexResults.results.length, this.indexResults.currentPage )\n\n if (\n this.changeEvent !== SearchChangeEvent.Page &&\n this.changeEvent !== SearchChangeEvent.Replica\n ) {\n this.facets = result.facets;\n }\n this.nanoAfterQuery.emit(this.indexResults);\n\n // current hits and page will cause re-renders in children components.\n // Wait a tick before firing otherwise events can fire in the wrong order\n return new Promise((resolve) => {\n setTimeout(() => resolve('tpl updated'), 20);\n }).then((_) => {\n this.currentHits = this.indexResults.results;\n this.resultsPage = this.indexResults.currentPage;\n });\n };\n\n private resetPage() {\n if (!this.indexResults) return;\n this.indexResults.currentPage = 0;\n }\n\n private clearAllFacetFilters() {\n Object.values(this._dynFacetFilters).forEach((filter) => {\n filter.element.value = '';\n });\n this._dynFacetFilters = {};\n }\n\n private algoliaFilterStr() {\n // groups applied facet filters (from algolia-filter components)\n // with their applied, 'internal' operators (and, or, not)\n\n let facetFilterObj: { [prop: string]: FacetFilterQueryBlock } = {};\n\n const groupFilters = (facetFilters: { [prop: string]: FacetFilter }) => {\n let filter: FilterChangeEventDetail;\n let filterOp: Array<string>;\n\n Object.keys(facetFilters).forEach((filterId) => {\n filter = facetFilters[filterId];\n facetFilterObj[filterId] = facetFilterObj[filterId] || {\n name: filter.facetName,\n or: [],\n and: [],\n not: [],\n };\n\n filterOp = facetFilterObj[filterId][filter.operator];\n if (filter.value && filter.value.length) {\n facetFilterObj[filterId][filter.operator] = [\n ...filterOp,\n ...filter.value,\n ];\n }\n });\n };\n\n groupFilters(this.dynFacetFilters);\n groupFilters(this.staticFacetFilters);\n\n const formatVal = (name: string, val: string) => {\n if (val.indexOf(' ') > -1) return name + ':\"' + val + '\"';\n else return name + ':' + val;\n };\n let filterStrParts: Array<string> = [];\n let operatorGrp: FacetFilterQueryBlock;\n let filterName: string;\n // let processedFilters: string[] = [];\n\n // joins all applied facet filter operator groups with the set 'outer'\n // operator into an algolia filter query string\n Object.values(facetFilterObj).forEach(function (filter) {\n Object.keys(filter)\n .filter((filterProp) => filterProp.match(/(or|and|not)/))\n .forEach((operator) => {\n operatorGrp = filter;\n filterName = filter.name;\n\n if (operator === 'or' || operator === 'and') {\n if (operatorGrp[operator].length) {\n filterStrParts.push(\n '( \\\n ' +\n operatorGrp[operator]\n .map((val) => {\n if (val.length) return formatVal(filterName, val);\n })\n .join(' ' + operator.toLocaleUpperCase() + ' ') +\n ' \\\n )'\n );\n }\n } else {\n if (operatorGrp.not.length) {\n filterStrParts.push(\n '( \\\n ' +\n operatorGrp[operator]\n .map((val) => {\n if (val.length)\n return 'NOT ' + formatVal(filterName, val);\n })\n .join(' AND ') +\n ' \\\n )'\n );\n }\n }\n });\n });\n\n // add in any static applied filters from filters prop\n filterStrParts = [...this.filters, ...filterStrParts];\n // console.log('filterStr:', filterStrParts.join(' ' + this.operator.toLocaleUpperCase() + ' '))\n return filterStrParts.join(' ' + this.operator.toLocaleUpperCase() + ' ');\n }\n\n private attachInputListener(setup: boolean = true) {\n if (!this.inputField) return;\n let eventName =\n this.inputField.tagName.toLocaleLowerCase() === 'nano-input'\n ? 'nanoChange'\n : 'change';\n\n if (setup)\n this.inputField.addEventListener(eventName, this.handleInputChange);\n else this.inputField.removeEventListener(eventName, this.handleInputChange);\n }\n\n private handleInputChange = (ev) => {\n if (ev.target !== this.inputField) return;\n this.query = this.inputField.value;\n };\n\n private handleSearchReset = () => {\n this.showResults = false;\n this.indexResults = null;\n };\n\n private onResultDisplay = () => {\n writeTask(() => {\n this.resultsDiv.removeEventListener(\n 'transitionend',\n this.onResultDisplay\n );\n if (!this.showResults) this.resultsDiv.style.display = 'none';\n else {\n this.defaultDiv.style.display = 'none';\n this.resultsDiv.classList.add('shown');\n this.resultsDiv.style.minHeight = '';\n this.resultsDiv.style.width = '';\n }\n });\n };\n\n private async updateContent() {\n return this.promiseQueue.enqueue(() => this.updateContentQueue());\n }\n\n private async updateContentQueue() {\n let outputTo = this.outputSlot || this.resultsDiv;\n\n if (!outputTo || !this.tpl) return 'no tpl';\n\n let tmpCont = document.createElement('div');\n tmpCont.innerHTML = this.tpl;\n\n let algoliaEles: Element[] = [];\n this.placedAlgoliaEles = [];\n\n // take out children algolia elements 'cos they have their own templates\n // don't want to swap in their templates\n Array.from(\n tmpCont.querySelectorAll(\n 'nano-algolia, nano-algolia-filter, nano-algolia-results'\n )\n ).forEach((el, i) => {\n let placeholder = document.createElement('div');\n placeholder.dataset.placeholderId = i.toString();\n placeholder.classList.add('nano-ele-placeholder');\n algoliaEles.push(el);\n el.parentNode.replaceChild(placeholder, el);\n });\n\n // swap in template content\n // (all this nonsense htmlencodes any < or >)\n\n outputTo.innerHTML = this.tplRenderFn(\n tmpCont.innerHTML\n .replace(/&gt;/gm, '>')\n .replace(/&lt;/gm, '<')\n .replace(/&amp;/gm, '&'),\n this.indexResults\n );\n\n // put back in algolia elements\n Array.from(outputTo.querySelectorAll('div.nano-ele-placeholder')).forEach(\n (el: HTMLDivElement) => {\n el.parentNode.replaceChild(\n algoliaEles[parseInt(el.dataset.placeholderId)],\n el\n );\n this.placedAlgoliaEles.push(\n algoliaEles[parseInt(el.dataset.placeholderId)]\n );\n }\n );\n\n if (!this.placedAlgoliaEles.length) return Promise.resolve('algolia setup');\n\n // wait for all children algolia elements to resolve before calling 'done'\n return new Promise((resolve) => {\n const childrenResolver = (ev: CustomEvent) => {\n this.placedAlgoliaEles = this.placedAlgoliaEles.filter(\n (ele) => ele !== (ev.detail as HTMLElement)\n );\n if (!this.placedAlgoliaEles.length) {\n setTimeout(() => resolve('tpl updated'), 500);\n outputTo.removeEventListener('nanoTplUpdated', childrenResolver);\n }\n };\n outputTo.addEventListener('nanoTplUpdated', childrenResolver);\n });\n }\n\n // Stencil hooks\n\n componentWillLoad() {\n readTask((_) => {\n this.tplSlot = getDirectChildren(this.host, '[slot=\"template\"]')[0];\n this.outputSlot = getDirectChildren(this.host, '[slot=\"output\"]')[0];\n this.slottedInput = getDirectChildren(\n this.host,\n '[slot=\"search-input\"]'\n )[0];\n this.hasLoadSlot = !!getDirectChildren(this.host, '[slot=\"loader\"]')[0];\n if (!!this.tplSlot) this.tpl = this.tplSlot.innerHTML;\n\n // get input field to listen to\n if (\n this.slottedInput &&\n (this.slottedInput.tagName.toLocaleLowerCase() === 'nano-input' ||\n this.slottedInput instanceof HTMLInputElement)\n ) {\n this.inputField = this.slottedInput as HTMLNanoInputElement;\n } else if (this.slottedInput) {\n this.inputField = this.slottedInput.querySelector(\n 'nano-input, input:not([type=\"radio\"]):not([type=\"checkbox\"])'\n );\n }\n if (!this.inputField && this.listenTo)\n this.inputField = document.querySelector(this.listenTo);\n if (this.inputField) this.attachInputListener(true);\n\n writeTask((_) => {\n if (this.showResults && this.tpl) this.searchChange();\n });\n });\n\n this.searchIndexNameChange();\n this.initAlgoliaClient();\n this.initAlgoliaIndex();\n\n // Create wormwhole shared 'universe' (https://github.com/mihar-22/stencil-wormhole)\n Universe.create(this, this.wormholeState);\n\n if (this.storeId) {\n ComponentStore.init(\n this,\n ['query', 'replicaIndex'],\n this.storeMethod,\n this.storeId\n );\n ComponentStore.init(\n this,\n ['apiKey', 'appId', 'searchIndex'],\n 'session',\n this.storeId + '_api'\n );\n }\n this.internalIndexSwitch();\n }\n\n connectedCallback() {\n this.searchChange = debounce(this.searchChange, 300);\n this.browseIndexChange();\n\n if (!Build.isBrowser) return;\n this.host.dispatchEvent(\n new CustomEvent('nanoDidLoad', {\n detail: this.host,\n })\n );\n }\n\n render() {\n const wormholeState = {\n indexResults: this.indexResults,\n results: this.currentHits,\n filterChanged: this.filterChanged,\n tplRenderFn: this.tplRenderFn,\n resultsPage: this.resultsPage,\n changeEvent: this.changeEvent,\n facets: this.facets,\n algoliaIndex: this.algoliaIndex,\n searchIndex: this.searchIndex,\n globalStoreMethod: this.storeMethod,\n isLoading: this.isLoading,\n };\n return (\n <Host\n class={{\n 'show-results': this.showResults,\n 'is-loading': this.isLoading,\n }}\n aria-busy={this.isLoading}\n >\n {this.hasLoadSlot && (\n <div hidden={!this.isLoading}>\n <slot name=\"loader\" />\n </div>\n )}\n {!this.hasLoadSlot && (\n <div\n class={{\n loader: true,\n loading: this.isLoading,\n }}\n >\n <nano-spinner overlay={true} type=\"circle\"></nano-spinner>\n </div>\n )}\n\n <Universe.Provider state={wormholeState}>\n <slot name=\"search-input\"></slot>\n <div class=\"results-container\" aria-live=\"polite\">\n <div ref={(div) => (this.resultsDiv = div)} class=\"results\">\n <slot name=\"output\" />\n </div>\n </div>\n </Universe.Provider>\n\n <div\n ref={(div) => (this.defaultDiv = div)}\n class=\"default\"\n tabindex=\"-1\"\n >\n <slot />\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- import{r as t,c as o,i as r,f as n,h as i,e,g as a}from"./p-fc189b6d.js";import{i as s}from"./p-6a284815.js";import{c as d}from"./p-d3af43d2.js";import{d as b}from"./p-ed2efbeb.js";let c=class{constructor(r){t(this,r),this.nanoOpened=o(this,"nanoOpened",7),this.nanoClosed=o(this,"nanoClosed",7),this.slideId="nano-details-"+l++,this.stateChanging=!1,this.isLoading=!0,this.label="",this.open=!1,this.noHandle=!1,this.iconRotation=90,this.onKeyDown=t=>{switch(t.key){case"Enter":case" ":this.open=!this.open}},this.onMouseDown=()=>{this.stateChanging||(this.open=!this.open)}}toggleClick(){this.stateChanging=!0,this.open?this.show():this.hide()}hide(){this.nanoClosed.emit(this.open),b(this.contentEl,"is-shown",!1).then((()=>this.stateChanging=!1)),this.contentEl.style.height="0px"}show(){this.nanoOpened.emit(),b(this.contentEl,"is-shown",!0).then((()=>this.stateChanging=!1)),this.contentEl.style.height=this.contentArea.scrollHeight+"px"}resize(){this.open&&this.contentArea&&this.contentEl&&!this.stateChanging&&r((()=>{this.contentArea.scrollHeight>0&&n((()=>{this.contentEl.style.height=this.contentArea.scrollHeight+"px"}))}))}componentWillLoad(){this.hasStartSlot=!!this.el.querySelector('[slot="icon-start"]'),this.hasEndSlot=!!this.el.querySelector('[slot="icon-end"]'),setTimeout((()=>{this.isLoading=!1}),100)}componentDidLoad(){this.open&&setTimeout((()=>{this.show()}),0)}connectedCallback(){(this.mo=new MutationObserver((()=>this.resize()))).observe(this.el,{childList:!0,subtree:!0,attributes:!0}),(this.ro=new s((()=>this.resize()))).observe(this.el)}disconnectedCallback(){this.mo&&this.mo.disconnect(),this.ro&&this.ro.disconnect()}render(){return i(e,{class:Object.assign({},d(this.color))},i("div",{class:{open:this.open,loaded:!this.isLoading}},i("button",{onKeyDown:this.onKeyDown,onMouseDown:this.onMouseDown,"aria-controls":this.slideId,"aria-expanded":this.open?"true":"false",style:{display:this.noHandle?"none":""}},this.hasStartSlot?i("span",{class:"icon icon--start",style:{transform:this.open?`rotate(${this.iconRotation}deg)`:""}},i("slot",{name:"icon-start"})):"",i("div",{class:"label"},this.label?this.label:i("slot",{name:"label"})),this.hasEndSlot?i("span",{class:"icon icon--end",style:{transform:this.open?`rotate(${this.iconRotation}deg)`:""}},i("slot",{name:"icon-end"})):""),i("div",{class:"content",ref:t=>this.contentEl=t,tabindex:"-1",id:this.slideId},i("div",{ref:t=>this.contentArea=t,class:"content__area"},i("slot",null)))))}get el(){return a(this)}static get watchers(){return{open:["toggleClick"]}}},l=0;c.style=':host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;--padding:1em;--btn-padding:var(--padding);--btn-bg-color:var(--nano-color-contrast, #dad6d3);--btn-bg-color--open:var(--nano-color-base, #dad6d3);--btn-bg-color--hover:var(--nano-color-tint, #f9f9fb);--btn-text-color:var(--nano-color-base, #455556);--btn-text-color--open:var(--nano-color-contrast, var(--btn-text-color));--btn-text-color--hover:var(--nano-color-contrast, var(--btn-text-color));--content-bg-color:transparent;--content-text-color:#455556;--content-transition:height 0.2s ease-out;--border-width:none;--border-color:none;--border-style:none;--border-radius:none;--box-shadow:none;--focus-style:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));display:block;border-style:var(--border-style);border-width:var(--border-width-dims);border-color:var(--border-color);border-radius:var(--border-radius-dims);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}:host(:last-of-type){--border-width-dims:0 var(--border-width) var(--border-width);--border-radius-dims:0 0 var(--border-radius) var(--border-radius)}:host(:last-of-type) .open .content{border-radius:0 0 var(--border-radius) var(--border-radius)}:host(:first-of-type){--border-radius-dims:var(--border-radius) var(--border-radius) 0 0;--border-width-dims:var(--border-width)}:host(:first-of-type:last-of-type){--border-radius-dims:var(--border-radius);--border-width-dims:var(--border-width)}:host(:not(:last-of-type):not(:first-of-type)){--border-width-dims:0 var(--border-width) var(--border-width)}:host(.nano-color){--btn-bg-color:var(--nano-color-contrast, var(--nano-color-primary-contrast, #fff));--btn-bg-color--open:var(--nano-color-base, var(--nano-color-primary, #0084a9));--btn-bg-color--hover:var(--nano-color-tint, var(--nano-color-primary-tint, #2696b6));--btn-text-color:var(--nano-color-base, var(--nano-color-primary, #0084a9));--btn-text-color--open:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--btn-text-color--hover:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n )}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;padding:var(--btn-padding);text-align:inherit;position:relative;font-size:1em;margin:0;-webkit-transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--btn-bg-color);color:var(--btn-text-color);border-radius:var(--border-radius-dims)}button[dir=rtl]{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}button:focus{-webkit-box-shadow:var(--focus-style);box-shadow:var(--focus-style);outline:none;position:relative;z-index:1}:hover button{background:var(--btn-bg-color--hover);color:var(--btn-text-color--hover)}.open button{background:var(--btn-bg-color--open);color:var(--btn-text-color--open);border-bottom-right-radius:0;border-bottom-left-radius:0}button .label{width:100%;max-width:100%;max-height:100%;-webkit-box-flex:1;-ms-flex:1;flex:1;display:inline-block}button .icon{line-height:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;display:inline-block;color:currentColor;-webkit-transition:0.3s ease transform;transition:0.3s ease transform;-webkit-transform-origin:center;transform-origin:center}button .icon--start{margin-left:0;margin-right:var(--padding);margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){button .icon--start{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:var(--padding);margin-inline-end:var(--padding)}}button .icon--end{margin-left:var(--padding);margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){button .icon--end{margin-left:unset;margin-right:unset;-webkit-margin-start:var(--padding);margin-inline-start:var(--padding);-webkit-margin-end:0;margin-inline-end:0}}button .icon ::slotted(nano-icon){--color:"currentColor"}.content{color:var(--content-text-color);background:var(--content-bg-color);height:0;overflow:hidden;-webkit-transition:0.2s ease border-radius;transition:0.2s ease border-radius;outline:none}.loaded .content{-webkit-transition:var(--content-transition), 0.2s ease border-radius;transition:var(--content-transition), 0.2s ease border-radius}.content>*{opacity:0;-webkit-transition:opacity 0.2s ease-out;transition:opacity 0.2s ease-out}.open .content>*{opacity:1}.content__area{padding:var(--padding)}';export{c as nano_details}
2
- //# sourceMappingURL=p-4573be34.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/details/details.tsx","src/components/details/details.scss?tag=nano-details&encapsulation=shadow"],"names":["Details","[object Object]","hostRef","this","slideId","slideIds","stateChanging","isLoading","label","open","noHandle","iconRotation","onKeyDown","ev","key","onMouseDown","show","hide","nanoClosed","emit","displayTransition","contentEl","then","style","height","nanoOpened","contentArea","scrollHeight","readTask","writeTask","hasStartSlot","el","querySelector","hasEndSlot","setTimeout","mo","MutationObserver","resize","observe","childList","subtree","attributes","ro","ResizeObserver","disconnect","h","Host","class","Object","assign","createColorClasses","color","loaded","aria-controls","aria-expanded","display","transform","name","ref","div","tabindex","id"],"mappings":"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","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n Prop,\n h,\n Element,\n Watch,\n Host,\n State,\n writeTask,\n readTask,\n} from '@stencil/core';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Color } from '../../interface';\nimport { createColorClasses } from '../../utils/theme';\nimport { testLegacyStyle, displayTransition } from '../../utils';\n\n/**\n * A simple element used to hide or reveal more content with slide effect. Can be used independently or nested within a [accordion](story/components-accordion--accordion) element to add 'one item open at a time' support.\n */\n/**\n * @slot - content that will be hidden / revealed\n * @slot icon-start - used for icons at the start of the handle\n * @slot label - can be used when you wish to insert complex label markup\n * @slot icon-end - used for icons at the end of the handle\n */\n@Component({\n tag: 'nano-details',\n styleUrl: 'details.scss',\n shadow: true,\n})\nexport class Details {\n private hasStartSlot: boolean;\n private hasEndSlot: boolean;\n private slideId = `nano-details-${slideIds++}`;\n private mo?: MutationObserver;\n private ro?: ResizeObserver;\n private contentArea: HTMLDivElement;\n private stateChanging: boolean = false;\n\n @State() isLoading = true;\n\n @Element() private el: HTMLNanoDetailsElement;\n\n private contentEl: HTMLElement;\n\n /**\n * Button / handle text to be used if no complex markup required.\n * Otherwise use label slot.\n */\n @Prop() label: string = '';\n\n /**\n * Should item be open on load\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Have no handle - you will need to control the hiding / showing of content with script\n */\n @Prop() noHandle: boolean = false;\n\n /**\n * Icon slot rotation amount (degrees) on open\n */\n @Prop() iconRotation: number = 90;\n\n /**\n * Color to use from your application's color palette.\n */\n @Prop() color?: Color;\n\n /**\n * Emitted when the component opens.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoOpened: EventEmitter;\n\n /**\n * Emitted when the component closes.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoClosed: EventEmitter;\n\n @Watch('open')\n toggleClick() {\n this.stateChanging = true;\n if (this.open) this.show();\n else this.hide();\n }\n\n private onKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.open = !this.open;\n break;\n }\n };\n\n private onMouseDown = () => {\n if (this.stateChanging) return;\n this.open = !this.open;\n };\n\n private hide() {\n this.nanoClosed.emit(this.open);\n displayTransition(this.contentEl, 'is-shown', false).then(\n () => (this.stateChanging = false)\n );\n this.contentEl.style.height = '0px';\n }\n\n private show() {\n this.nanoOpened.emit();\n displayTransition(this.contentEl, 'is-shown', true).then(\n () => (this.stateChanging = false)\n );\n this.contentEl.style.height = this.contentArea.scrollHeight + 'px';\n }\n\n private resize() {\n if (\n !this.open ||\n !this.contentArea ||\n !this.contentEl ||\n this.stateChanging\n )\n return;\n readTask(() => {\n if (this.contentArea.scrollHeight > 0) {\n writeTask(() => {\n // this.contentEl.style.transition = 'none';\n this.contentEl.style.height = this.contentArea.scrollHeight + 'px';\n // this.contentEl.style.transition = '';\n });\n }\n });\n }\n\n componentWillLoad() {\n this.hasStartSlot = !!this.el.querySelector('[slot=\"icon-start\"]');\n this.hasEndSlot = !!this.el.querySelector('[slot=\"icon-end\"]');\n setTimeout(() => {\n this.isLoading = false;\n }, 100);\n }\n\n componentDidLoad() {\n if (this.open) {\n // disable animation on start\n setTimeout(() => {\n this.show();\n }, 0);\n }\n }\n\n connectedCallback() {\n testLegacyStyle(this.el);\n const mo = (this.mo = new MutationObserver(() => this.resize()));\n mo.observe(this.el, { childList: true, subtree: true, attributes: true });\n\n const ro = (this.ro = new ResizeObserver(() => this.resize()));\n ro.observe(this.el);\n }\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n if (this.ro) this.ro.disconnect();\n }\n\n render() {\n return (\n <Host class={{ ...createColorClasses(this.color) }}>\n <div\n class={{\n open: this.open,\n loaded: !this.isLoading,\n }}\n >\n <button\n onKeyDown={this.onKeyDown}\n onMouseDown={this.onMouseDown}\n aria-controls={this.slideId}\n aria-expanded={this.open ? 'true' : 'false'}\n style={{ display: this.noHandle ? 'none' : '' }}\n >\n {this.hasStartSlot ? (\n <span\n class=\"icon icon--start\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-start\" />\n </span>\n ) : (\n ''\n )}\n <div class=\"label\">\n {this.label ? this.label : <slot name=\"label\" />}\n </div>\n {this.hasEndSlot ? (\n <span\n class=\"icon icon--end\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-end\" />\n </span>\n ) : (\n ''\n )}\n </button>\n <div\n class=\"content\"\n ref={(div) => (this.contentEl = div)}\n tabindex=\"-1\"\n id={this.slideId}\n >\n <div ref={(div) => (this.contentArea = div)} class=\"content__area\">\n <slot />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n\nlet slideIds = 0;\n","@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/form';\n\n:host {\n /**\n * @prop --padding: Default to 1em;\n\n * @prop --btn-padding: Defaults to var(--padding);\n * @prop --btn-bg-color: Defaults to var(--nano-color-contrast, #dad6d3);\n * @prop --btn-bg-color--open: Defaults to var(--nano-color-base, #dad6d3);\n * @prop --btn-bg-color--hover: Defaults to var(--nano-color-tint, #{$color-offwhite});\n\n * @prop --btn-text-color: Defaults to var(--nano-color-base, #455556);\n * @prop --btn-text-color--open: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n * @prop --btn-text-color--hover: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n\n * @prop --content-bg-color: Defaults to transparent;\n * @prop --content-text-color: Defaults to #455556;\n * @prop --content-transition: Defaults to height .2s ease-out;\n\n * @prop --border-width: Defaults to none;\n * @prop --border-color: Defaults to none;\n * @prop --border-style: Defaults to none;\n * @prop --border-radius: Defaults to none;\n * @prop --box-shadow: Defaults to none;\n * @prop --focus-style: Defaults to #{$control-focus-style}\n */\n\n @include text-inherit();\n\n --padding: 1em;\n --btn-padding: var(--padding);\n --btn-bg-color: var(--nano-color-contrast, #dad6d3);\n --btn-bg-color--open: var(--nano-color-base, #dad6d3);\n --btn-bg-color--hover: var(--nano-color-tint, #{$color-offwhite});\n --btn-text-color: var(--nano-color-base, #455556);\n --btn-text-color--open: var(--nano-color-contrast, var(--btn-text-color));\n --btn-text-color--hover: var(--nano-color-contrast, var(--btn-text-color));\n --content-bg-color: transparent;\n --content-text-color: #455556;\n --content-transition: height 0.2s ease-out;\n --border-width: none;\n --border-color: none;\n --border-style: none;\n --border-radius: none;\n --box-shadow: none;\n --focus-style: #{$control-focus-style};\n\n display: block;\n border-style: var(--border-style);\n border-width: var(--border-width-dims);\n border-color: var(--border-color);\n border-radius: var(--border-radius-dims);\n box-shadow: var(--box-shadow);\n}\n\n:host(:last-of-type) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n --border-radius-dims: 0 0 var(--border-radius) var(--border-radius);\n\n .open .content {\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n }\n}\n\n:host(:first-of-type) {\n --border-radius-dims: var(--border-radius) var(--border-radius) 0 0;\n --border-width-dims: var(--border-width);\n}\n\n:host(:first-of-type:last-of-type) {\n --border-radius-dims: var(--border-radius);\n --border-width-dims: var(--border-width);\n}\n\n:host(:not(:last-of-type):not(:first-of-type)) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n}\n\n:host(.nano-color) {\n --btn-bg-color: var(--nano-color-contrast, #{nano-color(primary, contrast)});\n --btn-bg-color--open: var(--nano-color-base, #{nano-color(primary, base)});\n --btn-bg-color--hover: var(--nano-color-tint, #{nano-color(primary, tint)});\n --btn-text-color: var(--nano-color-base, #{nano-color(primary, base)});\n --btn-text-color--open:\n var(\n --nano-color-contrast,\n #{nano-color(primary, contrast)}\n );\n --btn-text-color--hover:\n var(\n --nano-color-contrast,\n #{nano-color(primary, contrast)}\n );\n}\n\nbutton {\n @include input-cover;\n\n padding: var(--btn-padding);\n text-align: inherit;\n position: relative;\n font-size: 1em;\n margin: 0;\n transition: 0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;\n display: flex;\n align-items: center;\n background: var(--btn-bg-color);\n color: var(--btn-text-color);\n border-radius: var(--border-radius-dims);\n\n &:focus {\n box-shadow: var(--focus-style);\n outline: none;\n position: relative;\n z-index: 1;\n }\n\n :hover & {\n background: var(--btn-bg-color--hover);\n color: var(--btn-text-color--hover);\n }\n\n .open & {\n background: var(--btn-bg-color--open);\n color: var(--btn-text-color--open);\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .label {\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n flex: 1;\n display: inline-block;\n }\n\n .icon {\n line-height: 0;\n flex-direction: column;\n justify-content: center;\n display: inline-block;\n color: currentColor;\n transition: 0.3s ease transform;\n transform-origin: center;\n\n &--start {\n @include margin(0, var(--padding), 0, 0);\n }\n\n &--end {\n @include margin(0, 0, 0, var(--padding));\n }\n\n ::slotted(nano-icon) {\n --color: 'currentColor';\n }\n }\n}\n\n.content {\n color: var(--content-text-color);\n background: var(--content-bg-color);\n height: 0;\n overflow: hidden;\n transition: 0.2s ease border-radius;\n outline: none;\n\n .loaded & {\n transition: var(--content-transition), 0.2s ease border-radius;\n }\n\n > * {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n\n .open & {\n opacity: 1;\n }\n }\n\n &__area {\n padding: var(--padding);\n }\n}\n"]}