@nanoporetech-digital/components 1.14.1 → 1.15.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (492) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/cjs/{algolia-data-4d5ee8da.js → algolia-data-a98ccf4f.js} +2 -2
  3. package/dist/cjs/algolia-data-a98ccf4f.js.map +1 -0
  4. package/dist/cjs/algoliasearch.umd-5dc661c5.js +12 -0
  5. package/dist/cjs/algoliasearch.umd-5dc661c5.js.map +1 -0
  6. package/dist/cjs/{component-store-4dfd3a12.js → component-store-8d99743e.js} +2 -2
  7. package/dist/cjs/{component-store-4dfd3a12.js.map → component-store-8d99743e.js.map} +1 -1
  8. package/dist/cjs/{global-befb7a64.js → global-aa92d50f.js} +5 -3
  9. package/dist/cjs/global-aa92d50f.js.map +1 -0
  10. package/dist/cjs/{index-197e7a3f.js → index-f12395b8.js} +3 -1
  11. package/dist/cjs/index-f12395b8.js.map +1 -0
  12. package/dist/cjs/loader.cjs.js +3 -3
  13. package/dist/cjs/nano-accordion.cjs.entry.js +1 -1
  14. package/dist/cjs/nano-alert.cjs.entry.js +2 -2
  15. package/dist/cjs/nano-algolia-filter.cjs.entry.js +3 -3
  16. package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-algolia-input.cjs.entry.js +5 -5
  18. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-algolia-pagination.cjs.entry.js +2 -2
  20. package/dist/cjs/nano-algolia-results.cjs.entry.js +2 -2
  21. package/dist/cjs/nano-algolia.cjs.entry.js +5 -5
  22. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-checkbox-group.cjs.entry.js +2 -2
  25. package/dist/cjs/nano-checkbox.cjs.entry.js +2 -2
  26. package/dist/cjs/nano-components.cjs.js +3 -3
  27. package/dist/cjs/nano-date-input.cjs.entry.js +43 -15
  28. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nano-date-picker_2.cjs.entry.js +31 -11
  30. package/dist/cjs/nano-date-picker_2.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nano-details.cjs.entry.js +14 -8
  32. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  33. package/dist/cjs/nano-dialog.cjs.entry.js +5 -9
  34. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  35. package/dist/cjs/nano-drawer.cjs.entry.js +1 -1
  36. package/dist/cjs/nano-file-upload.cjs.entry.js +7 -14
  37. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nano-global-nav.cjs.entry.js +4 -4
  39. package/dist/cjs/nano-global-search-results.cjs.entry.js +2 -2
  40. package/dist/cjs/nano-grid_3.cjs.entry.js +1 -1
  41. package/dist/cjs/nano-hero.cjs.entry.js +1 -1
  42. package/dist/cjs/nano-icon-button.cjs.entry.js +2 -2
  43. package/dist/cjs/nano-icon.cjs.entry.js +1 -1
  44. package/dist/cjs/nano-input.cjs.entry.js +12 -2
  45. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  46. package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
  47. package/dist/cjs/nano-menu.cjs.entry.js +2 -2
  48. package/dist/cjs/nano-nav-item_2.cjs.entry.js +2 -2
  49. package/dist/cjs/nano-range.cjs.entry.js +2 -2
  50. package/dist/cjs/nano-rating.cjs.entry.js +1 -1
  51. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -1
  52. package/dist/cjs/nano-select-option.cjs.entry.js +1 -1
  53. package/dist/cjs/nano-slide.cjs.entry.js +1 -1
  54. package/dist/cjs/nano-slides.cjs.entry.js +2 -2
  55. package/dist/cjs/nano-spinner.cjs.entry.js +2 -2
  56. package/dist/cjs/nano-sticker.cjs.entry.js +1 -1
  57. package/dist/cjs/nano-tab-content.cjs.entry.js +1 -1
  58. package/dist/cjs/nano-tab-group.cjs.entry.js +3 -3
  59. package/dist/cjs/nano-tab.cjs.entry.js +2 -2
  60. package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
  61. package/dist/collection/components/accordion/accordion.js +1 -1
  62. package/dist/collection/components/alert/alert.css +3 -3
  63. package/dist/collection/components/alert/alert.js +1 -1
  64. package/dist/collection/components/algolia/algolia-data.js.map +1 -1
  65. package/dist/collection/components/algolia/algolia-filter.js +3 -3
  66. package/dist/collection/components/algolia/algolia-filter.js.map +1 -1
  67. package/dist/collection/components/algolia/algolia-input.js +7 -7
  68. package/dist/collection/components/algolia/algolia-input.js.map +1 -1
  69. package/dist/collection/components/algolia/algolia-results.js +1 -1
  70. package/dist/collection/components/algolia/algolia.js +7 -7
  71. package/dist/collection/components/algolia/algolia.js.map +1 -1
  72. package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js +7 -2
  73. package/dist/collection/components/checkbox/__tests__/__fixtures__/checkbox-templates.js.map +1 -1
  74. package/dist/collection/components/checkbox/checkbox-group.css +2 -2
  75. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  76. package/dist/collection/components/checkbox/checkbox.css +2 -2
  77. package/dist/collection/components/checkbox/checkbox.js +3 -3
  78. package/dist/collection/components/date-input/date-input.css +0 -4
  79. package/dist/collection/components/date-input/date-input.js +70 -21
  80. package/dist/collection/components/date-input/date-input.js.map +1 -1
  81. package/dist/collection/components/date-picker/date-picker.css +15 -4
  82. package/dist/collection/components/date-picker/date-picker.js +44 -16
  83. package/dist/collection/components/date-picker/date-picker.js.map +1 -1
  84. package/dist/collection/components/details/details.css +3 -3
  85. package/dist/collection/components/details/details.js +13 -7
  86. package/dist/collection/components/details/details.js.map +1 -1
  87. package/dist/collection/components/dialog/dialog.css +2 -3
  88. package/dist/collection/components/dialog/dialog.js +6 -10
  89. package/dist/collection/components/dialog/dialog.js.map +1 -1
  90. package/dist/collection/components/dropdown/dropdown.js +2 -1
  91. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  92. package/dist/collection/components/file-upload/file-upload-interface.js.map +1 -1
  93. package/dist/collection/components/file-upload/file-upload.css +9 -17
  94. package/dist/collection/components/file-upload/file-upload.js +17 -20
  95. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  96. package/dist/collection/components/global-nav/global-nav.css +2 -2
  97. package/dist/collection/components/global-nav/global-nav.js +4 -4
  98. package/dist/collection/components/global-search-results/global-search-results.css +3 -3
  99. package/dist/collection/components/grid/grid-item.js +1 -1
  100. package/dist/collection/components/icon/icon.js +1 -1
  101. package/dist/collection/components/icon-button/icon-button.css +2 -2
  102. package/dist/collection/components/input/input.css +5 -6
  103. package/dist/collection/components/input/input.js +25 -6
  104. package/dist/collection/components/input/input.js.map +1 -1
  105. package/dist/collection/components/menu/menu.css +7 -7
  106. package/dist/collection/components/nav-item/nav-item.js +4 -4
  107. package/dist/collection/components/range/range.css +4 -4
  108. package/dist/collection/components/range/range.js +4 -4
  109. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  110. package/dist/collection/components/select/select.css +4 -4
  111. package/dist/collection/components/select/select.js +5 -5
  112. package/dist/collection/components/slides/slides.css +2 -2
  113. package/dist/collection/components/slides/slides.js +7 -7
  114. package/dist/collection/components/spinner/spinner.css +2 -2
  115. package/dist/collection/components/tabs/tab-group.css +6 -6
  116. package/dist/collection/components/tabs/tab-group.js +2 -2
  117. package/dist/collection/components/tabs/tab.css +2 -2
  118. package/dist/collection/global/script/global.js +4 -2
  119. package/dist/collection/global/script/global.js.map +1 -1
  120. package/dist/collection/utils/testing/index.js +91 -18
  121. package/dist/collection/utils/testing/index.js.map +1 -1
  122. package/dist/custom-elements/index.js +131 -74
  123. package/dist/custom-elements/index.js.map +1 -1
  124. package/dist/esm/{algolia-data-6db3f5f2.js → algolia-data-b31a9800.js} +2 -2
  125. package/dist/esm/algolia-data-b31a9800.js.map +1 -0
  126. package/dist/esm/algoliasearch.umd-7ecbe0e9.js +10 -0
  127. package/dist/esm/algoliasearch.umd-7ecbe0e9.js.map +1 -0
  128. package/dist/esm/{component-store-6736ee0f.js → component-store-93172454.js} +2 -2
  129. package/dist/esm/{component-store-6736ee0f.js.map → component-store-93172454.js.map} +1 -1
  130. package/dist/esm/{global-c85d24a2.js → global-118ae701.js} +5 -3
  131. package/dist/esm/global-118ae701.js.map +1 -0
  132. package/dist/esm/{index-8e9bc704.js → index-912ef959.js} +3 -1
  133. package/dist/esm/index-912ef959.js.map +1 -0
  134. package/dist/esm/loader.js +3 -3
  135. package/dist/esm/nano-accordion.entry.js +1 -1
  136. package/dist/esm/nano-alert.entry.js +2 -2
  137. package/dist/esm/nano-algolia-filter.entry.js +3 -3
  138. package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
  139. package/dist/esm/nano-algolia-input.entry.js +5 -5
  140. package/dist/esm/nano-algolia-input.entry.js.map +1 -1
  141. package/dist/esm/nano-algolia-pagination.entry.js +2 -2
  142. package/dist/esm/nano-algolia-results.entry.js +2 -2
  143. package/dist/esm/nano-algolia.entry.js +5 -5
  144. package/dist/esm/nano-algolia.entry.js.map +1 -1
  145. package/dist/esm/nano-aspect-ratio.entry.js +1 -1
  146. package/dist/esm/nano-checkbox-group.entry.js +2 -2
  147. package/dist/esm/nano-checkbox.entry.js +2 -2
  148. package/dist/esm/nano-components.js +3 -3
  149. package/dist/esm/nano-date-input.entry.js +43 -15
  150. package/dist/esm/nano-date-input.entry.js.map +1 -1
  151. package/dist/esm/nano-date-picker_2.entry.js +31 -11
  152. package/dist/esm/nano-date-picker_2.entry.js.map +1 -1
  153. package/dist/esm/nano-details.entry.js +14 -8
  154. package/dist/esm/nano-details.entry.js.map +1 -1
  155. package/dist/esm/nano-dialog.entry.js +5 -9
  156. package/dist/esm/nano-dialog.entry.js.map +1 -1
  157. package/dist/esm/nano-drawer.entry.js +1 -1
  158. package/dist/esm/nano-file-upload.entry.js +7 -14
  159. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  160. package/dist/esm/nano-global-nav.entry.js +4 -4
  161. package/dist/esm/nano-global-search-results.entry.js +2 -2
  162. package/dist/esm/nano-grid_3.entry.js +1 -1
  163. package/dist/esm/nano-hero.entry.js +1 -1
  164. package/dist/esm/nano-icon-button.entry.js +2 -2
  165. package/dist/esm/nano-icon.entry.js +1 -1
  166. package/dist/esm/nano-input.entry.js +12 -2
  167. package/dist/esm/nano-input.entry.js.map +1 -1
  168. package/dist/esm/nano-menu-drawer.entry.js +1 -1
  169. package/dist/esm/nano-menu.entry.js +2 -2
  170. package/dist/esm/nano-nav-item_2.entry.js +2 -2
  171. package/dist/esm/nano-range.entry.js +2 -2
  172. package/dist/esm/nano-rating.entry.js +1 -1
  173. package/dist/esm/nano-resize-observe_2.entry.js +1 -1
  174. package/dist/esm/nano-select-option.entry.js +1 -1
  175. package/dist/esm/nano-slide.entry.js +1 -1
  176. package/dist/esm/nano-slides.entry.js +2 -2
  177. package/dist/esm/nano-spinner.entry.js +2 -2
  178. package/dist/esm/nano-sticker.entry.js +1 -1
  179. package/dist/esm/nano-tab-content.entry.js +1 -1
  180. package/dist/esm/nano-tab-group.entry.js +3 -3
  181. package/dist/esm/nano-tab.entry.js +2 -2
  182. package/dist/esm/nano-tooltip.entry.js +1 -1
  183. package/dist/esm-es5/{algolia-data-6db3f5f2.js → algolia-data-b31a9800.js} +2 -2
  184. package/dist/esm-es5/algolia-data-b31a9800.js.map +1 -0
  185. package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js +4 -0
  186. package/dist/esm-es5/algoliasearch.umd-7ecbe0e9.js.map +1 -0
  187. package/dist/esm-es5/{component-store-6736ee0f.js → component-store-93172454.js} +2 -2
  188. package/dist/esm-es5/{component-store-6736ee0f.js.map → component-store-93172454.js.map} +0 -0
  189. package/dist/esm-es5/{global-c85d24a2.js → global-118ae701.js} +2 -2
  190. package/dist/esm-es5/global-118ae701.js.map +1 -0
  191. package/dist/esm-es5/index-912ef959.js +2 -0
  192. package/dist/esm-es5/index-912ef959.js.map +1 -0
  193. package/dist/esm-es5/loader.js +1 -1
  194. package/dist/esm-es5/loader.js.map +1 -1
  195. package/dist/esm-es5/nano-accordion.entry.js +1 -1
  196. package/dist/esm-es5/nano-alert.entry.js +1 -1
  197. package/dist/esm-es5/nano-algolia-filter.entry.js +1 -1
  198. package/dist/esm-es5/nano-algolia-filter.entry.js.map +1 -1
  199. package/dist/esm-es5/nano-algolia-input.entry.js +1 -1
  200. package/dist/esm-es5/nano-algolia-input.entry.js.map +1 -1
  201. package/dist/esm-es5/nano-algolia-pagination.entry.js +1 -1
  202. package/dist/esm-es5/nano-algolia-results.entry.js +1 -1
  203. package/dist/esm-es5/nano-algolia.entry.js +1 -1
  204. package/dist/esm-es5/nano-algolia.entry.js.map +1 -1
  205. package/dist/esm-es5/nano-aspect-ratio.entry.js +1 -1
  206. package/dist/esm-es5/nano-checkbox-group.entry.js +1 -1
  207. package/dist/esm-es5/nano-checkbox.entry.js +1 -1
  208. package/dist/esm-es5/nano-components.js +1 -1
  209. package/dist/esm-es5/nano-components.js.map +1 -1
  210. package/dist/esm-es5/nano-date-input.entry.js +1 -1
  211. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  212. package/dist/esm-es5/nano-date-picker_2.entry.js +1 -1
  213. package/dist/esm-es5/nano-date-picker_2.entry.js.map +1 -1
  214. package/dist/esm-es5/nano-details.entry.js +1 -1
  215. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  216. package/dist/esm-es5/nano-dialog.entry.js +1 -1
  217. package/dist/esm-es5/nano-dialog.entry.js.map +1 -1
  218. package/dist/esm-es5/nano-drawer.entry.js +1 -1
  219. package/dist/esm-es5/nano-file-upload.entry.js +1 -1
  220. package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
  221. package/dist/esm-es5/nano-global-nav.entry.js +1 -1
  222. package/dist/esm-es5/nano-global-search-results.entry.js +1 -1
  223. package/dist/esm-es5/nano-grid_3.entry.js +1 -1
  224. package/dist/esm-es5/nano-hero.entry.js +1 -1
  225. package/dist/esm-es5/nano-icon-button.entry.js +1 -1
  226. package/dist/esm-es5/nano-icon.entry.js +1 -1
  227. package/dist/esm-es5/nano-input.entry.js +1 -1
  228. package/dist/esm-es5/nano-input.entry.js.map +1 -1
  229. package/dist/esm-es5/nano-menu-drawer.entry.js +1 -1
  230. package/dist/esm-es5/nano-menu.entry.js +1 -1
  231. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  232. package/dist/esm-es5/nano-range.entry.js +1 -1
  233. package/dist/esm-es5/nano-rating.entry.js +1 -1
  234. package/dist/esm-es5/nano-resize-observe_2.entry.js +1 -1
  235. package/dist/esm-es5/nano-select-option.entry.js +1 -1
  236. package/dist/esm-es5/nano-slide.entry.js +1 -1
  237. package/dist/esm-es5/nano-slides.entry.js +2 -2
  238. package/dist/esm-es5/nano-spinner.entry.js +1 -1
  239. package/dist/esm-es5/nano-sticker.entry.js +1 -1
  240. package/dist/esm-es5/nano-tab-content.entry.js +1 -1
  241. package/dist/esm-es5/nano-tab-group.entry.js +1 -1
  242. package/dist/esm-es5/nano-tab.entry.js +1 -1
  243. package/dist/esm-es5/nano-tooltip.entry.js +1 -1
  244. package/dist/nano-components/nano-components.esm.js +1 -1
  245. package/dist/nano-components/nano-components.esm.js.map +1 -1
  246. package/dist/nano-components/nano-components.js +1 -1
  247. package/dist/nano-components/{p-dbd71a33.system.entry.js → p-007c6041.system.entry.js} +2 -2
  248. package/dist/nano-components/{p-dbd71a33.system.entry.js.map → p-007c6041.system.entry.js.map} +0 -0
  249. package/dist/nano-components/{p-83bf885b.entry.js → p-02177814.entry.js} +2 -2
  250. package/dist/nano-components/{p-83bf885b.entry.js.map → p-02177814.entry.js.map} +0 -0
  251. package/dist/nano-components/{p-df2764c8.system.entry.js → p-046af455.system.entry.js} +2 -2
  252. package/dist/nano-components/{p-df2764c8.system.entry.js.map → p-046af455.system.entry.js.map} +0 -0
  253. package/dist/nano-components/p-05c062ae.js +4 -0
  254. package/dist/nano-components/p-05c062ae.js.map +1 -0
  255. package/dist/nano-components/{p-4d17169a.entry.js → p-104a9d64.entry.js} +2 -2
  256. package/dist/nano-components/p-104a9d64.entry.js.map +1 -0
  257. package/dist/nano-components/{p-55b80a92.system.entry.js → p-10f24f67.system.entry.js} +2 -2
  258. package/dist/nano-components/{p-55b80a92.system.entry.js.map → p-10f24f67.system.entry.js.map} +0 -0
  259. package/dist/nano-components/{p-6403dd02.system.entry.js → p-1c7614c4.system.entry.js} +2 -2
  260. package/dist/nano-components/p-1c7614c4.system.entry.js.map +1 -0
  261. package/dist/nano-components/{p-007c6ccc.system.entry.js → p-1d16e897.system.entry.js} +2 -2
  262. package/dist/nano-components/{p-007c6ccc.system.entry.js.map → p-1d16e897.system.entry.js.map} +0 -0
  263. package/dist/nano-components/{p-daf1462f.system.entry.js → p-21a6f295.system.entry.js} +2 -2
  264. package/dist/nano-components/{p-daf1462f.system.entry.js.map → p-21a6f295.system.entry.js.map} +0 -0
  265. package/dist/nano-components/{p-acbc08ea.system.entry.js → p-273b19b0.system.entry.js} +2 -2
  266. package/dist/nano-components/{p-acbc08ea.system.entry.js.map → p-273b19b0.system.entry.js.map} +0 -0
  267. package/dist/nano-components/p-28123e6e.entry.js +2 -0
  268. package/dist/nano-components/p-28123e6e.entry.js.map +1 -0
  269. package/dist/nano-components/{p-f1cd2d9b.entry.js → p-2ae39fa1.entry.js} +2 -2
  270. package/dist/nano-components/{p-f1cd2d9b.entry.js.map → p-2ae39fa1.entry.js.map} +0 -0
  271. package/dist/nano-components/{p-9393bfbb.system.entry.js → p-2edaf0eb.system.entry.js} +3 -3
  272. package/dist/nano-components/{p-9393bfbb.system.entry.js.map → p-2edaf0eb.system.entry.js.map} +0 -0
  273. package/dist/nano-components/{p-e7e898f5.system.entry.js → p-2f876f68.system.entry.js} +2 -2
  274. package/dist/nano-components/{p-e7e898f5.system.entry.js.map → p-2f876f68.system.entry.js.map} +0 -0
  275. package/dist/nano-components/{p-19962dda.system.entry.js → p-305ba54b.system.entry.js} +2 -2
  276. package/dist/nano-components/{p-19962dda.system.entry.js.map → p-305ba54b.system.entry.js.map} +0 -0
  277. package/dist/nano-components/{p-5f9e92b0.system.entry.js → p-30a22cd0.system.entry.js} +2 -2
  278. package/dist/nano-components/{p-5f9e92b0.system.entry.js.map → p-30a22cd0.system.entry.js.map} +0 -0
  279. package/dist/nano-components/{p-cc8fb176.system.entry.js → p-31c52d0a.system.entry.js} +2 -2
  280. package/dist/nano-components/{p-cc8fb176.system.entry.js.map → p-31c52d0a.system.entry.js.map} +0 -0
  281. package/dist/nano-components/{p-c6f7ce64.system.entry.js → p-325f32b3.system.entry.js} +2 -2
  282. package/dist/nano-components/p-325f32b3.system.entry.js.map +1 -0
  283. package/dist/nano-components/{p-3f9a70f8.entry.js → p-3b2ea5fd.entry.js} +2 -2
  284. package/dist/nano-components/{p-3f9a70f8.entry.js.map → p-3b2ea5fd.entry.js.map} +0 -0
  285. package/dist/nano-components/{p-0283a2ec.js → p-4370f8ae.js} +2 -2
  286. package/dist/nano-components/p-4370f8ae.js.map +1 -0
  287. package/dist/nano-components/{p-8097b205.system.js → p-4647a31f.system.js} +2 -2
  288. package/dist/nano-components/{p-8097b205.system.js.map → p-4647a31f.system.js.map} +0 -0
  289. package/dist/nano-components/{p-447ed63d.system.entry.js → p-491096f0.system.entry.js} +2 -2
  290. package/dist/nano-components/p-491096f0.system.entry.js.map +1 -0
  291. package/dist/nano-components/{p-1de83f90.system.entry.js → p-4e21bfe1.system.entry.js} +2 -2
  292. package/dist/nano-components/{p-1de83f90.system.entry.js.map → p-4e21bfe1.system.entry.js.map} +0 -0
  293. package/dist/nano-components/{p-6855167a.entry.js → p-4fa0b560.entry.js} +2 -2
  294. package/dist/nano-components/{p-6855167a.entry.js.map → p-4fa0b560.entry.js.map} +0 -0
  295. package/dist/nano-components/{p-7db31794.system.entry.js → p-4fbc3c8b.system.entry.js} +2 -2
  296. package/dist/nano-components/{p-7db31794.system.entry.js.map → p-4fbc3c8b.system.entry.js.map} +0 -0
  297. package/dist/nano-components/{p-5198e4c6.system.js → p-508484f8.system.js} +2 -2
  298. package/dist/nano-components/p-508484f8.system.js.map +1 -0
  299. package/dist/nano-components/p-5672ebbb.system.entry.js +2 -0
  300. package/dist/nano-components/p-5672ebbb.system.entry.js.map +1 -0
  301. package/dist/nano-components/{p-7a8ea050.entry.js → p-574143b5.entry.js} +2 -2
  302. package/dist/nano-components/{p-7a8ea050.entry.js.map → p-574143b5.entry.js.map} +0 -0
  303. package/dist/nano-components/{p-ff530ea6.system.entry.js → p-57434dc5.system.entry.js} +2 -2
  304. package/dist/nano-components/{p-ff530ea6.system.entry.js.map → p-57434dc5.system.entry.js.map} +0 -0
  305. package/dist/nano-components/{p-44cf7aeb.entry.js → p-574f1393.entry.js} +2 -2
  306. package/dist/nano-components/p-574f1393.entry.js.map +1 -0
  307. package/dist/nano-components/{p-24ad4b09.entry.js → p-580eac05.entry.js} +2 -2
  308. package/dist/nano-components/{p-24ad4b09.entry.js.map → p-580eac05.entry.js.map} +0 -0
  309. package/dist/nano-components/{p-fc9828c7.entry.js → p-59aba360.entry.js} +2 -2
  310. package/dist/nano-components/{p-fc9828c7.entry.js.map → p-59aba360.entry.js.map} +0 -0
  311. package/dist/nano-components/{p-c8945124.system.js → p-698a8ab3.system.js} +2 -2
  312. package/dist/nano-components/p-698a8ab3.system.js.map +1 -0
  313. package/dist/nano-components/{p-c05d2d62.entry.js → p-6a3eee01.entry.js} +2 -2
  314. package/dist/nano-components/{p-c05d2d62.entry.js.map → p-6a3eee01.entry.js.map} +0 -0
  315. package/dist/nano-components/{p-ddaa8946.entry.js → p-6aab52a0.entry.js} +2 -2
  316. package/dist/nano-components/p-6aab52a0.entry.js.map +1 -0
  317. package/dist/nano-components/{p-4b9a1f76.entry.js → p-6dc59ae8.entry.js} +2 -2
  318. package/dist/nano-components/{p-4b9a1f76.entry.js.map → p-6dc59ae8.entry.js.map} +0 -0
  319. package/dist/nano-components/{p-057177d7.entry.js → p-6eba639a.entry.js} +3 -3
  320. package/dist/nano-components/{p-057177d7.entry.js.map → p-6eba639a.entry.js.map} +0 -0
  321. package/dist/nano-components/{p-185dedd1.system.entry.js → p-73d969d0.system.entry.js} +2 -2
  322. package/dist/nano-components/{p-185dedd1.system.entry.js.map → p-73d969d0.system.entry.js.map} +0 -0
  323. package/dist/nano-components/{p-4a319e09.system.entry.js → p-7dc79f13.system.entry.js} +2 -2
  324. package/dist/nano-components/{p-4a319e09.system.entry.js.map → p-7dc79f13.system.entry.js.map} +0 -0
  325. package/dist/nano-components/{p-fd6ff03f.entry.js → p-7df31b1c.entry.js} +2 -2
  326. package/dist/nano-components/{p-fd6ff03f.entry.js.map → p-7df31b1c.entry.js.map} +0 -0
  327. package/dist/nano-components/{p-172053d0.system.entry.js → p-7e208086.system.entry.js} +2 -2
  328. package/dist/nano-components/{p-172053d0.system.entry.js.map → p-7e208086.system.entry.js.map} +0 -0
  329. package/dist/nano-components/{p-173755c4.system.entry.js → p-7e4129b4.system.entry.js} +2 -2
  330. package/dist/nano-components/{p-173755c4.system.entry.js.map → p-7e4129b4.system.entry.js.map} +0 -0
  331. package/dist/nano-components/{p-f3bb5f81.entry.js → p-7e68796f.entry.js} +2 -2
  332. package/dist/nano-components/{p-f3bb5f81.entry.js.map → p-7e68796f.entry.js.map} +0 -0
  333. package/dist/nano-components/{p-a17e6ab1.entry.js → p-81d7fd45.entry.js} +2 -2
  334. package/dist/nano-components/{p-a17e6ab1.entry.js.map → p-81d7fd45.entry.js.map} +0 -0
  335. package/dist/nano-components/{p-981f997c.entry.js → p-82571543.entry.js} +2 -2
  336. package/dist/nano-components/p-82571543.entry.js.map +1 -0
  337. package/dist/nano-components/{p-016c6482.system.entry.js → p-844a1134.system.entry.js} +2 -2
  338. package/dist/nano-components/{p-016c6482.system.entry.js.map → p-844a1134.system.entry.js.map} +0 -0
  339. package/dist/nano-components/p-8535a942.entry.js +2 -0
  340. package/dist/nano-components/{p-6d718c9a.entry.js.map → p-8535a942.entry.js.map} +1 -1
  341. package/dist/nano-components/{p-e422c66f.entry.js → p-8c1d85ae.entry.js} +2 -2
  342. package/dist/nano-components/{p-e422c66f.entry.js.map → p-8c1d85ae.entry.js.map} +0 -0
  343. package/dist/nano-components/{p-46f84983.system.entry.js → p-8ed6acea.system.entry.js} +2 -2
  344. package/dist/nano-components/{p-46f84983.system.entry.js.map → p-8ed6acea.system.entry.js.map} +0 -0
  345. package/dist/nano-components/p-9164e5e2.system.entry.js +2 -0
  346. package/dist/nano-components/p-9164e5e2.system.entry.js.map +1 -0
  347. package/dist/nano-components/{p-896b7462.system.entry.js → p-9371d81b.system.entry.js} +2 -2
  348. package/dist/nano-components/{p-896b7462.system.entry.js.map → p-9371d81b.system.entry.js.map} +0 -0
  349. package/dist/nano-components/{p-b49d1e17.system.entry.js → p-95a4c3f2.system.entry.js} +2 -2
  350. package/dist/nano-components/{p-b49d1e17.system.entry.js.map → p-95a4c3f2.system.entry.js.map} +0 -0
  351. package/dist/nano-components/{p-06cc7501.entry.js → p-96ba0d00.entry.js} +2 -2
  352. package/dist/nano-components/{p-06cc7501.entry.js.map → p-96ba0d00.entry.js.map} +0 -0
  353. package/dist/nano-components/p-99637978.entry.js +2 -0
  354. package/dist/nano-components/p-99637978.entry.js.map +1 -0
  355. package/dist/nano-components/{p-56a8af2c.entry.js → p-9ccd832b.entry.js} +2 -2
  356. package/dist/nano-components/{p-56a8af2c.entry.js.map → p-9ccd832b.entry.js.map} +0 -0
  357. package/dist/nano-components/{p-2116ecb5.js → p-a1680208.js} +2 -2
  358. package/dist/nano-components/{p-2116ecb5.js.map → p-a1680208.js.map} +0 -0
  359. package/dist/nano-components/{p-b4a53bea.entry.js → p-a53a193c.entry.js} +2 -2
  360. package/dist/nano-components/{p-b4a53bea.entry.js.map → p-a53a193c.entry.js.map} +0 -0
  361. package/dist/nano-components/{p-b74ba77b.system.entry.js → p-a7ac7964.system.entry.js} +2 -2
  362. package/dist/nano-components/{p-b74ba77b.system.entry.js.map → p-a7ac7964.system.entry.js.map} +0 -0
  363. package/dist/nano-components/{p-30c68e8e.system.entry.js → p-aadd8c31.system.entry.js} +2 -2
  364. package/dist/nano-components/{p-30c68e8e.system.entry.js.map → p-aadd8c31.system.entry.js.map} +0 -0
  365. package/dist/nano-components/p-ab666582.entry.js +2 -0
  366. package/dist/nano-components/p-ab666582.entry.js.map +1 -0
  367. package/dist/nano-components/p-acd5d0f0.system.entry.js +2 -0
  368. package/dist/nano-components/p-acd5d0f0.system.entry.js.map +1 -0
  369. package/dist/nano-components/p-af9f6453.system.js +2 -0
  370. package/dist/nano-components/p-af9f6453.system.js.map +1 -0
  371. package/dist/nano-components/p-b1d3ab54.system.entry.js +2 -0
  372. package/dist/nano-components/p-b1d3ab54.system.entry.js.map +1 -0
  373. package/dist/nano-components/{p-bd04677f.entry.js → p-b3131821.entry.js} +2 -2
  374. package/dist/nano-components/{p-bd04677f.entry.js.map → p-b3131821.entry.js.map} +0 -0
  375. package/dist/nano-components/{p-ef46375f.entry.js → p-b7a58722.entry.js} +2 -2
  376. package/dist/nano-components/{p-ef46375f.entry.js.map → p-b7a58722.entry.js.map} +0 -0
  377. package/dist/nano-components/p-bb0619e6.js +2 -0
  378. package/dist/nano-components/p-bb0619e6.js.map +1 -0
  379. package/dist/nano-components/{p-081356e2.entry.js → p-c3f861c5.entry.js} +2 -2
  380. package/dist/nano-components/{p-081356e2.entry.js.map → p-c3f861c5.entry.js.map} +0 -0
  381. package/dist/nano-components/{p-ab384425.system.entry.js → p-c655e010.system.entry.js} +2 -2
  382. package/dist/nano-components/{p-ab384425.system.entry.js.map → p-c655e010.system.entry.js.map} +0 -0
  383. package/dist/nano-components/p-c72b22be.entry.js +2 -0
  384. package/dist/nano-components/p-c72b22be.entry.js.map +1 -0
  385. package/dist/nano-components/{p-d7ddc7e3.entry.js → p-d250987a.entry.js} +2 -2
  386. package/dist/nano-components/{p-d7ddc7e3.entry.js.map → p-d250987a.entry.js.map} +0 -0
  387. package/dist/nano-components/{p-b1badcb1.system.entry.js → p-d393d10a.system.entry.js} +2 -2
  388. package/dist/nano-components/{p-b1badcb1.system.entry.js.map → p-d393d10a.system.entry.js.map} +0 -0
  389. package/dist/nano-components/{p-868872fa.entry.js → p-db271541.entry.js} +2 -2
  390. package/dist/nano-components/{p-868872fa.entry.js.map → p-db271541.entry.js.map} +0 -0
  391. package/dist/nano-components/p-dccd86ec.system.js +4 -0
  392. package/dist/nano-components/p-dccd86ec.system.js.map +1 -0
  393. package/dist/nano-components/p-e0cc37fb.entry.js +2 -0
  394. package/dist/nano-components/{p-b19e2af5.entry.js.map → p-e0cc37fb.entry.js.map} +1 -1
  395. package/dist/nano-components/{p-db4ba5d8.system.entry.js → p-e28536b4.system.entry.js} +2 -2
  396. package/dist/nano-components/{p-db4ba5d8.system.entry.js.map → p-e28536b4.system.entry.js.map} +0 -0
  397. package/dist/nano-components/{p-b2804245.entry.js → p-ebf34764.entry.js} +2 -2
  398. package/dist/nano-components/{p-b2804245.entry.js.map → p-ebf34764.entry.js.map} +0 -0
  399. package/dist/nano-components/p-edddeaae.system.js +2 -0
  400. package/dist/nano-components/{p-f2d24fc6.system.js.map → p-edddeaae.system.js.map} +1 -1
  401. package/dist/nano-components/{p-d7a2499b.entry.js → p-ef5d9308.entry.js} +2 -2
  402. package/dist/nano-components/{p-d7a2499b.entry.js.map → p-ef5d9308.entry.js.map} +0 -0
  403. package/dist/nano-components/p-f234e064.system.entry.js +2 -0
  404. package/dist/nano-components/p-f234e064.system.entry.js.map +1 -0
  405. package/dist/nano-components/{p-6dae7bdd.system.entry.js → p-f27c9429.system.entry.js} +2 -2
  406. package/dist/nano-components/{p-6dae7bdd.system.entry.js.map → p-f27c9429.system.entry.js.map} +0 -0
  407. package/dist/nano-components/{p-3c25067f.entry.js → p-f3688bce.entry.js} +2 -2
  408. package/dist/nano-components/{p-3c25067f.entry.js.map → p-f3688bce.entry.js.map} +0 -0
  409. package/dist/nano-components/{p-66a5132f.system.entry.js → p-f86db7c0.system.entry.js} +2 -2
  410. package/dist/nano-components/{p-66a5132f.system.entry.js.map → p-f86db7c0.system.entry.js.map} +0 -0
  411. package/dist/nano-components/{p-7e259efb.system.entry.js → p-fa86645d.system.entry.js} +2 -2
  412. package/dist/nano-components/p-fa86645d.system.entry.js.map +1 -0
  413. package/dist/nano-components/{p-b5ff5764.entry.js → p-fdfa03d7.entry.js} +2 -2
  414. package/dist/nano-components/{p-b5ff5764.entry.js.map → p-fdfa03d7.entry.js.map} +0 -0
  415. package/dist/nano-components/p-ff2ff5b0.js +2 -0
  416. package/dist/nano-components/p-ff2ff5b0.js.map +1 -0
  417. package/dist/nano-components/p-ff5890b4.entry.js +2 -0
  418. package/dist/nano-components/p-ff5890b4.entry.js.map +1 -0
  419. package/dist/nano-components/{p-dbe19aba.entry.js → p-ffab923c.entry.js} +2 -2
  420. package/dist/nano-components/{p-dbe19aba.entry.js.map → p-ffab923c.entry.js.map} +0 -0
  421. package/dist/themes/nanopore.css +1 -1
  422. package/dist/types/components/date-input/date-input.d.ts +9 -0
  423. package/dist/types/components/date-picker/date-picker.d.ts +9 -4
  424. package/dist/types/components/details/details.d.ts +1 -0
  425. package/dist/types/components/file-upload/file-upload-interface.d.ts +4 -3
  426. package/dist/types/components/file-upload/file-upload.d.ts +2 -12
  427. package/dist/types/components/input/input.d.ts +1 -0
  428. package/dist/types/components.d.ts +16 -7
  429. package/dist/types/utils/testing/index.d.ts +4 -1
  430. package/docs-json.json +60 -31
  431. package/docs-vscode.json +4 -0
  432. package/package.json +18 -19
  433. package/dist/cjs/algolia-data-4d5ee8da.js.map +0 -1
  434. package/dist/cjs/algoliasearch.umd-51f0001d.js +0 -12
  435. package/dist/cjs/algoliasearch.umd-51f0001d.js.map +0 -1
  436. package/dist/cjs/global-befb7a64.js.map +0 -1
  437. package/dist/cjs/index-197e7a3f.js.map +0 -1
  438. package/dist/esm/algolia-data-6db3f5f2.js.map +0 -1
  439. package/dist/esm/algoliasearch.umd-2c129faa.js +0 -10
  440. package/dist/esm/algoliasearch.umd-2c129faa.js.map +0 -1
  441. package/dist/esm/global-c85d24a2.js.map +0 -1
  442. package/dist/esm/index-8e9bc704.js.map +0 -1
  443. package/dist/esm-es5/algolia-data-6db3f5f2.js.map +0 -1
  444. package/dist/esm-es5/algoliasearch.umd-2c129faa.js +0 -4
  445. package/dist/esm-es5/algoliasearch.umd-2c129faa.js.map +0 -1
  446. package/dist/esm-es5/global-c85d24a2.js.map +0 -1
  447. package/dist/esm-es5/index-8e9bc704.js +0 -2
  448. package/dist/esm-es5/index-8e9bc704.js.map +0 -1
  449. package/dist/nano-components/p-01e5c484.system.entry.js +0 -2
  450. package/dist/nano-components/p-01e5c484.system.entry.js.map +0 -1
  451. package/dist/nano-components/p-0283a2ec.js.map +0 -1
  452. package/dist/nano-components/p-03e4f363.system.js +0 -2
  453. package/dist/nano-components/p-03e4f363.system.js.map +0 -1
  454. package/dist/nano-components/p-19aecfb6.js +0 -2
  455. package/dist/nano-components/p-19aecfb6.js.map +0 -1
  456. package/dist/nano-components/p-23da4de5.js +0 -4
  457. package/dist/nano-components/p-23da4de5.js.map +0 -1
  458. package/dist/nano-components/p-2e2b4393.system.entry.js +0 -2
  459. package/dist/nano-components/p-2e2b4393.system.entry.js.map +0 -1
  460. package/dist/nano-components/p-32c68c7c.entry.js +0 -2
  461. package/dist/nano-components/p-32c68c7c.entry.js.map +0 -1
  462. package/dist/nano-components/p-38ed336b.entry.js +0 -2
  463. package/dist/nano-components/p-38ed336b.entry.js.map +0 -1
  464. package/dist/nano-components/p-447ed63d.system.entry.js.map +0 -1
  465. package/dist/nano-components/p-44cf7aeb.entry.js.map +0 -1
  466. package/dist/nano-components/p-4573be34.entry.js +0 -2
  467. package/dist/nano-components/p-4573be34.entry.js.map +0 -1
  468. package/dist/nano-components/p-4d17169a.entry.js.map +0 -1
  469. package/dist/nano-components/p-5198e4c6.system.js.map +0 -1
  470. package/dist/nano-components/p-6403dd02.system.entry.js.map +0 -1
  471. package/dist/nano-components/p-68eb3c21.entry.js +0 -2
  472. package/dist/nano-components/p-68eb3c21.entry.js.map +0 -1
  473. package/dist/nano-components/p-6d718c9a.entry.js +0 -2
  474. package/dist/nano-components/p-6edd2945.system.entry.js +0 -2
  475. package/dist/nano-components/p-6edd2945.system.entry.js.map +0 -1
  476. package/dist/nano-components/p-7e259efb.system.entry.js.map +0 -1
  477. package/dist/nano-components/p-981f997c.entry.js.map +0 -1
  478. package/dist/nano-components/p-b19e2af5.entry.js +0 -2
  479. package/dist/nano-components/p-c6f7ce64.system.entry.js.map +0 -1
  480. package/dist/nano-components/p-c8945124.system.js.map +0 -1
  481. package/dist/nano-components/p-cb750e49.system.js +0 -4
  482. package/dist/nano-components/p-cb750e49.system.js.map +0 -1
  483. package/dist/nano-components/p-ddaa8946.entry.js.map +0 -1
  484. package/dist/nano-components/p-eb090a2c.system.entry.js +0 -2
  485. package/dist/nano-components/p-eb090a2c.system.entry.js.map +0 -1
  486. package/dist/nano-components/p-f2d24fc6.system.js +0 -2
  487. package/dist/nano-components/p-f31f23ad.entry.js +0 -2
  488. package/dist/nano-components/p-f31f23ad.entry.js.map +0 -1
  489. package/dist/nano-components/p-fc189b6d.js +0 -2
  490. package/dist/nano-components/p-fc189b6d.js.map +0 -1
  491. package/dist/nano-components/p-fd4630d0.system.entry.js +0 -2
  492. package/dist/nano-components/p-fd4630d0.system.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["src/components/dialog/dialog.scss?tag=nano-dialog&encapsulation=shadow","src/components/dialog/dialog.tsx"],"names":["dialogCss","id","Dialog","class_1","hostRef","_this","this","componentId","willShow","willHide","addedTransEnd","isVisible","noDismiss","hasFooter","showRibbon","open","label","noHeader","noFooter","noUserDismiss","storeMethod","handleKeyDown","event","key","requestClose","nanoOverlayDismiss","nanoRequestClose","emit","defaultPrevented","hide","setTimeout","_","handleTransitionEnd","propertyName","composedPath","find","node","panel","overlay","nanoAfterShow","nanoAfterHide","handleSlotChange","hasSlot","host","prototype","handleOpenChange","show","nanoShow","originalTrigger","document","activeElement","modal","activate","lockBodyScrolling","raf","nanoInitialFocus","focus","preventScroll","nanoHide","deactivate","unlockBodyScrolling","stopVideos","trigger","videos","Array","from","querySelectorAll","forEach","video","tagName","toLowerCase","pause","src","connectedCallback","Modal","addEventListener","componentWillLoad","storeId","ComponentStore","init","componentDidLoad","disconnectedCallback","removeEventListener","render","h","Host","showing","undefined","part","class","dialog","dialog--open","dialog--visible","dialog--has-footer","dialog--has-header","dialog--nodismiss","dialog--with-ribbon","onKeyDown","ref","el","onClick","role","aria-modal","aria-hidden","aria-label","aria-labelledby","tabIndex","name","String","fromCharCode","exportparts","iconName","position","onSlotchange"],"mappings":"g7DAAA,IAAMA,UAAY,m0LCqBlB,IAAIC,GAAK,MAcIC,OAAM,WALnB,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,gWAMUA,KAAAC,YAAc,aAAYN,GAG1BK,KAAAE,SAAW,MACXF,KAAAG,SAAW,MAGXH,KAAAI,cAAgB,MAGfJ,KAAAK,UAAY,MACZL,KAAAM,UAAY,MACZN,KAAAO,UAAY,MAGbP,KAAAQ,WAAa,KAGmBR,KAAAS,KAAO,MAIvCT,KAAAU,MAAQ,GAIRV,KAAAW,SAAW,MAIXX,KAAAY,SAAW,MAGXZ,KAAAa,cAAgB,MAMhBb,KAAAc,YAA8B,WAoF9Bd,KAAAe,cAAgB,SAACC,GACvB,GAAIA,EAAMC,MAAQ,SAAU,CAC1BlB,EAAKmB,iBAIDlB,KAAAkB,aAAe,WACrB,IAAMC,EAAqBpB,EAAKqB,iBAAiBC,OAEjD,IAAKF,EAAmBG,mBAAqBvB,EAAKc,cAAe,CAC/Dd,EAAKwB,WACA,CACLxB,EAAKO,UAAY,KACjBkB,YAAW,SAACC,GAAC,OAAM1B,EAAKO,UAAY,QAAQ,OAIxCN,KAAA0B,oBAAsB,SAACV,GAC7B,GACEA,EAAMW,eAAiB,WACvBX,EACGY,eACAC,MAAK,SAACC,GAAS,OAAAA,IAAS/B,EAAKgC,OAASD,IAAS/B,EAAKiC,WACvD,CAEAjC,EAAKM,UAAYN,EAAKU,KACtBV,EAAKG,SAAW,MAChBH,EAAKI,SAAW,MAChBJ,EAAKU,KAAOV,EAAKkC,cAAcZ,OAAStB,EAAKmC,cAAcb,SAIvDrB,KAAAmC,iBAAmB,WACzBpC,EAAKQ,UAAY6B,QAAQrC,EAAKsC,KAAM,WAlHtCxC,EAAAyC,UAAAC,iBAAA,WACEvC,KAAKS,KAAOT,KAAKwC,OAASxC,KAAKuB,QAwB3B1B,EAAAyC,UAAAE,KAAN,iHACE,GAAIxC,KAAKE,SAAU,CACjB,MAAA,CAAA,GAGIuC,EAAWzC,KAAKyC,SAASpB,OAC/B,GAAIoB,EAASnB,iBAAkB,CAC7BtB,KAAKS,KAAO,MACZ,MAAA,CAAA,GAGFT,KAAK0C,gBAAkBC,SAASC,cAChC5C,KAAKE,SAAW,KAChBF,KAAKK,UAAY,KACjBL,KAAKS,KAAO,KACZT,KAAK6C,MAAMC,WAEXC,kBAAkB/C,KAAKqC,MAEvB,GAAIrC,KAAKS,KAAM,CAEbuC,KAAI,WACF,IAAMC,EAAmBlD,EAAKkD,iBAAiB5B,OAC/C,IAAK4B,EAAiB3B,iBAAkB,CACtCvB,EAAKgC,MAAMmB,MAAM,CAAEC,cAAe,4BAQpCtD,EAAAyC,UAAAf,KAAN,wGACE,GAAIvB,KAAKG,SAAU,CACjB,MAAA,CAAA,GAGIiD,EAAWpD,KAAKoD,SAAS/B,OAC/B,GAAI+B,EAAS9B,iBAAkB,CAC7BtB,KAAKS,KAAO,KACZ,MAAA,CAAA,GAGFT,KAAKG,SAAW,KAChBH,KAAKS,KAAO,MACZT,KAAK6C,MAAMQ,aACXC,oBAAoBtD,KAAKqC,MACzBrC,KAAKuD,aAGCC,EAAUxD,KAAK0C,gBACrB,GAAIc,UAAkBA,EAAQN,QAAU,WAAY,CAClD1B,YAAW,WAAM,OAAAgC,EAAQN,4BAwCrBrD,EAAAyC,UAAAiB,WAAA,WACN,IAAIE,EAAmDC,MAAMC,KAC3D3D,KAAKqC,KAAKuB,iBAAiB,iBAE7BH,EAAOI,SAAQ,SAACC,GACd,GAAIA,EAAMC,QAAQC,gBAAkB,QACjCF,EAA2BG,YACzB,CACH,IAAMC,EAAMJ,EAAMI,IAClBJ,EAAMI,IAAMA,OAKlBrE,EAAAyC,UAAA6B,kBAAA,WACEnE,KAAK6C,MAAQ,IAAIuB,MAAMpE,KAAKqC,MAC5B,GAAIrC,KAAK+B,MAAO,CACd/B,KAAKI,cAAgB,KACrBJ,KAAK+B,MAAMsC,iBAAiB,gBAAiBrE,KAAK0B,uBAItD7B,EAAAyC,UAAAgC,kBAAA,WACEtE,KAAKmC,mBAEL,GAAInC,KAAKS,KAAMT,KAAKwC,OACpB,GAAIxC,KAAKuE,QACPC,eAAeC,KAAKzE,KAAM,CAAC,QAASA,KAAKc,YAAad,KAAKuE,UAG/D1E,EAAAyC,UAAAoC,iBAAA,WACE,IAAK1E,KAAKI,cAAe,CACvBJ,KAAK+B,MAAMsC,iBAAiB,gBAAiBrE,KAAK0B,uBAItD7B,EAAAyC,UAAAqC,qBAAA,WACErB,oBAAoBtD,KAAKqC,MACzBrC,KAAKI,cAAgB,MACrBJ,KAAK+B,MAAM6C,oBAAoB,gBAAiB5E,KAAK0B,sBAGvD7B,EAAAyC,UAAAuC,OAAA,WAAA,IAAA9E,EAAAC,KACE,OACE8E,EAACC,KAAI,CAACC,QAAShF,KAAKK,UAAY,KAAO4E,WACrCH,EAAA,MAAA,CACEI,KAAK,OACLC,MAAO,CACLC,OAAQ,KACRC,eAAgBrF,KAAKS,KACrB6E,kBAAmBtF,KAAKK,UACxBkF,sBAAuBvF,KAAKY,SAC5B4E,sBAAuBxF,KAAKW,SAC5B8E,oBAAqBzF,KAAKM,UAC1BoF,sBAAuB1F,KAAKQ,YAE9BmF,UAAW3F,KAAKe,eAEhB+D,EAAA,MAAA,CACEI,KAAK,UACLC,MAAM,kBACNS,IAAK,SAACC,GAAE,OAAM9F,EAAKiC,QAAU6D,GAC7BC,QAAS9F,KAAKkB,eAGhB4D,EAAA,MAAA,CACEc,IAAK,SAACC,GAAE,OAAM9F,EAAKgC,MAAQ8D,GAC3BX,KAAK,QACLC,MAAM,gBACNY,KAAK,SAAQC,aACF,OAAMC,cACJjG,KAAKS,KAAO,QAAU,OAAMyF,aAC7BlG,KAAKW,SAAWX,KAAKU,MAAQ,KAAIyF,mBAE1CnG,KAAKW,SAAcX,KAAKC,YAAW,SAAW,KAEjDmG,SAAU,GAEVtB,EAAA,MAAA,CAAKK,MAAM,sBACPnF,KAAKW,UACLmE,EAAA,eAAA,KACEA,EAAA,SAAA,CAAQI,KAAK,SAASC,MAAM,kBAC1BL,EAAA,OAAA,CACEI,KAAK,QACLC,MAAM,gBACNxF,GAAOK,KAAKC,YAAW,UAEvB6E,EAAA,OAAA,CAAMuB,KAAK,SAERrG,KAAKU,OAAS4F,OAAOC,aAAa,UAGrCvG,KAAKa,eACLiE,EAAA,mBAAA,CACE0B,YAAY,oBACZrB,MAAM,qBACNzE,MAAM,eACNoF,QAAS9F,KAAKkB,aACduF,SAAS,kBAMnB3B,EAAA,MAAA,CAAKI,KAAK,OAAOC,MAAM,gBACrBL,EAAA,OAAA,QAEA9E,KAAKY,WAAaZ,KAAKO,YAAcP,KAAKa,gBAC1CiE,EAAA,eAAA,CAAc4B,SAAS,UACrB5B,EAAA,SAAA,CAAQI,KAAK,SAASC,MAAM,kBAC1BL,EAAA,OAAA,CAAMuB,KAAK,SAASM,aAAc3G,KAAKmC,oBACrCnC,KAAKa,eACLiE,EAAA,SAAA,CACEK,MAAM,oBACNW,QAAS9F,KAAKkB,cAAY,2QAlR/B","sourcesContent":["@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n@import '../../global/style/nano-theme/form';\n\n/**\n * @prop --width: The preferred width of the dialog. Note that the dialog will shrink to accommodate smaller screens.\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --content-background: defaults to #{$layer-bg-color};\n * @prop --footer-background: defaults to #{$color-celsius};\n * @prop --box-shadow: defaults to $layer-shadow-xlarge;\n * @prop --close-button-color: defaults to #{$color-mediumgrey};\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --tint-color: colour used to highlight items in the dialog - top ribbon, bottom close button. Default #{$color-blue};\n * @prop --width: defaults to 31rem;\n */\n:host {\n --border-radius: #{$layer-border-radius};\n --content-background: #fafafa;\n --footer-content: #{$color-lightgrey};\n --scrim-color: #{$layer-overlay-dark};\n --box-shadow: #{$layer-shadow-large};\n --close-button-color: #{$color-palegrey};\n --width: 60rem;\n --tint-color: #{$color-blue};\n --body-padding-v: #{$spacing-large};\n --body-padding-h: #{$spacing-large};\n --header-padding-v: #{$spacing-medium};\n --header-padding-h: #{$spacing-large};\n --footer-padding-v: #{$spacing-medium};\n --footer-padding-h: #{$spacing-large};\n}\n\n.dialog {\n $self: &;\n\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: #{$layer-index-modal};\n\n &:not(.dialog--visible) {\n @include hidden;\n }\n\n &__panel {\n display: flex;\n flex-direction: column;\n z-index: 2;\n width: var(--width);\n max-width: calc(100% - #{$spacing-xlarge});\n max-height: calc(92% - #{$spacing-xlarge});\n background-color: var(--content-background);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n opacity: 0;\n transform: scale(0.8);\n transition: #{$transition-fast} opacity, #{$transition-fast} transform;\n overflow: auto;\n\n &:focus {\n outline: none;\n }\n\n .dialog--with-ribbon & {\n border-top: 5px solid var(--tint-color);\n }\n\n .dialog--open & {\n display: flex;\n opacity: 1;\n transform: none;\n }\n\n .dialog--nodismiss & {\n animation: cannotClose 0.25s ease-in-out 1;\n\n @keyframes cannotClose {\n 0% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(1.08);\n }\n\n 100% {\n transform: scale(1);\n }\n }\n }\n }\n\n &__header {\n flex: 0 0 auto;\n display: flex;\n min-width: var(--width);\n width: 100%;\n background-color: var(--content-background);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n transition: #{$transition-xfast} box-shadow;\n\n .dialog--visible & {\n min-width: auto;\n }\n\n [stuck] & {\n box-shadow: #{$layer-shadow-medium};\n }\n }\n\n &__title {\n flex: 1 1 auto;\n font-size: #{$fontsize-large};\n line-height: 1.6;\n padding: var(--header-padding-v) var(--header-padding-h);\n }\n\n & &__close-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: #{$fontsize-xlarge};\n padding: 0 var(--header-padding-h);\n\n --color: var(--close-button-color);\n }\n\n &__body {\n padding: 0 var(--body-padding-h) var(--body-padding-v);\n\n .dialog:not(.dialog--has-header) & {\n padding-top: var(--body-padding-v);\n }\n\n & ::slotted(*) {\n max-width: 100%;\n }\n\n &-wrap {\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n border-radius: var(--border-radius);\n\n .dialog:not(.dialog--has-header) & {\n border-radius: 0 0 inherit inherit;\n }\n\n .dialog:not(.dialog--has-footer) & {\n border-radius: inherit inherit 0 0;\n }\n }\n }\n\n &__footer {\n width: 100%;\n padding: var(--footer-padding-v) var(--footer-padding-h);\n background: var(--footer-content);\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n position: relative;\n top: 1px;\n\n .dialog--visible & {\n min-width: auto;\n }\n\n ::slotted(button) {\n margin-right: #{$spacing-small} !important;\n }\n\n .dialog:not(.dialog--has-footer) & {\n display: none;\n }\n }\n\n &__close-txt {\n color: var(--tint-color);\n border: none;\n text-decoration: underline;\n margin: 0;\n text-underline-offset: 4px;\n background-color: transparent;\n font: inherit;\n -webkit-box-align: center;\n cursor: pointer;\n font-size: #{$fontsize-small};\n padding: 0.5rem;\n border-radius: #{$border-radius-small};\n transition: box-shadow 100ms ease-in-out;\n\n &:focus {\n outline: none;\n box-shadow: #{$control-focus-style};\n }\n }\n\n &__overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n .dialog--open & {\n opacity: 1;\n }\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n ComponentInterface,\n} from '@stencil/core';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../../utils/scroll';\nimport Modal from '../../utils/modal';\nimport { hasSlot, raf } from '../../utils';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\n\nlet id = 0;\n\n/**\n * Dialogs, sometimes called \"modals\", appear above the page and require the user's immediate attention.\n *\n * @slot - The dialog's content.\n * @slot label - The dialog's label. Alternatively, you can use the label prop.\n * @slot footer - The dialog's footer, usually one or more buttons representing various options.\n */\n@Component({\n tag: 'nano-dialog',\n styleUrl: 'dialog.scss',\n shadow: true,\n})\nexport class Dialog implements ComponentInterface {\n private componentId = `dialog-${++id}`;\n private modal: Modal;\n private panel: HTMLElement;\n private willShow = false;\n private willHide = false;\n private originalTrigger: HTMLElement | null;\n private overlay: HTMLElement;\n private addedTransEnd = false;\n\n @Element() host: HTMLNanoDialogElement;\n @State() isVisible = false;\n @State() noDismiss = false;\n @State() hasFooter = false;\n\n /** Show a colour ribbon at the top of the modal */\n @Prop() showRibbon = true;\n\n /** Indicates whether or not the dialog is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The dialog's label as displayed in the header. You should always include a relevant\n * label even when using `no-header`, as it is required for proper accessibility. */\n @Prop() label = '';\n\n /** Set to true to disable the header. This will also remove the default close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noHeader = false;\n\n /** Set to true to disable the footer. This will also remove the footer close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noFooter = false;\n\n /** An alternative to `preventDefault()` on the `nanoRequestClose` event. This will hide the close button and disable clicks on the overlay or presses the `Escape` key */\n @Prop() noUserDismiss = false;\n\n /** Store search queries (against this ID) to the component store. Use in conjunction with storeMethod */\n @Prop() storeId?: string;\n\n /** The method of storage. Either session storage, url hash (after the '#') or url query (after the '?'). */\n @Prop() storeMethod: StorageMethods = 'url-hash';\n\n @Watch('open')\n handleOpenChange() {\n this.open ? this.show() : this.hide();\n }\n\n /** Emitted when the dialog opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the dialog opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the dialog closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the dialog closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Emitted when the dialog opens and the panel gains focus. Calling `event.preventDefault()` will prevent\n * focus and allow you to set it on a different element in the dialog, such as an input or button. */\n @Event() nanoInitialFocus: EventEmitter;\n\n /** Emitted when the user clicks the close button, clicks the overlay, or presses the `Escape` key. Calling `event.preventDefault()` will prevent the dialog from closing. */\n @Event() nanoRequestClose: EventEmitter;\n\n /** Shows the dialog */\n @Method()\n async show() {\n if (this.willShow) {\n return;\n }\n\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return;\n }\n\n this.originalTrigger = document.activeElement as HTMLElement;\n this.willShow = true;\n this.isVisible = true;\n this.open = true;\n this.modal.activate();\n\n lockBodyScrolling(this.host);\n\n if (this.open) {\n // Wait for the next frame before setting initial focus so the dialog is technically visible\n raf(() => {\n const nanoInitialFocus = this.nanoInitialFocus.emit();\n if (!nanoInitialFocus.defaultPrevented) {\n this.panel.focus({ preventScroll: true });\n }\n });\n }\n }\n\n /** Hides the dialog */\n @Method()\n async hide() {\n if (this.willHide) {\n return;\n }\n\n const nanoHide = this.nanoHide.emit();\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return;\n }\n\n this.willHide = true;\n this.open = false;\n this.modal.deactivate();\n unlockBodyScrolling(this.host);\n this.stopVideos();\n\n // Restore focus to the original trigger\n const trigger = this.originalTrigger;\n if (trigger && typeof trigger.focus === 'function') {\n setTimeout(() => trigger.focus());\n }\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n const nanoOverlayDismiss = this.nanoRequestClose.emit();\n\n if (!nanoOverlayDismiss.defaultPrevented && !this.noUserDismiss) {\n this.hide();\n } else {\n this.noDismiss = true;\n setTimeout((_) => (this.noDismiss = false), 250);\n }\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n event\n .composedPath()\n .find((node) => node === this.panel || node === this.overlay)\n ) {\n // Ensure we only emit one event when the target element is no longer visible\n this.isVisible = this.open;\n this.willShow = false;\n this.willHide = false;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n }\n };\n\n private handleSlotChange = () => {\n this.hasFooter = hasSlot(this.host, 'footer');\n };\n\n private stopVideos() {\n var videos: (HTMLVideoElement | HTMLIFrameElement)[] = Array.from(\n this.host.querySelectorAll('iframe,video')\n );\n videos.forEach((video) => {\n if (video.tagName.toLowerCase() === 'video')\n (video as HTMLVideoElement).pause();\n else {\n const src = video.src;\n video.src = src;\n }\n });\n }\n\n connectedCallback() {\n this.modal = new Modal(this.host);\n if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n componentWillLoad() {\n this.handleSlotChange();\n // Show on init if open\n if (this.open) this.show();\n if (this.storeId)\n ComponentStore.init(this, ['open'], this.storeMethod, this.storeId);\n }\n\n componentDidLoad() {\n if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n render() {\n return (\n <Host showing={this.isVisible ? true : undefined}>\n <div\n part=\"base\"\n class={{\n dialog: true,\n 'dialog--open': this.open,\n 'dialog--visible': this.isVisible,\n 'dialog--has-footer': !this.noFooter,\n 'dialog--has-header': !this.noHeader,\n 'dialog--nodismiss': this.noDismiss,\n 'dialog--with-ribbon': this.showRibbon,\n }}\n onKeyDown={this.handleKeyDown}\n >\n <div\n part=\"overlay\"\n class=\"dialog__overlay\"\n ref={(el) => (this.overlay = el)}\n onClick={this.requestClose}\n />\n\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class=\"dialog__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-label={this.noHeader ? this.label : null}\n aria-labelledby={\n !this.noHeader ? `${this.componentId}-title` : null\n }\n tabIndex={0}\n >\n <div class=\"dialog__body-wrap\">\n {!this.noHeader && (\n <nano-sticker>\n <header part=\"header\" class=\"dialog__header\">\n <span\n part=\"title\"\n class=\"dialog__title\"\n id={`${this.componentId}-title`}\n >\n <slot name=\"label\">\n {/* If there's no label, use an invisible character to prevent the heading from collapsing */}\n {this.label || String.fromCharCode(65279)}\n </slot>\n </span>\n {!this.noUserDismiss && (\n <nano-icon-button\n exportparts=\"base:close-button\"\n class=\"dialog__close-icon\"\n label=\"close dialog\"\n onClick={this.requestClose}\n iconName=\"light/times\"\n />\n )}\n </header>\n </nano-sticker>\n )}\n <div part=\"body\" class=\"dialog__body\">\n <slot />\n </div>\n {!this.noFooter && (this.hasFooter || !this.noUserDismiss) && (\n <nano-sticker position=\"bottom\">\n <footer part=\"footer\" class=\"dialog__footer\">\n <slot name=\"footer\" onSlotchange={this.handleSlotChange} />\n {!this.noUserDismiss && (\n <button\n class=\"dialog__close-txt\"\n onClick={this.requestClose}\n >\n Close\n </button>\n )}\n </footer>\n </nano-sticker>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["src/components/dialog/dialog.scss?tag=nano-dialog&encapsulation=shadow","src/components/dialog/dialog.tsx"],"names":["dialogCss","id","Dialog","class_1","hostRef","_this","this","componentId","willShow","willHide","addedTransEnd","isVisible","noDismiss","hasFooter","showRibbon","open","noHeader","noFooter","noUserDismiss","storeMethod","handleKeyDown","event","key","requestClose","nanoOverlayDismiss","nanoRequestClose","emit","defaultPrevented","hide","setTimeout","_","handleTransitionEnd","propertyName","composedPath","find","node","panel","overlay","nanoAfterShow","nanoAfterHide","handleSlotChange","hasSlot","host","prototype","handleOpenChange","show","nanoShow","originalTrigger","document","activeElement","modal","activate","lockBodyScrolling","addEventListener","nanoInitialFocus","focus","preventScroll","once","nanoHide","deactivate","unlockBodyScrolling","stopVideos","trigger","videos","Array","from","querySelectorAll","forEach","video","tagName","toLowerCase","pause","src","connectedCallback","Modal","componentWillLoad","storeId","ComponentStore","init","componentDidLoad","disconnectedCallback","removeEventListener","render","h","Host","showing","undefined","part","class","dialog","dialog--open","dialog--visible","dialog--has-footer","dialog--has-header","dialog--nodismiss","dialog--with-ribbon","onKeyDown","ref","el","onClick","role","aria-modal","aria-hidden","aria-label","label","aria-labelledby","tabIndex","name","String","fromCharCode","exportparts","iconName","position","onSlotchange"],"mappings":"s4DAAA,IAAMA,UAAY,qzLCqBlB,IAAIC,GAAK,MAcIC,OAAM,WALnB,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,gWAMUA,KAAAC,YAAc,aAAYN,GAG1BK,KAAAE,SAAW,MACXF,KAAAG,SAAW,MAGXH,KAAAI,cAAgB,MAGfJ,KAAAK,UAAY,MACZL,KAAAM,UAAY,MACZN,KAAAO,UAAY,MAGbP,KAAAQ,WAAa,KAGmBR,KAAAS,KAAO,MAQvCT,KAAAU,SAAW,MAIXV,KAAAW,SAAW,MAGXX,KAAAY,cAAgB,MAMhBZ,KAAAa,YAA8B,WAwF9Bb,KAAAc,cAAgB,SAACC,GACvB,GAAIA,EAAMC,MAAQ,SAAU,CAC1BjB,EAAKkB,iBAIDjB,KAAAiB,aAAe,WACrB,IAAMC,EAAqBnB,EAAKoB,iBAAiBC,OAEjD,IAAKF,EAAmBG,mBAAqBtB,EAAKa,cAAe,CAC/Db,EAAKuB,WACA,CACLvB,EAAKO,UAAY,KACjBiB,YAAW,SAACC,GAAC,OAAMzB,EAAKO,UAAY,QAAQ,OAIxCN,KAAAyB,oBAAsB,SAACV,GAC7B,GACEA,EAAMW,eAAiB,WACvBX,EACGY,eACAC,MAAK,SAACC,GAAS,OAAAA,IAAS9B,EAAK+B,OAASD,IAAS9B,EAAKgC,WACvD,CAEAhC,EAAKM,UAAYN,EAAKU,KACtBV,EAAKG,SAAW,MAChBH,EAAKI,SAAW,MAChBJ,EAAKU,KAAOV,EAAKiC,cAAcZ,OAASrB,EAAKkC,cAAcb,SAIvDpB,KAAAkC,iBAAmB,WACzBnC,EAAKQ,UAAY4B,QAAQpC,EAAKqC,KAAM,WAtHtCvC,EAAAwC,UAAAC,iBAAA,WACEtC,KAAKS,KAAOT,KAAKuC,OAASvC,KAAKsB,QAwB3BzB,EAAAwC,UAAAE,KAAN,iHACE,GAAIvC,KAAKE,SAAU,CACjB,MAAA,CAAA,GAGIsC,EAAWxC,KAAKwC,SAASpB,OAC/B,GAAIoB,EAASnB,iBAAkB,CAC7BrB,KAAKS,KAAO,MACZ,MAAA,CAAA,GAGFT,KAAKyC,gBAAkBC,SAASC,cAChC3C,KAAKE,SAAW,KAChBF,KAAKK,UAAY,KACjBL,KAAKS,KAAO,KACZT,KAAK4C,MAAMC,WAEXC,kBAAkB9C,KAAKoC,MAEvB,GAAIpC,KAAKS,KAAM,CAEbT,KAAKoC,KAAKW,iBACR,iBACA,WACE,IAAMC,EAAmBjD,EAAKiD,iBAAiB5B,OAC/C,IAAK4B,EAAiB3B,iBAAkB,CACtCtB,EAAK+B,MAAMmB,MAAM,CAAEC,cAAe,UAGtC,CAAEC,KAAM,wBAORtD,EAAAwC,UAAAf,KAAN,wGACE,GAAItB,KAAKG,SAAU,CACjB,MAAA,CAAA,GAGIiD,EAAWpD,KAAKoD,SAAShC,OAC/B,GAAIgC,EAAS/B,iBAAkB,CAC7BrB,KAAKS,KAAO,KACZ,MAAA,CAAA,GAGFT,KAAKG,SAAW,KAChBH,KAAKS,KAAO,MACZT,KAAK4C,MAAMS,aACXC,oBAAoBtD,KAAKoC,MACzBpC,KAAKuD,aAGCC,EAAUxD,KAAKyC,gBACrB,GAAIe,UAAkBA,EAAQP,QAAU,WAAY,CAClD1B,YAAW,WAAM,OAAAiC,EAAQP,4BAwCrBpD,EAAAwC,UAAAkB,WAAA,WACN,IAAIE,EAAmDC,MAAMC,KAC3D3D,KAAKoC,KAAKwB,iBAAiB,iBAE7BH,EAAOI,SAAQ,SAACC,GACd,GAAIA,EAAMC,QAAQC,gBAAkB,QACjCF,EAA2BG,YACzB,CACH,IAAMC,EAAMJ,EAAMI,IAClBJ,EAAMI,IAAMA,OAKlBrE,EAAAwC,UAAA8B,kBAAA,WACEnE,KAAK4C,MAAQ,IAAIwB,MAAMpE,KAAKoC,MAC5B,GAAIpC,KAAK8B,MAAO,CACd9B,KAAKI,cAAgB,KACrBJ,KAAK8B,MAAMiB,iBAAiB,gBAAiB/C,KAAKyB,uBAItD5B,EAAAwC,UAAAgC,kBAAA,WACErE,KAAKkC,mBAEL,GAAIlC,KAAKS,KAAMT,KAAKuC,OACpB,GAAIvC,KAAKsE,QACPC,eAAeC,KAAKxE,KAAM,CAAC,QAASA,KAAKa,YAAab,KAAKsE,UAG/DzE,EAAAwC,UAAAoC,iBAAA,WACE,IAAKzE,KAAKI,cAAe,CACvBJ,KAAK8B,MAAMiB,iBAAiB,gBAAiB/C,KAAKyB,uBAItD5B,EAAAwC,UAAAqC,qBAAA,WACEpB,oBAAoBtD,KAAKoC,MACzBpC,KAAKI,cAAgB,MACrBJ,KAAK8B,MAAM6C,oBAAoB,gBAAiB3E,KAAKyB,sBAGvD5B,EAAAwC,UAAAuC,OAAA,WAAA,IAAA7E,EAAAC,KACE,OACE6E,EAACC,KAAI,CAACC,QAAS/E,KAAKK,UAAY,KAAO2E,WACrCH,EAAA,MAAA,CACEI,KAAK,OACLC,MAAO,CACLC,OAAQ,KACRC,eAAgBpF,KAAKS,KACrB4E,kBAAmBrF,KAAKK,UACxBiF,sBAAuBtF,KAAKW,SAC5B4E,sBAAuBvF,KAAKU,SAC5B8E,oBAAqBxF,KAAKM,UAC1BmF,sBAAuBzF,KAAKQ,YAE9BkF,UAAW1F,KAAKc,eAEhB+D,EAAA,MAAA,CACEI,KAAK,UACLC,MAAM,kBACNS,IAAK,SAACC,GAAE,OAAM7F,EAAKgC,QAAU6D,GAC7BC,QAAS7F,KAAKiB,eAGhB4D,EAAA,MAAA,CACEc,IAAK,SAACC,GAAE,OAAM7F,EAAK+B,MAAQ8D,GAC3BX,KAAK,QACLC,MAAM,gBACNY,KAAK,SAAQC,aACF,OAAMC,cACJhG,KAAKS,KAAO,QAAU,OAAMwF,aAC7BjG,KAAKU,SAAWV,KAAKkG,MAAQ,KAAIC,mBAE1CnG,KAAKU,SAAcV,KAAKC,YAAW,SAAW,KAEjDmG,SAAU,GAEVvB,EAAA,MAAA,CAAKK,MAAM,sBACPlF,KAAKU,UACLmE,EAAA,eAAA,KACEA,EAAA,SAAA,CAAQI,KAAK,SAASC,MAAM,kBAC1BL,EAAA,OAAA,CACEI,KAAK,QACLC,MAAM,gBACNvF,GAAOK,KAAKC,YAAW,UAEvB4E,EAAA,OAAA,CAAMwB,KAAK,SAERrG,KAAKkG,OAASI,OAAOC,aAAa,UAGrCvG,KAAKY,eACLiE,EAAA,mBAAA,CACE2B,YAAY,oBACZtB,MAAM,qBACNgB,MAAM,eACNL,QAAS7F,KAAKiB,aACdwF,SAAS,kBAMnB5B,EAAA,MAAA,CAAKI,KAAK,OAAOC,MAAM,gBACrBL,EAAA,OAAA,QAEA7E,KAAKW,WAAaX,KAAKO,YAAcP,KAAKY,gBAC1CiE,EAAA,eAAA,CAAc6B,SAAS,UACrB7B,EAAA,SAAA,CAAQI,KAAK,SAASC,MAAM,kBAC1BL,EAAA,OAAA,CAAMwB,KAAK,SAASM,aAAc3G,KAAKkC,oBACrClC,KAAKY,eACLiE,EAAA,SAAA,CACEK,MAAM,oBACNW,QAAS7F,KAAKiB,cAAY,2QAtR/B","sourcesContent":["@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n@import '../../global/style/nano-theme/form';\n\n/**\n * @prop --width: The preferred width of the dialog. Note that the dialog will shrink to accommodate smaller screens.\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --content-background: defaults to #{$layer-bg-color};\n * @prop --footer-background: defaults to #{$color-celsius};\n * @prop --box-shadow: defaults to $layer-shadow-xlarge;\n * @prop --close-button-color: defaults to #{$color-mediumgrey};\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --tint-color: colour used to highlight items in the dialog - top ribbon, bottom close button. Default #{$color-blue};\n * @prop --width: defaults to 31rem;\n */\n:host {\n --border-radius: #{$layer-border-radius};\n --content-background: #fafafa;\n --footer-content: #{$color-lightgrey};\n --scrim-color: #{$layer-overlay-dark};\n --box-shadow: #{$layer-shadow-large};\n --close-button-color: #{$color-palegrey};\n --width: 60rem;\n --tint-color: #{darken($color-blue, 5%)};\n --body-padding-v: #{$spacing-large};\n --body-padding-h: #{$spacing-large};\n --header-padding-v: #{$spacing-medium};\n --header-padding-h: #{$spacing-large};\n --footer-padding-v: #{$spacing-medium};\n --footer-padding-h: #{$spacing-large};\n}\n\n.dialog {\n $self: &;\n\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: #{$layer-index-modal};\n\n &:not(.dialog--visible) {\n @include hidden;\n }\n\n &__panel {\n display: flex;\n flex-direction: column;\n z-index: 2;\n width: var(--width);\n max-width: calc(100% - #{$spacing-xlarge});\n max-height: calc(92% - #{$spacing-xlarge});\n background-color: var(--content-background);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n opacity: 0;\n transform: scale(0.8);\n transition: #{$transition-fast} opacity, #{$transition-fast} transform;\n\n &:focus {\n outline: none;\n }\n\n .dialog--with-ribbon & {\n border-top: 5px solid var(--tint-color);\n }\n\n .dialog--open & {\n display: flex;\n opacity: 1;\n transform: none;\n }\n\n .dialog--nodismiss & {\n animation: cannotClose 0.25s ease-in-out 1;\n\n @keyframes cannotClose {\n 0% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(1.08);\n }\n\n 100% {\n transform: scale(1);\n }\n }\n }\n }\n\n &__header {\n flex: 0 0 auto;\n display: flex;\n min-width: var(--width);\n width: 100%;\n background-color: var(--content-background);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n transition: #{$transition-xfast} box-shadow;\n\n .dialog--visible & {\n min-width: auto;\n }\n\n [stuck] & {\n box-shadow: #{$layer-shadow-medium};\n }\n }\n\n &__title {\n flex: 1 1 auto;\n font-size: #{$fontsize-large};\n line-height: 1.6;\n padding: var(--header-padding-v) var(--header-padding-h);\n }\n\n & &__close-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: #{$fontsize-xlarge};\n padding: 0 var(--header-padding-h);\n\n --color: var(--close-button-color);\n }\n\n &__body {\n padding: 0 var(--body-padding-h) var(--body-padding-v);\n\n .dialog:not(.dialog--has-header) & {\n padding-top: var(--body-padding-v);\n }\n\n & ::slotted(*) {\n max-width: 100%;\n }\n\n &-wrap {\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n border-radius: var(--border-radius);\n\n .dialog:not(.dialog--has-header) & {\n border-radius: 0 0 inherit inherit;\n }\n\n .dialog:not(.dialog--has-footer) & {\n border-radius: inherit inherit 0 0;\n }\n }\n }\n\n &__footer {\n width: 100%;\n padding: var(--footer-padding-v) var(--footer-padding-h);\n background: var(--footer-content);\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n position: relative;\n top: 1px;\n\n .dialog--visible & {\n min-width: auto;\n }\n\n ::slotted(button) {\n margin-right: #{$spacing-small} !important;\n }\n\n .dialog:not(.dialog--has-footer) & {\n display: none;\n }\n }\n\n &__close-txt {\n color: var(--tint-color);\n border: none;\n text-decoration: underline;\n margin: 0;\n text-underline-offset: 4px;\n background-color: transparent;\n font: inherit;\n -webkit-box-align: center;\n cursor: pointer;\n font-size: #{$fontsize-small};\n padding: 0.5rem;\n border-radius: #{$border-radius-small};\n transition: box-shadow 100ms ease-in-out;\n\n &:focus {\n outline: none;\n box-shadow: #{$control-focus-style};\n }\n }\n\n &__overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n .dialog--open & {\n opacity: 1;\n }\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n ComponentInterface,\n} from '@stencil/core';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../../utils/scroll';\nimport Modal from '../../utils/modal';\nimport { hasSlot } from '../../utils';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\n\nlet id = 0;\n\n/**\n * Dialogs, sometimes called \"modals\", appear above the page and require the user's immediate attention.\n *\n * @slot - The dialog's content.\n * @slot label - The dialog's label. Alternatively, you can use the label prop.\n * @slot footer - The dialog's footer, usually one or more buttons representing various options.\n */\n@Component({\n tag: 'nano-dialog',\n styleUrl: 'dialog.scss',\n shadow: true,\n})\nexport class Dialog implements ComponentInterface {\n private componentId = `dialog-${++id}`;\n private modal: Modal;\n private panel: HTMLElement;\n private willShow = false;\n private willHide = false;\n private originalTrigger: HTMLElement | null;\n private overlay: HTMLElement;\n private addedTransEnd = false;\n\n @Element() host: HTMLNanoDialogElement;\n @State() isVisible = false;\n @State() noDismiss = false;\n @State() hasFooter = false;\n\n /** Show a colour ribbon at the top of the modal */\n @Prop() showRibbon = true;\n\n /** Indicates whether or not the dialog is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The dialog's label as displayed in the header. You should always include a relevant\n * label even when using `no-header`, as it is required for proper accessibility. */\n @Prop() label!: string;\n\n /** Set to true to disable the header. This will also remove the default close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noHeader = false;\n\n /** Set to true to disable the footer. This will also remove the footer close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noFooter = false;\n\n /** An alternative to `preventDefault()` on the `nanoRequestClose` event. This will hide the close button and disable clicks on the overlay or presses the `Escape` key */\n @Prop() noUserDismiss = false;\n\n /** Store search queries (against this ID) to the component store. Use in conjunction with storeMethod */\n @Prop() storeId?: string;\n\n /** The method of storage. Either session storage, url hash (after the '#') or url query (after the '?'). */\n @Prop() storeMethod: StorageMethods = 'url-hash';\n\n @Watch('open')\n handleOpenChange() {\n this.open ? this.show() : this.hide();\n }\n\n /** Emitted when the dialog opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the dialog opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the dialog closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the dialog closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Emitted when the dialog opens and the panel gains focus. Calling `event.preventDefault()` will prevent\n * focus and allow you to set it on a different element in the dialog, such as an input or button. */\n @Event() nanoInitialFocus: EventEmitter;\n\n /** Emitted when the user clicks the close button, clicks the overlay, or presses the `Escape` key. Calling `event.preventDefault()` will prevent the dialog from closing. */\n @Event() nanoRequestClose: EventEmitter;\n\n /** Shows the dialog */\n @Method()\n async show() {\n if (this.willShow) {\n return;\n }\n\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return;\n }\n\n this.originalTrigger = document.activeElement as HTMLElement;\n this.willShow = true;\n this.isVisible = true;\n this.open = true;\n this.modal.activate();\n\n lockBodyScrolling(this.host);\n\n if (this.open) {\n // Wait for the next frame before setting initial focus so the dialog is technically visible\n this.host.addEventListener(\n 'nanoAfterShow',\n () => {\n const nanoInitialFocus = this.nanoInitialFocus.emit();\n if (!nanoInitialFocus.defaultPrevented) {\n this.panel.focus({ preventScroll: true });\n }\n },\n { once: true }\n );\n }\n }\n\n /** Hides the dialog */\n @Method()\n async hide() {\n if (this.willHide) {\n return;\n }\n\n const nanoHide = this.nanoHide.emit();\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return;\n }\n\n this.willHide = true;\n this.open = false;\n this.modal.deactivate();\n unlockBodyScrolling(this.host);\n this.stopVideos();\n\n // Restore focus to the original trigger\n const trigger = this.originalTrigger;\n if (trigger && typeof trigger.focus === 'function') {\n setTimeout(() => trigger.focus());\n }\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n const nanoOverlayDismiss = this.nanoRequestClose.emit();\n\n if (!nanoOverlayDismiss.defaultPrevented && !this.noUserDismiss) {\n this.hide();\n } else {\n this.noDismiss = true;\n setTimeout((_) => (this.noDismiss = false), 250);\n }\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n event\n .composedPath()\n .find((node) => node === this.panel || node === this.overlay)\n ) {\n // Ensure we only emit one event when the target element is no longer visible\n this.isVisible = this.open;\n this.willShow = false;\n this.willHide = false;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n }\n };\n\n private handleSlotChange = () => {\n this.hasFooter = hasSlot(this.host, 'footer');\n };\n\n private stopVideos() {\n var videos: (HTMLVideoElement | HTMLIFrameElement)[] = Array.from(\n this.host.querySelectorAll('iframe,video')\n );\n videos.forEach((video) => {\n if (video.tagName.toLowerCase() === 'video')\n (video as HTMLVideoElement).pause();\n else {\n const src = video.src;\n video.src = src;\n }\n });\n }\n\n connectedCallback() {\n this.modal = new Modal(this.host);\n if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n componentWillLoad() {\n this.handleSlotChange();\n // Show on init if open\n if (this.open) this.show();\n if (this.storeId)\n ComponentStore.init(this, ['open'], this.storeMethod, this.storeId);\n }\n\n componentDidLoad() {\n if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n render() {\n return (\n <Host showing={this.isVisible ? true : undefined}>\n <div\n part=\"base\"\n class={{\n dialog: true,\n 'dialog--open': this.open,\n 'dialog--visible': this.isVisible,\n 'dialog--has-footer': !this.noFooter,\n 'dialog--has-header': !this.noHeader,\n 'dialog--nodismiss': this.noDismiss,\n 'dialog--with-ribbon': this.showRibbon,\n }}\n onKeyDown={this.handleKeyDown}\n >\n <div\n part=\"overlay\"\n class=\"dialog__overlay\"\n ref={(el) => (this.overlay = el)}\n onClick={this.requestClose}\n />\n\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class=\"dialog__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-label={this.noHeader ? this.label : null}\n aria-labelledby={\n !this.noHeader ? `${this.componentId}-title` : null\n }\n tabIndex={0}\n >\n <div class=\"dialog__body-wrap\">\n {!this.noHeader && (\n <nano-sticker>\n <header part=\"header\" class=\"dialog__header\">\n <span\n part=\"title\"\n class=\"dialog__title\"\n id={`${this.componentId}-title`}\n >\n <slot name=\"label\">\n {/* If there's no label, use an invisible character to prevent the heading from collapsing */}\n {this.label || String.fromCharCode(65279)}\n </slot>\n </span>\n {!this.noUserDismiss && (\n <nano-icon-button\n exportparts=\"base:close-button\"\n class=\"dialog__close-icon\"\n label=\"close dialog\"\n onClick={this.requestClose}\n iconName=\"light/times\"\n />\n )}\n </header>\n </nano-sticker>\n )}\n <div part=\"body\" class=\"dialog__body\">\n <slot />\n </div>\n {!this.noFooter && (this.hasFooter || !this.noUserDismiss) && (\n <nano-sticker position=\"bottom\">\n <footer part=\"footer\" class=\"dialog__footer\">\n <slot name=\"footer\" onSlotchange={this.handleSlotChange} />\n {!this.noUserDismiss && (\n <button\n class=\"dialog__close-txt\"\n onClick={this.requestClose}\n >\n Close\n </button>\n )}\n </footer>\n </nano-sticker>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- var __awaiter=this&&this.__awaiter||function(e,t,r,n){function o(e){return e instanceof r?e:new r((function(t){t(e)}))}return new(r||(r=Promise))((function(r,i){function a(e){try{l(n.next(e))}catch(t){i(t)}}function s(e){try{l(n["throw"](e))}catch(t){i(t)}}function l(e){e.done?r(e.value):o(e.value).then(a,s)}l((n=n.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,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(e){return function(t){return l([e,t])}}function l(a){if(n)throw new TypeError("Generator is already executing.");while(r)try{if(n=1,o&&(i=a[0]&2?o["return"]:a[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,a[1])).done)return i;if(o=0,i)a=[a[0]&2,i.value];switch(a[0]){case 0:case 1:i=a;break;case 4:r.label++;return{value:a[1],done:false};case 5:r.label++;o=a[1];a=[0];continue;case 7:a=r.ops.pop();r.trys.pop();continue;default:if(!(i=r.trys,i=i.length>0&&i[i.length-1])&&(a[0]===6||a[0]===2)){r=0;continue}if(a[0]===3&&(!i||a[1]>i[0]&&a[1]<i[3])){r.label=a[1];break}if(a[0]===6&&r.label<i[1]){r.label=i[1];i=a;break}if(i&&r.label<i[2]){r.label=i[2];r.ops.push(a);break}if(i[2])r.ops.pop();r.trys.pop();continue}a=t.call(e,r)}catch(s){a=[6,s];o=0}finally{n=i=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};import{r as registerInstance,c as createEvent,h,e as Host,g as getElement}from"./index-8e9bc704.js";import{u as unlockBodyScrolling,l as lockBodyScrolling}from"./scroll-4162ee24.js";import{M as Modal}from"./modal-1029407c.js";import"./dom-ae168a2d.js";import"./tabbable-7818e4c2.js";var drawerCss=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{position:relative;display:block;--size:25rem;--panel-background-color:white;--panel-shadow:0 4px 16px rgba(0, 0, 0, 0.1);--overlay-color:hsla(203, 10%, 20%, 0.5)}.drawer{top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.drawer:not(.drawer--visible){position:absolute;width:1px;height:1px;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;pointer-events:none;visibility:hidden}.drawer--contained{position:absolute;z-index:initial}.drawer--fixed{position:fixed;z-index:2000}.drawer__panel{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;z-index:2;max-width:100%;max-height:100%;background-color:var(--panel-background-color);-webkit-box-shadow:var(--panel-shadow);box-shadow:var(--panel-shadow);-webkit-transition:250ms -webkit-transform;transition:250ms -webkit-transform;transition:250ms transform;transition:250ms transform, 250ms -webkit-transform;overflow:auto;pointer-events:all}.drawer__panel:focus{outline:none}.drawer--start .drawer__panel{left:0;right:auto;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);top:0;bottom:auto;width:var(--size);height:100%}.drawer--start .drawer__panel[dir=rtl]{left:unset;right:unset;left:auto;right:0}.drawer--start .drawer__panel[dir=rtl]{-webkit-transform:translate3d(calc(-1 * -100%), 0, 0);transform:translate3d(calc(-1 * -100%), 0, 0)}.drawer--end .drawer__panel{left:auto;right:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);top:0;bottom:auto;width:var(--size);height:100%}.drawer--end .drawer__panel[dir=rtl]{left:unset;right:unset;left:0;right:auto}.drawer--end .drawer__panel[dir=rtl]{-webkit-transform:translate3d(calc(-1 * 100%), 0, 0);transform:translate3d(calc(-1 * 100%), 0, 0)}.drawer--top .drawer__panel{top:0;right:auto;bottom:auto;left:0;width:100%;height:var(--size);-webkit-transform:translate(0, -100%);transform:translate(0, -100%)}.drawer--bottom .drawer__panel{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--size);-webkit-transform:translate(0, 100%);transform:translate(0, 100%)}.drawer--open .drawer__panel{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.drawer__header{display:-webkit-box;display:-ms-flexbox;display:flex}.drawer__title{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:20px}.drawer__close{-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}.drawer__body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;-webkit-overflow-scrolling:touch}.drawer__footer{text-align:right}.drawer:not(.drawer--has-footer) .drawer__footer{display:none}.drawer__overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--overlay-color);opacity:0;-webkit-transition:250ms opacity;transition:250ms opacity;pointer-events:all}.drawer--contained .drawer__overlay{position:absolute}.drawer--open .drawer__overlay{opacity:1}";var id=0;var Drawer=function(){function e(e){registerInstance(this,e);this.nanoShow=createEvent(this,"nanoShow",7);this.nanoAfterShow=createEvent(this,"nanoAfterShow",7);this.nanoHide=createEvent(this,"nanoHide",7);this.nanoAfterHide=createEvent(this,"nanoAfterHide",7);this.nanoOverlayDismiss=createEvent(this,"nanoOverlayDismiss",7);this.componentId="drawer-"+ ++id;this.hasFooter=false;this.isVisible=false;this.open=false;this.label="";this.placement="end";this.contained=false;this.noHeader=false;this.type="overlay"}e.prototype.handleOpenChange=function(){this.open?this.show():this.hide()};e.prototype.handleTypeChange=function(){if(this.type!=="push"&&this.type!=="reveal")return;if(!this.contentEle){this.type="overlay";console.warn("a valid contentSelector must be set");return}};e.prototype.handleContentSelector=function(){if(!this.contentSelector)this.contentEle=null;else this.contentEle=this.host.ownerDocument.querySelector(this.contentSelector)};e.prototype.connectedCallback=function(){this.handleCloseClick=this.handleCloseClick.bind(this);this.handleTransitionEnd=this.handleTransitionEnd.bind(this);this.handleKeyDown=this.handleKeyDown.bind(this);this.handleOverlayClick=this.handleOverlayClick.bind(this);this.handleSlotChange=this.handleSlotChange.bind(this);this.modal=new Modal(this.host)};e.prototype.componentWillLoad=function(){if(this.open){this.show()}this.handleContentSelector()};e.prototype.disconnectedCallback=function(){unlockBodyScrolling(this.host)};e.prototype.show=function(){return __awaiter(this,void 0,void 0,(function(){var e;var t=this;return __generator(this,(function(r){if(this.isVisible){return[2]}e=this.nanoShow.emit();if(e.defaultPrevented){this.open=false;return[2]}this.isVisible=true;this.open=true;if(!this.contained){this.modal.activate();lockBodyScrolling(this.host)}if(!this.contentEle||this.type!=="push"&&this.type!=="reveal")return[2];this.contentEle.style.right="0";this.contentEle.style.transition="all ease 250ms";this.contentEle.style.position="relative";this.contentEle.style.overflow="hidden";setTimeout((function(e){return t.contentEle.style.right="25rem"}),0);return[2]}))}))};e.prototype.hide=function(){return __awaiter(this,void 0,void 0,(function(){var e;return __generator(this,(function(t){if(!this.isVisible){return[2]}e=this.nanoHide.emit();if(e.defaultPrevented){this.open=true;return[2]}this.open=false;this.modal.deactivate();unlockBodyScrolling(this.host);if(!this.contentEle)return[2];this.contentEle.style.transition="";this.contentEle.style.position="";this.contentEle.style.overflow="";this.contentEle.style.right="";return[2]}))}))};e.prototype.handleCloseClick=function(){this.hide()};e.prototype.handleKeyDown=function(e){if(e.key==="Escape"){this.hide()}};e.prototype.handleOverlayClick=function(){var e=this.nanoOverlayDismiss.emit();if(!e.defaultPrevented){this.hide()}};e.prototype.handleSlotChange=function(){this.hasFooter=!!this.host.querySelector('[slot="footer"]')};e.prototype.handleTransitionEnd=function(e){var t=e.target;if(e.propertyName==="transform"&&t.classList.contains("drawer__panel")){this.isVisible=this.open;this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit();if(this.open){this.panel.focus()}}};e.prototype.render=function(){var e;var t=this;var r="drawer--"+this.placement;var n="drawer--"+this.type;var o=this.host.ownerDocument.dir==="rtl";return h(Host,{dir:o?"rtl":null},h("div",{part:"base",class:(e={drawer:true,"drawer--open":this.open,"drawer--visible":this.isVisible},e[n]=true,e[r]=true,e["drawer--contained"]=this.contained,e["drawer--fixed"]=!this.contained,e["drawer--has-footer"]=this.hasFooter,e),onKeyDown:this.handleKeyDown,onTransitionEnd:this.handleTransitionEnd},h("div",{part:"overlay",class:"drawer__overlay",onClick:this.handleOverlayClick}),h("div",{ref:function(e){return t.panel=e},part:"panel",class:"drawer__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:null,"aria-labelledby":!this.noHeader?this.componentId+"-title":null,tabIndex:0},!this.noHeader&&h("header",{part:"header",class:"drawer__header"},h("span",{part:"title",class:"drawer__title",id:this.componentId+"-title"},h("slot",{name:"label"},this.label||String.fromCharCode(65279)))),h("div",{part:"body",class:"drawer__body"},h("slot",null)),h("footer",{part:"footer",class:"drawer__footer"},h("slot",{name:"footer",onSlotchange:this.handleSlotChange})))))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(e,"watchers",{get:function(){return{open:["handleOpenChange"],type:["handleTypeChange"],contentSelector:["handleContentSelector"]}},enumerable:false,configurable:true});return e}();Drawer.style=drawerCss;export{Drawer as nano_drawer};
1
+ var __awaiter=this&&this.__awaiter||function(e,t,r,n){function o(e){return e instanceof r?e:new r((function(t){t(e)}))}return new(r||(r=Promise))((function(r,i){function a(e){try{l(n.next(e))}catch(t){i(t)}}function s(e){try{l(n["throw"](e))}catch(t){i(t)}}function l(e){e.done?r(e.value):o(e.value).then(a,s)}l((n=n.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,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(e){return function(t){return l([e,t])}}function l(a){if(n)throw new TypeError("Generator is already executing.");while(r)try{if(n=1,o&&(i=a[0]&2?o["return"]:a[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,a[1])).done)return i;if(o=0,i)a=[a[0]&2,i.value];switch(a[0]){case 0:case 1:i=a;break;case 4:r.label++;return{value:a[1],done:false};case 5:r.label++;o=a[1];a=[0];continue;case 7:a=r.ops.pop();r.trys.pop();continue;default:if(!(i=r.trys,i=i.length>0&&i[i.length-1])&&(a[0]===6||a[0]===2)){r=0;continue}if(a[0]===3&&(!i||a[1]>i[0]&&a[1]<i[3])){r.label=a[1];break}if(a[0]===6&&r.label<i[1]){r.label=i[1];i=a;break}if(i&&r.label<i[2]){r.label=i[2];r.ops.push(a);break}if(i[2])r.ops.pop();r.trys.pop();continue}a=t.call(e,r)}catch(s){a=[6,s];o=0}finally{n=i=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};import{r as registerInstance,c as createEvent,h,e as Host,g as getElement}from"./index-912ef959.js";import{u as unlockBodyScrolling,l as lockBodyScrolling}from"./scroll-4162ee24.js";import{M as Modal}from"./modal-1029407c.js";import"./dom-ae168a2d.js";import"./tabbable-7818e4c2.js";var drawerCss=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{position:relative;display:block;--size:25rem;--panel-background-color:white;--panel-shadow:0 4px 16px rgba(0, 0, 0, 0.1);--overlay-color:hsla(203, 10%, 20%, 0.5)}.drawer{top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.drawer:not(.drawer--visible){position:absolute;width:1px;height:1px;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;pointer-events:none;visibility:hidden}.drawer--contained{position:absolute;z-index:initial}.drawer--fixed{position:fixed;z-index:2000}.drawer__panel{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;z-index:2;max-width:100%;max-height:100%;background-color:var(--panel-background-color);-webkit-box-shadow:var(--panel-shadow);box-shadow:var(--panel-shadow);-webkit-transition:250ms -webkit-transform;transition:250ms -webkit-transform;transition:250ms transform;transition:250ms transform, 250ms -webkit-transform;overflow:auto;pointer-events:all}.drawer__panel:focus{outline:none}.drawer--start .drawer__panel{left:0;right:auto;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);top:0;bottom:auto;width:var(--size);height:100%}.drawer--start .drawer__panel[dir=rtl]{left:unset;right:unset;left:auto;right:0}.drawer--start .drawer__panel[dir=rtl]{-webkit-transform:translate3d(calc(-1 * -100%), 0, 0);transform:translate3d(calc(-1 * -100%), 0, 0)}.drawer--end .drawer__panel{left:auto;right:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);top:0;bottom:auto;width:var(--size);height:100%}.drawer--end .drawer__panel[dir=rtl]{left:unset;right:unset;left:0;right:auto}.drawer--end .drawer__panel[dir=rtl]{-webkit-transform:translate3d(calc(-1 * 100%), 0, 0);transform:translate3d(calc(-1 * 100%), 0, 0)}.drawer--top .drawer__panel{top:0;right:auto;bottom:auto;left:0;width:100%;height:var(--size);-webkit-transform:translate(0, -100%);transform:translate(0, -100%)}.drawer--bottom .drawer__panel{top:auto;right:auto;bottom:0;left:0;width:100%;height:var(--size);-webkit-transform:translate(0, 100%);transform:translate(0, 100%)}.drawer--open .drawer__panel{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.drawer__header{display:-webkit-box;display:-ms-flexbox;display:flex}.drawer__title{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:20px}.drawer__close{-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}.drawer__body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:auto;-webkit-overflow-scrolling:touch}.drawer__footer{text-align:right}.drawer:not(.drawer--has-footer) .drawer__footer{display:none}.drawer__overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--overlay-color);opacity:0;-webkit-transition:250ms opacity;transition:250ms opacity;pointer-events:all}.drawer--contained .drawer__overlay{position:absolute}.drawer--open .drawer__overlay{opacity:1}";var id=0;var Drawer=function(){function e(e){registerInstance(this,e);this.nanoShow=createEvent(this,"nanoShow",7);this.nanoAfterShow=createEvent(this,"nanoAfterShow",7);this.nanoHide=createEvent(this,"nanoHide",7);this.nanoAfterHide=createEvent(this,"nanoAfterHide",7);this.nanoOverlayDismiss=createEvent(this,"nanoOverlayDismiss",7);this.componentId="drawer-"+ ++id;this.hasFooter=false;this.isVisible=false;this.open=false;this.label="";this.placement="end";this.contained=false;this.noHeader=false;this.type="overlay"}e.prototype.handleOpenChange=function(){this.open?this.show():this.hide()};e.prototype.handleTypeChange=function(){if(this.type!=="push"&&this.type!=="reveal")return;if(!this.contentEle){this.type="overlay";console.warn("a valid contentSelector must be set");return}};e.prototype.handleContentSelector=function(){if(!this.contentSelector)this.contentEle=null;else this.contentEle=this.host.ownerDocument.querySelector(this.contentSelector)};e.prototype.connectedCallback=function(){this.handleCloseClick=this.handleCloseClick.bind(this);this.handleTransitionEnd=this.handleTransitionEnd.bind(this);this.handleKeyDown=this.handleKeyDown.bind(this);this.handleOverlayClick=this.handleOverlayClick.bind(this);this.handleSlotChange=this.handleSlotChange.bind(this);this.modal=new Modal(this.host)};e.prototype.componentWillLoad=function(){if(this.open){this.show()}this.handleContentSelector()};e.prototype.disconnectedCallback=function(){unlockBodyScrolling(this.host)};e.prototype.show=function(){return __awaiter(this,void 0,void 0,(function(){var e;var t=this;return __generator(this,(function(r){if(this.isVisible){return[2]}e=this.nanoShow.emit();if(e.defaultPrevented){this.open=false;return[2]}this.isVisible=true;this.open=true;if(!this.contained){this.modal.activate();lockBodyScrolling(this.host)}if(!this.contentEle||this.type!=="push"&&this.type!=="reveal")return[2];this.contentEle.style.right="0";this.contentEle.style.transition="all ease 250ms";this.contentEle.style.position="relative";this.contentEle.style.overflow="hidden";setTimeout((function(e){return t.contentEle.style.right="25rem"}),0);return[2]}))}))};e.prototype.hide=function(){return __awaiter(this,void 0,void 0,(function(){var e;return __generator(this,(function(t){if(!this.isVisible){return[2]}e=this.nanoHide.emit();if(e.defaultPrevented){this.open=true;return[2]}this.open=false;this.modal.deactivate();unlockBodyScrolling(this.host);if(!this.contentEle)return[2];this.contentEle.style.transition="";this.contentEle.style.position="";this.contentEle.style.overflow="";this.contentEle.style.right="";return[2]}))}))};e.prototype.handleCloseClick=function(){this.hide()};e.prototype.handleKeyDown=function(e){if(e.key==="Escape"){this.hide()}};e.prototype.handleOverlayClick=function(){var e=this.nanoOverlayDismiss.emit();if(!e.defaultPrevented){this.hide()}};e.prototype.handleSlotChange=function(){this.hasFooter=!!this.host.querySelector('[slot="footer"]')};e.prototype.handleTransitionEnd=function(e){var t=e.target;if(e.propertyName==="transform"&&t.classList.contains("drawer__panel")){this.isVisible=this.open;this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit();if(this.open){this.panel.focus()}}};e.prototype.render=function(){var e;var t=this;var r="drawer--"+this.placement;var n="drawer--"+this.type;var o=this.host.ownerDocument.dir==="rtl";return h(Host,{dir:o?"rtl":null},h("div",{part:"base",class:(e={drawer:true,"drawer--open":this.open,"drawer--visible":this.isVisible},e[n]=true,e[r]=true,e["drawer--contained"]=this.contained,e["drawer--fixed"]=!this.contained,e["drawer--has-footer"]=this.hasFooter,e),onKeyDown:this.handleKeyDown,onTransitionEnd:this.handleTransitionEnd},h("div",{part:"overlay",class:"drawer__overlay",onClick:this.handleOverlayClick}),h("div",{ref:function(e){return t.panel=e},part:"panel",class:"drawer__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:null,"aria-labelledby":!this.noHeader?this.componentId+"-title":null,tabIndex:0},!this.noHeader&&h("header",{part:"header",class:"drawer__header"},h("span",{part:"title",class:"drawer__title",id:this.componentId+"-title"},h("slot",{name:"label"},this.label||String.fromCharCode(65279)))),h("div",{part:"body",class:"drawer__body"},h("slot",null)),h("footer",{part:"footer",class:"drawer__footer"},h("slot",{name:"footer",onSlotchange:this.handleSlotChange})))))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(e,"watchers",{get:function(){return{open:["handleOpenChange"],type:["handleTypeChange"],contentSelector:["handleContentSelector"]}},enumerable:false,configurable:true});return e}();Drawer.style=drawerCss;export{Drawer as nano_drawer};
2
2
  //# sourceMappingURL=nano-drawer.entry.js.map
@@ -1,2 +1,2 @@
1
- var __awaiter=this&&this.__awaiter||function(e,n,a,t){function o(e){return e instanceof a?e:new a((function(n){n(e)}))}return new(a||(a=Promise))((function(a,i){function l(e){try{s(t.next(e))}catch(n){i(n)}}function r(e){try{s(t["throw"](e))}catch(n){i(n)}}function s(e){e.done?a(e.value):o(e.value).then(l,r)}s((t=t.apply(e,n||[])).next())}))};var __generator=this&&this.__generator||function(e,n){var a={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},t,o,i,l;return l={next:r(0),throw:r(1),return:r(2)},typeof Symbol==="function"&&(l[Symbol.iterator]=function(){return this}),l;function r(e){return function(n){return s([e,n])}}function s(l){if(t)throw new TypeError("Generator is already executing.");while(a)try{if(t=1,o&&(i=l[0]&2?o["return"]:l[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;if(o=0,i)l=[l[0]&2,i.value];switch(l[0]){case 0:case 1:i=l;break;case 4:a.label++;return{value:l[1],done:false};case 5:a.label++;o=l[1];l=[0];continue;case 7:l=a.ops.pop();a.trys.pop();continue;default:if(!(i=a.trys,i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){a=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){a.label=l[1];break}if(l[0]===6&&a.label<i[1]){a.label=i[1];i=l;break}if(i&&a.label<i[2]){a.label=i[2];a.ops.push(l);break}if(i[2])a.ops.pop();a.trys.pop();continue}l=n.call(e,a)}catch(r){l=[6,r];o=0}finally{t=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:true}}};var __spreadArray=this&&this.__spreadArray||function(e,n){for(var a=0,t=n.length,o=e.length;a<t;a++,o++)e[o]=n[a];return e};import{r as registerInstance,c as createEvent,h,e as Host,g as getElement}from"./index-8e9bc704.js";var fileUploadCss='.sc-nano-file-upload-h{-webkit-box-sizing:border-box;box-sizing:border-box}*.sc-nano-file-upload,*.sc-nano-file-upload::before,*.sc-nano-file-upload::after{-webkit-box-sizing:border-box;box-sizing:border-box}.sc-nano-file-upload-h{min-height:1rem;display:block;--invalid-msg-color:var(--nano-color-danger, #ef4135);--invalid-msg-font-size:var(--nano-input-help-font-size, 0.75em);--help-msg-color:var(--nano-input-help-color, #687576);--label-color:var(--nano-input-label-color, "currentColor");--label-font-size:var(--nano-input-label-color, 1em);--label-padding:var(--nano-input-padding-bottom, var(--nano-input-padding, 8px));--label-color--invalid:var(--nano-input-label-color-invalid, "currentColor");--drop-bg:#f2f7f9;--drop-text:#918b86;--drop-height:3.5em;--drop-border-tint:var(--nano-color-primary-rgb, 0, 132, 169);--drop-border-width:2px;--drop-border-radius:5px;--drop-bg--invalid:var(--nano-input-background-color, #fee8de);--drop-border--invalid:var(--nano-color-danger-rgb, 239, 65, 53);--btn-bg:var(--nano-color-primary, #0084a9);--btn-text:var(--nano-color-primary-contrast, #fff);--btn-icon-size:var(--nano-btn-icon-size, 1.4em);--btn-padding-top:var(--nano-btn-padding-top, 0.5em);--btn-padding-bottom:var(--nano-btn-padding-bottom, 0.5em);--btn-padding-start:var(--nano-btn-padding-start, 1em);--btn-padding-end:var(--nano-btn-padding-end, 1em)}[disabled].sc-nano-file-upload-h:not([disabled=false]){opacity:0.7}[disabled].sc-nano-file-upload-h:not([disabled=false]) *.sc-nano-file-upload{pointer-events:none !important}.file-upload__label.sc-nano-file-upload{font-size:var(--label-font-size);padding:0 0 var(--label-padding);margin:0;line-height:1}[invalid].sc-nano-file-upload-h:not([invalid=false]) .file-upload__label.sc-nano-file-upload{color:var(--label-color--invalid)}.file-upload__input.sc-nano-file-upload{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload,.file-upload__more.sc-nano-file-upload,.file-upload__label.sc-nano-file-upload{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-upload__more.sc-nano-file-upload{height:1em;margin-left:3px;margin-right:0;margin-top:calc(var(--label-padding) / 2);margin-bottom:var(--label-padding);position:relative}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__more.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:3px;margin-inline-start:3px;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload{top:0;left:0;position:absolute;font-size:var(--invalid-msg-font-size);line-height:1.2;-webkit-transition:0.3s ease-out opacity;transition:0.3s ease-out opacity}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload,.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:1}.file-upload__error.sc-nano-file-upload{color:var(--invalid-msg-color);font-stretch:condensed;opacity:0}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload{opacity:1}.file-upload__help.sc-nano-file-upload{font-style:italic;opacity:1;color:var(--help-msg-color)}.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:0}.file-upload__drop.sc-nano-file-upload{position:relative;width:100%;display:inline-block}.file-upload__drop-area.sc-nano-file-upload{background-color:var(--drop-bg);color:var(--drop-text);min-height:var(--drop-height);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:0.9em;position:relative;-webkit-transition:background-color 0.15s ease-in-out;transition:background-color 0.15s ease-in-out;padding:0.5rem}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__drop-area.sc-nano-file-upload{opacity:0.7}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:var(--drop-bg--invalid)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:#fff}.file-upload__drop-area.sc-nano-file-upload::after{content:"";position:absolute;border-radius:var(--drop-border-radius);border-width:var(--drop-border-width);border-color:rgba(var(--drop-border-tint), 0.5);border-style:dashed;top:0;bottom:0;left:0;right:0;-webkit-transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out;transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{border-color:rgba(var(--drop-border--invalid), 1)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{top:5px;bottom:5px;left:5px;right:5px}.file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{color:rgba(var(--drop-border-tint), 1);text-decoration:underline;border-radius:2px;z-index:1;cursor:pointer;position:relative}.file-upload--focus.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{-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)))}.file-upload__list.sc-nano-file-upload{list-style:none;margin:0;padding:0}.file-upload__list-wrap.sc-nano-file-upload{position:relative;top:-4px}.file-upload__list-item.sc-nano-file-upload{width:100%;margin:0 0 2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:hideListItem 0.3s ease-in-out forwards;animation:hideListItem 0.3s ease-in-out forwards}@-webkit-keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list-item--active.sc-nano-file-upload{-webkit-animation:showListItem 0.3s ease-in-out forwards;animation:showListItem 0.3s ease-in-out forwards}@-webkit-keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list.sc-nano-file-upload .list-title.sc-nano-file-upload{background:white;border-radius:5px;padding:5px 5px;margin-right:2px;display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:0.9em;color:var(--help-msg-color)}.file-upload__list.sc-nano-file-upload .list-button.sc-nano-file-upload{background:white;border-radius:5px;margin:2px}.file-upload__list.sc-nano-file-upload .list-error.sc-nano-file-upload{--color:rgba(var(--drop-border--invalid), 1)}.file-upload__button.sc-nano-file-upload{margin:0;padding:0;border:none;background-color:transparent;font:inherit;-webkit-box-align:center;text-decoration:none;color:inherit;-webkit-transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;padding-left:var(--nano-btn-padding-start, 1rem);padding-right:var(--nano-btn-padding-end, 1rem);padding-top:var(--nano-btn-padding-top, 0.5rem);padding-bottom:var(--nano-btn-padding-bottom, 0.5rem);-webkit-box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));display:inline-block;border-radius:var(--nano-btn-border-radius, 5px);line-height:var(--nano-btn-line-height, 1.5rem);font-weight:500;cursor:pointer;background:rgba(0, 0, 0, 0.02);background-color:var(--btn-bg);color:var(--btn-text);--nano-btn-icon-size:var(--btn-icon-size);--nano-btn-line-height:var(--btn-icon-size);--nano-btn-padding-top:var(--btn-padding-top);--nano-btn-padding-bottom:var(--btn-padding-bottom);--nano-btn-padding-start:var(--btn-padding-start);--nano-btn-padding-end:var(--btn-padding-end);max-width:100%;font-size:0.9em}.file-upload__button.sc-nano-file-upload::-moz-focus-inner{border:0;padding:0}.file-upload__button.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:focus{text-decoration:none;color:inherit}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--nano-btn-padding-start, 1rem);padding-inline-start:var(--nano-btn-padding-start, 1rem);-webkit-padding-end:var(--nano-btn-padding-end, 1rem);padding-inline-end:var(--nano-btn-padding-end, 1rem)}}@media print{.file-upload__button.sc-nano-file-upload{display:none}}.file-upload__button.sc-nano-file-upload:focus,.file-upload__button.button--focus.sc-nano-file-upload{outline:none;-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.5rem;margin-right:0;font-size:var(--nano-btn-icon-size, 1rem);vertical-align:middle;margin-top:-0.188rem;display:inline-block}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.5rem;margin-inline-start:0.5rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0;margin-right:0.5rem}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0.5rem;margin-inline-end:0.5rem}}.file-upload__button.sc-nano-file-upload:hover:not(.file-upload__button--disabled){-webkit-box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3))}.file-upload__button.sc-nano-file-upload:active:not(.button--disabled):not(:disabled){-webkit-box-shadow:none;box-shadow:none}.file-upload__button--disabled.sc-nano-file-upload,.file-upload__button.sc-nano-file-upload:disabled{opacity:0.6}.file-upload__button--disabled.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:disabled:hover{cursor:default}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--active.sc-nano-file-upload{background-color:var(--nano-color-primary-shade, #007090);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled).button--keyline,.file-upload__button.button--active.button--keyline.sc-nano-file-upload{background-color:var(--btn-bg);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:focus{color:var(--btn-text)}.file-upload__button.button--keyline.sc-nano-file-upload{background:transparent;border-style:var(--nano-btn-border-style, solid);border-width:var(--nano-btn-border-width, 2px);border-radius:var(--nano-btn-border-radius, 5px);color:var(--btn-bg);border-color:var(--btn-bg)}.file-upload__button.button--keyline.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--keyline.sc-nano-file-upload:not(.button--focus),.file-upload__button.button--keyline.button--active.sc-nano-file-upload{-webkit-box-shadow:none;box-shadow:none}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__button.sc-nano-file-upload{opacity:0.4}.file-upload--dragging.sc-nano-file-upload .file-upload__button.sc-nano-file-upload{--nano-btn-border-style:dashed}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:inherit;padding:0;border:0;outline:none;background-color:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:auto;color:var(--clear-btn-color)}.is-invalid.sc-nano-file-upload-h .file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{color:var(--clear-btn-color--invalid)}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.4rem;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.4rem;margin-inline-start:0.4rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload span.sc-nano-file-upload{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}';var fileInputIds=0;var getDataTransfer=function(){return new DataTransfer};try{getDataTransfer()}catch(_a){try{getDataTransfer=function(){return new ClipboardEvent("").clipboardData};getDataTransfer()}catch(_b){getDataTransfer=null}}var FileUpload=function(){function e(e){var n=this;registerInstance(this,e);this.nanoChange=createEvent(this,"nanoChange",7);this.nanoFocus=createEvent(this,"nanoFocus",7);this.nanoBlur=createEvent(this,"nanoBlur",7);this.nanoValidate=createEvent(this,"nanoValidate",7);this.fileInputId="nano-file-upload-"+fileInputIds++;this.canChangeFileList=!!getDataTransfer;this.removeFiles=[];this.errorMessage=null;this.isDragging=false;this.fileList=[];this.maxFileSize=1;this.maxFiles=1;this.placeholder="Choose a file...";this.hideLabel=false;this.required=false;this.disabled=false;this.clearInput=false;this.showInlineError=true;this.validateOn="submit";this._invalid=false;this.onClearClick=function(){n.value=""};this.onBlur=function(){n.hasFocus=false;if(n.validateOn==="dirty")n.validate();n.nanoBlur.emit()};this.onFocus=function(){n.hasFocus=true;n.nanoFocus.emit()};this.validate=function(e){n.errorMessage=null;n.inputEl.setCustomValidity("");var a;if(n.validateOn==="submitThenDirty")n.validateOn="dirty";if(!n.inputEl.validity.valid){if(n.showInlineError)n.errorMessage=n.inputEl.validationMessage}else{n.fileList.forEach((function(e){a=null;if(!n.checkFileSize(e.file.size)){a="Maximum file size exceeded. Max file size is "+n.maxFileSize+"Mb"}else if(!n.checkFileType(e.file.type))a="File type is not allowed ("+n.accept+")";if(!n.errorMessage&&a)n.errorMessage=a;e.validationMessage=a;e.valid=!a}));if(n.fileList.length>n.maxFiles)n.errorMessage="Maxinum number of files exceeded ("+n.maxFiles+")"}if(!!n.errorMessage){n._invalid=true;n.inputEl.setCustomValidity(n.errorMessage)}else{n._invalid=false}n.nanoValidate.emit({isValid:!n._invalid,errorMessage:n.inputEl.validationMessage,originalEvent:e})};this.onInvalid=function(e){n.validate(e);if(n.showInlineError)e.preventDefault()};this.onFileChoose=function(e){var a=e.target.files;if(a&&a.length)n.addNewFiles(e.target.files)};this.onFileRemoveFileClick=function(e,a){if(!n.canChangeFileList)return;n.removeFiles.push(a);e.target.closest(".file-upload__list-item--active").classList.remove("file-upload__list-item--active")};this.onFileRemoveAnim=function(){if(!n.canChangeFileList||!n.removeFiles.length)return;n.fileList=n.fileList.filter((function(e){return!n.removeFiles.find((function(n){return n===e}))}));n.removeFiles=[]};this.onInputChange=function(){n.nanoChange.emit({value:n.value,files:n.files})};this.onDragStop=function(e){e.preventDefault();e.stopPropagation();n.isDragging=false};this.onDragStart=function(e){e.preventDefault();e.stopPropagation();n.isDragging=true};this.onDrop=function(e){n.onDragStop(e);if(e.dataTransfer.files&&e.dataTransfer.files.length)n.addNewFiles(e.dataTransfer.files)};this.FileUploadInput=function(e,a){var t=n.fileInputId+"-lbl";var o=n.showInlineError||n.hasHelperSlot?n.fileInputId+"-more":"";return[h("div",{class:"file-upload__"+e+"-wrap"},h("label",{class:"file-upload__"+e,htmlFor:n.fileInputId,id:t,onDrop:function(e){n.onDrop(e);n.onDragStop(e)},onDragEnd:n.onDragStop,onDragLeave:n.onDragStop,onDragEnter:n.onDragStart,onDragOver:n.onDragStart},h("div",{class:"file-upload__label "+(n.hideLabel||e!=="drop"?"visually-hide":"")},n.label&&n.label,!n.label&&n.hasLabelSlot&&h("slot",{name:"label"})),e==="drop"&&h("div",{class:"file-upload__drop-area"},"Drap and drop or ",h("span",null,"browse")),e==="btn"&&h("div",{class:"file-upload__button button--keyline button--icon-start "+(n.hasFocus?"button--focus":"")},h("div",{class:"file-upload__btn-content"},h("nano-icon",{name:"regular/cloud-upload"}),h("span",null,!!n.fileList.length?n.fileList[0].file.name:n.placeholder),!!n.value&&n.clearInput&&!n.disabled&&h("button",{type:"button",class:"icon file-upload__clear-btn",tabindex:"-1",onClick:n.onClearClick},h("nano-icon",{name:"light/times"})))),h("input",{"aria-labelledby":t+" "+o+" "+a,type:"file",id:n.fileInputId,accept:n.accept,class:"file-upload__input",multiple:n.maxFiles>1,disabled:n.disabled,name:n.canChangeFileList?undefined:n.name,ref:function(e){if(n.canChangeFileList){n.publicInputEl=e;return}n.inputEl=e},onChange:n.onFileChoose,onFocus:n.onFocus,onReset:n.onInputChange})),h("input",{name:!n.canChangeFileList?undefined:n.name,ref:function(e){if(!n.canChangeFileList)return;n.inputEl=e},type:"file",id:n.fileInputId+"-hidden",tabIndex:-1,multiple:true,class:"file-upload__input",disabled:n.disabled,required:n.required,accept:n.accept,onInvalid:n.onInvalid,onChange:n.onInputChange})),n.showInlineError||n.hasHelperSlot?h("div",{class:"file-upload__more",id:o},n.showInlineError?h("div",{class:"file-upload__error"},n.errorMessage):"",h("div",{class:"file-upload__help"},h("slot",{name:"helper"}))):""]};this.button=function(){return n.FileUploadInput("btn")};this.dropArea=function(){var e=n.fileInputId+"-list";return[n.FileUploadInput("drop",e),h("output",{class:"file-upload__list-wrap",id:e},!!n.fileList&&n.fileList.length>0&&h("ul",{class:"file-upload__list list"},n.fileList.map((function(e){return h("li",{key:e.file.name,class:"file-upload__list-item file-upload__list-item--active list-item",onAnimationEnd:function(e){return n.onFileRemoveAnim()}},h("span",{class:"list-title"},e.file.name),!e.valid&&h("nano-tooltip",{content:e.validationMessage,placement:"left"},h("nano-icon-button",{class:"list-button list-error",iconName:"light/exclamation-triangle",label:"File error"})),n.canChangeFileList&&h("nano-icon-button",{class:"list-button",type:"button",iconName:"light/eye",label:"View file",target:"_blank",href:e.location}),n.canChangeFileList&&h("nano-icon-button",{onClick:function(a){return n.onFileRemoveFileClick(a,e)},class:"list-button",iconName:"light/times",label:"Remove file"}))}))))]}}e.prototype.fileListChange=function(){if(this.canChangeFileList){this.publicInputEl.value="";this.inputEl.files=this.arrToFileList(this.fileList.map((function(e){return e.file})));this.nanoChange.emit({value:this.value,files:this.files})}};e.prototype.shouldValidate=function(){var e=this;if(!this.inputEl)return;setTimeout((function(){if(e.validateOn==="dirty")e.validate()}),20)};Object.defineProperty(e.prototype,"invalid",{get:function(){return this._invalid},enumerable:false,configurable:true});Object.defineProperty(e.prototype,"files",{get:function(){return this.inputEl?Array.from(this.inputEl.files).map((function(e){return{lastModified:e.lastModified,type:e.type,name:e.name,size:e.size,objectURL:URL.createObjectURL(e),arrayBuffer:e.arrayBuffer,slice:e.slice,stream:e.stream,text:e.text}})):[]},enumerable:false,configurable:true});Object.defineProperty(e.prototype,"value",{get:function(){return this.inputEl?this.inputEl.value:""},set:function(e){if(e===""&&this.inputEl){this.fileList=[];this.inputEl.value=""}},enumerable:false,configurable:true});e.prototype.reportValidity=function(e){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){if(e)this.validate();return[2,{isValid:!this.invalid,errorMessage:this.inputEl.validationMessage}]}))}))};e.prototype.setFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(e){if(this.inputEl)this.inputEl.focus();return[2]}))}))};e.prototype.getInputElement=function(){return Promise.resolve(this.inputEl)};e.prototype.showError=function(e){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){if(this.inputEl){this.inputEl.setCustomValidity(e);this.validate()}return[2]}))}))};e.prototype.globalClickHandler=function(e){var n=this;if(!this.hasFocus)return;if(e.composedPath().every((function(e){return e!==n.host})))this.onBlur()};e.prototype.globalKeydownHandler=function(e){if(!this.hasFocus||e.key!=="Tab")return;if(e.target!==this.inputEl)this.onBlur()};e.prototype.arrToFileList=function(e){var n=getDataTransfer();for(var a=0,t=e.length;a<t;a++)n.items.add(e[a]);return n.files};e.prototype.checkFileSize=function(e){return e/1e6<=this.maxFileSize};e.prototype.checkFileType=function(e){return this.accept.match(e)&&this.accept.match(e).length>0};e.prototype.slotChangeObserver=function(){var e=this;if(this.mo)this.mo.disconnect();var n=this.mo=new MutationObserver((function(){return e.processSlottedContent()}));n.observe(this.host,{childList:true,subtree:true})};e.prototype.processSlottedContent=function(){this.hasLabelSlot=!!this.host.querySelectorAll('[slot="label"]');this.hasHelperSlot=!!this.host.querySelector('[slot="helper"]')};e.prototype.addNewFiles=function(e){var n=this;var a=Array.from(e).map((function(e){return{file:e,location:URL.createObjectURL(e),valid:true,validationMessage:null}}));if(this.canChangeFileList&&this.maxFiles>1){var t=a.filter((function(e){return!n.fileList.find((function(n){return n.file.name===e.file.name}))}));this.fileList=__spreadArray(__spreadArray([],this.fileList),t)}else this.fileList=a};e.prototype.disconnectedCallback=function(){if(this.mo)this.mo.disconnect()};e.prototype.componentDidLoad=function(){this.slotChangeObserver()};e.prototype.componentWillLoad=function(){this.processSlottedContent()};e.prototype.render=function(){return h(Host,null,h("div",{class:{"file-upload":true,"file-upload--dragging":this.isDragging,"file-upload--focus":this.hasFocus,"file-upload--invalid":this._invalid}},this.maxFiles>1?h(this.dropArea,null):h(this.button,null)))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(e,"watchers",{get:function(){return{fileList:["fileListChange","shouldValidate"],maxFiles:["shouldValidate"],maxFileSize:["shouldValidate"],capture:["shouldValidate"],accept:["shouldValidate"],required:["shouldValidate"],disabled:["shouldValidate"],validateOn:["shouldValidate"]}},enumerable:false,configurable:true});return e}();FileUpload.style=fileUploadCss;export{FileUpload as nano_file_upload};
1
+ var __awaiter=this&&this.__awaiter||function(e,n,a,t){function o(e){return e instanceof a?e:new a((function(n){n(e)}))}return new(a||(a=Promise))((function(a,i){function l(e){try{s(t.next(e))}catch(n){i(n)}}function r(e){try{s(t["throw"](e))}catch(n){i(n)}}function s(e){e.done?a(e.value):o(e.value).then(l,r)}s((t=t.apply(e,n||[])).next())}))};var __generator=this&&this.__generator||function(e,n){var a={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},t,o,i,l;return l={next:r(0),throw:r(1),return:r(2)},typeof Symbol==="function"&&(l[Symbol.iterator]=function(){return this}),l;function r(e){return function(n){return s([e,n])}}function s(l){if(t)throw new TypeError("Generator is already executing.");while(a)try{if(t=1,o&&(i=l[0]&2?o["return"]:l[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;if(o=0,i)l=[l[0]&2,i.value];switch(l[0]){case 0:case 1:i=l;break;case 4:a.label++;return{value:l[1],done:false};case 5:a.label++;o=l[1];l=[0];continue;case 7:l=a.ops.pop();a.trys.pop();continue;default:if(!(i=a.trys,i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){a=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){a.label=l[1];break}if(l[0]===6&&a.label<i[1]){a.label=i[1];i=l;break}if(i&&a.label<i[2]){a.label=i[2];a.ops.push(l);break}if(i[2])a.ops.pop();a.trys.pop();continue}l=n.call(e,a)}catch(r){l=[6,r];o=0}finally{t=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:true}}};var __spreadArray=this&&this.__spreadArray||function(e,n){for(var a=0,t=n.length,o=e.length;a<t;a++,o++)e[o]=n[a];return e};import{r as registerInstance,c as createEvent,h,e as Host,g as getElement}from"./index-912ef959.js";var fileUploadCss='.sc-nano-file-upload-h{-webkit-box-sizing:border-box;box-sizing:border-box}*.sc-nano-file-upload,*.sc-nano-file-upload::before,*.sc-nano-file-upload::after{-webkit-box-sizing:border-box;box-sizing:border-box}.sc-nano-file-upload-h{min-height:1rem;display:block;--invalid-msg-color:var(--nano-color-danger, #ef4135);--invalid-msg-font-size:var(--nano-input-help-font-size, 0.75em);--help-msg-color:var(--nano-input-help-color, #616d6e);--label-color:var(--nano-input-label-color, "currentColor");--label-font-size:var(--nano-input-label-color, 1em);--label-padding:var(--nano-input-padding-bottom, var(--nano-input-padding, 8px));--label-color--invalid:var(--nano-input-label-color-invalid, "currentColor");--drop-bg:#f2f7f9;--drop-text:#756f6a;--drop-height:3.5em;--drop-border-tint:var(--nano-color-primary-rgb, 0, 116, 149);--drop-border-width:2px;--drop-border-radius:5px;--drop-bg--invalid:var(--nano-input-background-color, #fee8de);--drop-border--invalid:var(--nano-color-danger-rgb, 239, 65, 53);--btn-bg:var(--nano-color-primary, #007495);--btn-text:var(--nano-color-primary-contrast, #fff);--btn-icon-size:var(--nano-btn-icon-size, 1.4em);--btn-padding-top:var(--nano-btn-padding-top, 0.5em);--btn-padding-bottom:var(--nano-btn-padding-bottom, 0.5em);--btn-padding-start:var(--nano-btn-padding-start, 1em);--btn-padding-end:var(--nano-btn-padding-end, 1em)}[disabled].sc-nano-file-upload-h:not([disabled=false]){opacity:0.7}[disabled].sc-nano-file-upload-h:not([disabled=false]) *.sc-nano-file-upload{pointer-events:none !important}.file-upload__label.sc-nano-file-upload{font-size:var(--label-font-size);padding:0 0 var(--label-padding);margin:0;line-height:1}[invalid].sc-nano-file-upload-h:not([invalid=false]) .file-upload__label.sc-nano-file-upload{color:var(--label-color--invalid)}.file-upload__input.sc-nano-file-upload{display:none}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload,.file-upload__more.sc-nano-file-upload,.file-upload__label.sc-nano-file-upload{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-upload__more.sc-nano-file-upload{height:1em;margin-left:3px;margin-right:0;margin-top:calc(var(--label-padding) / 2);margin-bottom:var(--label-padding);position:relative}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__more.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:3px;margin-inline-start:3px;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload{top:0;left:0;position:absolute;font-size:var(--invalid-msg-font-size);line-height:1.2;-webkit-transition:0.3s ease-out opacity;transition:0.3s ease-out opacity}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload,.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:1}.file-upload__error.sc-nano-file-upload{color:var(--invalid-msg-color);font-stretch:condensed;opacity:0}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload{opacity:1}.file-upload__help.sc-nano-file-upload{font-style:italic;opacity:1;color:var(--help-msg-color)}.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:0}.file-upload__drop.sc-nano-file-upload{position:relative;width:100%;display:inline-block}.file-upload__drop-area.sc-nano-file-upload{background-color:var(--drop-bg);color:var(--drop-text);min-height:var(--drop-height);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:0.9em;position:relative;-webkit-transition:background-color 0.15s ease-in-out;transition:background-color 0.15s ease-in-out;padding:0.5rem}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__drop-area.sc-nano-file-upload{opacity:0.7}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:var(--drop-bg--invalid)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:#fff}.file-upload__drop-area.sc-nano-file-upload::after{content:"";position:absolute;border-radius:var(--drop-border-radius);border-width:var(--drop-border-width);border-color:rgba(var(--drop-border-tint), 0.5);border-style:dashed;top:0;bottom:0;left:0;right:0;-webkit-transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out;transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{border-color:rgba(var(--drop-border--invalid), 1)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{top:5px;bottom:5px;left:5px;right:5px}.file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{color:rgba(var(--drop-border-tint), 1);text-decoration:underline;border-radius:2px;z-index:1;cursor:pointer;position:relative}.file-upload--focus.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{-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)))}.file-upload__list.sc-nano-file-upload{list-style:none;margin:0;padding:0}.file-upload__list-wrap.sc-nano-file-upload{position:relative;top:-4px}.file-upload__list-item.sc-nano-file-upload{width:100%;margin:0 0 2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:hideListItem 0.3s ease-in-out forwards;animation:hideListItem 0.3s ease-in-out forwards}@-webkit-keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list-item--active.sc-nano-file-upload{-webkit-animation:showListItem 0.3s ease-in-out forwards;animation:showListItem 0.3s ease-in-out forwards}@-webkit-keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list.sc-nano-file-upload .list-title.sc-nano-file-upload{background:white;border-radius:5px;padding:5px 5px;margin-right:2px;display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:0.9em;color:var(--help-msg-color)}.file-upload__list.sc-nano-file-upload .list-button.sc-nano-file-upload{background:white;border-radius:5px;margin:2px}.file-upload__list.sc-nano-file-upload .list-error.sc-nano-file-upload{--color:rgba(var(--drop-border--invalid), 1)}.file-upload__button.sc-nano-file-upload{margin:0;padding:0;border:none;background-color:transparent;font:inherit;-webkit-box-align:center;text-decoration:none;color:inherit;-webkit-transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;padding-left:var(--nano-btn-padding-start, 1rem);padding-right:var(--nano-btn-padding-end, 1rem);padding-top:var(--nano-btn-padding-top, 0.5rem);padding-bottom:var(--nano-btn-padding-bottom, 0.5rem);-webkit-box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));display:inline-block;border-radius:var(--nano-btn-border-radius, 5px);line-height:var(--nano-btn-line-height, 1.5rem);font-weight:500;cursor:pointer;background:rgba(0, 0, 0, 0.02);background-color:var(--btn-bg);color:var(--btn-text);--nano-btn-icon-size:var(--btn-icon-size);--nano-btn-line-height:var(--btn-icon-size);--nano-btn-padding-top:var(--btn-padding-top);--nano-btn-padding-bottom:var(--btn-padding-bottom);--nano-btn-padding-start:var(--btn-padding-start);--nano-btn-padding-end:var(--btn-padding-end);max-width:100%;font-size:0.9em}.file-upload__button.sc-nano-file-upload::-moz-focus-inner{border:0;padding:0}.file-upload__button.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:focus{text-decoration:none;color:inherit}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--nano-btn-padding-start, 1rem);padding-inline-start:var(--nano-btn-padding-start, 1rem);-webkit-padding-end:var(--nano-btn-padding-end, 1rem);padding-inline-end:var(--nano-btn-padding-end, 1rem)}}@media print{.file-upload__button.sc-nano-file-upload{display:none}}.file-upload__button.sc-nano-file-upload:focus,.file-upload__button.button--focus.sc-nano-file-upload{outline:none;-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.5rem;margin-right:0;font-size:var(--nano-btn-icon-size, 1rem);vertical-align:middle;margin-top:-0.188rem;display:inline-block}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.5rem;margin-inline-start:0.5rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0;margin-right:0.5rem}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0.5rem;margin-inline-end:0.5rem}}.file-upload__button.sc-nano-file-upload:hover:not(.file-upload__button--disabled){-webkit-box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3))}.file-upload__button.sc-nano-file-upload:active:not(.button--disabled):not(:disabled){-webkit-box-shadow:none;box-shadow:none}.file-upload__button--disabled.sc-nano-file-upload,.file-upload__button.sc-nano-file-upload:disabled{opacity:0.6}.file-upload__button--disabled.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:disabled:hover{cursor:default}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--active.sc-nano-file-upload{background-color:var(--nano-color-primary-shade, #00637f);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled).button--keyline,.file-upload__button.button--active.button--keyline.sc-nano-file-upload{background-color:var(--btn-bg);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:focus{color:var(--btn-text)}.file-upload__button.button--keyline.sc-nano-file-upload{background:transparent;border-style:var(--nano-btn-border-style, solid);border-width:var(--nano-btn-border-width, 2px);border-radius:var(--nano-btn-border-radius, 5px);color:var(--btn-bg);border-color:var(--btn-bg)}.file-upload__button.button--keyline.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--keyline.sc-nano-file-upload:not(.button--focus),.file-upload__button.button--keyline.button--active.sc-nano-file-upload{-webkit-box-shadow:none;box-shadow:none}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__button.sc-nano-file-upload{opacity:0.4}.file-upload--dragging.sc-nano-file-upload .file-upload__button.sc-nano-file-upload{--nano-btn-border-style:dashed}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:inherit;padding:0;border:0;outline:none;background-color:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:auto;color:var(--clear-btn-color)}.is-invalid.sc-nano-file-upload-h .file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{color:var(--clear-btn-color--invalid)}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.4rem;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.4rem;margin-inline-start:0.4rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload span.sc-nano-file-upload{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}';var fileInputIds=0;var getDataTransfer=function(){return new DataTransfer};try{getDataTransfer()}catch(_a){try{getDataTransfer=function(){return new ClipboardEvent("").clipboardData};getDataTransfer()}catch(_b){getDataTransfer=null}}var FileUpload=function(){function e(e){var n=this;registerInstance(this,e);this.nanoChange=createEvent(this,"nanoChange",7);this.nanoFocus=createEvent(this,"nanoFocus",7);this.nanoBlur=createEvent(this,"nanoBlur",7);this.nanoValidate=createEvent(this,"nanoValidate",7);this.fileInputId="nano-file-upload-"+fileInputIds++;this.canChangeFileList=!!getDataTransfer;this.removeFiles=[];this.errorMessage=null;this.isDragging=false;this.fileList=[];this.maxFileSize=1;this.maxFiles=1;this.placeholder="Choose a file...";this.hideLabel=false;this.required=false;this.disabled=false;this.clearInput=false;this.showInlineError=true;this.validateOn="submit";this._invalid=false;this.onClearClick=function(){n.value=""};this.onBlur=function(){n.hasFocus=false;if(n.validateOn==="dirty")n.validate();n.nanoBlur.emit()};this.onFocus=function(){n.hasFocus=true;n.nanoFocus.emit()};this.validate=function(e){n.errorMessage=null;n.inputEl.setCustomValidity("");var a;if(n.validateOn==="submitThenDirty")n.validateOn="dirty";if(!n.inputEl.validity.valid){if(n.showInlineError)n.errorMessage=n.inputEl.validationMessage}else{n.fileList.forEach((function(e){a=null;if(!n.checkFileSize(e.file.size)){a="Maximum file size exceeded. Max file size is "+n.maxFileSize+"Mb"}else if(!n.checkFileType(e.file.type))a="File type is not allowed ("+n.accept+")";if(!n.errorMessage&&a)n.errorMessage=a;e.validationMessage=a;e.valid=!a}));if(n.fileList.length>n.maxFiles)n.errorMessage="Maxinum number of files exceeded ("+n.maxFiles+")"}if(!!n.errorMessage){n._invalid=true;n.inputEl.setCustomValidity(n.errorMessage)}else{n._invalid=false}n.nanoValidate.emit({isValid:!n._invalid,errorMessage:n.inputEl.validationMessage,originalEvent:e})};this.onInvalid=function(e){n.validate(e);if(n.showInlineError)e.preventDefault()};this.onFileChoose=function(e){var a=e.target.files;if(a&&a.length)n.addNewFiles(e.target.files)};this.onFileRemoveFileClick=function(e,a){if(!n.canChangeFileList)return;n.removeFiles.push(a);e.target.closest(".file-upload__list-item--active").classList.remove("file-upload__list-item--active")};this.onFileRemoveAnim=function(){if(!n.canChangeFileList||!n.removeFiles.length)return;n.fileList=n.fileList.filter((function(e){return!n.removeFiles.find((function(n){return n===e}))}));n.removeFiles=[]};this.onInputChange=function(){n.nanoChange.emit({value:n.value,files:n.files})};this.onDragStop=function(e){e.preventDefault();e.stopPropagation();n.isDragging=false};this.onDragStart=function(e){e.preventDefault();e.stopPropagation();n.isDragging=true};this.onDrop=function(e){n.onDragStop(e);if(e.dataTransfer.files&&e.dataTransfer.files.length)n.addNewFiles(e.dataTransfer.files)};this.FileUploadInput=function(e,a){var t=n.fileInputId+"-lbl";var o=n.showInlineError||n.hasHelperSlot?n.fileInputId+"-more":"";return[h("div",{class:"file-upload__"+e+"-wrap"},h("label",{class:"file-upload__"+e,htmlFor:n.fileInputId,id:t,onDrop:function(e){n.onDrop(e);n.onDragStop(e)},onDragEnd:n.onDragStop,onDragLeave:n.onDragStop,onDragEnter:n.onDragStart,onDragOver:n.onDragStart},h("div",{class:"file-upload__label "+(n.hideLabel||e!=="drop"?"visually-hide":"")},n.label&&n.label,!n.label&&n.hasLabelSlot&&h("slot",{name:"label"})),e==="drop"&&h("div",{class:"file-upload__drop-area"},"Drap and drop or ",h("span",null,"browse")),e==="btn"&&h("div",{class:"file-upload__button button--keyline button--icon-start "+(n.hasFocus?"button--focus":"")},h("div",{class:"file-upload__btn-content"},h("nano-icon",{name:"regular/cloud-upload"}),h("span",null,!!n.fileList.length?n.fileList[0].file.name:n.placeholder),!!n.value&&n.clearInput&&!n.disabled&&h("button",{type:"button",class:"icon file-upload__clear-btn",tabindex:"-1",onClick:n.onClearClick},h("nano-icon",{name:"light/times"})))),h("input",{"aria-labelledby":t+" "+o+" "+a,type:"file",id:n.fileInputId,accept:n.accept,class:"file-upload__input",multiple:n.maxFiles>1,disabled:n.disabled,name:n.canChangeFileList?undefined:n.name,ref:function(e){if(n.canChangeFileList){n.publicInputEl=e;return}n.inputEl=e},onChange:n.onFileChoose,onFocus:n.onFocus,onReset:n.onInputChange})),h("input",{name:!n.canChangeFileList?undefined:n.name,ref:function(e){if(!n.canChangeFileList)return;n.inputEl=e},type:"file",id:n.fileInputId+"-hidden",tabIndex:-1,multiple:true,class:"file-upload__input",disabled:n.disabled,required:n.required,accept:n.accept,onInvalid:n.onInvalid,onChange:n.onInputChange})),n.showInlineError||n.hasHelperSlot?h("div",{class:"file-upload__more",id:o},n.showInlineError?h("div",{class:"file-upload__error"},n.errorMessage):"",h("div",{class:"file-upload__help"},h("slot",{name:"helper"}))):""]};this.button=function(){return n.FileUploadInput("btn")};this.dropArea=function(){var e=n.fileInputId+"-list";return[n.FileUploadInput("drop",e),h("output",{class:"file-upload__list-wrap",id:e},!!n.fileList&&n.fileList.length>0&&h("ul",{class:"file-upload__list list"},n.fileList.map((function(e){return h("li",{key:e.file.name,class:"file-upload__list-item file-upload__list-item--active list-item",onAnimationEnd:function(e){return n.onFileRemoveAnim()}},h("span",{class:"list-title"},e.file.name),!e.valid&&h("nano-tooltip",{content:e.validationMessage,placement:"left"},h("nano-icon-button",{class:"list-button list-error",iconName:"light/exclamation-triangle",label:"File error"})),n.canChangeFileList&&h("nano-icon-button",{class:"list-button list-button--view",type:"button",iconName:"light/eye",label:"View file",target:"_blank",href:e.location}),n.canChangeFileList&&h("nano-icon-button",{onClick:function(a){return n.onFileRemoveFileClick(a,e)},class:"list-button list-button--remove",iconName:"light/times",label:"Remove file"}))}))))]}}e.prototype.fileListChange=function(){if(this.canChangeFileList){this.publicInputEl.value="";this.inputEl.files=this.arrToFileList(this.fileList.map((function(e){return e.file})));this.nanoChange.emit({value:this.value,files:this.files})}};e.prototype.shouldValidate=function(){var e=this;if(!this.inputEl)return;setTimeout((function(){if(e.validateOn==="dirty")e.validate()}),20)};Object.defineProperty(e.prototype,"invalid",{get:function(){return this._invalid},enumerable:false,configurable:true});Object.defineProperty(e.prototype,"files",{get:function(){return this.inputEl?Array.from(this.inputEl.files).map((function(e){e.objectURL=URL.createObjectURL(e);return e})):[]},enumerable:false,configurable:true});Object.defineProperty(e.prototype,"value",{get:function(){return this.inputEl?this.inputEl.value:""},set:function(e){if(e===""&&this.inputEl){this.fileList=[];this.inputEl.value=""}},enumerable:false,configurable:true});e.prototype.reportValidity=function(e){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){if(e)this.validate();return[2,{isValid:!this.invalid,errorMessage:this.inputEl.validationMessage}]}))}))};e.prototype.setFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(e){if(this.inputEl)this.inputEl.focus();return[2]}))}))};e.prototype.getInputElement=function(){return Promise.resolve(this.inputEl)};e.prototype.showError=function(e){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){if(this.inputEl){this.inputEl.setCustomValidity(e);this.validate()}return[2]}))}))};e.prototype.globalClickHandler=function(e){var n=this;if(!this.hasFocus)return;if(e.composedPath().every((function(e){return e!==n.host})))this.onBlur()};e.prototype.globalKeydownHandler=function(e){if(!this.hasFocus||e.key!=="Tab")return;if(e.target!==this.inputEl)this.onBlur()};e.prototype.arrToFileList=function(e){var n=getDataTransfer();for(var a=0,t=e.length;a<t;a++)n.items.add(e[a]);return n.files};e.prototype.checkFileSize=function(e){return e/1e6<=this.maxFileSize};e.prototype.checkFileType=function(e){if(!this.accept)return true;return this.accept.match(e)&&this.accept.match(e).length>0};e.prototype.slotChangeObserver=function(){var e=this;if(this.mo)this.mo.disconnect();var n=this.mo=new MutationObserver((function(){return e.processSlottedContent()}));n.observe(this.host,{childList:true,subtree:true})};e.prototype.processSlottedContent=function(){this.hasLabelSlot=!!this.host.querySelectorAll('[slot="label"]');this.hasHelperSlot=!!this.host.querySelector('[slot="helper"]')};e.prototype.addNewFiles=function(e){var n=this;var a=Array.from(e).map((function(e){return{file:e,location:URL.createObjectURL(e),valid:true,validationMessage:null}}));if(this.canChangeFileList&&this.maxFiles>1){var t=a.filter((function(e){return!n.fileList.find((function(n){return n.file.name===e.file.name}))}));this.fileList=__spreadArray(__spreadArray([],this.fileList),t)}else this.fileList=a};e.prototype.disconnectedCallback=function(){if(this.mo)this.mo.disconnect()};e.prototype.componentDidLoad=function(){this.slotChangeObserver()};e.prototype.componentWillLoad=function(){this.processSlottedContent()};e.prototype.render=function(){return h(Host,null,h("div",{class:{"file-upload":true,"file-upload--dragging":this.isDragging,"file-upload--focus":this.hasFocus,"file-upload--invalid":this._invalid}},this.maxFiles>1?h(this.dropArea,null):h(this.button,null)))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(e,"watchers",{get:function(){return{fileList:["fileListChange","shouldValidate"],maxFiles:["shouldValidate"],maxFileSize:["shouldValidate"],capture:["shouldValidate"],accept:["shouldValidate"],required:["shouldValidate"],disabled:["shouldValidate"],validateOn:["shouldValidate"]}},enumerable:false,configurable:true});return e}();FileUpload.style=fileUploadCss;export{FileUpload as nano_file_upload};
2
2
  //# sourceMappingURL=nano-file-upload.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["src/components/file-upload/file-upload.scss?tag=nano-file-upload&encapsulation=scoped","src/components/file-upload/file-upload.tsx"],"names":["fileUploadCss","fileInputIds","getDataTransfer","DataTransfer","_a","ClipboardEvent","clipboardData","_b","FileUpload","class_1","hostRef","_this","this","fileInputId","canChangeFileList","removeFiles","errorMessage","isDragging","fileList","maxFileSize","maxFiles","placeholder","hideLabel","required","disabled","clearInput","showInlineError","validateOn","_invalid","onClearClick","value","onBlur","hasFocus","validate","nanoBlur","emit","onFocus","nanoFocus","ev","inputEl","setCustomValidity","error","validity","valid","validationMessage","forEach","fileItem","checkFileSize","file","size","checkFileType","type","accept","length","nanoValidate","isValid","originalEvent","onInvalid","preventDefault","onFileChoose","e","files","target","addNewFiles","onFileRemoveFileClick","push","closest","classList","remove","onFileRemoveAnim","filter","find","rmFile","onInputChange","nanoChange","onDragStop","stopPropagation","onDragStart","onDrop","dataTransfer","FileUploadInput","eleType","listId","labelId","moreId","hasHelperSlot","h","class","htmlFor","id","onDragEnd","onDragLeave","onDragEnter","onDragOver","label","hasLabelSlot","name","tabindex","onClick","aria-labelledby","multiple","undefined","ref","input","publicInputEl","onChange","onReset","tabIndex","button","dropArea","map","key","onAnimationEnd","_","content","placement","iconName","href","location","prototype","fileListChange","arrToFileList","shouldValidate","setTimeout","Object","defineProperty","Array","from","lastModified","objectURL","URL","createObjectURL","arrayBuffer","slice","stream","text","val","reportValidity","validateFirst","invalid","setFocus","focus","getInputElement","Promise","resolve","showError","message","globalClickHandler","composedPath","every","node","host","globalKeydownHandler","i","len","items","add","match","slotChangeObserver","mo","disconnect","MutationObserver","processSlottedContent","observe","childList","subtree","querySelectorAll","querySelector","newFiles","findFile","__spreadArray","disconnectedCallback","componentDidLoad","componentWillLoad","render","Host","file-upload","file-upload--dragging","file-upload--focus","file-upload--invalid"],"mappings":"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","sourcesContent":["@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/button';\n\n:host {\n /**\n * @prop --invalid-msg-color: Default value #{nano-color(danger, base)};\n * @prop --invalid-msg-font-size: Default value #{$input-help-font-size};\n\n * @prop --help-msg-color: Default value #{$input-help-color};\n\n * @prop --label-color: Default value #{$label-color};\n * @prop --label-color--invalid: Default value #{$label-color-invalid};\n * @prop --label-font-size: Default value #{$label-font-size};\n * @prop --label-padding: Default value #{$input-padding-bottom};\n * @prop --label-color--invalid: Default value #{$label-color-invalid};\n\n * @prop --drop-bg: Default value #{$color-blue--faded};\n * @prop --drop-text: Default value #{$color-dimgrey};\n * @prop --drop-height: Default value 3.5em;\n * @prop --drop-border-tint: Default value #{nano-color(primary, base, null, true)};\n * @prop --drop-border-width: Default value 2px;\n * @prop --drop-border-radius: Default value 5px;\n * @prop --drop-bg--invalid: Default value #{$input-background-color--invalid};\n * @prop --drop-border--invalid: Default value #{nano-color(danger, base, null, true)};\n\n * @prop --btn-bg: Default value #{nano-color(primary, base)};\n * @prop --btn-text: Default value #{nano-color(primary, contrast)};\n * @prop --btn-icon-size: Default value var(--nano-btn-icon-size, 1.4em);\n * @prop --btn-padding-top: Default value var(--nano-btn-padding-top, .5em);\n * @prop --btn-padding-bottom: Default value var(--nano-btn-padding-bottom, .5em);\n * @prop --btn-padding-start: Default value var(--nano-btn-padding-start, 1em);\n * @prop --btn-padding-end: Default value var(--nano-btn-padding-end, 1em);\n */\n\n min-height: 1rem;\n display: block;\n\n --invalid-msg-color: #{nano-color(danger, base)};\n --invalid-msg-font-size: #{$input-help-font-size};\n --help-msg-color: #{$input-help-color};\n --label-color: #{$label-color};\n --label-font-size: #{$label-font-size};\n --label-padding: #{$input-padding-bottom};\n --label-color--invalid: #{$label-color-invalid};\n --drop-bg: #{$color-blue--faded};\n --drop-text: #{$color-dimgrey};\n --drop-height: 3.5em;\n --drop-border-tint: #{nano-color(primary, base, null, true)};\n --drop-border-width: 2px;\n --drop-border-radius: 5px;\n --drop-bg--invalid: #{$input-background-color--invalid};\n --drop-border--invalid: #{nano-color(danger, base, null, true)};\n --btn-bg: #{nano-color(primary, base)};\n --btn-text: #{nano-color(primary, contrast)};\n --btn-icon-size: var(--nano-btn-icon-size, 1.4em);\n --btn-padding-top: var(--nano-btn-padding-top, 0.5em);\n --btn-padding-bottom: var(--nano-btn-padding-bottom, 0.5em);\n --btn-padding-start: var(--nano-btn-padding-start, 1em);\n --btn-padding-end: var(--nano-btn-padding-end, 1em);\n}\n\n:host([disabled]:not([disabled='false'])) {\n opacity: 0.7;\n\n * {\n pointer-events: none !important;\n }\n}\n\n.file-upload {\n $self: &;\n\n /* Common */\n\n &__label {\n font-size: var(--label-font-size);\n padding: 0 0 var(--label-padding);\n margin: 0;\n line-height: 1;\n\n :host([invalid]:not([invalid='false'])) & {\n color: var(--label-color--invalid);\n }\n }\n\n &__input {\n @include visually-hide();\n }\n\n &__error,\n &__help,\n &__more,\n &__label {\n display: block;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &__more {\n height: 1em;\n\n @include margin(\n calc(var(--label-padding) / 2),\n 0,\n var(--label-padding),\n 3px\n );\n\n position: relative;\n }\n\n &__error,\n &__help {\n top: 0;\n left: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n\n .file-upload--invalid & {\n opacity: 1;\n }\n }\n\n &__error {\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n opacity: 0;\n\n .file-upload--invalid & {\n opacity: 1;\n }\n }\n\n &__help {\n font-style: italic;\n opacity: 1;\n color: var(--help-msg-color);\n\n .file-upload--invalid & {\n opacity: 0;\n }\n }\n\n /* Drop area / Multi file upload */\n\n &__drop {\n position: relative;\n width: 100%;\n display: inline-block;\n }\n\n &__drop-area {\n background-color: var(--drop-bg);\n color: var(--drop-text);\n min-height: var(--drop-height);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.9em;\n position: relative;\n transition: background-color 0.15s ease-in-out;\n padding: 0.5rem;\n\n :host([disabled]:not([disabled='false'])) & {\n opacity: 0.7;\n }\n\n .file-upload--invalid & {\n background-color: var(--drop-bg--invalid);\n }\n\n .file-upload--dragging & {\n background-color: #{$color-white};\n }\n\n &::after {\n content: '';\n position: absolute;\n border-radius: var(--drop-border-radius);\n border-width: var(--drop-border-width);\n border-color: rgba(var(--drop-border-tint), 0.5);\n border-style: dashed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n transition:\n top 0.1s ease-in-out,\n bottom 0.1s ease-in-out,\n left 0.1s ease-in-out,\n right 0.1s ease-in-out;\n\n .file-upload--invalid & {\n border-color: rgba(var(--drop-border--invalid), 1);\n }\n\n .file-upload--dragging & {\n top: 5px;\n bottom: 5px;\n left: 5px;\n right: 5px;\n }\n }\n\n span {\n color: rgba(var(--drop-border-tint), 1);\n text-decoration: underline;\n border-radius: 2px;\n z-index: 1;\n cursor: pointer;\n position: relative;\n\n .file-upload--focus & {\n box-shadow: #{$control-focus-style};\n }\n }\n }\n\n &__list {\n list-style: none;\n margin: 0;\n padding: 0;\n\n &-wrap {\n position: relative;\n top: -4px;\n }\n\n &-item {\n width: 100%;\n margin: 0 0 2px;\n display: flex;\n align-items: center;\n transform: translateZ(0);\n animation: hideListItem 0.3s ease-in-out forwards;\n\n @keyframes hideListItem {\n 0% {\n opacity: 1;\n transform: translateY(0);\n transform: translateZ(0);\n }\n\n 100% {\n opacity: 0;\n transform: translateY(10px);\n transform: translateZ(0);\n }\n }\n\n &--active {\n animation: showListItem 0.3s ease-in-out forwards;\n\n @keyframes showListItem {\n 0% {\n opacity: 0;\n transform: translateY(10px);\n transform: translateZ(0);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n transform: translateZ(0);\n }\n }\n }\n }\n\n .list-title {\n background: white;\n border-radius: 5px;\n padding: 5px 5px;\n margin-right: 2px;\n display: block;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: 0.9em;\n color: var(--help-msg-color);\n }\n\n .list-button {\n background: white;\n border-radius: 5px;\n margin: 2px;\n }\n\n .list-error {\n --color: rgba(var(--drop-border--invalid), 1);\n }\n }\n\n /* Button display / Single file upload */\n\n &__button {\n @include button-base;\n @include button-standard(\n var(--btn-bg),\n var(--btn-text),\n #{nano-color(primary, shade)}\n );\n\n --nano-btn-icon-size: var(--btn-icon-size);\n --nano-btn-line-height: var(--btn-icon-size);\n --nano-btn-padding-top: var(--btn-padding-top);\n --nano-btn-padding-bottom: var(--btn-padding-bottom);\n --nano-btn-padding-start: var(--btn-padding-start);\n --nano-btn-padding-end: var(--btn-padding-end);\n\n max-width: 100%;\n font-size: 0.9em;\n\n :host([disabled]:not([disabled='false'])) & {\n opacity: 0.4;\n }\n\n .file-upload--dragging & {\n --nano-btn-border-style: dashed;\n }\n #{$self}__clear-btn {\n @include margin(0);\n\n font-size: inherit;\n padding: 0;\n border: 0;\n outline: none;\n background-color: transparent;\n display: flex;\n align-items: stretch;\n width: auto;\n color: var(--clear-btn-color);\n\n :host(.is-invalid) & {\n color: var(--clear-btn-color--invalid);\n }\n\n nano-icon {\n @include margin(0, 0, 0, 0.4rem);\n }\n }\n #{$self}__btn-content {\n display: flex;\n align-items: center;\n\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n }\n }\n}\n","import {\n Component,\n Prop,\n h,\n Host,\n Element,\n ComponentInterface,\n State,\n Event,\n EventEmitter,\n Watch,\n VNode,\n Method,\n Listen,\n} from '@stencil/core';\nimport {\n ControlValidity,\n ControlValidityEventDetail,\n FileInputChangeEventDetail,\n} from '../../interface';\n\nlet fileInputIds = 0;\n\nlet getDataTransfer = () => new DataTransfer();\ntry {\n getDataTransfer();\n} catch {\n try {\n getDataTransfer = () => new ClipboardEvent('').clipboardData;\n getDataTransfer();\n } catch {\n getDataTransfer = null;\n }\n}\n\ninterface FileValidation {\n file: File;\n valid: boolean;\n validationMessage?: string;\n location?: string;\n}\n/**\n * A better UI experience for `input type=\"file\"` form controls.\n *\n * - Drag and Drop\n * - Validation options\n * - Preview and manage multiple files\n */\n@Component({\n tag: 'nano-file-upload',\n styleUrl: 'file-upload.scss',\n scoped: true,\n})\nexport class FileUpload implements ComponentInterface {\n private inputEl: HTMLInputElement;\n private publicInputEl: HTMLInputElement;\n private mo!: MutationObserver;\n private fileInputId = `nano-file-upload-${fileInputIds++}`;\n private canChangeFileList = !!getDataTransfer;\n private removeFiles: FileValidation[] = [];\n\n @State() hasHelperSlot: boolean;\n @State() hasLabelSlot: boolean;\n @State() errorMessage: string = null;\n @State() isDragging = false;\n @State() fileList: FileValidation[] = [];\n @Watch('fileList')\n fileListChange() {\n if (this.canChangeFileList) {\n this.publicInputEl.value = '';\n this.inputEl.files = this.arrToFileList(\n this.fileList.map((file) => file.file)\n );\n this.nanoChange.emit({ value: this.value, files: this.files });\n }\n }\n @State() hasFocus: boolean;\n\n @Element() host: HTMLNanoFileUploadElement;\n\n // public props\n\n /** Name of the form control. Submitted with the form as part of a name/value pair. */\n @Prop() name!: string;\n\n /** The accept attribute value is a string that defines the file types the file input should accept.\n * E.g. for a MS Word file: `.doc, .docx,application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document` */\n @Prop() accept?: string;\n\n /** Specifies which camera to use for capture of image or video data. `user` for the user-facing camera and/or microphone.\n * `environment` specifies the the outward-facing camera and/or microphone. If the requested facing mode isn't available,\n * the user agent may fall back to its preferred default mode. */\n @Prop() capture?: 'user' | 'environment';\n\n /** The maximum file size allowed per file (Megabytes) */\n @Prop() maxFileSize: number = 1;\n\n /** The maximum file size allowed per file (bytes). */\n @Prop() maxFiles: number = 1;\n\n /** String to place within a label element. */\n @Prop() label!: string;\n\n /** Placeholder only used within single file uploads. */\n @Prop() placeholder: string = 'Choose a file...';\n\n /** Visually hide the label - but make it accessible. */\n @Prop() hideLabel?: boolean = false;\n\n /** If `true`, the user must select a file to upload before submitting a form. */\n @Prop() required = false;\n\n /** If `true`, the user cannot interact with the select. */\n @Prop({ reflect: true }) disabled = false;\n\n /** If `true`, a clear icon will appear in the input when there is a value.\n * Clicking it clears the input. Only used within single file uploads. */\n @Prop() clearInput = false;\n\n /** Whether to show validation errors underneath input */\n @Prop({ reflect: true }) showInlineError = true;\n\n /** When should the field perform validation */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submit';\n\n @Watch('maxFiles')\n @Watch('maxFileSize')\n @Watch('capture')\n @Watch('accept')\n @Watch('required')\n @Watch('disabled')\n @Watch('validateOn')\n @Watch('fileList')\n protected shouldValidate() {\n if (!this.inputEl) return;\n setTimeout(() => {\n if (this.validateOn === 'dirty') this.validate();\n }, 20);\n }\n\n @State() _invalid = false;\n /** This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n\n /** A File array that lists every selected file.\n * Has an added `objectURL` property returning a `DOMString`\n * containing an object URL that can be used to reference the contents of the specified source\n * This list has no more than one member unless the multiple attribute is specified. @readonly */\n @Prop()\n get files() {\n File;\n return this.inputEl\n ? Array.from(this.inputEl.files).map((file) => {\n return {\n lastModified: file.lastModified,\n type: file.type,\n name: file.name,\n size: file.size,\n objectURL: URL.createObjectURL(file),\n arrayBuffer: file.arrayBuffer,\n slice: file.slice,\n stream: file.stream,\n text: file.text,\n };\n })\n : [];\n }\n\n /** A file input's value attribute contains a DOMString that represents the path to the selected file(s).\n * If the user selected multiple files, the value represents the first file in the list of files they selected.\n * You can reset the file-upload control by setting the value to an emptry string e.g. `var input.value = ''` */\n @Prop()\n get value() {\n return this.inputEl ? this.inputEl.value : '';\n }\n set value(val: string) {\n if (val === '' && this.inputEl) {\n this.fileList = [];\n this.inputEl.value = '';\n }\n }\n\n // Events\n\n /** Emitted when the value has changed. */\n @Event() nanoChange!: EventEmitter<FileInputChangeEventDetail>;\n\n /** Emited when the checkbox is focused */\n @Event() nanoFocus: EventEmitter;\n\n /** Emited when the checkbox is blurred */\n @Event() nanoBlur: EventEmitter;\n\n /** Called when validation is performed (which depends on `validateOn`).\n * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`. */\n @Event() nanoValidate: EventEmitter<ControlValidityEventDetail>;\n\n // Public methods\n\n /** Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `{ isValid: boolean, errorMessage: string }` */\n @Method()\n async reportValidity(validateFirst: boolean): Promise<ControlValidity> {\n if (validateFirst) this.validate();\n return {\n isValid: !this.invalid,\n errorMessage: this.inputEl.validationMessage,\n };\n }\n\n /** Sets focus on the specified `nano-input`. Use this method instead of the global\n * `input.focus()`. */\n @Method()\n async setFocus() {\n if (this.inputEl) this.inputEl.focus();\n }\n\n /** Returns the native `<input>` element used under the hood */\n @Method()\n getInputElement(): Promise<HTMLInputElement | HTMLTextAreaElement> {\n return Promise.resolve(this.inputEl!);\n }\n\n /** Invalidate the field and show a custom error message. To clear the error you will need to re-call this method with an empty string.\n * @param message */\n @Method()\n async showError(message: string) {\n if (this.inputEl) {\n this.inputEl.setCustomValidity(message);\n this.validate();\n }\n }\n\n // Listeners\n\n @Listen('click', { target: 'window' })\n globalClickHandler(e: Event) {\n if (!this.hasFocus) return;\n if (e.composedPath().every((node) => node !== this.host)) this.onBlur();\n }\n\n @Listen('keydown', { target: 'window' })\n globalKeydownHandler(e: KeyboardEvent) {\n if (!this.hasFocus || e.key !== 'Tab') return;\n if (e.target !== this.inputEl) this.onBlur();\n }\n\n // Private methods\n\n private onClearClick = () => {\n this.value = '';\n };\n\n private onBlur = () => {\n this.hasFocus = false;\n if (this.validateOn === 'dirty') this.validate();\n this.nanoBlur.emit();\n };\n\n private onFocus = () => {\n this.hasFocus = true;\n this.nanoFocus.emit();\n };\n\n private arrToFileList(files: File[]): FileList {\n const fileList = getDataTransfer();\n for (var i = 0, len = files.length; i < len; i++)\n fileList.items.add(files[i]);\n return fileList.files;\n }\n\n private checkFileSize(size: number): boolean {\n return size / 1000000 <= this.maxFileSize;\n }\n\n private checkFileType(type: string): boolean {\n return this.accept.match(type) && this.accept.match(type).length > 0;\n }\n\n private validate = (ev?: Event) => {\n this.errorMessage = null;\n this.inputEl.setCustomValidity('');\n let error: string;\n\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n\n if (!this.inputEl.validity.valid) {\n if (this.showInlineError)\n this.errorMessage = this.inputEl.validationMessage;\n } else {\n this.fileList.forEach((fileItem) => {\n error = null;\n if (!this.checkFileSize(fileItem.file.size)) {\n error =\n 'Maximum file size exceeded. Max file size is ' +\n this.maxFileSize +\n 'Mb';\n } else if (!this.checkFileType(fileItem.file.type))\n error = `File type is not allowed (${this.accept})`;\n\n if (!this.errorMessage && error) this.errorMessage = error;\n fileItem.validationMessage = error;\n fileItem.valid = !error;\n });\n if (this.fileList.length > this.maxFiles)\n this.errorMessage = `Maxinum number of files exceeded (${this.maxFiles})`;\n }\n\n if (!!this.errorMessage) {\n this._invalid = true;\n this.inputEl.setCustomValidity(this.errorMessage);\n } else {\n this._invalid = false;\n }\n\n this.nanoValidate.emit({\n isValid: !this._invalid,\n errorMessage: this.inputEl.validationMessage,\n originalEvent: ev,\n });\n };\n\n private slotChangeObserver() {\n if (this.mo) this.mo.disconnect();\n const mo = (this.mo = new MutationObserver(() =>\n this.processSlottedContent()\n ));\n mo.observe(this.host, { childList: true, subtree: true });\n }\n\n private processSlottedContent() {\n // see if we have slot content\n this.hasLabelSlot = !!this.host.querySelectorAll('[slot=\"label\"]');\n this.hasHelperSlot = !!this.host.querySelector('[slot=\"helper\"]');\n }\n\n private addNewFiles(files: FileList) {\n const fileList: FileValidation[] = Array.from(files).map((file) => {\n return {\n file: file,\n location: URL.createObjectURL(file),\n valid: true,\n validationMessage: null,\n };\n });\n\n // if we have a list and we're in a browser that can amend files\n // append files to the list, otherwise replace\n if (this.canChangeFileList && this.maxFiles > 1) {\n const newFiles = fileList.filter(\n (findFile) =>\n !this.fileList.find((file) => file.file.name === findFile.file.name)\n );\n this.fileList = [...this.fileList, ...newFiles];\n } else this.fileList = fileList;\n }\n\n // event handlers & hooks\n\n private onInvalid = (ev: Event) => {\n this.validate(ev);\n if (this.showInlineError) ev.preventDefault();\n };\n\n private onFileChoose = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files && files.length)\n this.addNewFiles((e.target as HTMLInputElement).files);\n };\n\n private onFileRemoveFileClick = (e: Event, file: FileValidation) => {\n if (!this.canChangeFileList) return;\n this.removeFiles.push(file);\n\n (e.target as HTMLElement)\n .closest('.file-upload__list-item--active')\n .classList.remove('file-upload__list-item--active');\n };\n\n private onFileRemoveAnim = () => {\n if (!this.canChangeFileList || !this.removeFiles.length) return;\n this.fileList = this.fileList.filter(\n (fileItem) => !this.removeFiles.find((rmFile) => rmFile === fileItem)\n );\n this.removeFiles = [];\n };\n\n private onInputChange = () => {\n this.nanoChange.emit({ value: this.value, files: this.files });\n };\n\n private onDragStop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n };\n\n private onDragStart = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = true;\n };\n\n private onDrop = (e: DragEvent) => {\n this.onDragStop(e);\n if (e.dataTransfer.files && e.dataTransfer.files.length)\n this.addNewFiles(e.dataTransfer.files);\n };\n\n // Component lifecycle\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n }\n\n componentDidLoad() {\n this.slotChangeObserver();\n }\n\n componentWillLoad() {\n this.processSlottedContent();\n }\n\n private FileUploadInput = (\n eleType: 'drop' | 'btn',\n listId?: string\n ): VNode[] => {\n const labelId = this.fileInputId + '-lbl';\n const moreId =\n this.showInlineError || this.hasHelperSlot\n ? this.fileInputId + '-more'\n : '';\n\n return [\n <div class={'file-upload__' + eleType + '-wrap'}>\n <label\n class={`file-upload__` + eleType}\n htmlFor={this.fileInputId}\n id={labelId}\n onDrop={(e) => {\n this.onDrop(e);\n this.onDragStop(e);\n }}\n onDragEnd={this.onDragStop}\n onDragLeave={this.onDragStop}\n onDragEnter={this.onDragStart}\n onDragOver={this.onDragStart}\n >\n <div\n class={`file-upload__label ${\n this.hideLabel || eleType !== 'drop' ? 'visually-hide' : ''\n }`}\n >\n {this.label && this.label}\n {!this.label && this.hasLabelSlot && <slot name=\"label\" />}\n </div>\n {eleType === 'drop' && (\n <div class=\"file-upload__drop-area\">\n Drap and drop or&nbsp;<span>browse</span>\n </div>\n )}\n {eleType === 'btn' && (\n <div\n class={`file-upload__button button--keyline button--icon-start ${\n this.hasFocus ? 'button--focus' : ''\n }`}\n >\n <div class={`file-upload__btn-content`}>\n <nano-icon name=\"regular/cloud-upload\" />\n <span>\n {!!this.fileList.length\n ? this.fileList[0].file.name\n : this.placeholder}\n </span>\n {!!this.value && this.clearInput && !this.disabled && (\n <button\n type=\"button\"\n class=\"icon file-upload__clear-btn\"\n tabindex=\"-1\"\n onClick={this.onClearClick}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n )}\n </div>\n </div>\n )}\n <input\n aria-labelledby={labelId + ' ' + moreId + ' ' + listId}\n type=\"file\"\n id={this.fileInputId}\n accept={this.accept}\n class=\"file-upload__input\"\n multiple={this.maxFiles > 1}\n disabled={this.disabled}\n name={this.canChangeFileList ? undefined : this.name}\n ref={(input) => {\n if (this.canChangeFileList) {\n this.publicInputEl = input;\n return;\n }\n this.inputEl = input;\n }}\n onChange={this.onFileChoose}\n onFocus={this.onFocus}\n onReset={this.onInputChange}\n />\n </label>\n <input\n name={!this.canChangeFileList ? undefined : this.name}\n ref={(input) => {\n if (!this.canChangeFileList) return;\n this.inputEl = input;\n }}\n type=\"file\"\n id={this.fileInputId + '-hidden'}\n tabIndex={-1}\n multiple={true}\n class=\"file-upload__input\"\n disabled={this.disabled}\n required={this.required}\n accept={this.accept}\n onInvalid={this.onInvalid}\n onChange={this.onInputChange}\n />\n </div>,\n this.showInlineError || this.hasHelperSlot ? (\n <div class=\"file-upload__more\" id={moreId}>\n {this.showInlineError ? (\n <div class=\"file-upload__error\">{this.errorMessage}</div>\n ) : (\n ''\n )}\n <div class=\"file-upload__help\">\n <slot name=\"helper\" />\n </div>\n </div>\n ) : (\n ''\n ),\n ];\n };\n\n private button = (): VNode[] => {\n return this.FileUploadInput('btn');\n };\n\n private dropArea = (): VNode[] => {\n const listId = this.fileInputId + '-list';\n return [\n this.FileUploadInput('drop', listId),\n <output class=\"file-upload__list-wrap\" id={listId}>\n {!!this.fileList && this.fileList.length > 0 && (\n <ul class=\"file-upload__list list\">\n {this.fileList.map((file) => {\n return (\n <li\n key={file.file.name}\n class=\"file-upload__list-item file-upload__list-item--active list-item\"\n onAnimationEnd={(_) => this.onFileRemoveAnim()}\n >\n <span class=\"list-title\">{file.file.name}</span>\n {!file.valid && (\n <nano-tooltip\n content={file.validationMessage}\n placement=\"left\"\n >\n <nano-icon-button\n class=\"list-button list-error\"\n iconName=\"light/exclamation-triangle\"\n label=\"File error\"\n />\n </nano-tooltip>\n )}\n {this.canChangeFileList && (\n <nano-icon-button\n class=\"list-button\"\n type=\"button\"\n iconName=\"light/eye\"\n label=\"View file\"\n target=\"_blank\"\n href={file.location}\n />\n )}\n {this.canChangeFileList && (\n <nano-icon-button\n onClick={(e) => this.onFileRemoveFileClick(e, file)}\n class=\"list-button\"\n iconName=\"light/times\"\n label=\"Remove file\"\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n </output>,\n ];\n };\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'file-upload': true,\n 'file-upload--dragging': this.isDragging,\n 'file-upload--focus': this.hasFocus,\n 'file-upload--invalid': this._invalid,\n }}\n >\n {this.maxFiles > 1 ? <this.dropArea /> : <this.button />}\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["src/components/file-upload/file-upload.scss?tag=nano-file-upload&encapsulation=scoped","src/components/file-upload/file-upload.tsx"],"names":["fileUploadCss","fileInputIds","getDataTransfer","DataTransfer","_a","ClipboardEvent","clipboardData","_b","FileUpload","class_1","hostRef","_this","this","fileInputId","canChangeFileList","removeFiles","errorMessage","isDragging","fileList","maxFileSize","maxFiles","placeholder","hideLabel","required","disabled","clearInput","showInlineError","validateOn","_invalid","onClearClick","value","onBlur","hasFocus","validate","nanoBlur","emit","onFocus","nanoFocus","ev","inputEl","setCustomValidity","error","validity","valid","validationMessage","forEach","fileItem","checkFileSize","file","size","checkFileType","type","accept","length","nanoValidate","isValid","originalEvent","onInvalid","preventDefault","onFileChoose","e","files","target","addNewFiles","onFileRemoveFileClick","push","closest","classList","remove","onFileRemoveAnim","filter","find","rmFile","onInputChange","nanoChange","onDragStop","stopPropagation","onDragStart","onDrop","dataTransfer","FileUploadInput","eleType","listId","labelId","moreId","hasHelperSlot","h","class","htmlFor","id","onDragEnd","onDragLeave","onDragEnter","onDragOver","label","hasLabelSlot","name","tabindex","onClick","aria-labelledby","multiple","undefined","ref","input","publicInputEl","onChange","onReset","tabIndex","button","dropArea","map","key","onAnimationEnd","_","content","placement","iconName","href","location","prototype","fileListChange","arrToFileList","shouldValidate","setTimeout","Object","defineProperty","Array","from","objectURL","URL","createObjectURL","val","reportValidity","validateFirst","invalid","setFocus","focus","getInputElement","Promise","resolve","showError","message","globalClickHandler","composedPath","every","node","host","globalKeydownHandler","i","len","items","add","match","slotChangeObserver","mo","disconnect","MutationObserver","processSlottedContent","observe","childList","subtree","querySelectorAll","querySelector","newFiles","findFile","__spreadArray","disconnectedCallback","componentDidLoad","componentWillLoad","render","Host","file-upload","file-upload--dragging","file-upload--focus","file-upload--invalid"],"mappings":"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","sourcesContent":["@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/button';\n\n:host {\n /**\n * @prop --invalid-msg-color: Default value #{nano-color(danger, base)};\n * @prop --invalid-msg-font-size: Default value #{$input-help-font-size};\n\n * @prop --help-msg-color: Default value #{$input-help-color};\n\n * @prop --label-color: Default value #{$label-color};\n * @prop --label-color--invalid: Default value #{$label-color-invalid};\n * @prop --label-font-size: Default value #{$label-font-size};\n * @prop --label-padding: Default value #{$input-padding-bottom};\n * @prop --label-color--invalid: Default value #{$label-color-invalid};\n\n * @prop --drop-bg: Default value #{$color-blue--faded};\n * @prop --drop-text: Default value #{$color-dimgrey};\n * @prop --drop-height: Default value 3.5em;\n * @prop --drop-border-tint: Default value #{nano-color(primary, base, null, true)};\n * @prop --drop-border-width: Default value 2px;\n * @prop --drop-border-radius: Default value 5px;\n * @prop --drop-bg--invalid: Default value #{$input-background-color--invalid};\n * @prop --drop-border--invalid: Default value #{nano-color(danger, base, null, true)};\n\n * @prop --btn-bg: Default value #{nano-color(primary, base)};\n * @prop --btn-text: Default value #{nano-color(primary, contrast)};\n * @prop --btn-icon-size: Default value var(--nano-btn-icon-size, 1.4em);\n * @prop --btn-padding-top: Default value var(--nano-btn-padding-top, .5em);\n * @prop --btn-padding-bottom: Default value var(--nano-btn-padding-bottom, .5em);\n * @prop --btn-padding-start: Default value var(--nano-btn-padding-start, 1em);\n * @prop --btn-padding-end: Default value var(--nano-btn-padding-end, 1em);\n */\n\n min-height: 1rem;\n display: block;\n\n --invalid-msg-color: #{nano-color(danger, base)};\n --invalid-msg-font-size: #{$input-help-font-size};\n --help-msg-color: #{$input-help-color};\n --label-color: #{$label-color};\n --label-font-size: #{$label-font-size};\n --label-padding: #{$input-padding-bottom};\n --label-color--invalid: #{$label-color-invalid};\n --drop-bg: #{$color-blue--faded};\n --drop-text: #{darken($color-dimgrey, 11%)};\n --drop-height: 3.5em;\n --drop-border-tint: #{nano-color(primary, base, null, true)};\n --drop-border-width: 2px;\n --drop-border-radius: 5px;\n --drop-bg--invalid: #{$input-background-color--invalid};\n --drop-border--invalid: #{nano-color(danger, base, null, true)};\n --btn-bg: #{nano-color(primary, base)};\n --btn-text: #{nano-color(primary, contrast)};\n --btn-icon-size: var(--nano-btn-icon-size, 1.4em);\n --btn-padding-top: var(--nano-btn-padding-top, 0.5em);\n --btn-padding-bottom: var(--nano-btn-padding-bottom, 0.5em);\n --btn-padding-start: var(--nano-btn-padding-start, 1em);\n --btn-padding-end: var(--nano-btn-padding-end, 1em);\n}\n\n:host([disabled]:not([disabled='false'])) {\n opacity: 0.7;\n\n * {\n pointer-events: none !important;\n }\n}\n\n.file-upload {\n $self: &;\n\n /* Common */\n\n &__label {\n font-size: var(--label-font-size);\n padding: 0 0 var(--label-padding);\n margin: 0;\n line-height: 1;\n\n :host([invalid]:not([invalid='false'])) & {\n color: var(--label-color--invalid);\n }\n }\n\n &__input {\n display: none;\n }\n\n &__error,\n &__help,\n &__more,\n &__label {\n display: block;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &__more {\n height: 1em;\n\n @include margin(\n calc(var(--label-padding) / 2),\n 0,\n var(--label-padding),\n 3px\n );\n\n position: relative;\n }\n\n &__error,\n &__help {\n top: 0;\n left: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n\n .file-upload--invalid & {\n opacity: 1;\n }\n }\n\n &__error {\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n opacity: 0;\n\n .file-upload--invalid & {\n opacity: 1;\n }\n }\n\n &__help {\n font-style: italic;\n opacity: 1;\n color: var(--help-msg-color);\n\n .file-upload--invalid & {\n opacity: 0;\n }\n }\n\n /* Drop area / Multi file upload */\n\n &__drop {\n position: relative;\n width: 100%;\n display: inline-block;\n }\n\n &__drop-area {\n background-color: var(--drop-bg);\n color: var(--drop-text);\n min-height: var(--drop-height);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.9em;\n position: relative;\n transition: background-color 0.15s ease-in-out;\n padding: 0.5rem;\n\n :host([disabled]:not([disabled='false'])) & {\n opacity: 0.7;\n }\n\n .file-upload--invalid & {\n background-color: var(--drop-bg--invalid);\n }\n\n .file-upload--dragging & {\n background-color: #{$color-white};\n }\n\n &::after {\n content: '';\n position: absolute;\n border-radius: var(--drop-border-radius);\n border-width: var(--drop-border-width);\n border-color: rgba(var(--drop-border-tint), 0.5);\n border-style: dashed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n transition:\n top 0.1s ease-in-out,\n bottom 0.1s ease-in-out,\n left 0.1s ease-in-out,\n right 0.1s ease-in-out;\n\n .file-upload--invalid & {\n border-color: rgba(var(--drop-border--invalid), 1);\n }\n\n .file-upload--dragging & {\n top: 5px;\n bottom: 5px;\n left: 5px;\n right: 5px;\n }\n }\n\n span {\n color: rgba(var(--drop-border-tint), 1);\n text-decoration: underline;\n border-radius: 2px;\n z-index: 1;\n cursor: pointer;\n position: relative;\n\n .file-upload--focus & {\n box-shadow: #{$control-focus-style};\n }\n }\n }\n\n &__list {\n list-style: none;\n margin: 0;\n padding: 0;\n\n &-wrap {\n position: relative;\n top: -4px;\n }\n\n &-item {\n width: 100%;\n margin: 0 0 2px;\n display: flex;\n align-items: center;\n transform: translateZ(0);\n animation: hideListItem 0.3s ease-in-out forwards;\n\n @keyframes hideListItem {\n 0% {\n opacity: 1;\n transform: translateY(0);\n transform: translateZ(0);\n }\n\n 100% {\n opacity: 0;\n transform: translateY(10px);\n transform: translateZ(0);\n }\n }\n\n &--active {\n animation: showListItem 0.3s ease-in-out forwards;\n\n @keyframes showListItem {\n 0% {\n opacity: 0;\n transform: translateY(10px);\n transform: translateZ(0);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n transform: translateZ(0);\n }\n }\n }\n }\n\n .list-title {\n background: white;\n border-radius: 5px;\n padding: 5px 5px;\n margin-right: 2px;\n display: block;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: 0.9em;\n color: var(--help-msg-color);\n }\n\n .list-button {\n background: white;\n border-radius: 5px;\n margin: 2px;\n }\n\n .list-error {\n --color: rgba(var(--drop-border--invalid), 1);\n }\n }\n\n /* Button display / Single file upload */\n\n &__button {\n @include button-base;\n @include button-standard(\n var(--btn-bg),\n var(--btn-text),\n #{nano-color(primary, shade)}\n );\n\n --nano-btn-icon-size: var(--btn-icon-size);\n --nano-btn-line-height: var(--btn-icon-size);\n --nano-btn-padding-top: var(--btn-padding-top);\n --nano-btn-padding-bottom: var(--btn-padding-bottom);\n --nano-btn-padding-start: var(--btn-padding-start);\n --nano-btn-padding-end: var(--btn-padding-end);\n\n max-width: 100%;\n font-size: 0.9em;\n\n :host([disabled]:not([disabled='false'])) & {\n opacity: 0.4;\n }\n\n .file-upload--dragging & {\n --nano-btn-border-style: dashed;\n }\n #{$self}__clear-btn {\n @include margin(0);\n\n font-size: inherit;\n padding: 0;\n border: 0;\n outline: none;\n background-color: transparent;\n display: flex;\n align-items: stretch;\n width: auto;\n color: var(--clear-btn-color);\n\n :host(.is-invalid) & {\n color: var(--clear-btn-color--invalid);\n }\n\n nano-icon {\n @include margin(0, 0, 0, 0.4rem);\n }\n }\n #{$self}__btn-content {\n display: flex;\n align-items: center;\n\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n }\n }\n}\n","import {\n Component,\n Prop,\n h,\n Host,\n Element,\n ComponentInterface,\n State,\n Event,\n EventEmitter,\n Watch,\n VNode,\n Method,\n Listen,\n} from '@stencil/core';\nimport {\n ControlValidity,\n ControlValidityEventDetail,\n FileInputChangeEventDetail,\n FileWithUrl,\n} from '../../interface';\n\nlet fileInputIds = 0;\n\nlet getDataTransfer = () => new DataTransfer();\ntry {\n getDataTransfer();\n} catch {\n try {\n getDataTransfer = () => new ClipboardEvent('').clipboardData;\n getDataTransfer();\n } catch {\n getDataTransfer = null;\n }\n}\n\ninterface FileValidation {\n file: File;\n valid: boolean;\n validationMessage?: string;\n location?: string;\n}\n/**\n * A better UI experience for `input type=\"file\"` form controls.\n *\n * - Drag and Drop\n * - Validation options\n * - Preview and manage multiple files\n */\n@Component({\n tag: 'nano-file-upload',\n styleUrl: 'file-upload.scss',\n scoped: true,\n})\nexport class FileUpload implements ComponentInterface {\n private inputEl: HTMLInputElement;\n private publicInputEl: HTMLInputElement;\n private mo!: MutationObserver;\n private fileInputId = `nano-file-upload-${fileInputIds++}`;\n private canChangeFileList = !!getDataTransfer;\n private removeFiles: FileValidation[] = [];\n\n @State() hasHelperSlot: boolean;\n @State() hasLabelSlot: boolean;\n @State() errorMessage: string = null;\n @State() isDragging = false;\n @State() fileList: FileValidation[] = [];\n @Watch('fileList')\n fileListChange() {\n if (this.canChangeFileList) {\n this.publicInputEl.value = '';\n this.inputEl.files = this.arrToFileList(\n this.fileList.map((file) => file.file)\n );\n this.nanoChange.emit({ value: this.value, files: this.files });\n }\n }\n @State() hasFocus: boolean;\n\n @Element() host: HTMLNanoFileUploadElement;\n\n // public props\n\n /** Name of the form control. Submitted with the form as part of a name/value pair. */\n @Prop() name!: string;\n\n /** The accept attribute value is a string that defines the file types the file input should accept.\n * E.g. for a MS Word file: `.doc, .docx,application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document` */\n @Prop() accept?: string;\n\n /** Specifies which camera to use for capture of image or video data. `user` for the user-facing camera and/or microphone.\n * `environment` specifies the the outward-facing camera and/or microphone. If the requested facing mode isn't available,\n * the user agent may fall back to its preferred default mode. */\n @Prop() capture?: 'user' | 'environment';\n\n /** The maximum file size allowed per file (Megabytes) */\n @Prop() maxFileSize: number = 1;\n\n /** The maximum file size allowed per file (bytes). */\n @Prop() maxFiles: number = 1;\n\n /** String to place within a label element. */\n @Prop() label!: string;\n\n /** Placeholder only used within single file uploads. */\n @Prop() placeholder: string = 'Choose a file...';\n\n /** Visually hide the label - but make it accessible. */\n @Prop() hideLabel?: boolean = false;\n\n /** If `true`, the user must select a file to upload before submitting a form. */\n @Prop() required = false;\n\n /** If `true`, the user cannot interact with the select. */\n @Prop({ reflect: true }) disabled = false;\n\n /** If `true`, a clear icon will appear in the input when there is a value.\n * Clicking it clears the input. Only used within single file uploads. */\n @Prop() clearInput = false;\n\n /** Whether to show validation errors underneath input */\n @Prop({ reflect: true }) showInlineError = true;\n\n /** When should the field perform validation */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submit';\n\n @Watch('maxFiles')\n @Watch('maxFileSize')\n @Watch('capture')\n @Watch('accept')\n @Watch('required')\n @Watch('disabled')\n @Watch('validateOn')\n @Watch('fileList')\n protected shouldValidate() {\n if (!this.inputEl) return;\n setTimeout(() => {\n if (this.validateOn === 'dirty') this.validate();\n }, 20);\n }\n\n @State() _invalid = false;\n /** This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n\n /** A File array that lists every selected file.\n * Has an added `objectURL` property returning a `DOMString`\n * containing an object URL that can be used to reference the contents of the specified source\n * This list has no more than one member unless the multiple attribute is specified. @readonly */\n @Prop()\n get files(): FileWithUrl[] {\n return this.inputEl\n ? Array.from(this.inputEl.files).map((file: FileWithUrl) => {\n file.objectURL = URL.createObjectURL(file);\n return file;\n })\n : [];\n }\n\n /** A file input's value attribute contains a DOMString that represents the path to the selected file(s).\n * If the user selected multiple files, the value represents the first file in the list of files they selected.\n * You can reset the file-upload control by setting the value to an emptry string e.g. `var input.value = ''` */\n @Prop()\n get value() {\n return this.inputEl ? this.inputEl.value : '';\n }\n set value(val: string) {\n if (val === '' && this.inputEl) {\n this.fileList = [];\n this.inputEl.value = '';\n }\n }\n\n // Events\n\n /** Emitted when the value has changed. */\n @Event() nanoChange!: EventEmitter<FileInputChangeEventDetail>;\n\n /** Emited when the checkbox is focused */\n @Event() nanoFocus: EventEmitter;\n\n /** Emited when the checkbox is blurred */\n @Event() nanoBlur: EventEmitter;\n\n /** Called when validation is performed (which depends on `validateOn`).\n * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`. */\n @Event() nanoValidate: EventEmitter<ControlValidityEventDetail>;\n\n // Public methods\n\n /** Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `{ isValid: boolean, errorMessage: string }` */\n @Method()\n async reportValidity(validateFirst: boolean): Promise<ControlValidity> {\n if (validateFirst) this.validate();\n return {\n isValid: !this.invalid,\n errorMessage: this.inputEl.validationMessage,\n };\n }\n\n /** Sets focus on the specified `nano-input`. Use this method instead of the global\n * `input.focus()`. */\n @Method()\n async setFocus() {\n if (this.inputEl) this.inputEl.focus();\n }\n\n /** Returns the native `<input>` element used under the hood */\n @Method()\n getInputElement(): Promise<HTMLInputElement | HTMLTextAreaElement> {\n return Promise.resolve(this.inputEl!);\n }\n\n /** Invalidate the field and show a custom error message. To clear the error you will need to re-call this method with an empty string.\n * @param message */\n @Method()\n async showError(message: string) {\n if (this.inputEl) {\n this.inputEl.setCustomValidity(message);\n this.validate();\n }\n }\n\n // Listeners\n\n @Listen('click', { target: 'window' })\n globalClickHandler(e: Event) {\n if (!this.hasFocus) return;\n if (e.composedPath().every((node) => node !== this.host)) this.onBlur();\n }\n\n @Listen('keydown', { target: 'window' })\n globalKeydownHandler(e: KeyboardEvent) {\n if (!this.hasFocus || e.key !== 'Tab') return;\n if (e.target !== this.inputEl) this.onBlur();\n }\n\n // Private methods\n\n private onClearClick = () => {\n this.value = '';\n };\n\n private onBlur = () => {\n this.hasFocus = false;\n if (this.validateOn === 'dirty') this.validate();\n this.nanoBlur.emit();\n };\n\n private onFocus = () => {\n this.hasFocus = true;\n this.nanoFocus.emit();\n };\n\n private arrToFileList(files: File[]): FileList {\n const fileList = getDataTransfer();\n for (var i = 0, len = files.length; i < len; i++)\n fileList.items.add(files[i]);\n return fileList.files;\n }\n\n private checkFileSize(size: number): boolean {\n return size / 1000000 <= this.maxFileSize;\n }\n\n private checkFileType(type: string): boolean {\n if (!this.accept) return true;\n return this.accept.match(type) && this.accept.match(type).length > 0;\n }\n\n private validate = (ev?: Event) => {\n this.errorMessage = null;\n this.inputEl.setCustomValidity('');\n let error: string;\n\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n\n if (!this.inputEl.validity.valid) {\n if (this.showInlineError)\n this.errorMessage = this.inputEl.validationMessage;\n } else {\n this.fileList.forEach((fileItem) => {\n error = null;\n if (!this.checkFileSize(fileItem.file.size)) {\n error =\n 'Maximum file size exceeded. Max file size is ' +\n this.maxFileSize +\n 'Mb';\n } else if (!this.checkFileType(fileItem.file.type))\n error = `File type is not allowed (${this.accept})`;\n\n if (!this.errorMessage && error) this.errorMessage = error;\n fileItem.validationMessage = error;\n fileItem.valid = !error;\n });\n if (this.fileList.length > this.maxFiles)\n this.errorMessage = `Maxinum number of files exceeded (${this.maxFiles})`;\n }\n\n if (!!this.errorMessage) {\n this._invalid = true;\n this.inputEl.setCustomValidity(this.errorMessage);\n } else {\n this._invalid = false;\n }\n\n this.nanoValidate.emit({\n isValid: !this._invalid,\n errorMessage: this.inputEl.validationMessage,\n originalEvent: ev,\n });\n };\n\n private slotChangeObserver() {\n if (this.mo) this.mo.disconnect();\n const mo = (this.mo = new MutationObserver(() =>\n this.processSlottedContent()\n ));\n mo.observe(this.host, { childList: true, subtree: true });\n }\n\n private processSlottedContent() {\n // see if we have slot content\n this.hasLabelSlot = !!this.host.querySelectorAll('[slot=\"label\"]');\n this.hasHelperSlot = !!this.host.querySelector('[slot=\"helper\"]');\n }\n\n private addNewFiles(files: FileList) {\n const fileList: FileValidation[] = Array.from(files).map((file) => {\n return {\n file: file,\n location: URL.createObjectURL(file),\n valid: true,\n validationMessage: null,\n };\n });\n\n // if we have a list and we're in a browser that can amend files\n // append files to the list, otherwise replace\n if (this.canChangeFileList && this.maxFiles > 1) {\n const newFiles = fileList.filter(\n (findFile) =>\n !this.fileList.find((file) => file.file.name === findFile.file.name)\n );\n this.fileList = [...this.fileList, ...newFiles];\n } else this.fileList = fileList;\n }\n\n // event handlers & hooks\n\n private onInvalid = (ev: Event) => {\n this.validate(ev);\n if (this.showInlineError) ev.preventDefault();\n };\n\n private onFileChoose = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files && files.length)\n this.addNewFiles((e.target as HTMLInputElement).files);\n };\n\n private onFileRemoveFileClick = (e: Event, file: FileValidation) => {\n if (!this.canChangeFileList) return;\n this.removeFiles.push(file);\n\n (e.target as HTMLElement)\n .closest('.file-upload__list-item--active')\n .classList.remove('file-upload__list-item--active');\n };\n\n private onFileRemoveAnim = () => {\n if (!this.canChangeFileList || !this.removeFiles.length) return;\n this.fileList = this.fileList.filter(\n (fileItem) => !this.removeFiles.find((rmFile) => rmFile === fileItem)\n );\n this.removeFiles = [];\n };\n\n private onInputChange = () => {\n this.nanoChange.emit({ value: this.value, files: this.files });\n };\n\n private onDragStop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n };\n\n private onDragStart = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = true;\n };\n\n private onDrop = (e: DragEvent) => {\n this.onDragStop(e);\n if (e.dataTransfer.files && e.dataTransfer.files.length)\n this.addNewFiles(e.dataTransfer.files);\n };\n\n // Component lifecycle\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n }\n\n componentDidLoad() {\n this.slotChangeObserver();\n }\n\n componentWillLoad() {\n this.processSlottedContent();\n }\n\n private FileUploadInput = (\n eleType: 'drop' | 'btn',\n listId?: string\n ): VNode[] => {\n const labelId = this.fileInputId + '-lbl';\n const moreId =\n this.showInlineError || this.hasHelperSlot\n ? this.fileInputId + '-more'\n : '';\n\n return [\n <div class={'file-upload__' + eleType + '-wrap'}>\n <label\n class={`file-upload__` + eleType}\n htmlFor={this.fileInputId}\n id={labelId}\n onDrop={(e) => {\n this.onDrop(e);\n this.onDragStop(e);\n }}\n onDragEnd={this.onDragStop}\n onDragLeave={this.onDragStop}\n onDragEnter={this.onDragStart}\n onDragOver={this.onDragStart}\n >\n <div\n class={`file-upload__label ${\n this.hideLabel || eleType !== 'drop' ? 'visually-hide' : ''\n }`}\n >\n {this.label && this.label}\n {!this.label && this.hasLabelSlot && <slot name=\"label\" />}\n </div>\n {eleType === 'drop' && (\n <div class=\"file-upload__drop-area\">\n Drap and drop or&nbsp;<span>browse</span>\n </div>\n )}\n {eleType === 'btn' && (\n <div\n class={`file-upload__button button--keyline button--icon-start ${\n this.hasFocus ? 'button--focus' : ''\n }`}\n >\n <div class={`file-upload__btn-content`}>\n <nano-icon name=\"regular/cloud-upload\" />\n <span>\n {!!this.fileList.length\n ? this.fileList[0].file.name\n : this.placeholder}\n </span>\n {!!this.value && this.clearInput && !this.disabled && (\n <button\n type=\"button\"\n class=\"icon file-upload__clear-btn\"\n tabindex=\"-1\"\n onClick={this.onClearClick}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n )}\n </div>\n </div>\n )}\n <input\n aria-labelledby={labelId + ' ' + moreId + ' ' + listId}\n type=\"file\"\n id={this.fileInputId}\n accept={this.accept}\n class=\"file-upload__input\"\n multiple={this.maxFiles > 1}\n disabled={this.disabled}\n name={this.canChangeFileList ? undefined : this.name}\n ref={(input) => {\n if (this.canChangeFileList) {\n this.publicInputEl = input;\n return;\n }\n this.inputEl = input;\n }}\n onChange={this.onFileChoose}\n onFocus={this.onFocus}\n onReset={this.onInputChange}\n />\n </label>\n <input\n name={!this.canChangeFileList ? undefined : this.name}\n ref={(input) => {\n if (!this.canChangeFileList) return;\n this.inputEl = input;\n }}\n type=\"file\"\n id={this.fileInputId + '-hidden'}\n tabIndex={-1}\n multiple={true}\n class=\"file-upload__input\"\n disabled={this.disabled}\n required={this.required}\n accept={this.accept}\n onInvalid={this.onInvalid}\n onChange={this.onInputChange}\n />\n </div>,\n this.showInlineError || this.hasHelperSlot ? (\n <div class=\"file-upload__more\" id={moreId}>\n {this.showInlineError ? (\n <div class=\"file-upload__error\">{this.errorMessage}</div>\n ) : (\n ''\n )}\n <div class=\"file-upload__help\">\n <slot name=\"helper\" />\n </div>\n </div>\n ) : (\n ''\n ),\n ];\n };\n\n private button = (): VNode[] => {\n return this.FileUploadInput('btn');\n };\n\n private dropArea = (): VNode[] => {\n const listId = this.fileInputId + '-list';\n return [\n this.FileUploadInput('drop', listId),\n <output class=\"file-upload__list-wrap\" id={listId}>\n {!!this.fileList && this.fileList.length > 0 && (\n <ul class=\"file-upload__list list\">\n {this.fileList.map((file) => {\n return (\n <li\n key={file.file.name}\n class=\"file-upload__list-item file-upload__list-item--active list-item\"\n onAnimationEnd={(_) => this.onFileRemoveAnim()}\n >\n <span class=\"list-title\">{file.file.name}</span>\n {!file.valid && (\n <nano-tooltip\n content={file.validationMessage}\n placement=\"left\"\n >\n <nano-icon-button\n class=\"list-button list-error\"\n iconName=\"light/exclamation-triangle\"\n label=\"File error\"\n />\n </nano-tooltip>\n )}\n {this.canChangeFileList && (\n <nano-icon-button\n class=\"list-button list-button--view\"\n type=\"button\"\n iconName=\"light/eye\"\n label=\"View file\"\n target=\"_blank\"\n href={file.location}\n />\n )}\n {this.canChangeFileList && (\n <nano-icon-button\n onClick={(e) => this.onFileRemoveFileClick(e, file)}\n class=\"list-button list-button--remove\"\n iconName=\"light/times\"\n label=\"Remove file\"\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n </output>,\n ];\n };\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'file-upload': true,\n 'file-upload--dragging': this.isDragging,\n 'file-upload--focus': this.hasFocus,\n 'file-upload--invalid': this._invalid,\n }}\n >\n {this.maxFiles > 1 ? <this.dropArea /> : <this.button />}\n </div>\n </Host>\n );\n }\n}\n"]}