@lion/ui 0.19.1 → 0.20.0-menu-system.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 (348) hide show
  1. package/collapsible.js +1 -0
  2. package/components/button/src/LionButton.js +4 -0
  3. package/components/button/test-suites/LionButton.suite.js +1 -0
  4. package/components/calendar/src/LionCalendar.js +3 -1
  5. package/components/calendar/test/lion-calendar.test.js +47 -67
  6. package/components/collapsible/src/DisclosureMixin.js +313 -0
  7. package/components/collapsible/test-suites/DisclosureMixin.suite.js +30 -0
  8. package/components/collapsible/types/DisclosureMixinTypes.ts +48 -0
  9. package/components/combobox/test/lion-combobox.test.js +1 -0
  10. package/components/form-core/src/form-group/FormGroupMixin.js +7 -0
  11. package/components/form-core/src/registration/FormRegistrarMixin.js +11 -0
  12. package/components/form-core/test/FormControlMixin.test.js +1 -0
  13. package/components/form-core/test/validate/Validator.test.js +2 -0
  14. package/components/form-core/test-suites/ValidateMixin.suite.js +2 -0
  15. package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +1 -0
  16. package/components/input-datepicker/src/localizeNamespaceLoader.js +1 -0
  17. package/components/input-datepicker/test/lion-input-datepicker.test.js +9 -19
  18. package/components/input-email/src/LionInputEmail.js +0 -2
  19. package/components/input-email/test/lion-input-email.test.js +0 -6
  20. package/components/input-file/src/validators.js +1 -31
  21. package/components/input-file/test/FileValidators.test.js +0 -31
  22. package/components/input-file/translations/bg.js +0 -1
  23. package/components/input-file/translations/cs.js +0 -1
  24. package/components/input-file/translations/de.js +0 -2
  25. package/components/input-file/translations/en.js +0 -1
  26. package/components/input-file/translations/es.js +0 -1
  27. package/components/input-file/translations/fr.js +0 -1
  28. package/components/input-file/translations/hu.js +0 -1
  29. package/components/input-file/translations/id.js +0 -1
  30. package/components/input-file/translations/it.js +0 -1
  31. package/components/input-file/translations/nl.js +0 -1
  32. package/components/input-file/translations/pl.js +0 -1
  33. package/components/input-file/translations/ro.js +0 -1
  34. package/components/input-file/translations/ru.js +0 -1
  35. package/components/input-file/translations/sk.js +0 -1
  36. package/components/input-file/translations/uk.js +0 -1
  37. package/components/input-file/translations/zh.js +0 -1
  38. package/components/input-tel/src/LionInputTel.js +1 -1
  39. package/components/input-tel/test-suites/LionInputTel.suite.js +0 -7
  40. package/components/localize/test/date/formatDate.test.js +1 -0
  41. package/components/menu/CHANGELOG.md +37 -0
  42. package/components/menu/README.md +335 -0
  43. package/components/menu/index.js +2 -0
  44. package/components/menu/lion-menu-overlay.js +3 -0
  45. package/components/menu/lion-menu.js +3 -0
  46. package/components/menu/lion-spinbutton.js +3 -0
  47. package/components/menu/lion-toolbar.js +3 -0
  48. package/components/menu/lion-tree.js +3 -0
  49. package/components/menu/package.json +46 -0
  50. package/components/menu/requirements.temp.md +12 -0
  51. package/components/menu/src/InteractiveListMixin.js +840 -0
  52. package/components/menu/src/LionMenu.js +250 -0
  53. package/components/menu/src/LionMenuHybrid.js +46 -0
  54. package/components/menu/src/LionMenuOverlay.js +155 -0
  55. package/components/menu/src/LionSpinbutton.js +213 -0
  56. package/components/menu/src/LionToolbar.js +94 -0
  57. package/components/menu/src/LionTree.js +52 -0
  58. package/components/menu/src/MoreButtonMenuMixin.js +278 -0
  59. package/components/menu/src/MultiLevelListMixin.js +311 -0
  60. package/components/menu/src/utils/isInView.js +26 -0
  61. package/components/menu/src/utils/listItemInteractions.js +124 -0
  62. package/components/menu/test/InteractiveListMixin.test.js +3 -0
  63. package/components/menu/test/MoreButtonMenuMixin.test.js +4 -0
  64. package/components/menu/test/MultiLevelListMixin.test.js +3 -0
  65. package/components/menu/test/lion-menu-hybrid.test.js +3 -0
  66. package/components/menu/test/lion-menu.test.js +11 -0
  67. package/components/menu/test/lion-toolbar.test.js +8 -0
  68. package/components/menu/test/lion-tree.test.js +7 -0
  69. package/components/menu/test-helpers/mimicKeyPress.js +9 -0
  70. package/components/menu/test-suites/InteractiveListMixin.suite.js +454 -0
  71. package/components/menu/test-suites/LionMenu.suite.js +113 -0
  72. package/components/menu/test-suites/LionMenuHybrid.suite.js +583 -0
  73. package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +372 -0
  74. package/components/menu/test-suites/MultiLevelListMixin.suite.js +303 -0
  75. package/components/menu/types/InteractiveListMixinTypes.d.ts +84 -0
  76. package/components/navigation-bar/README.md +1 -0
  77. package/components/navigation-bar/src/LionNavigationBar.js +439 -0
  78. package/components/navigation-bar/src/types.js +41 -0
  79. package/components/overlays/NEXT.md +49 -0
  80. package/components/overlays/src/OverlayController.js +278 -110
  81. package/components/overlays/src/OverlayMixin.js +58 -11
  82. package/components/overlays/src/OverlaysManager.js +2 -2
  83. package/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.js +9 -41
  84. package/components/overlays/src/utils/adopt-styles.js +3 -2
  85. package/components/overlays/src/utils/get-focusable-elements.js +4 -0
  86. package/components/overlays/src/utils/is-equal-config.js +10 -6
  87. package/components/overlays/test/OverlayController.test.js +127 -14
  88. package/components/overlays/test/utils-tests/is-equal-config.test.js +1 -1
  89. package/components/overlays/test/withHoverInteraction.test.js +0 -28
  90. package/components/overlays/test-suites/OverlayMixin.suite.js +8 -8
  91. package/components/overlays/types/ArrowMixinTypes.ts +3 -1
  92. package/components/overlays/types/OverlayConfig.ts +20 -5
  93. package/components/overlays/types/OverlayMixinTypes.ts +2 -0
  94. package/components/select-rich/test/lion-select-rich.test.js +3 -0
  95. package/custom-elements.json +30458 -17734
  96. package/dist-types/components/button/src/LionButton.d.ts +1 -0
  97. package/dist-types/components/button/src/LionButton.d.ts.map +1 -1
  98. package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
  99. package/dist-types/components/calendar/src/LionCalendar.d.ts.map +1 -1
  100. package/dist-types/components/calendar/test/lion-calendar.test.d.ts.map +1 -1
  101. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts +3 -0
  102. package/dist-types/components/collapsible/src/DisclosureMixin.d.ts.map +1 -0
  103. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts +2 -0
  104. package/dist-types/components/collapsible/test-suites/DisclosureMixin.suite.d.ts.map +1 -0
  105. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts +24 -0
  106. package/dist-types/components/collapsible/types/DisclosureMixinTypes.d.ts.map +1 -0
  107. package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
  108. package/dist-types/components/dialog/src/LionDialog.d.ts +6 -2
  109. package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
  110. package/dist-types/components/form-core/src/form-group/FormGroupMixin.d.ts.map +1 -1
  111. package/dist-types/components/form-core/src/registration/FormRegistrarMixin.d.ts.map +1 -1
  112. package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
  113. package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
  114. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +1 -1
  115. package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -1
  116. package/dist-types/components/input-datepicker/test/lion-input-datepicker.test.d.ts.map +1 -1
  117. package/dist-types/components/input-email/src/LionInputEmail.d.ts.map +1 -1
  118. package/dist-types/components/input-file/src/validators.d.ts +0 -11
  119. package/dist-types/components/input-file/src/validators.d.ts.map +1 -1
  120. package/dist-types/components/input-file/translations/bg-BG.d.ts +0 -1
  121. package/dist-types/components/input-file/translations/bg.d.ts +0 -1
  122. package/dist-types/components/input-file/translations/cs-CZ.d.ts +0 -1
  123. package/dist-types/components/input-file/translations/cs.d.ts +0 -1
  124. package/dist-types/components/input-file/translations/de-DE.d.ts +0 -1
  125. package/dist-types/components/input-file/translations/de.d.ts +0 -1
  126. package/dist-types/components/input-file/translations/en-AU.d.ts +0 -1
  127. package/dist-types/components/input-file/translations/en-GB.d.ts +0 -1
  128. package/dist-types/components/input-file/translations/en-PH.d.ts +0 -1
  129. package/dist-types/components/input-file/translations/en-US.d.ts +0 -1
  130. package/dist-types/components/input-file/translations/en.d.ts +0 -1
  131. package/dist-types/components/input-file/translations/es-ES.d.ts +0 -1
  132. package/dist-types/components/input-file/translations/es.d.ts +0 -1
  133. package/dist-types/components/input-file/translations/fr-BE.d.ts +0 -1
  134. package/dist-types/components/input-file/translations/fr-FR.d.ts +0 -1
  135. package/dist-types/components/input-file/translations/fr.d.ts +0 -1
  136. package/dist-types/components/input-file/translations/hu-HU.d.ts +0 -1
  137. package/dist-types/components/input-file/translations/hu.d.ts +0 -1
  138. package/dist-types/components/input-file/translations/id-ID.d.ts +0 -1
  139. package/dist-types/components/input-file/translations/id.d.ts +0 -1
  140. package/dist-types/components/input-file/translations/it-IT.d.ts +0 -1
  141. package/dist-types/components/input-file/translations/it.d.ts +0 -1
  142. package/dist-types/components/input-file/translations/nl-BE.d.ts +0 -1
  143. package/dist-types/components/input-file/translations/nl-NL.d.ts +0 -1
  144. package/dist-types/components/input-file/translations/nl.d.ts +0 -1
  145. package/dist-types/components/input-file/translations/pl-PL.d.ts +0 -1
  146. package/dist-types/components/input-file/translations/pl.d.ts +0 -1
  147. package/dist-types/components/input-file/translations/ro-RO.d.ts +0 -1
  148. package/dist-types/components/input-file/translations/ro.d.ts +0 -1
  149. package/dist-types/components/input-file/translations/ru-RU.d.ts +0 -1
  150. package/dist-types/components/input-file/translations/ru.d.ts +0 -1
  151. package/dist-types/components/input-file/translations/sk-SK.d.ts +0 -1
  152. package/dist-types/components/input-file/translations/sk.d.ts +0 -1
  153. package/dist-types/components/input-file/translations/uk-UA.d.ts +0 -1
  154. package/dist-types/components/input-file/translations/uk.d.ts +0 -1
  155. package/dist-types/components/input-file/translations/zh-CN.d.ts +0 -1
  156. package/dist-types/components/input-file/translations/zh.d.ts +0 -1
  157. package/dist-types/components/input-tel/src/LionInputTel.d.ts.map +1 -1
  158. package/dist-types/components/input-tel/test-suites/LionInputTel.suite.d.ts.map +1 -1
  159. package/dist-types/components/menu/index.d.ts +3 -0
  160. package/dist-types/components/menu/index.d.ts.map +1 -0
  161. package/dist-types/components/menu/lion-menu-overlay.d.ts +2 -0
  162. package/dist-types/components/menu/lion-menu-overlay.d.ts.map +1 -0
  163. package/dist-types/components/menu/lion-menu.d.ts +2 -0
  164. package/dist-types/components/menu/lion-menu.d.ts.map +1 -0
  165. package/dist-types/components/menu/lion-spinbutton.d.ts +2 -0
  166. package/dist-types/components/menu/lion-spinbutton.d.ts.map +1 -0
  167. package/dist-types/components/menu/lion-toolbar.d.ts +2 -0
  168. package/dist-types/components/menu/lion-toolbar.d.ts.map +1 -0
  169. package/dist-types/components/menu/lion-tree.d.ts +2 -0
  170. package/dist-types/components/menu/lion-tree.d.ts.map +1 -0
  171. package/dist-types/components/menu/src/InteractiveListMixin.d.ts +617 -0
  172. package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +1 -0
  173. package/dist-types/components/menu/src/LionMenu.d.ts +635 -0
  174. package/dist-types/components/menu/src/LionMenu.d.ts.map +1 -0
  175. package/dist-types/components/menu/src/LionMenuHybrid.d.ts +19 -0
  176. package/dist-types/components/menu/src/LionMenuHybrid.d.ts.map +1 -0
  177. package/dist-types/components/menu/src/LionMenuOverlay.d.ts +1015 -0
  178. package/dist-types/components/menu/src/LionMenuOverlay.d.ts.map +1 -0
  179. package/dist-types/components/menu/src/LionSpinbutton.d.ts +58 -0
  180. package/dist-types/components/menu/src/LionSpinbutton.d.ts.map +1 -0
  181. package/dist-types/components/menu/src/LionToolbar.d.ts +8 -0
  182. package/dist-types/components/menu/src/LionToolbar.d.ts.map +1 -0
  183. package/dist-types/components/menu/src/LionTree.d.ts +447 -0
  184. package/dist-types/components/menu/src/LionTree.d.ts.map +1 -0
  185. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +39 -0
  186. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +1 -0
  187. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +503 -0
  188. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +1 -0
  189. package/dist-types/components/menu/src/utils/isInView.d.ts +9 -0
  190. package/dist-types/components/menu/src/utils/isInView.d.ts.map +1 -0
  191. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +48 -0
  192. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +1 -0
  193. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +2 -0
  194. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +1 -0
  195. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +2 -0
  196. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +1 -0
  197. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +2 -0
  198. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +1 -0
  199. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts +2 -0
  200. package/dist-types/components/menu/test/lion-menu-hybrid.test.d.ts.map +1 -0
  201. package/dist-types/components/menu/test/lion-menu.test.d.ts +2 -0
  202. package/dist-types/components/menu/test/lion-menu.test.d.ts.map +1 -0
  203. package/dist-types/components/menu/test/lion-toolbar.test.d.ts +2 -0
  204. package/dist-types/components/menu/test/lion-toolbar.test.d.ts.map +1 -0
  205. package/dist-types/components/menu/test/lion-tree.test.d.ts +2 -0
  206. package/dist-types/components/menu/test/lion-tree.test.d.ts.map +1 -0
  207. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +7 -0
  208. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +1 -0
  209. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +14 -0
  210. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -0
  211. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +9 -0
  212. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -0
  213. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts +5 -0
  214. package/dist-types/components/menu/test-suites/LionMenuHybrid.suite.d.ts.map +1 -0
  215. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +14 -0
  216. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -0
  217. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +11 -0
  218. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -0
  219. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts +238 -0
  220. package/dist-types/components/navigation-bar/src/LionNavigationBar.d.ts.map +1 -0
  221. package/dist-types/components/navigation-bar/src/types.d.ts +85 -0
  222. package/dist-types/components/navigation-bar/src/types.d.ts.map +1 -0
  223. package/dist-types/components/overlays/src/OverlayController.d.ts +24 -12
  224. package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
  225. package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
  226. package/dist-types/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.d.ts.map +1 -1
  227. package/dist-types/components/overlays/src/utils/get-focusable-elements.d.ts.map +1 -1
  228. package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
  229. package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
  230. package/dist-types/components/overlays/types/OverlayConfig.d.ts +12 -2
  231. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  232. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -0
  233. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
  234. package/dist-types/components/select-rich/src/LionSelectRich.d.ts +11 -3
  235. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  236. package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
  237. package/dist-types/exports/define/lion-item.d.ts +2 -0
  238. package/dist-types/exports/define/lion-item.d.ts.map +1 -0
  239. package/dist-types/exports/define/lion-menu-overlay.d.ts +2 -0
  240. package/dist-types/exports/define/lion-menu-overlay.d.ts.map +1 -0
  241. package/dist-types/exports/define/lion-menu.d.ts +2 -0
  242. package/dist-types/exports/define/lion-menu.d.ts.map +1 -0
  243. package/dist-types/exports/define/lion-navigation-bar.d.ts +2 -0
  244. package/dist-types/exports/define/lion-navigation-bar.d.ts.map +1 -0
  245. package/dist-types/exports/define/lion-toolbar.d.ts +2 -0
  246. package/dist-types/exports/define/lion-toolbar.d.ts.map +1 -0
  247. package/dist-types/exports/define/lion-tree.d.ts +2 -0
  248. package/dist-types/exports/define/lion-tree.d.ts.map +1 -0
  249. package/dist-types/exports/input-file.d.ts +1 -1
  250. package/dist-types/exports/menu-test-suites.d.ts +4 -0
  251. package/dist-types/exports/menu-test-suites.d.ts.map +1 -0
  252. package/dist-types/exports/menu.d.ts +7 -0
  253. package/dist-types/exports/menu.d.ts.map +1 -0
  254. package/dist-types/exports/navigation-bar.d.ts +2 -0
  255. package/dist-types/exports/navigation-bar.d.ts.map +1 -0
  256. package/dist-types/exports/overlays.d.ts +3 -0
  257. package/dist-types/exports/overlays.d.ts.map +1 -1
  258. package/dist-types/tsconfig.tsbuildinfo +1 -1
  259. package/docs/components/checkbox-group/overview.md +2 -2
  260. package/docs/components/collapsible/overview.md +1 -1
  261. package/docs/components/combobox/api-table.md +21 -8
  262. package/docs/components/combobox/overview.md +1 -1
  263. package/docs/components/combobox/use-cases.md +1 -1
  264. package/docs/components/dialog/api-table.md +31 -6
  265. package/docs/components/dialog/overview.md +1 -1
  266. package/docs/components/fieldset/overview.md +5 -5
  267. package/docs/components/form/overview.md +3 -3
  268. package/docs/components/form/use-cases.md +2 -2
  269. package/docs/components/icon/use-cases.md +1 -1
  270. package/docs/components/input/overview.md +1 -1
  271. package/docs/components/input-amount/overview.md +3 -3
  272. package/docs/components/input-date/overview.md +3 -3
  273. package/docs/components/input-datepicker/api-table.md +21 -4
  274. package/docs/components/input-datepicker/overview.md +5 -5
  275. package/docs/components/input-email/api-table.md +1 -1
  276. package/docs/components/input-email/overview.md +2 -2
  277. package/docs/components/input-file/overview.md +1 -1
  278. package/docs/components/input-file/use-cases.md +0 -18
  279. package/docs/components/input-iban/overview.md +2 -2
  280. package/docs/components/input-range/overview.md +2 -2
  281. package/docs/components/input-stepper/overview.md +1 -1
  282. package/docs/components/input-tel/api-table.md +1 -1
  283. package/docs/components/input-tel/overview.md +1 -1
  284. package/docs/components/input-tel/use-cases.md +6 -6
  285. package/docs/components/input-tel-dropdown/api-table.md +1 -1
  286. package/docs/components/input-tel-dropdown/overview.md +1 -1
  287. package/docs/components/listbox/use-cases.md +1 -1
  288. package/docs/components/menu/api-table.md +460 -0
  289. package/docs/components/menu/applyMenuDemoStyles.js +173 -0
  290. package/docs/components/menu/extensions.md +262 -0
  291. package/docs/components/menu/index.md +13 -0
  292. package/docs/components/menu/overview.md +422 -0
  293. package/docs/components/menu/use-cases.md +77 -0
  294. package/docs/components/radio-group/overview.md +3 -3
  295. package/docs/components/select/use-cases.md +1 -1
  296. package/docs/components/select-rich/api-table.md +21 -5
  297. package/docs/components/select-rich/use-cases.md +2 -2
  298. package/docs/components/tabs/examples.md +1 -1
  299. package/docs/components/tooltip/api-table.md +36 -11
  300. package/docs/components/tooltip/use-cases.md +1 -34
  301. package/docs/fundamentals/index.md +4 -4
  302. package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
  303. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
  304. package/docs/fundamentals/rationales/accessibility.md +1 -1
  305. package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
  306. package/docs/fundamentals/systems/core/overview.md +1 -1
  307. package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
  308. package/docs/fundamentals/systems/form/model-value.md +1 -1
  309. package/docs/fundamentals/systems/form/overview.md +28 -28
  310. package/docs/fundamentals/systems/form/validate.md +2 -2
  311. package/docs/fundamentals/systems/localize/overview.md +4 -4
  312. package/docs/fundamentals/systems/overlays/api-table.md +36 -34
  313. package/docs/fundamentals/systems/overlays/configuration.md +2 -2
  314. package/docs/fundamentals/systems/overlays/overview.md +5 -5
  315. package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
  316. package/docs/fundamentals/tools/helpers/overview.md +1 -1
  317. package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
  318. package/docs/guides/how-to/create-a-custom-field.md +5 -5
  319. package/docs/guides/how-to/create-a-form.md +4 -4
  320. package/docs/guides/how-to/extend-a-native-input.md +2 -2
  321. package/docs/guides/how-to/index.md +1 -1
  322. package/docs/guides/index.md +8 -8
  323. package/docs/guides/principles/index.md +5 -5
  324. package/docs/guides/principles/styling.md +1 -1
  325. package/exports/collapsible.js +1 -0
  326. package/exports/define/lion-item.js +3 -0
  327. package/exports/define/lion-menu-overlay.js +3 -0
  328. package/exports/define/lion-menu.js +3 -0
  329. package/exports/define/lion-navigation-bar.js +3 -0
  330. package/exports/define/lion-toolbar.js +3 -0
  331. package/exports/define/lion-tree.js +3 -0
  332. package/exports/input-file.js +1 -5
  333. package/exports/menu-test-suites.js +4 -0
  334. package/exports/menu.js +7 -0
  335. package/exports/navigation-bar.js +1 -0
  336. package/exports/overlays.js +6 -0
  337. package/input-file.js +1 -5
  338. package/menu-test-suites.js +4 -0
  339. package/menu.js +7 -0
  340. package/navigation-bar.js +1 -0
  341. package/overlays.js +6 -0
  342. package/package.json +2 -2
  343. package/components/calendar/test-suites/LionCalendar.suite.js +0 -79
  344. package/components/input-datepicker/test-suites/LionInputDatepicker.suite.js +0 -35
  345. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts +0 -5
  346. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts.map +0 -1
  347. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts +0 -7
  348. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts.map +0 -1
@@ -0,0 +1,48 @@
1
+ import { Constructor } from '@open-wc/dedupe-mixin';
2
+ import { LitElement } from 'lit';
3
+
4
+ export declare class DisclosureHost {
5
+ public opened: Boolean;
6
+
7
+ protected get _invokerNode(): HTMLElement;
8
+
9
+ protected get _contentNode(): HTMLElement;
10
+
11
+ public toggle(): void;
12
+
13
+ public open(): void;
14
+
15
+ public close(): void;
16
+
17
+ protected _onOpenedChanged(): Promise<void>;
18
+
19
+ protected _onDisclosureShow(): void;
20
+
21
+ protected _onDisclosureHide(): void;
22
+
23
+ protected _showAnimation(cfg: object): Promise<void>;
24
+
25
+ protected _hideAnimation(cfg: object): Promise<void>;
26
+
27
+ protected _refreshAnimateCompletePromise(): void;
28
+
29
+ protected _setupOpenCloseListeners(): void;
30
+
31
+ protected _teardownOpenCloseListeners(): void;
32
+
33
+ private __setupAnimation(): void;
34
+
35
+ private __teardownAnimation(): void;
36
+
37
+ private __handleAnimateComplete(): void;
38
+ }
39
+
40
+ export declare function DisclosureImplementation<T extends Constructor<LitElement>>(
41
+ superclass: T,
42
+ ): T &
43
+ Constructor<DisclosureHost> &
44
+ DisclosureHost &
45
+ Pick<typeof DisclosureHost, keyof typeof DisclosureHost> &
46
+ Pick<typeof LitElement, keyof typeof LitElement>;
47
+
48
+ export type DisclosureMixin = typeof DisclosureImplementation;
@@ -3227,6 +3227,7 @@ describe('lion-combobox', () => {
3227
3227
  const [el, options] = await fruitFixture({ autocomplete: 'both', matchMode: 'all' });
3228
3228
  await mimicUserTyping(/** @type {LionCombobox} */ (el), 'choke');
3229
3229
  await el.updateComplete;
3230
+ // @ts-ignore - array index access
3230
3231
  const labelledElement = options[0].querySelector('span[aria-label="Artichoke"]');
3231
3232
  expect(labelledElement).to.not.be.null;
3232
3233
  expect(labelledElement.innerText).to.equal('Artichoke');
@@ -352,11 +352,14 @@ const FormGroupMixinImplementation = superclass =>
352
352
  this.formElements._keys().forEach(name => {
353
353
  const elem = this.formElements[name];
354
354
  if (elem instanceof FormControlsCollection) {
355
+ // @ts-ignore - dynamic property access
355
356
  result[name] = elem.filter(el => _filterFn(el, property)).map(el => el[property]);
356
357
  } else if (_filterFn(elem, property)) {
357
358
  if (typeof elem._getFromAllFormElements === 'function') {
359
+ // @ts-ignore - dynamic property access
358
360
  result[name] = elem._getFromAllFormElements(property);
359
361
  } else {
362
+ // @ts-ignore - dynamic property access
360
363
  result[name] = elem[property];
361
364
  }
362
365
  }
@@ -386,6 +389,7 @@ const FormGroupMixinImplementation = superclass =>
386
389
  if (Array.isArray(this.formElements[name])) {
387
390
  this.formElements[name].forEach(
388
391
  (/** @type {FormControl} */ el, /** @type {number} */ index) => {
392
+ // @ts-ignore - dynamic property access
389
393
  el[property] = values[name][index]; // eslint-disable-line no-param-reassign
390
394
  },
391
395
  );
@@ -393,6 +397,7 @@ const FormGroupMixinImplementation = superclass =>
393
397
  if (this.formElements[name]) {
394
398
  this.formElements[name][property] = values[name];
395
399
  } else {
400
+ // @ts-ignore - dynamic property access
396
401
  this.__pendingValues[property][name] = values[name];
397
402
  }
398
403
  });
@@ -406,6 +411,7 @@ const FormGroupMixinImplementation = superclass =>
406
411
  _anyFormElementHas(property) {
407
412
  return Object.keys(this.formElements).some(name => {
408
413
  if (Array.isArray(this.formElements[name])) {
414
+ // @ts-ignore - dynamic property access
409
415
  return this.formElements[name].some((/** @type {FormControl} */ el) => !!el[property]);
410
416
  }
411
417
  return !!this.formElements[name][property];
@@ -436,6 +442,7 @@ const FormGroupMixinImplementation = superclass =>
436
442
  _everyFormElementHas(property) {
437
443
  return Object.keys(this.formElements).every(name => {
438
444
  if (Array.isArray(this.formElements[name])) {
445
+ // @ts-ignore - dynamic property access
439
446
  return this.formElements[name].every((/** @type {FormControl} */ el) => !!el[property]);
440
447
  }
441
448
  return !!this.formElements[name][property];
@@ -162,15 +162,21 @@ const FormRegistrarMixinImplementation = superclass =>
162
162
  }
163
163
 
164
164
  if (name.substr(-2) === '[]') {
165
+ // @ts-ignore - dynamic named access to form elements
165
166
  if (!Array.isArray(this.formElements[name])) {
167
+ // @ts-ignore
166
168
  this.formElements[name] = new FormControlsCollection();
167
169
  }
168
170
  if (indexToInsertAt > 0) {
171
+ // @ts-ignore
169
172
  this.formElements[name].splice(indexToInsertAt, 0, child);
170
173
  } else {
174
+ // @ts-ignore
171
175
  this.formElements[name].push(child);
172
176
  }
177
+ // @ts-ignore
173
178
  } else if (!this.formElements[name]) {
179
+ // @ts-ignore
174
180
  this.formElements[name] = child;
175
181
  } else {
176
182
  console.info('Error Node:', child); // eslint-disable-line no-console
@@ -194,12 +200,17 @@ const FormRegistrarMixinImplementation = superclass =>
194
200
  // 2. Handle name based object keys
195
201
  if (this._isFormOrFieldset) {
196
202
  const { name } = child; // FIXME: <-- ElementWithParentFormGroup should become LionFieldWithParentFormGroup so that "name" exists
203
+ // @ts-ignore - dynamic named access to form elements
197
204
  if (name.substr(-2) === '[]' && this.formElements[name]) {
205
+ // @ts-ignore
198
206
  const idx = this.formElements[name].indexOf(child);
199
207
  if (idx > -1) {
208
+ // @ts-ignore
200
209
  this.formElements[name].splice(idx, 1);
201
210
  }
211
+ // @ts-ignore
202
212
  } else if (this.formElements[name]) {
213
+ // @ts-ignore
203
214
  delete this.formElements[name];
204
215
  }
205
216
  }
@@ -153,6 +153,7 @@ describe('FormControlMixin', () => {
153
153
  el.shadowRoot?.querySelector('.form-field__label'),
154
154
  );
155
155
  Object.entries(expectedValues).forEach(([key, val]) => {
156
+ // @ts-ignore - dynamic style property access
156
157
  expect(labelStyle[key]).to.equal(val);
157
158
  });
158
159
  });
@@ -191,7 +191,9 @@ describe('Validator', () => {
191
191
  it('adds static ["_$isValidator$"] property as a marker to identify the Validator class across different lion versions (as instanceof cannot be used)', async () => {
192
192
  const myValidator = new Validator();
193
193
 
194
+ // @ts-ignore - static property access
194
195
  expect(myValidator.constructor['_$isValidator$']).to.exist;
196
+ // @ts-ignore - static property access
195
197
  expect(myValidator.constructor['_$isValidator$']).to.be.true;
196
198
  });
197
199
 
@@ -1554,11 +1554,13 @@ export function runValidateMixinSuite(customConfig) {
1554
1554
  // eslint-disable-next-line no-restricted-syntax
1555
1555
  for (const state of ['dirty', 'touched', 'prefilled', 'submitted']) {
1556
1556
  counter += 1;
1557
+ // @ts-ignore - test property access
1557
1558
  el[state] = false;
1558
1559
  // eslint-disable-next-line no-await-in-loop
1559
1560
  await el.updateComplete;
1560
1561
  expect(spy.callCount).to.equal(counter);
1561
1562
  counter += 1;
1563
+ // @ts-ignore - test property access
1562
1564
  el[state] = true;
1563
1565
  // eslint-disable-next-line no-await-in-loop
1564
1566
  await el.updateComplete;
@@ -714,6 +714,7 @@ export function runValidateMixinFeedbackPart() {
714
714
  const results = {
715
715
  'a-string-instead-of-bool': 'Msg based on enum output',
716
716
  };
717
+ // @ts-ignore - test data structure
717
718
  return results[/** @type {string} */ (outcome)];
718
719
  }
719
720
  }
@@ -6,6 +6,7 @@ async function combineLocalizeImports(importPromises) {
6
6
  const combinedResult = localizeObjects[0];
7
7
  for (const localizeObject of localizeObjects.slice(1)) {
8
8
  Object.entries(localizeObject.default).forEach(([key, val]) => {
9
+ // @ts-ignore - dynamic property access
9
10
  combinedResult.default[key] = val;
10
11
  });
11
12
  }
@@ -4,12 +4,11 @@ import { IsDateDisabled, MaxDate, MinDate, MinMaxDate } from '@lion/ui/form-core
4
4
  import { aTimeout, defineCE, expect, fixture as _fixture, nextFrame } from '@open-wc/testing';
5
5
  import { mimicClick } from '@lion/ui/overlays-test-helpers.js';
6
6
  import sinon from 'sinon';
7
- import { sendKeys, setViewport } from '@web/test-runner-commands';
7
+ import { setViewport } from '@web/test-runner-commands';
8
8
  import { DatepickerInputObject } from '@lion/ui/input-datepicker-test-helpers.js';
9
9
  import { LionInputDatepicker } from '@lion/ui/input-datepicker.js';
10
10
 
11
11
  import '@lion/ui/define/lion-input-datepicker.js';
12
- import { runDatepickerSuite } from '../test-suites/LionInputDatepicker.suite.js';
13
12
 
14
13
  /**
15
14
  * @typedef {import('lit').TemplateResult} TemplateResult
@@ -480,14 +479,10 @@ describe('<lion-input-datepicker>', () => {
480
479
  // Open the calendar
481
480
  await elObj.openCalendar();
482
481
 
483
- const selectedDateEl = calendarEl?.shadowRoot?.querySelector(
484
- '.calendar__day-button[selected]',
485
- );
486
- // @ts-ignore
487
- selectedDateEl?.focus();
488
-
489
482
  // Move focus to 18th of December
490
- await sendKeys({ press: 'ArrowRight' });
483
+ calendarEl.shadowRoot
484
+ ?.querySelector('#js-content-wrapper')
485
+ ?.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight' }));
491
486
 
492
487
  expect(/** @type {Date} */ (calendarEl.focusedDate).getTime()).to.equal(
493
488
  new Date('December 18, 2020 03:24:00 GMT+0000').getTime(),
@@ -602,12 +597,11 @@ describe('<lion-input-datepicker>', () => {
602
597
  <lion-input-datepicker label="End date" name="endDate"></lion-input-datepicker>
603
598
  `);
604
599
 
605
- // @ts-expect-error
606
- const elements = el.parentElement.children;
607
- // @ts-expect-error
608
- const startLabel = elements.startDate.querySelector('button').ariaLabel;
609
- // @ts-expect-error
610
- const endLabel = elements.endDate.querySelector('button').ariaLabel;
600
+ const elements = el.parentElement?.children;
601
+ // @ts-ignore - accessing by name property
602
+ const startLabel = elements?.startDate?.querySelector('button')?.ariaLabel;
603
+ // @ts-ignore - accessing by name property
604
+ const endLabel = elements?.endDate?.querySelector('button')?.ariaLabel;
611
605
 
612
606
  expect(startLabel).to.not.equal(endLabel);
613
607
  });
@@ -839,8 +833,4 @@ describe('<lion-input-datepicker>', () => {
839
833
  ).to.be.true;
840
834
  });
841
835
  });
842
-
843
- describe('Run suite', () => {
844
- runDatepickerSuite();
845
- });
846
836
  });
@@ -10,8 +10,6 @@ import { LocalizeMixin } from '@lion/ui/localize-no-side-effects.js';
10
10
  export class LionInputEmail extends LocalizeMixin(LionInput) {
11
11
  constructor() {
12
12
  super();
13
- this.autocomplete = 'email';
14
-
15
13
  // local-part@domain where the local part may be up to 64 characters long
16
14
  // and the domain may have a maximum of 255 characters.
17
15
  // @see https://www.wikiwand.com/en/Email_address
@@ -15,12 +15,6 @@ describe('<lion-input-email>', () => {
15
15
  expect(_inputNode.type).to.equal('text');
16
16
  });
17
17
 
18
- it('sets autocomplete to "email"', async () => {
19
- const el = await fixture(`<lion-input-email></lion-input-email>`);
20
- // @ts-expect-error [allow-protected] inside tests
21
- expect(el._inputNode.getAttribute('autocomplete')).to.equal('email');
22
- });
23
-
24
18
  it('has validator "IsEmail" applied by default', async () => {
25
19
  // More elaborate tests can be found in lion-validate/test/StringValidators.test.js
26
20
  const el = await fixture(`<lion-input-email></lion-input-email>`);
@@ -2,14 +2,13 @@ import { Validator } from '@lion/ui/form-core.js';
2
2
  import { getLocalizeManager } from '@lion/ui/localize-no-side-effects.js';
3
3
 
4
4
  /**
5
- * @typedef {import('../../form-core/types/validate/index.js').FeedbackMessageData} FeedbackMessageData
6
5
  * @typedef {import('../../form-core/types/validate/validate.js').ValidatorConfig} ValidatorConfig
7
6
  * @typedef {import('../../form-core/types/validate/validate.js').ValidatorParam} ValidatorParam
8
7
  * @typedef {import('../../form-core/types/validate/validate.js').ValidatorOutcome} ValidatorOutcome
9
8
  * @typedef {import('../types/input-file.js').InputFile} InputFile
10
9
  */
11
10
 
12
- /* eslint max-classes-per-file: ["error", 3] */
11
+ /* eslint max-classes-per-file: ["error", 2] */
13
12
  export class IsAcceptedFile extends Validator {
14
13
  static validatorName = 'IsAcceptedFile';
15
14
 
@@ -113,32 +112,3 @@ export class DuplicateFileNames extends Validator {
113
112
  return localizeManager.msg('lion-input-file:uploadTextDuplicateFileName');
114
113
  }
115
114
  }
116
-
117
- export class MaxFileCount extends Validator {
118
- static get validatorName() {
119
- return 'MaxFileCount';
120
- }
121
-
122
- /**
123
- * @param {Partial<FeedbackMessageData>} [data]
124
- * @returns {Promise<string|Element>}
125
- */
126
- static async getMessage(data) {
127
- const localizeManager = getLocalizeManager();
128
- if (!data?.params || typeof data.params !== 'number' || data.params <= 0) {
129
- return 'Invalid MaxFileCount parameter. Please provide a valid number greater than 0.';
130
- }
131
- return localizeManager.msg('lion-input-file:maxFileCountExceeded', {
132
- maxFileCount: data.params,
133
- });
134
- }
135
-
136
- /**
137
- * @param {File[]} value
138
- * @param {number} maxFiles
139
- * @returns {boolean}
140
- */
141
- execute(value, maxFiles = this.param || 0) {
142
- return maxFiles > 0 && value.length > maxFiles;
143
- }
144
- }
@@ -1,5 +1,4 @@
1
1
  import { expect } from '@open-wc/testing';
2
- import { MaxFileCount } from '@lion/ui/input-file.js';
3
2
  import { IsAcceptedFile } from '../src/validators.js';
4
3
 
5
4
  describe('lion-input-file: IsAcceptedFile', () => {
@@ -168,34 +167,4 @@ describe('lion-input-file: IsAcceptedFile', () => {
168
167
  expect(returnVal).to.be.true;
169
168
  });
170
169
  });
171
-
172
- describe('Max File Count', () => {
173
- /**
174
- *
175
- * @param {string} filename
176
- * @returns {File}
177
- */
178
- const newFile = filename => new File([], filename);
179
-
180
- it('Allow up to 2 files', () => {
181
- const validator = new MaxFileCount(2);
182
- expect(MaxFileCount.validatorName).to.equal('MaxFileCount');
183
-
184
- let isEnabled = validator.execute([newFile('file1.txt'), newFile('file2.txt')]);
185
- expect(isEnabled).to.be.false;
186
-
187
- isEnabled = validator.execute([
188
- newFile('file1.txt'),
189
- newFile('file2.txt'),
190
- newFile('file3.txt'),
191
- ]);
192
- expect(isEnabled).to.be.true;
193
- });
194
-
195
- it('Allow any number of files with empty param', () => {
196
- const validator = new MaxFileCount();
197
- const isEnabled = validator.execute([newFile('file1.txt'), newFile('file2.txt')]);
198
- expect(isEnabled).to.be.false;
199
- });
200
- });
201
170
  });
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Файл със същото име на файл вече е налице.',
18
18
  selectTextMultipleFile: 'Избор на файлове',
19
19
  selectTextSingleFile: 'Избор на файл',
20
- maxFileCountExceeded: 'Броят на качените файлове не може да надвишава {maxFileCount}.',
21
20
  };
@@ -18,5 +18,4 @@ export default {
18
18
  selectTextDuplicateFileName: 'Soubor se stejným názvem byl již přítomen.',
19
19
  selectTextMultipleFile: 'Vybrat soubory',
20
20
  selectTextSingleFile: 'Vybrat soubor',
21
- maxFileCountExceeded: 'Počet nahraných souborů nesmí překročit {maxFileCount}.',
22
21
  };
@@ -17,6 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Eine Datei mit demselben Dateinamen war bereits vorhanden.',
18
18
  selectTextMultipleFile: 'Dateien auswählen',
19
19
  selectTextSingleFile: 'Datei auswählen',
20
- maxFileCountExceeded:
21
- 'Die Anzahl der hochgeladenen Dateien darf {maxFileCount} nicht überschreiten.',
22
20
  };
@@ -16,5 +16,4 @@ export default {
16
16
  selectTextDuplicateFileName: 'A file with same filename was already present.',
17
17
  selectTextMultipleFile: 'Select files',
18
18
  selectTextSingleFile: 'Select file',
19
- maxFileCountExceeded: 'The number of uploaded files must not exceed {maxFileCount}.',
20
19
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Ya había un archivo con el mismo nombre de archivo.',
18
18
  selectTextMultipleFile: 'Seleccionar archivos',
19
19
  selectTextSingleFile: 'Seleccionar archivo',
20
- maxFileCountExceeded: 'El número de archivos cargados no puede superar {maxFileCount}.',
21
20
  };
@@ -18,5 +18,4 @@ export default {
18
18
  selectTextDuplicateFileName: 'Un fichier portant le même nom de fichier était déjà présent.',
19
19
  selectTextMultipleFile: 'Sélectionnez des fichiers',
20
20
  selectTextSingleFile: 'Sélectionnez un fichier',
21
- maxFileCountExceeded: 'Le nombre de fichiers téléchargés ne peut pas dépasser {maxFileCount}.',
22
21
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Már volt ilyen nevű fájl.',
18
18
  selectTextMultipleFile: 'Fájl(ok) kiválasztása',
19
19
  selectTextSingleFile: 'Fájl kiválasztása',
20
- maxFileCountExceeded: 'A feltöltött fájlok száma nem haladhatja meg a {maxFileCount}-ot.',
21
20
  };
@@ -16,5 +16,4 @@ export default {
16
16
  selectTextDuplicateFileName: 'File dengan nama file yang sama sudah ada.',
17
17
  selectTextMultipleFile: 'Pilih beberapa file',
18
18
  selectTextSingleFile: 'Pilih berkas',
19
- maxFileCountExceeded: 'Jumlah file yang diunggah tidak boleh melebihi {maxFileCount}.',
20
19
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Un file con lo stesso nome file era già presente.',
18
18
  selectTextMultipleFile: 'Seleziona file',
19
19
  selectTextSingleFile: 'Seleziona file',
20
- maxFileCountExceeded: 'Il numero di file caricati non può superare {maxFileCount}.',
21
20
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Er bestaat al een bestand met dezelfde bestandsnaam.',
18
18
  selectTextMultipleFile: 'Selecteer bestanden',
19
19
  selectTextSingleFile: 'Selecteer bestand',
20
- maxFileCountExceeded: 'Het aantal geüploade bestanden mag niet meer dan {maxFileCount} zijn.',
21
20
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Plik o tej samej nazwie już istnieje.',
18
18
  selectTextMultipleFile: 'Wybierz pliki',
19
19
  selectTextSingleFile: 'Wybierz plik',
20
- maxFileCountExceeded: 'Liczba przesłanych plików nie może przekraczać {maxFileCount}.',
21
20
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Există deja un fişier cu acelaşi nume de fişier.',
18
18
  selectTextMultipleFile: 'Selectare fișiere',
19
19
  selectTextSingleFile: 'Selectare fișier',
20
- maxFileCountExceeded: 'Numărul de fișiere încărcate nu poate depăși {maxFileCount}.',
21
20
  };
@@ -16,5 +16,4 @@ export default {
16
16
  selectTextDuplicateFileName: 'Файл с таким названием уже существует.',
17
17
  selectTextMultipleFile: 'Выберите файлы',
18
18
  selectTextSingleFile: 'Выберите файл',
19
- maxFileCountExceeded: 'Количество загруженных файлов не может превышать {maxFileCount}.',
20
19
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Súbor s rovnakým názvom súboru už existoval.',
18
18
  selectTextMultipleFile: 'Vybrať súbory',
19
19
  selectTextSingleFile: 'Vybrať súbor',
20
- maxFileCountExceeded: 'Počet nahratých súborov nesmie prekročiť {maxFileCount}.',
21
20
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: 'Файл із такою назвою вже існував.',
18
18
  selectTextMultipleFile: 'Виберіть файли',
19
19
  selectTextSingleFile: 'Виберіть файл',
20
- maxFileCountExceeded: 'Кількість завантажених файлів не може перевищувати {maxFileCount}.',
21
20
  };
@@ -17,5 +17,4 @@ export default {
17
17
  selectTextDuplicateFileName: '已存在具有相同文件名的文件。',
18
18
  selectTextMultipleFile: '选择多个文件',
19
19
  selectTextSingleFile: '选择文件',
20
- maxFileCountExceeded: '上传的文件数量不能超过 {maxFileCount} 个。',
21
20
  };
@@ -137,7 +137,6 @@ export class LionInputTel extends LocalizeMixin(LionInput) {
137
137
  */
138
138
  constructor() {
139
139
  super();
140
- this.autocomplete = 'tel';
141
140
 
142
141
  /**
143
142
  * Determines what the formatter output should look like.
@@ -193,6 +192,7 @@ export class LionInputTel extends LocalizeMixin(LionInput) {
193
192
  */
194
193
  firstUpdated(changedProperties) {
195
194
  super.firstUpdated(changedProperties);
195
+
196
196
  // This will trigger the right keyboard on mobile
197
197
  this._inputNode.inputMode = 'tel';
198
198
  }
@@ -222,13 +222,6 @@ export function runInputTelSuite({ klass = LionInputTel } = {}) {
222
222
  expect(el._inputNode.inputMode).to.equal('tel');
223
223
  });
224
224
 
225
- it('sets autocomplete to "tel"', async () => {
226
- const el = await fixture(html` <${tag}></${tag}> `);
227
- await el.updateComplete;
228
- // @ts-expect-error [allow-protected] inside tests
229
- expect(el._inputNode.getAttribute('autocomplete')).to.equal('tel');
230
- });
231
-
232
225
  it('formats according to locale', async () => {
233
226
  const el = await fixture(
234
227
  html` <${tag} .modelValue="${'+31612345678'}" .allowedRegions="${['NL']}"></${tag}> `,
@@ -210,6 +210,7 @@ describe('formatDate', () => {
210
210
  locale,
211
211
  };
212
212
  const parsedDate = /** @type {Date} */ (parseDate('12.10.2019'));
213
+ // @ts-ignore - dynamic locale key access
213
214
  expect(formatDate(parsedDate, options)).to.equal(LOCALE_FORMATTED_DATE_MAP[locale]);
214
215
  });
215
216
  });
@@ -0,0 +1,37 @@
1
+ Allow advanced preprocessing
2
+
3
+ - Turn '1' into '01-__-____'
4
+ - Turn ’20’ into ’20-’, -> ’20-4’ into ’20-04’ etc…
5
+
6
+ See: https://nosir.github.io/cleave.js/(But we should enhance the UX when editing the middle of a date)So:
7
+
8
+ ```js
9
+ /** * @returns {string | { viewValue:string, caretIndex:number } } */
10
+ preprocessor(viewValue, { previousViewValue = ‘’, currentCaretIndex }) {
11
+ const diff = viewValue.length - previousViewValue.length;
12
+ if (diff === -1) && !isNaN(Number(previousViewValue[currentCaretIndex]))) {
13
+ // don’t respond to delete actions
14
+ return viewValue;
15
+ }
16
+
17
+ let newValue = '';
18
+ const strippedVal = viewValue.replace('-', '');
19
+ let dashesPlaced = 0;
20
+ let newCaretIndex;
21
+ for (let i = 0; i < 10; i+= 1) {
22
+ if (i === 2 || i === 4) {
23
+ newValue += ‘-’;
24
+ dashesPlaced += 1;
25
+ }
26
+ else if (i < strippedVal.length + dashesPlaced) {
27
+ newValue += strippedVal[i];
28
+ } else {
29
+ newValue += ‘_’;
30
+ if (newCaretIndex === undefined) {
31
+ newCaretIndex = i;
32
+ }
33
+ }
34
+ }
35
+ return { viewValue: newValue, caretIndex: newCaretIndex };
36
+ }
37
+ ```