@nanoporetech-digital/components 1.13.21 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (706) hide show
  1. package/CHANGELOG.md +653 -14
  2. package/README.md +3 -2
  3. package/dist/cjs/{algolia-data-771a61ea.js → algolia-data-a98ccf4f.js} +2 -2
  4. package/dist/cjs/algolia-data-a98ccf4f.js.map +1 -0
  5. package/dist/cjs/algoliasearch.umd-5dc661c5.js +12 -0
  6. package/dist/cjs/algoliasearch.umd-5dc661c5.js.map +1 -0
  7. package/dist/cjs/{component-store-c8440fd7.js → component-store-8d99743e.js} +2 -2
  8. package/dist/cjs/{component-store-c8440fd7.js.map → component-store-8d99743e.js.map} +1 -1
  9. package/dist/cjs/{css-shim-208c6c2d.js → css-shim-8983f2ba.js} +2 -2
  10. package/dist/cjs/{css-shim-208c6c2d.js.map → css-shim-8983f2ba.js.map} +1 -1
  11. package/dist/cjs/{dom-1b5e30a5.js → dom-28d4395c.js} +2 -2
  12. package/dist/cjs/{dom-1b5e30a5.js.map → dom-28d4395c.js.map} +1 -1
  13. package/dist/cjs/{global-befb7a64.js → global-aa92d50f.js} +5 -3
  14. package/dist/cjs/global-aa92d50f.js.map +1 -0
  15. package/dist/cjs/{utils-e9e37c80.js → index-e517a673.js} +1 -1
  16. package/dist/cjs/{utils-e9e37c80.js.map → index-e517a673.js.map} +1 -1
  17. package/dist/cjs/{index-43791691.js → index-f12395b8.js} +10 -3
  18. package/dist/cjs/index-f12395b8.js.map +1 -0
  19. package/dist/cjs/index.cjs.js +4 -4
  20. package/dist/cjs/index.cjs.js.map +1 -1
  21. package/dist/cjs/loader.cjs.js +5 -5
  22. package/dist/cjs/loader.cjs.js.map +1 -1
  23. package/dist/cjs/nano-accordion.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-accordion.cjs.entry.js.map +1 -1
  25. package/dist/cjs/nano-alert.cjs.entry.js +7 -7
  26. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  27. package/dist/cjs/nano-algolia-filter.cjs.entry.js +3 -3
  28. package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nano-algolia-input.cjs.entry.js +5 -5
  30. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nano-algolia-pagination.cjs.entry.js +2 -2
  32. package/dist/cjs/nano-algolia-results.cjs.entry.js +2 -2
  33. package/dist/cjs/nano-algolia.cjs.entry.js +5 -5
  34. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  35. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +12 -4
  36. package/dist/cjs/nano-aspect-ratio.cjs.entry.js.map +1 -1
  37. package/dist/cjs/nano-checkbox-group.cjs.entry.js +31 -16
  38. package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
  39. package/dist/cjs/nano-checkbox.cjs.entry.js +33 -15
  40. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  41. package/dist/cjs/nano-components.cjs.js +5 -5
  42. package/dist/cjs/nano-components.cjs.js.map +1 -1
  43. package/dist/cjs/nano-date-input.cjs.entry.js +45 -13
  44. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  45. package/dist/cjs/nano-date-picker_2.cjs.entry.js +117 -72
  46. package/dist/cjs/nano-date-picker_2.cjs.entry.js.map +1 -1
  47. package/dist/cjs/nano-details.cjs.entry.js +16 -10
  48. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  49. package/dist/cjs/nano-dialog.cjs.entry.js +5 -9
  50. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  51. package/dist/cjs/nano-drawer.cjs.entry.js +1 -1
  52. package/dist/cjs/nano-file-upload.cjs.entry.js +7 -14
  53. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  54. package/dist/cjs/nano-global-nav.cjs.entry.js +6 -6
  55. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  56. package/dist/cjs/nano-global-search-results.cjs.entry.js +2 -2
  57. package/dist/cjs/nano-grid_3.cjs.entry.js +1 -1
  58. package/dist/cjs/nano-grid_3.cjs.entry.js.map +1 -1
  59. package/dist/cjs/nano-hero.cjs.entry.js +3 -3
  60. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  61. package/dist/cjs/nano-icon-button.cjs.entry.js +2 -2
  62. package/dist/cjs/nano-icon.cjs.entry.js +1 -1
  63. package/dist/cjs/nano-input.cjs.entry.js +12 -2
  64. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  65. package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
  66. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  67. package/dist/cjs/nano-menu.cjs.entry.js +2 -2
  68. package/dist/cjs/nano-menu.cjs.entry.js.map +1 -1
  69. package/dist/cjs/nano-nav-item_2.cjs.entry.js +6 -6
  70. package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
  71. package/dist/cjs/nano-range.cjs.entry.js +11 -11
  72. package/dist/cjs/nano-range.cjs.entry.js.map +1 -1
  73. package/dist/cjs/nano-rating.cjs.entry.js +3 -3
  74. package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
  75. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -1
  76. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  77. package/dist/cjs/nano-select-option.cjs.entry.js +1 -1
  78. package/dist/cjs/nano-slide.cjs.entry.js +1 -1
  79. package/dist/cjs/nano-slides.cjs.entry.js +2 -2
  80. package/dist/cjs/nano-spinner.cjs.entry.js +2 -2
  81. package/dist/cjs/nano-sticker.cjs.entry.js +9 -9
  82. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  83. package/dist/cjs/nano-tab-content.cjs.entry.js +1 -1
  84. package/dist/cjs/nano-tab-group.cjs.entry.js +6 -6
  85. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  86. package/dist/cjs/nano-tab.cjs.entry.js +2 -2
  87. package/dist/cjs/nano-tooltip.cjs.entry.js +49 -35
  88. package/dist/cjs/nano-tooltip.cjs.entry.js.map +1 -1
  89. package/dist/cjs/{popover-eccc07bd.js → popover-9289f217.js} +32 -32
  90. package/dist/cjs/popover-9289f217.js.map +1 -0
  91. package/dist/cjs/{shadow-css-c5dce0c8.js → shadow-css-a482ec93.js} +2 -2
  92. package/dist/cjs/shadow-css-a482ec93.js.map +1 -0
  93. package/dist/collection/collection-manifest.json +1 -1
  94. package/dist/collection/components/accordion/accordion.js +2 -2
  95. package/dist/collection/components/accordion/accordion.js.map +1 -1
  96. package/dist/collection/components/alert/alert.css +3 -3
  97. package/dist/collection/components/alert/alert.helpers.js +1 -1
  98. package/dist/collection/components/alert/alert.helpers.js.map +1 -1
  99. package/dist/collection/components/alert/alert.js +2 -2
  100. package/dist/collection/components/alert/alert.js.map +1 -1
  101. package/dist/collection/components/algolia/algolia-data.js.map +1 -1
  102. package/dist/collection/components/algolia/algolia-filter.js +3 -3
  103. package/dist/collection/components/algolia/algolia-filter.js.map +1 -1
  104. package/dist/collection/components/algolia/algolia-input.js +7 -7
  105. package/dist/collection/components/algolia/algolia-input.js.map +1 -1
  106. package/dist/collection/components/algolia/algolia-results.js +1 -1
  107. package/dist/collection/components/algolia/algolia.js +8 -8
  108. package/dist/collection/components/algolia/algolia.js.map +1 -1
  109. package/dist/collection/components/aspect-ratio/aspect-ratio.js +9 -1
  110. package/dist/collection/components/aspect-ratio/aspect-ratio.js.map +1 -1
  111. package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js +117 -0
  112. package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js.map +1 -0
  113. package/dist/collection/components/checkbox/checkbox-group.css +3 -3
  114. package/dist/collection/components/checkbox/checkbox-group.js +39 -26
  115. package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
  116. package/dist/collection/components/checkbox/checkbox.css +13 -2
  117. package/dist/collection/components/checkbox/checkbox.js +63 -28
  118. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  119. package/dist/collection/components/date-input/date-input.css +2 -4
  120. package/dist/collection/components/date-input/date-input.js +81 -29
  121. package/dist/collection/components/date-input/date-input.js.map +1 -1
  122. package/dist/collection/components/date-picker/date-picker.css +15 -4
  123. package/dist/collection/components/date-picker/date-picker.js +45 -17
  124. package/dist/collection/components/date-picker/date-picker.js.map +1 -1
  125. package/dist/collection/components/details/details.css +3 -3
  126. package/dist/collection/components/details/details.js +14 -8
  127. package/dist/collection/components/details/details.js.map +1 -1
  128. package/dist/collection/components/dialog/dialog.css +2 -3
  129. package/dist/collection/components/dialog/dialog.js +6 -10
  130. package/dist/collection/components/dialog/dialog.js.map +1 -1
  131. package/dist/collection/components/dropdown/dropdown.js +134 -85
  132. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  133. package/dist/collection/components/file-upload/file-upload-interface.js.map +1 -1
  134. package/dist/collection/components/file-upload/file-upload.css +9 -17
  135. package/dist/collection/components/file-upload/file-upload.js +17 -20
  136. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  137. package/dist/collection/components/global-nav/global-nav.css +2 -2
  138. package/dist/collection/components/global-nav/global-nav.js +5 -5
  139. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  140. package/dist/collection/components/global-search-results/global-search-results.css +3 -3
  141. package/dist/collection/components/grid/grid-item.js +1 -1
  142. package/dist/collection/components/grid/grid.js +1 -1
  143. package/dist/collection/components/grid/grid.js.map +1 -1
  144. package/dist/collection/components/hero/hero.js +1 -1
  145. package/dist/collection/components/hero/hero.js.map +1 -1
  146. package/dist/collection/components/icon/icon.js +1 -1
  147. package/dist/collection/components/icon-button/icon-button.css +2 -2
  148. package/dist/collection/components/input/input.css +9 -11
  149. package/dist/collection/components/input/input.js +26 -7
  150. package/dist/collection/components/input/input.js.map +1 -1
  151. package/dist/collection/components/menu/menu.css +7 -7
  152. package/dist/collection/components/menu/menu.js +1 -1
  153. package/dist/collection/components/menu/menu.js.map +1 -1
  154. package/dist/collection/components/menu-drawer/menu-drawer.js +1 -1
  155. package/dist/collection/components/menu-drawer/menu-drawer.js.map +1 -1
  156. package/dist/collection/components/nav-item/nav-item.js +5 -5
  157. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  158. package/dist/collection/components/range/range.css +4 -4
  159. package/dist/collection/components/range/range.js +5 -5
  160. package/dist/collection/components/range/range.js.map +1 -1
  161. package/dist/collection/components/rating/rating.js +1 -1
  162. package/dist/collection/components/rating/rating.js.map +1 -1
  163. package/dist/collection/components/resize-observe/resize-observe.js +2 -2
  164. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  165. package/dist/collection/components/select/select.css +4 -4
  166. package/dist/collection/components/select/select.js +6 -6
  167. package/dist/collection/components/select/select.js.map +1 -1
  168. package/dist/collection/components/slides/slides.css +2 -2
  169. package/dist/collection/components/slides/slides.js +7 -7
  170. package/dist/collection/components/spinner/spinner.css +2 -2
  171. package/dist/collection/components/sticky/sticker.js +1 -1
  172. package/dist/collection/components/sticky/sticker.js.map +1 -1
  173. package/dist/collection/components/tabs/tab-group.css +6 -6
  174. package/dist/collection/components/tabs/tab-group.js +3 -3
  175. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  176. package/dist/collection/components/tabs/tab.css +2 -2
  177. package/dist/collection/components/tooltip/tooltip.css +15 -13
  178. package/dist/collection/components/tooltip/tooltip.js +50 -34
  179. package/dist/collection/components/tooltip/tooltip.js.map +1 -1
  180. package/dist/collection/global/script/global.js +4 -2
  181. package/dist/collection/global/script/global.js.map +1 -1
  182. package/dist/collection/index.js +1 -1
  183. package/dist/collection/index.js.map +1 -1
  184. package/dist/collection/utils/gesture/swipe-back.js +1 -1
  185. package/dist/collection/utils/gesture/swipe-back.js.map +1 -1
  186. package/dist/collection/utils/{utils.js → index.js} +1 -1
  187. package/dist/collection/utils/{utils.js.map → index.js.map} +1 -1
  188. package/dist/collection/utils/store/component-store.js +1 -1
  189. package/dist/collection/utils/store/component-store.js.map +1 -1
  190. package/dist/collection/utils/testing/index.js +242 -0
  191. package/dist/collection/utils/testing/index.js.map +1 -0
  192. package/dist/custom-elements/index.js +374 -228
  193. package/dist/custom-elements/index.js.map +1 -1
  194. package/dist/esm/{algolia-data-a84aeef1.js → algolia-data-b31a9800.js} +2 -2
  195. package/dist/esm/algolia-data-b31a9800.js.map +1 -0
  196. package/dist/esm/algoliasearch.umd-7ecbe0e9.js +10 -0
  197. package/dist/esm/algoliasearch.umd-7ecbe0e9.js.map +1 -0
  198. package/dist/esm/{component-store-182d1931.js → component-store-93172454.js} +2 -2
  199. package/dist/esm/{component-store-182d1931.js.map → component-store-93172454.js.map} +1 -1
  200. package/dist/esm/{css-shim-f12af614.js → css-shim-4e602522.js} +2 -2
  201. package/dist/esm/{css-shim-f12af614.js.map → css-shim-4e602522.js.map} +1 -1
  202. package/dist/esm/{dom-2f25dd5a.js → dom-acc01cc2.js} +2 -2
  203. package/dist/esm/{dom-2f25dd5a.js.map → dom-acc01cc2.js.map} +1 -1
  204. package/dist/esm/{global-c85d24a2.js → global-118ae701.js} +5 -3
  205. package/dist/esm/global-118ae701.js.map +1 -0
  206. package/dist/esm/{utils-fd1ada22.js → index-269c88a9.js} +1 -1
  207. package/dist/esm/{utils-fd1ada22.js.map → index-269c88a9.js.map} +1 -1
  208. package/dist/esm/{index-20becda2.js → index-912ef959.js} +10 -3
  209. package/dist/esm/index-912ef959.js.map +1 -0
  210. package/dist/esm/index.js +2 -2
  211. package/dist/esm/index.js.map +1 -1
  212. package/dist/esm/loader.js +5 -5
  213. package/dist/esm/loader.js.map +1 -1
  214. package/dist/esm/nano-accordion.entry.js +1 -1
  215. package/dist/esm/nano-accordion.entry.js.map +1 -1
  216. package/dist/esm/nano-alert.entry.js +3 -3
  217. package/dist/esm/nano-alert.entry.js.map +1 -1
  218. package/dist/esm/nano-algolia-filter.entry.js +3 -3
  219. package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
  220. package/dist/esm/nano-algolia-input.entry.js +5 -5
  221. package/dist/esm/nano-algolia-input.entry.js.map +1 -1
  222. package/dist/esm/nano-algolia-pagination.entry.js +2 -2
  223. package/dist/esm/nano-algolia-results.entry.js +2 -2
  224. package/dist/esm/nano-algolia.entry.js +5 -5
  225. package/dist/esm/nano-algolia.entry.js.map +1 -1
  226. package/dist/esm/nano-aspect-ratio.entry.js +12 -4
  227. package/dist/esm/nano-aspect-ratio.entry.js.map +1 -1
  228. package/dist/esm/nano-checkbox-group.entry.js +31 -16
  229. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  230. package/dist/esm/nano-checkbox.entry.js +33 -15
  231. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  232. package/dist/esm/nano-components.js +5 -5
  233. package/dist/esm/nano-components.js.map +1 -1
  234. package/dist/esm/nano-date-input.entry.js +45 -13
  235. package/dist/esm/nano-date-input.entry.js.map +1 -1
  236. package/dist/esm/nano-date-picker_2.entry.js +116 -71
  237. package/dist/esm/nano-date-picker_2.entry.js.map +1 -1
  238. package/dist/esm/nano-details.entry.js +15 -9
  239. package/dist/esm/nano-details.entry.js.map +1 -1
  240. package/dist/esm/nano-dialog.entry.js +5 -9
  241. package/dist/esm/nano-dialog.entry.js.map +1 -1
  242. package/dist/esm/nano-drawer.entry.js +1 -1
  243. package/dist/esm/nano-file-upload.entry.js +7 -14
  244. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  245. package/dist/esm/nano-global-nav.entry.js +5 -5
  246. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  247. package/dist/esm/nano-global-search-results.entry.js +2 -2
  248. package/dist/esm/nano-grid_3.entry.js +1 -1
  249. package/dist/esm/nano-grid_3.entry.js.map +1 -1
  250. package/dist/esm/nano-hero.entry.js +2 -2
  251. package/dist/esm/nano-hero.entry.js.map +1 -1
  252. package/dist/esm/nano-icon-button.entry.js +2 -2
  253. package/dist/esm/nano-icon.entry.js +1 -1
  254. package/dist/esm/nano-input.entry.js +12 -2
  255. package/dist/esm/nano-input.entry.js.map +1 -1
  256. package/dist/esm/nano-menu-drawer.entry.js +1 -1
  257. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  258. package/dist/esm/nano-menu.entry.js +2 -2
  259. package/dist/esm/nano-menu.entry.js.map +1 -1
  260. package/dist/esm/nano-nav-item_2.entry.js +4 -4
  261. package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
  262. package/dist/esm/nano-range.entry.js +3 -3
  263. package/dist/esm/nano-range.entry.js.map +1 -1
  264. package/dist/esm/nano-rating.entry.js +2 -2
  265. package/dist/esm/nano-rating.entry.js.map +1 -1
  266. package/dist/esm/nano-resize-observe_2.entry.js +1 -1
  267. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  268. package/dist/esm/nano-select-option.entry.js +1 -1
  269. package/dist/esm/nano-slide.entry.js +1 -1
  270. package/dist/esm/nano-slides.entry.js +2 -2
  271. package/dist/esm/nano-spinner.entry.js +2 -2
  272. package/dist/esm/nano-sticker.entry.js +2 -2
  273. package/dist/esm/nano-sticker.entry.js.map +1 -1
  274. package/dist/esm/nano-tab-content.entry.js +1 -1
  275. package/dist/esm/nano-tab-group.entry.js +4 -4
  276. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  277. package/dist/esm/nano-tab.entry.js +2 -2
  278. package/dist/esm/nano-tooltip.entry.js +49 -35
  279. package/dist/esm/nano-tooltip.entry.js.map +1 -1
  280. package/dist/esm/{popover-05f61b5f.js → popover-a57d8413.js} +32 -32
  281. package/dist/esm/popover-a57d8413.js.map +1 -0
  282. package/dist/esm/{shadow-css-70953e54.js → shadow-css-460f0f5c.js} +2 -2
  283. package/dist/esm/shadow-css-460f0f5c.js.map +1 -0
  284. package/dist/esm-es5/{algolia-data-a84aeef1.js → algolia-data-b31a9800.js} +2 -2
  285. package/dist/esm-es5/algolia-data-b31a9800.js.map +1 -0
  286. package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js +4 -0
  287. package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js.map +1 -0
  288. package/dist/esm-es5/{component-store-182d1931.js → component-store-93172454.js} +2 -2
  289. package/dist/esm-es5/{component-store-182d1931.js.map → component-store-93172454.js.map} +1 -1
  290. package/dist/esm-es5/{css-shim-f12af614.js → css-shim-4e602522.js} +1 -1
  291. package/dist/esm-es5/{css-shim-f12af614.js.map → css-shim-4e602522.js.map} +1 -1
  292. package/dist/esm-es5/{dom-2f25dd5a.js → dom-acc01cc2.js} +1 -1
  293. package/dist/esm-es5/{dom-2f25dd5a.js.map → dom-acc01cc2.js.map} +1 -1
  294. package/dist/esm-es5/{global-c85d24a2.js → global-118ae701.js} +2 -2
  295. package/dist/esm-es5/global-118ae701.js.map +1 -0
  296. package/dist/esm-es5/{utils-fd1ada22.js → index-269c88a9.js} +1 -1
  297. package/dist/esm-es5/{utils-fd1ada22.js.map → index-269c88a9.js.map} +1 -1
  298. package/dist/esm-es5/index-912ef959.js +2 -0
  299. package/dist/esm-es5/index-912ef959.js.map +1 -0
  300. package/dist/esm-es5/index.js +1 -1
  301. package/dist/esm-es5/index.js.map +1 -1
  302. package/dist/esm-es5/loader.js +1 -1
  303. package/dist/esm-es5/loader.js.map +1 -1
  304. package/dist/esm-es5/nano-accordion.entry.js +1 -1
  305. package/dist/esm-es5/nano-accordion.entry.js.map +1 -1
  306. package/dist/esm-es5/nano-alert.entry.js +1 -1
  307. package/dist/esm-es5/nano-alert.entry.js.map +1 -1
  308. package/dist/esm-es5/nano-algolia-filter.entry.js +1 -1
  309. package/dist/esm-es5/nano-algolia-filter.entry.js.map +1 -1
  310. package/dist/esm-es5/nano-algolia-input.entry.js +1 -1
  311. package/dist/esm-es5/nano-algolia-input.entry.js.map +1 -1
  312. package/dist/esm-es5/nano-algolia-pagination.entry.js +1 -1
  313. package/dist/esm-es5/nano-algolia-results.entry.js +1 -1
  314. package/dist/esm-es5/nano-algolia.entry.js +1 -1
  315. package/dist/esm-es5/nano-algolia.entry.js.map +1 -1
  316. package/dist/esm-es5/nano-aspect-ratio.entry.js +1 -1
  317. package/dist/esm-es5/nano-aspect-ratio.entry.js.map +1 -1
  318. package/dist/esm-es5/nano-checkbox-group.entry.js +1 -1
  319. package/dist/esm-es5/nano-checkbox-group.entry.js.map +1 -1
  320. package/dist/esm-es5/nano-checkbox.entry.js +1 -1
  321. package/dist/esm-es5/nano-checkbox.entry.js.map +1 -1
  322. package/dist/esm-es5/nano-components.js +1 -1
  323. package/dist/esm-es5/nano-components.js.map +1 -1
  324. package/dist/esm-es5/nano-date-input.entry.js +1 -1
  325. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  326. package/dist/esm-es5/nano-date-picker_2.entry.js +1 -1
  327. package/dist/esm-es5/nano-date-picker_2.entry.js.map +1 -1
  328. package/dist/esm-es5/nano-details.entry.js +1 -1
  329. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  330. package/dist/esm-es5/nano-dialog.entry.js +1 -1
  331. package/dist/esm-es5/nano-dialog.entry.js.map +1 -1
  332. package/dist/esm-es5/nano-drawer.entry.js +1 -1
  333. package/dist/esm-es5/nano-file-upload.entry.js +1 -1
  334. package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
  335. package/dist/esm-es5/nano-global-nav.entry.js +1 -1
  336. package/dist/esm-es5/nano-global-nav.entry.js.map +1 -1
  337. package/dist/esm-es5/nano-global-search-results.entry.js +1 -1
  338. package/dist/esm-es5/nano-grid_3.entry.js +1 -1
  339. package/dist/esm-es5/nano-grid_3.entry.js.map +1 -1
  340. package/dist/esm-es5/nano-hero.entry.js +1 -1
  341. package/dist/esm-es5/nano-hero.entry.js.map +1 -1
  342. package/dist/esm-es5/nano-icon-button.entry.js +1 -1
  343. package/dist/esm-es5/nano-icon.entry.js +1 -1
  344. package/dist/esm-es5/nano-input.entry.js +1 -1
  345. package/dist/esm-es5/nano-input.entry.js.map +1 -1
  346. package/dist/esm-es5/nano-menu-drawer.entry.js +1 -1
  347. package/dist/esm-es5/nano-menu-drawer.entry.js.map +1 -1
  348. package/dist/esm-es5/nano-menu.entry.js +1 -1
  349. package/dist/esm-es5/nano-menu.entry.js.map +1 -1
  350. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  351. package/dist/esm-es5/nano-nav-item_2.entry.js.map +1 -1
  352. package/dist/esm-es5/nano-range.entry.js +1 -1
  353. package/dist/esm-es5/nano-range.entry.js.map +1 -1
  354. package/dist/esm-es5/nano-rating.entry.js +1 -1
  355. package/dist/esm-es5/nano-rating.entry.js.map +1 -1
  356. package/dist/esm-es5/nano-resize-observe_2.entry.js +1 -1
  357. package/dist/esm-es5/nano-resize-observe_2.entry.js.map +1 -1
  358. package/dist/esm-es5/nano-select-option.entry.js +1 -1
  359. package/dist/esm-es5/nano-slide.entry.js +1 -1
  360. package/dist/esm-es5/nano-slides.entry.js +2 -2
  361. package/dist/esm-es5/nano-spinner.entry.js +1 -1
  362. package/dist/esm-es5/nano-sticker.entry.js +1 -1
  363. package/dist/esm-es5/nano-sticker.entry.js.map +1 -1
  364. package/dist/esm-es5/nano-tab-content.entry.js +1 -1
  365. package/dist/esm-es5/nano-tab-group.entry.js +1 -1
  366. package/dist/esm-es5/nano-tab-group.entry.js.map +1 -1
  367. package/dist/esm-es5/nano-tab.entry.js +1 -1
  368. package/dist/esm-es5/nano-tooltip.entry.js +1 -1
  369. package/dist/esm-es5/nano-tooltip.entry.js.map +1 -1
  370. package/dist/esm-es5/popover-a57d8413.js +2 -0
  371. package/dist/{esm/popover-05f61b5f.js.map → esm-es5/popover-a57d8413.js.map} +1 -1
  372. package/dist/esm-es5/{shadow-css-70953e54.js → shadow-css-460f0f5c.js} +1 -1
  373. package/dist/esm-es5/shadow-css-460f0f5c.js.map +1 -0
  374. package/dist/nano-components/index.esm.js +1 -1
  375. package/dist/nano-components/index.esm.js.map +1 -1
  376. package/dist/nano-components/nano-components.esm.js +1 -1
  377. package/dist/nano-components/nano-components.esm.js.map +1 -1
  378. package/dist/nano-components/nano-components.js +1 -1
  379. package/dist/nano-components/{p-c8ff45ab.system.entry.js → p-007c6041.system.entry.js} +2 -2
  380. package/dist/nano-components/{p-c8ff45ab.system.entry.js.map → p-007c6041.system.entry.js.map} +0 -0
  381. package/dist/nano-components/{p-1ce90ea4.entry.js → p-02177814.entry.js} +2 -2
  382. package/dist/nano-components/p-02177814.entry.js.map +1 -0
  383. package/dist/nano-components/{p-9b9ca075.system.entry.js → p-046af455.system.entry.js} +2 -2
  384. package/dist/nano-components/p-046af455.system.entry.js.map +1 -0
  385. package/dist/nano-components/p-05c062ae.js +4 -0
  386. package/dist/nano-components/p-05c062ae.js.map +1 -0
  387. package/dist/nano-components/{p-4365edc6.js → p-0c9eb057.js} +1 -1
  388. package/dist/nano-components/{p-4365edc6.js.map → p-0c9eb057.js.map} +1 -1
  389. package/dist/nano-components/{p-dce1f547.entry.js → p-104a9d64.entry.js} +2 -2
  390. package/dist/nano-components/p-104a9d64.entry.js.map +1 -0
  391. package/dist/nano-components/{p-8611e764.system.entry.js → p-10f24f67.system.entry.js} +2 -2
  392. package/dist/nano-components/{p-8611e764.system.entry.js.map → p-10f24f67.system.entry.js.map} +0 -0
  393. package/dist/nano-components/p-1477b91d.system.js +2 -0
  394. package/dist/nano-components/p-1477b91d.system.js.map +1 -0
  395. package/dist/nano-components/{p-461c539f.system.entry.js → p-1c7614c4.system.entry.js} +2 -2
  396. package/dist/nano-components/p-1c7614c4.system.entry.js.map +1 -0
  397. package/dist/nano-components/{p-8a41ccd9.system.entry.js → p-1d16e897.system.entry.js} +2 -2
  398. package/dist/nano-components/{p-8a41ccd9.system.entry.js.map → p-1d16e897.system.entry.js.map} +0 -0
  399. package/dist/nano-components/{p-4042379b.system.entry.js → p-21a6f295.system.entry.js} +2 -2
  400. package/dist/nano-components/p-21a6f295.system.entry.js.map +1 -0
  401. package/dist/nano-components/{p-9a456956.system.js → p-2671d998.system.js} +2 -2
  402. package/dist/nano-components/p-2671d998.system.js.map +1 -0
  403. package/dist/nano-components/{p-7367dfd5.system.entry.js → p-273b19b0.system.entry.js} +2 -2
  404. package/dist/nano-components/{p-7367dfd5.system.entry.js.map → p-273b19b0.system.entry.js.map} +0 -0
  405. package/dist/nano-components/p-28123e6e.entry.js +2 -0
  406. package/dist/nano-components/p-28123e6e.entry.js.map +1 -0
  407. package/dist/nano-components/{p-7b3de191.entry.js → p-2ae39fa1.entry.js} +2 -2
  408. package/dist/nano-components/p-2ae39fa1.entry.js.map +1 -0
  409. package/dist/nano-components/{p-47d2a49e.system.js → p-2d0b8da6.system.js} +1 -1
  410. package/dist/nano-components/{p-47d2a49e.system.js.map → p-2d0b8da6.system.js.map} +1 -1
  411. package/dist/nano-components/{p-6a9fe61f.system.entry.js → p-2edaf0eb.system.entry.js} +3 -3
  412. package/dist/nano-components/{p-6a9fe61f.system.entry.js.map → p-2edaf0eb.system.entry.js.map} +0 -0
  413. package/dist/nano-components/{p-be430309.system.entry.js → p-2f876f68.system.entry.js} +2 -2
  414. package/dist/nano-components/{p-be430309.system.entry.js.map → p-2f876f68.system.entry.js.map} +1 -1
  415. package/dist/nano-components/{p-e1429ff0.system.entry.js → p-305ba54b.system.entry.js} +2 -2
  416. package/dist/nano-components/p-305ba54b.system.entry.js.map +1 -0
  417. package/dist/nano-components/{p-e142f6b6.system.entry.js → p-30a22cd0.system.entry.js} +2 -2
  418. package/dist/nano-components/p-30a22cd0.system.entry.js.map +1 -0
  419. package/dist/nano-components/{p-a897cfae.system.entry.js → p-31c52d0a.system.entry.js} +2 -2
  420. package/dist/nano-components/p-31c52d0a.system.entry.js.map +1 -0
  421. package/dist/nano-components/{p-f578998d.system.entry.js → p-325f32b3.system.entry.js} +2 -2
  422. package/dist/nano-components/p-325f32b3.system.entry.js.map +1 -0
  423. package/dist/nano-components/{p-bc09eba8.entry.js → p-3b2ea5fd.entry.js} +2 -2
  424. package/dist/nano-components/p-3b2ea5fd.entry.js.map +1 -0
  425. package/dist/nano-components/{p-0283a2ec.js → p-4370f8ae.js} +2 -2
  426. package/dist/nano-components/p-4370f8ae.js.map +1 -0
  427. package/dist/nano-components/{p-d7eb8c22.system.js → p-4647a31f.system.js} +2 -2
  428. package/dist/nano-components/{p-d7eb8c22.system.js.map → p-4647a31f.system.js.map} +1 -1
  429. package/dist/nano-components/{p-79e11525.system.entry.js → p-491096f0.system.entry.js} +2 -2
  430. package/dist/nano-components/p-491096f0.system.entry.js.map +1 -0
  431. package/dist/nano-components/{p-fb8aa0a7.system.entry.js → p-4e21bfe1.system.entry.js} +2 -2
  432. package/dist/nano-components/{p-fb8aa0a7.system.entry.js.map → p-4e21bfe1.system.entry.js.map} +0 -0
  433. package/dist/nano-components/{p-847ce50c.entry.js → p-4fa0b560.entry.js} +2 -2
  434. package/dist/nano-components/{p-847ce50c.entry.js.map → p-4fa0b560.entry.js.map} +0 -0
  435. package/dist/nano-components/{p-1bd92497.system.entry.js → p-4fbc3c8b.system.entry.js} +2 -2
  436. package/dist/nano-components/{p-1bd92497.system.entry.js.map → p-4fbc3c8b.system.entry.js.map} +0 -0
  437. package/dist/nano-components/{p-5198e4c6.system.js → p-508484f8.system.js} +2 -2
  438. package/dist/nano-components/p-508484f8.system.js.map +1 -0
  439. package/dist/nano-components/p-5672ebbb.system.entry.js +2 -0
  440. package/dist/nano-components/p-5672ebbb.system.entry.js.map +1 -0
  441. package/dist/nano-components/{p-405d92a0.entry.js → p-574143b5.entry.js} +2 -2
  442. package/dist/nano-components/{p-405d92a0.entry.js.map → p-574143b5.entry.js.map} +0 -0
  443. package/dist/nano-components/{p-346f0d8c.system.entry.js → p-57434dc5.system.entry.js} +2 -2
  444. package/dist/nano-components/{p-346f0d8c.system.entry.js.map → p-57434dc5.system.entry.js.map} +0 -0
  445. package/dist/nano-components/{p-7b94cd1c.entry.js → p-574f1393.entry.js} +2 -2
  446. package/dist/nano-components/p-574f1393.entry.js.map +1 -0
  447. package/dist/nano-components/{p-6b22f5db.entry.js → p-580eac05.entry.js} +2 -2
  448. package/dist/nano-components/p-580eac05.entry.js.map +1 -0
  449. package/dist/nano-components/{p-fa884269.entry.js → p-59aba360.entry.js} +2 -2
  450. package/dist/nano-components/{p-fa884269.entry.js.map → p-59aba360.entry.js.map} +0 -0
  451. package/dist/nano-components/{p-e886b71e.system.js → p-698a8ab3.system.js} +2 -2
  452. package/dist/nano-components/p-698a8ab3.system.js.map +1 -0
  453. package/dist/nano-components/{p-6ba91d36.entry.js → p-6a3eee01.entry.js} +2 -2
  454. package/dist/nano-components/p-6a3eee01.entry.js.map +1 -0
  455. package/dist/nano-components/{p-1ed74370.entry.js → p-6aab52a0.entry.js} +2 -2
  456. package/dist/nano-components/p-6aab52a0.entry.js.map +1 -0
  457. package/dist/nano-components/{p-e5a19e7f.entry.js → p-6dc59ae8.entry.js} +2 -2
  458. package/dist/nano-components/{p-e5a19e7f.entry.js.map → p-6dc59ae8.entry.js.map} +0 -0
  459. package/dist/nano-components/{p-c171b273.entry.js → p-6eba639a.entry.js} +3 -3
  460. package/dist/nano-components/{p-c171b273.entry.js.map → p-6eba639a.entry.js.map} +0 -0
  461. package/dist/nano-components/{p-4739c706.system.entry.js → p-73d969d0.system.entry.js} +2 -2
  462. package/dist/nano-components/{p-4739c706.system.entry.js.map → p-73d969d0.system.entry.js.map} +1 -1
  463. package/dist/nano-components/{p-a50ca06f.system.entry.js → p-7dc79f13.system.entry.js} +2 -2
  464. package/dist/nano-components/{p-a50ca06f.system.entry.js.map → p-7dc79f13.system.entry.js.map} +0 -0
  465. package/dist/nano-components/{p-ba59977d.entry.js → p-7df31b1c.entry.js} +2 -2
  466. package/dist/nano-components/{p-ba59977d.entry.js.map → p-7df31b1c.entry.js.map} +0 -0
  467. package/dist/nano-components/{p-60b2ba81.system.entry.js → p-7e208086.system.entry.js} +2 -2
  468. package/dist/nano-components/p-7e208086.system.entry.js.map +1 -0
  469. package/dist/nano-components/{p-63cc5e0d.system.entry.js → p-7e4129b4.system.entry.js} +2 -2
  470. package/dist/nano-components/{p-63cc5e0d.system.entry.js.map → p-7e4129b4.system.entry.js.map} +0 -0
  471. package/dist/nano-components/{p-7fdff708.entry.js → p-7e68796f.entry.js} +2 -2
  472. package/dist/nano-components/p-7e68796f.entry.js.map +1 -0
  473. package/dist/nano-components/{p-027c5ed7.entry.js → p-81d7fd45.entry.js} +2 -2
  474. package/dist/nano-components/{p-027c5ed7.entry.js.map → p-81d7fd45.entry.js.map} +0 -0
  475. package/dist/nano-components/{p-d795cbd4.entry.js → p-82571543.entry.js} +2 -2
  476. package/dist/nano-components/p-82571543.entry.js.map +1 -0
  477. package/dist/nano-components/{p-7a0e9c6f.system.entry.js → p-844a1134.system.entry.js} +2 -2
  478. package/dist/nano-components/{p-7a0e9c6f.system.entry.js.map → p-844a1134.system.entry.js.map} +0 -0
  479. package/dist/nano-components/p-8535a942.entry.js +2 -0
  480. package/dist/nano-components/p-8535a942.entry.js.map +1 -0
  481. package/dist/nano-components/{p-c6796f75.entry.js → p-8c1d85ae.entry.js} +2 -2
  482. package/dist/nano-components/p-8c1d85ae.entry.js.map +1 -0
  483. package/dist/nano-components/{p-b6f5e5ef.system.js → p-8d24287e.system.js} +1 -1
  484. package/dist/nano-components/{p-b6f5e5ef.system.js.map → p-8d24287e.system.js.map} +1 -1
  485. package/dist/nano-components/{p-20ad4e90.system.entry.js → p-8ed6acea.system.entry.js} +2 -2
  486. package/dist/nano-components/{p-20ad4e90.system.entry.js.map → p-8ed6acea.system.entry.js.map} +0 -0
  487. package/dist/nano-components/p-9164e5e2.system.entry.js +2 -0
  488. package/dist/nano-components/p-9164e5e2.system.entry.js.map +1 -0
  489. package/dist/nano-components/{p-9920e725.system.js → p-9348c301.system.js} +1 -1
  490. package/dist/nano-components/p-9348c301.system.js.map +1 -0
  491. package/dist/nano-components/p-9371d81b.system.entry.js +2 -0
  492. package/dist/nano-components/p-9371d81b.system.entry.js.map +1 -0
  493. package/dist/nano-components/{p-89a5c54a.system.js → p-94f03788.system.js} +1 -1
  494. package/dist/nano-components/{p-89a5c54a.system.js.map → p-94f03788.system.js.map} +1 -1
  495. package/dist/nano-components/{p-fa926d02.system.entry.js → p-95a4c3f2.system.entry.js} +2 -2
  496. package/dist/nano-components/p-95a4c3f2.system.entry.js.map +1 -0
  497. package/dist/nano-components/p-96ba0d00.entry.js +2 -0
  498. package/dist/nano-components/p-96ba0d00.entry.js.map +1 -0
  499. package/dist/nano-components/p-99637978.entry.js +2 -0
  500. package/dist/nano-components/p-99637978.entry.js.map +1 -0
  501. package/dist/nano-components/{p-f5f76780.entry.js → p-9ccd832b.entry.js} +2 -2
  502. package/dist/nano-components/p-9ccd832b.entry.js.map +1 -0
  503. package/dist/nano-components/{p-e1fd68eb.js → p-a1680208.js} +2 -2
  504. package/dist/nano-components/{p-e1fd68eb.js.map → p-a1680208.js.map} +1 -1
  505. package/dist/nano-components/{p-fb7ae92c.entry.js → p-a53a193c.entry.js} +2 -2
  506. package/dist/nano-components/p-a53a193c.entry.js.map +1 -0
  507. package/dist/nano-components/p-a7ac7964.system.entry.js +2 -0
  508. package/dist/nano-components/p-a7ac7964.system.entry.js.map +1 -0
  509. package/dist/nano-components/{p-ec01a0ad.system.entry.js → p-aadd8c31.system.entry.js} +2 -2
  510. package/dist/nano-components/p-aadd8c31.system.entry.js.map +1 -0
  511. package/dist/nano-components/p-ab666582.entry.js +2 -0
  512. package/dist/nano-components/p-ab666582.entry.js.map +1 -0
  513. package/dist/nano-components/p-acd5d0f0.system.entry.js +2 -0
  514. package/dist/nano-components/p-acd5d0f0.system.entry.js.map +1 -0
  515. package/dist/nano-components/p-af9f6453.system.js +2 -0
  516. package/dist/nano-components/p-af9f6453.system.js.map +1 -0
  517. package/dist/nano-components/p-b1d3ab54.system.entry.js +2 -0
  518. package/dist/nano-components/p-b1d3ab54.system.entry.js.map +1 -0
  519. package/dist/nano-components/{p-27520572.entry.js → p-b3131821.entry.js} +2 -2
  520. package/dist/nano-components/{p-27520572.entry.js.map → p-b3131821.entry.js.map} +0 -0
  521. package/dist/nano-components/{p-e24d3e8a.entry.js → p-b7a58722.entry.js} +2 -2
  522. package/dist/nano-components/p-b7a58722.entry.js.map +1 -0
  523. package/dist/nano-components/p-bb0619e6.js +2 -0
  524. package/dist/nano-components/p-bb0619e6.js.map +1 -0
  525. package/dist/nano-components/{p-d0c501a0.entry.js → p-c3f861c5.entry.js} +2 -2
  526. package/dist/nano-components/{p-d0c501a0.entry.js.map → p-c3f861c5.entry.js.map} +1 -1
  527. package/dist/nano-components/{p-21f484a3.system.entry.js → p-c655e010.system.entry.js} +2 -2
  528. package/dist/nano-components/{p-21f484a3.system.entry.js.map → p-c655e010.system.entry.js.map} +1 -1
  529. package/dist/nano-components/p-c72b22be.entry.js +2 -0
  530. package/dist/nano-components/p-c72b22be.entry.js.map +1 -0
  531. package/dist/nano-components/p-d112948c.js +2 -0
  532. package/dist/nano-components/p-d112948c.js.map +1 -0
  533. package/dist/nano-components/{p-09b702fb.entry.js → p-d250987a.entry.js} +2 -2
  534. package/dist/nano-components/{p-09b702fb.entry.js.map → p-d250987a.entry.js.map} +0 -0
  535. package/dist/nano-components/p-d393d10a.system.entry.js +2 -0
  536. package/dist/nano-components/p-d393d10a.system.entry.js.map +1 -0
  537. package/dist/nano-components/p-db271541.entry.js +2 -0
  538. package/dist/nano-components/p-db271541.entry.js.map +1 -0
  539. package/dist/nano-components/p-dccd86ec.system.js +4 -0
  540. package/dist/nano-components/p-dccd86ec.system.js.map +1 -0
  541. package/dist/nano-components/p-e0cc37fb.entry.js +2 -0
  542. package/dist/nano-components/{p-2e1f6c4a.entry.js.map → p-e0cc37fb.entry.js.map} +1 -1
  543. package/dist/nano-components/{p-76bf0452.system.entry.js → p-e28536b4.system.entry.js} +2 -2
  544. package/dist/nano-components/p-e28536b4.system.entry.js.map +1 -0
  545. package/dist/nano-components/{p-acfe1b68.entry.js → p-ebf34764.entry.js} +2 -2
  546. package/dist/nano-components/{p-acfe1b68.entry.js.map → p-ebf34764.entry.js.map} +0 -0
  547. package/dist/nano-components/{p-e33dd8b9.js → p-ed174626.js} +1 -1
  548. package/dist/nano-components/p-ed174626.js.map +1 -0
  549. package/dist/nano-components/{p-c930d4f5.js → p-ed2efbeb.js} +1 -1
  550. package/dist/nano-components/{p-c930d4f5.js.map → p-ed2efbeb.js.map} +1 -1
  551. package/dist/nano-components/p-edddeaae.system.js +2 -0
  552. package/dist/nano-components/p-edddeaae.system.js.map +1 -0
  553. package/dist/nano-components/p-ef5d9308.entry.js +2 -0
  554. package/dist/nano-components/p-ef5d9308.entry.js.map +1 -0
  555. package/dist/nano-components/p-f234e064.system.entry.js +2 -0
  556. package/dist/nano-components/p-f234e064.system.entry.js.map +1 -0
  557. package/dist/nano-components/{p-507490fc.system.entry.js → p-f27c9429.system.entry.js} +2 -2
  558. package/dist/nano-components/{p-507490fc.system.entry.js.map → p-f27c9429.system.entry.js.map} +1 -1
  559. package/dist/nano-components/{p-372ce425.entry.js → p-f3688bce.entry.js} +2 -2
  560. package/dist/nano-components/{p-372ce425.entry.js.map → p-f3688bce.entry.js.map} +0 -0
  561. package/dist/nano-components/{p-35eb8352.system.entry.js → p-f86db7c0.system.entry.js} +2 -2
  562. package/dist/nano-components/{p-35eb8352.system.entry.js.map → p-f86db7c0.system.entry.js.map} +1 -1
  563. package/dist/nano-components/{p-6747f517.system.entry.js → p-fa86645d.system.entry.js} +2 -2
  564. package/dist/nano-components/p-fa86645d.system.entry.js.map +1 -0
  565. package/dist/nano-components/{p-9c26b459.js → p-fd0fca23.js} +1 -1
  566. package/dist/nano-components/{p-9c26b459.js.map → p-fd0fca23.js.map} +1 -1
  567. package/dist/nano-components/p-fdfa03d7.entry.js +2 -0
  568. package/dist/nano-components/p-fdfa03d7.entry.js.map +1 -0
  569. package/dist/nano-components/p-ff2ff5b0.js +2 -0
  570. package/dist/nano-components/p-ff2ff5b0.js.map +1 -0
  571. package/dist/nano-components/p-ff5890b4.entry.js +2 -0
  572. package/dist/nano-components/p-ff5890b4.entry.js.map +1 -0
  573. package/dist/nano-components/{p-23e9f09e.entry.js → p-ffab923c.entry.js} +2 -2
  574. package/dist/nano-components/p-ffab923c.entry.js.map +1 -0
  575. package/dist/themes/nanopore.css +1 -1
  576. package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +1 -1
  577. package/dist/types/components/checkbox/__tests__/__fixtures__/checkbox-templates.d.ts +8 -0
  578. package/dist/types/components/checkbox/checkbox-group.d.ts +4 -2
  579. package/dist/types/components/checkbox/checkbox.d.ts +9 -5
  580. package/dist/types/components/date-input/date-input.d.ts +9 -0
  581. package/dist/types/components/date-picker/date-picker.d.ts +9 -4
  582. package/dist/types/components/details/details.d.ts +1 -0
  583. package/dist/types/components/dropdown/dropdown.d.ts +21 -14
  584. package/dist/types/components/file-upload/file-upload-interface.d.ts +4 -3
  585. package/dist/types/components/file-upload/file-upload.d.ts +2 -12
  586. package/dist/types/components/input/input.d.ts +2 -1
  587. package/dist/types/components/tooltip/tooltip.d.ts +10 -7
  588. package/dist/types/components.d.ts +40 -14
  589. package/dist/types/index.d.ts +1 -1
  590. package/dist/types/utils/{utils.d.ts → index.d.ts} +0 -0
  591. package/dist/types/utils/testing/index.d.ts +49 -0
  592. package/docs-json.json +125 -47
  593. package/docs-vscode.json +9 -1
  594. package/package.json +10 -8
  595. package/dist/cjs/algolia-data-771a61ea.js.map +0 -1
  596. package/dist/cjs/algoliasearch.umd-51f0001d.js +0 -12
  597. package/dist/cjs/algoliasearch.umd-51f0001d.js.map +0 -1
  598. package/dist/cjs/global-befb7a64.js.map +0 -1
  599. package/dist/cjs/index-43791691.js.map +0 -1
  600. package/dist/cjs/popover-eccc07bd.js.map +0 -1
  601. package/dist/cjs/shadow-css-c5dce0c8.js.map +0 -1
  602. package/dist/collection/utils/testing-utils.js +0 -156
  603. package/dist/collection/utils/testing-utils.js.map +0 -1
  604. package/dist/esm/algolia-data-a84aeef1.js.map +0 -1
  605. package/dist/esm/algoliasearch.umd-2c129faa.js +0 -10
  606. package/dist/esm/algoliasearch.umd-2c129faa.js.map +0 -1
  607. package/dist/esm/global-c85d24a2.js.map +0 -1
  608. package/dist/esm/index-20becda2.js.map +0 -1
  609. package/dist/esm/shadow-css-70953e54.js.map +0 -1
  610. package/dist/esm-es5/algolia-data-a84aeef1.js.map +0 -1
  611. package/dist/esm-es5/algoliasearch.umd-2c129faa.js +0 -4
  612. package/dist/esm-es5/algoliasearch.umd-2c129faa.js.map +0 -1
  613. package/dist/esm-es5/global-c85d24a2.js.map +0 -1
  614. package/dist/esm-es5/index-20becda2.js +0 -2
  615. package/dist/esm-es5/index-20becda2.js.map +0 -1
  616. package/dist/esm-es5/popover-05f61b5f.js +0 -2
  617. package/dist/esm-es5/popover-05f61b5f.js.map +0 -1
  618. package/dist/esm-es5/shadow-css-70953e54.js.map +0 -1
  619. package/dist/nano-components/p-0283a2ec.js.map +0 -1
  620. package/dist/nano-components/p-1ce90ea4.entry.js.map +0 -1
  621. package/dist/nano-components/p-1ed74370.entry.js.map +0 -1
  622. package/dist/nano-components/p-1f7502fa.js +0 -2
  623. package/dist/nano-components/p-1f7502fa.js.map +0 -1
  624. package/dist/nano-components/p-1fd60eec.system.js +0 -2
  625. package/dist/nano-components/p-1fd60eec.system.js.map +0 -1
  626. package/dist/nano-components/p-201b5f5b.entry.js +0 -2
  627. package/dist/nano-components/p-201b5f5b.entry.js.map +0 -1
  628. package/dist/nano-components/p-214ad382.entry.js +0 -2
  629. package/dist/nano-components/p-214ad382.entry.js.map +0 -1
  630. package/dist/nano-components/p-23da4de5.js +0 -4
  631. package/dist/nano-components/p-23da4de5.js.map +0 -1
  632. package/dist/nano-components/p-23e9f09e.entry.js.map +0 -1
  633. package/dist/nano-components/p-2d59dda3.system.js +0 -2
  634. package/dist/nano-components/p-2d59dda3.system.js.map +0 -1
  635. package/dist/nano-components/p-2e1f6c4a.entry.js +0 -2
  636. package/dist/nano-components/p-4042379b.system.entry.js.map +0 -1
  637. package/dist/nano-components/p-45e06083.system.entry.js +0 -2
  638. package/dist/nano-components/p-45e06083.system.entry.js.map +0 -1
  639. package/dist/nano-components/p-461c539f.system.entry.js.map +0 -1
  640. package/dist/nano-components/p-4bca8761.entry.js +0 -2
  641. package/dist/nano-components/p-4bca8761.entry.js.map +0 -1
  642. package/dist/nano-components/p-4ee095f3.js +0 -2
  643. package/dist/nano-components/p-4ee095f3.js.map +0 -1
  644. package/dist/nano-components/p-5198e4c6.system.js.map +0 -1
  645. package/dist/nano-components/p-568be88a.entry.js +0 -2
  646. package/dist/nano-components/p-568be88a.entry.js.map +0 -1
  647. package/dist/nano-components/p-5918ac51.entry.js +0 -2
  648. package/dist/nano-components/p-5918ac51.entry.js.map +0 -1
  649. package/dist/nano-components/p-5f716719.system.entry.js +0 -2
  650. package/dist/nano-components/p-5f716719.system.entry.js.map +0 -1
  651. package/dist/nano-components/p-60b2ba81.system.entry.js.map +0 -1
  652. package/dist/nano-components/p-6747f517.system.entry.js.map +0 -1
  653. package/dist/nano-components/p-6b22f5db.entry.js.map +0 -1
  654. package/dist/nano-components/p-6ba91d36.entry.js.map +0 -1
  655. package/dist/nano-components/p-76bf0452.system.entry.js.map +0 -1
  656. package/dist/nano-components/p-79e11525.system.entry.js.map +0 -1
  657. package/dist/nano-components/p-7b3de191.entry.js.map +0 -1
  658. package/dist/nano-components/p-7b94cd1c.entry.js.map +0 -1
  659. package/dist/nano-components/p-7f3b4f80.entry.js +0 -2
  660. package/dist/nano-components/p-7f3b4f80.entry.js.map +0 -1
  661. package/dist/nano-components/p-7fdff708.entry.js.map +0 -1
  662. package/dist/nano-components/p-8fe04c5c.system.entry.js +0 -2
  663. package/dist/nano-components/p-8fe04c5c.system.entry.js.map +0 -1
  664. package/dist/nano-components/p-93b1eeea.system.js +0 -2
  665. package/dist/nano-components/p-93b1eeea.system.js.map +0 -1
  666. package/dist/nano-components/p-9920e725.system.js.map +0 -1
  667. package/dist/nano-components/p-9a456956.system.js.map +0 -1
  668. package/dist/nano-components/p-9b9ca075.system.entry.js.map +0 -1
  669. package/dist/nano-components/p-a897cfae.system.entry.js.map +0 -1
  670. package/dist/nano-components/p-bc09eba8.entry.js.map +0 -1
  671. package/dist/nano-components/p-c3401b82.entry.js +0 -2
  672. package/dist/nano-components/p-c3401b82.entry.js.map +0 -1
  673. package/dist/nano-components/p-c4edcfc5.system.entry.js +0 -2
  674. package/dist/nano-components/p-c4edcfc5.system.entry.js.map +0 -1
  675. package/dist/nano-components/p-c6796f75.entry.js.map +0 -1
  676. package/dist/nano-components/p-c8792b54.system.entry.js +0 -2
  677. package/dist/nano-components/p-c8792b54.system.entry.js.map +0 -1
  678. package/dist/nano-components/p-cb750e49.system.js +0 -4
  679. package/dist/nano-components/p-cb750e49.system.js.map +0 -1
  680. package/dist/nano-components/p-cc5080df.entry.js +0 -2
  681. package/dist/nano-components/p-cc5080df.entry.js.map +0 -1
  682. package/dist/nano-components/p-d2ae5ac1.entry.js +0 -2
  683. package/dist/nano-components/p-d2ae5ac1.entry.js.map +0 -1
  684. package/dist/nano-components/p-d795cbd4.entry.js.map +0 -1
  685. package/dist/nano-components/p-da9f75d2.system.entry.js +0 -2
  686. package/dist/nano-components/p-da9f75d2.system.entry.js.map +0 -1
  687. package/dist/nano-components/p-dce1f547.entry.js.map +0 -1
  688. package/dist/nano-components/p-dd66cc74.entry.js +0 -2
  689. package/dist/nano-components/p-dd66cc74.entry.js.map +0 -1
  690. package/dist/nano-components/p-e1429ff0.system.entry.js.map +0 -1
  691. package/dist/nano-components/p-e142f6b6.system.entry.js.map +0 -1
  692. package/dist/nano-components/p-e24d3e8a.entry.js.map +0 -1
  693. package/dist/nano-components/p-e2848c8a.system.entry.js +0 -2
  694. package/dist/nano-components/p-e2848c8a.system.entry.js.map +0 -1
  695. package/dist/nano-components/p-e33dd8b9.js.map +0 -1
  696. package/dist/nano-components/p-e886b71e.system.js.map +0 -1
  697. package/dist/nano-components/p-e8a97250.system.entry.js +0 -2
  698. package/dist/nano-components/p-e8a97250.system.entry.js.map +0 -1
  699. package/dist/nano-components/p-ec01a0ad.system.entry.js.map +0 -1
  700. package/dist/nano-components/p-f55560d3.js +0 -2
  701. package/dist/nano-components/p-f55560d3.js.map +0 -1
  702. package/dist/nano-components/p-f578998d.system.entry.js.map +0 -1
  703. package/dist/nano-components/p-f5f76780.entry.js.map +0 -1
  704. package/dist/nano-components/p-fa926d02.system.entry.js.map +0 -1
  705. package/dist/nano-components/p-fb7ae92c.entry.js.map +0 -1
  706. package/dist/types/utils/testing-utils.d.ts +0 -41
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/nav-item/nav-item.scss?tag=nano-nav-item&encapsulation=shadow","src/components/nav-item/nav-item.tsx","src/components/select/select.scss?tag=nano-select&encapsulation=scoped","src/components/select/select.tsx"],"names":["navItemCss","NavItem","exports","class_1","hostRef","_this","this","hasSecondarySlot","hasAnchorEle","didBlur","animating","didOpen","isInGlobalNav","isInMenuDrawer","isInMenu","isLegacy","document","head","attachShadow","hasFocus","href","target","disabled","open","selected","secondaryActiveWidth","secondaryFallback","closeOnBlur","closeSecondary","__awaiter","nanoClosing","emit","secondaryMenu","secondaryDiv","displayTransition","status","_a","sent","openSecondary","window","innerWidth","call","nanoOpening","toggleSecondary","handleFocus","nanoFocus","handleHostBlur","el","removeAttribute","nanoBlur","handleHostClick","ev","foundlink","closest","btn","click","handleMouseEnter","globalNavEle","classList","contains","timeToWait","getSiblings","length","clearTimeout","waitHide","fromHover","waitShow","setTimeout","__generator","handleMouseLeave","handleClick","querySelector","blur","relatedTarget","foundThisNavEle","focus","preventScroll","removeEventListener","prototype","setFocus","openChange","didOpenChange","nanoClose","panelio_1","IntersectionObserver","data","boundingClientRect","top","scrollIntoView","behavior","disconnect","threshold","observe","addEventListener","tabIndex","nanoOpen","found","parentElement","componentWillLoad","secondaryEle","link","getDirectChildren","connectedCallback","render","h","Host","class","has-secondary","secondary-open","has-focus","nano-global-nav","nano-menu-drawer","nano-menu","legacy","onBlur","dir","ownerDocument","onMouseEnter","onMouseLeave","onClick","nav-item","ref","a","onFocus","name","div","tabindex","selectCss","Select","class_2","listItems","valueItems","selectId","selectIds","rtl","currLiIndex","inputSearchVal","watchValue","onInit","currInsertIndex","availOpts","showErrorMsg","errorMessage","listOpen","hasLabelSlot","hasHelperSlot","hasIconSlot","invalid","autofocus","validateOn","showInlineError","hideLabel","floatLabel","multiple","readonly","required","allowCustomValues","value","options","clearSelect","mask","debounce","native","customValidate","nativeSelect","setCustomValidity","getNativeValue","isValidValues","max","min","showInlineValidation","validity","valid","validationMessage","nanoValidate","isValid","originalEvent","handleInvalid","preventDefault","_","onChange","stopPropagation","handleDocumentKeyDown","handleDocumentMouseDown","openList","clearSelectValue","querySelectorAll","forEach","n","remove","setAvailOpts","onMultiInputBlur","onDragStart","ele","dragVal","dataset","onDragEnd","onDragLeave","spanVal","includes","to","indexOf","from","tmpArr","tmpVal","__spreadArray","onMultiInput","nanoSearchChange","onOptFocus","activeEle","getActiveOpt","add","onHostClick","closestElement","tagName","toLowerCase","rm","key","multiInput","previousElementSibling","removeValue","nextElementSibling","previousSibling","nextSibling","activeElement","selectedItem","testIndex","foundIndex_1","addValue","debounceChanged","debounceEvent","shouldValidate","valueChanged","split","setNativeValue","nanoChange","optionsChanged","multiChange","switchValue","setupMulti","popover","destroy","Popover","selectWrap","multiList","placement","skidding","distance","onTransitionEnd","scrollTop","listOpenChange","show","hide","reportValidity","validateFirst","getSelectElement","Promise","resolve","showError","message","filter","opt","toFind","strFilter","nsl","selectedIndex","hasAttribute","Array","map","find","val","values","reduce","accumulator","currentValue","slice","Math","isSelected","getLabel","foundVal","slotChangeObserver","mo","MutationObserver","mrs","processSlottedContent","childList","subtree","mutations","existingselect","attributes","attr","specified","nodeName","nodeValue","existingLabel","label","innerHTML","legacyOpts","options_1","option","push","innerText","children","parentNode","removeChild","addedNodes","node","nanoOpts","options_2","dispatchEvent","CustomEvent","detail","disconnectedCallback","componentDidLoad","renderLabel","labelId","position","classes","placeholder-as-label","visually-hide","htmlFor","id","moreId","listId","placeholder","unshift","optionMenu","valueMarkup","input_1","input","autoFocus","autocomplete","onInput","onTouchStart","onMouseDown","role","aria-labelledby","aria-controls","aria-expanded","aria-required","aria-autocomplete","i","toReturn","draggable","data-value","span","type","onTouchEnd","onMouseUp","aria-disabled","Object","assign","createColorClasses","color","has-value","is-invalid","has-label","has-float-label","has-multiple","multi-list-open","has-clr-btn","masked","native-select-wrap","native-select-wrap--multiple","ul","aria-multiselectable","aria-hidden","hidden","multi-select-box","multi-select-box--open","li","optval","aria-selected","select","form","onInvalid","size"],"mappings":"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","sourcesContent":["@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n\n:host {\n // --padding-top: inherit;\n // --padding-bottom: inherit;\n // --padding-start: inherit;\n // --padding-end: inherit;\n // --margin: inherit;\n\n // --secondary-padding-top: inherit;\n // --secondary-padding-bottom: inherit;\n // --secondary-padding-start: inherit;\n // --secondary-padding-end: inherit;\n\n // --border-bottom: inherit;\n // --icon-size: inherit;\n\n // --color: inherit;\n // --color-hover: inherit;\n // --color-focus: inherit;\n // --color-selected: inherit;\n // --color-open: inherit;\n\n // --bg-color: inherit;\n // --bg-color-hover: inherit;\n // --bg-color-selected: inherit;\n // --bg-color-open: inherit;\n // --bg-color-focus: inherit;\n\n // --secondary-bg-color: inherit;\n // --secondary-color: inherit;\n\n opacity: inherit;\n display: block;\n color: var(--color) !important;\n margin: var(--margin);\n\n ::slotted(*),\n * {\n box-sizing: border-box;\n }\n\n ::slotted(button),\n button {\n background: none;\n border: none;\n }\n\n ::slotted(button),\n ::slotted(a),\n ::slotted(a:visited),\n button,\n a,\n a:visited {\n @include text-inherit();\n @include padding(\n var(--padding-top),\n var(--padding-end),\n var(--padding-bottom),\n var(--padding-start)\n );\n\n display: var(--display, block);\n white-space: nowrap;\n color: var(--color) !important;\n background-color: var(--bg-color);\n }\n\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(null, var(--padding-end), null, null);\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(null, null, null, var(--padding-start));\n }\n\n .link {\n &::slotted(nano-icon[slot='icon-start']),\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(null, 0, null, var(--padding-start));\n }\n\n &::slotted(nano-icon[slot='icon-end']),\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(null, var(--padding-end), null, 0);\n }\n }\n\n .link,\n button,\n a {\n border-bottom: var(--border-bottom);\n display: flex;\n align-items: center;\n }\n\n .secondary-menu {\n display: none;\n }\n\n ::slotted(a:hover),\n ::slotted(button:hover),\n .link:hover,\n button:hover,\n a:hover {\n text-decoration: inherit !important;\n }\n\n button:focus,\n a:focus {\n color: var(--color-focus, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-focus,\n var(--bg-color-hover, var(--bg-color))\n );\n outline: var(--focus-outline, none);\n }\n\n ::slotted(a:focus),\n ::slotted(button:focus) {\n color: var(--color-focus, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-focus,\n var(--bg-color-hover, var(--bg-color))\n );\n outline: none;\n }\n}\n\n.nav-item {\n &.selected {\n .link,\n button,\n a {\n color: var(--color-selected, var(--color-open, var(--color))) !important;\n background-color:\n var(\n --bg-color-selected,\n var(--bg-color-open, var(--bg-color))\n );\n }\n }\n\n &.secondary-open {\n button,\n a {\n color: var(--color-open, var(--color-selected, var(--color))) !important;\n background-color:\n var(\n --bg-color-open,\n var(--secondary-bg-color, var(--bg-color-selected, var(--bg-color)))\n );\n }\n }\n\n &.disabled {\n opacity: 0.6;\n\n button,\n a {\n color: var(--color-disabled, var(--color)) !important;\n }\n }\n\n &:not(.nano-menu) {\n ::slotted(a:hover),\n ::slotted(button:hover),\n .link:hover,\n button:hover,\n a:hover {\n color: var(--color-hover, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-hover,\n var(--bg-color-focus, var(--bg-color))\n );\n }\n }\n}\n\n:host(.has-focus) {\n .link {\n color: var(--color-focus, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-focus,\n var(--bg-color-hover, var(--bg-color))\n );\n outline: var(--focus-outline, 5px auto -webkit-focus-ring-color);\n }\n}\n\n:host(.nano-global-nav-menu),\n:host(.nano-menu) {\n a,\n a:visited,\n button,\n .link {\n display: flex;\n justify-content: flex-start;\n flex-direction: row;\n align-items: center;\n color: 'currentColor';\n text-decoration: inherit;\n white-space: normal;\n cursor: pointer;\n line-height: 1.2;\n width: 100%;\n }\n\n .text {\n @include padding(null, var(--padding-end), null, 0);\n\n flex: 1;\n }\n\n ::slotted(a),\n ::slotted(button) {\n flex: 1;\n }\n\n ::slotted(a:focus),\n ::slotted(button:focus) {\n box-shadow: none;\n }\n\n .secondary-menu {\n display: none;\n position: absolute;\n color: var(--secondary-color, 'currentColor');\n min-height: 100%;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 1;\n opacity: 0;\n transition: opacity 0.2s ease, transform 0.3s ease;\n background-color: var(--secondary-bg-color, white);\n transform: translateX(100%);\n\n &:focus {\n outline: none;\n }\n\n &.open {\n opacity: 1;\n transform: translateX(0);\n transition: opacity 0.3s ease, transform 0.2s ease;\n }\n }\n}\n\n:host(.nano-global-nav-menu) {\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(0, var(--padding-end), 0, 0);\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(0, var(--padding-end), 0, 0);\n\n font-size: 10px;\n flex: 0 0 10px;\n pointer-events: none;\n }\n\n button,\n a {\n ::slotted(nano-icon[slot='icon-end']) {\n padding: 0;\n }\n }\n}\n\n:host(.nano-global-nav-menu[dir='rtl']),\n:host(.nano-menu[dir='rtl']) {\n .secondary-menu {\n left: auto;\n right: 0;\n transform: translateX(-100%);\n\n &.open {\n transform: translateX(0);\n }\n }\n}\n\n:host(.nano-menu) {\n .secondary-menu-content {\n @include padding(\n var(--secondary-padding-top),\n var(--secondary-padding-end),\n var(--secondary-padding-bottom),\n var(--secondary-padding-start)\n );\n }\n}\n\n// I'm sorry. Horrible IE fixes for collapsing stuff :/\n:host(.nano-global-nav-bar.legacy) {\n margin: 0 11px;\n\n ::slotted(a) {\n @include padding(7px, 6px, 7px, 6px);\n }\n}\n\n:host(.nano-global-nav-menu.legacy) {\n ::slotted(a) {\n @include padding(8px, 12px, 8px, 12px);\n }\n}\n\n:host(.nano-global-nav-bar) {\n .link,\n a,\n button {\n display: flex;\n align-items: center;\n cursor: pointer;\n }\n\n .text {\n flex: 1 0 auto;\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include margin(0, 0, 0, var(--padding-end));\n }\n\n ::slotted(nano-icon[slot='icon-start']) {\n @include margin(0, var(--padding-start), 0, 0);\n }\n}\n\n:host(.nano-global-nav-bar.has-secondary) {\n button {\n position: relative;\n\n &::before {\n content: '';\n background: rgb(134, 190, 226);\n height: 3px;\n left: 5px;\n bottom: -14px;\n right: 5px;\n position: absolute;\n transform: translateZ(0) scaleX(0);\n transform-origin: 0;\n transition: 0.2s ease transform;\n }\n }\n\n .selected button::before,\n .secondary-open button::before {\n transform: translateZ(0) scaleX(1);\n }\n\n .secondary-open button::before {\n opacity: 0.5;\n }\n\n .secondary-menu {\n display: none;\n transition: transform 0.3s ease;\n transform: translateY(-100%) translateZ(0);\n background-color: var(--secondary-bg-color, #196c82);\n color: var(--secondary-color);\n position: absolute;\n box-shadow: 0 1px 25px 0 rgba(0, 0, 0, 0.15);\n left: 0;\n right: 0;\n z-index: -2;\n\n &.open {\n transform: translateY(12px) translateZ(0);\n }\n\n &:focus {\n outline: none;\n }\n }\n}\n\n:host(.nano-menu-drawer) {\n .link,\n a,\n button {\n @include padding(\n calc(var(--padding-top) / 2),\n 0,\n calc(var(--padding-bottom) / 2),\n var(--padding-start)\n );\n\n display: flex;\n justify-content: flex-start;\n flex-direction: row;\n align-items: center;\n color: currentColor;\n text-decoration: inherit;\n white-space: normal;\n border: none;\n cursor: pointer;\n line-height: 1.2;\n width: 100%;\n }\n\n .text {\n @include padding(null, var(--padding-end), null, 0);\n\n text-align: left;\n flex: 0 1 auto;\n min-width: 130px;\n width: 130px;\n }\n\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(0, var(--padding-end), 0, 0);\n\n font-size: var(--icon-size);\n width: var(--icon-size);\n flex: 0 0 var(--icon-size);\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(0, var(--padding-end), 0, 0);\n\n font-size: 10px;\n flex: 0 0 20px;\n min-width: 20px;\n }\n\n .secondary-menu {\n display: none;\n position: absolute;\n background-color: var(--secondary-bg-color);\n color: var(--secondary-color);\n height: 100vh;\n top: 0;\n right: 0;\n left: auto;\n bottom: 0;\n transform: translateX(0);\n z-index: -1;\n transition: transform 0.3s ease, opacity 0.2s ease;\n overflow-y: auto;\n width: var(--secondary-width, 400px);\n max-width: 62vw;\n opacity: 1;\n\n @include padding(\n var(--secondary-padding-top, var(--padding-top)),\n var(--secondary-padding-end, var(--padding-end)),\n var(--secondary-padding-bottom, var(--padding-bottom)),\n var(--secondary-padding-start, var(--padding-start))\n );\n\n &:focus {\n outline: none;\n }\n\n &.open {\n transform: translateX(100%);\n // opacity: 1;\n }\n }\n}\n\n:host(.nano-menu-drawer.legacy) {\n .link,\n a,\n button {\n width: auto;\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(0, calc(var(--padding-end) * 2), 0, 0);\n\n font-size: 10px;\n flex: 0 0 20px;\n min-width: 20px;\n }\n}\n\n:host(.nano-menu-drawer[dir='rtl']) {\n .text {\n text-align: right;\n }\n\n .secondary-menu {\n right: auto;\n left: 0;\n transform: translateX(0%);\n\n &.open {\n transform: translateX(-100%);\n opacity: 1;\n }\n }\n}\n","import {\n Component,\n h,\n Host,\n Element,\n Prop,\n Watch,\n EventEmitter,\n Event,\n State,\n Method,\n ComponentInterface,\n} from '@stencil/core';\nimport { displayTransition, getDirectChildren, getSiblings } from '../../utils';\nimport { NavItemEventDetail } from '../../interface';\n\n/**\n * Nav items to be used with the various nav items.\n * [Globla-Nav](/story/compounds-global-nav)\n * [Menu-Drawer](/story/components-menu-drawer)\n * [Dropdown](/story/components-dropdown)\n */\n@Component({\n tag: 'nano-nav-item',\n styleUrl: 'nav-item.scss',\n shadow: true,\n})\nexport class NavItem implements ComponentInterface {\n private hasSecondarySlot: boolean = false;\n private hasAnchorEle: boolean = false;\n private secondaryDiv: HTMLDivElement;\n private btn: HTMLButtonElement | HTMLAnchorElement;\n private didBlur: boolean = false;\n private fromHover: boolean;\n private animating: boolean = false;\n private waitHide: number;\n private waitShow: number;\n private globalNavEle?: HTMLNanoGlobalNavElement;\n\n @State() didOpen: boolean = false;\n @State() isInGlobalNav: boolean = false;\n @State() isInMenuDrawer: boolean = false;\n @State() isInMenu: boolean = false;\n @State() isLegacy: boolean = !document.head.attachShadow;\n @State() hasFocus: boolean = false;\n @Element() private el: HTMLNanoNavItemElement;\n\n /**\n * Href to link to\n */\n @Prop() href: string = null;\n\n /**\n * Target to use for links\n */\n @Prop() target: '_self' | '_blank' | '_parent' | '_top' = '_self';\n\n /**\n * Disable the nav item\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether a secondary menu should be or is currently open\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Whether this menu item is currently 'selected'\n */\n @Prop({ reflect: true }) selected: boolean = false;\n\n /**\n * Screen pixel width to activate the secondary menu\n */\n @Prop() secondaryActiveWidth: number = 0;\n\n /**\n * Secondary fallback function for when the secondary menu is no longer active.\n */\n @Prop() secondaryFallback = () => {};\n\n /**\n * Whether secondary menus should close on blur\n */\n @Prop() closeOnBlur: boolean = true;\n\n /**\n * Emitted when the nav item closes it's secondary navigation.\n */\n @Event() nanoClose!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item opens it's secondary navigation.\n */\n @Event() nanoOpen!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item is about to open it's secondary navigation.\n */\n @Event() nanoOpening!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item is about to close it's secondary navigation.\n */\n @Event() nanoClosing!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item loses focus.\n */\n @Event() nanoBlur!: EventEmitter<void>;\n\n /**\n * Emitted when the nav item has focus.\n */\n @Event() nanoFocus!: EventEmitter<void>;\n\n /**\n * Sets focus on the first button or anchor present. Use this method instead of the global\n * `element.focus()`.\n */\n @Method()\n async setFocus() {\n if (!this.btn) return;\n this.btn.focus();\n }\n\n /**\n * Public open watcher\n */\n @Watch('open')\n openChange() {\n this.open ? this.openSecondary() : this.closeSecondary();\n }\n\n /**\n * Internal open watcher\n */\n @Watch('didOpen')\n didOpenChange() {\n if (!this.hasSecondarySlot) return;\n\n if (!this.didOpen) {\n /* the secondadry panel is not closing via hover,\n remove blur events, add focus back to originating button */\n if (!this.fromHover) {\n this.btn.removeEventListener('focusout', this.blur);\n this.secondaryDiv.removeEventListener('focusout', this.blur);\n }\n setTimeout(() => {\n if (!this.fromHover && !this.didBlur)\n this.btn.focus({ preventScroll: true });\n this.nanoClose.emit({ secondaryMenu: this.secondaryDiv });\n }, 50);\n } else {\n this.didBlur = false;\n\n /* the secondadry panel is not opening via hover,\n scroll content into view, focus on it and add blur events */\n if (!this.fromHover) {\n const panelio = new (window as any).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n if (data[0].boundingClientRect.top < 0) {\n this.secondaryDiv.scrollIntoView({\n behavior: 'smooth',\n });\n }\n panelio.disconnect();\n },\n { threshold: 1 }\n );\n panelio.observe(this.secondaryDiv);\n this.secondaryDiv.focus({ preventScroll: true });\n\n this.btn.addEventListener('focusout', this.blur);\n this.secondaryDiv.addEventListener('focusout', this.blur);\n window.addEventListener('blur', this.blur);\n\n this.el.tabIndex = -1;\n this.nanoOpen.emit({ secondaryMenu: this.secondaryDiv });\n }\n }\n }\n\n private closeSecondary = async () => {\n this.open = false;\n if (!this.hasSecondarySlot || !this.didOpen) return;\n\n this.nanoClosing.emit({ secondaryMenu: this.secondaryDiv });\n let status = await displayTransition(this.secondaryDiv, 'open', false);\n this.didOpen = status !== 'hidden';\n };\n\n private openSecondary = async () => {\n if (window.innerWidth < this.secondaryActiveWidth) {\n this.secondaryFallback.call(this);\n return;\n }\n this.open = true;\n if (!this.hasSecondarySlot || this.didOpen) return;\n\n this.nanoOpening.emit({ secondaryMenu: this.secondaryDiv });\n let status = await displayTransition(this.secondaryDiv, 'open', true);\n this.didOpen = status === 'shown';\n };\n\n private toggleSecondary = () => {\n if (!this.hasSecondarySlot) return;\n if (this.didOpen) this.closeSecondary();\n else this.openSecondary();\n };\n\n private handleFocus = () => {\n this.hasFocus = true;\n // opens secondary panel when activated via hover\n if (this.href && !this.animating && this.hasSecondarySlot)\n this.openSecondary();\n this.nanoFocus.emit();\n };\n\n private handleHostBlur = () => {\n if (this.animating) return;\n\n // tab index is added to host when secondary panel opens\n // to return focus after secondary panel closes. Remove now if it was added\n this.el.removeAttribute('tabindex');\n this.hasFocus = false;\n this.nanoBlur.emit();\n };\n\n // direct host clicks to internal button\n private handleHostClick = (ev: MouseEvent) => {\n if (!this.hasAnchorEle) return;\n let foundlink = (ev.target as HTMLElement).closest('a, button');\n if (!foundlink) this.btn.click();\n };\n\n // handles secondary menu hover behaviour.\n private handleMouseEnter = async () => {\n if (\n !this.href ||\n this.animating ||\n !this.hasSecondarySlot ||\n (this.globalNavEle && !this.globalNavEle.classList.contains('ready'))\n )\n return;\n\n // if there are sibling secondary panels currently open,\n // we need to wait before opening otherwise we get unwanted overlapping\n let timeToWait = 0;\n if (getSiblings(this.el, '.secondary-open.has-secondary').length)\n timeToWait = 300;\n\n clearTimeout(this.waitHide);\n this.fromHover = true;\n this.animating = true;\n this.waitShow = window.setTimeout(\n async () => await this.openSecondary(),\n timeToWait\n );\n this.animating = false;\n };\n\n // handles secondary menu hover-out behaviour.\n private handleMouseLeave = () => {\n if (!this.href) return;\n clearTimeout(this.waitShow);\n this.fromHover = true;\n this.animating = true;\n\n // prevent closing immediately - makes navigating to items within more forgiving\n this.waitHide = window.setTimeout(\n async () => await this.closeSecondary(),\n 300\n );\n this.animating = false;\n };\n\n private handleClick = () => {\n this.fromHover = false;\n if (this.hasSecondarySlot) this.toggleSecondary();\n else this.el.querySelector<HTMLElement>('*').click();\n };\n\n // utility to traverse up, to see if element is nested within current nav-item\n private foundThisNavEle(el: HTMLElement): boolean {\n let found = el.closest('nano-nav-item');\n found = found === el ? el.parentElement.closest('nano-nav-item') : found;\n\n if (!found) return false;\n if (found === this.el) return true;\n return this.foundThisNavEle(found);\n }\n\n private blur = (ev: FocusEvent) => {\n if (!this.didOpen || this.animating) return;\n if (!this.closeOnBlur) return;\n\n // if event is associated with this element don't close\n if (ev && ev.relatedTarget) {\n if (\n ev.relatedTarget === this.el ||\n ev.relatedTarget === this.btn ||\n this.foundThisNavEle(ev.relatedTarget as HTMLElement)\n ) {\n this.secondaryDiv.focus({ preventScroll: true });\n return;\n }\n }\n\n this.btn.removeEventListener('focusout', this.blur);\n this.secondaryDiv.removeEventListener('focusout', this.blur);\n window.removeEventListener('blur', this.blur);\n\n this.didBlur = true;\n\n this.open = false;\n if (!ev.relatedTarget)\n setTimeout(() => {\n this.el.focus({ preventScroll: true });\n }, 50);\n };\n\n componentWillLoad() {\n let secondaryEle = this.el.querySelector('[slot=\"secondary\"]');\n this.hasSecondarySlot = !!secondaryEle;\n\n let link = getDirectChildren(this.el, 'a, button')[0] as\n | HTMLAnchorElement\n | HTMLButtonElement;\n this.hasAnchorEle = !!link;\n\n if (link) {\n this.href = (link as HTMLAnchorElement).href\n ? (link as HTMLAnchorElement).href\n : null;\n this.btn = link;\n if (this.hasSecondarySlot)\n this.btn.addEventListener('click', this.toggleSecondary);\n\n this.btn.addEventListener('focus', this.handleFocus);\n this.btn.addEventListener('blur', this.handleHostBlur);\n }\n }\n\n connectedCallback() {\n this.isInGlobalNav = false;\n this.isInMenuDrawer = false;\n this.globalNavEle = this.el.closest('nano-global-nav');\n\n this.isInMenuDrawer = !!this.el.closest('nano-menu-drawer');\n this.isInMenu = !!this.el.closest('nano-menu');\n this.isInGlobalNav =\n this.el.parentElement === this.globalNavEle ||\n !!this.el.closest('.global-nav');\n }\n\n render() {\n return (\n <Host\n class={{\n 'has-secondary': this.hasSecondarySlot,\n 'secondary-open': this.open,\n selected: this.selected,\n 'has-focus': this.hasFocus,\n disabled: this.disabled,\n 'nano-global-nav': this.isInGlobalNav,\n 'nano-menu-drawer': this.isInMenuDrawer,\n 'nano-menu': this.isInMenu,\n legacy: this.isLegacy,\n }}\n onBlur={this.handleHostBlur}\n dir={(this.el.ownerDocument as Document).dir === 'rtl' ? 'rtl' : null}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleHostClick}\n >\n <div\n class={{\n 'nav-item': true,\n 'secondary-open': this.open,\n selected: this.selected,\n }}\n >\n {this.href && !this.hasAnchorEle && !this.disabled && (\n <a\n target={this.target}\n ref={(a) => (this.btn = a)}\n href={this.href}\n onFocus={this.handleFocus}\n >\n <slot name=\"icon-start\" />\n <span class=\"text\">\n <slot />\n </span>\n <slot name=\"icon-end\" />\n </a>\n )}\n {((!this.hasAnchorEle && !this.href) || this.disabled) && (\n <button\n ref={(btn) => (this.btn = btn)}\n onClick={this.handleClick}\n onFocus={this.handleFocus}\n disabled={this.disabled}\n >\n <slot name=\"icon-start\" />\n <span class=\"text\">\n <slot />\n </span>\n <slot name=\"icon-end\" />\n </button>\n )}\n {this.hasAnchorEle && !this.disabled && (\n <div class=\"link\">\n <slot name=\"icon-start\" />\n <slot />\n <slot name=\"icon-end\" />\n </div>\n )}\n {this.hasSecondarySlot && !this.disabled && (\n <div\n class=\"secondary-menu\"\n ref={(div) => (this.secondaryDiv = div)}\n tabindex=\"-1\"\n >\n <div class=\"secondary-menu-content\">\n <slot name=\"secondary\" />\n </div>\n <div\n class=\"secondary-menu-mask\"\n onClick={this.closeSecondary}\n ></div>\n </div>\n )}\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@import '../input/input.vars';\n\n:host {\n @include inputVars;\n\n position: relative;\n width: 100%;\n padding: 0 !important;\n font-family: $font-family-base;\n display: inline-block;\n}\n\n:host(.nano-color) {\n --input-border-style--focus: #{$input-border-style} var(--nano-color-tint, #{nano-color(primary, tint)});\n --multi-input-value-bg: var(--nano-color-tint-rgb);\n --multi-input-value-border: var(--nano-color-shade);\n --multi-input-value-text-color: var(--nano-color-contrast);\n\n color: current-color(base);\n}\n\n:host-context(nano-item:not(.item-label)) {\n --padding-start: 0;\n}\n\n:host([disabled]:not([disabled='false'])) {\n opacity: 0.7;\n\n * {\n pointer-events: none !important;\n }\n}\n\nlabel,\n.more,\n.error,\n.helper {\n display: block;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n &.visually-hide {\n @include visually-hide;\n }\n}\n\n.placeholder-as-label {\n @include padding(0, 0, 0, var(--padding-start));\n\n color: var(--input-text-color);\n position: absolute;\n font-size: 1.4em;\n transform: translateY(-50%);\n transform-origin: top left;\n top: 50%;\n transition: 0.125s ease-in;\n opacity: 0.7;\n pointer-events: none;\n\n :host(.is-invalid) & {\n color: var(--invalid-msg-color);\n }\n\n :host(.has-value) & {\n transform: translateY(-110%);\n font-size: 0.9em;\n }\n\n :host(.has-focus.has-multiple) &,\n :host(.has-value.has-multiple) & {\n transform: translateY(-75%);\n font-size: 0.9em;\n }\n\n :host(.has-multiple) & {\n top: 1.5em;\n }\n\n & ~ .native-select-wrap {\n font-size: 1.1em;\n }\n}\n\n.label {\n @include padding(0, 0, var(--padding-bottom));\n\n color: var(--label-color);\n font-size: var(--label-font-size);\n line-height: 1;\n\n .placeholder {\n opacity: 0;\n appearance: none;\n transition: 0.3s ease opacity;\n font-size: 0.9em;\n }\n\n :host(.has-value) & {\n .placeholder {\n opacity: 0.5;\n }\n }\n\n :host(.has-focus) & {\n color: var(--label-color--focus);\n }\n\n :host(.is-invalid) & {\n color: var(--label-color--invalid);\n }\n}\n\n.more {\n @include margin(4px, 0, var(--padding-bottom), 3px);\n\n height: 1em;\n position: relative;\n}\n\n.helper,\n.error {\n top: 0;\n left: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n}\n\n.helper {\n color: var(--help-msg-color);\n font-style: italic;\n\n :host([show-inline-error]:not([show-inline-error='false']).is-invalid) & {\n opacity: 0;\n }\n}\n\n.error {\n opacity: 0;\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n\n :host(.is-invalid) & {\n opacity: 1;\n }\n}\n\n.select {\n @include text-inherit();\n @include border-radius(var(--input-border-radius));\n\n width: 100%;\n padding: 0 !important;\n position: relative;\n background: var(--input-bg-color);\n border: var(--input-border-style);\n border-width: var(--input-border-width);\n font-size: var(--input-font-size);\n\n :host(.has-focus) & {\n z-index: 10;\n background: var(--input-bg-color--focus);\n border: var(--input-border-style--focus);\n border-width: var(--input-border-width);\n }\n\n :host(.is-invalid) & {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid);\n border-width: var(--input-border-width);\n }\n\n :host(.is-invalid.has-focus) & {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid-focus);\n border-width: var(--input-border-width);\n }\n}\n\n// Native Select\n// --------------------------------------------------\n\n.native-select-wrap {\n display: flex;\n align-items: center;\n}\n\n.select-mask {\n @include border-radius(var(--input-border-radius));\n @include padding(0, var(--padding-end), 0, var(--padding-start));\n @include text-inherit();\n\n pointer-events: none;\n line-height: 2.5em;\n min-height: 2.5em;\n}\n\n.native-select {\n @include border-radius(var(--input-border-radius));\n @include padding(0, var(--padding-end), 0, var(--padding-start));\n @include text-inherit();\n\n color: var(--input-text-color);\n display: inline-block;\n flex: 1;\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n border: 0;\n outline: none;\n background: transparent;\n box-sizing: border-box;\n transition: 0.3s ease opacity;\n appearance: none;\n // line-height: 1.3;\n margin: 0;\n line-height: 2.5em;\n min-height: 2.5em;\n\n :host(.legacy) & {\n box-sizing: content-box;\n }\n\n :host(.masked) & {\n opacity: 0;\n position: absolute;\n left: 0;\n top: 0;\n }\n\n :host(.has-float-label) & {\n opacity: 0;\n padding-top: 1.8em;\n }\n\n :host(.has-value.has-float-label) & {\n opacity: 1;\n }\n\n &:-webkit-autofill {\n background-color: transparent;\n }\n\n &:invalid {\n box-shadow: none;\n }\n\n &::-ms-clear {\n display: none;\n }\n\n &::-ms-expand {\n display: none;\n }\n\n &[disabled] {\n opacity: 0.4;\n }\n\n :host(.has-multiple) & {\n display: none;\n }\n\n option {\n color: black;\n }\n}\n\n// multi stuff\n\n.multi {\n &-wrap {\n @include padding(\n 0,\n calc(1.9em + var(--padding-end)),\n calc(var(--padding-bottom) / 2),\n 0\n );\n\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n max-width: 100%;\n\n :host(.has-clr-btn) & {\n @include padding(\n 0,\n calc(2.6em + (var(--padding-end) * 2) + (var(--padding-end) * 2)),\n calc(var(--padding-bottom) / 2),\n 0\n );\n }\n\n :host(.has-float-label) & {\n padding-top: 1.3em;\n }\n }\n\n &-input {\n @include text-inherit();\n @include padding(\n calc(var(--padding-top) / 2),\n var(--padding-end),\n 0,\n var(--padding-start)\n );\n\n min-width: 50px;\n max-width: 100%;\n max-height: 100%;\n appearance: none;\n border: 0;\n outline: none;\n display: inline-block;\n background: transparent;\n flex: 0;\n position: relative;\n // line-height: calc(2.8em - var(--padding-top));\n min-height: calc(2.8em - var(--padding-top));\n box-sizing: border-box;\n\n :host(.legacy) & {\n box-sizing: content-box;\n }\n\n &:last-child {\n flex: 1;\n }\n }\n\n &-select-box {\n position: absolute;\n background: #{$layer-bg-color};\n min-width: calc(100% + (var(--input-border-width) * 2));\n z-index: #{$layer-index-dropdown};\n margin: 0;\n font-size: 1.15em;\n line-height: 1.4;\n max-height: 50vh;\n overflow-y: auto;\n overscroll-behavior: none;\n transition: opacity 0.2s ease;\n opacity: 0;\n box-sizing: border-box;\n border-radius: #{$layer-border-radius};\n box-shadow: #{$layer-shadow-large};\n padding: var(--padding-top) 0 var(--padding-bottom);\n border: #{$layer-border-style};\n\n &--open {\n opacity: 1;\n }\n\n li {\n @include padding(\n var(--padding-top),\n var(--padding-end),\n var(--padding-bottom),\n var(--padding-start)\n );\n\n font-size: var(--input-font-size);\n cursor: pointer;\n list-style: none;\n color: var(--input-text-color);\n\n :host(.nano-color) & {\n color: black;\n }\n\n &:hover,\n &:focus {\n color: var(--color--focus-contrast);\n outline: none;\n background: rgba(var(--multi-input-value-bg), 0.2);\n\n :host(.nano-color) & {\n background: current-color(base, 0.2);\n }\n }\n }\n }\n\n &-value {\n @include margin(4px, 0, 0, 4px);\n\n background: rgba(var(--multi-input-value-bg), 0.8);\n color: var(--multi-input-value-text-color);\n border: 2px solid;\n border-color: var(--multi-input-value-border);\n padding: 0.3em 0.5em;\n border-radius: 3px;\n line-height: 1;\n max-width: 100%;\n display: flex;\n align-items: center;\n font-size: var(--input-font-size);\n font-weight: 600;\n letter-spacing: 1px;\n\n span {\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n overflow: hidden;\n line-height: 1.4;\n }\n }\n\n &-value-remove {\n @include margin(0);\n @include background-position(center);\n @include padding(0, 0, 0, 0.5em);\n\n color: inherit;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n appearance: none;\n display: flex;\n align-items: center;\n top: 0;\n font-size: 1em;\n\n nano-icon {\n --color: var(--multi-input-value-text-color);\n }\n }\n}\n\n// Clear Input Icon\n// --------------------------------------------------\n\n.select-down-icon {\n @include margin(0);\n @include background-position(center);\n @include padding(\n var(--padding-top),\n var(--padding-end),\n var(--padding-bottom),\n var(--padding-start)\n );\n\n color: var(--input-text-color);\n font-size: 1.4em;\n right: 0;\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n pointer-events: none;\n\n :host(.is-invalid) & {\n color: var(--clear-btn-color--invalid);\n }\n\n :host(.rtl) & {\n right: unset;\n left: 0;\n }\n\n :host(.has-multiple) & {\n pointer-events: all;\n }\n\n :host(.masked) & {\n position: relative;\n }\n}\n\n.select-clear-icon {\n @include margin(0);\n @include background-position(center);\n @include padding(\n var(--padding-top),\n var(--padding-end),\n var(--padding-bottom),\n var(--padding-start)\n );\n\n font-size: 1.4em;\n color: var(--clear-btn-color);\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n visibility: hidden;\n appearance: none;\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n height: 100%;\n right: calc(1.4em + var(--padding-end));\n\n &:hover {\n color: var(--clear-btn-color--hover);\n }\n\n :host(.rtl) & {\n right: unset;\n left: calc(1.4em + var(--padding-end));\n }\n\n :host(.is-invalid) & {\n color: var(--clear-btn-color--invalid);\n }\n\n :host(.has-value) & {\n visibility: visible;\n }\n\n nano-icon {\n --color: inherit;\n }\n}\n\n// Input Has focus\n// --------------------------------------------------\n// When the select has focus, then the select cover should be hidden\n\n// :host(.has-focus) {\n// pointer-events: none;\n// }\n\n:host(.has-focus) select,\n:host(.has-focus) a,\n:host(.has-focus) button {\n pointer-events: auto;\n}\n","import {\n Build,\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n State,\n Watch,\n h,\n} from '@stencil/core';\n\nimport {\n Color,\n SelectChangeEventDetail,\n InputChangeEventDetail,\n CssClassMap,\n ControlValidityEventDetail,\n ControlValidity,\n} from '../../interface';\nimport {\n testLegacyStyle,\n debounceEvent,\n closestElement,\n createColorClasses,\n} from '../../utils';\nimport Popover from '../../utils/popover';\n\n/**\n * The select component is a wrapper to the HTML select element with custom styling and additional functionality.\n * It accepts most of the same properties as the HTML [select](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select).\n * It's multi selection functionality is vastly improved from the native solution. It allows for the control of\n * value order through drag and drop or changing the insertion point with arrow keys. It also can allow for user defined values.\n *\n * @slot label - if you do not set a label attribute, you can use this slot for more complex markup\n * @slot legacy - you can use this slot to wrap any old select / labels / options. This will set appropriate defaults for the nano-select\n */\n@Component({\n tag: 'nano-select',\n styleUrl: 'select.scss',\n scoped: true,\n})\nexport class Select implements ComponentInterface {\n private nativeSelect?: HTMLSelectElement;\n private multiInput?: HTMLInputElement;\n private multiList?: HTMLUListElement;\n private selectWrap?: HTMLDivElement;\n private listItems: Array<HTMLLIElement> = [];\n private valueItems: Array<HTMLSpanElement> = [];\n private dragVal: string;\n private mo?: MutationObserver;\n private popover: Popover;\n\n private selectId = `nano-select-${selectIds++}`;\n private rtl: boolean = false;\n private currLiIndex: number = -1;\n private inputSearchVal: string = '';\n private watchValue: boolean = true;\n private onInit: boolean = true;\n\n @State() currInsertIndex: number = 0;\n @State() availOpts = [];\n @State() showErrorMsg = false;\n @State() errorMessage: string = '';\n @State() hasFocus = false;\n @State() listOpen = false;\n @State() isLegacy: boolean = 'registerElement' in document;\n @State() hasLabelSlot: boolean = false;\n @State() hasHelperSlot: boolean = false;\n @State() hasIconSlot: boolean = false;\n\n @Element() el!: HTMLNanoSelectElement;\n\n /**\n * This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set.\n */\n @Prop({ mutable: true, reflect: true }) invalid = false;\n\n /**\n * The color to use from your application's color palette.\n * Default options are: `\"primary\"`, `\"secondary\"`, `\"tertiary\"`, `\"success\"`, `\"warning\"`, `\"danger\"`, `\"light\"`, `\"medium\"`, and `\"dark\"`.\n */\n @Prop() color?: Color;\n\n /**\n * This Boolean attribute lets you specify that a form control should have select focus when the page loads.\n */\n @Prop() autofocus = false;\n\n /**\n * If `true`, the user cannot interact with the select.\n */\n @Prop({ reflect: true }) disabled = false;\n\n /**\n * When should the field perform validation\n */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submit';\n\n /**\n * Whether to show validation errors underneath input\n */\n @Prop({ reflect: true }) showInlineError = true;\n\n /**\n * String to place within a label element.\n */\n @Prop() label!: string;\n\n /**\n * Visually hide the label - but make it accessible.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * Enable floating label behaviour. Will disable placeholder if set.\n */\n @Prop() floatLabel: boolean = false;\n\n /**\n * If `true`, the user can enter more than one value. This attribute applies when the type attribute is set to `\"email\"` or `\"file\"`, otherwise it is ignored.\n */\n @Prop() multiple?: boolean = false;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.selectId + '-name';\n\n /**\n * Instructional text that shows before the select has a value. Text set here will be placed inside the label when a value is set. If you don't want this behaviour just set the first option to have no value.\n */\n @Prop() placeholder?: string | null;\n\n /**\n * If `true`, the user cannot modify the value.\n */\n @Prop() readonly = false;\n\n /**\n * If `true`, the user must fill in a value before submitting a form.\n */\n @Prop() required = false;\n\n /**\n * The initial size of the control.\n */\n @Prop() size?: number;\n\n /**\n * Maximum number of options that can be selected when multiple is true\n */\n @Prop() max?: number;\n\n /**\n * Minimum number of options that can be selected when multiple is true\n */\n @Prop() min?: number;\n\n /**\n * The form element to associate the select with (its form owner). Must be the id of a form.\n */\n @Prop() form?: string | null;\n\n /**\n * in multiple mode, allow users to enter their own values\n */\n @Prop() allowCustomValues: boolean = false;\n\n /**\n * The value of the select.\n */\n @Prop({ mutable: true }) value?: string | Array<string | null> = this.multiple\n ? []\n : '';\n\n /**\n * You can set options via js. domElement.options = ['option 1', 'option 2'] or [{label: 'option 1', value: 'opt-1'}]\n */\n @Prop({ mutable: true }) options: Array<\n string | { label: string; value?: string }\n > = [];\n\n /**\n * If `true`, a clear icon will appear in the select when there is a value. Clicking it clears the select.\n */\n @Prop() clearSelect = false;\n\n /**\n * Hide the native select element and cover with a value 'mask'.\n * Enables a fluid nano-select width upon value change (if required). Doesn't work with multiple=\"true\".\n */\n @Prop() mask = false;\n\n /**\n * Set the amount of time, in milliseconds, to wait to trigger the `nanoSearchChange` event after each keystroke.\n */\n @Prop() debounce = 0;\n\n /**\n * Whether to use native <select> elements. Setting to false will use a similar UI as multiple=\"true\"\n */\n @Prop() native = true;\n\n @Watch('debounce')\n protected debounceChanged() {\n this.nanoSearchChange = debounceEvent(this.nanoSearchChange, this.debounce);\n }\n\n // @Watch('options')\n @Watch('required')\n @Watch('disabled')\n @Watch('min')\n @Watch('max')\n @Watch('validateOn')\n @Watch('readonly')\n protected shouldValidate() {\n if (this.onInit) return;\n if (this.invalid) this.showErrorMsg = this.invalid = false;\n\n this.customValidate();\n if (this.validateOn !== 'dirty') return;\n this.showInlineValidation();\n }\n\n /**\n * Update the native select element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n if (!this.watchValue) return;\n\n if (this.multiple) {\n if (typeof this.value === 'string' && !!this.value.length)\n this.value = this.value.split(',');\n if (\n this.value === null ||\n (typeof this.value === 'string' && !this.value.length)\n )\n this.value = [];\n\n if (this.currInsertIndex > this.value.length - 1)\n this.currInsertIndex = this.value.length - 1;\n } else if (typeof this.value !== 'string' && this.value && this.value[0])\n this.value = this.value[0];\n\n this.setNativeValue();\n this.setAvailOpts();\n setTimeout((_) => this.shouldValidate(), 20);\n this.nanoChange.emit({ value: this.value });\n\n if (this.onInit) return;\n }\n\n @Watch('options')\n protected optionsChanged() {\n this.setAvailOpts();\n if (this.hasFocus) this.openList();\n }\n\n /**\n * Setup or rip down custom combobox when select is switched from mutliple\n */\n @Watch('multiple')\n protected multiChange() {\n this.switchValue();\n\n if (this.multiple) this.setupMulti();\n else if (this.popover) this.popover.destroy();\n }\n\n private setupMulti() {\n setTimeout(() => {\n this.setAvailOpts();\n this.popover = new Popover(this.selectWrap, this.multiList, {\n placement: 'bottom-start',\n skidding: 0,\n distance: 0,\n onTransitionEnd: () => {\n if (!this.listOpen) {\n this.multiList.scrollTop = 0;\n }\n },\n });\n }, 20);\n }\n\n @Watch('listOpen')\n listOpenChange() {\n if (this.listOpen) this.popover.show();\n else this.popover.hide();\n }\n\n /**\n * Emitted when the value has changed.\n */\n @Event() nanoChange!: EventEmitter<SelectChangeEventDetail>;\n\n /**\n * Emitted when the select loses focus.\n */\n @Event() nanoBlur!: EventEmitter<void>;\n\n /**\n * Emitted when the select has focus.\n */\n @Event() nanoFocus!: EventEmitter<void>;\n\n /**\n * Emitted when the select has been created.\n * @internal\n */\n @Event() nanoDidLoad!: EventEmitter<void>;\n\n /**\n * Emitted when the select has been removed.\n * @internal\n */\n @Event() nanoDidUnload!: EventEmitter<void>;\n\n /**\n * Emitted when a keyboard input occurred on a multiple=\"true\" input\n */\n @Event() nanoSearchChange!: EventEmitter<InputChangeEventDetail>;\n\n /**\n * Called when validation is performed (which depends on `validateOn`).\n * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`.\n */\n @Event() nanoValidate: EventEmitter<ControlValidityEventDetail>;\n\n /**\n * Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `{ isValid: boolean, errorMessage: string }`\n */\n @Method()\n async reportValidity(validateFirst: boolean): Promise<ControlValidity> {\n if (validateFirst) this.showInlineValidation();\n return {\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n };\n }\n\n /**\n * Sets focus on the specified `nano-select`. Use this method instead of the global\n * `select.focus()`.\n */\n @Method()\n async setFocus() {\n if (this.nativeSelect && !this.multiple) this.nativeSelect.focus();\n else if (this.multiInput) this.multiInput.focus();\n }\n\n /**\n * Returns the native `<select>` element used under the hood.\n */\n @Method()\n getSelectElement(): Promise<HTMLSelectElement> {\n return Promise.resolve(this.nativeSelect!);\n }\n\n /**\n * Invalidate the field and show a custom error message.\n * To clear the error you will need to re-call this method with an empty string.\n */\n @Method()\n async showError(message: string) {\n if (this.nativeSelect) {\n this.nativeSelect.setCustomValidity(message);\n this.nativeSelect.reportValidity();\n }\n }\n\n /* Logic */\n\n // sets the available options of a multi select.\n // Removes ones already selected\n // Filters one if user starts to search\n private setAvailOpts() {\n if (!this.multiple) return;\n\n this.availOpts = this.options.filter((opt) => {\n let toFind = typeof opt === 'string' ? opt : opt['value'];\n let strFilter =\n typeof opt === 'string' ? opt : opt['label'] || opt['value'];\n\n if (!toFind) return false;\n return (\n !(this.value as Array<string>).includes(toFind) &&\n (!this.multiInput ||\n strFilter.toLowerCase().indexOf(this.inputSearchVal.toLowerCase()) >\n -1)\n );\n });\n }\n\n private getNativeValue(): string | Array<string> {\n const nsl = this.nativeSelect;\n if (!nsl) return '';\n\n if (!this.multiple)\n return nsl.options[nsl.selectedIndex] &&\n nsl.options[nsl.selectedIndex].hasAttribute('value')\n ? nsl.options[nsl.selectedIndex].value\n : '';\n else {\n return Array.from(nsl.options).map((opt) => {\n if (opt.selected && opt.hasAttribute('value')) return opt.value;\n });\n }\n }\n\n private setNativeValue() {\n const nsl = this.nativeSelect;\n if (!nsl) return null;\n if (!this.multiple) nsl.value = this.value as string;\n else {\n Array.from(this.nativeSelect.options)\n .filter((opt) => {\n if (typeof this.value === 'string') return opt.value === this.value;\n else\n return this.value.find((val) => {\n if (typeof val === 'string') return val === this.value;\n else if (val['value']) return val === val['value'];\n });\n })\n .map((opt) => {\n opt.selected = true;\n });\n }\n }\n\n private isValidValues() {\n const nsl = this.nativeSelect;\n if (!nsl) return null;\n\n const selected = this.nativeSelect.querySelectorAll('option:checked');\n const values = Array.from(selected).map(\n (el: HTMLOptionElement) => el.value || null\n );\n\n if (this.multiple) {\n return values.reduce((accumulator, currentValue) => {\n if (!accumulator) return false;\n return !!this.options.find((opt) =>\n opt['value'] ? opt['value'] === currentValue : opt === currentValue\n );\n }, true);\n } else {\n return this.options.find((opt) =>\n opt['value'] ? opt['value'] === values[0] : opt === values[0]\n );\n }\n }\n\n private customValidate = () => {\n this.nativeSelect.setCustomValidity('');\n\n // add custom validations 'cos html5 validations are a bit rubbish on selects\n if (this.required && !this.getNativeValue().length) {\n this.nativeSelect.setCustomValidity('Please fill in this field.');\n return true;\n }\n if (\n this.getNativeValue().length &&\n !this.allowCustomValues &&\n !this.isValidValues()\n ) {\n this.nativeSelect.setCustomValidity(\n 'Please choose an item from this field.'\n );\n return true;\n }\n if (this.max && this.getNativeValue().length > this.max) {\n this.nativeSelect.setCustomValidity(\n `Only up to ${this.max} values are allowed.`\n );\n return true;\n }\n if (this.min && this.getNativeValue().length < this.min) {\n this.nativeSelect.setCustomValidity(\n `You must select a minimum of ${this.min} values.`\n );\n return true;\n }\n return false;\n };\n\n private showInlineValidation = (ev?: Event) => {\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n\n this.invalid = false;\n this.showErrorMsg = false;\n this.errorMessage = '';\n\n if (!this.nativeSelect.validity.valid) {\n this.errorMessage = this.nativeSelect.validationMessage;\n this.invalid = true;\n this.showErrorMsg = true;\n }\n this.nanoValidate.emit({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n originalEvent: ev,\n });\n };\n\n private handleInvalid = (ev: Event) => {\n this.invalid = true;\n\n if (this.validateOn === 'submit')\n this.invalid = this.showErrorMsg = this.customValidate();\n if (this.showInlineError) ev.preventDefault();\n\n setTimeout((_) => this.showInlineValidation(ev), 20);\n };\n\n private openList() {\n if (!this.multiple) return;\n if (\n (this.availOpts.length ||\n (!!this.inputSearchVal.length && this.allowCustomValues)) &&\n (!this.max || (this.max && this.value.length < this.max))\n )\n this.listOpen = true;\n else this.listOpen = false;\n }\n\n private addValue(value) {\n if (!this.multiple) return;\n if (this.value && this.value.length && this.value.includes(value)) return;\n if (this.max && this.value.length === this.max) return;\n\n this.currInsertIndex++;\n this.value = [\n ...this.value.slice(0, this.currInsertIndex),\n value,\n ...this.value.slice(this.currInsertIndex),\n ];\n\n this.inputSearchVal = '';\n\n this.setAvailOpts();\n\n this.selectWrap.clientWidth; // force reflow\n this.setFocus();\n this.openList();\n }\n\n private removeValue(toFind?: string) {\n if (!this.multiple || !this.value.length) return;\n\n if (!toFind) toFind = this.value[this.value.length - 1];\n this.value = (this.value as Array<string>).filter((val) => val !== toFind);\n\n if (this.currInsertIndex > this.value.length - 1)\n this.currInsertIndex = this.value.length - 1;\n\n this.selectWrap.clientWidth; // force reflow\n this.setFocus();\n this.openList();\n }\n\n private switchValue() {\n this.watchValue = false;\n if (this.multiple) {\n if (typeof this.value === 'string' && !!this.value.length)\n this.value = this.value.split(',');\n else this.value = [];\n\n this.currInsertIndex = Math.max(this.value.length - 1, 0);\n } else if (typeof this.value !== 'string' && this.value && this.value[0])\n this.value = this.value[0];\n this.watchValue = true;\n }\n\n private isSelected(value: string) {\n if (this.multiple)\n return (this.value as Array<string>).find((val) => val === value);\n else value === this.value;\n }\n\n private getLabel(val: string) {\n let foundVal = this.options.find((opt) => {\n return opt['value'] ? opt['value'] === val : opt === val;\n });\n if (!foundVal) return null;\n return foundVal['label'] ? foundVal['label'] : foundVal;\n }\n\n private slotChangeObserver() {\n const mo = (this.mo = new MutationObserver((mrs: MutationRecord[]) =>\n this.processSlottedContent(mrs)\n ));\n mo.observe(this.el, { childList: true, subtree: true });\n }\n\n private processSlottedContent(mutations?: MutationRecord[]) {\n // see if we have label / helper content\n this.hasLabelSlot = !!this.el.querySelectorAll('[slot=\"label\"]').length;\n this.hasHelperSlot = !!this.el.querySelector('[slot=\"helper\"]');\n this.hasIconSlot = !!this.el.querySelector('[slot=\"icon\"]');\n\n if (!mutations) {\n // find legacy select. Take attrs and apply to our element\n let existingselect = this.el.querySelector(\n 'select:not([class*=\"sc-nano-select\"])'\n );\n if (existingselect) {\n Array.from(existingselect.attributes)\n .filter((attr) => attr.specified && attr.nodeName in this)\n .map((attr) => (this[attr.nodeName] = attr.nodeValue));\n }\n\n // find legacy label. Apply to our element\n let existingLabel = this.el.querySelector(\n 'label:not([class*=\"sc-nano-select\"])'\n );\n if (existingLabel) this.label = this.label || existingLabel.innerHTML;\n\n // find legacy slotted options. Apply them and add any relevant values\n let legacyOpts = this.el.querySelectorAll(\n 'option:not([class*=\"sc-nano-select\"])'\n );\n\n this.watchValue = false;\n if (legacyOpts && legacyOpts.length) {\n let options = [];\n legacyOpts.forEach((option: HTMLOptionElement) => {\n options.push({\n label: option.label || option.innerText,\n value: option.value,\n });\n if (!option.selected || !option.value) return;\n\n if (this.multiple) (this.value as Array<string>).push(option.value);\n else this.value = option.value;\n });\n this.options = options;\n }\n\n if (legacyOpts.length || existingLabel || existingselect) {\n // empty all legacy slotted stuff\n let children = this.el.querySelectorAll('[slot=\"legacy\"]');\n if (children) children.forEach((n) => n.parentNode.removeChild(n));\n }\n\n this.watchValue = true;\n }\n\n if (\n mutations &&\n !Array.from(mutations[0].addedNodes).find(\n (node) => node.nodeName.toLowerCase() === 'nano-select-option'\n )\n )\n return;\n\n // find nano-select-options\n let nanoOpts = this.el.querySelectorAll('nano-select-option');\n\n if (nanoOpts && nanoOpts.length) {\n let options = [];\n nanoOpts.forEach((option: HTMLNanoSelectOptionElement) => {\n options.push({\n label: option.label || option.innerText,\n value: option.value,\n });\n if (!option.selected || !option.value) return;\n\n if (this.multiple) (this.value as Array<string>).push(option.value);\n else this.value = option.value;\n });\n this.options = options;\n }\n\n this.setAvailOpts();\n }\n\n /* Event handling */\n\n private onChange = (ev?: Event) => {\n if (!this.readonly && !this.disabled && ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n this.value = this.getNativeValue();\n };\n\n private onBlur = () => {\n if (this.multiple) {\n this.currLiIndex = -1;\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n }\n this.hasFocus = false;\n\n setTimeout(() => {\n if (this.validateOn === 'dirty' && !this.listOpen && !this.hasFocus)\n this.showInlineValidation();\n }, 20);\n this.nanoBlur.emit();\n };\n\n private onFocus = () => {\n if (this.multiple) {\n this.currLiIndex = -1;\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n document.addEventListener('mousedown', this.handleDocumentMouseDown);\n this.openList();\n }\n\n this.hasFocus = true;\n this.nanoFocus.emit();\n };\n\n private clearSelectValue = (ev?: Event) => {\n if (this.clearSelect && !this.readonly && !this.disabled && ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n if (this.multiple) {\n this.value = [];\n let options = this.nativeSelect.querySelectorAll('option');\n if (options.length) options.forEach((n) => n.remove());\n this.currInsertIndex = -1;\n this.setAvailOpts();\n } else this.value = '';\n\n this.onChange();\n };\n\n private onClick = () => {\n this.setFocus();\n this.openList();\n };\n\n /* Multi event handlers */\n\n private onMultiInputBlur = () => {\n if (this.allowCustomValues) return;\n this.inputSearchVal = '';\n this.setAvailOpts();\n };\n\n private onDragStart = (ev: MouseEvent) => {\n let ele = ev.target as HTMLSpanElement;\n this.dragVal = ele.dataset.value;\n };\n\n private onDragEnd = (ev) => {\n this.dragVal = null;\n ev.preventDefault();\n };\n\n private onDragLeave = (ev: MouseEvent) => {\n let ele = ev.target as HTMLSpanElement;\n let spanVal: string =\n ele.dataset && ele.dataset.value ? ele.dataset.value : null;\n\n if (\n !spanVal ||\n this.dragVal === spanVal ||\n !this.value.includes(this.dragVal)\n ) {\n ev.preventDefault();\n return;\n }\n\n let to = this.value.indexOf(spanVal);\n let from = this.value.indexOf(this.dragVal);\n let tmpArr = this.value as Array<string>;\n let tmpVal = tmpArr[to];\n\n tmpArr[to] = tmpArr[from];\n tmpArr[from] = tmpVal;\n this.value = [...tmpArr];\n };\n\n private onMultiInput = (ev) => {\n this.inputSearchVal = ev.target.value;\n this.setAvailOpts();\n this.openList();\n this.nanoSearchChange.emit({ value: ev.target.value });\n };\n\n private getActiveOpt() {\n return this.multiList.querySelector('.has-focus') as HTMLLIElement;\n }\n\n private onOptFocus = (ev: FocusEvent) => {\n let activeEle = this.getActiveOpt();\n if (activeEle) activeEle.classList.remove('has-focus');\n (ev.target as HTMLElement).classList.add('has-focus');\n };\n\n private onHostClick = () => {\n setTimeout((_) => {\n if (!this.multiple || this.hasFocus) return;\n this.setFocus();\n }, 20);\n };\n\n private handleDocumentMouseDown = (ev: MouseEvent) => {\n const target = ev.target as HTMLElement;\n if (closestElement(this.el.tagName.toLowerCase(), target) !== this.el) {\n this.listOpen = false;\n this.onBlur();\n }\n };\n\n private handleDocumentKeyDown = (ev: KeyboardEvent) => {\n if (!this.multiple) return;\n\n if (!this.inputSearchVal) {\n let rm: HTMLSpanElement;\n\n switch (ev.key) {\n case 'Backspace':\n if (this.multiInput.previousElementSibling)\n rm = this.multiInput.previousElementSibling as HTMLSpanElement;\n else break;\n\n this.removeValue(rm.dataset.value || null);\n break;\n\n case 'Delete':\n if (this.multiInput.nextElementSibling)\n rm = this.multiInput.nextElementSibling as HTMLSpanElement;\n else break;\n\n this.removeValue(rm.dataset.value || null);\n break;\n\n case 'ArrowLeft':\n case 'ArrowRight':\n if (!this.value.length) break;\n\n if (ev.key === 'ArrowLeft' && this.multiInput.previousSibling)\n this.currInsertIndex--;\n if (ev.key === 'ArrowRight' && this.multiInput.nextSibling)\n this.currInsertIndex++;\n\n setTimeout(() => {\n this.multiInput.focus();\n }, 20);\n ev.preventDefault();\n break;\n }\n }\n\n // navigated to component via keyboard. Open with down.\n if (this.hasFocus && !this.listOpen && ev.key === 'ArrowDown') {\n this.openList();\n this.currLiIndex = -1;\n }\n\n // Close when tabbing outside of element\n if (this.hasFocus && ev.key === 'Tab') {\n setTimeout(() => {\n if (\n document.activeElement &&\n closestElement(\n this.el.tagName.toLowerCase(),\n document.activeElement\n ) !== this.el\n ) {\n this.listOpen = false;\n this.onBlur();\n return;\n }\n });\n }\n\n // list open, navigate items with arrows\n if (this.listOpen) {\n const selectedItem = this.getActiveOpt();\n let testIndex = this.listItems.indexOf(selectedItem) || this.currLiIndex;\n\n switch (ev.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n ev.preventDefault();\n\n if (ev.key === 'ArrowDown') testIndex++;\n else if (ev.key === 'ArrowUp') testIndex--;\n\n if (testIndex < 0) {\n this.currLiIndex = 0;\n this.multiInput.focus();\n return;\n }\n\n let foundIndex = this.listItems[testIndex]\n ? testIndex\n : this.currLiIndex;\n setTimeout(() => {\n this.listItems[foundIndex].focus();\n this.currLiIndex = foundIndex;\n }, 20);\n return;\n case 'Enter':\n case ' ':\n if (this.listItems[this.currLiIndex]) {\n this.addValue(this.listItems[this.currLiIndex].dataset.value);\n ev.preventDefault();\n }\n return;\n case 'Escape':\n this.listOpen = false;\n return;\n }\n }\n\n if (this.currLiIndex > -1) ev.preventDefault();\n };\n\n /* Stencil Component lifecycle hooks */\n\n connectedCallback() {\n this.debounceChanged();\n\n if (!Build.isBrowser) return;\n\n this.el.dispatchEvent(\n new CustomEvent('nanoDidLoad', {\n detail: this.el,\n })\n );\n testLegacyStyle(this.el);\n }\n\n disconnectedCallback() {\n document.dispatchEvent(\n new CustomEvent('nanoDidUnload', {\n detail: this.el,\n })\n );\n\n if (!Build.isBrowser) return;\n if (this.mo) this.mo.disconnect();\n if (this.popover) this.popover.destroy();\n }\n\n componentDidLoad() {\n this.slotChangeObserver();\n if (this.multiple) this.setupMulti();\n this.customValidate();\n }\n\n componentWillLoad() {\n this.switchValue();\n this.processSlottedContent();\n this.onInit = false;\n }\n\n private renderLabel(labelId: string, position?: 'float') {\n let classes: CssClassMap = {};\n if (position === 'float') {\n classes = { 'placeholder-as-label': true };\n } else {\n classes = { label: true, 'visually-hide': this.hideLabel };\n }\n if (!this.label && !this.hasLabelSlot) return;\n\n return (\n <label class={classes} htmlFor={this.selectId} id={labelId}>\n {this.label && this.label}\n {!this.label && !!this.hasLabelSlot && <slot name=\"label\" />}\n </label>\n );\n }\n\n render() {\n const labelId = this.selectId + '-lbl';\n const moreId =\n this.showInlineError || this.hasHelperSlot\n ? this.selectId + '-moreId'\n : '';\n const listId = this.selectId + '-list';\n\n this.rtl = (this.el.ownerDocument as Document).dir === 'rtl';\n this.listItems = [];\n this.valueItems = [];\n\n if (\n this.placeholder &&\n (!this.options[0] || this.options[0]['label'] !== this.placeholder)\n ) {\n this.options.unshift({ label: this.placeholder, value: '' });\n }\n\n let optionMenu = this.listOpen;\n\n let valueMarkup;\n if (this.multiple) {\n let input = (\n <input\n class=\"multi-input\"\n id={this.selectId}\n ref={(input) => (this.multiInput = input)}\n disabled={this.disabled}\n autoFocus={this.autofocus}\n autocomplete=\"off\"\n onInput={this.onMultiInput}\n value={this.inputSearchVal}\n onTouchStart={this.onClick}\n onMouseDown={this.onClick}\n onFocus={this.onFocus}\n onBlur={this.onMultiInputBlur}\n placeholder={\n this.placeholder && !this.floatLabel && !this.value.length\n ? this.placeholder\n : ''\n }\n role={this.multiple ? 'combobox' : ''}\n aria-labelledby={labelId + ' ' + moreId}\n aria-controls={listId}\n aria-expanded={optionMenu ? 'true' : 'false'}\n aria-required={this.required ? 'true' : 'false'}\n aria-autocomplete=\"list\"\n />\n );\n\n if (!!this.value.length) {\n valueMarkup = (this.value as Array<string>).map((val, i) => {\n let label = this.options.find((opt) => {\n return opt['value'] ? opt['value'] === val : opt === val;\n });\n label = label && label['label'] ? label['label'] : val;\n\n let toReturn = (\n <span\n onDragStart={this.onDragStart}\n onDragLeave={this.onDragLeave}\n onDragEnd={this.onDragEnd}\n draggable\n data-value={val}\n ref={(span) => this.valueItems.push(span)}\n class=\"multi-value\"\n >\n <span>{label}</span>\n <button\n class=\"multi-value-remove\"\n type=\"button\"\n tabindex=\"-1\"\n onTouchEnd={() => {\n this.removeValue(val);\n }}\n onMouseUp={() => {\n this.removeValue(val);\n }}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n </span>\n );\n\n if (i === 0 && this.currInsertIndex < 0) toReturn = [input, toReturn];\n else if (i === this.currInsertIndex) toReturn = [toReturn, input];\n return toReturn;\n });\n } else valueMarkup = input;\n }\n\n return (\n <Host\n type={this.multiple ? 'select-multiple' : 'select-one'}\n aria-disabled={this.disabled ? 'true' : null}\n class={{\n ...createColorClasses(this.color),\n 'has-value': !!this.value.length || !!this.inputSearchVal.length,\n 'has-focus': this.hasFocus,\n 'is-invalid': this.invalid,\n 'has-label': this.label !== null && !this.floatLabel,\n 'has-float-label': this.label !== null && this.floatLabel,\n rtl: this.rtl,\n 'has-multiple': this.multiple,\n 'multi-list-open': this.listOpen,\n 'has-clr-btn': this.clearSelect,\n masked: this.mask,\n legacy: this.isLegacy,\n }}\n onClick={this.onHostClick}\n >\n {!this.floatLabel && this.renderLabel(labelId)}\n <div class=\"select\" ref={(div) => (this.selectWrap = div)}>\n {this.floatLabel && this.renderLabel(labelId, 'float')}\n <div\n class={{\n 'native-select-wrap': true,\n 'native-select-wrap--multiple': this.multiple,\n }}\n >\n {!this.multiple && this.mask && (\n <div class=\"select-mask\">\n {this.getLabel(this.value as string)}\n </div>\n )}\n {this.multiple && [\n <div class=\"multi-wrap\">{valueMarkup}</div>,\n <ul\n role=\"listbox\"\n ref={(ul) => (this.multiList = ul)}\n aria-multiselectable=\"true\"\n aria-required={this.required}\n aria-expanded={optionMenu ? 'true' : 'false'}\n aria-hidden={!optionMenu}\n hidden={!optionMenu}\n id={listId}\n class={{\n 'multi-select-box': true,\n 'multi-select-box--open': optionMenu,\n }}\n >\n {this.allowCustomValues && this.inputSearchVal.length > 0 && (\n <li\n data-value={this.inputSearchVal}\n role=\"option\"\n tabindex=\"-1\"\n ref={(li) => this.listItems.push(li)}\n onMouseDown={() => {\n this.addValue(this.inputSearchVal);\n }}\n onFocus={this.onOptFocus}\n >\n Add {this.inputSearchVal}\n </li>\n )}\n {this.availOpts.map((option) => {\n let optval, label;\n if (option['value']) {\n optval = option['value'];\n label = option['label'] || option['value'];\n } else if (typeof option === 'string') {\n optval = option;\n label = optval;\n }\n if (!optval) return;\n return (\n <li\n role=\"option\"\n key={optval}\n data-value={optval}\n ref={(li) => this.listItems.push(li)}\n tabindex=\"-1\"\n aria-selected={this.isSelected(optval) ? 'true' : 'false'}\n onMouseDown={() => {\n this.addValue(optval);\n }}\n onFocus={this.onOptFocus}\n >\n {label}\n </li>\n );\n })}\n </ul>,\n <select\n id={this.selectId + '-hidden'}\n class=\"native-select\"\n ref={(select) => (this.nativeSelect = select)}\n aria-labelledby={labelId + ' ' + moreId}\n disabled={this.disabled}\n form={this.form}\n multiple={this.multiple}\n name={this.name}\n required={this.required}\n onInvalid={this.handleInvalid}\n >\n {(this.value as Array<string>).map((val) => {\n return (\n <option value={val} selected>\n {val}\n </option>\n );\n })}\n </select>,\n ]}\n {!this.multiple && (\n <select\n id={this.selectId}\n class=\"native-select\"\n ref={(select) => (this.nativeSelect = select)}\n aria-labelledby={labelId + ' ' + moreId}\n disabled={this.disabled}\n form={this.form}\n autoFocus={this.autofocus}\n multiple={this.multiple}\n name={this.name}\n required={this.required}\n size={this.size}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onInvalid={this.handleInvalid}\n onChange={this.onChange}\n >\n {this.options.map((option, i) => {\n if (option['value'] || option['label'])\n return (\n <option\n key={option['label'] + i}\n label={option['label']}\n value={option['value']}\n selected={\n option['value'] === this.value ||\n (!this.value && !option['value'])\n }\n disabled={!option['value'] && this.required}\n >\n {option['label'] ? option['label'] : option['value']}\n </option>\n );\n else\n return (\n <option\n key={(option as string) + i}\n value={option as string}\n selected={option === this.value}\n >\n {option}\n </option>\n );\n })}\n <slot name=\"legacy\" />\n </select>\n )}\n {this.clearSelect && !this.readonly && !this.disabled && (\n <button\n type=\"button\"\n class=\"select-clear-icon\"\n tabindex=\"-1\"\n onTouchEnd={this.clearSelectValue}\n onMouseUp={this.clearSelectValue}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n )}\n <div\n onTouchEnd={this.onClick}\n onMouseUp={this.onClick}\n class=\"select-down-icon\"\n >\n {this.hasIconSlot ? (\n <slot name=\"icon\" />\n ) : (\n <nano-icon name=\"regular/chevron-down\"></nano-icon>\n )}\n </div>\n </div>\n </div>\n {(this.showInlineError || this.hasHelperSlot) && (\n <div class=\"more\" id={moreId}>\n {!!this.showInlineError ? (\n <div class=\"error\">{this.errorMessage}</div>\n ) : (\n ''\n )}\n <div class=\"helper\">\n <slot name=\"helper\" />\n </div>\n </div>\n )}\n </Host>\n );\n }\n}\n\nlet selectIds = 0;\n"]}
@@ -0,0 +1,2 @@
1
+ import{r as o,c as n,j as t,h as r,e as i,g as a}from"./p-bb0619e6.js";import{d as e}from"./p-0e826935.js";import{g as s}from"./p-d3af43d2.js";let c=class{constructor(t){o(this,t),this.nanoValidate=n(this,"nanoValidate",7),this.grpId="nano-checkbox-group-"+h++,this._invalid=!1,this.errorMessage="",this.showErrorMsg=!1,this.hasHelperSlot=!1,this.validateOn="submit",this.showInlineError=!0,this.min=0,this.max=null,this.disabled=null,this.legend="",this.handleInvalid=o=>{this._invalid=!0,"submit"===this.validateOn&&(this._invalid=this.showErrorMsg=this.customValidate()),this.showInlineError&&o.preventDefault(),setTimeout((()=>this.showInlineValidation(o)),20)},this.showInlineValidation=o=>{this.nativeCbs&&this.nativeCbs.length&&("submitThenDirty"===this.validateOn&&(this.validateOn="dirty"),this.showErrorMsg=!1,this._invalid=!1,this.nativeCbs.forEach(((o,n)=>{o.validity.valid||(this.errorMessage=o.validationMessage,this.showErrorMsg=!0,this._invalid=!0,this.showInlineError&&this.checkboxes[n].setFocus())})),this.nanoValidate.emit({isValid:!this.invalid,errorMessage:this.errorMessage,originalEvent:o}))}}get invalid(){return this._invalid}async reportValidity(o){return new Promise((n=>{o&&this.showInlineValidation(),setTimeout((()=>{n({isValid:!this.invalid,errorMessage:this.errorMessage})}),20)}))}handleCbChange(){this.invalid&&(this.showErrorMsg=this._invalid=!1),this.customValidate(),"dirty"===this.validateOn&&this.showInlineValidation()}customValidate(){if(!this.nativeCbs||!this.nativeCbs.length||!this.checkboxes)return;let o=this.nativeCbs.filter((o=>"checkbox"===o.type));if(!o||!o.length)return;let n=o.filter((o=>o.checked)).length,t=!1;return this.checkboxes.forEach((o=>{o.required&&!o.checked&&(t=!0),o.setError(""),this.min&&n<this.min&&(o.setError(`You must select a minimum of ${this.min} values.`),t=!0),this.max&&n>this.max&&(o.setError(`Only up to ${this.max} values are allowed.`),t=!0)})),t}handleComponentChange(){this.checkboxTypes=s(this.checkboxes.map((o=>"types-"+o.type)))}handleDisabledChange(){null!==this.disabled&&this.checkboxes.map((o=>o.disabled=this.disabled))}attachSlotObserver(){(this.mo=new MutationObserver((()=>this.handleSlotChange()))).observe(this.host,{childList:!0})}async handleSlotChange(){t(this.host),this.checkboxes=Array.from(this.host.querySelectorAll("nano-checkbox")),this.hasHelperSlot=!!this.host.querySelector('[slot="helper"]'),this.nativeCbs=await Promise.all(this.checkboxes.reduce(((o,n)=>(o.push(n.getInputElement()),o)),[])),this.nativeCbs.forEach((o=>o.addEventListener("invalid",this.handleInvalid)))}componentWillLoad(){this.showInlineValidation=e(this.showInlineValidation,20),this.customValidate=this.customValidate.bind(this),this.handleDisabledChange()}connectedCallback(){this.attachSlotObserver()}disconnectedCallback(){this.mo&&this.mo.disconnect()}render(){const o=this.grpId+"-lbl",n=this.showInlineError||this.hasHelperSlot?this.grpId+"-more":"";return r(i,Object.assign({},this.checkboxTypes,{dir:"rtl"===this.host.ownerDocument.dir?"rtl":null}),r("fieldset",{disabled:this.disabled,class:{nanogroupcb:!0,"show-error":this.showErrorMsg}},r("legend",{class:"nanogroupcb__legend",id:o},this.legend),r("div",{class:"nanogroupcb__cbs",role:"group","aria-labelledby":o+" "+n},r("slot",null)),(this.showInlineError||this.hasHelperSlot)&&r("div",{class:"nanogroupcb__more",id:n},this.showInlineError?r("div",{class:"nanogroupcb__error"},this.errorMessage):"",r("div",{class:"nanogroupcb__help"},r("slot",{name:"helper"})))))}get host(){return a(this)}static get watchers(){return{validateOn:["handleCbChange"],min:["handleCbChange"],max:["handleCbChange"],nativeCbs:["customValidate"],checkboxes:["handleComponentChange","handleDisabledChange"],disabled:["handleDisabledChange"]}}},h=0;c.style='.sc-nano-checkbox-group-h{-webkit-box-sizing:border-box;box-sizing:border-box}*.sc-nano-checkbox-group,*.sc-nano-checkbox-group::before,*.sc-nano-checkbox-group::after{-webkit-box-sizing:border-box;box-sizing:border-box}.sc-nano-checkbox-group-h{--control-margin-top:0;--control-margin-end:0;--control-margin-bottom:0;--control-margin-start:0;--invalid-msg-color:var(--nano-color-danger, #ef4135);--invalid-msg-font-size:var(--nano-input-help-font-size, 0.75em);--help-msg-color:var(--nano-input-help-color, #616d6e);--label-color:var(--nano-input-label-color, "currentColor");--label-color--invalid:var(--nano-input-label-color-invalid, "currentColor");--label-font-size:var(--nano-input-label-color, 1em);--label-padding:var(--nano-input-padding-bottom, var(--nano-input-padding, 8px));display:block}.sc-nano-checkbox-group-h *.sc-nano-checkbox-group{-webkit-box-sizing:inherit;box-sizing:inherit}[types-tag].sc-nano-checkbox-group-h,[types-segment].sc-nano-checkbox-group-h{--control-margin-top:0;--control-margin-end:8px;--control-margin-bottom:8px;--control-margin-start:0}[types-checkbox].sc-nano-checkbox-group-h,[types-radio].sc-nano-checkbox-group-h{--control-margin-top:0;--control-margin-end:10px;--control-margin-bottom:8px;--control-margin-start:0}.nanogroupcb.sc-nano-checkbox-group{border:none;margin:0;padding:0}.nanogroupcb__legend.sc-nano-checkbox-group,.nanogroupcb__error.sc-nano-checkbox-group,.nanogroupcb__help.sc-nano-checkbox-group,.nanogroupcb__more.sc-nano-checkbox-group{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.nanogroupcb__legend.sc-nano-checkbox-group{font-size:var(--label-font-size);padding:0 0 var(--label-padding);margin:0;line-height:1}[invalid].sc-nano-checkbox-group-h:not([invalid=false]) .nanogroupcb__legend.sc-nano-checkbox-group{color:var(--label-color--invalid)}.nanogroupcb__more.sc-nano-checkbox-group{height:1em;margin-left:3px;margin-right:0;margin-top:calc(var(--label-padding) - var(--control-margin-bottom));margin-bottom:var(--label-padding);position:relative}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanogroupcb__more.sc-nano-checkbox-group{margin-left:unset;margin-right:unset;-webkit-margin-start:3px;margin-inline-start:3px;-webkit-margin-end:0;margin-inline-end:0}}.nanogroupcb__error.sc-nano-checkbox-group,.nanogroupcb__help.sc-nano-checkbox-group{top:0;left:0;position:absolute;font-size:var(--invalid-msg-font-size);line-height:1.2;-webkit-transition:0.3s ease-out opacity;transition:0.3s ease-out opacity}.show-error.sc-nano-checkbox-group .nanogroupcb__error.sc-nano-checkbox-group,.show-error.sc-nano-checkbox-group .nanogroupcb__help.sc-nano-checkbox-group{opacity:1}.nanogroupcb__error.sc-nano-checkbox-group{color:var(--invalid-msg-color);font-stretch:condensed;opacity:0}.show-error.sc-nano-checkbox-group .nanogroupcb__error.sc-nano-checkbox-group{opacity:1}.nanogroupcb__help.sc-nano-checkbox-group{font-style:italic;opacity:1;color:var(--help-msg-color)}.show-error.sc-nano-checkbox-group .nanogroupcb__help.sc-nano-checkbox-group{opacity:0}.nanogroupcb__cbs.sc-nano-checkbox-group{margin:0;padding:0;line-height:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.nanogroupcb__cbs.sc-nano-checkbox-group-s>*:not([type=tag]):not([type=segment]):not([type=segment-pill]),.nanogroupcb__cbs .sc-nano-checkbox-group-s>*:not([type=tag]):not([type=segment]):not([type=segment-pill]){--check-base-size:1.2em;font-size:0.85em}.nanogroupcb__cbs.sc-nano-checkbox-group-s>*,.nanogroupcb__cbs .sc-nano-checkbox-group-s>*{margin-left:var(--control-margin-start);margin-top:var(--control-margin-top);margin-right:var(--control-margin-end);margin-bottom:var(--control-margin-bottom)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanogroupcb__cbs.sc-nano-checkbox-group-s>*,.nanogroupcb__cbs .sc-nano-checkbox-group-s>*{margin-left:unset;margin-right:unset;-webkit-margin-start:var(--control-margin-start);margin-inline-start:var(--control-margin-start);-webkit-margin-end:var(--control-margin-end);margin-inline-end:var(--control-margin-end)}}';export{c as nano_checkbox_group}
2
+ //# sourceMappingURL=p-96ba0d00.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/checkbox/checkbox-group.tsx","src/components/checkbox/checkbox-group.scss?tag=nano-checkbox-group&encapsulation=scoped"],"names":["CheckboxGroup","[object Object]","hostRef","this","grpId","grpIds","_invalid","errorMessage","showErrorMsg","hasHelperSlot","validateOn","showInlineError","min","max","disabled","legend","handleInvalid","ev","customValidate","preventDefault","setTimeout","showInlineValidation","nativeCbs","length","forEach","cb","i","validity","valid","validationMessage","checkboxes","setFocus","nanoValidate","emit","isValid","invalid","originalEvent","validateFirst","Promise","resolve","onlyCbs","filter","type","checked","required","setError","checkboxTypes","getClassMap","map","mo","MutationObserver","handleSlotChange","observe","host","childList","forceUpdate","Array","from","querySelectorAll","querySelector","all","reduce","acc","push","getInputElement","addEventListener","debounce","bind","handleDisabledChange","attachSlotObserver","disconnect","legendId","moreId","h","Host","Object","assign","dir","ownerDocument","class","nanogroupcb","show-error","id","role","aria-labelledby","name"],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n Element,\n h,\n ComponentInterface,\n State,\n Listen,\n Watch,\n Host,\n Method,\n forceUpdate,\n Event,\n EventEmitter,\n} from '@stencil/core';\nimport {\n CssClassMap,\n ControlValidityEventDetail,\n ControlValidity,\n} from '../../interface';\nimport { debounce, getClassMap } from '../../utils';\n\n/**\n * `nano-checkbox-group` is an optional wrapper for all `nano-checkbox` controls.\n * It provides a convenient place to anchor a collective label and any validation issues.\n *\n * @slot - Used for grouping checkboxes inside the group wrapper\n * @slot helper - helper text to accompany the form field underneath.\n */\n@Component({\n tag: 'nano-checkbox-group',\n styleUrl: 'checkbox-group.scss',\n scoped: true,\n})\nexport class CheckboxGroup implements ComponentInterface {\n private mo?: MutationObserver;\n private checkboxTypes: CssClassMap;\n private grpId = `nano-checkbox-group-${grpIds++}`;\n private _invalid = false;\n\n @Element() host: HTMLNanoCheckboxGroupElement;\n\n // internal state\n\n @State() checkboxes: HTMLNanoCheckboxElement[];\n @State() nativeCbs: HTMLInputElement[];\n @State() errorMessage: string = '';\n @State() showErrorMsg = false;\n @State() hasHelperSlot = false;\n\n // public properties\n\n /**\n * When should the field perform validation\n */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submit';\n\n /**\n * Whether to show validation errors underneath input\n */\n @Prop() showInlineError = true;\n\n /**\n * The minimum number of checkboxes required to be valid. Only relevant for checkbox type controls.\n * A validation error will be thrown if not enough controls are checked.\n */\n @Prop() min: number = 0;\n\n /**\n * The maximum number of checkboxes allowed. Only relevant for checkbox type controls.\n * Other controls will automatically be disabled upon reaching this number.\n */\n @Prop() max: number = null;\n\n /**\n * Disable all the nested form controls\n */\n @Prop({ reflect: true }) disabled: boolean | null = null;\n\n /**\n * A common label for children controls\n */\n @Prop() legend: string = '';\n\n /**\n * This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly\n */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n\n // Public methods\n\n /**\n * Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `{ isValid: boolean, errorMessage: string }`\n */\n @Method()\n async reportValidity(validateFirst: boolean): Promise<ControlValidity> {\n return new Promise((resolve) => {\n if (validateFirst) this.showInlineValidation();\n setTimeout(() => {\n resolve({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n });\n }, 20);\n });\n }\n\n // Events\n\n /**\n * Called when validation is performed (which depends on `validateOn`).\n * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`.\n */\n @Event() nanoValidate: EventEmitter<ControlValidityEventDetail>;\n\n // listeners & watchers\n\n /**\n * Notes on validation... custom validation messages should be set\n * no matter whether we show inline messages or native html5.\n * this will mean forms cannot submit when there are pending validation issues.\n */\n @Listen('nanoChange')\n @Watch('validateOn')\n @Watch('min')\n @Watch('max')\n handleCbChange() {\n if (this.invalid) this.showErrorMsg = this._invalid = false;\n this.customValidate();\n\n if (this.validateOn !== 'dirty') return;\n this.showInlineValidation();\n }\n\n @Watch('nativeCbs')\n customValidate() {\n if (!this.nativeCbs || !this.nativeCbs.length || !this.checkboxes) return;\n\n // we only care about checkbox controls.\n let onlyCbs = this.nativeCbs.filter((cb) => cb.type === 'checkbox');\n if (!onlyCbs || !onlyCbs.length) return;\n\n let checked = onlyCbs.filter((cb) => cb.checked).length;\n let invalid = false;\n\n this.checkboxes.forEach((cb) => {\n if (cb.required && !cb.checked) {\n invalid = true;\n }\n\n cb.setError('');\n\n if (this.min && checked < this.min) {\n cb.setError(`You must select a minimum of ${this.min} values.`);\n invalid = true;\n }\n if (this.max && checked > this.max) {\n cb.setError(`Only up to ${this.max} values are allowed.`);\n invalid = true;\n }\n });\n return invalid;\n }\n\n @Watch('checkboxes')\n handleComponentChange() {\n this.checkboxTypes = getClassMap(\n this.checkboxes.map((cb) => 'types-' + cb.type)\n );\n }\n\n @Watch('disabled')\n @Watch('checkboxes')\n handleDisabledChange() {\n if (this.disabled === null) return;\n this.checkboxes.map((cb) => (cb.disabled = this.disabled));\n }\n\n // private methods\n\n private attachSlotObserver() {\n const mo = (this.mo = new MutationObserver(() => this.handleSlotChange()));\n mo.observe(this.host, { childList: true });\n }\n\n private async handleSlotChange() {\n forceUpdate(this.host);\n this.checkboxes = Array.from(this.host.querySelectorAll('nano-checkbox'));\n this.hasHelperSlot = !!this.host.querySelector('[slot=\"helper\"]');\n\n this.nativeCbs = await Promise.all(\n this.checkboxes.reduce((acc: Array<Promise<HTMLInputElement>>, cb) => {\n acc.push(cb.getInputElement());\n return acc;\n }, [])\n );\n\n this.nativeCbs.forEach((cb) =>\n cb.addEventListener('invalid', this.handleInvalid)\n );\n }\n\n private handleInvalid = (ev: Event) => {\n this._invalid = true;\n\n if (this.validateOn === 'submit') {\n this._invalid = this.showErrorMsg = this.customValidate();\n }\n if (!!this.showInlineError) ev.preventDefault();\n\n setTimeout((_) => this.showInlineValidation(ev), 20);\n };\n\n private showInlineValidation = (ev?: Event) => {\n if (!this.nativeCbs || !this.nativeCbs.length) return;\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n this.showErrorMsg = false;\n this._invalid = false;\n\n this.nativeCbs.forEach((cb, i) => {\n if (!cb.validity.valid) {\n this.errorMessage = cb.validationMessage;\n this.showErrorMsg = true;\n this._invalid = true;\n if (!!this.showInlineError) {\n this.checkboxes[i].setFocus();\n }\n }\n });\n\n this.nanoValidate.emit({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n originalEvent: ev,\n });\n };\n\n // stencil hooks\n\n componentWillLoad() {\n this.showInlineValidation = debounce(this.showInlineValidation, 20);\n this.customValidate = this.customValidate.bind(this);\n this.handleDisabledChange();\n }\n\n connectedCallback() {\n this.attachSlotObserver();\n }\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n }\n\n render() {\n let isRtl = (this.host.ownerDocument as Document).dir === 'rtl';\n const legendId = this.grpId + '-lbl';\n const moreId =\n this.showInlineError || this.hasHelperSlot ? this.grpId + '-more' : '';\n\n return (\n <Host {...this.checkboxTypes} dir={isRtl ? 'rtl' : null}>\n <fieldset\n disabled={this.disabled}\n class={{ nanogroupcb: true, 'show-error': this.showErrorMsg }}\n >\n <legend class=\"nanogroupcb__legend\" id={legendId}>\n {this.legend}\n </legend>\n <div\n class=\"nanogroupcb__cbs\"\n role=\"group\"\n aria-labelledby={legendId + ' ' + moreId}\n >\n <slot />\n </div>\n {(this.showInlineError || this.hasHelperSlot) && (\n <div class=\"nanogroupcb__more\" id={moreId}>\n {!!this.showInlineError ? (\n <div class=\"nanogroupcb__error\">{this.errorMessage}</div>\n ) : (\n ''\n )}\n <div class=\"nanogroupcb__help\">\n <slot name=\"helper\" />\n </div>\n </div>\n )}\n </fieldset>\n </Host>\n );\n }\n}\n\nlet grpIds = 0;\n","@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n\n:host {\n /**\n * @prop --control-margin-top: Margin between controls. Default depends on control type;\n * @prop --control-margin-end: Margin between controls. Default depends on control type;\n * @prop --control-margin-bottom: Margin between controls. Default depends on control type;\n * @prop --control-margin-start: Margin between controls. Default depends on control type;\n\n * @prop --invalid-msg-color: Default #{nano-color(danger, base)};\n * @prop --invalid-msg-font-size: Default #{$input-help-font-size};\n\n * @prop --help-msg-color: Font color applied to slot=\"helper\". Default #{$input-help-color};\n\n * @prop --label-color: Default #{$label-color};\n * @prop --label-color--invalid: Default #{$label-color-invalid};\n * @prop --label-font-size: Default #{$label-font-size};\n * @prop --label-padding: space between legend and control. Default #{$input-padding-bottom};\n */\n\n --control-margin-top: 0;\n --control-margin-end: 0;\n --control-margin-bottom: 0;\n --control-margin-start: 0;\n --invalid-msg-color: #{nano-color(danger, base)};\n --invalid-msg-font-size: #{$input-help-font-size};\n --help-msg-color: #{$input-help-color};\n --label-color: #{$label-color};\n --label-color--invalid: #{$label-color-invalid};\n --label-font-size: #{$label-font-size};\n --label-padding: #{$input-padding-bottom};\n\n display: block;\n\n * {\n box-sizing: inherit;\n }\n}\n\n:host([types-tag]),\n:host([types-segment]) {\n --control-margin-top: 0;\n --control-margin-end: 8px;\n --control-margin-bottom: 8px;\n --control-margin-start: 0;\n}\n\n:host([types-checkbox]),\n:host([types-radio]) {\n --control-margin-top: 0;\n --control-margin-end: 10px;\n --control-margin-bottom: 8px;\n --control-margin-start: 0;\n}\n\n.nanogroupcb {\n border: none;\n margin: 0;\n padding: 0;\n\n &__legend,\n &__error,\n &__help,\n &__more {\n display: block;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &__legend {\n font-size: var(--label-font-size);\n padding: 0 0 var(--label-padding);\n margin: 0;\n line-height: 1;\n\n :host([invalid]:not([invalid='false'])) & {\n color: var(--label-color--invalid);\n }\n }\n\n &__more {\n height: 1em;\n\n @include margin(\n calc(var(--label-padding) - var(--control-margin-bottom)),\n 0,\n var(--label-padding),\n 3px\n );\n\n position: relative;\n }\n\n &__error,\n &__help {\n top: 0;\n left: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n\n .show-error & {\n opacity: 1;\n }\n }\n\n &__error {\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n opacity: 0;\n\n .show-error & {\n opacity: 1;\n }\n }\n\n &__help {\n font-style: italic;\n opacity: 1;\n color: var(--help-msg-color);\n\n .show-error & {\n opacity: 0;\n }\n }\n\n &__cbs {\n margin: 0;\n padding: 0;\n line-height: 1;\n display: flex;\n flex-wrap: wrap;\n\n ::slotted(*:not([type='tag']):not([type='segment']):not([type='segment-pill'])) {\n --check-base-size: 1.2em;\n\n font-size: 0.85em;\n }\n\n ::slotted(*) {\n margin-left: var(--control-margin-start);\n margin-top: var(--control-margin-top);\n margin-right: var(--control-margin-end);\n margin-bottom: var(--control-margin-bottom);\n }\n }\n}\n\n/* autoprefixer: ignore next */\n@supports ((margin-inline-start: 0) or (-webkit-margin-start: 0)) {\n .nanogroupcb__cbs {\n &::slotted(*),\n ::slotted(*) {\n margin-left: unset;\n margin-right: unset;\n margin-inline-start: var(--control-margin-start);\n margin-inline-end: var(--control-margin-end);\n }\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import{h as t,r as e,c as i,e as a,g as s}from"./p-bb0619e6.js";import{b as o,D as n,i as r,p as d,d as h,s as l,e as c,f as u,g as p,h as b,j as f,k as w,a as g}from"./p-6ecf2f5c.js";import{c as x}from"./p-d3af43d2.js";import{f as _}from"./p-c14d5f7d.js";import{P as v}from"./p-d112948c.js";import{t as m}from"./p-ed2efbeb.js";import{a as y}from"./p-a5917bdc.js";var k;function D(t,e){return null!=t&&null!=e&&t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()&&t.getDate()===e.getDate()}function z(t,e){var i=new Date(t);return i.setDate(i.getDate()+e),i}function C(t,e,i){return function(t,e,i){const a=t.getTime();return e&&e instanceof Date&&a<e.getTime()?e:i&&i instanceof Date&&a>i.getTime()?i:t}(t,e,i)===t}!function(t){t[t.Sunday=0]="Sunday",t[t.Monday=1]="Monday",t[t.Tuesday=2]="Tuesday",t[t.Wednesday=3]="Wednesday",t[t.Thursday=4]="Thursday",t[t.Friday=5]="Friday",t[t.Saturday=6]="Saturday"}(k||(k={}));const S=({focusedDay:e,today:i,day:a,onDaySelect:s,onKeyboardNavigation:o,focusedDayRef:n,inRange:r,disabled:d,isSelected:h})=>{const l=D(a,i),c=D(a,e),u=a.getMonth()!==e.getMonth()||d,p=!r;return t("button",{class:{"duet-date__day":!0,"is-outside":p,"is-disabled":u,"is-today":l},tabIndex:c?0:-1,onClick:function(t){s(t,a)},onKeyDown:o,disabled:p,type:"button","aria-pressed":h?"true":"false",ref:t=>{c&&t&&n&&n(t)}},t("span",{"aria-hidden":"true"},a.getDate()),t("span",{class:"duet-date__vhidden"},a.toLocaleDateString(void 0,{day:"numeric",month:"long"})))},M=({selectedDate:e,focusedDate:i,labelledById:a,localization:s,firstDayOfWeek:o,min:n,max:r,onDateSelect:d,onKeyboardNavigation:h,focusedDayRef:l,onMouseDown:c,onFocusIn:u,isDateDisabled:p})=>{const b=new Date,f=function(t,e=k.Monday){return function(t,e){const i=[];let a=t;for(;!D(a,e);)i.push(a),a=z(a,1);return i.push(a),i}(function(t,e=k.Monday){var i=new Date(t),a=i.getDay(),s=(a<e?7:0)+a-e;return i.setDate(i.getDate()-s),i}(function(t){return new Date(t.getFullYear(),t.getMonth(),1)}(t),e),function(t,e=k.Monday){var i=new Date(t),a=i.getDay(),s=6+(a<e?-7:0)-(a-e);return i.setDate(i.getDate()+s),i}(function(t){return new Date(t.getFullYear(),t.getMonth()+1,0)}(t),e))}(i,o);return t("table",{class:"duet-date__table",role:"grid","aria-labelledby":a,onFocusin:u,onMouseDown:c},t("thead",null,t("tr",null,(g=o,x=e=>t("th",{class:"duet-date__table-header",scope:"col"},t("span",{"aria-hidden":"true"},e.substr(0,2)),t("span",{class:"duet-date__vhidden"},e)),(w=s.dayNames).map(((t,e)=>x(w[(e+g)%w.length])))))),t("tbody",null,function(t){const e=[];for(let i=0;i<t.length;i+=7)e.push(t.slice(i,i+7));return e}(f).map((a=>t("tr",{class:"duet-date__row"},a.map((a=>t("td",{class:"duet-date__cell",role:"gridcell","aria-selected":D(a,e)?"true":void 0},t(S,{day:a,today:b,focusedDay:i,inRange:C(a,n,r),onDaySelect:d,onKeyboardNavigation:h,focusedDayRef:l,disabled:p(a),isSelected:D(a,e)})))))))));var w,g,x},T={buttonLabel:"Choose date",placeholder:"YYYY-MM-DD",selectedDateMessage:"Selected date is",prevMonthLabel:"Previous month",nextMonthLabel:"Next month",monthSelectLabel:"Month",yearSelectLabel:"Year",closeLabel:"Close window",keyboardInstruction:"You can use arrow keys to navigate dates",calendarHeading:"Choose a date",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]};let A=class{constructor(t){e(this,t),this.nanoDatePicked=i(this,"nanoDatePicked",7),this.monthSelectId=o("NanoDateMonth"),this.yearSelectId=o("NanoDateYear"),this.dialogLabelId=o("NanoDateLabel"),this.initialTouchX=null,this.initialTouchY=null,this.activeFocus=!1,this.focusedDay=new Date,this.selectedDate="",this.min="",this.max="",this.firstDayOfWeek=n.Monday,this.localization=T,this.isDateDisabled=()=>!1,this.isModal=!1,this.enableActiveFocus=()=>{this.activeFocus=!0},this.disableActiveFocus=()=>{this.activeFocus=!1},this.handleTouchStart=t=>{const e=t.changedTouches[0];this.initialTouchX=e.pageX,this.initialTouchY=e.pageY},this.handleTouchMove=t=>{t.preventDefault()},this.handleTouchEnd=t=>{const e=t.changedTouches[0],i=e.pageX-this.initialTouchX,a=e.pageY-this.initialTouchY;Math.abs(i)>=70&&Math.abs(a)<=70&&this.addMonths(i<0?1:-1),this.initialTouchY=null,this.initialTouchX=null},this.handleNextMonthClick=t=>{t.preventDefault(),this.addMonths(1)},this.handlePreviousMonthClick=t=>{t.preventDefault(),this.addMonths(-1)},this.handleKeyboardNavigation=t=>{if("Tab"===t.key&&!t.shiftKey&&this.isModal)return t.preventDefault(),void(this.firstFocusEle||this.firstFocusableElement).focus();var e=!0;switch(t.key){case"ArrowRight":this.addDays(1);break;case"ArrowLeft":this.addDays(-1);break;case"ArrowDown":this.addDays(7);break;case"ArrowUp":this.addDays(-7);break;case"PageUp":t.shiftKey?this.addYears(-1):this.addMonths(-1);break;case"PageDown":t.shiftKey?this.addYears(1):this.addMonths(1);break;case"Home":this.startOfWeek();break;case"End":this.endOfWeek();break;default:e=!1}e&&(t.preventDefault(),this.enableActiveFocus())},this.handleDaySelect=(t,e)=>{const i=!this.isDateDisabled(e);r(e,d(this.min),d(this.max))&&i&&(e.getMonth()===this.focusedDay.getMonth()?this.setValue(e):this.setFocusedDay(e))},this.handleMonthSelect=t=>{this.setMonth(parseInt(t.target.value,10))},this.handleYearSelect=t=>{this.setYear(parseInt(t.target.value,10))},this.processFocusedDayNode=t=>{this.focusedDayNode=t,this.activeFocus&&setTimeout((()=>t.focus()),0)}}async setFocus(t=!1,e=!1){this.setFocusedDay(d(this.selectedDate)||new Date),t?setTimeout((()=>this.focusedDayNode.focus()),20):(clearTimeout(this.focusTimeoutId),this.focusTimeoutId=setTimeout((()=>{e&&_.force(this.monthSelectNode),this.monthSelectNode.focus()}),20))}handleSelectedDateChange(){this.setFocus(!0)}addDays(t){this.setFocusedDay(h(this.focusedDay,t))}addMonths(t){this.setMonth(this.focusedDay.getMonth()+t)}addYears(t){this.setYear(this.focusedDay.getFullYear()+t)}startOfWeek(){this.setFocusedDay(l(this.focusedDay,this.firstDayOfWeek))}endOfWeek(){this.setFocusedDay(c(this.focusedDay,this.firstDayOfWeek))}setMonth(t){const e=u(p(this.focusedDay),t),i=b(e),a=u(this.focusedDay,t);this.setFocusedDay(f(a,e,i))}setYear(t){const e=w(p(this.focusedDay),t),i=b(e),a=w(this.focusedDay,t);this.setFocusedDay(f(a,e,i))}setFocusedDay(t){this.focusedDay=f(t,d(this.min),d(this.max))}setValue(t){this.selectedDate=g(t),this.nanoDatePicked.emit({value:this.selectedDate,valueAsDate:t})}connectedCallback(){this.yearSelectNode&&_.observe(this.yearSelectNode),this.monthSelectNode&&_.observe(this.monthSelectNode)}componentWillLoad(){this.handleSelectedDateChange()}componentDidLoad(){this.connectedCallback()}disconnectedCallback(){_.unobserve(this.yearSelectNode),_.unobserve(this.monthSelectNode)}render(){const e=d(this.selectedDate),i=(e||this.focusedDay).getFullYear(),s=this.focusedDay.getMonth(),o=this.focusedDay.getFullYear(),n=d(this.min),h=d(this.max),l=null!=n&&n.getMonth()===s&&n.getFullYear()===o,c=null!=h&&h.getMonth()===s&&h.getFullYear()===o;let u=i-10,f=i+10;return n&&(u=n.getFullYear()),h&&(f=h.getFullYear()),t(a,{class:Object.assign({},x(this.color))},t("div",{class:"duet-date"},t("div",{class:{"duet-date__dialog":!0,"is-active":!0},onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},t("div",{class:"duet-date__dialog-content"},t("div",{class:"duet-date__vhidden duet-date__instructions","aria-live":"polite"},this.localization.keyboardInstruction),t("div",{class:"duet-date__header",onFocusin:this.disableActiveFocus},t("div",null,t("h2",{id:this.dialogLabelId,class:"duet-date__vhidden","aria-live":"polite"},this.localization.monthNames[s]," ",this.focusedDay.getFullYear()),t("label",{htmlFor:this.monthSelectId,class:"duet-date__vhidden"},this.localization.monthSelectLabel),t("div",{class:"duet-date__select"},t("select",{id:this.monthSelectId,class:"duet-date__select--month",ref:t=>this.firstFocusableElement=this.monthSelectNode=t,onChange:this.handleMonthSelect},this.localization.monthNames.map(((e,i)=>t("option",{key:e,value:i,selected:i===s,disabled:!r(new Date(o,i,1),n?p(n):null,h?b(h):null)},e)))),t("div",{class:"duet-date__select-label","aria-hidden":"true"},t("span",null,this.localization.monthNamesShort[s]),t("nano-icon",{name:"light/chevron-down"}))),t("label",{htmlFor:this.yearSelectId,class:"duet-date__vhidden"},this.localization.yearSelectLabel),t("div",{class:"duet-date__select"},t("select",{id:this.yearSelectId,class:"duet-date__select--year",onChange:this.handleYearSelect,ref:t=>this.yearSelectNode=t},function(t,e){for(var i=[],a=t;a<=e;a++)i.push(a);return i}(u,f).map((e=>t("option",{key:e,selected:e===o},e)))),t("div",{class:"duet-date__select-label","aria-hidden":"true"},t("span",null,this.focusedDay.getFullYear()),t("nano-icon",{name:"light/chevron-down"})))),t("div",{class:"duet-date__nav"},t("button",{class:"duet-date__prev",onClick:this.handlePreviousMonthClick,disabled:l,type:"button"},t("nano-icon",{name:"light/chevron-left"}),t("span",{class:"duet-date__vhidden"},this.localization.prevMonthLabel)),t("button",{class:"duet-date__next",onClick:this.handleNextMonthClick,disabled:c,type:"button"},t("nano-icon",{name:"light/chevron-right"}),t("span",{class:"duet-date__vhidden"},this.localization.nextMonthLabel)))),t("div",null,t(M,{selectedDate:e,focusedDate:this.focusedDay,onDateSelect:this.handleDaySelect,onKeyboardNavigation:this.handleKeyboardNavigation,labelledById:this.dialogLabelId,localization:this.localization,firstDayOfWeek:this.firstDayOfWeek,focusedDayRef:this.processFocusedDayNode,min:n,max:h,isDateDisabled:this.isDateDisabled}))))))}get host(){return s(this)}static get watchers(){return{selectedDate:["handleSelectedDateChange"]}}};A.style=':host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{--background:var(--nano-layer-bg, #fff);--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--inactive-color:var(--nano-button-color, #f0efed);display:block;font-size:16px}:host(.nano-color){--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(--nano-color-contrast);--focus-shadow:0 0 0 0.1875rem rgba(var(--nano-color-tint-rgb), 0.56)}.duet-date *,.duet-date *::before,.duet-date *::after{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0}.duet-date{-webkit-box-sizing:border-box;box-sizing:border-box;color:currentColor;display:block;margin:0;position:relative;text-align:left;width:100%}.duet-date__dialog{display:-webkit-box;display:-ms-flexbox;display:flex;top:100%;max-width:100%;width:100%}.duet-date__dialog.is-left{left:auto;right:0;width:auto}.duet-date__dialog-content{background:var(--background);min-width:290px;padding:16px 16px 20px;position:relative;-webkit-transform:none;transform:none;max-width:100%;width:100%}.duet-date__table{border-collapse:collapse;border-spacing:0;font-size:1em;line-height:1.25;text-align:center;width:100%}.duet-date__table-header{font-size:0.75em;font-weight:600;letter-spacing:1px;line-height:1.25;padding-bottom:8px;text-decoration:none;text-transform:uppercase}.duet-date__cell{text-align:center}.duet-date__day{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:transparent;border:0;border-radius:50%;cursor:pointer;display:inline-block;font-size:0.875em;font-variant-numeric:tabular-nums;line-height:1.25;position:relative;text-align:center;vertical-align:middle;z-index:1;-webkit-transition:0.15s ease all;transition:0.15s ease all;height:2.5em;width:2.5em}.duet-date__day.is-today{-webkit-box-shadow:0 0 0 1px var(--active-color);box-shadow:0 0 0 1px var(--active-color);position:relative}.duet-date__day:hover::before,.duet-date__day.is-today::before{content:"";background:var(--active-color);border-radius:50%;bottom:0;left:0;opacity:0.16;position:absolute;right:0;top:0}[aria-selected=true] .duet-date__day{background:var(--active-color);color:var(--active-text-color);-webkit-box-shadow:none;box-shadow:none;outline:0}.duet-date__day:active{background:var(--active-color);-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);color:var(--active-text-color)}.duet-date__day:focus{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);outline:0}.duet-date__day.is-disabled{background:transparent;-webkit-box-shadow:none;box-shadow:none;cursor:default;opacity:0.5}.duet-date__day.is-disabled::before{display:none}.duet-date__day.is-outside{background:var(--inactive-color);-webkit-box-shadow:none;box-shadow:none;cursor:default;opacity:0.6;pointer-events:none}.duet-date__day.is-outside::before{display:none}.duet-date__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:16px;width:100%}.duet-date__nav{white-space:nowrap}.duet-date__prev,.duet-date__next{background:var(--inactive-color);-moz-appearance:none;-webkit-appearance:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;appearance:none;border:0;border-radius:50%;cursor:pointer;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:distribute;justify-content:space-around;margin-left:8px;padding:0;-webkit-transition:background-color 300ms ease;transition:background-color 300ms ease;font-size:0.9em;height:2.2em;width:2.2em}.duet-date__prev:focus,.duet-date__next:focus{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);outline:0}.duet-date__prev:active:focus,.duet-date__next:active:focus{-webkit-box-shadow:none;box-shadow:none}.duet-date__prev:disabled,.duet-date__next:disabled{cursor:default;opacity:0.5}.duet-date__prev nano-icon,.duet-date__next nano-icon{margin:0 auto}.duet-date__select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-top:4px;position:relative}.duet-date__select span{margin-right:4px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.duet-date__select span{margin-right:unset;-webkit-margin-end:4px;margin-inline-end:4px}}.duet-date__select select{cursor:pointer;font-size:1em;height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:2}.duet-date__select select.focus-visible:focus+.duet-date__select-label{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow)}.duet-date__select-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:1.25em;font-weight:600;line-height:1.25;padding:0 4px 0 8px;pointer-events:none;position:relative;width:100%;z-index:1}.duet-date__select-label nano-icon{font-size:0.55em}.duet-date__vhidden{border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;padding:0;position:absolute;top:0;width:1px}';let O=class{constructor(t){e(this,t),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.dropdownId="dropdown-"+Y++,this.labelId=this.dropdownId+"-title",this.ignoreOpenWatcher=!1,this.menuFocused=!1,this.autoOpen=!0,this.open=!1,this.closeOnSelect=!0,this.tetherTo=null,this.placement="bottom-start",this.distance=2,this.skidding=0,this.hoist=!1,this.togglePanel=()=>{this.autoOpen&&(this.open?this.hide():this.show())},this.handleTriggerKeyDown=t=>{!this.open&&["ArrowDown","ArrowUp"," "].includes(t.key)&&(this.show(),t.preventDefault(),t.stopPropagation())},this.handleTriggerSlotChange=()=>{this.updateAccessibleTrigger()}}handleOpenChange(){this.ignoreOpenWatcher||(this.open?this.show():this.hide(),this.updateAccessibleTrigger())}handleTetherToChange(){this.createPopover(),this.updateAccessibleTrigger()}handlePopoverOptionsChange(){this.popover.setOptions({strategy:this.hoist?"fixed":"absolute",placement:this.placement,skidding:this.skidding,distance:this.distance})}menuFocus(t){let e=t.target;e&&e.tagName&&"nano-menu"===e.tagName.toLowerCase()&&(this.menuFocused=!0)}secondaryOpen(t){t.detail.secondaryMenu&&(t.stopPropagation(),this.panel.classList.add("loading"),m(this.panel).then((()=>this.panel.classList.remove("loading"))),this.panel.style.minHeight=t.detail.secondaryMenu.scrollHeight+"px")}secondaryClose(t){t.detail.secondaryMenu&&(t.stopPropagation(),t.target.parentElement&&(this.panel.style.minHeight=t.target.parentElement.scrollHeight+"px"))}handlePanelSelect(t){this.closeOnSelect&&"nano-menu"===t.target.tagName.toLowerCase()&&this.hide()}async show(){if(this.ignoreOpenWatcher=!0,this.open=!0,this.nanoShow.emit().defaultPrevented)return this.open=!1,void(this.ignoreOpenWatcher=!1);this.popover.show(),this.ignoreOpenWatcher=!1,document.addEventListener("mousedown",this.handleDocumentMouseDown),document.addEventListener("keydown",this.handleDocumentKeyDown)}async hide(){if(this.ignoreOpenWatcher=!0,this.open=!1,this.nanoHide.emit().defaultPrevented)return this.open=!0,void(this.ignoreOpenWatcher=!1);this.popover&&this.popover.hide(),this.ignoreOpenWatcher=!1,document.removeEventListener("mousedown",this.handleDocumentMouseDown),document.removeEventListener("keydown",this.handleDocumentKeyDown),this.menuFocused=!1}getMenu(){return this.host.querySelector("nano-menu")}updateAccessibleTrigger(){let t;t=this.tetherTo?this.tetherTo:Array.from(this.host.querySelectorAll('[slot="trigger"]')).map(y)[0],t&&(t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-expanded",this.open?"true":"false"))}handleDocumentKeyDown(t){if("Escape"===t.key)return void this.hide();"Tab"===t.key&&setTimeout((()=>{document.activeElement&&document.activeElement.closest(this.containingElement.tagName.toLowerCase())!==this.containingElement&&this.hide()}));const e=this.getMenu();if(e&&["ArrowDown","ArrowUp"].includes(t.key)){if(!this.open||this.menuFocused)return;return t.preventDefault(),void e.setFocus()}e&&t.target!==e&&e.dispatchEvent(new KeyboardEvent(t.type,t))}handleDocumentMouseDown(t){t.target.closest(this.containingElement.tagName.toLowerCase())===this.containingElement||this.hide()}createPopover(){this.popover&&(this.open&&this.hide(),this.popover.destroy(),this.popover=null),this.popover=new v(this.tetherTo||this.trigger,this.positioner,{strategy:this.hoist?"fixed":"absolute",placement:this.placement,distance:this.distance,skidding:this.skidding,transitionElement:this.panel,onAfterHide:()=>this.nanoAfterHide.emit(),onAfterShow:()=>this.nanoAfterShow.emit(),onTransitionEnd:()=>{this.open||(this.panel.scrollTop=0)}}),this.open&&this.show()}connectedCallback(){this.handleDocumentKeyDown=this.handleDocumentKeyDown.bind(this),this.handleDocumentMouseDown=this.handleDocumentMouseDown.bind(this),this.handlePanelSelect=this.handlePanelSelect.bind(this),this.containingElement||(this.containingElement=this.host)}componentDidLoad(){this.createPopover()}disconnectedCallback(){this.hide(),this.popover&&this.popover.destroy()}render(){return t("div",{part:"base",id:this.dropdownId,class:{dropdown:!0,"dropdown--open":this.open},"aria-expanded":this.open?"true":"false","aria-haspopup":"true"},t("span",{part:"trigger",class:"dropdown__trigger",ref:t=>this.trigger=t,onKeyDown:this.handleTriggerKeyDown,onClick:this.togglePanel},t("slot",{name:"trigger",onSlotchange:this.handleTriggerSlotChange})),t("div",{ref:t=>this.positioner=t,class:"dropdown__positioner"},t("div",{ref:t=>this.panel=t,part:"panel",class:`dropdown__panel ${this.placement.split("-").join(" ")}`,"aria-hidden":!this.open,role:"dialog","aria-modal":"true","aria-labelledby":this.dialogTitle?this.labelId:void 0},this.dialogTitle&&t("h2",{id:this.labelId,class:"dropdown__accessible-title","aria-live":"polite"},this.dialogTitle),t("slot",null))))}get host(){return s(this)}static get watchers(){return{open:["handleOpenChange"],tetherTo:["handleTetherToChange"],placement:["handlePopoverOptionsChange"],distance:["handlePopoverOptionsChange"],skidding:["handlePopoverOptionsChange"],hoist:["handlePopoverOptionsChange"]}}},Y=0;O.style=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{--width:auto;--border:var(--nano-layer-border-style, 1px solid var(--nano-layer-border-color, rgba(0, 0, 0, 0.1)));--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--background:var(--nano-layer-bg, #fff);--padding:10px 0;--overflow:hidden;--dropdown-z-index:var(--nano-layer-index-dropdown, 300)}.dropdown{position:relative}.dropdown__trigger{display:block}.dropdown__positioner{position:absolute;z-index:var(--dropdown-z-index)}@media (max-width: 35.9375em){.dropdown__positioner{z-index:100}}.dropdown__panel{padding:var(--padding);background:var(--background);width:var(--width);border:var(--border);border-radius:var(--border-radius);color:currentColor;-webkit-box-shadow:0 2px 8px rgba(0, 0, 0, 0.1);box-shadow:0 2px 8px rgba(0, 0, 0, 0.1);opacity:0;-webkit-transition:0.2s ease opacity, 0.2s ease transform, 0.2s ease min-height;transition:0.2s ease opacity, 0.2s ease transform, 0.2s ease min-height;min-height:20px;overflow:var(--overflow);-webkit-box-sizing:content-box !important;box-sizing:content-box !important}.dropdown__panel.top{-webkit-transform:translateY(-20px) translateZ(0);transform:translateY(-20px) translateZ(0)}.dropdown__panel.bottom{-webkit-transform:translateY(20px) translateZ(0);transform:translateY(20px) translateZ(0)}.dropdown__positioner.popover-visible .dropdown__panel{opacity:1;-webkit-transform:translateY(0) translateZ(0);transform:translateY(0) translateZ(0)}.dropdown__panel ::slotted(nano-menu){max-height:50vh}.dropdown__accessible-title{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}";export{A as nano_date_picker,O as nano_dropdown}
2
+ //# sourceMappingURL=p-99637978.entry.js.map
@@ -0,0 +1 @@
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","DatePicker","[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","forceFocusVisible","clearTimeout","focusTimeoutId","focusVisible","force","monthSelectNode","setFocus","months","years","year","printISODate","nanoDatePicked","emit","valueAsDate","yearSelectNode","observe","handleSelectedDateChange","connectedCallback","unobserve","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":"4WAEA,IAAYA,WA0EIC,EAAQC,EAASC,GAC/B,OAAS,MAALD,GAAkB,MAALC,GAKfD,EAAEE,gBAAkBD,EAAEC,eACtBF,EAAEG,aAAeF,EAAEE,YACnBH,EAAEI,YAAcH,EAAEG,mBAINC,EAAQC,EAAYC,GAClC,IAAIC,EAAI,IAAIC,KAAKH,GAEjB,OADAE,EAAEE,QAAQF,EAAEJ,UAAYG,GACjBC,WA8DOG,EAAQL,EAAYM,EAAYC,GAC9C,gBAMoBP,EAAYM,EAAYC,GAC5C,MAAMC,EAAOR,EAAKS,UAElB,OAAIH,GAAOA,aAAeH,MAAQK,EAAOF,EAAIG,UACpCH,EAGLC,GAAOA,aAAeJ,MAAQK,EAAOD,EAAIE,UACpCF,EAGFP,EAjBAU,CAAMV,EAAMM,EAAKC,KAASP,GAxJnC,SAAYR,GACVA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,UAAA,GAAA,YACAA,EAAAA,EAAA,SAAA,GAAA,WACAA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,SAAA,GAAA,WAPF,CAAYA,IAAAA,EAAU,KCaf,MAAMmB,EAAyD,EACpEC,WAAAA,EACAC,MAAAA,EACAC,IAAAA,EACAC,YAAAA,EACAC,qBAAAA,EACAC,cAAAA,EACAZ,QAAAA,EACAa,SAAAA,EACAC,WAAAA,MAEA,MAAMC,EAAU3B,EAAQqB,EAAKD,GACvBQ,EAAY5B,EAAQqB,EAAKF,GACzBU,EAAaR,EAAIjB,aAAee,EAAWf,YAAcqB,EACzDK,GAAkBlB,EAMxB,OACEmB,EAAA,SAAA,CACEC,MAAO,CACLC,kBAAkB,EAClBC,aAAcJ,EACdK,cAAeN,EACfO,WAAYT,GAEdU,SAAUT,EAAY,GAAK,EAC3BU,QAbJ,SAAqBC,GACnBjB,EAAYiB,EAAGlB,IAabmB,UAAWjB,EACXE,SAAUK,EACVW,KAAK,SAAQC,eACChB,EAAa,OAAS,QACpCiB,IAAMC,IACAhB,GAAagB,GAAMpB,GACrBA,EAAcoB,KAIlBb,EAAA,OAAA,CAAAc,cAAkB,QAAQxB,EAAIhB,WAC9B0B,EAAA,OAAA,CAAMC,MAAM,sBACTX,EAAIyB,wBAAmBC,EAAW,CAAE1B,IAAK,UAAW2B,MAAO,YCdvDC,EAA6D,EACxEC,aAAAA,EACAC,YAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,eAAAA,EACAzC,IAAAA,EACAC,IAAAA,EACAyC,aAAAA,EACAhC,qBAAAA,EACAC,cAAAA,EACAgC,YAAAA,EACAC,UAAAA,EACAC,eAAAA,MAEA,MAAMtC,EAAQ,IAAIV,KACZF,WF4IND,EACA+C,EAA6BvD,EAAW4D,QAKxC,OA1BF,SAAwBC,EAAaC,GACnC,MAAMrD,EAAe,GACrB,IAAIsD,EAAUF,EAEd,MAAQ5D,EAAQ8D,EAASD,IACvBrD,EAAKuD,KAAKD,GACVA,EAAUxD,EAAQwD,EAAS,GAK7B,OAFAtD,EAAKuD,KAAKD,GAEHtD,EAeAwD,UAlGPzD,EACA+C,EAA6BvD,EAAW4D,QAExC,IAAIlD,EAAI,IAAIC,KAAKH,GACbc,EAAMZ,EAAEwD,SACRC,GAAQ7C,EAAMiC,EAAiB,EAAI,GAAKjC,EAAMiC,EAGlD,OADA7C,EAAEE,QAAQF,EAAEJ,UAAY6D,GACjBzD,EAuFO0D,UAxEa5D,GAC3B,OAAO,IAAIG,KAAKH,EAAKJ,cAAeI,EAAKH,WAAY,GAuE3BgE,CAAa7D,GAAO+C,YAnF9C/C,EACA+C,EAA6BvD,EAAW4D,QAExC,IAAIlD,EAAI,IAAIC,KAAKH,GACbc,EAAMZ,EAAEwD,SACRC,EAAyC,GAAjC7C,EAAMiC,GAAkB,EAAI,IAAUjC,EAAMiC,GAGxD,OADA7C,EAAEE,QAAQF,EAAEJ,UAAY6D,GACjBzD,EA4EK4D,UArEa9D,GACzB,OAAO,IAAIG,KAAKH,EAAKJ,cAAeI,EAAKH,WAAa,EAAG,GAoEnCkE,CAAW/D,GAAO+C,IEhJ3BiB,CAAepB,EAAaG,GAEzC,OACEvB,EAAA,QAAA,CACEC,MAAM,mBACNwC,KAAK,OAAMC,kBACMrB,EAEjBsB,UAAWjB,EACXD,YAAaA,GAEbzB,EAAA,QAAA,KACEA,EAAA,KAAA,MArDN4C,EAsD8CrB,EArD9CsB,EAqD+DC,GACrD9C,EAAA,KAAA,CAAIC,MAAM,0BAA0B8C,MAAM,OACxC/C,EAAA,OAAA,CAAAc,cAAkB,QAAQgC,EAAQE,OAAO,EAAG,IAC5ChD,EAAA,OAAA,CAAMC,MAAM,sBAAsB6C,KA1D9CG,EAuDuB3B,EAAa4B,UAnDvBC,KAAI,CAACC,EAAGC,IAEZR,EAAMI,GADUI,EAAIT,GAAkBK,EAAMK,cA0DjDtD,EAAA,QAAA,KA1EN,SAAkBiD,GAChB,MAAMM,EAAS,GAEf,IAAK,IAAIF,EAAI,EAAGA,EAAIJ,EAAMK,OAAQD,GAwEf,EAvEjBE,EAAOvB,KAAKiB,EAAMO,MAAMH,EAAGA,EAuEV,IApEnB,OAAOE,EAoEAE,CAAMhF,GAAS0E,KAAKO,GACnB1D,EAAA,KAAA,CAAIC,MAAM,kBACPyD,EAAKP,KAAK7D,GACTU,EAAA,KAAA,CACEC,MAAM,kBACNwC,KAAK,WAAUkB,gBACA1F,EAAQqB,EAAK6B,GAAgB,YAASH,GAErDhB,EAACb,EAAa,CACZG,IAAKA,EACLD,MAAOA,EACPD,WAAYgC,EACZvC,QAASA,EAAQS,EAAKR,EAAKC,GAC3BQ,YAAaiC,EACbhC,qBAAsBA,EACtBC,cAAeA,EACfC,SAAUiC,EAAerC,GACzBK,WAAY1B,EAAQqB,EAAK6B,aAlF3C,IACE8B,EACAL,EACAC,GCaIvB,EAAkC,CACtCsC,YAAa,cACbC,YAAa,aACbC,oBAAqB,mBACrBC,eAAgB,iBAChBC,eAAgB,aAChBC,iBAAkB,QAClBC,gBAAiB,OACjBC,WAAY,eACZC,oBAAqB,2CACrBC,gBAAiB,gBACjBnB,SAAU,CACR,SACA,SACA,UACA,YACA,WACA,SACA,YAEFoB,WAAY,CACV,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEFC,gBAAiB,CACf,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,YCrBSC,EAAU,MALvBC,YAAAC,4DAMUC,KAAAC,cAAgBC,EAAiB,iBACjCF,KAAAG,aAAeD,EAAiB,gBAChCF,KAAAI,cAAgBF,EAAiB,iBASjCF,KAAAK,cAAwB,KACxBL,KAAAM,cAAwB,KAIvBN,KAAAO,aAAc,EACdP,KAAAvF,WAAa,IAAIT,KAKDgG,KAAAxD,aAAuB,GAIxCwD,KAAA7F,IAAc,GAId6F,KAAA5F,IAAc,GAId4F,KAAApD,eAA6BvD,EAAW4D,OAIxC+C,KAAArD,aAAkC6D,EAOlCR,KAAAhD,eAAwC,KAAM,EAI9CgD,KAAAS,SAAmB,EAsCnBT,KAAAU,kBAAoB,KAC1BV,KAAKO,aAAc,GAGbP,KAAAW,mBAAqB,KAC3BX,KAAKO,aAAc,GA+CbP,KAAAY,iBAAoBC,IAC1B,MAAMC,EAAQD,EAAME,eAAe,GACnCf,KAAKK,cAAgBS,EAAME,MAC3BhB,KAAKM,cAAgBQ,EAAMG,OAGrBjB,KAAAkB,gBAAmBL,IACzBA,EAAMM,kBAGAnB,KAAAoB,eAAkBP,IACxB,MAAMC,EAAQD,EAAME,eAAe,GAC7BM,EAAQP,EAAME,MAAQhB,KAAKK,cAC3BiB,EAAQR,EAAMG,MAAQjB,KAAKM,cAI/BiB,KAAKC,IAAIH,IAHO,IAGgBE,KAAKC,IAAIF,IAHzB,IAMhBtB,KAAKyB,UAAUJ,EAAQ,EAAI,GAAK,GAGlCrB,KAAKM,cAAgB,KACrBN,KAAKK,cAAgB,MAGfL,KAAA0B,qBAAwBb,IAC9BA,EAAMM,iBACNnB,KAAKyB,UAAU,IAGTzB,KAAA2B,yBAA4Bd,IAClCA,EAAMM,iBACNnB,KAAKyB,WAAW,IAGVzB,KAAA4B,yBAA4Bf,IAGlC,GAAkB,QAAdA,EAAMgB,MAAkBhB,EAAMiB,UAAY9B,KAAKS,QAIjD,OAHAI,EAAMM,sBACInB,KAAK+B,eAAiB/B,KAAKgC,uBACjCC,QAIN,IAAIC,GAAU,EAEd,OAAQrB,EAAMgB,KACZ,IAAK,aACH7B,KAAKpG,QAAQ,GACb,MACF,IAAK,YACHoG,KAAKpG,SAAS,GACd,MACF,IAAK,YACHoG,KAAKpG,QAAQ,GACb,MACF,IAAK,UACHoG,KAAKpG,SAAS,GACd,MACF,IAAK,SACCiH,EAAMiB,SACR9B,KAAKmC,UAAU,GAEfnC,KAAKyB,WAAW,GAElB,MACF,IAAK,WACCZ,EAAMiB,SACR9B,KAAKmC,SAAS,GAEdnC,KAAKyB,UAAU,GAEjB,MACF,IAAK,OACHzB,KAAKvC,cACL,MACF,IAAK,MACHuC,KAAKrC,YACL,MACF,QACEuE,GAAU,EAGVA,IACFrB,EAAMM,iBACNnB,KAAKU,sBAIDV,KAAAoC,gBAAkB,CAACC,EAAoB1H,KAC7C,MAAM2H,GAAatC,KAAKhD,eAAerC,GACrBT,EAChBS,EACA4H,EAAavC,KAAK7F,KAClBoI,EAAavC,KAAK5F,OAGDkI,IAIf3H,EAAIjB,aAAesG,KAAKvF,WAAWf,WACrCsG,KAAKwC,SAAS7H,GAEdqF,KAAKyC,cAAc9H,KAIfqF,KAAA0C,kBAAqB7G,IAC3BmE,KAAK2C,SAASC,SAAS/G,EAAEgH,OAAOC,MAAO,MAGjC9C,KAAA+C,iBAAoBlH,IAC1BmE,KAAKgD,QAAQJ,SAAS/G,EAAEgH,OAAOC,MAAO,MAWhC9C,KAAAiD,sBAAyBC,IAC/BlD,KAAKmD,eAAiBD,EAElBlD,KAAKO,aACP6C,YAAW,IAAMF,EAAQjB,SAAS,IA5MtCnC,eAAenF,GAAM,EAAO0I,GAAoB,GAC9CrD,KAAKyC,cAAcF,EAAavC,KAAKxD,eAAiB,IAAIxC,MAEtDW,EACFyI,YAAW,IAAOpD,KAAKmD,eAAelB,SAAS,KAGjDqB,aAAatD,KAAKuD,gBAClBvD,KAAKuD,eAAiBH,YAAW,KAC3BC,GAAmBG,EAAaC,MAAMzD,KAAK0D,iBAC/C1D,KAAK0D,gBAAgBzB,UACpB,KAILnC,2BACEE,KAAK2D,UAAS,GAaR7D,QAAQhG,GACdkG,KAAKyC,cAAc7I,EAAQoG,KAAKvF,WAAYX,IAGtCgG,UAAU8D,GAChB5D,KAAK2C,SAAS3C,KAAKvF,WAAWf,WAAakK,GAGrC9D,SAAS+D,GACf7D,KAAKgD,QAAQhD,KAAKvF,WAAWhB,cAAgBoK,GAGvC/D,cACNE,KAAKyC,cAAchF,EAAYuC,KAAKvF,WAAYuF,KAAKpD,iBAG/CkD,YACNE,KAAKyC,cAAc9E,EAAUqC,KAAKvF,WAAYuF,KAAKpD,iBAG7CkD,SAASxD,GACf,MAAMnC,EAAMwI,EAASjF,EAAasC,KAAKvF,YAAa6B,GAC9ClC,EAAMwD,EAAWzD,GACjBN,EAAO8I,EAAS3C,KAAKvF,WAAY6B,GAEvC0D,KAAKyC,cAAclI,EAAMV,EAAMM,EAAKC,IAG9B0F,QAAQgE,GACd,MAAM3J,EAAM6I,EAAQtF,EAAasC,KAAKvF,YAAaqJ,GAC7C1J,EAAMwD,EAAWzD,GACjBN,EAAOmJ,EAAQhD,KAAKvF,WAAYqJ,GAEtC9D,KAAKyC,cAAclI,EAAMV,EAAMM,EAAKC,IAG9B0F,cAAcnF,GACpBqF,KAAKvF,WAAaF,EAChBI,EACA4H,EAAavC,KAAK7F,KAClBoI,EAAavC,KAAK5F,MA2Hd0F,SAASjG,GACfmG,KAAKxD,aAAeuH,EAAalK,GACjCmG,KAAKgE,eAAeC,KAAK,CACvBnB,MAAO9C,KAAKxD,aACZ0H,YAAarK,IAYjBiG,oBACME,KAAKmE,gBAAgBX,EAAaY,QAAQpE,KAAKmE,gBAC/CnE,KAAK0D,iBAAiBF,EAAaY,QAAQpE,KAAK0D,iBAGtD5D,oBACEE,KAAKqE,2BAGPvE,mBACEE,KAAKsE,oBAGPxE,uBACE0D,EAAae,UAAUvE,KAAKmE,gBAC5BX,EAAae,UAAUvE,KAAK0D,iBAG9B5D,SACE,MAAMoE,EAAc3B,EAAavC,KAAKxD,cAChCgI,GAAgBN,GAAelE,KAAKvF,YAAYhB,cAChDgL,EAAezE,KAAKvF,WAAWf,WAC/BgL,EAAc1E,KAAKvF,WAAWhB,cAE9BkL,EAAUpC,EAAavC,KAAK7F,KAC5ByK,EAAUrC,EAAavC,KAAK5F,KAC5ByK,EACO,MAAXF,GACAA,EAAQjL,aAAe+K,GACvBE,EAAQlL,gBAAkBiL,EACtBI,EACO,MAAXF,GACAA,EAAQlL,aAAe+K,GACvBG,EAAQnL,gBAAkBiL,EAE5B,IAAIK,EAAUP,EAAe,GACzBQ,EAAUR,EAAe,GAI7B,OAHIG,IAASI,EAAUJ,EAAQlL,eAC3BmL,IAASI,EAAUJ,EAAQnL,eAG7B4B,EAAC4J,EAAI,CAAC3J,MAAK4J,OAAAC,OAAA,GAAOC,EAAmBpF,KAAKqF,SACxChK,EAAA,MAAA,CAAKC,MAAM,aACTD,EAAA,MAAA,CACEC,MAAO,CACLgK,qBAAqB,EACrBC,aAAa,GAEfC,YAAaxF,KAAKkB,gBAClBuE,aAAczF,KAAKY,iBACnB8E,WAAY1F,KAAKoB,gBAEjB/F,EAAA,MAAA,CAAKC,MAAM,6BACTD,EAAA,MAAA,CACEC,MAAM,6CAA4CqK,YACxC,UAET3F,KAAKrD,aAAa8C,qBASrBpE,EAAA,MAAA,CACEC,MAAM,oBACN0C,UAAWgC,KAAKW,oBAEhBtF,EAAA,MAAA,KACEA,EAAA,KAAA,CACEuK,GAAI5F,KAAKI,cACT9E,MAAM,qBAAoBqK,YAChB,UAET3F,KAAKrD,aAAagD,WAAW8E,GAAe,IAC5CzE,KAAKvF,WAAWhB,eAEnB4B,EAAA,QAAA,CACEwK,QAAS7F,KAAKC,cACd3E,MAAM,sBAEL0E,KAAKrD,aAAa2C,kBAErBjE,EAAA,MAAA,CAAKC,MAAM,qBACTD,EAAA,SAAA,CACEuK,GAAI5F,KAAKC,cACT3E,MAAM,2BACNW,IAAMiH,GACHlD,KAAKgC,sBAAwBhC,KAAK0D,gBACjCR,EAEJ4C,SAAU9F,KAAK0C,mBAEd1C,KAAKrD,aAAagD,WAAWnB,KAAI,CAAClC,EAAOoC,IACxCrD,EAAA,SAAA,CACEwG,IAAKvF,EACLwG,MAAOpE,EACPqH,SAAUrH,IAAM+F,EAChB1J,UACGb,EACC,IAAIF,KAAK0K,EAAahG,EAAG,GACzBiG,EAAUjH,EAAaiH,GAAW,KAClCC,EAAUhH,EAAWgH,GAAW,OAInCtI,MAIPjB,EAAA,MAAA,CAAKC,MAAM,0BAAyBa,cAAa,QAC/Cd,EAAA,OAAA,KACG2E,KAAKrD,aAAaiD,gBAAgB6E,IAErCpJ,EAAA,YAAA,CAAW2K,KAAK,yBAIpB3K,EAAA,QAAA,CAAOwK,QAAS7F,KAAKG,aAAc7E,MAAM,sBACtC0E,KAAKrD,aAAa4C,iBAErBlE,EAAA,MAAA,CAAKC,MAAM,qBACTD,EAAA,SAAA,CACEuK,GAAI5F,KAAKG,aACT7E,MAAM,0BACNwK,SAAU9F,KAAK+C,iBACf9G,IAAMiH,GAAalD,KAAKmE,eAAiBjB,GApa/D,SAAe+C,EAAcC,GAE3B,IADA,IAAItH,EAAmB,GACdF,EAAIuH,EAAMvH,GAAKwH,EAAIxH,IAC1BE,EAAOvB,KAAKqB,GAEd,OAAOE,EAiacuH,CAAMpB,EAASC,GAASxG,KAAKsF,GAC5BzI,EAAA,SAAA,CAAQwG,IAAKiC,EAAMiC,SAAUjC,IAASY,GACnCZ,MAIPzI,EAAA,MAAA,CAAKC,MAAM,0BAAyBa,cAAa,QAC/Cd,EAAA,OAAA,KAAO2E,KAAKvF,WAAWhB,eACvB4B,EAAA,YAAA,CAAW2K,KAAK,0BAKtB3K,EAAA,MAAA,CAAKC,MAAM,kBACTD,EAAA,SAAA,CACEC,MAAM,kBACNM,QAASoE,KAAK2B,yBACd5G,SAAU8J,EACV9I,KAAK,UAELV,EAAA,YAAA,CAAW2K,KAAK,uBAChB3K,EAAA,OAAA,CAAMC,MAAM,sBACT0E,KAAKrD,aAAayC,iBAGvB/D,EAAA,SAAA,CACEC,MAAM,kBACNM,QAASoE,KAAK0B,qBACd3G,SAAU+J,EACV/I,KAAK,UAELV,EAAA,YAAA,CAAW2K,KAAK,wBAChB3K,EAAA,OAAA,CAAMC,MAAM,sBACT0E,KAAKrD,aAAa0C,mBAK3BhE,EAAA,MAAA,KACEA,EAACkB,EAAe,CACdC,aAAc0H,EACdzH,YAAauD,KAAKvF,WAClBoC,aAAcmD,KAAKoC,gBACnBvH,qBAAsBmF,KAAK4B,yBAC3BlF,aAAcsD,KAAKI,cACnBzD,aAAcqD,KAAKrD,aACnBC,eAAgBoD,KAAKpD,eACrB9B,cAAekF,KAAKiD,sBACpB9I,IAAKwK,EACLvK,IAAKwK,EACL5H,eAAgBgD,KAAKhD,kIChgBjB,2zKC4BToJ,EAAQ,MALrBtG,YAAAC,6KAMUC,KAAAqG,WAAa,YAAYC,IACzBtG,KAAAuG,QAAUvG,KAAKqG,WAAa,SAC5BrG,KAAAwG,mBAAoB,EAKpBxG,KAAAyG,aAAuB,EAKvBzG,KAAA0G,UAAW,EAGqB1G,KAAA2G,MAAO,EAavC3G,KAAA4G,eAAgB,EAWhB5G,KAAA6G,SAAwB,KAYxB7G,KAAA8G,UAYS,eAKT9G,KAAA+G,SAAW,EAKX/G,KAAAgH,SAAW,EAMXhH,KAAAiH,OAAQ,EA2IRjH,KAAAkH,YAAc,KACflH,KAAK0G,WACV1G,KAAK2G,KAAO3G,KAAKmH,OAASnH,KAAKoH,SAgFzBpH,KAAAqH,qBAAwBxG,KAEzBb,KAAK2G,MAAQ,CAAC,YAAa,UAAW,KAAKW,SAASzG,EAAMgB,OAC7D7B,KAAKoH,OACLvG,EAAMM,iBACNN,EAAM0G,oBAIFvH,KAAAwH,wBAA0B,KAChCxH,KAAKyH,2BApSP3H,mBACOE,KAAKwG,oBACRxG,KAAK2G,KAAO3G,KAAKoH,OAASpH,KAAKmH,OAC/BnH,KAAKyH,2BAqBT3H,uBACEE,KAAK0H,gBACL1H,KAAKyH,0BAyCP3H,6BACEE,KAAK2H,QAAQC,WAAW,CACtBC,SAAU7H,KAAKiH,MAAQ,QAAU,WACjCH,UAAW9G,KAAK8G,UAChBE,SAAUhH,KAAKgH,SACfD,SAAU/G,KAAK+G,WAkCnBjH,UAAUgI,GACR,IAAIjF,EAASiF,EAAGjF,OAEbA,GACAA,EAAOkF,SACyB,cAAjClF,EAAOkF,QAAQC,gBAGjBhI,KAAKyG,aAAc,GAIrB3G,cAAcgI,GACNA,EAAGG,OAA8BC,gBACvCJ,EAAGP,kBAEHvH,KAAKmI,MAAMC,UAAUC,IAAI,WACzBC,EAAetI,KAAKmI,OAAOI,MAAK,IAC9BvI,KAAKmI,MAAMC,UAAUI,OAAO,aAE9BxI,KAAKmI,MAAMM,MAAMC,UACdZ,EAAGG,OAA8BC,cAAcS,aAAe,MAInE7I,eAAegI,GACPA,EAAGG,OAA8BC,gBACvCJ,EAAGP,kBACGO,EAAGjF,OAAuB+F,gBAChC5I,KAAKmI,MAAMM,MAAMC,UACdZ,EAAGjF,OAAuB+F,cAAcD,aAAe,OAI5D7I,kBAAkBe,GAIZb,KAAK4G,eAAkD,cAH5C/F,EAAMgC,OAGYkF,QAAQC,eACvChI,KAAKmH,OAOTrH,aAME,GALAE,KAAKwG,mBAAoB,EACzBxG,KAAK2G,MAAO,EAEK3G,KAAK6I,SAAS5E,OAElB6E,iBAGX,OAFA9I,KAAK2G,MAAO,OACZ3G,KAAKwG,mBAAoB,GAI3BxG,KAAK2H,QAAQP,OACbpH,KAAKwG,mBAAoB,EAEzBuC,SAASC,iBAAiB,YAAahJ,KAAKiJ,yBAC5CF,SAASC,iBAAiB,UAAWhJ,KAAKkJ,uBAK5CpJ,aAME,GALAE,KAAKwG,mBAAoB,EACzBxG,KAAK2G,MAAO,EAEK3G,KAAKmJ,SAASlF,OAElB6E,iBAGX,OAFA9I,KAAK2G,MAAO,OACZ3G,KAAKwG,mBAAoB,GAIvBxG,KAAK2H,SAAS3H,KAAK2H,QAAQR,OAC/BnH,KAAKwG,mBAAoB,EAEzBuC,SAASK,oBAAoB,YAAapJ,KAAKiJ,yBAC/CF,SAASK,oBAAoB,UAAWpJ,KAAKkJ,uBAE7ClJ,KAAKyG,aAAc,EAKb3G,UACN,OAAOE,KAAKqJ,KAAKC,cAAc,aAWzBxJ,0BACN,IAAIyJ,EAOFA,EANGvJ,KAAK6G,SAMY7G,KAAK6G,SALA2C,MAAMvD,KAC7BjG,KAAKqJ,KAAKI,iBAAiB,qBAEQjL,IAAIkL,GAA2B,GAKlEH,IACFA,EAAkBI,aAAa,gBAAiB,QAChDJ,EAAkBI,aAChB,gBACA3J,KAAK2G,KAAO,OAAS,UAOnB7G,sBAAsBe,GAE5B,GAAkB,WAAdA,EAAMgB,IAER,YADA7B,KAAKmH,OAKW,QAAdtG,EAAMgB,KACRuB,YAAW,KAEP2F,SAASa,eACTb,SAASa,cAAcC,QACrB7J,KAAK8J,kBAAkB/B,QAAQC,iBAC3BhI,KAAK8J,mBAEX9J,KAAKmH,UAMX,MAAM4C,EAAO/J,KAAKgK,UAGlB,GAAID,GAAQ,CAAC,YAAa,WAAWzC,SAASzG,EAAMgB,KAAM,CACxD,IAAK7B,KAAK2G,MAAQ3G,KAAKyG,YAAa,OAGpC,OAFA5F,EAAMM,sBACN4I,EAAKpG,WAKHoG,GAAQlJ,EAAMgC,SAAWkH,GAC3BA,EAAKE,cAAc,IAAIC,cAAcrJ,EAAM9E,KAAM8E,IAK7Cf,wBAAwBe,GACfA,EAAMgC,OAIZgH,QAAQ7J,KAAK8J,kBAAkB/B,QAAQC,iBAC9ChI,KAAK8J,mBAEL9J,KAAKmH,OAkBDrH,gBACFE,KAAK2H,UACH3H,KAAK2G,MAAM3G,KAAKmH,OACpBnH,KAAK2H,QAAQwC,UACbnK,KAAK2H,QAAU,MAGjB3H,KAAK2H,QAAU,IAAIyC,EAAQpK,KAAK6G,UAAY7G,KAAKqK,QAASrK,KAAKsK,WAAY,CACzEzC,SAAU7H,KAAKiH,MAAQ,QAAU,WACjCH,UAAW9G,KAAK8G,UAChBC,SAAU/G,KAAK+G,SACfC,SAAUhH,KAAKgH,SACfuD,kBAAmBvK,KAAKmI,MACxBqC,YAAa,IAAMxK,KAAKyK,cAAcxG,OACtCyG,YAAa,IAAM1K,KAAK2K,cAAc1G,OACtC2G,gBAAiB,KACV5K,KAAK2G,OACR3G,KAAKmI,MAAM0C,UAAY,MAKzB7K,KAAK2G,MACP3G,KAAKoH,OAMTtH,oBACEE,KAAKkJ,sBAAwBlJ,KAAKkJ,sBAAsB4B,KAAK9K,MAC7DA,KAAKiJ,wBAA0BjJ,KAAKiJ,wBAAwB6B,KAAK9K,MACjEA,KAAK+K,kBAAoB/K,KAAK+K,kBAAkBD,KAAK9K,MAEhDA,KAAK8J,oBAAmB9J,KAAK8J,kBAAoB9J,KAAKqJ,MAG7DvJ,mBACEE,KAAK0H,gBAGP5H,uBACEE,KAAKmH,OACDnH,KAAK2H,SAAS3H,KAAK2H,QAAQwC,UAGjCrK,SACE,OACEzE,EAAA,MAAA,CACE2P,KAAK,OACLpF,GAAI5F,KAAKqG,WACT/K,MAAO,CACL2P,UAAU,EACVC,iBAAkBlL,KAAK2G,MACxBwE,gBACcnL,KAAK2G,KAAO,OAAS,QAAOyE,gBAC7B,QAEd/P,EAAA,OAAA,CACE2P,KAAK,UACL1P,MAAM,oBACNW,IAAMC,GAAQ8D,KAAKqK,QAAUnO,EAC7BJ,UAAWkE,KAAKqH,qBAChBzL,QAASoE,KAAKkH,aAEd7L,EAAA,OAAA,CAAM2K,KAAK,UAAUqF,aAAcrL,KAAKwH,2BAG1CnM,EAAA,MAAA,CAAKY,IAAMC,GAAQ8D,KAAKsK,WAAapO,EAAKZ,MAAM,wBAC9CD,EAAA,MAAA,CACEY,IAAMC,GAAQ8D,KAAKmI,MAAQjM,EAC3B8O,KAAK,QACL1P,MAAO,mBAAmB0E,KAAK8G,UAAUwE,MAAM,KAAKC,KAAK,OAAMpP,eACjD6D,KAAK2G,KACnB7I,KAAK,SAAQ0N,aACF,OAAMzN,kBACAiC,KAAKyL,YAAczL,KAAKuG,aAAUlK,GAElD2D,KAAKyL,aACJpQ,EAAA,KAAA,CACEuK,GAAI5F,KAAKuG,QACTjL,MAAM,6BAA4BqK,YACxB,UAET3F,KAAKyL,aAGVpQ,EAAA,OAAA,6RAQRiL,EAAc,UCrbE","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';\nimport { focusVisible } from '../../utils/focus-visible';\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 DatePicker 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 yearSelectNode: HTMLElement;\n private focusedDayNode: HTMLButtonElement;\n\n private focusTimeoutId: ReturnType<typeof setTimeout>;\n\n private initialTouchX: number = null;\n private initialTouchY: number = null;\n\n @Element() host: HTMLNanoDatePickerElement;\n\n @State() activeFocus = false;\n @State() focusedDay = new Date();\n\n // Public Property API\n\n /** Selected Date. Must be in IS0-8601 format: YYYY-MM-DD. */\n @Prop({ mutable: true }) selectedDate: string = '';\n\n /** Minimum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.\n * This setting can be used alone or together with the max property. */\n @Prop() min: string = '';\n\n /** Maximum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.\n * This setting can be used alone or together with the min property. */\n @Prop() max: string = '';\n\n /** Which day is considered first day of the week? `0` for Sunday, `1` for Monday, etc.\n * Default is Monday. */\n @Prop() firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday;\n\n /** Button labels, day names, month names, etc, used for localization.\n * Default is English. */\n @Prop() localization: DuetLocalizedText = defaultLocalization;\n\n /** The color to use from the application's color palette. */\n @Prop() color?: Color;\n\n /** 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\n * @param day - focus to the current selected day\n * @param forceFocusVisible - force visible focus - required if opened via keyboad\n */\n @Method()\n async setFocus(day = false, forceFocusVisible = false) {\n this.setFocusedDay(parseISODate(this.selectedDate) || new Date());\n\n if (day) {\n setTimeout((_) => this.focusedDayNode.focus(), 20);\n return;\n }\n clearTimeout(this.focusTimeoutId);\n this.focusTimeoutId = setTimeout(() => {\n if (forceFocusVisible) focusVisible.force(this.monthSelectNode);\n this.monthSelectNode.focus();\n }, 20);\n }\n\n @Watch('selectedDate')\n handleSelectedDateChange() {\n this.setFocus(true);\n }\n\n // Local methods.\n\n private enableActiveFocus = () => {\n this.activeFocus = true;\n };\n\n private disableActiveFocus = () => {\n this.activeFocus = false;\n };\n\n private addDays(days: number) {\n this.setFocusedDay(addDays(this.focusedDay, days));\n }\n\n private addMonths(months: number) {\n this.setMonth(this.focusedDay.getMonth() + months);\n }\n\n private addYears(years: number) {\n this.setYear(this.focusedDay.getFullYear() + years);\n }\n\n private startOfWeek() {\n this.setFocusedDay(startOfWeek(this.focusedDay, this.firstDayOfWeek));\n }\n\n private endOfWeek() {\n this.setFocusedDay(endOfWeek(this.focusedDay, this.firstDayOfWeek));\n }\n\n private setMonth(month: number) {\n const min = setMonth(startOfMonth(this.focusedDay), month);\n const max = endOfMonth(min);\n const date = setMonth(this.focusedDay, month);\n\n this.setFocusedDay(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 connectedCallback() {\n if (this.yearSelectNode) focusVisible.observe(this.yearSelectNode);\n if (this.monthSelectNode) focusVisible.observe(this.monthSelectNode);\n }\n\n componentWillLoad() {\n this.handleSelectedDateChange();\n }\n\n componentDidLoad() {\n this.connectedCallback();\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.yearSelectNode);\n focusVisible.unobserve(this.monthSelectNode);\n }\n\n render() {\n const valueAsDate = parseISODate(this.selectedDate);\n const selectedYear = (valueAsDate || this.focusedDay).getFullYear();\n const focusedMonth = this.focusedDay.getMonth();\n const focusedYear = this.focusedDay.getFullYear();\n\n const minDate = parseISODate(this.min);\n const maxDate = parseISODate(this.max);\n const prevMonthDisabled =\n minDate != null &&\n minDate.getMonth() === focusedMonth &&\n minDate.getFullYear() === focusedYear;\n const nextMonthDisabled =\n maxDate != null &&\n maxDate.getMonth() === focusedMonth &&\n maxDate.getFullYear() === focusedYear;\n\n let minYear = selectedYear - 10;\n let maxYear = selectedYear + 10;\n if (minDate) minYear = minDate.getFullYear();\n if (maxDate) maxYear = maxDate.getFullYear();\n\n return (\n <Host class={{ ...createColorClasses(this.color) }}>\n <div class=\"duet-date\">\n <div\n class={{\n 'duet-date__dialog': true,\n 'is-active': true,\n }}\n onTouchMove={this.handleTouchMove}\n onTouchStart={this.handleTouchStart}\n onTouchEnd={this.handleTouchEnd}\n >\n <div class=\"duet-date__dialog-content\">\n <div\n class=\"duet-date__vhidden duet-date__instructions\"\n aria-live=\"polite\"\n >\n {this.localization.keyboardInstruction}\n </div>\n {/**\n * With onFocusIn, which is what TS types expect, Stencil ends up listening to a\n * focusIn event, which is wrong as it needs to be focusin. So we had to use onFocusin\n * here which is wrong for the TS types, but ends up with the correct event listener\n * in Stencil. See issue: https://github.com/ionic-team/stencil/issues/2628\n */}\n {/* @ts-ignore */}\n <div\n class=\"duet-date__header\"\n onFocusin={this.disableActiveFocus}\n >\n <div>\n <h2\n id={this.dialogLabelId}\n class=\"duet-date__vhidden\"\n aria-live=\"polite\"\n >\n {this.localization.monthNames[focusedMonth]}{' '}\n {this.focusedDay.getFullYear()}\n </h2>\n <label\n htmlFor={this.monthSelectId}\n class=\"duet-date__vhidden\"\n >\n {this.localization.monthSelectLabel}\n </label>\n <div class=\"duet-date__select\">\n <select\n id={this.monthSelectId}\n class=\"duet-date__select--month\"\n ref={(element) =>\n (this.firstFocusableElement = this.monthSelectNode =\n element)\n }\n onChange={this.handleMonthSelect}\n >\n {this.localization.monthNames.map((month, i) => (\n <option\n key={month}\n value={i}\n selected={i === focusedMonth}\n disabled={\n !inRange(\n new Date(focusedYear, i, 1),\n minDate ? startOfMonth(minDate) : null,\n maxDate ? endOfMonth(maxDate) : null\n )\n }\n >\n {month}\n </option>\n ))}\n </select>\n <div class=\"duet-date__select-label\" aria-hidden=\"true\">\n <span>\n {this.localization.monthNamesShort[focusedMonth]}\n </span>\n <nano-icon name=\"light/chevron-down\"></nano-icon>\n </div>\n </div>\n\n <label htmlFor={this.yearSelectId} class=\"duet-date__vhidden\">\n {this.localization.yearSelectLabel}\n </label>\n <div class=\"duet-date__select\">\n <select\n id={this.yearSelectId}\n class=\"duet-date__select--year\"\n onChange={this.handleYearSelect}\n ref={(element) => (this.yearSelectNode = element)}\n >\n {range(minYear, maxYear).map((year) => (\n <option key={year} selected={year === focusedYear}>\n {year}\n </option>\n ))}\n </select>\n <div class=\"duet-date__select-label\" aria-hidden=\"true\">\n <span>{this.focusedDay.getFullYear()}</span>\n <nano-icon name=\"light/chevron-down\"></nano-icon>\n </div>\n </div>\n </div>\n\n <div class=\"duet-date__nav\">\n <button\n class=\"duet-date__prev\"\n onClick={this.handlePreviousMonthClick}\n disabled={prevMonthDisabled}\n type=\"button\"\n >\n <nano-icon name=\"light/chevron-left\"></nano-icon>\n <span class=\"duet-date__vhidden\">\n {this.localization.prevMonthLabel}\n </span>\n </button>\n <button\n class=\"duet-date__next\"\n onClick={this.handleNextMonthClick}\n disabled={nextMonthDisabled}\n type=\"button\"\n >\n <nano-icon name=\"light/chevron-right\"></nano-icon>\n <span class=\"duet-date__vhidden\">\n {this.localization.nextMonthLabel}\n </span>\n </button>\n </div>\n </div>\n <div>\n <DatePickerMonth\n selectedDate={valueAsDate}\n focusedDate={this.focusedDay}\n onDateSelect={this.handleDaySelect}\n onKeyboardNavigation={this.handleKeyboardNavigation}\n labelledById={this.dialogLabelId}\n localization={this.localization}\n firstDayOfWeek={this.firstDayOfWeek}\n focusedDayRef={this.processFocusedDayNode}\n min={minDate}\n max={maxDate}\n isDateDisabled={this.isDateDisabled}\n />\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n","@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 @include margin(null, 4px, null, null);\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-visible:focus + .duet-date__select-label {\n box-shadow: var(--focus-shadow);\n }\n }\n}\n\n.duet-date__select-label {\n align-items: center;\n border-radius: 4px;\n display: flex;\n font-size: 1.25em;\n font-weight: 600;\n line-height: 1.25;\n padding: 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 if (this.open) 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"]}