@nanoporetech-digital/components 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/{algoliasearch.umd-dcf18a4a.js → algoliasearch.umd-7ee60729.js} +3 -3
  3. package/dist/cjs/{algoliasearch.umd-dcf18a4a.js.map → algoliasearch.umd-7ee60729.js.map} +1 -1
  4. package/dist/cjs/{component-store-722032a5.js → component-store-19844199.js} +37 -25
  5. package/dist/cjs/component-store-19844199.js.map +1 -0
  6. package/dist/cjs/index-cb62df44.js +5 -0
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/nano-algolia-filter.cjs.entry.js +1 -1
  9. package/dist/cjs/nano-algolia-input.cjs.entry.js +2 -2
  10. package/dist/cjs/nano-algolia.cjs.entry.js +2 -2
  11. package/dist/cjs/nano-checkbox-group.cjs.entry.js +58 -20
  12. package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-checkbox.cjs.entry.js +27 -15
  14. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-components.cjs.js +1 -1
  16. package/dist/cjs/nano-date-input.cjs.entry.js +17 -4
  17. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-dialog.cjs.entry.js +13 -2
  19. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  20. package/dist/cjs/nano-field-validator.cjs.entry.js +529 -0
  21. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -0
  22. package/dist/cjs/nano-file-upload.cjs.entry.js +59 -36
  23. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  24. package/dist/cjs/nano-global-nav.cjs.entry.js +2 -2
  25. package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-input.cjs.entry.js +25 -13
  27. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  28. package/dist/cjs/nano-nav-item_2.cjs.entry.js +40 -15
  29. package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
  30. package/dist/cjs/nano-sticker.cjs.entry.js +2 -2
  31. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  32. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  33. package/dist/collection/collection-manifest.json +2 -1
  34. package/dist/collection/components/accordion/accordion.js +1 -1
  35. package/dist/collection/components/alert/alert.js +1 -1
  36. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  37. package/dist/collection/components/algolia/algolia-input.js +5 -5
  38. package/dist/collection/components/algolia/algolia-results.js +1 -1
  39. package/dist/collection/components/algolia/algolia.js +6 -6
  40. package/dist/collection/components/checkbox/checkbox-group.css +5 -5
  41. package/dist/collection/components/checkbox/checkbox-group.js +119 -25
  42. package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
  43. package/dist/collection/components/checkbox/checkbox.css +1 -1
  44. package/dist/collection/components/checkbox/checkbox.js +83 -22
  45. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  46. package/dist/collection/components/datalist/datalist.js +1 -1
  47. package/dist/collection/components/date-input/date-input.js +44 -12
  48. package/dist/collection/components/date-input/date-input.js.map +1 -1
  49. package/dist/collection/components/date-picker/date-picker.js +5 -5
  50. package/dist/collection/components/details/details.js +1 -1
  51. package/dist/collection/components/dialog/dialog.js +34 -1
  52. package/dist/collection/components/dialog/dialog.js.map +1 -1
  53. package/dist/collection/components/dropdown/dropdown.js +1 -1
  54. package/dist/collection/components/field-validator/field-validator.js +577 -0
  55. package/dist/collection/components/field-validator/field-validator.js.map +1 -0
  56. package/dist/collection/components/file-upload/file-upload.css +17 -5
  57. package/dist/collection/components/file-upload/file-upload.js +111 -44
  58. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  59. package/dist/collection/components/global-nav/global-nav.js +4 -4
  60. package/dist/collection/components/grid/grid-item.js +1 -1
  61. package/dist/collection/components/icon/icon.js +2 -2
  62. package/dist/collection/components/icon/icon.js.map +1 -1
  63. package/dist/collection/components/input/input.css +2 -2
  64. package/dist/collection/components/input/input.js +51 -22
  65. package/dist/collection/components/input/input.js.map +1 -1
  66. package/dist/collection/components/nav-item/nav-item.js +4 -4
  67. package/dist/collection/components/range/range.js +4 -4
  68. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  69. package/dist/collection/components/select/select.css +2 -2
  70. package/dist/collection/components/select/select.js +74 -25
  71. package/dist/collection/components/select/select.js.map +1 -1
  72. package/dist/collection/components/slides/slides.js +7 -7
  73. package/dist/collection/components/{sticky → sticker}/sticker.css +0 -0
  74. package/dist/collection/components/{sticky → sticker}/sticker.js +2 -2
  75. package/dist/collection/components/sticker/sticker.js.map +1 -0
  76. package/dist/collection/components/tabs/tab-group.js +2 -2
  77. package/dist/collection/utils/store/component-store.js +4 -13
  78. package/dist/collection/utils/store/component-store.js.map +1 -1
  79. package/dist/collection/utils/store/get-set.js +15 -1
  80. package/dist/collection/utils/store/get-set.js.map +1 -1
  81. package/dist/components/algoliasearch.umd.js +2 -2
  82. package/dist/components/algoliasearch.umd.js.map +1 -1
  83. package/dist/components/component-store.js +36 -24
  84. package/dist/components/component-store.js.map +1 -1
  85. package/dist/components/icon.js.map +1 -1
  86. package/dist/components/input.js +27 -14
  87. package/dist/components/input.js.map +1 -1
  88. package/dist/components/nano-checkbox-group.js +62 -21
  89. package/dist/components/nano-checkbox-group.js.map +1 -1
  90. package/dist/components/nano-checkbox.js +31 -17
  91. package/dist/components/nano-checkbox.js.map +1 -1
  92. package/dist/components/nano-date-input.js +18 -4
  93. package/dist/components/nano-date-input.js.map +1 -1
  94. package/dist/components/nano-dialog.js +13 -1
  95. package/dist/components/nano-dialog.js.map +1 -1
  96. package/dist/components/nano-field-validator.d.ts +11 -0
  97. package/dist/components/nano-field-validator.js +557 -0
  98. package/dist/components/nano-field-validator.js.map +1 -0
  99. package/dist/components/nano-file-upload.js +62 -37
  100. package/dist/components/nano-file-upload.js.map +1 -1
  101. package/dist/components/select.js +44 -17
  102. package/dist/components/select.js.map +1 -1
  103. package/dist/components/sticker.js +2 -2
  104. package/dist/components/sticker.js.map +1 -1
  105. package/dist/custom-elements/index.d.ts +6 -0
  106. package/dist/custom-elements/index.js +2436 -554
  107. package/dist/custom-elements/index.js.map +1 -1
  108. package/dist/esm/{algolia-data-dd72d1b7.js → algolia-data-80c1169a.js} +2 -2
  109. package/dist/esm/{algolia-data-dd72d1b7.js.map → algolia-data-80c1169a.js.map} +1 -1
  110. package/dist/esm/{algoliasearch.umd-6143495f.js → algoliasearch.umd-86359963.js} +3 -3
  111. package/dist/esm/{algoliasearch.umd-6143495f.js.map → algoliasearch.umd-86359963.js.map} +1 -1
  112. package/dist/esm/{component-store-b6fbfa35.js → component-store-d238fee4.js} +38 -26
  113. package/dist/esm/component-store-d238fee4.js.map +1 -0
  114. package/dist/esm/{form-control-cf23c6a2.js → form-control-ad05507c.js} +2 -2
  115. package/dist/esm/{form-control-cf23c6a2.js.map → form-control-ad05507c.js.map} +1 -1
  116. package/dist/esm/{index-5f8d16e7.js → index-c42becad.js} +7 -2
  117. package/dist/esm/{index-5f8d16e7.js.map → index-c42becad.js.map} +1 -1
  118. package/dist/esm/loader.js +2 -2
  119. package/dist/esm/nano-accordion.entry.js +1 -1
  120. package/dist/esm/nano-alert.entry.js +1 -1
  121. package/dist/esm/nano-algolia-filter.entry.js +3 -3
  122. package/dist/esm/nano-algolia-input.entry.js +4 -4
  123. package/dist/esm/nano-algolia-pagination.entry.js +2 -2
  124. package/dist/esm/nano-algolia-results.entry.js +2 -2
  125. package/dist/esm/nano-algolia.entry.js +4 -4
  126. package/dist/esm/nano-aspect-ratio.entry.js +1 -1
  127. package/dist/esm/nano-checkbox-group.entry.js +59 -21
  128. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  129. package/dist/esm/nano-checkbox.entry.js +28 -16
  130. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  131. package/dist/esm/nano-components.js +2 -2
  132. package/dist/esm/nano-datalist_3.entry.js +1 -1
  133. package/dist/esm/nano-date-input.entry.js +18 -5
  134. package/dist/esm/nano-date-input.entry.js.map +1 -1
  135. package/dist/esm/nano-date-picker.entry.js +1 -1
  136. package/dist/esm/nano-details.entry.js +1 -1
  137. package/dist/esm/nano-dialog.entry.js +14 -3
  138. package/dist/esm/nano-dialog.entry.js.map +1 -1
  139. package/dist/esm/nano-drawer.entry.js +1 -1
  140. package/dist/esm/nano-dropdown.entry.js +1 -1
  141. package/dist/esm/nano-field-validator.entry.js +525 -0
  142. package/dist/esm/nano-field-validator.entry.js.map +1 -0
  143. package/dist/esm/nano-file-upload.entry.js +60 -37
  144. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  145. package/dist/esm/nano-global-nav.entry.js +3 -3
  146. package/dist/esm/nano-global-search-results.entry.js +1 -1
  147. package/dist/esm/nano-grid_3.entry.js +1 -1
  148. package/dist/esm/nano-hero.entry.js +1 -1
  149. package/dist/esm/nano-icon-button.entry.js +1 -1
  150. package/dist/esm/nano-icon.entry.js +1 -1
  151. package/dist/esm/nano-icon.entry.js.map +1 -1
  152. package/dist/esm/nano-input.entry.js +28 -16
  153. package/dist/esm/nano-input.entry.js.map +1 -1
  154. package/dist/esm/nano-menu-drawer.entry.js +1 -1
  155. package/dist/esm/nano-nav-item_2.entry.js +43 -18
  156. package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
  157. package/dist/esm/nano-range.entry.js +1 -1
  158. package/dist/esm/nano-rating.entry.js +1 -1
  159. package/dist/esm/nano-resize-observe_2.entry.js +1 -1
  160. package/dist/esm/nano-slide.entry.js +1 -1
  161. package/dist/esm/nano-slides.entry.js +1 -1
  162. package/dist/esm/nano-spinner.entry.js +1 -1
  163. package/dist/esm/nano-split-pane.entry.js +1 -1
  164. package/dist/esm/nano-sticker.entry.js +3 -3
  165. package/dist/esm/nano-sticker.entry.js.map +1 -1
  166. package/dist/esm/nano-tab-content.entry.js +1 -1
  167. package/dist/esm/nano-tab-group.entry.js +2 -2
  168. package/dist/esm/nano-tab.entry.js +1 -1
  169. package/dist/esm/nano-tooltip.entry.js +1 -1
  170. package/dist/esm-es5/{algolia-data-dd72d1b7.js → algolia-data-80c1169a.js} +2 -2
  171. package/dist/esm-es5/{algolia-data-dd72d1b7.js.map → algolia-data-80c1169a.js.map} +0 -0
  172. package/dist/esm-es5/{algoliasearch.umd-6143495f.js → algoliasearch.umd-86359963.js} +3 -3
  173. package/dist/esm-es5/{algoliasearch.umd-6143495f.js.map → algoliasearch.umd-86359963.js.map} +1 -1
  174. package/dist/esm-es5/component-store-d238fee4.js +5 -0
  175. package/dist/esm-es5/component-store-d238fee4.js.map +1 -0
  176. package/dist/esm-es5/{form-control-cf23c6a2.js → form-control-ad05507c.js} +2 -2
  177. package/dist/esm-es5/{form-control-cf23c6a2.js.map → form-control-ad05507c.js.map} +0 -0
  178. package/dist/esm-es5/{index-5f8d16e7.js → index-c42becad.js} +2 -2
  179. package/dist/esm-es5/{index-5f8d16e7.js.map → index-c42becad.js.map} +0 -0
  180. package/dist/esm-es5/loader.js +1 -1
  181. package/dist/esm-es5/loader.js.map +1 -1
  182. package/dist/esm-es5/nano-accordion.entry.js +1 -1
  183. package/dist/esm-es5/nano-alert.entry.js +1 -1
  184. package/dist/esm-es5/nano-algolia-filter.entry.js +1 -1
  185. package/dist/esm-es5/nano-algolia-input.entry.js +1 -1
  186. package/dist/esm-es5/nano-algolia-pagination.entry.js +1 -1
  187. package/dist/esm-es5/nano-algolia-results.entry.js +1 -1
  188. package/dist/esm-es5/nano-algolia.entry.js +1 -1
  189. package/dist/esm-es5/nano-aspect-ratio.entry.js +1 -1
  190. package/dist/esm-es5/nano-checkbox-group.entry.js +2 -2
  191. package/dist/esm-es5/nano-checkbox-group.entry.js.map +1 -1
  192. package/dist/esm-es5/nano-checkbox.entry.js +1 -1
  193. package/dist/esm-es5/nano-checkbox.entry.js.map +1 -1
  194. package/dist/esm-es5/nano-components.js +1 -1
  195. package/dist/esm-es5/nano-components.js.map +1 -1
  196. package/dist/esm-es5/nano-datalist_3.entry.js +1 -1
  197. package/dist/esm-es5/nano-date-input.entry.js +1 -1
  198. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  199. package/dist/esm-es5/nano-date-picker.entry.js +1 -1
  200. package/dist/esm-es5/nano-details.entry.js +1 -1
  201. package/dist/esm-es5/nano-dialog.entry.js +1 -1
  202. package/dist/esm-es5/nano-dialog.entry.js.map +1 -1
  203. package/dist/esm-es5/nano-drawer.entry.js +1 -1
  204. package/dist/esm-es5/nano-dropdown.entry.js +1 -1
  205. package/dist/esm-es5/nano-field-validator.entry.js +5 -0
  206. package/dist/esm-es5/nano-field-validator.entry.js.map +1 -0
  207. package/dist/esm-es5/nano-file-upload.entry.js +2 -2
  208. package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
  209. package/dist/esm-es5/nano-global-nav.entry.js +1 -1
  210. package/dist/esm-es5/nano-global-search-results.entry.js +1 -1
  211. package/dist/esm-es5/nano-grid_3.entry.js +1 -1
  212. package/dist/esm-es5/nano-hero.entry.js +1 -1
  213. package/dist/esm-es5/nano-icon-button.entry.js +1 -1
  214. package/dist/esm-es5/nano-icon.entry.js +1 -1
  215. package/dist/esm-es5/nano-icon.entry.js.map +1 -1
  216. package/dist/esm-es5/nano-input.entry.js +1 -1
  217. package/dist/esm-es5/nano-input.entry.js.map +1 -1
  218. package/dist/esm-es5/nano-menu-drawer.entry.js +1 -1
  219. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  220. package/dist/esm-es5/nano-nav-item_2.entry.js.map +1 -1
  221. package/dist/esm-es5/nano-range.entry.js +1 -1
  222. package/dist/esm-es5/nano-rating.entry.js +1 -1
  223. package/dist/esm-es5/nano-resize-observe_2.entry.js +1 -1
  224. package/dist/esm-es5/nano-slide.entry.js +1 -1
  225. package/dist/esm-es5/nano-slides.entry.js +1 -1
  226. package/dist/esm-es5/nano-spinner.entry.js +1 -1
  227. package/dist/esm-es5/nano-split-pane.entry.js +1 -1
  228. package/dist/esm-es5/nano-sticker.entry.js +1 -1
  229. package/dist/esm-es5/nano-sticker.entry.js.map +1 -1
  230. package/dist/esm-es5/nano-tab-content.entry.js +1 -1
  231. package/dist/esm-es5/nano-tab-group.entry.js +1 -1
  232. package/dist/esm-es5/nano-tab.entry.js +2 -2
  233. package/dist/esm-es5/nano-tooltip.entry.js +1 -1
  234. package/dist/nano-components/nano-components.css +1 -1
  235. package/dist/nano-components/nano-components.esm.js +1 -1
  236. package/dist/nano-components/nano-components.esm.js.map +1 -1
  237. package/dist/nano-components/nano-components.js +1 -1
  238. package/dist/nano-components/{p-6f94d755.entry.js → p-00eaa36a.entry.js} +2 -2
  239. package/dist/nano-components/{p-6f94d755.entry.js.map → p-00eaa36a.entry.js.map} +0 -0
  240. package/dist/nano-components/{p-4429caac.system.entry.js → p-0c6c2141.system.entry.js} +2 -2
  241. package/dist/nano-components/{p-4429caac.system.entry.js.map → p-0c6c2141.system.entry.js.map} +0 -0
  242. package/dist/nano-components/{p-7232c046.system.entry.js → p-0d0dfc06.system.entry.js} +2 -2
  243. package/dist/nano-components/{p-7232c046.system.entry.js.map → p-0d0dfc06.system.entry.js.map} +0 -0
  244. package/dist/nano-components/{p-e562bffd.entry.js → p-0e2e3f4a.entry.js} +2 -2
  245. package/dist/nano-components/{p-e562bffd.entry.js.map → p-0e2e3f4a.entry.js.map} +0 -0
  246. package/dist/nano-components/{p-56ba0d63.entry.js → p-1030797a.entry.js} +2 -2
  247. package/dist/nano-components/{p-56ba0d63.entry.js.map → p-1030797a.entry.js.map} +0 -0
  248. package/dist/nano-components/p-11451a4b.system.entry.js +5 -0
  249. package/dist/nano-components/p-11451a4b.system.entry.js.map +1 -0
  250. package/dist/nano-components/p-129e2b4b.system.js +5 -0
  251. package/dist/nano-components/p-129e2b4b.system.js.map +1 -0
  252. package/dist/nano-components/{p-c0ddb4c3.entry.js → p-166ade3e.entry.js} +2 -2
  253. package/dist/nano-components/{p-c0ddb4c3.entry.js.map → p-166ade3e.entry.js.map} +0 -0
  254. package/dist/nano-components/{p-5653961d.system.entry.js → p-1a30dfdd.system.entry.js} +2 -2
  255. package/dist/nano-components/p-1a30dfdd.system.entry.js.map +1 -0
  256. package/dist/nano-components/p-1b120f53.entry.js +5 -0
  257. package/dist/nano-components/p-1b120f53.entry.js.map +1 -0
  258. package/dist/nano-components/{p-7d351076.system.entry.js → p-21af2a5e.system.entry.js} +2 -2
  259. package/dist/nano-components/{p-7d351076.system.entry.js.map → p-21af2a5e.system.entry.js.map} +0 -0
  260. package/dist/nano-components/{p-346588cc.entry.js → p-222d8095.entry.js} +2 -2
  261. package/dist/nano-components/{p-346588cc.entry.js.map → p-222d8095.entry.js.map} +0 -0
  262. package/dist/nano-components/{p-933c35a6.system.entry.js → p-241d90eb.system.entry.js} +2 -2
  263. package/dist/nano-components/{p-933c35a6.system.entry.js.map → p-241d90eb.system.entry.js.map} +0 -0
  264. package/dist/nano-components/{p-040b6cda.entry.js → p-2649fc8e.entry.js} +2 -2
  265. package/dist/nano-components/{p-040b6cda.entry.js.map → p-2649fc8e.entry.js.map} +0 -0
  266. package/dist/nano-components/{p-3456db01.entry.js → p-27efac97.entry.js} +2 -2
  267. package/dist/nano-components/{p-3456db01.entry.js.map → p-27efac97.entry.js.map} +0 -0
  268. package/dist/nano-components/{p-462ad4f1.entry.js → p-2c8d7273.entry.js} +2 -2
  269. package/dist/nano-components/{p-462ad4f1.entry.js.map → p-2c8d7273.entry.js.map} +0 -0
  270. package/dist/nano-components/{p-2e6c55e2.entry.js → p-2d53d1a0.entry.js} +2 -2
  271. package/dist/nano-components/{p-2e6c55e2.entry.js.map → p-2d53d1a0.entry.js.map} +0 -0
  272. package/dist/nano-components/{p-1f99d776.entry.js → p-3093915f.entry.js} +2 -2
  273. package/dist/nano-components/{p-1f99d776.entry.js.map → p-3093915f.entry.js.map} +0 -0
  274. package/dist/nano-components/{p-8a8f893b.system.entry.js → p-316f83a9.system.entry.js} +2 -2
  275. package/dist/nano-components/{p-8a8f893b.system.entry.js.map → p-316f83a9.system.entry.js.map} +0 -0
  276. package/dist/nano-components/{p-7246bef5.entry.js → p-325c1cad.entry.js} +2 -2
  277. package/dist/nano-components/{p-7246bef5.entry.js.map → p-325c1cad.entry.js.map} +0 -0
  278. package/dist/nano-components/{p-ec39b143.system.entry.js → p-32f396c0.system.entry.js} +2 -2
  279. package/dist/nano-components/{p-ec39b143.system.entry.js.map → p-32f396c0.system.entry.js.map} +0 -0
  280. package/dist/nano-components/p-32f4516e.js +5 -0
  281. package/dist/nano-components/p-32f4516e.js.map +1 -0
  282. package/dist/nano-components/{p-43543d18.entry.js → p-333237e8.entry.js} +2 -2
  283. package/dist/nano-components/{p-43543d18.entry.js.map → p-333237e8.entry.js.map} +0 -0
  284. package/dist/nano-components/{p-1e8321ea.entry.js → p-35108e08.entry.js} +2 -2
  285. package/dist/nano-components/{p-1e8321ea.entry.js.map → p-35108e08.entry.js.map} +0 -0
  286. package/dist/nano-components/{p-a898bf92.system.entry.js → p-379e21d9.system.entry.js} +2 -2
  287. package/dist/nano-components/{p-a898bf92.system.entry.js.map → p-379e21d9.system.entry.js.map} +0 -0
  288. package/dist/nano-components/{p-3ad1d5aa.system.entry.js → p-39d36fd1.system.entry.js} +2 -2
  289. package/dist/nano-components/{p-3ad1d5aa.system.entry.js.map → p-39d36fd1.system.entry.js.map} +0 -0
  290. package/dist/nano-components/{p-41a2e2e4.system.js → p-3a00de47.system.js} +2 -2
  291. package/dist/nano-components/{p-41a2e2e4.system.js.map → p-3a00de47.system.js.map} +0 -0
  292. package/dist/nano-components/{p-6afdb510.system.entry.js → p-3ccb176c.system.entry.js} +2 -2
  293. package/dist/nano-components/{p-6afdb510.system.entry.js.map → p-3ccb176c.system.entry.js.map} +0 -0
  294. package/dist/nano-components/{p-08b43111.entry.js → p-3e930ac7.entry.js} +2 -2
  295. package/dist/nano-components/{p-08b43111.entry.js.map → p-3e930ac7.entry.js.map} +0 -0
  296. package/dist/nano-components/{p-d8d8bac6.system.entry.js → p-42cebbfe.system.entry.js} +2 -2
  297. package/dist/nano-components/{p-d8d8bac6.system.entry.js.map → p-42cebbfe.system.entry.js.map} +0 -0
  298. package/dist/nano-components/{p-1ca46443.entry.js → p-45070c8f.entry.js} +2 -2
  299. package/dist/nano-components/{p-1ca46443.entry.js.map → p-45070c8f.entry.js.map} +0 -0
  300. package/dist/nano-components/{p-3ef30ded.system.entry.js → p-48874481.system.entry.js} +2 -2
  301. package/dist/nano-components/{p-3ef30ded.system.entry.js.map → p-48874481.system.entry.js.map} +0 -0
  302. package/dist/nano-components/{p-08ffc9a1.entry.js → p-4e2c0abb.entry.js} +2 -2
  303. package/dist/nano-components/{p-08ffc9a1.entry.js.map → p-4e2c0abb.entry.js.map} +0 -0
  304. package/dist/nano-components/{p-090f22a9.system.entry.js → p-5100ae70.system.entry.js} +2 -2
  305. package/dist/nano-components/{p-090f22a9.system.entry.js.map → p-5100ae70.system.entry.js.map} +0 -0
  306. package/dist/nano-components/{p-593de29b.system.entry.js → p-52769304.system.entry.js} +2 -2
  307. package/dist/nano-components/{p-593de29b.system.entry.js.map → p-52769304.system.entry.js.map} +0 -0
  308. package/dist/nano-components/{p-8278c5d2.system.entry.js → p-56f86047.system.entry.js} +2 -2
  309. package/dist/nano-components/{p-8278c5d2.system.entry.js.map → p-56f86047.system.entry.js.map} +0 -0
  310. package/dist/nano-components/{p-2057d480.system.entry.js → p-5b66bb8f.system.entry.js} +2 -2
  311. package/dist/nano-components/{p-2057d480.system.entry.js.map → p-5b66bb8f.system.entry.js.map} +0 -0
  312. package/dist/nano-components/{p-033296c7.system.entry.js → p-5d17cfbb.system.entry.js} +2 -2
  313. package/dist/nano-components/{p-033296c7.system.entry.js.map → p-5d17cfbb.system.entry.js.map} +0 -0
  314. package/dist/nano-components/{p-88f17c86.system.entry.js → p-5d5ea4ab.system.entry.js} +2 -2
  315. package/dist/nano-components/{p-88f17c86.system.entry.js.map → p-5d5ea4ab.system.entry.js.map} +0 -0
  316. package/dist/nano-components/{p-20387cde.system.entry.js → p-6b4dd158.system.entry.js} +2 -2
  317. package/dist/nano-components/{p-20387cde.system.entry.js.map → p-6b4dd158.system.entry.js.map} +0 -0
  318. package/dist/nano-components/{p-d24811c8.system.js → p-6b5760b1.system.js} +3 -3
  319. package/dist/nano-components/{p-d24811c8.system.js.map → p-6b5760b1.system.js.map} +1 -1
  320. package/dist/nano-components/p-6d138abf.entry.js +5 -0
  321. package/dist/nano-components/p-6d138abf.entry.js.map +1 -0
  322. package/dist/nano-components/{p-5066e563.system.entry.js → p-6dad332b.system.entry.js} +2 -2
  323. package/dist/nano-components/{p-5066e563.system.entry.js.map → p-6dad332b.system.entry.js.map} +0 -0
  324. package/dist/nano-components/{p-730f60ea.entry.js → p-6ddb51e4.entry.js} +2 -2
  325. package/dist/nano-components/p-6ddb51e4.entry.js.map +1 -0
  326. package/dist/nano-components/p-71bbb7ba.entry.js +5 -0
  327. package/dist/nano-components/p-71bbb7ba.entry.js.map +1 -0
  328. package/dist/nano-components/{p-a6c84740.js → p-71e9fa33.js} +2 -2
  329. package/dist/nano-components/{p-a6c84740.js.map → p-71e9fa33.js.map} +0 -0
  330. package/dist/nano-components/{p-39a5280e.system.entry.js → p-72ed603c.system.entry.js} +2 -2
  331. package/dist/nano-components/{p-39a5280e.system.entry.js.map → p-72ed603c.system.entry.js.map} +0 -0
  332. package/dist/nano-components/{p-313970ff.entry.js → p-73985eda.entry.js} +2 -2
  333. package/dist/nano-components/{p-313970ff.entry.js.map → p-73985eda.entry.js.map} +0 -0
  334. package/dist/nano-components/{p-58d7f10f.entry.js → p-76c903db.entry.js} +2 -2
  335. package/dist/nano-components/{p-58d7f10f.entry.js.map → p-76c903db.entry.js.map} +0 -0
  336. package/dist/nano-components/{p-3aa1d07d.entry.js → p-76d9d1d4.entry.js} +2 -2
  337. package/dist/nano-components/p-76d9d1d4.entry.js.map +1 -0
  338. package/dist/nano-components/{p-f53989c3.system.entry.js → p-7aa7425d.system.entry.js} +2 -2
  339. package/dist/nano-components/{p-f53989c3.system.entry.js.map → p-7aa7425d.system.entry.js.map} +1 -1
  340. package/dist/nano-components/{p-531d5275.system.entry.js → p-7ad4a27a.system.entry.js} +2 -2
  341. package/dist/nano-components/p-7ad4a27a.system.entry.js.map +1 -0
  342. package/dist/nano-components/{p-2ae4918d.system.entry.js → p-7e55b214.system.entry.js} +2 -2
  343. package/dist/nano-components/{p-2ae4918d.system.entry.js.map → p-7e55b214.system.entry.js.map} +0 -0
  344. package/dist/nano-components/{p-62ecd3a1.system.entry.js → p-7f1374b6.system.entry.js} +2 -2
  345. package/dist/nano-components/{p-62ecd3a1.system.entry.js.map → p-7f1374b6.system.entry.js.map} +0 -0
  346. package/dist/nano-components/{p-1e974cad.entry.js → p-7fe9d769.entry.js} +2 -2
  347. package/dist/nano-components/{p-1e974cad.entry.js.map → p-7fe9d769.entry.js.map} +0 -0
  348. package/dist/nano-components/p-85c8b070.system.entry.js +5 -0
  349. package/dist/nano-components/p-85c8b070.system.entry.js.map +1 -0
  350. package/dist/nano-components/{p-f2e7d2f9.system.entry.js → p-88779174.system.entry.js} +2 -2
  351. package/dist/nano-components/{p-f2e7d2f9.system.entry.js.map → p-88779174.system.entry.js.map} +0 -0
  352. package/dist/nano-components/{p-4535e3bb.entry.js → p-8b6fcd6d.entry.js} +2 -2
  353. package/dist/nano-components/{p-4535e3bb.entry.js.map → p-8b6fcd6d.entry.js.map} +0 -0
  354. package/dist/nano-components/{p-6ade3290.entry.js → p-8eb4f24a.entry.js} +2 -2
  355. package/dist/nano-components/{p-6ade3290.entry.js.map → p-8eb4f24a.entry.js.map} +0 -0
  356. package/dist/nano-components/{p-07bdf44d.entry.js → p-8fe2f846.entry.js} +2 -2
  357. package/dist/nano-components/{p-07bdf44d.entry.js.map → p-8fe2f846.entry.js.map} +0 -0
  358. package/dist/nano-components/p-96150b2c.system.entry.js +5 -0
  359. package/dist/nano-components/p-96150b2c.system.entry.js.map +1 -0
  360. package/dist/nano-components/{p-bcd69559.entry.js → p-97b13ad2.entry.js} +2 -2
  361. package/dist/nano-components/{p-bcd69559.entry.js.map → p-97b13ad2.entry.js.map} +0 -0
  362. package/dist/nano-components/{p-c9c1a345.system.entry.js → p-a02cc654.system.entry.js} +2 -2
  363. package/dist/nano-components/{p-c9c1a345.system.entry.js.map → p-a02cc654.system.entry.js.map} +0 -0
  364. package/dist/nano-components/{p-a77e3fbb.js → p-a0b93616.js} +3 -3
  365. package/dist/nano-components/{p-a77e3fbb.js.map → p-a0b93616.js.map} +1 -1
  366. package/dist/nano-components/p-a4969844.entry.js +5 -0
  367. package/dist/nano-components/p-a4969844.entry.js.map +1 -0
  368. package/dist/nano-components/{p-70dec19f.entry.js → p-a6327a9a.entry.js} +2 -2
  369. package/dist/nano-components/{p-70dec19f.entry.js.map → p-a6327a9a.entry.js.map} +0 -0
  370. package/dist/nano-components/p-a81db037.entry.js +5 -0
  371. package/dist/nano-components/p-a81db037.entry.js.map +1 -0
  372. package/dist/nano-components/{p-a315ed2c.entry.js → p-a9a4fc3e.entry.js} +2 -2
  373. package/dist/nano-components/{p-a315ed2c.entry.js.map → p-a9a4fc3e.entry.js.map} +1 -1
  374. package/dist/nano-components/{p-98222c39.system.entry.js → p-ab07c1fa.system.entry.js} +2 -2
  375. package/dist/nano-components/{p-98222c39.system.entry.js.map → p-ab07c1fa.system.entry.js.map} +0 -0
  376. package/dist/nano-components/{p-ab5813a7.js → p-b5c33aff.js} +2 -2
  377. package/dist/nano-components/{p-ab5813a7.js.map → p-b5c33aff.js.map} +0 -0
  378. package/dist/nano-components/p-bc394857.system.entry.js +5 -0
  379. package/dist/nano-components/p-bc394857.system.entry.js.map +1 -0
  380. package/dist/nano-components/{p-b4f8e541.entry.js → p-bce998f2.entry.js} +2 -2
  381. package/dist/nano-components/{p-b4f8e541.entry.js.map → p-bce998f2.entry.js.map} +0 -0
  382. package/dist/nano-components/{p-92f85aaf.system.entry.js → p-bf9aa89d.system.entry.js} +2 -2
  383. package/dist/nano-components/{p-92f85aaf.system.entry.js.map → p-bf9aa89d.system.entry.js.map} +0 -0
  384. package/dist/nano-components/p-c070ffd3.system.entry.js +5 -0
  385. package/dist/nano-components/p-c070ffd3.system.entry.js.map +1 -0
  386. package/dist/nano-components/{p-50514e5e.entry.js → p-c4156fea.entry.js} +2 -2
  387. package/dist/nano-components/{p-50514e5e.entry.js.map → p-c4156fea.entry.js.map} +0 -0
  388. package/dist/nano-components/p-c9a2d24c.entry.js +5 -0
  389. package/dist/nano-components/p-c9a2d24c.entry.js.map +1 -0
  390. package/dist/nano-components/{p-6eb25600.system.js → p-d01bd3c3.system.js} +2 -2
  391. package/dist/nano-components/{p-6eb25600.system.js.map → p-d01bd3c3.system.js.map} +0 -0
  392. package/dist/nano-components/{p-1238f0fc.system.entry.js → p-d0385948.system.entry.js} +2 -2
  393. package/dist/nano-components/{p-1238f0fc.system.entry.js.map → p-d0385948.system.entry.js.map} +0 -0
  394. package/dist/nano-components/{p-b59d2bd5.entry.js → p-d122b1ff.entry.js} +2 -2
  395. package/dist/nano-components/{p-b59d2bd5.entry.js.map → p-d122b1ff.entry.js.map} +0 -0
  396. package/dist/nano-components/{p-394c3c19.entry.js → p-defd4552.entry.js} +2 -2
  397. package/dist/nano-components/{p-394c3c19.entry.js.map → p-defd4552.entry.js.map} +0 -0
  398. package/dist/nano-components/p-e7140887.system.js +5 -0
  399. package/dist/nano-components/p-e7140887.system.js.map +1 -0
  400. package/dist/nano-components/{p-69439aa1.system.entry.js → p-e817ab4a.system.entry.js} +2 -2
  401. package/dist/nano-components/{p-69439aa1.system.entry.js.map → p-e817ab4a.system.entry.js.map} +0 -0
  402. package/dist/nano-components/{p-22884654.system.entry.js → p-eacf5b5b.system.entry.js} +2 -2
  403. package/dist/nano-components/{p-22884654.system.entry.js.map → p-eacf5b5b.system.entry.js.map} +0 -0
  404. package/dist/nano-components/p-ed336501.entry.js +5 -0
  405. package/dist/nano-components/p-ed336501.entry.js.map +1 -0
  406. package/dist/nano-components/{p-5ae80fd7.js → p-ef7f1e9c.js} +2 -2
  407. package/dist/nano-components/{p-5ae80fd7.js.map → p-ef7f1e9c.js.map} +0 -0
  408. package/dist/nano-components/{p-59b3d24b.system.js → p-f48be9f5.system.js} +2 -2
  409. package/dist/nano-components/{p-59b3d24b.system.js.map → p-f48be9f5.system.js.map} +0 -0
  410. package/dist/nano-components/p-f710c763.system.entry.js +5 -0
  411. package/dist/nano-components/p-f710c763.system.entry.js.map +1 -0
  412. package/dist/nano-components/{p-65c10b3f.entry.js → p-fbe3c89e.entry.js} +2 -2
  413. package/dist/nano-components/{p-65c10b3f.entry.js.map → p-fbe3c89e.entry.js.map} +0 -0
  414. package/dist/nano-components/p-fc3702a0.system.entry.js +5 -0
  415. package/dist/nano-components/p-fc3702a0.system.entry.js.map +1 -0
  416. package/dist/nano-components/{p-ba13bb56.entry.js → p-ffc2063a.entry.js} +2 -2
  417. package/dist/nano-components/{p-ba13bb56.entry.js.map → p-ffc2063a.entry.js.map} +0 -0
  418. package/dist/nano-components/{p-4870e76d.system.entry.js → p-fff27907.system.entry.js} +2 -2
  419. package/dist/nano-components/{p-4870e76d.system.entry.js.map → p-fff27907.system.entry.js.map} +0 -0
  420. package/dist/types/components/checkbox/checkbox-group.d.ts +12 -1
  421. package/dist/types/components/checkbox/checkbox.d.ts +11 -3
  422. package/dist/types/components/date-input/date-input.d.ts +4 -0
  423. package/dist/types/components/dialog/dialog.d.ts +4 -1
  424. package/dist/types/components/field-validator/field-validator.d.ts +125 -0
  425. package/dist/types/components/file-upload/file-upload.d.ts +8 -0
  426. package/dist/types/components/icon/icon.d.ts +1 -1
  427. package/dist/types/components/input/input.d.ts +6 -1
  428. package/dist/types/components/select/select.d.ts +7 -1
  429. package/dist/types/components/{sticky → sticker}/sticker.d.ts +0 -0
  430. package/dist/types/components.d.ts +187 -4
  431. package/dist/types/utils/store/get-set.d.ts +1 -1
  432. package/docs-json.json +436 -14
  433. package/docs-vscode.json +77 -1
  434. package/package.json +3 -2
  435. package/dist/cjs/component-store-722032a5.js.map +0 -1
  436. package/dist/collection/components/sticky/sticker.js.map +0 -1
  437. package/dist/esm/component-store-b6fbfa35.js.map +0 -1
  438. package/dist/esm-es5/component-store-b6fbfa35.js +0 -5
  439. package/dist/esm-es5/component-store-b6fbfa35.js.map +0 -1
  440. package/dist/nano-components/p-096682d9.system.js +0 -5
  441. package/dist/nano-components/p-096682d9.system.js.map +0 -1
  442. package/dist/nano-components/p-09e38c5f.system.entry.js +0 -5
  443. package/dist/nano-components/p-09e38c5f.system.entry.js.map +0 -1
  444. package/dist/nano-components/p-10a6216d.system.entry.js +0 -5
  445. package/dist/nano-components/p-10a6216d.system.entry.js.map +0 -1
  446. package/dist/nano-components/p-3aa1d07d.entry.js.map +0 -1
  447. package/dist/nano-components/p-4265cf95.system.entry.js +0 -5
  448. package/dist/nano-components/p-4265cf95.system.entry.js.map +0 -1
  449. package/dist/nano-components/p-44c08842.system.entry.js +0 -5
  450. package/dist/nano-components/p-44c08842.system.entry.js.map +0 -1
  451. package/dist/nano-components/p-457d4893.entry.js +0 -5
  452. package/dist/nano-components/p-457d4893.entry.js.map +0 -1
  453. package/dist/nano-components/p-531d5275.system.entry.js.map +0 -1
  454. package/dist/nano-components/p-5653961d.system.entry.js.map +0 -1
  455. package/dist/nano-components/p-5a0095f9.js +0 -5
  456. package/dist/nano-components/p-5a0095f9.js.map +0 -1
  457. package/dist/nano-components/p-5a315696.entry.js +0 -5
  458. package/dist/nano-components/p-5a315696.entry.js.map +0 -1
  459. package/dist/nano-components/p-730f60ea.entry.js.map +0 -1
  460. package/dist/nano-components/p-802e1416.system.entry.js +0 -5
  461. package/dist/nano-components/p-802e1416.system.entry.js.map +0 -1
  462. package/dist/nano-components/p-84767e87.entry.js +0 -5
  463. package/dist/nano-components/p-84767e87.entry.js.map +0 -1
  464. package/dist/nano-components/p-971b40a4.system.entry.js +0 -5
  465. package/dist/nano-components/p-971b40a4.system.entry.js.map +0 -1
  466. package/dist/nano-components/p-9d35768b.entry.js +0 -5
  467. package/dist/nano-components/p-9d35768b.entry.js.map +0 -1
  468. package/dist/nano-components/p-9ea13fbe.entry.js +0 -5
  469. package/dist/nano-components/p-9ea13fbe.entry.js.map +0 -1
  470. package/dist/nano-components/p-e1f46998.system.js +0 -5
  471. package/dist/nano-components/p-e1f46998.system.js.map +0 -1
  472. package/dist/nano-components/p-e7c69d4f.entry.js +0 -5
  473. package/dist/nano-components/p-e7c69d4f.entry.js.map +0 -1
@@ -0,0 +1,525 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ import { k as getRenderingRef, j as forceUpdate, r as registerInstance, c as createEvent, h, e as Host, g as getElement } from './index-c42becad.js';
5
+
6
+ const appendToMap = (map, propName, value) => {
7
+ const items = map.get(propName);
8
+ if (!items) {
9
+ map.set(propName, [value]);
10
+ }
11
+ else if (!items.includes(value)) {
12
+ items.push(value);
13
+ }
14
+ };
15
+ const debounce = (fn, ms) => {
16
+ let timeoutId;
17
+ return (...args) => {
18
+ if (timeoutId) {
19
+ clearTimeout(timeoutId);
20
+ }
21
+ timeoutId = setTimeout(() => {
22
+ timeoutId = 0;
23
+ fn(...args);
24
+ }, ms);
25
+ };
26
+ };
27
+
28
+ /**
29
+ * Check if a possible element isConnected.
30
+ * The property might not be there, so we check for it.
31
+ *
32
+ * We want it to return true if isConnected is not a property,
33
+ * otherwise we would remove these elements and would not update.
34
+ *
35
+ * Better leak in Edge than to be useless.
36
+ */
37
+ const isConnected = (maybeElement) => !('isConnected' in maybeElement) || maybeElement.isConnected;
38
+ const cleanupElements = debounce((map) => {
39
+ for (let key of map.keys()) {
40
+ map.set(key, map.get(key).filter(isConnected));
41
+ }
42
+ }, 2000);
43
+ const stencilSubscription = () => {
44
+ if (typeof getRenderingRef !== 'function') {
45
+ // If we are not in a stencil project, we do nothing.
46
+ // This function is not really exported by @stencil/core.
47
+ return {};
48
+ }
49
+ const elmsToUpdate = new Map();
50
+ return {
51
+ dispose: () => elmsToUpdate.clear(),
52
+ get: (propName) => {
53
+ const elm = getRenderingRef();
54
+ if (elm) {
55
+ appendToMap(elmsToUpdate, propName, elm);
56
+ }
57
+ },
58
+ set: (propName) => {
59
+ const elements = elmsToUpdate.get(propName);
60
+ if (elements) {
61
+ elmsToUpdate.set(propName, elements.filter(forceUpdate));
62
+ }
63
+ cleanupElements(elmsToUpdate);
64
+ },
65
+ reset: () => {
66
+ elmsToUpdate.forEach((elms) => elms.forEach(forceUpdate));
67
+ cleanupElements(elmsToUpdate);
68
+ },
69
+ };
70
+ };
71
+
72
+ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) => {
73
+ let states = new Map(Object.entries(defaultState !== null && defaultState !== void 0 ? defaultState : {}));
74
+ const handlers = {
75
+ dispose: [],
76
+ get: [],
77
+ set: [],
78
+ reset: [],
79
+ };
80
+ const reset = () => {
81
+ states = new Map(Object.entries(defaultState !== null && defaultState !== void 0 ? defaultState : {}));
82
+ handlers.reset.forEach((cb) => cb());
83
+ };
84
+ const dispose = () => {
85
+ // Call first dispose as resetting the state would
86
+ // cause less updates ;)
87
+ handlers.dispose.forEach((cb) => cb());
88
+ reset();
89
+ };
90
+ const get = (propName) => {
91
+ handlers.get.forEach((cb) => cb(propName));
92
+ return states.get(propName);
93
+ };
94
+ const set = (propName, value) => {
95
+ const oldValue = states.get(propName);
96
+ if (shouldUpdate(value, oldValue, propName)) {
97
+ states.set(propName, value);
98
+ handlers.set.forEach((cb) => cb(propName, value, oldValue));
99
+ }
100
+ };
101
+ const state = (typeof Proxy === 'undefined'
102
+ ? {}
103
+ : new Proxy(defaultState, {
104
+ get(_, propName) {
105
+ return get(propName);
106
+ },
107
+ ownKeys(_) {
108
+ return Array.from(states.keys());
109
+ },
110
+ getOwnPropertyDescriptor() {
111
+ return {
112
+ enumerable: true,
113
+ configurable: true,
114
+ };
115
+ },
116
+ has(_, propName) {
117
+ return states.has(propName);
118
+ },
119
+ set(_, propName, value) {
120
+ set(propName, value);
121
+ return true;
122
+ },
123
+ }));
124
+ const on = (eventName, callback) => {
125
+ handlers[eventName].push(callback);
126
+ return () => {
127
+ removeFromArray(handlers[eventName], callback);
128
+ };
129
+ };
130
+ const onChange = (propName, cb) => {
131
+ const unSet = on('set', (key, newValue) => {
132
+ if (key === propName) {
133
+ cb(newValue);
134
+ }
135
+ });
136
+ const unReset = on('reset', () => cb(defaultState[propName]));
137
+ return () => {
138
+ unSet();
139
+ unReset();
140
+ };
141
+ };
142
+ const use = (...subscriptions) => {
143
+ const unsubs = subscriptions.reduce((unsubs, subscription) => {
144
+ if (subscription.set) {
145
+ unsubs.push(on('set', subscription.set));
146
+ }
147
+ if (subscription.get) {
148
+ unsubs.push(on('get', subscription.get));
149
+ }
150
+ if (subscription.reset) {
151
+ unsubs.push(on('reset', subscription.reset));
152
+ }
153
+ if (subscription.dispose) {
154
+ unsubs.push(on('dispose', subscription.dispose));
155
+ }
156
+ return unsubs;
157
+ }, []);
158
+ return () => unsubs.forEach((unsub) => unsub());
159
+ };
160
+ const forceUpdate = (key) => {
161
+ const oldValue = states.get(key);
162
+ handlers.set.forEach((cb) => cb(key, oldValue, oldValue));
163
+ };
164
+ return {
165
+ state,
166
+ get,
167
+ set,
168
+ on,
169
+ onChange,
170
+ use,
171
+ dispose,
172
+ reset,
173
+ forceUpdate,
174
+ };
175
+ };
176
+ const removeFromArray = (array, item) => {
177
+ const index = array.indexOf(item);
178
+ if (index >= 0) {
179
+ array[index] = array[array.length - 1];
180
+ array.length--;
181
+ }
182
+ };
183
+
184
+ const createStore = (defaultState, shouldUpdate) => {
185
+ const map = createObservableMap(defaultState, shouldUpdate);
186
+ map.use(stencilSubscription());
187
+ return map;
188
+ };
189
+
190
+ let FieldValidator = class {
191
+ constructor(hostRef) {
192
+ registerInstance(this, hostRef);
193
+ this.nanoPayloadChange = createEvent(this, "nanoPayloadChange", 7);
194
+ this.nanoSubmit = createEvent(this, "nanoSubmit", 7);
195
+ this.nanoInvalid = createEvent(this, "nanoInvalid", 7);
196
+ this.submitted = false;
197
+ this.fields = [];
198
+ // annoyingly, whenever we attempt to checkValidty it fires `invalid` events.
199
+ // this is used to prevent infinite loops / multiple calls
200
+ this.internalValidate = false;
201
+ // Public API
202
+ /** When should the fields perform validation. Will override / sync all nested `nano-...` controls */
203
+ this.validateOn = 'submitThenDirty';
204
+ /** Tries to scroll to the first invalid field on submit */
205
+ this.scrollToInvalid = true;
206
+ this._dirty = false;
207
+ // Event handlers
208
+ /** Fired whenever store values change and potentially checks validity */
209
+ this.handleStoreChange = async (_key, _newVal) => {
210
+ if (this.validateOn === 'dirty' && this.dirty) {
211
+ this.internalValidate = true;
212
+ await this.validateAllFields();
213
+ this._valid = this.activeForm.checkValidity();
214
+ this.internalValidate = false;
215
+ }
216
+ this.nanoPayloadChange.emit(this.store.state);
217
+ };
218
+ /** Handles field value changes and passes to store */
219
+ this.handleFieldChange = (ev) => {
220
+ this._dirty = true;
221
+ this.setFieldValue([ev.target]);
222
+ };
223
+ /** Handles default field validation events */
224
+ this.handleFormInvalid = async (ev) => {
225
+ ev.preventDefault();
226
+ this._valid = false;
227
+ if (this.internalValidate)
228
+ return;
229
+ if (this.validateOn === 'submitThenDirty')
230
+ this.validateOn = 'dirty';
231
+ this.submitted = true;
232
+ await this.validateAllFields();
233
+ // kinda insane...but if we're only validating on submit, then if the form is currently
234
+ // in an invalid state, when submitting, it will fire an invalid event and not
235
+ // submit the form. So let's test to make sure it is really invalid, and submit if not
236
+ if (this.validateOn === 'submit') {
237
+ this.internalValidate = true;
238
+ this._valid = this.activeForm.checkValidity();
239
+ this.internalValidate = false;
240
+ if (this._valid) {
241
+ this.submitForm();
242
+ return;
243
+ }
244
+ }
245
+ this.scrollToFirstInvalid();
246
+ this.nanoInvalid.emit();
247
+ };
248
+ /** stops default form submission, checks if valid, then submits manually */
249
+ this.handleSubmit = async (e) => {
250
+ e.preventDefault();
251
+ if (this.validateOn === 'submitThenDirty')
252
+ this.validateOn = 'dirty';
253
+ this.submitted = true;
254
+ await this.validateAllFields();
255
+ this.internalValidate = true;
256
+ this._valid = this.activeForm.checkValidity();
257
+ this.internalValidate = false;
258
+ if (!this._valid) {
259
+ this.scrollToFirstInvalid();
260
+ return;
261
+ }
262
+ this.submitForm();
263
+ };
264
+ }
265
+ userFormChange() {
266
+ if (!!this.userForm)
267
+ this.activeForm = this.userForm;
268
+ }
269
+ get activeForm() {
270
+ return this._activeForm;
271
+ }
272
+ set activeForm(form) {
273
+ if (this._activeForm)
274
+ this._activeForm.removeEventListener('invalid', this.handleFormInvalid, true);
275
+ if (form)
276
+ form.addEventListener('invalid', this.handleFormInvalid, true);
277
+ this._activeForm = form;
278
+ }
279
+ /** Sync up validateOn with all fields */
280
+ validateOnChange() {
281
+ this.fields.forEach((field) => {
282
+ if (field.tagName === 'NANO-CHECKBOX') {
283
+ const cbg = field.closest('nano-checkbox-group');
284
+ if (cbg)
285
+ cbg.validateOn = this.validateOn;
286
+ }
287
+ else {
288
+ field.validateOn =
289
+ this.validateOn;
290
+ }
291
+ });
292
+ }
293
+ /** Returns true if any nested fields have been changed @readonly */
294
+ get dirty() {
295
+ return this._dirty;
296
+ }
297
+ /** Returns true if all the nested fields are currently valid @readonly */
298
+ get valid() {
299
+ return this._valid;
300
+ }
301
+ /** The current form payload as a reactive store. @readonly */
302
+ get payload() {
303
+ return this.store.state;
304
+ }
305
+ /** Returns true if validation errors will be displayed to the user */
306
+ get showValidation() {
307
+ return (this.validateOn === 'dirty' && this.dirty) || this.submitted;
308
+ }
309
+ /** Get the current validation state of all form fields. @readonly
310
+ * ```
311
+ {
312
+ fields: NanoFormEles[];
313
+ valid: boolean;
314
+ validityMessage: string;
315
+ dirty: boolean;
316
+ name: string | number;
317
+ value: any;
318
+ }[]
319
+ ```
320
+ */
321
+ get validationState() {
322
+ const validationState = [];
323
+ this.fields.forEach(async (field) => {
324
+ const found = validationState.find((v) => v.name === field.name);
325
+ if (found) {
326
+ found.validityMessage = field.validityMessage.length
327
+ ? field.validityMessage
328
+ : found.validityMessage;
329
+ if (!found.fields.find((f) => f === field))
330
+ found.fields.push(field);
331
+ if (found.valid && field.invalid)
332
+ found.valid = false;
333
+ return;
334
+ }
335
+ validationState.push({
336
+ fields: [field],
337
+ name: field.name,
338
+ valid: !field.invalid,
339
+ value: this.store.state[field.name],
340
+ dirty: false,
341
+ validityMessage: field.validityMessage,
342
+ });
343
+ });
344
+ return validationState;
345
+ }
346
+ // private methods
347
+ attachSlotObserver() {
348
+ if (!!this.mo)
349
+ return;
350
+ const mo = (this.mo = new MutationObserver((_entries) => {
351
+ const form = this.host.querySelector('form');
352
+ if (form !== this.activeForm)
353
+ this.activeForm = form;
354
+ this.setupFields();
355
+ }));
356
+ mo.observe(this.host, {
357
+ childList: true,
358
+ attributes: true,
359
+ attributeFilter: ['name'],
360
+ subtree: true,
361
+ });
362
+ }
363
+ /** Checks for new `nano-...` fields and adds them to our watch array and value store */
364
+ setupFields() {
365
+ let fields = Array.from(this.host.querySelectorAll(`
366
+ nano-input,
367
+ nano-select,
368
+ nano-file-upload,
369
+ nano-date-input,
370
+ nano-checkbox
371
+ `));
372
+ fields = fields.filter((f) => !!f.name && !!f.name.length);
373
+ // do we have any currently un-watched fields?
374
+ if (!fields.filter((f) => !this.fields.includes(f)).length)
375
+ return;
376
+ // setup the initial store state / refresh on new fields
377
+ this.fields = fields;
378
+ this.validateOnChange();
379
+ this.setFieldValue(this.fields);
380
+ this.nanoPayloadChange.emit(this.store.state);
381
+ }
382
+ /** Loops through all `nano-...` fields and extracts their values into our store */
383
+ setFieldValue(fields) {
384
+ fields.forEach((field) => {
385
+ const fieldName = field.name;
386
+ if (!fieldName.length)
387
+ return;
388
+ switch (field.tagName) {
389
+ case 'NANO-CHECKBOX':
390
+ let cb = field;
391
+ if (cb.type === 'radio' ||
392
+ cb.type === 'segment' ||
393
+ cb.type === 'segment-pill') {
394
+ if (cb.checked)
395
+ this.store.state[fieldName] = cb.value;
396
+ else if (!cb.checked && cb.value === this.store.state[fieldName])
397
+ this.store.state[fieldName] = '';
398
+ }
399
+ else if (this.fields.filter((f) => f.name === fieldName && f.tagName === 'NANO-CHECKBOX').length > 1) {
400
+ const currentArr = Array.isArray(this.store.state[fieldName])
401
+ ? this.store.state[fieldName]
402
+ : [];
403
+ if (cb.checked) {
404
+ if (!this.store.state[fieldName].includes(cb.value)) {
405
+ this.store.state[fieldName] = [...currentArr, cb.value];
406
+ }
407
+ }
408
+ else {
409
+ this.store.state[fieldName] = currentArr.filter((v) => v !== cb.value);
410
+ }
411
+ }
412
+ else
413
+ this.store.state[fieldName] = cb.value;
414
+ break;
415
+ case 'NANO-FILE-UPLOAD':
416
+ this.store.state[fieldName] = field.files;
417
+ break;
418
+ default:
419
+ this.store.state[fieldName] = field.value;
420
+ break;
421
+ }
422
+ });
423
+ }
424
+ /** Checks for user defined validations */
425
+ async validate(key, newVal) {
426
+ if (!this.validation)
427
+ return;
428
+ const res = this.validation(key, newVal, this.store.state);
429
+ // no nothing - return
430
+ if (!res)
431
+ return;
432
+ // stencil public methods are async
433
+ // so we must to coerce our validation
434
+ // collection loop into a promise
435
+ await Promise.all(Object.entries(res).map(async ([key, o]) => {
436
+ // switch on/off validation messages
437
+ const field = this.fields.find((f) => f.name === key);
438
+ let validityTarget = field;
439
+ if (field.tagName === 'NANO-CHECKBOX') {
440
+ const cbg = field.closest('nano-checkbox-group');
441
+ validityTarget = cbg || field;
442
+ }
443
+ // status is now valid - clear the error
444
+ if (validityTarget.validityMessage === o.msg && o.valid)
445
+ await this.setFieldError(validityTarget, '');
446
+ // status is invalid. Set the error
447
+ else if (!o.valid) {
448
+ await this.setFieldError(validityTarget, o.msg);
449
+ }
450
+ }));
451
+ }
452
+ /**
453
+ * Utility to smooth out setting error messages
454
+ * (it's a different method on `nano-checkbox` 'cos they don't show errors themselves)
455
+ * @param field
456
+ * @param msg
457
+ */
458
+ async setFieldError(field, msg) {
459
+ if (field['showError'])
460
+ await field.showError(msg);
461
+ else
462
+ await field.setError(msg);
463
+ }
464
+ /** Loops through all store entries and checks field validity */
465
+ async validateAllFields() {
466
+ // This forces our loop to `await` and finish sequentially ... silly async stencil methods
467
+ await Object.entries(this.store.state).reduce(async (memo, [key, value]) => {
468
+ await memo;
469
+ await this.validate(key, value);
470
+ }, undefined);
471
+ }
472
+ scrollToFirstInvalid() {
473
+ if (!this.scrollToInvalid)
474
+ return;
475
+ setTimeout(() => {
476
+ const invalidField = this.validationState.find((f) => !f.valid);
477
+ if (!invalidField)
478
+ return;
479
+ invalidField.fields[0].scrollIntoView({
480
+ behavior: 'smooth',
481
+ block: 'nearest',
482
+ });
483
+ }, 200);
484
+ }
485
+ submitForm() {
486
+ const nanoSubmit = this.nanoSubmit.emit();
487
+ if (nanoSubmit.defaultPrevented)
488
+ return;
489
+ this.activeForm.submit();
490
+ }
491
+ connectedCallback() {
492
+ this.userForm = this.host.querySelector('form');
493
+ }
494
+ componentDidLoad() {
495
+ requestAnimationFrame(() => {
496
+ this.store = createStore({});
497
+ this.setupFields();
498
+ this.attachSlotObserver();
499
+ this.store.on('set', (key, value) => this.handleStoreChange(key, value));
500
+ this.host.addEventListener('nanoChange', this.handleFieldChange);
501
+ this.host.addEventListener('submit', this.handleSubmit);
502
+ });
503
+ }
504
+ disconnectedCallback() {
505
+ if (this.mo)
506
+ this.mo.disconnect();
507
+ this.store.dispose();
508
+ this.host.removeEventListener('nanoChange', this.handleFieldChange);
509
+ this.host.removeEventListener('submit', this.handleSubmit);
510
+ if (this.activeForm)
511
+ this.activeForm.removeEventListener('invalid', this.handleFormInvalid, true);
512
+ }
513
+ render() {
514
+ return (h(Host, null, this.userForm && h("slot", null), !this.userForm && (h("form", { ref: (f) => (this.activeForm = f) }, h("slot", null)))));
515
+ }
516
+ get host() { return getElement(this); }
517
+ static get watchers() { return {
518
+ "userForm": ["userFormChange"],
519
+ "validateOn": ["validateOnChange"]
520
+ }; }
521
+ };
522
+
523
+ export { FieldValidator as nano_field_validator };
524
+
525
+ //# sourceMappingURL=nano-field-validator.entry.js.map
@@ -0,0 +1 @@
1
+ {"file":"nano-field-validator.entry.js","mappings":"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","names":[],"sources":["./node_modules/@stencil/store/dist/index.mjs","./src/components/field-validator/field-validator.tsx"],"sourcesContent":["import { getRenderingRef, forceUpdate } from '@stencil/core';\n\nconst appendToMap = (map, propName, value) => {\n const items = map.get(propName);\n if (!items) {\n map.set(propName, [value]);\n }\n else if (!items.includes(value)) {\n items.push(value);\n }\n};\nconst debounce = (fn, ms) => {\n let timeoutId;\n return (...args) => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = 0;\n fn(...args);\n }, ms);\n };\n};\n\n/**\n * Check if a possible element isConnected.\n * The property might not be there, so we check for it.\n *\n * We want it to return true if isConnected is not a property,\n * otherwise we would remove these elements and would not update.\n *\n * Better leak in Edge than to be useless.\n */\nconst isConnected = (maybeElement) => !('isConnected' in maybeElement) || maybeElement.isConnected;\nconst cleanupElements = debounce((map) => {\n for (let key of map.keys()) {\n map.set(key, map.get(key).filter(isConnected));\n }\n}, 2000);\nconst stencilSubscription = () => {\n if (typeof getRenderingRef !== 'function') {\n // If we are not in a stencil project, we do nothing.\n // This function is not really exported by @stencil/core.\n return {};\n }\n const elmsToUpdate = new Map();\n return {\n dispose: () => elmsToUpdate.clear(),\n get: (propName) => {\n const elm = getRenderingRef();\n if (elm) {\n appendToMap(elmsToUpdate, propName, elm);\n }\n },\n set: (propName) => {\n const elements = elmsToUpdate.get(propName);\n if (elements) {\n elmsToUpdate.set(propName, elements.filter(forceUpdate));\n }\n cleanupElements(elmsToUpdate);\n },\n reset: () => {\n elmsToUpdate.forEach((elms) => elms.forEach(forceUpdate));\n cleanupElements(elmsToUpdate);\n },\n };\n};\n\nconst createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) => {\n let states = new Map(Object.entries(defaultState !== null && defaultState !== void 0 ? defaultState : {}));\n const handlers = {\n dispose: [],\n get: [],\n set: [],\n reset: [],\n };\n const reset = () => {\n states = new Map(Object.entries(defaultState !== null && defaultState !== void 0 ? defaultState : {}));\n handlers.reset.forEach((cb) => cb());\n };\n const dispose = () => {\n // Call first dispose as resetting the state would\n // cause less updates ;)\n handlers.dispose.forEach((cb) => cb());\n reset();\n };\n const get = (propName) => {\n handlers.get.forEach((cb) => cb(propName));\n return states.get(propName);\n };\n const set = (propName, value) => {\n const oldValue = states.get(propName);\n if (shouldUpdate(value, oldValue, propName)) {\n states.set(propName, value);\n handlers.set.forEach((cb) => cb(propName, value, oldValue));\n }\n };\n const state = (typeof Proxy === 'undefined'\n ? {}\n : new Proxy(defaultState, {\n get(_, propName) {\n return get(propName);\n },\n ownKeys(_) {\n return Array.from(states.keys());\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n has(_, propName) {\n return states.has(propName);\n },\n set(_, propName, value) {\n set(propName, value);\n return true;\n },\n }));\n const on = (eventName, callback) => {\n handlers[eventName].push(callback);\n return () => {\n removeFromArray(handlers[eventName], callback);\n };\n };\n const onChange = (propName, cb) => {\n const unSet = on('set', (key, newValue) => {\n if (key === propName) {\n cb(newValue);\n }\n });\n const unReset = on('reset', () => cb(defaultState[propName]));\n return () => {\n unSet();\n unReset();\n };\n };\n const use = (...subscriptions) => {\n const unsubs = subscriptions.reduce((unsubs, subscription) => {\n if (subscription.set) {\n unsubs.push(on('set', subscription.set));\n }\n if (subscription.get) {\n unsubs.push(on('get', subscription.get));\n }\n if (subscription.reset) {\n unsubs.push(on('reset', subscription.reset));\n }\n if (subscription.dispose) {\n unsubs.push(on('dispose', subscription.dispose));\n }\n return unsubs;\n }, []);\n return () => unsubs.forEach((unsub) => unsub());\n };\n const forceUpdate = (key) => {\n const oldValue = states.get(key);\n handlers.set.forEach((cb) => cb(key, oldValue, oldValue));\n };\n return {\n state,\n get,\n set,\n on,\n onChange,\n use,\n dispose,\n reset,\n forceUpdate,\n };\n};\nconst removeFromArray = (array, item) => {\n const index = array.indexOf(item);\n if (index >= 0) {\n array[index] = array[array.length - 1];\n array.length--;\n }\n};\n\nconst createStore = (defaultState, shouldUpdate) => {\n const map = createObservableMap(defaultState, shouldUpdate);\n map.use(stencilSubscription());\n return map;\n};\n\nexport { createObservableMap, createStore };\n","import {\n Component,\n Prop,\n h,\n Host,\n Element,\n ComponentInterface,\n State,\n Watch,\n Event,\n EventEmitter,\n} from '@stencil/core';\nimport { createStore, ObservableMap } from '@stencil/store';\n\ntype NanoFormEles =\n | HTMLNanoInputElement\n | HTMLNanoCheckboxElement\n | HTMLNanoSelectElement\n | HTMLNanoDateInputElement\n | HTMLNanoFileUploadElement;\ntype NanoEvent = CustomEvent & { target: NanoFormEles };\ninterface ValueStore {\n [key: string]: any;\n}\n\ninterface ValidationState {\n fields: NanoFormEles[];\n valid: boolean;\n validityMessage: string;\n dirty: boolean;\n name: string | number;\n value: any;\n}\n\n/**\n * A toolbox for `nano-...` form fields and form validation.\n *\n * - Easy to add validation accross field dependencies - e.g. \"When Field1 contains '123' Field2 must contain '456'\"\n * - Easy access to whole form and individual field validity states\n * - Easy access to form data payload\n * - Scroll to invalid field on submit\n */\n@Component({\n tag: 'nano-field-validator',\n})\nexport class FieldValidator implements ComponentInterface {\n // Internal State\n\n @Element() host: HTMLNanoFieldValidatorElement;\n @State() store: ObservableMap<ValueStore>;\n @State() userForm: HTMLFormElement;\n @State() submitted = false;\n @Watch('userForm')\n userFormChange() {\n if (!!this.userForm) this.activeForm = this.userForm;\n }\n\n private get activeForm() {\n return this._activeForm;\n }\n private set activeForm(form: HTMLFormElement) {\n if (this._activeForm)\n this._activeForm.removeEventListener(\n 'invalid',\n this.handleFormInvalid,\n true\n );\n if (form) form.addEventListener('invalid', this.handleFormInvalid, true);\n this._activeForm = form;\n }\n private _activeForm: HTMLFormElement;\n private mo: MutationObserver;\n private fields: NanoFormEles[] = [];\n // annoyingly, whenever we attempt to checkValidty it fires `invalid` events.\n // this is used to prevent infinite loops / multiple calls\n private internalValidate = false;\n\n // Public API\n\n /** When should the fields perform validation. Will override / sync all nested `nano-...` controls */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submitThenDirty';\n\n /** Sync up validateOn with all fields */\n @Watch('validateOn')\n validateOnChange() {\n this.fields.forEach((field) => {\n if (field.tagName === 'NANO-CHECKBOX') {\n const cbg = field.closest('nano-checkbox-group');\n if (cbg) cbg.validateOn = this.validateOn;\n } else {\n (field as Exclude<NanoFormEles, HTMLNanoCheckboxElement>).validateOn =\n this.validateOn;\n }\n });\n }\n\n /** Tries to scroll to the first invalid field on submit */\n @Prop() scrollToInvalid = true;\n\n /** Returns true if any nested fields have been changed @readonly */\n @Prop({ reflect: true })\n get dirty() {\n return this._dirty;\n }\n @State() _dirty = false;\n\n /** Returns true if all the nested fields are currently valid @readonly */\n @Prop({ reflect: true })\n get valid() {\n return this._valid;\n }\n @State() _valid: boolean;\n\n /** The current form payload as a reactive store. @readonly */\n @Prop()\n get payload() {\n return this.store.state;\n }\n\n /** Returns true if validation errors will be displayed to the user */\n @Prop()\n get showValidation() {\n return (this.validateOn === 'dirty' && this.dirty) || this.submitted;\n }\n\n /** Get the current validation state of all form fields. @readonly\n * ```\n {\n fields: NanoFormEles[];\n valid: boolean;\n validityMessage: string;\n dirty: boolean;\n name: string | number;\n value: any;\n }[]\n ```\n */\n @Prop() get validationState(): ValidationState[] {\n const validationState: ValidationState[] = [];\n\n this.fields.forEach(async (field) => {\n const found = validationState.find((v) => v.name === field.name);\n\n if (found) {\n found.validityMessage = field.validityMessage.length\n ? field.validityMessage\n : found.validityMessage;\n if (!found.fields.find((f) => f === field)) found.fields.push(field);\n if (found.valid && field.invalid) found.valid = false;\n return;\n }\n\n validationState.push({\n fields: [field],\n name: field.name,\n valid: !field.invalid,\n value: this.store.state[field.name],\n dirty: false,\n validityMessage: field.validityMessage,\n });\n });\n return validationState;\n }\n\n /** A validation callback method.\n * @param field - The field name currently being evaluated\n * @param value - The value of the field currently being evaluated\n * @param fields - an array of all currently observered form fields and values\n * @returns field names mapped to an object of status message and validity e.g.\n * ```js\n * {field1: {msg: `This is invalid!`}, field2: {msg: `This is valid!`, valid: true}}\n * ```\n */\n @Prop() validation: (\n field: string,\n value: string,\n fields: ValueStore\n ) => { [key: string]: { msg: string; valid?: boolean } };\n\n /** Fired whenever the payload changes */\n @Event() nanoPayloadChange: EventEmitter<ValueStore>;\n\n /**\n * Fired on valid form submission.\n * Note: if you wish to prevent a form from submitting, instead\n * of using / preventing the native `submit` event, use this event\n * ```js\n * ele.addEventListener('nanoSubmit', (e) => {\n * e.preventDefault()\n * })\n * ```\n */\n @Event() nanoSubmit: EventEmitter;\n\n /** Fire on invalid form submission attempt */\n @Event() nanoInvalid: EventEmitter;\n\n // private methods\n\n private attachSlotObserver() {\n if (!!this.mo) return;\n const mo = (this.mo = new MutationObserver((_entries) => {\n const form = this.host.querySelector('form');\n if (form !== this.activeForm) this.activeForm = form;\n this.setupFields();\n }));\n mo.observe(this.host, {\n childList: true,\n attributes: true,\n attributeFilter: ['name'],\n subtree: true,\n });\n }\n\n /** Checks for new `nano-...` fields and adds them to our watch array and value store */\n private setupFields() {\n let fields = Array.from(\n this.host.querySelectorAll<NanoFormEles>(`\n nano-input,\n nano-select,\n nano-file-upload,\n nano-date-input,\n nano-checkbox\n `)\n );\n fields = fields.filter((f) => !!f.name && !!f.name.length);\n\n // do we have any currently un-watched fields?\n if (!fields.filter((f) => !this.fields.includes(f)).length) return;\n\n // setup the initial store state / refresh on new fields\n this.fields = fields;\n this.validateOnChange();\n this.setFieldValue(this.fields);\n this.nanoPayloadChange.emit(this.store.state);\n }\n\n /** Loops through all `nano-...` fields and extracts their values into our store */\n private setFieldValue(fields: NanoFormEles[]) {\n fields.forEach((field) => {\n const fieldName = field.name;\n if (!fieldName.length) return;\n\n switch (field.tagName) {\n case 'NANO-CHECKBOX':\n let cb = field as HTMLNanoCheckboxElement;\n if (\n cb.type === 'radio' ||\n cb.type === 'segment' ||\n cb.type === 'segment-pill'\n ) {\n if (cb.checked) this.store.state[fieldName] = cb.value;\n else if (!cb.checked && cb.value === this.store.state[fieldName])\n this.store.state[fieldName] = '';\n } else if (\n this.fields.filter(\n (f) => f.name === fieldName && f.tagName === 'NANO-CHECKBOX'\n ).length > 1\n ) {\n const currentArr = Array.isArray(this.store.state[fieldName])\n ? this.store.state[fieldName]\n : [];\n if (cb.checked) {\n if (!this.store.state[fieldName].includes(cb.value)) {\n this.store.state[fieldName] = [...currentArr, cb.value];\n }\n } else {\n this.store.state[fieldName] = currentArr.filter(\n (v) => v !== cb.value\n );\n }\n } else this.store.state[fieldName] = cb.value;\n break;\n case 'NANO-FILE-UPLOAD':\n this.store.state[fieldName] = (\n field as HTMLNanoFileUploadElement\n ).files;\n break;\n default:\n this.store.state[fieldName] = field.value;\n break;\n }\n });\n }\n\n /** Checks for user defined validations */\n private async validate(key: string | number, newVal: any) {\n if (!this.validation) return;\n\n const res = this.validation(key as string, newVal, this.store.state);\n\n // no nothing - return\n if (!res) return;\n\n // stencil public methods are async\n // so we must to coerce our validation\n // collection loop into a promise\n await Promise.all(\n Object.entries(res).map(async ([key, o]) => {\n // switch on/off validation messages\n const field = this.fields.find((f) => f.name === key);\n let validityTarget: NanoFormEles | HTMLNanoCheckboxGroupElement = field;\n\n if (field.tagName === 'NANO-CHECKBOX') {\n const cbg = field.closest('nano-checkbox-group');\n validityTarget = cbg || field;\n }\n\n // status is now valid - clear the error\n if (validityTarget.validityMessage === o.msg && o.valid)\n await this.setFieldError(validityTarget, '');\n // status is invalid. Set the error\n else if (!o.valid) {\n await this.setFieldError(validityTarget, o.msg);\n }\n })\n );\n }\n\n /**\n * Utility to smooth out setting error messages\n * (it's a different method on `nano-checkbox` 'cos they don't show errors themselves)\n * @param field\n * @param msg\n */\n private async setFieldError(\n field: NanoFormEles | HTMLNanoCheckboxGroupElement,\n msg: string\n ) {\n if (field['showError'])\n await (field as Exclude<NanoFormEles, HTMLNanoCheckboxElement>).showError(\n msg\n );\n else await (field as HTMLNanoCheckboxElement).setError(msg);\n }\n\n /** Loops through all store entries and checks field validity */\n private async validateAllFields() {\n // This forces our loop to `await` and finish sequentially ... silly async stencil methods\n await Object.entries(this.store.state).reduce(\n async (memo, [key, value]) => {\n await memo;\n await this.validate(key, value);\n },\n undefined as any\n );\n }\n\n private scrollToFirstInvalid() {\n if (!this.scrollToInvalid) return;\n\n setTimeout(() => {\n const invalidField = this.validationState.find((f) => !f.valid);\n if (!invalidField) return;\n invalidField.fields[0].scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }, 200);\n }\n\n private submitForm() {\n const nanoSubmit = this.nanoSubmit.emit();\n if (nanoSubmit.defaultPrevented) return;\n this.activeForm.submit();\n }\n\n // Event handlers\n\n /** Fired whenever store values change and potentially checks validity */\n private handleStoreChange = async (_key: string | number, _newVal: any) => {\n if (this.validateOn === 'dirty' && this.dirty) {\n this.internalValidate = true;\n await this.validateAllFields();\n this._valid = this.activeForm.checkValidity();\n this.internalValidate = false;\n }\n this.nanoPayloadChange.emit(this.store.state);\n };\n\n /** Handles field value changes and passes to store */\n private handleFieldChange = (ev: NanoEvent) => {\n this._dirty = true;\n this.setFieldValue([ev.target]);\n };\n\n /** Handles default field validation events */\n private handleFormInvalid = async (ev: Event) => {\n ev.preventDefault();\n this._valid = false;\n\n if (this.internalValidate) return;\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n this.submitted = true;\n\n await this.validateAllFields();\n\n // kinda insane...but if we're only validating on submit, then if the form is currently\n // in an invalid state, when submitting, it will fire an invalid event and not\n // submit the form. So let's test to make sure it is really invalid, and submit if not\n if (this.validateOn === 'submit') {\n this.internalValidate = true;\n this._valid = this.activeForm.checkValidity();\n this.internalValidate = false;\n\n if (this._valid) {\n this.submitForm();\n return;\n }\n }\n\n this.scrollToFirstInvalid();\n this.nanoInvalid.emit();\n };\n\n /** stops default form submission, checks if valid, then submits manually */\n private handleSubmit = async (e: Event) => {\n e.preventDefault();\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n this.submitted = true;\n await this.validateAllFields();\n\n this.internalValidate = true;\n this._valid = this.activeForm.checkValidity();\n this.internalValidate = false;\n\n if (!this._valid) {\n this.scrollToFirstInvalid();\n return;\n }\n this.submitForm();\n };\n\n connectedCallback(): void {\n this.userForm = this.host.querySelector('form');\n }\n\n componentDidLoad() {\n requestAnimationFrame(() => {\n this.store = createStore<ValueStore>({});\n\n this.setupFields();\n this.attachSlotObserver();\n\n this.store.on('set', (key, value) => this.handleStoreChange(key, value));\n this.host.addEventListener('nanoChange', this.handleFieldChange);\n this.host.addEventListener('submit', this.handleSubmit);\n });\n }\n\n disconnectedCallback() {\n if (this.mo) this.mo.disconnect();\n this.store.dispose();\n this.host.removeEventListener('nanoChange', this.handleFieldChange);\n this.host.removeEventListener('submit', this.handleSubmit);\n if (this.activeForm)\n this.activeForm.removeEventListener(\n 'invalid',\n this.handleFormInvalid,\n true\n );\n }\n\n render() {\n return (\n <Host>\n {this.userForm && <slot />}\n {!this.userForm && (\n <form ref={(f) => (this.activeForm = f)}>\n <slot />\n </form>\n )}\n </Host>\n );\n }\n}\n"],"version":3}