@nanoporetech-digital/components 2.10.1 → 2.11.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 (333) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/{date-utils-0ae9a12d.js → date-utils-b3af910d.js} +2 -2
  3. package/dist/cjs/date-utils-b3af910d.js.map +1 -0
  4. package/dist/cjs/{global-0d4f3b77.js → global-989678ec.js} +1 -8
  5. package/dist/cjs/global-989678ec.js.map +1 -0
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/nano-components.cjs.js +2 -2
  8. package/dist/cjs/nano-datalist_3.cjs.entry.js +3 -1
  9. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nano-date-input.cjs.entry.js +13 -5
  11. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-date-picker.cjs.entry.js +2 -2
  13. package/dist/cjs/nano-date-picker.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-details.cjs.entry.js +1 -2
  15. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nano-global-search-results.cjs.entry.js +1 -2
  17. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-grid_3.cjs.entry.js +1 -2
  19. package/dist/cjs/nano-grid_3.cjs.entry.js.map +1 -1
  20. package/dist/cjs/nano-icon-button.cjs.entry.js +4 -0
  21. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  22. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -2
  23. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  24. package/dist/cjs/nano-slides.cjs.entry.js +1 -2
  25. package/dist/cjs/nano-slides.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-sticker.cjs.entry.js +2 -3
  27. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  28. package/dist/cjs/nano-tab-group.cjs.entry.js +4 -2
  29. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  30. package/dist/cjs/nano-tab.cjs.entry.js +5 -1
  31. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  32. package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
  33. package/dist/cjs/nano-tooltip.cjs.entry.js.map +1 -1
  34. package/dist/collection/components/accordion/accordion.js +1 -1
  35. package/dist/collection/components/alert/alert.js +1 -1
  36. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  37. package/dist/collection/components/algolia/algolia-input.js +5 -5
  38. package/dist/collection/components/algolia/algolia-results.js +1 -1
  39. package/dist/collection/components/algolia/algolia.js +6 -6
  40. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  41. package/dist/collection/components/checkbox/checkbox.js +3 -3
  42. package/dist/collection/components/datalist/datalist.js +4 -2
  43. package/dist/collection/components/datalist/datalist.js.map +1 -1
  44. package/dist/collection/components/date-input/date-input.js +62 -11
  45. package/dist/collection/components/date-input/date-input.js.map +1 -1
  46. package/dist/collection/components/date-picker/date-picker.css +1 -1
  47. package/dist/collection/components/date-picker/date-picker.js +5 -5
  48. package/dist/collection/components/details/details.js +1 -2
  49. package/dist/collection/components/details/details.js.map +1 -1
  50. package/dist/collection/components/dialog/dialog.js +1 -1
  51. package/dist/collection/components/dropdown/dropdown.js +1 -1
  52. package/dist/collection/components/file-upload/file-upload.js +4 -4
  53. package/dist/collection/components/global-nav/global-nav.js +4 -4
  54. package/dist/collection/components/global-search-results/global-search-results.js +0 -1
  55. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  56. package/dist/collection/components/grid/grid-item.js +1 -1
  57. package/dist/collection/components/grid/grid.js +0 -1
  58. package/dist/collection/components/grid/grid.js.map +1 -1
  59. package/dist/collection/components/icon/icon.js +1 -1
  60. package/dist/collection/components/icon-button/icon-button.js +23 -1
  61. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  62. package/dist/collection/components/input/input.js +5 -5
  63. package/dist/collection/components/nav-item/nav-item.js +4 -4
  64. package/dist/collection/components/range/range.js +4 -4
  65. package/dist/collection/components/resize-observe/resize-observe.js +1 -2
  66. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  67. package/dist/collection/components/select/select.js +7 -7
  68. package/dist/collection/components/slides/slides.js +7 -8
  69. package/dist/collection/components/slides/slides.js.map +1 -1
  70. package/dist/collection/components/sticker/sticker.js +0 -1
  71. package/dist/collection/components/sticker/sticker.js.map +1 -1
  72. package/dist/collection/components/tabs/tab-group.js +5 -3
  73. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  74. package/dist/collection/components/tabs/tab.js +5 -1
  75. package/dist/collection/components/tabs/tab.js.map +1 -1
  76. package/dist/collection/components/tooltip/tooltip.css +0 -1
  77. package/dist/collection/global/script/global.js +0 -7
  78. package/dist/collection/global/script/global.js.map +1 -1
  79. package/dist/collection/utils/date-utils.js +1 -1
  80. package/dist/collection/utils/date-utils.js.map +1 -1
  81. package/dist/components/datalist.js +3 -1
  82. package/dist/components/datalist.js.map +1 -1
  83. package/dist/components/date-picker.js +2 -2
  84. package/dist/components/date-picker.js.map +1 -1
  85. package/dist/components/grid.js +1 -2
  86. package/dist/components/grid.js.map +1 -1
  87. package/dist/components/icon-button.js +6 -1
  88. package/dist/components/icon-button.js.map +1 -1
  89. package/dist/components/index.js +0 -7
  90. package/dist/components/index.js.map +1 -1
  91. package/dist/components/nano-date-input.js +14 -4
  92. package/dist/components/nano-date-input.js.map +1 -1
  93. package/dist/components/nano-details.js +1 -2
  94. package/dist/components/nano-details.js.map +1 -1
  95. package/dist/components/nano-global-search-results.js +1 -2
  96. package/dist/components/nano-global-search-results.js.map +1 -1
  97. package/dist/components/nano-slides.js +1 -2
  98. package/dist/components/nano-slides.js.map +1 -1
  99. package/dist/components/nano-tab-group.js +4 -2
  100. package/dist/components/nano-tab-group.js.map +1 -1
  101. package/dist/components/nano-tab.js +5 -1
  102. package/dist/components/nano-tab.js.map +1 -1
  103. package/dist/components/resize-observe.js +1 -2
  104. package/dist/components/resize-observe.js.map +1 -1
  105. package/dist/components/sticker.js +2 -3
  106. package/dist/components/sticker.js.map +1 -1
  107. package/dist/components/tooltip.js +1 -1
  108. package/dist/components/tooltip.js.map +1 -1
  109. package/dist/custom-elements/index.js +41 -1938
  110. package/dist/custom-elements/index.js.map +1 -1
  111. package/dist/esm/{date-utils-e4b757ff.js → date-utils-839cb010.js} +2 -2
  112. package/dist/esm/date-utils-839cb010.js.map +1 -0
  113. package/dist/esm/{global-d5ec4d53.js → global-8047b4ff.js} +1 -8
  114. package/dist/esm/global-8047b4ff.js.map +1 -0
  115. package/dist/esm/loader.js +2 -2
  116. package/dist/esm/nano-components.js +2 -2
  117. package/dist/esm/nano-datalist_3.entry.js +3 -1
  118. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  119. package/dist/esm/nano-date-input.entry.js +13 -5
  120. package/dist/esm/nano-date-input.entry.js.map +1 -1
  121. package/dist/esm/nano-date-picker.entry.js +2 -2
  122. package/dist/esm/nano-date-picker.entry.js.map +1 -1
  123. package/dist/esm/nano-details.entry.js +1 -2
  124. package/dist/esm/nano-details.entry.js.map +1 -1
  125. package/dist/esm/nano-global-search-results.entry.js +1 -2
  126. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  127. package/dist/esm/nano-grid_3.entry.js +1 -2
  128. package/dist/esm/nano-grid_3.entry.js.map +1 -1
  129. package/dist/esm/nano-icon-button.entry.js +4 -0
  130. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  131. package/dist/esm/nano-resize-observe_2.entry.js +1 -2
  132. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  133. package/dist/esm/nano-slides.entry.js +1 -2
  134. package/dist/esm/nano-slides.entry.js.map +1 -1
  135. package/dist/esm/nano-sticker.entry.js +2 -3
  136. package/dist/esm/nano-sticker.entry.js.map +1 -1
  137. package/dist/esm/nano-tab-group.entry.js +4 -2
  138. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  139. package/dist/esm/nano-tab.entry.js +5 -1
  140. package/dist/esm/nano-tab.entry.js.map +1 -1
  141. package/dist/esm/nano-tooltip.entry.js +1 -1
  142. package/dist/esm/nano-tooltip.entry.js.map +1 -1
  143. package/dist/esm-es5/date-utils-839cb010.js +5 -0
  144. package/dist/esm-es5/date-utils-839cb010.js.map +1 -0
  145. package/dist/esm-es5/{global-d5ec4d53.js → global-8047b4ff.js} +2 -2
  146. package/dist/esm-es5/global-8047b4ff.js.map +1 -0
  147. package/dist/esm-es5/loader.js +1 -1
  148. package/dist/esm-es5/loader.js.map +1 -1
  149. package/dist/esm-es5/nano-components.js +1 -1
  150. package/dist/esm-es5/nano-components.js.map +1 -1
  151. package/dist/esm-es5/nano-datalist_3.entry.js +1 -1
  152. package/dist/esm-es5/nano-datalist_3.entry.js.map +1 -1
  153. package/dist/esm-es5/nano-date-input.entry.js +1 -1
  154. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  155. package/dist/esm-es5/nano-date-picker.entry.js +1 -1
  156. package/dist/esm-es5/nano-date-picker.entry.js.map +1 -1
  157. package/dist/esm-es5/nano-details.entry.js +1 -1
  158. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  159. package/dist/esm-es5/nano-global-search-results.entry.js +1 -1
  160. package/dist/esm-es5/nano-global-search-results.entry.js.map +1 -1
  161. package/dist/esm-es5/nano-grid_3.entry.js +1 -1
  162. package/dist/esm-es5/nano-grid_3.entry.js.map +1 -1
  163. package/dist/esm-es5/nano-icon-button.entry.js +2 -2
  164. package/dist/esm-es5/nano-icon-button.entry.js.map +1 -1
  165. package/dist/esm-es5/nano-resize-observe_2.entry.js +1 -1
  166. package/dist/esm-es5/nano-resize-observe_2.entry.js.map +1 -1
  167. package/dist/esm-es5/nano-slides.entry.js +2 -2
  168. package/dist/esm-es5/nano-slides.entry.js.map +1 -1
  169. package/dist/esm-es5/nano-sticker.entry.js +1 -1
  170. package/dist/esm-es5/nano-sticker.entry.js.map +1 -1
  171. package/dist/esm-es5/nano-tab-group.entry.js +2 -2
  172. package/dist/esm-es5/nano-tab-group.entry.js.map +1 -1
  173. package/dist/esm-es5/nano-tab.entry.js +2 -2
  174. package/dist/esm-es5/nano-tab.entry.js.map +1 -1
  175. package/dist/esm-es5/nano-tooltip.entry.js +1 -1
  176. package/dist/esm-es5/nano-tooltip.entry.js.map +1 -1
  177. package/dist/nano-components/nano-components.esm.js +1 -1
  178. package/dist/nano-components/nano-components.esm.js.map +1 -1
  179. package/dist/nano-components/nano-components.js +1 -1
  180. package/dist/nano-components/p-0193a282.entry.js +5 -0
  181. package/dist/nano-components/p-0193a282.entry.js.map +1 -0
  182. package/dist/nano-components/p-0320410c.entry.js +5 -0
  183. package/dist/nano-components/p-0320410c.entry.js.map +1 -0
  184. package/dist/nano-components/p-2720ee8f.entry.js +5 -0
  185. package/dist/nano-components/p-2720ee8f.entry.js.map +1 -0
  186. package/dist/nano-components/p-32900c91.entry.js +5 -0
  187. package/dist/nano-components/p-32900c91.entry.js.map +1 -0
  188. package/dist/nano-components/p-33fce1a6.js +5 -0
  189. package/dist/nano-components/p-33fce1a6.js.map +1 -0
  190. package/dist/nano-components/p-371aebe7.system.entry.js +23 -0
  191. package/dist/nano-components/p-371aebe7.system.entry.js.map +1 -0
  192. package/dist/nano-components/p-41899a31.system.entry.js +5 -0
  193. package/dist/nano-components/p-41899a31.system.entry.js.map +1 -0
  194. package/dist/nano-components/p-53957ec6.system.js +5 -0
  195. package/dist/nano-components/{p-e7140887.system.js.map → p-53957ec6.system.js.map} +1 -1
  196. package/dist/nano-components/p-561500f0.system.entry.js +5 -0
  197. package/dist/nano-components/p-561500f0.system.entry.js.map +1 -0
  198. package/dist/nano-components/p-70272eae.js +5 -0
  199. package/dist/nano-components/p-70272eae.js.map +1 -0
  200. package/dist/nano-components/p-755d9227.entry.js +5 -0
  201. package/dist/nano-components/p-755d9227.entry.js.map +1 -0
  202. package/dist/nano-components/p-7bd25494.entry.js +5 -0
  203. package/dist/nano-components/p-7bd25494.entry.js.map +1 -0
  204. package/dist/nano-components/p-7c837460.entry.js +5 -0
  205. package/dist/nano-components/p-7c837460.entry.js.map +1 -0
  206. package/dist/nano-components/{p-93880c28.system.js → p-82e28afd.system.js} +2 -2
  207. package/dist/nano-components/p-82e28afd.system.js.map +1 -0
  208. package/dist/nano-components/p-8378428e.system.js +5 -0
  209. package/dist/nano-components/p-8378428e.system.js.map +1 -0
  210. package/dist/nano-components/p-8df4f125.system.entry.js +5 -0
  211. package/dist/nano-components/p-8df4f125.system.entry.js.map +1 -0
  212. package/dist/nano-components/{p-d0385948.system.entry.js → p-93596c3d.system.entry.js} +2 -2
  213. package/dist/nano-components/p-93596c3d.system.entry.js.map +1 -0
  214. package/dist/nano-components/{p-3e930ac7.entry.js → p-9d9b0b66.entry.js} +2 -2
  215. package/dist/nano-components/p-9d9b0b66.entry.js.map +1 -0
  216. package/dist/nano-components/p-9ffdf6cc.entry.js +5 -0
  217. package/dist/nano-components/{p-222d8095.entry.js.map → p-9ffdf6cc.entry.js.map} +1 -1
  218. package/dist/nano-components/p-a1444980.entry.js +5 -0
  219. package/dist/nano-components/p-a1444980.entry.js.map +1 -0
  220. package/dist/nano-components/p-aa84c727.system.entry.js +5 -0
  221. package/dist/nano-components/p-aa84c727.system.entry.js.map +1 -0
  222. package/dist/nano-components/p-ac5e3775.system.entry.js +5 -0
  223. package/dist/nano-components/p-ac5e3775.system.entry.js.map +1 -0
  224. package/dist/nano-components/p-b85cf493.system.entry.js +5 -0
  225. package/dist/nano-components/{p-e817ab4a.system.entry.js.map → p-b85cf493.system.entry.js.map} +1 -1
  226. package/dist/nano-components/{p-1030797a.entry.js → p-d37e1489.entry.js} +2 -2
  227. package/dist/nano-components/p-d37e1489.entry.js.map +1 -0
  228. package/dist/nano-components/p-d61ae833.system.entry.js +5 -0
  229. package/dist/nano-components/p-d61ae833.system.entry.js.map +1 -0
  230. package/dist/nano-components/p-d93274de.entry.js +5 -0
  231. package/dist/nano-components/p-d93274de.entry.js.map +1 -0
  232. package/dist/nano-components/p-da88981f.entry.js +23 -0
  233. package/dist/nano-components/p-da88981f.entry.js.map +1 -0
  234. package/dist/nano-components/p-e8a913ac.system.entry.js +5 -0
  235. package/dist/nano-components/p-e8a913ac.system.entry.js.map +1 -0
  236. package/dist/nano-components/p-e9a279ee.system.entry.js +5 -0
  237. package/dist/nano-components/p-e9a279ee.system.entry.js.map +1 -0
  238. package/dist/nano-components/p-faba2fc1.system.entry.js +5 -0
  239. package/dist/nano-components/p-faba2fc1.system.entry.js.map +1 -0
  240. package/dist/nano-components/p-ff026352.system.entry.js +5 -0
  241. package/dist/nano-components/p-ff026352.system.entry.js.map +1 -0
  242. package/dist/types/components/date-input/date-input.d.ts +6 -1
  243. package/dist/types/components/icon-button/icon-button.d.ts +2 -0
  244. package/dist/types/components/tabs/tab.d.ts +1 -0
  245. package/dist/types/components.d.ts +20 -0
  246. package/docs-json.json +54 -2
  247. package/package.json +2 -4
  248. package/dist/cjs/ResizeObserver.es-09b81a1b.js +0 -935
  249. package/dist/cjs/ResizeObserver.es-09b81a1b.js.map +0 -1
  250. package/dist/cjs/date-utils-0ae9a12d.js.map +0 -1
  251. package/dist/cjs/global-0d4f3b77.js.map +0 -1
  252. package/dist/cjs/intersection-observer-1822c787.js +0 -987
  253. package/dist/cjs/intersection-observer-1822c787.js.map +0 -1
  254. package/dist/components/ResizeObserver.es.js +0 -933
  255. package/dist/components/ResizeObserver.es.js.map +0 -1
  256. package/dist/components/intersection-observer.js +0 -985
  257. package/dist/components/intersection-observer.js.map +0 -1
  258. package/dist/esm/ResizeObserver.es-724af9fd.js +0 -933
  259. package/dist/esm/ResizeObserver.es-724af9fd.js.map +0 -1
  260. package/dist/esm/date-utils-e4b757ff.js.map +0 -1
  261. package/dist/esm/global-d5ec4d53.js.map +0 -1
  262. package/dist/esm/intersection-observer-dff9fb5b.js +0 -985
  263. package/dist/esm/intersection-observer-dff9fb5b.js.map +0 -1
  264. package/dist/esm-es5/ResizeObserver.es-724af9fd.js +0 -5
  265. package/dist/esm-es5/ResizeObserver.es-724af9fd.js.map +0 -1
  266. package/dist/esm-es5/date-utils-e4b757ff.js +0 -5
  267. package/dist/esm-es5/date-utils-e4b757ff.js.map +0 -1
  268. package/dist/esm-es5/global-d5ec4d53.js.map +0 -1
  269. package/dist/esm-es5/intersection-observer-dff9fb5b.js +0 -5
  270. package/dist/esm-es5/intersection-observer-dff9fb5b.js.map +0 -1
  271. package/dist/nano-components/p-00eaa36a.entry.js +0 -5
  272. package/dist/nano-components/p-00eaa36a.entry.js.map +0 -1
  273. package/dist/nano-components/p-1030797a.entry.js.map +0 -1
  274. package/dist/nano-components/p-11a2dcce.js +0 -5
  275. package/dist/nano-components/p-11a2dcce.js.map +0 -1
  276. package/dist/nano-components/p-1a30dfdd.system.entry.js +0 -5
  277. package/dist/nano-components/p-1a30dfdd.system.entry.js.map +0 -1
  278. package/dist/nano-components/p-222d8095.entry.js +0 -5
  279. package/dist/nano-components/p-241d90eb.system.entry.js +0 -5
  280. package/dist/nano-components/p-241d90eb.system.entry.js.map +0 -1
  281. package/dist/nano-components/p-2c8d7273.entry.js +0 -5
  282. package/dist/nano-components/p-2c8d7273.entry.js.map +0 -1
  283. package/dist/nano-components/p-3093915f.entry.js +0 -5
  284. package/dist/nano-components/p-3093915f.entry.js.map +0 -1
  285. package/dist/nano-components/p-325c1cad.entry.js +0 -5
  286. package/dist/nano-components/p-325c1cad.entry.js.map +0 -1
  287. package/dist/nano-components/p-32f396c0.system.entry.js +0 -5
  288. package/dist/nano-components/p-32f396c0.system.entry.js.map +0 -1
  289. package/dist/nano-components/p-35108e08.entry.js +0 -5
  290. package/dist/nano-components/p-35108e08.entry.js.map +0 -1
  291. package/dist/nano-components/p-3ccb176c.system.entry.js +0 -5
  292. package/dist/nano-components/p-3ccb176c.system.entry.js.map +0 -1
  293. package/dist/nano-components/p-3e930ac7.entry.js.map +0 -1
  294. package/dist/nano-components/p-42cebbfe.system.entry.js +0 -5
  295. package/dist/nano-components/p-42cebbfe.system.entry.js.map +0 -1
  296. package/dist/nano-components/p-5d17cfbb.system.entry.js +0 -23
  297. package/dist/nano-components/p-5d17cfbb.system.entry.js.map +0 -1
  298. package/dist/nano-components/p-5d5ea4ab.system.entry.js +0 -5
  299. package/dist/nano-components/p-5d5ea4ab.system.entry.js.map +0 -1
  300. package/dist/nano-components/p-6722447c.entry.js +0 -5
  301. package/dist/nano-components/p-6722447c.entry.js.map +0 -1
  302. package/dist/nano-components/p-6d138abf.entry.js +0 -5
  303. package/dist/nano-components/p-6d138abf.entry.js.map +0 -1
  304. package/dist/nano-components/p-76d9d1d4.entry.js +0 -5
  305. package/dist/nano-components/p-76d9d1d4.entry.js.map +0 -1
  306. package/dist/nano-components/p-866f083f.system.entry.js +0 -5
  307. package/dist/nano-components/p-866f083f.system.entry.js.map +0 -1
  308. package/dist/nano-components/p-88779174.system.entry.js +0 -5
  309. package/dist/nano-components/p-88779174.system.entry.js.map +0 -1
  310. package/dist/nano-components/p-93880c28.system.js.map +0 -1
  311. package/dist/nano-components/p-97b13ad2.entry.js +0 -5
  312. package/dist/nano-components/p-97b13ad2.entry.js.map +0 -1
  313. package/dist/nano-components/p-b430a9b6.system.js +0 -5
  314. package/dist/nano-components/p-b430a9b6.system.js.map +0 -1
  315. package/dist/nano-components/p-d0385948.system.entry.js.map +0 -1
  316. package/dist/nano-components/p-debd9efc.js +0 -5
  317. package/dist/nano-components/p-debd9efc.js.map +0 -1
  318. package/dist/nano-components/p-e195ab77.system.js +0 -5
  319. package/dist/nano-components/p-e195ab77.system.js.map +0 -1
  320. package/dist/nano-components/p-e7140887.system.js +0 -5
  321. package/dist/nano-components/p-e817ab4a.system.entry.js +0 -5
  322. package/dist/nano-components/p-f5d4d13b.system.js +0 -5
  323. package/dist/nano-components/p-f5d4d13b.system.js.map +0 -1
  324. package/dist/nano-components/p-f66958c1.js +0 -5
  325. package/dist/nano-components/p-f66958c1.js.map +0 -1
  326. package/dist/nano-components/p-f710c763.system.entry.js +0 -5
  327. package/dist/nano-components/p-f710c763.system.entry.js.map +0 -1
  328. package/dist/nano-components/p-f9c7d961.js +0 -5
  329. package/dist/nano-components/p-f9c7d961.js.map +0 -1
  330. package/dist/nano-components/p-ffc2063a.entry.js +0 -23
  331. package/dist/nano-components/p-ffc2063a.entry.js.map +0 -1
  332. package/dist/nano-components/p-fff27907.system.entry.js +0 -5
  333. package/dist/nano-components/p-fff27907.system.entry.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ import{r as t,c as o,i as r,f as n,h as i,e,g as a}from"./p-b5c33aff.js";import{c as s}from"./p-d99437a6.js";import{d}from"./p-289aa03f.js";const l=':host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;--padding:1em;--btn-padding:var(--padding);--btn-bg-color:var(--nano-color-contrast, #dad6d3);--btn-bg-color--open:var(--nano-color-base, #dad6d3);--btn-bg-color--hover:var(--nano-color-tint, #f9f9fb);--btn-text-color:var(--nano-color-base, #455556);--btn-text-color--open:var(--nano-color-contrast, var(--btn-text-color));--btn-text-color--hover:var(--nano-color-contrast, var(--btn-text-color));--content-bg-color:transparent;--content-text-color:#455556;--content-transition:height 0.2s ease-out;--border-width:none;--border-color:none;--border-style:none;--border-radius:none;--box-shadow:none;--focus-style:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));display:block;border-style:var(--border-style);border-width:var(--border-width-dims);border-color:var(--border-color);border-radius:var(--border-radius-dims);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}:host(:last-of-type){--border-width-dims:0 var(--border-width) var(--border-width);--border-radius-dims:0 0 var(--border-radius) var(--border-radius)}:host(:last-of-type) .open .content{border-radius:0 0 var(--border-radius) var(--border-radius)}:host(:first-of-type){--border-radius-dims:var(--border-radius) var(--border-radius) 0 0;--border-width-dims:var(--border-width)}:host(:first-of-type:last-of-type){--border-radius-dims:var(--border-radius);--border-width-dims:var(--border-width)}:host(:not(:last-of-type):not(:first-of-type)){--border-width-dims:0 var(--border-width) var(--border-width)}:host(.nano-color){--btn-bg-color:var(--nano-color-contrast, var(--nano-color-primary-contrast, #fff));--btn-bg-color--open:var(--nano-color-base, var(--nano-color-primary, #007495));--btn-bg-color--hover:var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));--btn-text-color:var(--nano-color-base, var(--nano-color-primary, #007495));--btn-text-color--open:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--btn-text-color--hover:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n )}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;padding:var(--btn-padding);text-align:inherit;position:relative;font-size:1em;margin:0;-webkit-transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--btn-bg-color);color:var(--btn-text-color);border-radius:var(--border-radius-dims)}button[dir=rtl]{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}button:focus{-webkit-box-shadow:var(--focus-style);box-shadow:var(--focus-style);outline:none;position:relative;z-index:1}:hover button{background:var(--btn-bg-color--hover);color:var(--btn-text-color--hover)}.open button{background:var(--btn-bg-color--open);color:var(--btn-text-color--open);border-bottom-right-radius:0;border-bottom-left-radius:0}button .label{width:100%;max-width:100%;max-height:100%;-webkit-box-flex:1;-ms-flex:1;flex:1;display:inline-block}button .icon{line-height:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;display:inline-block;color:currentColor;-webkit-transition:0.3s ease transform;transition:0.3s ease transform;-webkit-transform-origin:center;transform-origin:center}button .icon--start{margin-left:0;margin-right:var(--padding);margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){button .icon--start{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:var(--padding);margin-inline-end:var(--padding)}}button .icon--end{margin-left:var(--padding);margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){button .icon--end{margin-left:unset;margin-right:unset;-webkit-margin-start:var(--padding);margin-inline-start:var(--padding);-webkit-margin-end:0;margin-inline-end:0}}button .icon ::slotted(nano-icon){--color:"currentColor"}.content{color:var(--content-text-color);background:var(--content-bg-color);height:0;overflow:hidden;-webkit-transition:0.2s ease border-radius;transition:0.2s ease border-radius;outline:none}.loaded .content{-webkit-transition:var(--content-transition), 0.2s ease border-radius;transition:var(--content-transition), 0.2s ease border-radius}.content>*{opacity:0;-webkit-transition:opacity 0.2s ease-out;transition:opacity 0.2s ease-out}.open .content>*{opacity:1}.content__area{padding:var(--padding)}';let c=class{constructor(r){t(this,r);this.nanoOpened=o(this,"nanoOpened",7);this.nanoClosed=o(this,"nanoClosed",7);this.slideId=`nano-details-${b++}`;this.stateChanging=false;this.isLoading=true;this.label="";this.open=false;this.noHandle=false;this.iconRotation=90;this.onKeyDown=t=>{switch(t.key){case"Enter":case" ":this.open=!this.open;break}};this.onMouseDown=()=>{if(this.stateChanging)return;this.open=!this.open}}toggleClick(){this.stateChanging=true;if(this.open)this.show();else this.hide()}hide(){this.nanoClosed.emit(this.open);d(this.contentEl,"is-shown",false).then((()=>this.stateChanging=false));this.contentEl.style.height="0px"}show(){this.nanoOpened.emit();d(this.contentEl,"is-shown",true).then((()=>{this.stateChanging=false}));this.contentEl.style.height=this.contentArea.scrollHeight+"px"}resize(){if(!this.open||!this.contentArea||!this.contentEl||this.stateChanging)return;r((()=>{if(this.contentArea.scrollHeight>0){n((()=>{this.contentEl.style.height=this.contentArea.scrollHeight+"px"}))}}))}attachRO(){if(this.ro||!this.contentArea)return;const t=this.ro=new ResizeObserver((()=>this.resize()));t.observe(this.contentArea)}componentWillLoad(){this.hasStartSlot=!!this.el.querySelector('[slot="icon-start"]');this.hasEndSlot=!!this.el.querySelector('[slot="icon-end"]');setTimeout((()=>{this.isLoading=false}),100)}componentDidLoad(){if(this.open){setTimeout((()=>{this.show()}),0)}this.attachRO()}connectedCallback(){const t=this.mo=new MutationObserver((()=>this.resize()));t.observe(this.el,{childList:true,subtree:true,attributes:false});this.attachRO()}disconnectedCallback(){if(this.mo)this.mo.disconnect();if(this.ro)this.ro.disconnect()}render(){return i(e,{class:Object.assign({},s(this.color))},i("div",{class:{open:this.open,loaded:!this.isLoading}},i("button",{onKeyDown:this.onKeyDown,onMouseDown:this.onMouseDown,onTouchEnd:this.onMouseDown,"aria-controls":this.slideId,"aria-expanded":this.open?"true":"false",style:{display:this.noHandle?"none":""},part:"button"},this.hasStartSlot?i("span",{part:"icon--start",class:"icon icon--start",style:{transform:this.open?`rotate(${this.iconRotation}deg)`:""}},i("slot",{name:"icon-start"})):"",i("div",{class:"label",part:"label"},this.label?this.label:i("slot",{name:"label"})),this.hasEndSlot?i("span",{part:"icon--end",class:"icon icon--end",style:{transform:this.open?`rotate(${this.iconRotation}deg)`:""}},i("slot",{name:"icon-end"})):""),i("div",{class:"content",ref:t=>this.contentEl=t,tabindex:"-1",id:this.slideId,part:"content"},i("div",{ref:t=>this.contentArea=t,class:"content__area"},i("slot",null)))))}get el(){return a(this)}static get watchers(){return{open:["toggleClick"]}}};let b=0;c.style=l;export{c as nano_details};
5
+ //# sourceMappingURL=p-7c837460.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/details/details.scss?tag=nano-details&encapsulation=shadow","src/components/details/details.tsx"],"names":["detailsCss","Details","[object Object]","hostRef","this","slideId","slideIds","stateChanging","isLoading","label","open","noHandle","iconRotation","onKeyDown","ev","key","onMouseDown","show","hide","nanoClosed","emit","displayTransition","contentEl","then","style","height","nanoOpened","contentArea","scrollHeight","readTask","writeTask","ro","ResizeObserver","resize","observe","hasStartSlot","el","querySelector","hasEndSlot","setTimeout","attachRO","mo","MutationObserver","childList","subtree","attributes","disconnect","h","Host","class","Object","assign","createColorClasses","color","loaded","onTouchEnd","aria-controls","aria-expanded","display","part","transform","name","ref","div","tabindex","id"],"mappings":"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","sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/form';\n\n:host {\n /**\n * @prop --padding: Default to 1em;\n\n * @prop --btn-padding: Defaults to var(--padding);\n * @prop --btn-bg-color: Defaults to var(--nano-color-contrast, #dad6d3);\n * @prop --btn-bg-color--open: Defaults to var(--nano-color-base, #dad6d3);\n * @prop --btn-bg-color--hover: Defaults to var(--nano-color-tint, #{map.get($colors, offwhite)});\n\n * @prop --btn-text-color: Defaults to var(--nano-color-base, #455556);\n * @prop --btn-text-color--open: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n * @prop --btn-text-color--hover: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n\n * @prop --content-bg-color: Defaults to transparent;\n * @prop --content-text-color: Defaults to #455556;\n * @prop --content-transition: Defaults to height .2s ease-out;\n\n * @prop --border-width: Defaults to none;\n * @prop --border-color: Defaults to none;\n * @prop --border-style: Defaults to none;\n * @prop --border-radius: Defaults to none;\n * @prop --box-shadow: Defaults to none;\n * @prop --focus-style: Defaults to #{$control-focus-style}\n */\n\n @include text-inherit();\n\n --padding: 1em;\n --btn-padding: var(--padding);\n --btn-bg-color: var(--nano-color-contrast, #dad6d3);\n --btn-bg-color--open: var(--nano-color-base, #dad6d3);\n --btn-bg-color--hover: var(--nano-color-tint, #{map.get($colors, offwhite)});\n --btn-text-color: var(--nano-color-base, #455556);\n --btn-text-color--open: var(--nano-color-contrast, var(--btn-text-color));\n --btn-text-color--hover: var(--nano-color-contrast, var(--btn-text-color));\n --content-bg-color: transparent;\n --content-text-color: #455556;\n --content-transition: height 0.2s ease-out;\n --border-width: none;\n --border-color: none;\n --border-style: none;\n --border-radius: none;\n --box-shadow: none;\n --focus-style: #{$control-focus-style};\n\n display: block;\n border-style: var(--border-style);\n border-width: var(--border-width-dims);\n border-color: var(--border-color);\n border-radius: var(--border-radius-dims);\n box-shadow: var(--box-shadow);\n}\n\n:host(:last-of-type) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n --border-radius-dims: 0 0 var(--border-radius) var(--border-radius);\n\n .open .content {\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n }\n}\n\n:host(:first-of-type) {\n --border-radius-dims: var(--border-radius) var(--border-radius) 0 0;\n --border-width-dims: var(--border-width);\n}\n\n:host(:first-of-type:last-of-type) {\n --border-radius-dims: var(--border-radius);\n --border-width-dims: var(--border-width);\n}\n\n:host(:not(:last-of-type):not(:first-of-type)) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n}\n\n:host(.nano-color) {\n --btn-bg-color: var(--nano-color-contrast, #{nano-color(primary, contrast)});\n --btn-bg-color--open: var(--nano-color-base, #{nano-color(primary, base)});\n --btn-bg-color--hover: var(--nano-color-tint, #{nano-color(primary, tint)});\n --btn-text-color: var(--nano-color-base, #{nano-color(primary, base)});\n --btn-text-color--open:\n var(\n --nano-color-contrast,\n #{nano-color(primary, contrast)}\n );\n --btn-text-color--hover:\n var(\n --nano-color-contrast,\n #{nano-color(primary, contrast)}\n );\n}\n\nbutton {\n @include input-cover;\n\n padding: var(--btn-padding);\n text-align: inherit;\n position: relative;\n font-size: 1em;\n margin: 0;\n transition: 0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;\n display: flex;\n align-items: center;\n background: var(--btn-bg-color);\n color: var(--btn-text-color);\n border-radius: var(--border-radius-dims);\n\n &:focus {\n box-shadow: var(--focus-style);\n outline: none;\n position: relative;\n z-index: 1;\n }\n\n :hover & {\n background: var(--btn-bg-color--hover);\n color: var(--btn-text-color--hover);\n }\n\n .open & {\n background: var(--btn-bg-color--open);\n color: var(--btn-text-color--open);\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .label {\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n flex: 1;\n display: inline-block;\n }\n\n .icon {\n line-height: 0;\n flex-direction: column;\n justify-content: center;\n display: inline-block;\n color: currentColor;\n transition: 0.3s ease transform;\n transform-origin: center;\n\n &--start {\n @include margin(0, var(--padding), 0, 0);\n }\n\n &--end {\n @include margin(0, 0, 0, var(--padding));\n }\n\n ::slotted(nano-icon) {\n --color: 'currentColor';\n }\n }\n}\n\n.content {\n color: var(--content-text-color);\n background: var(--content-bg-color);\n height: 0;\n overflow: hidden;\n transition: 0.2s ease border-radius;\n outline: none;\n\n .loaded & {\n transition: var(--content-transition), 0.2s ease border-radius;\n }\n\n > * {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n\n .open & {\n opacity: 1;\n }\n }\n\n &__area {\n padding: var(--padding);\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n Prop,\n h,\n Element,\n Watch,\n Host,\n State,\n writeTask,\n readTask,\n} from '@stencil/core';\nimport { Color } from '../../interface';\nimport { createColorClasses } from '../../utils/theme';\nimport { displayTransition } from '../../utils';\n\n/**\n * A simple element used to hide or reveal more content with slide effect. Can be used independently or nested within a [accordion](story/components-accordion--accordion) element to add 'one item open at a time' support.\n */\n/**\n * @slot - content that will be hidden / revealed\n * @slot icon-start - used for icons at the start of the handle\n * @slot label - can be used when you wish to insert complex label markup\n * @slot icon-end - used for icons at the end of the handle\n * @part button - the main details ui control\n * @part label - the text wrapper of the ui control\n * @part icon--start - the icon wrapper at the start of the ui control\n * @part icon--end - the icon wrapper at the end of the ui control\n * @part content - the main content wrapper\n */\n@Component({\n tag: 'nano-details',\n styleUrl: 'details.scss',\n shadow: true,\n})\nexport class Details {\n private hasStartSlot: boolean;\n private hasEndSlot: boolean;\n private slideId = `nano-details-${slideIds++}`;\n private mo?: MutationObserver;\n private ro?: ResizeObserver;\n private contentArea: HTMLDivElement;\n private stateChanging: boolean = false;\n\n @State() isLoading = true;\n\n @Element() private el: HTMLNanoDetailsElement;\n\n private contentEl: HTMLElement;\n\n /**\n * Button / handle text to be used if no complex markup required.\n * Otherwise use label slot.\n */\n @Prop() label: string = '';\n\n /**\n * Should item be open on load\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Have no handle - you will need to control the hiding / showing of content with script\n */\n @Prop() noHandle: boolean = false;\n\n /**\n * Icon slot rotation amount (degrees) on open\n */\n @Prop() iconRotation: number = 90;\n\n /**\n * Color to use from your application's color palette.\n */\n @Prop() color?: Color;\n\n /**\n * Emitted when the component opens.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoOpened: EventEmitter;\n\n /**\n * Emitted when the component closes.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoClosed: EventEmitter;\n\n @Watch('open')\n toggleClick() {\n this.stateChanging = true;\n if (this.open) this.show();\n else this.hide();\n }\n\n private onKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.open = !this.open;\n break;\n }\n };\n\n private onMouseDown = () => {\n if (this.stateChanging) return;\n this.open = !this.open;\n };\n\n private hide() {\n this.nanoClosed.emit(this.open);\n displayTransition(this.contentEl, 'is-shown', false).then(\n () => (this.stateChanging = false)\n );\n this.contentEl.style.height = '0px';\n }\n\n private show() {\n this.nanoOpened.emit();\n displayTransition(this.contentEl, 'is-shown', true).then(() => {\n this.stateChanging = false;\n });\n this.contentEl.style.height = this.contentArea.scrollHeight + 'px';\n }\n\n private resize() {\n if (\n !this.open ||\n !this.contentArea ||\n !this.contentEl ||\n this.stateChanging\n )\n return;\n readTask(() => {\n if (this.contentArea.scrollHeight > 0) {\n writeTask(() => {\n this.contentEl.style.height = this.contentArea.scrollHeight + 'px';\n });\n }\n });\n }\n\n private attachRO() {\n if (this.ro || !this.contentArea) return;\n\n const ro = (this.ro = new ResizeObserver(() => this.resize()));\n ro.observe(this.contentArea);\n }\n\n componentWillLoad() {\n this.hasStartSlot = !!this.el.querySelector('[slot=\"icon-start\"]');\n this.hasEndSlot = !!this.el.querySelector('[slot=\"icon-end\"]');\n setTimeout(() => {\n this.isLoading = false;\n }, 100);\n }\n\n componentDidLoad() {\n if (this.open) {\n // disable animation on start\n setTimeout(() => {\n this.show();\n }, 0);\n }\n this.attachRO();\n }\n\n connectedCallback() {\n const mo = (this.mo = new MutationObserver(() => this.resize()));\n mo.observe(this.el, { childList: true, subtree: true, attributes: false });\n this.attachRO();\n }\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n if (this.ro) this.ro.disconnect();\n }\n\n render() {\n return (\n <Host class={{ ...createColorClasses(this.color) }}>\n <div\n class={{\n open: this.open,\n loaded: !this.isLoading,\n }}\n >\n <button\n onKeyDown={this.onKeyDown}\n onMouseDown={this.onMouseDown}\n onTouchEnd={this.onMouseDown}\n aria-controls={this.slideId}\n aria-expanded={this.open ? 'true' : 'false'}\n style={{ display: this.noHandle ? 'none' : '' }}\n part=\"button\"\n >\n {this.hasStartSlot ? (\n <span\n part=\"icon--start\"\n class=\"icon icon--start\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-start\" />\n </span>\n ) : (\n ''\n )}\n <div class=\"label\" part=\"label\">\n {this.label ? this.label : <slot name=\"label\" />}\n </div>\n {this.hasEndSlot ? (\n <span\n part=\"icon--end\"\n class=\"icon icon--end\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-end\" />\n </span>\n ) : (\n ''\n )}\n </button>\n <div\n class=\"content\"\n ref={(div) => (this.contentEl = div)}\n tabindex=\"-1\"\n id={this.slideId}\n part=\"content\"\n >\n <div ref={(div) => (this.contentArea = div)} class=\"content__area\">\n <slot />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n\nlet slideIds = 0;\n"]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- System.register([],(function(e,t){"use strict";return{execute:function(){(function(){if(typeof window==="undefined"||typeof document==="undefined"||typeof HTMLElement==="undefined"){return}var e=false;try{var t=document.createElement("div");t.addEventListener("focus",(function(e){e.preventDefault();e.stopPropagation()}),true);t.focus(Object.defineProperty({},"preventScroll",{get:function(){if(navigator&&typeof navigator.userAgent!=="undefined"&&navigator.userAgent&&navigator.userAgent.match(/Edge\/1[7-8]/)){return e=false}e=true}}))}catch(i){}if(HTMLElement.prototype.nativeFocus===undefined&&!e){HTMLElement.prototype.nativeFocus=HTMLElement.prototype.focus;var n=function(e){var t=e.parentNode;var n=[];var o=document.scrollingElement||document.documentElement;while(t&&t!==o){if(t.offsetHeight<t.scrollHeight||t.offsetWidth<t.scrollWidth){n.push([t,t.scrollTop,t.scrollLeft])}t=t.parentNode}t=o;n.push([t,t.scrollTop,t.scrollLeft]);return n};var o=function(e){for(var t=0;t<e.length;t++){e[t][0].scrollTop=e[t][1];e[t][0].scrollLeft=e[t][2]}e=[]};var r=function(e){if(e&&e.preventScroll){var t=n(this);if(typeof setTimeout==="function"){var r=this;setTimeout((function(){r.nativeFocus();o(t)}),0)}else{this.nativeFocus();o(t)}}else{this.nativeFocus()}};HTMLElement.prototype.focus=r}})();if(!("IntersectionObserver"in window)||!("IntersectionObserverEntry"in window)||!("intersectionRatio"in window.IntersectionObserverEntry.prototype)){t.import("./p-f5d4d13b.system.js")}if(!("scrollBehavior"in document.documentElement.style)){setTimeout((function(e){t.import("./p-8ac94d4d.system.js").then((function(e){document.documentElement.style.scrollBehavior="smooth"}))}),0)}else document.documentElement.style.scrollBehavior="smooth";{var e=document.documentElement;var n=function(){if(!e.classList.contains("hydrated"))return false;document.documentElement.dispatchEvent(new CustomEvent("nanoComponentsReady"));return true};if(!n()){var o=new MutationObserver((function(e){if(n()){o.disconnect();o=null}}));o.observe(document.documentElement,{childList:false,subtree:false,attributes:true})}}}}}));
5
- //# sourceMappingURL=p-93880c28.system.js.map
4
+ System.register([],(function(e,t){"use strict";return{execute:function(){(function(){if(typeof window==="undefined"||typeof document==="undefined"||typeof HTMLElement==="undefined"){return}var e=false;try{var t=document.createElement("div");t.addEventListener("focus",(function(e){e.preventDefault();e.stopPropagation()}),true);t.focus(Object.defineProperty({},"preventScroll",{get:function(){if(navigator&&typeof navigator.userAgent!=="undefined"&&navigator.userAgent&&navigator.userAgent.match(/Edge\/1[7-8]/)){return e=false}e=true}}))}catch(i){}if(HTMLElement.prototype.nativeFocus===undefined&&!e){HTMLElement.prototype.nativeFocus=HTMLElement.prototype.focus;var n=function(e){var t=e.parentNode;var n=[];var o=document.scrollingElement||document.documentElement;while(t&&t!==o){if(t.offsetHeight<t.scrollHeight||t.offsetWidth<t.scrollWidth){n.push([t,t.scrollTop,t.scrollLeft])}t=t.parentNode}t=o;n.push([t,t.scrollTop,t.scrollLeft]);return n};var o=function(e){for(var t=0;t<e.length;t++){e[t][0].scrollTop=e[t][1];e[t][0].scrollLeft=e[t][2]}e=[]};var r=function(e){if(e&&e.preventScroll){var t=n(this);if(typeof setTimeout==="function"){var r=this;setTimeout((function(){r.nativeFocus();o(t)}),0)}else{this.nativeFocus();o(t)}}else{this.nativeFocus()}};HTMLElement.prototype.focus=r}})();if(!("scrollBehavior"in document.documentElement.style)){setTimeout((function(e){t.import("./p-8ac94d4d.system.js").then((function(e){document.documentElement.style.scrollBehavior="smooth"}))}),0)}else document.documentElement.style.scrollBehavior="smooth";{var e=document.documentElement;var n=function(){if(!e.classList.contains("hydrated"))return false;document.documentElement.dispatchEvent(new CustomEvent("nanoComponentsReady"));return true};if(!n()){var o=new MutationObserver((function(e){if(n()){o.disconnect();o=null}}));o.observe(document.documentElement,{childList:false,subtree:false,attributes:true})}}}}}));
5
+ //# sourceMappingURL=p-82e28afd.system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["node_modules/focus-options-polyfill/index.js","src/global/script/global.ts"],"names":["window","document","HTMLElement","supportsPreventScrollOption","focusElem","createElement","addEventListener","event","preventDefault","stopPropagation","focus","Object","defineProperty","get","navigator","userAgent","match","e","prototype","nativeFocus","undefined","calcScrollableElements","element","parent","parentNode","scrollableElements","rootScrollingElement","scrollingElement","documentElement","offsetHeight","scrollHeight","offsetWidth","scrollWidth","push","scrollTop","scrollLeft","restoreScrollPosition","i","length","patchedFocus","args","preventScroll","evScrollableElements","this","setTimeout","thisElem","style","_","module","import","scrollBehavior","docEle_1","docIsReady_1","classList","contains","dispatchEvent","CustomEvent","mutationO_1","MutationObserver","disconnect","observe","childList","subtree","attributes"],"mappings":";;;0EACA,WACE,UACSA,SAAW,oBACXC,WAAa,oBACbC,cAAgB,YACvB,CACA,OAGF,IAAIC,EAA8B,MAClC,IACE,IAAIC,EAAYH,SAASI,cAAc,OACvCD,EAAUE,iBACR,SACA,SAASC,GACPA,EAAMC,iBACND,EAAME,oBAER,MAEFL,EAAUM,MACRC,OAAOC,eAAe,GAAI,gBAAiB,CACzCC,IAAK,WAEH,GACEC,kBACOA,UAAUC,YAAc,aAC/BD,UAAUC,WACVD,UAAUC,UAAUC,MAAM,gBAAiB,CACzC,OAAOb,EAA8B,MAGzCA,EAA8B,SAIpC,MAAOc,IAET,GACEf,YAAYgB,UAAUC,cAAgBC,YACrCjB,EACD,CACAD,YAAYgB,UAAUC,YAAcjB,YAAYgB,UAAUR,MAE1D,IAAIW,EAAyB,SAASC,GACpC,IAAIC,EAASD,EAAQE,WACrB,IAAIC,EAAqB,GACzB,IAAIC,EACFzB,SAAS0B,kBAAoB1B,SAAS2B,gBAExC,MAAOL,GAAUA,IAAWG,EAAsB,CAChD,GACEH,EAAOM,aAAeN,EAAOO,cAC7BP,EAAOQ,YAAcR,EAAOS,YAC5B,CACAP,EAAmBQ,KAAK,CACtBV,EACAA,EAAOW,UACPX,EAAOY,aAGXZ,EAASA,EAAOC,WAElBD,EAASG,EACTD,EAAmBQ,KAAK,CAACV,EAAQA,EAAOW,UAAWX,EAAOY,aAE1D,OAAOV,GAGT,IAAIW,EAAwB,SAASX,GACnC,IAAK,IAAIY,EAAI,EAAGA,EAAIZ,EAAmBa,OAAQD,IAAK,CAClDZ,EAAmBY,GAAG,GAAGH,UAAYT,EAAmBY,GAAG,GAC3DZ,EAAmBY,GAAG,GAAGF,WAAaV,EAAmBY,GAAG,GAE9DZ,EAAqB,IAGvB,IAAIc,EAAe,SAASC,GAC1B,GAAIA,GAAQA,EAAKC,cAAe,CAC9B,IAAIC,EAAuBrB,EAAuBsB,MAClD,UAAWC,aAAe,WAAY,CACpC,IAAIC,EAAWF,KACfC,YAAW,WACTC,EAAS1B,cACTiB,EAAsBM,KACrB,OACE,CACLC,KAAKxB,cACLiB,EAAsBM,QAGrB,CACHC,KAAKxB,gBAITjB,YAAYgB,UAAUR,MAAQ6B,IAhGlC,GCOA,KAAM,mBAAAtC,SAAA2B,gBAAAkB,OAAA,CACJF,YAAW,SAACG,GACVC,EAAAC,mDAGEhD,SAAS2B,gBAAgBkB,MAAMI,eAAiB,cAEjD,QACEjD,SAAA2B,gBAAAkB,MAAAI,eAAA,SAIc,CACnB,IAAMC,EAASlD,SAAA2B,gBACf,IAAMwB,EAAa,WACjB,IAAKD,EAAOE,UAAUC,SAAA,YAAsB,OAAO,MACnDrD,SAAS2B,gBAAA2B,cAAA,IAAAC,YAAA,wBAGT,OAAO,MAGT,IAAAJ,IAAA,CACE,IAAIK,EAAY,IAAAC,kBAAA,SAAAX,GACd,GAAIK,IAAc,CAChBK,EAAUE,aACVF,EAAY,SAIhBA,EAAAG,QAAA3D,SAAA2B,gBAAA,CACEiC,UAAW,MACXC,QAAS,MACTC,WAAY","sourcesContent":["// focus - focusOptions - preventScroll polyfill\n(function() {\n if (\n typeof window === \"undefined\" ||\n typeof document === \"undefined\" ||\n typeof HTMLElement === \"undefined\"\n ) {\n return;\n }\n\n var supportsPreventScrollOption = false;\n try {\n var focusElem = document.createElement(\"div\");\n focusElem.addEventListener(\n \"focus\",\n function(event) {\n event.preventDefault();\n event.stopPropagation();\n },\n true\n );\n focusElem.focus(\n Object.defineProperty({}, \"preventScroll\", {\n get: function() {\n // Edge v18 gives a false positive for supporting inputs\n if (\n navigator &&\n typeof navigator.userAgent !== 'undefined' &&\n navigator.userAgent &&\n navigator.userAgent.match(/Edge\\/1[7-8]/)) {\n return supportsPreventScrollOption = false\n }\n\n supportsPreventScrollOption = true;\n }\n })\n );\n } catch (e) {}\n\n if (\n HTMLElement.prototype.nativeFocus === undefined &&\n !supportsPreventScrollOption\n ) {\n HTMLElement.prototype.nativeFocus = HTMLElement.prototype.focus;\n\n var calcScrollableElements = function(element) {\n var parent = element.parentNode;\n var scrollableElements = [];\n var rootScrollingElement =\n document.scrollingElement || document.documentElement;\n\n while (parent && parent !== rootScrollingElement) {\n if (\n parent.offsetHeight < parent.scrollHeight ||\n parent.offsetWidth < parent.scrollWidth\n ) {\n scrollableElements.push([\n parent,\n parent.scrollTop,\n parent.scrollLeft\n ]);\n }\n parent = parent.parentNode;\n }\n parent = rootScrollingElement;\n scrollableElements.push([parent, parent.scrollTop, parent.scrollLeft]);\n\n return scrollableElements;\n };\n\n var restoreScrollPosition = function(scrollableElements) {\n for (var i = 0; i < scrollableElements.length; i++) {\n scrollableElements[i][0].scrollTop = scrollableElements[i][1];\n scrollableElements[i][0].scrollLeft = scrollableElements[i][2];\n }\n scrollableElements = [];\n };\n\n var patchedFocus = function(args) {\n if (args && args.preventScroll) {\n var evScrollableElements = calcScrollableElements(this);\n if (typeof setTimeout === 'function') {\n var thisElem = this;\n setTimeout(function () {\n thisElem.nativeFocus();\n restoreScrollPosition(evScrollableElements);\n }, 0);\n } else {\n this.nativeFocus();\n restoreScrollPosition(evScrollableElements);\n }\n }\n else {\n this.nativeFocus();\n }\n };\n\n HTMLElement.prototype.focus = patchedFocus;\n }\n})();\n","import { Build } from '@stencil/core';\n\n// focus options\n\nimport 'focus-options-polyfill';\n\n// scroll-behaviour\n\nif (!('scrollBehavior' in document.documentElement.style)) {\n setTimeout((_) => {\n import(\n /* webpackChunkName: 'polyfills-scroll-behavior' */ 'scroll-behavior-polyfill'\n ).then((_) => {\n document.documentElement.style.scrollBehavior = 'smooth';\n });\n }, 0);\n} else document.documentElement.style.scrollBehavior = 'smooth';\n\n// fire global 'ready' event when everything is hydrated\n\nif (Build.isBrowser) {\n const docEle = document.documentElement;\n const docIsReady = () => {\n if (!docEle.classList.contains('hydrated')) return false;\n document.documentElement.dispatchEvent(\n new CustomEvent('nanoComponentsReady')\n );\n return true;\n };\n\n if (!docIsReady()) {\n let mutationO = new MutationObserver((_) => {\n if (docIsReady()) {\n mutationO.disconnect();\n mutationO = null;\n }\n });\n\n mutationO.observe(document.documentElement, {\n childList: false,\n subtree: false,\n attributes: true,\n });\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ System.register([],(function(t){"use strict";return{execute:function(){t({D:void 0,a:u,b:h,c:r,d:i,e:f,f:s,g:d,h:g,i:v,j:D,k:c,p:a,s:o});var e=/^(\d{4})-(\d{2})-(\d{2})/;var n;(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"})(n||(n=t("D",{})));function r(t,e,n){var r=parseInt(n,10);var a=parseInt(e,10);var u=parseInt(t,10);var i=Number.isInteger(u)&&Number.isInteger(a)&&Number.isInteger(r)&&a>0&&a<=12&&r>0&&r<=31&&u>0;if(i){return new Date(u,a-1,r)}}function a(t){if(!t){return}var n=t.match(e);if(n){return r(n[1],n[2],n[3])}}function u(t){if(!t){return""}var e=t.getDate().toString(10);var n=(t.getMonth()+1).toString(10);var r=t.getFullYear().toString(10);if(t.getDate()<10){e="0"+e}if(t.getMonth()<9){n="0"+n}return r+"-"+n+"-"+e}function i(t,e){var n=new Date(t);n.setDate(n.getDate()+e);return n}function o(t,e){if(e===void 0){e=n.Monday}var r=new Date(t);var a=r.getDay();var u=(a<e?7:0)+a-e;r.setDate(r.getDate()-u);return r}function f(t,e){if(e===void 0){e=n.Monday}var r=new Date(t);var a=r.getDay();var u=(a<e?-7:0)+6-(a-e);r.setDate(r.getDate()+u);return r}function d(t){return new Date(t.getFullYear(),t.getMonth(),1)}function g(t){return new Date(t.getFullYear(),t.getMonth()+1,0)}function s(t,e){var n=new Date(t);n.setMonth(e);return n}function c(t,e){var n=new Date(t);n.setFullYear(e);return n}function v(t,e,n){return D(t,e,n)===t}function D(t,e,n){var r=t.getTime();if(e&&e instanceof Date&&r<e.getTime()){return e}if(n&&n instanceof Date&&r>n.getTime()){return n}return t}function y(){return Math.random().toString(16).slice(-4)}function h(t){return t+"-"+y()+y()+"-"+y()+"-"+y()+"-"+y()+"-"+y()+y()+y()}}}}));
5
+ //# sourceMappingURL=p-8378428e.system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/utils/date-utils.ts"],"names":["ISO_DATE_FORMAT","DaysOfWeek","exports","createDate","year","month","day","dayInt","parseInt","monthInt","yearInt","isValid","Number","isInteger","Date","parseISODate","value","matches","match","printISODate","date","d","getDate","toString","m","getMonth","y","getFullYear","addDays","days","setDate","startOfWeek","firstDayOfWeek","Monday","getDay","diff","endOfWeek","startOfMonth","endOfMonth","setMonth","setYear","setFullYear","inRange","min","max","clamp","time","getTime","chr4","Math","random","slice","createIdentifier","prefix"],"mappings":"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","sourcesContent":["const ISO_DATE_FORMAT = /^(\\d{4})-(\\d{2})-(\\d{2})/;\n\nexport enum DaysOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\nexport function createDate(year: string, month: string, day: string): Date {\n var dayInt = parseInt(day, 10);\n var monthInt = parseInt(month, 10);\n var yearInt = parseInt(year, 10);\n\n const isValid =\n Number.isInteger(yearInt) && // all parts should be integers\n Number.isInteger(monthInt) &&\n Number.isInteger(dayInt) &&\n monthInt > 0 && // month must be 1-12\n monthInt <= 12 &&\n dayInt > 0 && // day must be 1-31\n dayInt <= 31 &&\n yearInt > 0;\n\n if (isValid) {\n return new Date(yearInt, monthInt - 1, dayInt);\n }\n}\n\n/**\n * @param value date string in ISO format YYYY-MM-DD\n */\nexport function parseISODate(value: string): Date {\n if (!value) {\n return;\n }\n\n const matches = value.match(ISO_DATE_FORMAT);\n 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 if (max && max instanceof Date && time > max.getTime()) {\n return max;\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"]}
@@ -0,0 +1,5 @@
1
+ var __awaiter=this&&this.__awaiter||function(n,o,t,e){function r(n){return n instanceof t?n:new t((function(o){o(n)}))}return new(t||(t=Promise))((function(t,i){function a(n){try{c(e.next(n))}catch(o){i(o)}}function s(n){try{c(e["throw"](n))}catch(o){i(o)}}function c(n){n.done?t(n.value):r(n.value).then(a,s)}c((e=e.apply(n,o||[])).next())}))};var __generator=this&&this.__generator||function(n,o){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},e,r,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(n){return function(o){return c([n,o])}}function c(a){if(e)throw new TypeError("Generator is already executing.");while(t)try{if(e=1,r&&(i=a[0]&2?r["return"]:a[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;if(r=0,i)a=[a[0]&2,i.value];switch(a[0]){case 0:case 1:i=a;break;case 4:t.label++;return{value:a[1],done:false};case 5:t.label++;r=a[1];a=[0];continue;case 7:a=t.ops.pop();t.trys.pop();continue;default:if(!(i=t.trys,i=i.length>0&&i[i.length-1])&&(a[0]===6||a[0]===2)){t=0;continue}if(a[0]===3&&(!i||a[1]>i[0]&&a[1]<i[3])){t.label=a[1];break}if(a[0]===6&&t.label<i[1]){t.label=i[1];i=a;break}if(i&&t.label<i[2]){t.label=i[2];t.ops.push(a);break}if(i[2])t.ops.pop();t.trys.pop();continue}a=o.call(n,t)}catch(s){a=[6,s];r=0}finally{e=i=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};
2
+ /*!
3
+ * Web Components for Nanopore digital Web Apps
4
+ */System.register(["./p-f48be9f5.system.js","./p-0784f2ad.system.js"],(function(n){"use strict";var o,t,e;return{setters:[function(n){o=n.r;t=n.h},function(n){e=n.f}],execute:function(){var r=".sc-nano-icon-button-h{-webkit-box-sizing:border-box;box-sizing:border-box}*.sc-nano-icon-button,*.sc-nano-icon-button::before,*.sc-nano-icon-button::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden].sc-nano-icon-button{display:none !important}.sc-nano-icon-button-h{display:inline-block;--border-radius:var(--nano-border-radius-medium, 4px);--active-color:#005c75;--hover-color:#007495;--nano-color-base:var(--color, #687576);--background:transparent;--padding:var(--nano-spacing-small, 8px)}.icon-button.sc-nano-icon-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:none;border-radius:var(--border-radius);background:var(--background);font-size:inherit;color:var(--color);padding:var(--padding);cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;-webkit-transition:-webkit-box-shadow var(--nano-transition-fast, 0.1s) ease-in-out;transition:-webkit-box-shadow var(--nano-transition-fast, 0.1s) ease-in-out;transition:box-shadow var(--nano-transition-fast, 0.1s) ease-in-out;transition:box-shadow var(--nano-transition-fast, 0.1s) ease-in-out, -webkit-box-shadow var(--nano-transition-fast, 0.1s) ease-in-out}.icon-button.sc-nano-icon-button:hover:not(.icon-button--disabled),.icon-button.sc-nano-icon-button:focus:not(.icon-button--disabled){color:var(--hover-color);--nano-color-base:var(--hover-color)}.icon-button.sc-nano-icon-button:active:not(.icon-button--disabled){color:var(--active-color);--nano-color-base:var(--active-color)}.icon-button.sc-nano-icon-button:focus{outline:none}.icon-button--disabled.sc-nano-icon-button{opacity:0.5;cursor:not-allowed;pointer-events:none}.focus-visible.icon-button.sc-nano-icon-button:focus{-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}";var i=n("nano_icon_button",function(){function n(n){o(this,n);this.type="button";this.disabled=false}n.prototype.setFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){this.button.focus();return[2]}))}))};n.prototype.componentDidLoad=function(){e.observe(this.button)};n.prototype.connectedCallback=function(){if(this.button)e.observe(this.button)};n.prototype.disconnectedCallback=function(){e.unobserve(this.button)};n.prototype.render=function(){var n=this;var o=this.href===undefined?"button":"a";return t(o,{part:"base",ref:function(o){return n.button=o},class:{"icon-button":true,"icon-button--disabled":this.disabled},"aria-label":this.label,name:this.name,value:this.value,href:this.href||undefined,target:this.href&&this.target?this.target:undefined,type:!this.href&&this.type?this.type:undefined},t("nano-icon",{name:this.iconName,src:this.iconSrc,"aria-hidden":"true"}))};return n}());i.style=r}}}));
5
+ //# sourceMappingURL=p-8df4f125.system.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/icon-button/icon-button.scss?tag=nano-icon-button&encapsulation=scoped","src/components/icon-button/icon-button.tsx"],"names":["iconButtonCss","IconButton","exports","class_1","hostRef","this","type","disabled","prototype","setFocus","button","focus","componentDidLoad","focusVisible","observe","connectedCallback","disconnectedCallback","unobserve","render","_this","TagType","href","undefined","h","part","ref","el","class","icon-button","icon-button--disabled","aria-label","label","name","value","target","iconName","src","iconSrc","aria-hidden"],"mappings":";;;2LAAA,IAAMA,EAAgB,qhECUTC,EAAUC,EAAA,mBAAA,WALvB,SAAAC,EAAAC,aAe2BC,KAAAC,KAAsC,SAatCD,KAAAE,SAAW,MAY9BJ,EAAAK,UAAAC,SAAN,gGACEJ,KAAKK,OAAOC,yBAGdR,EAAAK,UAAAI,iBAAA,WACEC,EAAaC,QAAQT,KAAKK,SAG5BP,EAAAK,UAAAO,kBAAA,WACE,GAAIV,KAAKK,OAAQG,EAAaC,QAAQT,KAAKK,SAG7CP,EAAAK,UAAAQ,qBAAA,WACEH,EAAaI,UAAUZ,KAAKK,SAG9BP,EAAAK,UAAAU,OAAA,WAAA,IAAAC,EAAAd,KACE,IAAMe,EAAUf,KAAKgB,OAASC,UAAY,SAAY,IAEtD,OACEC,EAACH,EAAO,CACNI,KAAK,OACLC,IAAK,SAACC,GAAE,OAAMP,EAAKT,OAASgB,GAC5BC,MAAO,CACLC,cAAe,KACfC,wBAAyBxB,KAAKE,UAC/BuB,aACWzB,KAAK0B,MACjBC,KAAM3B,KAAK2B,KACXC,MAAO5B,KAAK4B,MACZZ,KAAMhB,KAAKgB,MAAQC,UACnBY,OAAQ7B,KAAKgB,MAAQhB,KAAK6B,OAAS7B,KAAK6B,OAASZ,UACjDhB,MAAOD,KAAKgB,MAAQhB,KAAKC,KAAOD,KAAKC,KAAOgB,WAE5CC,EAAA,YAAA,CAAWS,KAAM3B,KAAK8B,SAAUC,IAAK/B,KAAKgC,QAAOC,cAAc,oBArEhD","sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/form';\n\n:host {\n /**\n * @prop --border-radius: defaults to #{$border-radius-medium};\n * @prop --border-radius: defaults to #{$border-radius-medium};\n * @prop --color: defaults to #{map.get($colors, palegrey)};\n * @prop --active-color: defaults to #{map.get($colors, darkblue--faded)};\n * @prop --hover-color: defaults to #{map.get($colors, blue)};\n * @prop --background: defaults to transparent;\n * @prop --padding: defaults to #{$spacing-small};\n */\n display: inline-block;\n\n --border-radius: #{$border-radius-medium};\n --active-color: #{map.get($colors, darkblue--faded)};\n --hover-color: #{map.get($colors, blue)};\n --nano-color-base: var(--color, #{map.get($colors, mediumgrey)});\n --background: transparent;\n --padding: #{$spacing-small};\n}\n\n.icon-button {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n border: none;\n border-radius: var(--border-radius);\n background: var(--background);\n font-size: inherit;\n color: var(--color);\n padding: var(--padding);\n cursor: pointer;\n appearance: none;\n -webkit-appearance: none;\n transition: box-shadow #{$transition-xfast} ease-in-out;\n\n &:hover:not(.icon-button--disabled),\n &:focus:not(.icon-button--disabled) {\n color: var(--hover-color);\n\n --nano-color-base: var(--hover-color);\n }\n\n &:active:not(.icon-button--disabled) {\n color: var(--active-color);\n\n --nano-color-base: var(--active-color);\n }\n\n &:focus {\n outline: none;\n }\n}\n\n.icon-button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.focus-visible.icon-button:focus {\n box-shadow: #{$control-focus-style};\n}\n","import { Component, Prop, h, ComponentInterface, Method } from '@stencil/core';\nimport { focusVisible } from '../../utils/focus-visible';\n\n/** Icons buttons are simple, icon-only buttons that can be used for actions and in toolbars. */\n\n@Component({\n tag: 'nano-icon-button',\n styleUrl: 'icon-button.scss',\n scoped: true,\n})\nexport class IconButton implements ComponentInterface {\n private button: HTMLButtonElement;\n\n /** The name of the icon to draw. */\n @Prop() iconName?: string;\n\n /** An external URL of an SVG file. */\n @Prop() iconSrc?: string;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true }) type: 'submit' | 'reset' | 'button' = 'button';\n\n /** The name of the button, submitted as a pair with the button’s value as part of the form data. */\n @Prop({ reflect: true }) name?: string;\n\n /** Defines the value associated with the button’s name when it’s submitted with the form data. */\n @Prop({ reflect: true }) value?: string;\n\n /** A description that gets read by screen readers and other assistive devices. For optimal accessibility, you should\n * always include a label that describes what the icon button does. */\n @Prop() label!: string;\n\n /** Set to true to disable the button. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Contains a URL or a URL fragment that the hyperlink points to.\n * If this property is set, an anchor tag will be rendered. */\n @Prop() href: string | undefined;\n\n /** Specifies where to display the linked URL. Only applies when an `href` is provided.\n * Special keywords: `\"_blank\"`, `\"_self\"`, `\"_parent\"`, `\"_top\"`. */\n @Prop() target: string | undefined;\n\n /** Sets focus on the internal button */\n @Method()\n async setFocus() {\n this.button.focus();\n }\n\n componentDidLoad() {\n focusVisible.observe(this.button);\n }\n\n connectedCallback() {\n if (this.button) focusVisible.observe(this.button);\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.button);\n }\n\n render() {\n const TagType = this.href === undefined ? 'button' : ('a' as any);\n\n return (\n <TagType\n part=\"base\"\n ref={(el) => (this.button = el)}\n class={{\n 'icon-button': true,\n 'icon-button--disabled': this.disabled,\n }}\n aria-label={this.label}\n name={this.name}\n value={this.value}\n href={this.href || undefined}\n target={this.href && this.target ? this.target : undefined}\n type={!this.href && this.type ? this.type : undefined}\n >\n <nano-icon name={this.iconName} src={this.iconSrc} aria-hidden=\"true\" />\n </TagType>\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  var __awaiter=this&&this.__awaiter||function(t,e,n,a){function i(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,r){function o(t){try{l(a.next(t))}catch(e){r(e)}}function s(t){try{l(a["throw"](t))}catch(e){r(e)}}function l(t){t.done?n(t.value):i(t.value).then(o,s)}l((a=a.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var n={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},a,i,r,o;return o={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o;function s(t){return function(e){return l([t,e])}}function l(o){if(a)throw new TypeError("Generator is already executing.");while(n)try{if(a=1,i&&(r=o[0]&2?i["return"]:o[0]?i["throw"]||((r=i["return"])&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;if(i=0,r)o=[o[0]&2,r.value];switch(o[0]){case 0:case 1:r=o;break;case 4:n.label++;return{value:o[1],done:false};case 5:n.label++;i=o[1];o=[0];continue;case 7:o=n.ops.pop();n.trys.pop();continue;default:if(!(r=n.trys,r=r.length>0&&r[r.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!r||o[1]>r[0]&&o[1]<r[3])){n.label=o[1];break}if(o[0]===6&&n.label<r[1]){n.label=r[1];r=o;break}if(r&&n.label<r[2]){n.label=r[2];n.ops.push(o);break}if(r[2])n.ops.pop();n.trys.pop();continue}o=e.call(t,n)}catch(s){o=[6,s];i=0}finally{a=r=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}};
2
2
  /*!
3
3
  * Web Components for Nanopore digital Web Apps
4
- */System.register(["./p-f48be9f5.system.js"],(function(t){"use strict";var e,n,a,i,r;return{setters:[function(t){e=t.r;n=t.c;a=t.h;i=t.e;r=t.g}],execute:function(){var o=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding:0.75rem 1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--active-bg:rgba(var(--bg-rgb), 1);--inactive-bg:rgba(var(--bg-rgb), 0.7);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;display:inline-block}:host([direction=vertical]){--padding:1rem}:host([direction=vertical]) .nanotab{font-size:var(--v-font-size)}:host([direction=vertical]) .nanotab.nanotab--active{font-weight:600;color:var(--active-text-color)}:host([direction=horizontal]) .nanotab{font-size:var(--h-font-size);margin-top:var(--tab-indicator-size);border-right:solid var(--tab-divider-size) var(--tab-divider-color)}:host([direction=horizontal]) .nanotab.nanotab--active{margin-top:0;border-top:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}.nanotab{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;margin-right:var(--tab-spacing);padding:var(--padding);display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;width:auto;background:var(--inactive-bg);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;overflow:visible;white-space:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab{margin-right:unset;-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing)}}.nanotab ::slotted(*){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(:last-of-type) .nanotab{margin-right:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(:last-of-type) .nanotab{margin-right:unset;-webkit-margin-end:0;margin-inline-end:0}}.nanotab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}.nanotab:focus{outline:none;outline-style:none;-webkit-box-shadow:none;box-shadow:none;border-color:transparent}.nanotab:focus:not(.nanotab--disabled){-webkit-box-shadow:var(--focus-shadow) inset;box-shadow:var(--focus-shadow) inset}.nanotab--disabled{background:rgba(var(--disabled-bg-rgb), 1);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}.nanotab__close-button{margin-left:var(--nano-spacing-small, 8px);--padding:var(--nano-spacing-xsmall, 4px) !important}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab__close-button{margin-left:unset;-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);}}";var s=0;var l=t("nano_tab",function(){function t(t){var a=this;e(this,t);this.nanoTabClose=n(this,"nanoTabClose",7);this.tabId="nano-tab-"+ ++s;this.panel="";this.active=false;this.disabled=false;this.closable=false;this.handleCloseClick=function(){a.nanoTabClose.emit()}}t.prototype.setFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){this.tab.focus({preventScroll:true});return[2]}))}))};t.prototype.removeFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){this.tab.blur();return[2]}))}))};t.prototype.render=function(){var t=this;return a(i,{id:this.host.id||this.tabId},a("div",{part:"base",ref:function(e){return t.tab=e},class:{nanotab:true,"nanotab--active":this.active,"nanotab--disabled":this.disabled,"nanotab--closable":this.closable},role:"tab","aria-disabled":this.disabled?"true":"false","aria-selected":this.active?"true":"false",tabindex:this.disabled||!this.active?"-1":"0"},a("slot",null),this.closable&&a("nano-icon-button",{label:"Close this tab",iconName:"light/times",class:"nanotab__close-button",onClick:this.handleCloseClick,tabIndex:-1})))};Object.defineProperty(t.prototype,"host",{get:function(){return r(this)},enumerable:false,configurable:true});return t}());l.style=o}}}));
5
- //# sourceMappingURL=p-d0385948.system.entry.js.map
4
+ */System.register(["./p-f48be9f5.system.js"],(function(t){"use strict";var e,n,a,i,r;return{setters:[function(t){e=t.r;n=t.c;a=t.h;i=t.e;r=t.g}],execute:function(){var o=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding:0.75rem 1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--active-bg:rgba(var(--bg-rgb), 1);--inactive-bg:rgba(var(--bg-rgb), 0.7);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;display:inline-block}:host([direction=vertical]){--padding:1rem}:host([direction=vertical]) .nanotab{font-size:var(--v-font-size)}:host([direction=vertical]) .nanotab.nanotab--active{font-weight:600;color:var(--active-text-color)}:host([direction=horizontal]) .nanotab{font-size:var(--h-font-size);margin-top:var(--tab-indicator-size);border-right:solid var(--tab-divider-size) var(--tab-divider-color)}:host([direction=horizontal]) .nanotab.nanotab--active{margin-top:0;border-top:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}.nanotab{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;margin-right:var(--tab-spacing);padding:var(--padding);display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;width:auto;background:var(--inactive-bg);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;overflow:visible;white-space:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab{margin-right:unset;-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing)}}.nanotab ::slotted(*){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(:last-of-type) .nanotab{margin-right:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(:last-of-type) .nanotab{margin-right:unset;-webkit-margin-end:0;margin-inline-end:0}}.nanotab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}.nanotab:focus{outline:none;outline-style:none;-webkit-box-shadow:none;box-shadow:none;border-color:transparent}.nanotab:focus:not(.nanotab--disabled){-webkit-box-shadow:var(--focus-shadow) inset;box-shadow:var(--focus-shadow) inset}.nanotab--disabled{background:rgba(var(--disabled-bg-rgb), 1);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}.nanotab__close-button{margin-left:var(--nano-spacing-small, 8px);--padding:var(--nano-spacing-xsmall, 4px) !important}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab__close-button{margin-left:unset;-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);}}";var s=0;var l=t("nano_tab",function(){function t(t){var a=this;e(this,t);this.nanoTabClose=n(this,"nanoTabClose",7);this.tabId="nano-tab-"+ ++s;this.panel="";this.active=false;this.disabled=false;this.closable=false;this.handleCloseClick=function(){a.nanoTabClose.emit()};this.handleCloseKeydown=function(t){if(t.key===" ")a.handleCloseClick()}}t.prototype.setFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){this.tab.focus({preventScroll:true});return[2]}))}))};t.prototype.removeFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){this.tab.blur();return[2]}))}))};t.prototype.render=function(){var t=this;return a(i,{id:this.host.id||this.tabId},a("div",{part:"base",ref:function(e){return t.tab=e},class:{nanotab:true,"nanotab--active":this.active,"nanotab--disabled":this.disabled,"nanotab--closable":this.closable},role:"tab","aria-disabled":this.disabled?"true":"false","aria-selected":this.active?"true":"false",tabindex:this.disabled||!this.active?"-1":"0"},a("slot",null),this.closable&&a("nano-icon-button",{label:"Close this tab",iconName:"light/times",class:"nanotab__close-button",onClick:this.handleCloseClick,onKeyDown:this.handleCloseKeydown,tabIndex:-1})))};Object.defineProperty(t.prototype,"host",{get:function(){return r(this)},enumerable:false,configurable:true});return t}());l.style=o}}}));
5
+ //# sourceMappingURL=p-93596c3d.system.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/tabs/tab.scss?tag=nano-tab&encapsulation=shadow","src/components/tabs/tab.tsx"],"names":["tabCss","id","Tab","exports","class_1","hostRef","_this","this","tabId","panel","active","disabled","closable","handleCloseClick","nanoTabClose","emit","handleCloseKeydown","e","key","prototype","setFocus","tab","focus","preventScroll","removeFocus","blur","render","h","Host","host","part","ref","el","class","nanotab","nanotab--active","nanotab--disabled","nanotab--closable","role","aria-disabled","aria-selected","tabindex","label","iconName","onClick","onKeyDown","tabIndex"],"mappings":";;;qKAAA,IAAMA,EAAS,gvGCYf,IAAIC,EAAK,MAWIC,EAAGC,EAAA,WAAA,WALhB,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,0DAMUA,KAAAC,MAAQ,eAAcP,EAMLM,KAAAE,MAAQ,GAGRF,KAAAG,OAAS,MAGTH,KAAAI,SAAW,MAG5BJ,KAAAK,SAAW,MAiBXL,KAAAM,iBAAmB,WACzBP,EAAKQ,aAAaC,QAGZR,KAAAS,mBAAqB,SAACC,GAC5B,GAAIA,EAAEC,MAAQ,IAAKZ,EAAKO,oBAfpBT,EAAAe,UAAAC,SAAN,gGACEb,KAAKc,IAAIC,MAAM,CAAEC,cAAe,wBAK5BnB,EAAAe,UAAAK,YAAN,gGACEjB,KAAKc,IAAII,wBAWXrB,EAAAe,UAAAO,OAAA,WAAA,IAAApB,EAAAC,KACE,OACEoB,EAACC,EAAI,CAAC3B,GAAIM,KAAKsB,KAAK5B,IAAMM,KAAKC,OAC7BmB,EAAA,MAAA,CACEG,KAAK,OACLC,IAAK,SAACC,GAAE,OAAM1B,EAAKe,IAAMW,GACzBC,MAAO,CACLC,QAAS,KACTC,kBAAmB5B,KAAKG,OACxB0B,oBAAqB7B,KAAKI,SAC1B0B,oBAAqB9B,KAAKK,UAE5B0B,KAAK,MAAKC,gBACKhC,KAAKI,SAAW,OAAS,QAAO6B,gBAChCjC,KAAKG,OAAS,OAAS,QACtC+B,SAAUlC,KAAKI,WAAaJ,KAAKG,OAAS,KAAO,KAEjDiB,EAAA,OAAA,MACCpB,KAAKK,UACJe,EAAA,mBAAA,CACEe,MAAM,iBACNC,SAAS,cACTV,MAAM,wBACNW,QAASrC,KAAKM,iBACdgC,UAAWtC,KAAKS,mBAChB8B,UAAW,8HAlET","sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/layers';\n\n/**\n * @prop --focus-shadow: Defaults to #{$control-focus-style};\n\n * @prop --padding: Defaults to .75rem 1rem on placement 'top' and 1rem on placement 'start';\n\n * @prop --bg-rgb: Defaults to #{$layer-bg-color-rgb};\n * @prop --active-bg: Defaults to rgba(var(--bg-rgb), 1);\n * @prop --disabled-bg-rgb: Defaults to var(--bg-rgb);\n * @prop --inactive-bg: Defaults to rgba(var(--bg-rgb), 0.7);\n\n * @prop --text-color: Defaults to #{map.get($colors, blue)};\n * @prop --disabled-text-color: Defaults to #{map.get($colors, darkgrey)};\n * @prop --active-text-color: Defaults to #{map.get($colors, darkblue)};\n\n * @prop --h-font-size: Defaults to .93em;\n * @prop --v-font-size: Defaults to .875em;\n * @prop --tab-spacing: Gap between tabs. Defaults to 1rem;\n * @prop --tab-divider-size: Defaults to 0;\n * @prop --tab-divider-color: Defaults to #{map.get($colors, lightblue)};\n */\n\n:host {\n --focus-shadow: #{$control-focus-style};\n --padding: 0.75rem 1rem;\n --bg-rgb: #{$layer-bg-color-rgb};\n --active-bg: rgba(var(--bg-rgb), 1);\n --inactive-bg: rgba(var(--bg-rgb), 0.7);\n --disabled-bg-rgb: var(--bg-rgb);\n --text-color: #{map.get($colors, blue)};\n --disabled-text-color: #{map.get($colors, darkgrey)};\n --active-text-color: #{map.get($colors, darkblue)};\n --h-font-size: 0.93em;\n --v-font-size: 0.875em;\n --tab-spacing: 0.5rem;\n --tab-divider-size: 0;\n --tab-divider-color: #{map.get($colors, lightblue)};\n --tab-indicator-size: 5px;\n\n display: inline-block;\n}\n\n:host([direction='vertical']) {\n --padding: 1rem;\n\n .nanotab {\n font-size: var(--v-font-size);\n\n &.nanotab--active {\n font-weight: 600;\n color: var(--active-text-color);\n }\n }\n}\n\n:host([direction='horizontal']) {\n .nanotab {\n font-size: var(--h-font-size);\n margin-top: var(--tab-indicator-size);\n border-right: solid var(--tab-divider-size) var(--tab-divider-color);\n\n &.nanotab--active {\n margin-top: 0;\n border-top: solid var(--tab-indicator-size) var(--tab-indicator-color);\n background: var(--active-bg);\n color: var(--active-text-color);\n }\n }\n}\n\n.nanotab {\n @include text-inherit();\n @include margin(null, var(--tab-spacing), null, null);\n\n padding: var(--padding);\n display: flex;\n height: 100%;\n width: auto;\n background: var(--inactive-bg);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n user-select: none;\n cursor: pointer;\n overflow: visible;\n white-space: nowrap;\n align-items: center;\n\n & ::slotted(*) {\n display: flex;\n align-items: center;\n }\n\n :host(:last-of-type) & {\n @include margin(null, 0, null, null);\n }\n\n &:hover:not(.tab--disabled) {\n text-shadow: 0 0 0.01px var(--text-color);\n }\n\n &:focus {\n outline: none;\n outline-style: none;\n box-shadow: none;\n border-color: transparent;\n }\n\n &:focus:not(.nanotab--disabled) {\n box-shadow: var(--focus-shadow) inset;\n }\n\n &--disabled {\n background: rgba(var(--disabled-bg-rgb), 1);\n opacity: 0.5;\n cursor: not-allowed;\n color: var(--disabled-text-color);\n }\n\n &__close-button {\n @include margin(null, null, null, #{$spacing-small});\n\n --padding: #{$spacing-xsmall} !important;\n }\n}\n","import {\n Component,\n Element,\n Host,\n ComponentInterface,\n Method,\n Prop,\n h,\n Event,\n EventEmitter,\n} from '@stencil/core';\n\nlet id = 0;\n\n/**\n * @slot - The tab's label.\n */\n\n@Component({\n tag: 'nano-tab',\n styleUrl: 'tab.scss',\n shadow: true,\n})\nexport class Tab implements ComponentInterface {\n private tabId = `nano-tab-${++id}`;\n private tab: HTMLElement;\n\n @Element() host: HTMLNanoTabElement;\n\n /** The name of the tab panel the tab will control. The panel must be located in the same tab group. */\n @Prop({ reflect: true }) panel = '';\n\n /** The active, selected tab. If none active, the first will automatically be selected. */\n @Prop({ reflect: true }) active = false;\n\n /** Set to true to draw the tab in an active state. */\n @Prop({ reflect: true }) disabled = false;\n\n /** When true, the tab will be rendered with a close icon. */\n @Prop() closable = false;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabClose: EventEmitter;\n\n /** Sets focus to the tab. */\n @Method()\n async setFocus() {\n this.tab.focus({ preventScroll: true });\n }\n\n /** Removes focus from the tab. */\n @Method()\n async removeFocus() {\n this.tab.blur();\n }\n\n private handleCloseClick = () => {\n this.nanoTabClose.emit();\n };\n\n private handleCloseKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ') this.handleCloseClick();\n };\n\n render() {\n return (\n <Host id={this.host.id || this.tabId}>\n <div\n part=\"base\"\n ref={(el) => (this.tab = el)}\n class={{\n nanotab: true,\n 'nanotab--active': this.active,\n 'nanotab--disabled': this.disabled,\n 'nanotab--closable': this.closable,\n }}\n role=\"tab\"\n aria-disabled={this.disabled ? 'true' : 'false'}\n aria-selected={this.active ? 'true' : 'false'}\n tabindex={this.disabled || !this.active ? '-1' : '0'}\n >\n <slot />\n {this.closable && (\n <nano-icon-button\n label=\"Close this tab\"\n iconName=\"light/times\"\n class=\"nanotab__close-button\"\n onClick={this.handleCloseClick}\n onKeyDown={this.handleCloseKeydown}\n tabIndex={-1}\n />\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import{r as t,c as a,h as i,e as n,g as e}from"./p-b5c33aff.js";const o=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding:0.75rem 1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--active-bg:rgba(var(--bg-rgb), 1);--inactive-bg:rgba(var(--bg-rgb), 0.7);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;display:inline-block}:host([direction=vertical]){--padding:1rem}:host([direction=vertical]) .nanotab{font-size:var(--v-font-size)}:host([direction=vertical]) .nanotab.nanotab--active{font-weight:600;color:var(--active-text-color)}:host([direction=horizontal]) .nanotab{font-size:var(--h-font-size);margin-top:var(--tab-indicator-size);border-right:solid var(--tab-divider-size) var(--tab-divider-color)}:host([direction=horizontal]) .nanotab.nanotab--active{margin-top:0;border-top:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}.nanotab{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;margin-right:var(--tab-spacing);padding:var(--padding);display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;width:auto;background:var(--inactive-bg);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;overflow:visible;white-space:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab{margin-right:unset;-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing)}}.nanotab ::slotted(*){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(:last-of-type) .nanotab{margin-right:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(:last-of-type) .nanotab{margin-right:unset;-webkit-margin-end:0;margin-inline-end:0}}.nanotab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}.nanotab:focus{outline:none;outline-style:none;-webkit-box-shadow:none;box-shadow:none;border-color:transparent}.nanotab:focus:not(.nanotab--disabled){-webkit-box-shadow:var(--focus-shadow) inset;box-shadow:var(--focus-shadow) inset}.nanotab--disabled{background:rgba(var(--disabled-bg-rgb), 1);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}.nanotab__close-button{margin-left:var(--nano-spacing-small, 8px);--padding:var(--nano-spacing-xsmall, 4px) !important}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab__close-button{margin-left:unset;-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);}}";let r=0;let s=class{constructor(i){t(this,i);this.nanoTabClose=a(this,"nanoTabClose",7);this.tabId=`nano-tab-${++r}`;this.panel="";this.active=false;this.disabled=false;this.closable=false;this.handleCloseClick=()=>{this.nanoTabClose.emit()}}async setFocus(){this.tab.focus({preventScroll:true})}async removeFocus(){this.tab.blur()}render(){return i(n,{id:this.host.id||this.tabId},i("div",{part:"base",ref:t=>this.tab=t,class:{nanotab:true,"nanotab--active":this.active,"nanotab--disabled":this.disabled,"nanotab--closable":this.closable},role:"tab","aria-disabled":this.disabled?"true":"false","aria-selected":this.active?"true":"false",tabindex:this.disabled||!this.active?"-1":"0"},i("slot",null),this.closable&&i("nano-icon-button",{label:"Close this tab",iconName:"light/times",class:"nanotab__close-button",onClick:this.handleCloseClick,tabIndex:-1})))}get host(){return e(this)}};s.style=o;export{s as nano_tab};
5
- //# sourceMappingURL=p-3e930ac7.entry.js.map
4
+ import{r as t,c as a,h as i,e as n,g as e}from"./p-b5c33aff.js";const o=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding:0.75rem 1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--active-bg:rgba(var(--bg-rgb), 1);--inactive-bg:rgba(var(--bg-rgb), 0.7);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;display:inline-block}:host([direction=vertical]){--padding:1rem}:host([direction=vertical]) .nanotab{font-size:var(--v-font-size)}:host([direction=vertical]) .nanotab.nanotab--active{font-weight:600;color:var(--active-text-color)}:host([direction=horizontal]) .nanotab{font-size:var(--h-font-size);margin-top:var(--tab-indicator-size);border-right:solid var(--tab-divider-size) var(--tab-divider-color)}:host([direction=horizontal]) .nanotab.nanotab--active{margin-top:0;border-top:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}.nanotab{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;margin-right:var(--tab-spacing);padding:var(--padding);display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;width:auto;background:var(--inactive-bg);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;overflow:visible;white-space:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab{margin-right:unset;-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing)}}.nanotab ::slotted(*){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(:last-of-type) .nanotab{margin-right:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(:last-of-type) .nanotab{margin-right:unset;-webkit-margin-end:0;margin-inline-end:0}}.nanotab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}.nanotab:focus{outline:none;outline-style:none;-webkit-box-shadow:none;box-shadow:none;border-color:transparent}.nanotab:focus:not(.nanotab--disabled){-webkit-box-shadow:var(--focus-shadow) inset;box-shadow:var(--focus-shadow) inset}.nanotab--disabled{background:rgba(var(--disabled-bg-rgb), 1);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}.nanotab__close-button{margin-left:var(--nano-spacing-small, 8px);--padding:var(--nano-spacing-xsmall, 4px) !important}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nanotab__close-button{margin-left:unset;-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);}}";let r=0;let s=class{constructor(i){t(this,i);this.nanoTabClose=a(this,"nanoTabClose",7);this.tabId=`nano-tab-${++r}`;this.panel="";this.active=false;this.disabled=false;this.closable=false;this.handleCloseClick=()=>{this.nanoTabClose.emit()};this.handleCloseKeydown=t=>{if(t.key===" ")this.handleCloseClick()}}async setFocus(){this.tab.focus({preventScroll:true})}async removeFocus(){this.tab.blur()}render(){return i(n,{id:this.host.id||this.tabId},i("div",{part:"base",ref:t=>this.tab=t,class:{nanotab:true,"nanotab--active":this.active,"nanotab--disabled":this.disabled,"nanotab--closable":this.closable},role:"tab","aria-disabled":this.disabled?"true":"false","aria-selected":this.active?"true":"false",tabindex:this.disabled||!this.active?"-1":"0"},i("slot",null),this.closable&&i("nano-icon-button",{label:"Close this tab",iconName:"light/times",class:"nanotab__close-button",onClick:this.handleCloseClick,onKeyDown:this.handleCloseKeydown,tabIndex:-1})))}get host(){return e(this)}};s.style=o;export{s as nano_tab};
5
+ //# sourceMappingURL=p-9d9b0b66.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/tabs/tab.scss?tag=nano-tab&encapsulation=shadow","src/components/tabs/tab.tsx"],"names":["tabCss","id","Tab","[object Object]","hostRef","this","tabId","panel","active","disabled","closable","handleCloseClick","nanoTabClose","emit","handleCloseKeydown","e","key","tab","focus","preventScroll","blur","h","Host","host","part","ref","el","class","nanotab","nanotab--active","nanotab--disabled","nanotab--closable","role","aria-disabled","aria-selected","tabindex","label","iconName","onClick","onKeyDown","tabIndex"],"mappings":";;;gEAAA,MAAMA,EAAS,gvGCYf,IAAIC,EAAK,MAWIC,EAAG,MALhBC,YAAAC,wDAMUC,KAAAC,MAAQ,cAAcL,IAMLI,KAAAE,MAAQ,GAGRF,KAAAG,OAAS,MAGTH,KAAAI,SAAW,MAG5BJ,KAAAK,SAAW,MAiBXL,KAAAM,iBAAmB,KACzBN,KAAKO,aAAaC,QAGZR,KAAAS,mBAAsBC,IAC5B,GAAIA,EAAEC,MAAQ,IAAKX,KAAKM,oBAf1BR,iBACEE,KAAKY,IAAIC,MAAM,CAAEC,cAAe,OAKlChB,oBACEE,KAAKY,IAAIG,OAWXjB,SACE,OACEkB,EAACC,EAAI,CAACrB,GAAII,KAAKkB,KAAKtB,IAAMI,KAAKC,OAC7Be,EAAA,MAAA,CACEG,KAAK,OACLC,IAAMC,GAAQrB,KAAKY,IAAMS,EACzBC,MAAO,CACLC,QAAS,KACTC,kBAAmBxB,KAAKG,OACxBsB,oBAAqBzB,KAAKI,SAC1BsB,oBAAqB1B,KAAKK,UAE5BsB,KAAK,MAAKC,gBACK5B,KAAKI,SAAW,OAAS,QAAOyB,gBAChC7B,KAAKG,OAAS,OAAS,QACtC2B,SAAU9B,KAAKI,WAAaJ,KAAKG,OAAS,KAAO,KAEjDa,EAAA,OAAA,MACChB,KAAKK,UACJW,EAAA,mBAAA,CACEe,MAAM,iBACNC,SAAS,cACTV,MAAM,wBACNW,QAASjC,KAAKM,iBACd4B,UAAWlC,KAAKS,mBAChB0B,UAAW","sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/layers';\n\n/**\n * @prop --focus-shadow: Defaults to #{$control-focus-style};\n\n * @prop --padding: Defaults to .75rem 1rem on placement 'top' and 1rem on placement 'start';\n\n * @prop --bg-rgb: Defaults to #{$layer-bg-color-rgb};\n * @prop --active-bg: Defaults to rgba(var(--bg-rgb), 1);\n * @prop --disabled-bg-rgb: Defaults to var(--bg-rgb);\n * @prop --inactive-bg: Defaults to rgba(var(--bg-rgb), 0.7);\n\n * @prop --text-color: Defaults to #{map.get($colors, blue)};\n * @prop --disabled-text-color: Defaults to #{map.get($colors, darkgrey)};\n * @prop --active-text-color: Defaults to #{map.get($colors, darkblue)};\n\n * @prop --h-font-size: Defaults to .93em;\n * @prop --v-font-size: Defaults to .875em;\n * @prop --tab-spacing: Gap between tabs. Defaults to 1rem;\n * @prop --tab-divider-size: Defaults to 0;\n * @prop --tab-divider-color: Defaults to #{map.get($colors, lightblue)};\n */\n\n:host {\n --focus-shadow: #{$control-focus-style};\n --padding: 0.75rem 1rem;\n --bg-rgb: #{$layer-bg-color-rgb};\n --active-bg: rgba(var(--bg-rgb), 1);\n --inactive-bg: rgba(var(--bg-rgb), 0.7);\n --disabled-bg-rgb: var(--bg-rgb);\n --text-color: #{map.get($colors, blue)};\n --disabled-text-color: #{map.get($colors, darkgrey)};\n --active-text-color: #{map.get($colors, darkblue)};\n --h-font-size: 0.93em;\n --v-font-size: 0.875em;\n --tab-spacing: 0.5rem;\n --tab-divider-size: 0;\n --tab-divider-color: #{map.get($colors, lightblue)};\n --tab-indicator-size: 5px;\n\n display: inline-block;\n}\n\n:host([direction='vertical']) {\n --padding: 1rem;\n\n .nanotab {\n font-size: var(--v-font-size);\n\n &.nanotab--active {\n font-weight: 600;\n color: var(--active-text-color);\n }\n }\n}\n\n:host([direction='horizontal']) {\n .nanotab {\n font-size: var(--h-font-size);\n margin-top: var(--tab-indicator-size);\n border-right: solid var(--tab-divider-size) var(--tab-divider-color);\n\n &.nanotab--active {\n margin-top: 0;\n border-top: solid var(--tab-indicator-size) var(--tab-indicator-color);\n background: var(--active-bg);\n color: var(--active-text-color);\n }\n }\n}\n\n.nanotab {\n @include text-inherit();\n @include margin(null, var(--tab-spacing), null, null);\n\n padding: var(--padding);\n display: flex;\n height: 100%;\n width: auto;\n background: var(--inactive-bg);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n user-select: none;\n cursor: pointer;\n overflow: visible;\n white-space: nowrap;\n align-items: center;\n\n & ::slotted(*) {\n display: flex;\n align-items: center;\n }\n\n :host(:last-of-type) & {\n @include margin(null, 0, null, null);\n }\n\n &:hover:not(.tab--disabled) {\n text-shadow: 0 0 0.01px var(--text-color);\n }\n\n &:focus {\n outline: none;\n outline-style: none;\n box-shadow: none;\n border-color: transparent;\n }\n\n &:focus:not(.nanotab--disabled) {\n box-shadow: var(--focus-shadow) inset;\n }\n\n &--disabled {\n background: rgba(var(--disabled-bg-rgb), 1);\n opacity: 0.5;\n cursor: not-allowed;\n color: var(--disabled-text-color);\n }\n\n &__close-button {\n @include margin(null, null, null, #{$spacing-small});\n\n --padding: #{$spacing-xsmall} !important;\n }\n}\n","import {\n Component,\n Element,\n Host,\n ComponentInterface,\n Method,\n Prop,\n h,\n Event,\n EventEmitter,\n} from '@stencil/core';\n\nlet id = 0;\n\n/**\n * @slot - The tab's label.\n */\n\n@Component({\n tag: 'nano-tab',\n styleUrl: 'tab.scss',\n shadow: true,\n})\nexport class Tab implements ComponentInterface {\n private tabId = `nano-tab-${++id}`;\n private tab: HTMLElement;\n\n @Element() host: HTMLNanoTabElement;\n\n /** The name of the tab panel the tab will control. The panel must be located in the same tab group. */\n @Prop({ reflect: true }) panel = '';\n\n /** The active, selected tab. If none active, the first will automatically be selected. */\n @Prop({ reflect: true }) active = false;\n\n /** Set to true to draw the tab in an active state. */\n @Prop({ reflect: true }) disabled = false;\n\n /** When true, the tab will be rendered with a close icon. */\n @Prop() closable = false;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabClose: EventEmitter;\n\n /** Sets focus to the tab. */\n @Method()\n async setFocus() {\n this.tab.focus({ preventScroll: true });\n }\n\n /** Removes focus from the tab. */\n @Method()\n async removeFocus() {\n this.tab.blur();\n }\n\n private handleCloseClick = () => {\n this.nanoTabClose.emit();\n };\n\n private handleCloseKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ') this.handleCloseClick();\n };\n\n render() {\n return (\n <Host id={this.host.id || this.tabId}>\n <div\n part=\"base\"\n ref={(el) => (this.tab = el)}\n class={{\n nanotab: true,\n 'nanotab--active': this.active,\n 'nanotab--disabled': this.disabled,\n 'nanotab--closable': this.closable,\n }}\n role=\"tab\"\n aria-disabled={this.disabled ? 'true' : 'false'}\n aria-selected={this.active ? 'true' : 'false'}\n tabindex={this.disabled || !this.active ? '-1' : '0'}\n >\n <slot />\n {this.closable && (\n <nano-icon-button\n label=\"Close this tab\"\n iconName=\"light/times\"\n class=\"nanotab__close-button\"\n onClick={this.handleCloseClick}\n onKeyDown={this.handleCloseKeydown}\n tabIndex={-1}\n />\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ import{h as e,r as t,c as a,e as i,g as s}from"./p-b5c33aff.js";import{b as o,D as n,i as d,p as r,d as l,s as c,e as h,f as u,g as b,h as f,j as p,k as _,a as v}from"./p-70272eae.js";import{c as x}from"./p-d99437a6.js";import{f as g}from"./p-f8f89998.js";var w;(function(e){e[e["Sunday"]=0]="Sunday";e[e["Monday"]=1]="Monday";e[e["Tuesday"]=2]="Tuesday";e[e["Wednesday"]=3]="Wednesday";e[e["Thursday"]=4]="Thursday";e[e["Friday"]=5]="Friday";e[e["Saturday"]=6]="Saturday"})(w||(w={}));function y(e,t){if(e==null||t==null){return false}return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function m(e,t){var a=new Date(e);a.setDate(a.getDate()+t);return a}function k(e,t=w.Monday){var a=new Date(e);var i=a.getDay();var s=(i<t?7:0)+i-t;a.setDate(a.getDate()-s);return a}function D(e,t=w.Monday){var a=new Date(e);var i=a.getDay();var s=(i<t?-7:0)+6-(i-t);a.setDate(a.getDate()+s);return a}function z(e){return new Date(e.getFullYear(),e.getMonth(),1)}function M(e){return new Date(e.getFullYear(),e.getMonth()+1,0)}function S(e,t,a){return C(e,t,a)===e}function C(e,t,a){const i=e.getTime();if(t&&t instanceof Date&&i<t.getTime()){return t}if(a&&a instanceof Date&&i>a.getTime()){return a}return e}function N(e,t){const a=[];let i=e;while(!y(i,t)){a.push(i);i=m(i,1)}a.push(i);return a}function T(e,t=w.Monday){const a=k(z(e),t);const i=D(M(e),t);return N(a,i)}const F=({focusedDay:t,today:a,day:i,onDaySelect:s,onKeyboardNavigation:o,focusedDayRef:n,inRange:d,disabled:r,isSelected:l})=>{const c=y(i,a);const h=y(i,t);const u=i.getMonth()!==t.getMonth()||r;const b=!d;function f(e){s(e,i)}return e("button",{class:{"duet-date__day":true,"is-outside":b,"is-disabled":u,"is-today":c},tabIndex:h?0:-1,onClick:f,onKeyDown:o,disabled:b,type:"button","aria-pressed":l?"true":"false",ref:e=>{if(h&&e&&n){n(e)}}},e("span",{"aria-hidden":"true"},i.getDate()),e("span",{class:"duet-date__vhidden"},i.toLocaleDateString(undefined,{day:"numeric",month:"long"})))};function j(e,t){const a=[];for(let i=0;i<e.length;i+=t){a.push(e.slice(i,i+t))}return a}function L(e,t,a){return e.map(((i,s)=>{const o=(s+t)%e.length;return a(e[o])}))}const A=({selectedDate:t,focusedDate:a,labelledById:i,localization:s,firstDayOfWeek:o,min:n,max:d,onDateSelect:r,onKeyboardNavigation:l,focusedDayRef:c,onMouseDown:h,onFocusIn:u,isDateDisabled:b})=>{const f=new Date;const p=T(a,o);return e("table",{class:"duet-date__table",role:"grid","aria-labelledby":i,onFocusin:u,onMouseDown:h},e("thead",null,e("tr",null,L(s.dayNames,o,(t=>e("th",{class:"duet-date__table-header",scope:"col"},e("span",{"aria-hidden":"true"},t.substr(0,2)),e("span",{class:"duet-date__vhidden"},t)))))),e("tbody",null,j(p,7).map((i=>e("tr",{class:"duet-date__row"},i.map((i=>e("td",{class:"duet-date__cell",role:"gridcell","aria-selected":y(i,t)?"true":undefined},e(F,{day:i,today:f,focusedDay:a,inRange:S(i,n,d),onDaySelect:r,onKeyboardNavigation:l,focusedDayRef:c,disabled:b(i),isSelected:y(i,t)})))))))))};const Y={buttonLabel:"Choose date",placeholder:"YYYY-MM-DD",selectedDateMessage:"Selected date is",prevMonthLabel:"Previous month",nextMonthLabel:"Next month",monthSelectLabel:"Month",yearSelectLabel:"Year",closeLabel:"Close window",keyboardInstruction:"You can use arrow keys to navigate dates",calendarHeading:"Choose a date",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]};const I=':host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--background:var(--nano-layer-bg, #fff);--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--inactive-color:var(--nano-button-color, #f0efed);display:block;font-size:16px}:host(.nano-color){--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(--nano-color-contrast);--focus-shadow:0 0 0 0.1875rem 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) !important;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}';function O(e,t){var a=[];for(var i=e;i<=t;i++){a.push(i)}return a}let R=class{constructor(e){t(this,e);this.nanoDatePicked=a(this,"nanoDatePicked",7);this.monthSelectId=o("NanoDateMonth");this.yearSelectId=o("NanoDateYear");this.dialogLabelId=o("NanoDateLabel");this.initialTouchX=null;this.initialTouchY=null;this.activeFocus=false;this.focusedDay=new Date;this.selectedDate="";this.min="";this.max="";this.firstDayOfWeek=n.Monday;this.localization=Y;this.isDateDisabled=()=>false;this.isModal=false;this.enableActiveFocus=()=>{this.activeFocus=true};this.disableActiveFocus=()=>{this.activeFocus=false};this.handleTouchStart=e=>{const t=e.changedTouches[0];this.initialTouchX=t.pageX;this.initialTouchY=t.pageY};this.handleTouchMove=e=>{e.preventDefault()};this.handleTouchEnd=e=>{const t=e.changedTouches[0];const a=t.pageX-this.initialTouchX;const i=t.pageY-this.initialTouchY;const s=70;const o=Math.abs(a)>=s&&Math.abs(i)<=s;if(o){this.addMonths(a<0?1:-1)}this.initialTouchY=null;this.initialTouchX=null};this.handleNextMonthClick=e=>{e.preventDefault();this.addMonths(1)};this.handlePreviousMonthClick=e=>{e.preventDefault();this.addMonths(-1)};this.handleKeyboardNavigation=e=>{if(e.key==="Tab"&&!e.shiftKey&&this.isModal){e.preventDefault();let t=this.firstFocusEle||this.firstFocusableElement;t.focus();return}var t=true;switch(e.key){case"ArrowRight":this.addDays(1);break;case"ArrowLeft":this.addDays(-1);break;case"ArrowDown":this.addDays(7);break;case"ArrowUp":this.addDays(-7);break;case"PageUp":if(e.shiftKey){this.addYears(-1)}else{this.addMonths(-1)}break;case"PageDown":if(e.shiftKey){this.addYears(1)}else{this.addMonths(1)}break;case"Home":this.startOfWeek();break;case"End":this.endOfWeek();break;default:t=false}if(t){e.preventDefault();this.enableActiveFocus()}};this.handleDaySelect=(e,t)=>{const a=!this.isDateDisabled(t);const i=d(t,r(this.min),r(this.max));if(!i||!a){return}if(t.getMonth()===this.focusedDay.getMonth()){this.setValue(t)}else{this.setFocusedDay(t)}};this.handleMonthSelect=e=>{this.setMonth(parseInt(e.target.value,10))};this.handleYearSelect=e=>{this.setYear(parseInt(e.target.value,10))};this.processFocusedDayNode=e=>{this.focusedDayNode=e;if(this.activeFocus){setTimeout((()=>e.focus()),0)}}}async setFocus(e=false,t=false){this.setFocusedDay(r(this.selectedDate)||new Date);if(e){setTimeout((e=>this.focusedDayNode.focus()),20);return}clearTimeout(this.focusTimeoutId);this.focusTimeoutId=setTimeout((()=>{if(t)g.force(this.monthSelectNode);this.monthSelectNode.focus()}),20)}handleSelectedDateChange(){this.setFocus(true)}addDays(e){this.setFocusedDay(l(this.focusedDay,e))}addMonths(e){this.setMonth(this.focusedDay.getMonth()+e)}addYears(e){this.setYear(this.focusedDay.getFullYear()+e)}startOfWeek(){this.setFocusedDay(c(this.focusedDay,this.firstDayOfWeek))}endOfWeek(){this.setFocusedDay(h(this.focusedDay,this.firstDayOfWeek))}setMonth(e){const t=u(b(this.focusedDay),e);const a=f(t);const i=u(this.focusedDay,e);this.setFocusedDay(p(i,t,a))}setYear(e){const t=_(b(this.focusedDay),e);const a=f(t);const i=_(this.focusedDay,e);this.setFocusedDay(p(i,t,a))}setFocusedDay(e){this.focusedDay=p(e,r(this.min),r(this.max))}setValue(e){this.selectedDate=v(e);this.nanoDatePicked.emit({value:this.selectedDate,valueAsDate:e})}connectedCallback(){if(this.yearSelectNode)g.observe(this.yearSelectNode);if(this.monthSelectNode)g.observe(this.monthSelectNode)}componentWillLoad(){this.handleSelectedDateChange()}componentDidLoad(){this.connectedCallback()}disconnectedCallback(){g.unobserve(this.yearSelectNode);g.unobserve(this.monthSelectNode)}render(){const t=r(this.selectedDate);const a=(t||this.focusedDay).getFullYear();const s=this.focusedDay.getMonth();const o=this.focusedDay.getFullYear();const n=r(this.min);const l=r(this.max);const c=n!=null&&n.getMonth()===s&&n.getFullYear()===o;const h=l!=null&&l.getMonth()===s&&l.getFullYear()===o;let u=a-10;let p=a+10;if(n)u=n.getFullYear();if(l)p=l.getFullYear();return e(i,{class:Object.assign({},x(this.color))},e("div",{class:"duet-date"},e("div",{class:{"duet-date__dialog":true,"is-active":true},onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},e("div",{class:"duet-date__dialog-content"},e("div",{class:"duet-date__vhidden duet-date__instructions","aria-live":"polite"},this.localization.keyboardInstruction),e("div",{class:"duet-date__header",onFocusin:this.disableActiveFocus},e("div",null,e("h2",{id:this.dialogLabelId,class:"duet-date__vhidden","aria-live":"polite"},this.localization.monthNames[s]," ",this.focusedDay.getFullYear()),e("label",{htmlFor:this.monthSelectId,class:"duet-date__vhidden"},this.localization.monthSelectLabel),e("div",{class:"duet-date__select"},e("select",{id:this.monthSelectId,class:"duet-date__select--month",ref:e=>this.firstFocusableElement=this.monthSelectNode=e,onChange:this.handleMonthSelect},this.localization.monthNames.map(((t,a)=>e("option",{key:t,value:a,selected:a===s,disabled:!d(new Date(o,a,1),n?b(n):null,l?f(l):null)},t)))),e("div",{class:"duet-date__select-label","aria-hidden":"true"},e("span",null,this.localization.monthNamesShort[s]),e("nano-icon",{name:"light/chevron-down"}))),e("label",{htmlFor:this.yearSelectId,class:"duet-date__vhidden"},this.localization.yearSelectLabel),e("div",{class:"duet-date__select"},e("select",{id:this.yearSelectId,class:"duet-date__select--year",onChange:this.handleYearSelect,ref:e=>this.yearSelectNode=e},O(u,p).map((t=>e("option",{key:t,selected:t===o},t)))),e("div",{class:"duet-date__select-label","aria-hidden":"true"},e("span",null,this.focusedDay.getFullYear()),e("nano-icon",{name:"light/chevron-down"})))),e("div",{class:"duet-date__nav"},e("button",{class:"duet-date__prev",onClick:this.handlePreviousMonthClick,disabled:c,type:"button"},e("nano-icon",{name:"light/chevron-left"}),e("span",{class:"duet-date__vhidden"},this.localization.prevMonthLabel)),e("button",{class:"duet-date__next",onClick:this.handleNextMonthClick,disabled:h,type:"button"},e("nano-icon",{name:"light/chevron-right"}),e("span",{class:"duet-date__vhidden"},this.localization.nextMonthLabel)))),e("div",null,e(A,{selectedDate:t,focusedDate:this.focusedDay,onDateSelect:this.handleDaySelect,onKeyboardNavigation:this.handleKeyboardNavigation,labelledById:this.dialogLabelId,localization:this.localization,firstDayOfWeek:this.firstDayOfWeek,focusedDayRef:this.processFocusedDayNode,min:n,max:l,isDateDisabled:this.isDateDisabled}))))))}get host(){return s(this)}static get watchers(){return{selectedDate:["handleSelectedDateChange"]}}};R.style=I;export{R as nano_date_picker};
5
+ //# sourceMappingURL=p-9ffdf6cc.entry.js.map
@@ -1 +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.scss?tag=nano-date-picker&encapsulation=shadow","src/components/date-picker/date-picker.tsx"],"names":["DaysOfWeek","isEqual","a","b","getFullYear","getMonth","getDate","addDays","date","days","d","Date","setDate","startOfWeek","firstDayOfWeek","Monday","day","getDay","diff","endOfWeek","startOfMonth","endOfMonth","inRange","min","max","clamp","time","getTime","getDaysInRange","start","end","current","push","getViewOfMonth","DatePickerDay","focusedDay","today","onDaySelect","onKeyboardNavigation","focusedDayRef","disabled","isSelected","isToday","isFocused","isDisabled","isOutsideRange","handleClick","e","h","class","duet-date__day","is-outside","is-disabled","is-today","tabIndex","onClick","onKeyDown","type","aria-pressed","ref","el","aria-hidden","toLocaleDateString","undefined","month","chunk","array","chunkSize","result","i","length","slice","mapWithOffset","startingOffset","mapFn","map","_","adjustedIndex","DatePickerMonth","selectedDate","focusedDate","labelledById","localization","onDateSelect","onMouseDown","onFocusIn","isDateDisabled","role","aria-labelledby","onFocusin","dayNames","dayName","scope","substr","week","aria-selected","buttonLabel","placeholder","selectedDateMessage","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","closeLabel","keyboardInstruction","calendarHeading","monthNames","monthNamesShort","datePickerCss","range","from","to","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","threshold","isHorizontalSwipe","Math","abs","addMonths","handleNextMonthClick","handlePreviousMonthClick","handleKeyboardNavigation","key","shiftKey","ele","firstFocusEle","firstFocusableElement","focus","handled","addYears","handleDaySelect","_event","isAllowed","isInRange","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"],"mappings":"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","sourcesContent":["const ISO_DATE_FORMAT = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nexport enum DaysOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\nexport function createDate(year: string, month: string, day: string): Date {\n var dayInt = parseInt(day, 10);\n var monthInt = parseInt(month, 10);\n var yearInt = parseInt(year, 10);\n\n const isValid =\n Number.isInteger(yearInt) && // all parts should be integers\n Number.isInteger(monthInt) &&\n Number.isInteger(dayInt) &&\n monthInt > 0 && // month must be 1-12\n monthInt <= 12 &&\n dayInt > 0 && // day must be 1-31\n dayInt <= 31 &&\n yearInt > 0;\n\n if (isValid) {\n return new Date(yearInt, monthInt - 1, dayInt);\n }\n}\n\n/**\n * @param value date string in ISO format YYYY-MM-DD\n */\nexport function parseISODate(value: string): Date {\n if (!value) {\n return;\n }\n\n const matches = value.match(ISO_DATE_FORMAT);\n\n if (matches) {\n return createDate(matches[1], matches[2], matches[3]);\n }\n}\n\n/**\n * print date in format YYYY-MM-DD\n * @param date\n */\nexport function printISODate(date: Date): string {\n if (!date) {\n return '';\n }\n\n var d = date.getDate().toString(10);\n var m = (date.getMonth() + 1).toString(10);\n var y = date.getFullYear().toString(10);\n\n // days are not zero-indexed, so pad if less than 10\n if (date.getDate() < 10) {\n d = `0${d}`;\n }\n\n // months *are* zero-indexed, pad if less than 9!\n if (date.getMonth() < 9) {\n m = `0${m}`;\n }\n\n return `${y}-${m}-${d}`;\n}\n\n/**\n * Compare if two dates are equal in terms of day, month, and year\n */\nexport function isEqual(a: Date, b: Date): boolean {\n if (a == null || b == null) {\n return false;\n }\n\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function addDays(date: Date, days: number): Date {\n var d = new Date(date);\n d.setDate(d.getDate() + days);\n return d;\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const d = new Date(date);\n d.setMonth(date.getMonth() + months);\n return d;\n}\n\nexport function addYears(date: Date, years: number): Date {\n const d = new Date(date);\n d.setFullYear(date.getFullYear() + years);\n return d;\n}\n\nexport function startOfWeek(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date {\n var d = new Date(date);\n var day = d.getDay();\n var diff = (day < firstDayOfWeek ? 7 : 0) + day - firstDayOfWeek;\n\n d.setDate(d.getDate() - diff);\n return d;\n}\n\nexport function endOfWeek(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date {\n var d = new Date(date);\n var day = d.getDay();\n var diff = (day < firstDayOfWeek ? -7 : 0) + 6 - (day - firstDayOfWeek);\n\n d.setDate(d.getDate() + diff);\n return d;\n}\n\nexport function startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nexport function endOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const d = new Date(date);\n d.setMonth(month);\n return d;\n}\n\nexport function setYear(date: Date, year: number): Date {\n const d = new Date(date);\n d.setFullYear(year);\n return d;\n}\n\n/**\n * Check if date is within a min and max\n */\nexport function inRange(date: Date, min?: Date, max?: Date): boolean {\n return clamp(date, min, max) === date;\n}\n\n/**\n * Ensures date is within range, returns min or max if out of bounds\n */\nexport function clamp(date: Date, min?: Date, max?: Date): Date {\n const time = date.getTime();\n\n if (min && min instanceof Date && time < min.getTime()) {\n return min;\n }\n\n if (max && max instanceof Date && time > max.getTime()) {\n return max;\n }\n\n return date;\n}\n\n/**\n * given start and end date, return an (inclusive) array of all dates in between\n * @param start\n * @param end\n */\nfunction getDaysInRange(start: Date, end: Date): Date[] {\n const days: Date[] = [];\n let current = start;\n\n while (!isEqual(current, end)) {\n days.push(current);\n current = addDays(current, 1);\n }\n\n days.push(current);\n\n return days;\n}\n\n/**\n * given a date, return an array of dates from a calendar perspective\n * @param date\n * @param firstDayOfWeek\n */\nexport function getViewOfMonth(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date[] {\n const start = startOfWeek(startOfMonth(date), firstDayOfWeek);\n const end = endOfWeek(endOfMonth(date), firstDayOfWeek);\n\n return getDaysInRange(start, end);\n}\n\n/**\n * Form random hash\n */\nexport function chr4() {\n return Math.random().toString(16).slice(-4);\n}\n\n/**\n * Create random identifier with a prefix\n * @param prefix\n */\nexport function createIdentifier(prefix) {\n return `${prefix}-${chr4()}${chr4()}-${chr4()}-${chr4()}-${chr4()}-${chr4()}${chr4()}${chr4()}`;\n}\n","import { h, FunctionalComponent } from '@stencil/core';\nimport { isEqual } from './date-utils';\n\nexport type DatePickerDayProps = {\n focusedDay: Date;\n today: Date;\n day: Date;\n inRange: boolean;\n disabled: boolean;\n onDaySelect: (event: MouseEvent, day: Date) => void;\n onKeyboardNavigation: (event: KeyboardEvent) => void;\n focusedDayRef?: (element: HTMLButtonElement) => void;\n isSelected;\n};\n\nexport const DatePickerDay: FunctionalComponent<DatePickerDayProps> = ({\n focusedDay,\n today,\n day,\n onDaySelect,\n onKeyboardNavigation,\n focusedDayRef,\n inRange,\n disabled,\n isSelected,\n}) => {\n const isToday = isEqual(day, today);\n const isFocused = isEqual(day, focusedDay);\n const isDisabled = day.getMonth() !== focusedDay.getMonth() || disabled;\n const isOutsideRange = !inRange;\n\n function handleClick(e) {\n onDaySelect(e, day);\n }\n\n return (\n <button\n class={{\n 'duet-date__day': true,\n 'is-outside': isOutsideRange,\n 'is-disabled': isDisabled,\n 'is-today': isToday,\n }}\n tabIndex={isFocused ? 0 : -1}\n onClick={handleClick}\n onKeyDown={onKeyboardNavigation}\n disabled={isOutsideRange}\n type=\"button\"\n aria-pressed={isSelected ? 'true' : 'false'}\n ref={(el) => {\n if (isFocused && el && focusedDayRef) {\n focusedDayRef(el);\n }\n }}\n >\n <span aria-hidden=\"true\">{day.getDate()}</span>\n <span class=\"duet-date__vhidden\">\n {day.toLocaleDateString(undefined, { day: 'numeric', month: 'long' })}\n </span>\n </button>\n );\n};\n","import { h, FunctionalComponent } from '@stencil/core';\nimport { DuetLocalizedText } from './date-localization';\nimport { DatePickerDay, DatePickerDayProps } from './date-picker-day';\nimport { getViewOfMonth, inRange, DaysOfWeek, isEqual } from './date-utils';\nimport { DateDisabledPredicate } from '../../../interface';\n\nfunction chunk<T>(array: T[], chunkSize: number): T[][] {\n const result = [];\n\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n\nfunction mapWithOffset<T, U>(\n array: T[],\n startingOffset: number,\n mapFn: (item: T) => U\n): U[] {\n return array.map((_, i) => {\n const adjustedIndex = (i + startingOffset) % array.length;\n return mapFn(array[adjustedIndex]);\n });\n}\n\ntype DatePickerMonthProps = {\n selectedDate: Date;\n focusedDate: Date;\n labelledById: string;\n localization: DuetLocalizedText;\n firstDayOfWeek: DaysOfWeek;\n min?: Date;\n max?: Date;\n onDateSelect: DatePickerDayProps['onDaySelect'];\n onKeyboardNavigation: DatePickerDayProps['onKeyboardNavigation'];\n focusedDayRef: (element: HTMLButtonElement) => void;\n onFocusIn?: (e: FocusEvent) => void;\n onMouseDown?: (e: MouseEvent) => void;\n isDateDisabled: DateDisabledPredicate;\n};\n\nexport const DatePickerMonth: FunctionalComponent<DatePickerMonthProps> = ({\n selectedDate,\n focusedDate,\n labelledById,\n localization,\n firstDayOfWeek,\n min,\n max,\n onDateSelect,\n onKeyboardNavigation,\n focusedDayRef,\n onMouseDown,\n onFocusIn,\n isDateDisabled,\n}) => {\n const today = new Date();\n const days = getViewOfMonth(focusedDate, firstDayOfWeek);\n\n return (\n <table\n class=\"duet-date__table\"\n role=\"grid\"\n aria-labelledby={labelledById}\n // @ts-ignore\n onFocusin={onFocusIn}\n onMouseDown={onMouseDown}\n >\n <thead>\n <tr>\n {mapWithOffset(localization.dayNames, firstDayOfWeek, (dayName) => (\n <th class=\"duet-date__table-header\" scope=\"col\">\n <span aria-hidden=\"true\">{dayName.substr(0, 2)}</span>\n <span class=\"duet-date__vhidden\">{dayName}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {chunk(days, 7).map((week) => (\n <tr class=\"duet-date__row\">\n {week.map((day) => (\n <td\n class=\"duet-date__cell\"\n role=\"gridcell\"\n aria-selected={isEqual(day, selectedDate) ? 'true' : undefined}\n >\n <DatePickerDay\n day={day}\n today={today}\n focusedDay={focusedDate}\n inRange={inRange(day, min, max)}\n onDaySelect={onDateSelect}\n onKeyboardNavigation={onKeyboardNavigation}\n focusedDayRef={focusedDayRef}\n disabled={isDateDisabled(day)}\n isSelected={isEqual(day, selectedDate)}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n","type MonthsNames = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n];\ntype DayNames = [string, string, string, string, string, string, string];\n\nexport type DuetLocalizedText = {\n buttonLabel: string;\n placeholder: string;\n selectedDateMessage: string;\n prevMonthLabel: string;\n nextMonthLabel: string;\n monthSelectLabel: string;\n yearSelectLabel: string;\n closeLabel: string;\n keyboardInstruction: string;\n calendarHeading: string;\n dayNames: DayNames;\n monthNames: MonthsNames;\n monthNamesShort: MonthsNames;\n};\n\nconst localization: DuetLocalizedText = {\n buttonLabel: 'Choose date',\n placeholder: 'YYYY-MM-DD',\n selectedDateMessage: 'Selected date is',\n prevMonthLabel: 'Previous month',\n nextMonthLabel: 'Next month',\n monthSelectLabel: 'Month',\n yearSelectLabel: 'Year',\n closeLabel: 'Close window',\n keyboardInstruction: 'You can use arrow keys to navigate dates',\n calendarHeading: 'Choose a date',\n dayNames: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ],\n monthNames: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n monthNamesShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ],\n};\n\nexport default localization;\n","@import '../../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 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"]}
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.scss?tag=nano-date-picker&encapsulation=shadow","src/components/date-picker/date-picker.tsx"],"names":["DaysOfWeek","isEqual","a","b","getFullYear","getMonth","getDate","addDays","date","days","d","Date","setDate","startOfWeek","firstDayOfWeek","Monday","day","getDay","diff","endOfWeek","startOfMonth","endOfMonth","inRange","min","max","clamp","time","getTime","getDaysInRange","start","end","current","push","getViewOfMonth","DatePickerDay","focusedDay","today","onDaySelect","onKeyboardNavigation","focusedDayRef","disabled","isSelected","isToday","isFocused","isDisabled","isOutsideRange","handleClick","e","h","class","duet-date__day","is-outside","is-disabled","is-today","tabIndex","onClick","onKeyDown","type","aria-pressed","ref","el","aria-hidden","toLocaleDateString","undefined","month","chunk","array","chunkSize","result","i","length","slice","mapWithOffset","startingOffset","mapFn","map","_","adjustedIndex","DatePickerMonth","selectedDate","focusedDate","labelledById","localization","onDateSelect","onMouseDown","onFocusIn","isDateDisabled","role","aria-labelledby","onFocusin","dayNames","dayName","scope","substr","week","aria-selected","buttonLabel","placeholder","selectedDateMessage","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","closeLabel","keyboardInstruction","calendarHeading","monthNames","monthNamesShort","datePickerCss","range","from","to","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","threshold","isHorizontalSwipe","Math","abs","addMonths","handleNextMonthClick","handlePreviousMonthClick","handleKeyboardNavigation","key","shiftKey","ele","firstFocusEle","firstFocusableElement","focus","handled","addYears","handleDaySelect","_event","isAllowed","isInRange","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"],"mappings":"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","sourcesContent":["const ISO_DATE_FORMAT = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nexport enum DaysOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\nexport function createDate(year: string, month: string, day: string): Date {\n var dayInt = parseInt(day, 10);\n var monthInt = parseInt(month, 10);\n var yearInt = parseInt(year, 10);\n\n const isValid =\n Number.isInteger(yearInt) && // all parts should be integers\n Number.isInteger(monthInt) &&\n Number.isInteger(dayInt) &&\n monthInt > 0 && // month must be 1-12\n monthInt <= 12 &&\n dayInt > 0 && // day must be 1-31\n dayInt <= 31 &&\n yearInt > 0;\n\n if (isValid) {\n return new Date(yearInt, monthInt - 1, dayInt);\n }\n}\n\n/**\n * @param value date string in ISO format YYYY-MM-DD\n */\nexport function parseISODate(value: string): Date {\n if (!value) {\n return;\n }\n\n const matches = value.match(ISO_DATE_FORMAT);\n\n if (matches) {\n return createDate(matches[1], matches[2], matches[3]);\n }\n}\n\n/**\n * print date in format YYYY-MM-DD\n * @param date\n */\nexport function printISODate(date: Date): string {\n if (!date) {\n return '';\n }\n\n var d = date.getDate().toString(10);\n var m = (date.getMonth() + 1).toString(10);\n var y = date.getFullYear().toString(10);\n\n // days are not zero-indexed, so pad if less than 10\n if (date.getDate() < 10) {\n d = `0${d}`;\n }\n\n // months *are* zero-indexed, pad if less than 9!\n if (date.getMonth() < 9) {\n m = `0${m}`;\n }\n\n return `${y}-${m}-${d}`;\n}\n\n/**\n * Compare if two dates are equal in terms of day, month, and year\n */\nexport function isEqual(a: Date, b: Date): boolean {\n if (a == null || b == null) {\n return false;\n }\n\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function addDays(date: Date, days: number): Date {\n var d = new Date(date);\n d.setDate(d.getDate() + days);\n return d;\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const d = new Date(date);\n d.setMonth(date.getMonth() + months);\n return d;\n}\n\nexport function addYears(date: Date, years: number): Date {\n const d = new Date(date);\n d.setFullYear(date.getFullYear() + years);\n return d;\n}\n\nexport function startOfWeek(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date {\n var d = new Date(date);\n var day = d.getDay();\n var diff = (day < firstDayOfWeek ? 7 : 0) + day - firstDayOfWeek;\n\n d.setDate(d.getDate() - diff);\n return d;\n}\n\nexport function endOfWeek(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date {\n var d = new Date(date);\n var day = d.getDay();\n var diff = (day < firstDayOfWeek ? -7 : 0) + 6 - (day - firstDayOfWeek);\n\n d.setDate(d.getDate() + diff);\n return d;\n}\n\nexport function startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nexport function endOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const d = new Date(date);\n d.setMonth(month);\n return d;\n}\n\nexport function setYear(date: Date, year: number): Date {\n const d = new Date(date);\n d.setFullYear(year);\n return d;\n}\n\n/**\n * Check if date is within a min and max\n */\nexport function inRange(date: Date, min?: Date, max?: Date): boolean {\n return clamp(date, min, max) === date;\n}\n\n/**\n * Ensures date is within range, returns min or max if out of bounds\n */\nexport function clamp(date: Date, min?: Date, max?: Date): Date {\n const time = date.getTime();\n\n if (min && min instanceof Date && time < min.getTime()) {\n return min;\n }\n\n if (max && max instanceof Date && time > max.getTime()) {\n return max;\n }\n\n return date;\n}\n\n/**\n * given start and end date, return an (inclusive) array of all dates in between\n * @param start\n * @param end\n */\nfunction getDaysInRange(start: Date, end: Date): Date[] {\n const days: Date[] = [];\n let current = start;\n\n while (!isEqual(current, end)) {\n days.push(current);\n current = addDays(current, 1);\n }\n\n days.push(current);\n\n return days;\n}\n\n/**\n * given a date, return an array of dates from a calendar perspective\n * @param date\n * @param firstDayOfWeek\n */\nexport function getViewOfMonth(\n date: Date,\n firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n): Date[] {\n const start = startOfWeek(startOfMonth(date), firstDayOfWeek);\n const end = endOfWeek(endOfMonth(date), firstDayOfWeek);\n\n return getDaysInRange(start, end);\n}\n\n/**\n * Form random hash\n */\nexport function chr4() {\n return Math.random().toString(16).slice(-4);\n}\n\n/**\n * Create random identifier with a prefix\n * @param prefix\n */\nexport function createIdentifier(prefix) {\n return `${prefix}-${chr4()}${chr4()}-${chr4()}-${chr4()}-${chr4()}-${chr4()}${chr4()}${chr4()}`;\n}\n","import { h, FunctionalComponent } from '@stencil/core';\nimport { isEqual } from './date-utils';\n\nexport type DatePickerDayProps = {\n focusedDay: Date;\n today: Date;\n day: Date;\n inRange: boolean;\n disabled: boolean;\n onDaySelect: (event: MouseEvent, day: Date) => void;\n onKeyboardNavigation: (event: KeyboardEvent) => void;\n focusedDayRef?: (element: HTMLButtonElement) => void;\n isSelected;\n};\n\nexport const DatePickerDay: FunctionalComponent<DatePickerDayProps> = ({\n focusedDay,\n today,\n day,\n onDaySelect,\n onKeyboardNavigation,\n focusedDayRef,\n inRange,\n disabled,\n isSelected,\n}) => {\n const isToday = isEqual(day, today);\n const isFocused = isEqual(day, focusedDay);\n const isDisabled = day.getMonth() !== focusedDay.getMonth() || disabled;\n const isOutsideRange = !inRange;\n\n function handleClick(e) {\n onDaySelect(e, day);\n }\n\n return (\n <button\n class={{\n 'duet-date__day': true,\n 'is-outside': isOutsideRange,\n 'is-disabled': isDisabled,\n 'is-today': isToday,\n }}\n tabIndex={isFocused ? 0 : -1}\n onClick={handleClick}\n onKeyDown={onKeyboardNavigation}\n disabled={isOutsideRange}\n type=\"button\"\n aria-pressed={isSelected ? 'true' : 'false'}\n ref={(el) => {\n if (isFocused && el && focusedDayRef) {\n focusedDayRef(el);\n }\n }}\n >\n <span aria-hidden=\"true\">{day.getDate()}</span>\n <span class=\"duet-date__vhidden\">\n {day.toLocaleDateString(undefined, { day: 'numeric', month: 'long' })}\n </span>\n </button>\n );\n};\n","import { h, FunctionalComponent } from '@stencil/core';\nimport { DuetLocalizedText } from './date-localization';\nimport { DatePickerDay, DatePickerDayProps } from './date-picker-day';\nimport { getViewOfMonth, inRange, DaysOfWeek, isEqual } from './date-utils';\nimport { DateDisabledPredicate } from '../../../interface';\n\nfunction chunk<T>(array: T[], chunkSize: number): T[][] {\n const result = [];\n\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n\nfunction mapWithOffset<T, U>(\n array: T[],\n startingOffset: number,\n mapFn: (item: T) => U\n): U[] {\n return array.map((_, i) => {\n const adjustedIndex = (i + startingOffset) % array.length;\n return mapFn(array[adjustedIndex]);\n });\n}\n\ntype DatePickerMonthProps = {\n selectedDate: Date;\n focusedDate: Date;\n labelledById: string;\n localization: DuetLocalizedText;\n firstDayOfWeek: DaysOfWeek;\n min?: Date;\n max?: Date;\n onDateSelect: DatePickerDayProps['onDaySelect'];\n onKeyboardNavigation: DatePickerDayProps['onKeyboardNavigation'];\n focusedDayRef: (element: HTMLButtonElement) => void;\n onFocusIn?: (e: FocusEvent) => void;\n onMouseDown?: (e: MouseEvent) => void;\n isDateDisabled: DateDisabledPredicate;\n};\n\nexport const DatePickerMonth: FunctionalComponent<DatePickerMonthProps> = ({\n selectedDate,\n focusedDate,\n labelledById,\n localization,\n firstDayOfWeek,\n min,\n max,\n onDateSelect,\n onKeyboardNavigation,\n focusedDayRef,\n onMouseDown,\n onFocusIn,\n isDateDisabled,\n}) => {\n const today = new Date();\n const days = getViewOfMonth(focusedDate, firstDayOfWeek);\n\n return (\n <table\n class=\"duet-date__table\"\n role=\"grid\"\n aria-labelledby={labelledById}\n // @ts-ignore\n onFocusin={onFocusIn}\n onMouseDown={onMouseDown}\n >\n <thead>\n <tr>\n {mapWithOffset(localization.dayNames, firstDayOfWeek, (dayName) => (\n <th class=\"duet-date__table-header\" scope=\"col\">\n <span aria-hidden=\"true\">{dayName.substr(0, 2)}</span>\n <span class=\"duet-date__vhidden\">{dayName}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {chunk(days, 7).map((week) => (\n <tr class=\"duet-date__row\">\n {week.map((day) => (\n <td\n class=\"duet-date__cell\"\n role=\"gridcell\"\n aria-selected={isEqual(day, selectedDate) ? 'true' : undefined}\n >\n <DatePickerDay\n day={day}\n today={today}\n focusedDay={focusedDate}\n inRange={inRange(day, min, max)}\n onDaySelect={onDateSelect}\n onKeyboardNavigation={onKeyboardNavigation}\n focusedDayRef={focusedDayRef}\n disabled={isDateDisabled(day)}\n isSelected={isEqual(day, selectedDate)}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n","type MonthsNames = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n];\ntype DayNames = [string, string, string, string, string, string, string];\n\nexport type DuetLocalizedText = {\n buttonLabel: string;\n placeholder: string;\n selectedDateMessage: string;\n prevMonthLabel: string;\n nextMonthLabel: string;\n monthSelectLabel: string;\n yearSelectLabel: string;\n closeLabel: string;\n keyboardInstruction: string;\n calendarHeading: string;\n dayNames: DayNames;\n monthNames: MonthsNames;\n monthNamesShort: MonthsNames;\n};\n\nconst localization: DuetLocalizedText = {\n buttonLabel: 'Choose date',\n placeholder: 'YYYY-MM-DD',\n selectedDateMessage: 'Selected date is',\n prevMonthLabel: 'Previous month',\n nextMonthLabel: 'Next month',\n monthSelectLabel: 'Month',\n yearSelectLabel: 'Year',\n closeLabel: 'Close window',\n keyboardInstruction: 'You can use arrow keys to navigate dates',\n calendarHeading: 'Choose a date',\n dayNames: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ],\n monthNames: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n monthNamesShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ],\n};\n\nexport default localization;\n","@import '../../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) !important;\n color: var(--active-text-color);\n box-shadow: none;\n outline: 0;\n }\n\n &:active {\n background: var(--active-color);\n box-shadow: var(--focus-shadow);\n color: var(--active-text-color);\n }\n\n &:focus {\n box-shadow: var(--focus-shadow);\n outline: 0;\n }\n\n &.is-disabled {\n background: transparent;\n box-shadow: none;\n cursor: default;\n opacity: 0.5;\n\n &::before {\n display: none;\n }\n }\n\n &.is-outside {\n background: var(--inactive-color);\n box-shadow: none;\n cursor: default;\n opacity: 0.6;\n pointer-events: none;\n\n &::before {\n display: none;\n }\n }\n}\n\n// ---------------------------------------------\n// DUET DATE PICKER __ HEADER\n// ---------------------------------------------\n\n.duet-date__header {\n align-items: center;\n display: flex;\n justify-content: space-between;\n margin-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 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"]}