@lion/ui 0.22.0 → 0.24.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 (901) hide show
  1. package/README.md +65 -0
  2. package/components/accordion/src/LionAccordion.js +31 -42
  3. package/components/accordion/test/lion-accordion.test.js +108 -134
  4. package/components/button/src/LionButton.js +9 -12
  5. package/components/button/src/LionButtonReset.js +0 -5
  6. package/components/button/src/LionButtonSubmit.js +7 -12
  7. package/components/button/test/demos.screenshots-test.js +50 -11
  8. package/components/button/test/lion-button.test.js +0 -1
  9. package/components/button/test-suites/LionButton.suite.js +135 -145
  10. package/components/button/test-suites/LionButtonReset.suite.js +54 -72
  11. package/components/button/test-suites/LionButtonSubmit.suite.js +49 -68
  12. package/components/calendar/src/LionCalendar.js +151 -104
  13. package/components/calendar/src/calendarStyle.js +0 -1
  14. package/components/calendar/src/utils/createMonth.js +3 -4
  15. package/components/calendar/src/utils/createMultipleMonth.js +15 -7
  16. package/components/calendar/src/utils/createWeek.js +0 -2
  17. package/components/calendar/src/utils/dataTemplate.js +8 -4
  18. package/components/calendar/src/utils/dayTemplate.js +0 -6
  19. package/components/calendar/src/utils/getDayMonthYear.js +6 -2
  20. package/components/calendar/test/demos.screenshots-test.js +40 -9
  21. package/components/calendar/test/lion-calendar.test.js +171 -282
  22. package/components/calendar/test/utils/createMonth.test.js +61 -22
  23. package/components/calendar/test/utils/createMultipleMonth.test.js +14 -7
  24. package/components/calendar/test/utils/createWeek.test.js +51 -17
  25. package/components/calendar/test/utils/dataTemplate.test.js +3 -4
  26. package/components/calendar/test/utils/dayTemplate.test.js +106 -34
  27. package/components/calendar/test/utils/getFirstDayNextMonth.test.js +0 -1
  28. package/components/calendar/test/utils/getLastDayPreviousMonth.test.js +0 -1
  29. package/components/calendar/test/utils/isSameDate.test.js +0 -1
  30. package/components/calendar/test/utils/snapshots/monthTemplate_en-GB_Sunday_2018-12.js +1 -2
  31. package/components/calendar/test-helpers/CalendarObject.js +31 -62
  32. package/components/calendar/test-helpers/DayObject.js +7 -15
  33. package/components/calendar/test-suites/LionCalendar.suite.js +7 -9
  34. package/components/checkbox-group/src/LionCheckboxIndeterminate.js +17 -30
  35. package/components/checkbox-group/test/lion-checkbox-group-integrations.test.js +0 -1
  36. package/components/checkbox-group/test/lion-checkbox-group.test.js +21 -16
  37. package/components/checkbox-group/test/lion-checkbox-indeterminate-integrations.test.js +3 -3
  38. package/components/checkbox-group/test/lion-checkbox-integrations.test.js +3 -2
  39. package/components/checkbox-group/test/lion-checkbox.test.js +30 -16
  40. package/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.js +147 -191
  41. package/components/collapsible/src/LionCollapsible.js +10 -15
  42. package/components/collapsible/test/lion-collapsible.test.js +4 -18
  43. package/components/combobox/src/LionCombobox.js +45 -55
  44. package/components/combobox/src/utils/makeMatchingTextBold.js +2 -5
  45. package/components/combobox/src/validators.js +0 -1
  46. package/components/combobox/test/lion-combobox-integrations.test.js +6 -6
  47. package/components/combobox/test/lion-combobox.test.js +598 -860
  48. package/components/combobox/test/validators.test.js +6 -13
  49. package/components/combobox/test-helpers/combobox-helpers.js +24 -11
  50. package/components/core/src/DisabledMixin.js +61 -66
  51. package/components/core/src/DisabledWithTabIndexMixin.js +76 -83
  52. package/components/core/src/EventTargetShim.js +1 -4
  53. package/components/core/src/ScopedElementsMixin.js +4 -15
  54. package/components/core/src/ScopedStylesController.js +1 -5
  55. package/components/core/src/SlotMixin.js +236 -239
  56. package/components/core/src/browserDetection.js +5 -12
  57. package/components/core/test/DisabledMixin.test.js +24 -39
  58. package/components/core/test/DisabledWithTabIndexMixin.test.js +21 -34
  59. package/components/core/test/EventTargetShim.test.js +0 -8
  60. package/components/core/test/ScopedElementsMixin.test.js +22 -38
  61. package/components/core/test/ScopedStylesController.test.js +11 -20
  62. package/components/core/test/SlotMixin.test.js +102 -154
  63. package/components/core/test-helpers/getCachedFixture.js +5 -11
  64. package/components/core/types/SlotMixinTypes.ts +8 -3
  65. package/components/dialog/src/LionDialog.js +4 -3
  66. package/components/dialog/test/lion-dialog.integration.test.js +10 -20
  67. package/components/dialog/test/lion-dialog.test.js +48 -62
  68. package/components/dialog/test-helpers/test-router.js +4 -6
  69. package/components/drawer/src/LionDrawer.js +18 -34
  70. package/components/drawer/src/drawerStyle.js +0 -1
  71. package/components/drawer/test/lion-drawer.test.js +1 -17
  72. package/components/fieldset/test/lion-fieldset.test.js +6 -4
  73. package/components/form/src/LionForm.js +18 -13
  74. package/components/form/test/lion-form.test.js +22 -52
  75. package/components/form-core/src/FocusMixin.js +172 -174
  76. package/components/form-core/src/FormControlMixin.js +811 -813
  77. package/components/form-core/src/FormatMixin.js +537 -537
  78. package/components/form-core/src/InteractionStateMixin.js +196 -183
  79. package/components/form-core/src/LionField.js +9 -5
  80. package/components/form-core/src/NativeTextFieldMixin.js +114 -116
  81. package/components/form-core/src/choice-group/ChoiceGroupMixin.js +322 -357
  82. package/components/form-core/src/choice-group/ChoiceInputMixin.js +306 -296
  83. package/components/form-core/src/choice-group/CustomChoiceGroupMixin.js +114 -139
  84. package/components/form-core/src/form-group/FormElementsHaveNoError.js +0 -2
  85. package/components/form-core/src/form-group/FormGroupMixin.js +551 -557
  86. package/components/form-core/src/registration/FormRegisteringMixin.js +72 -71
  87. package/components/form-core/src/registration/FormRegistrarMixin.js +201 -217
  88. package/components/form-core/src/registration/FormRegistrarPortalMixin.js +31 -37
  89. package/components/form-core/src/utils/SyncUpdatableMixin.js +106 -117
  90. package/components/form-core/src/utils/getAriaElementsInRightDomOrder.js +1 -2
  91. package/components/form-core/src/validate/LionValidationFeedback.js +12 -8
  92. package/components/form-core/src/validate/Unparseable.js +4 -2
  93. package/components/form-core/src/validate/ValidateMixin.js +829 -883
  94. package/components/form-core/src/validate/Validator.js +3 -6
  95. package/components/form-core/src/validate/resultValidators/DefaultSuccess.js +1 -2
  96. package/components/form-core/src/validate/validators/DateValidators.js +0 -5
  97. package/components/form-core/src/validate/validators/NumberValidators.js +1 -5
  98. package/components/form-core/src/validate/validators/Required.js +1 -1
  99. package/components/form-core/src/validate/validators/StringValidators.js +1 -8
  100. package/components/form-core/test/FocusMixin.test.js +96 -82
  101. package/components/form-core/test/FormControlMixin.test.js +120 -176
  102. package/components/form-core/test/FormRegistrationMixins.test.js +0 -2
  103. package/components/form-core/test/FormatMixin.test.js +0 -1
  104. package/components/form-core/test/InteractionStateMixin.test.js +0 -1
  105. package/components/form-core/test/NativeTextFieldMixin.test.js +0 -1
  106. package/components/form-core/test/choice-group/ChoiceGroupMixin.test.js +0 -1
  107. package/components/form-core/test/choice-group/ChoiceInputMixin.test.js +0 -1
  108. package/components/form-core/test/choice-group/CustomChoiceGroupMixin.integrations.test.js +6 -8
  109. package/components/form-core/test/choice-group/CustomChoiceGroupMixin.test.js +0 -3
  110. package/components/form-core/test/form-group/FormGroupMixin.test.js +0 -1
  111. package/components/form-core/test/lion-field.test.js +88 -98
  112. package/components/form-core/test/utils/SyncUpdatableMixin.test.js +51 -65
  113. package/components/form-core/test/utils/getAriaElementsInRightDomOrder.test.js +3 -3
  114. package/components/form-core/test/validate/DateValidators.test.js +5 -27
  115. package/components/form-core/test/validate/NumberValidators.test.js +4 -16
  116. package/components/form-core/test/validate/Required.test.js +8 -21
  117. package/components/form-core/test/validate/ResultValidator.test.js +1 -2
  118. package/components/form-core/test/validate/StringValidators.test.js +4 -35
  119. package/components/form-core/test/validate/ValidateMixin.test.js +0 -1
  120. package/components/form-core/test/validate/ValidateMixinFeedbackPart.test.js +0 -1
  121. package/components/form-core/test/validate/Validator.test.js +39 -34
  122. package/components/form-core/test/validate/lion-validation-feedback.test.js +81 -43
  123. package/components/form-core/test-helpers/ExampleValidators.js +0 -5
  124. package/components/form-core/test-helpers/getFormControlMembers.js +2 -2
  125. package/components/form-core/test-helpers/mimicUserInput.js +5 -1
  126. package/components/form-core/test-suites/FormRegistrationMixins.suite.js +65 -122
  127. package/components/form-core/test-suites/FormatMixin.suite.js +202 -227
  128. package/components/form-core/test-suites/InteractionStateMixin.suite.js +47 -60
  129. package/components/form-core/test-suites/NativeTextFieldMixin.suite.js +8 -11
  130. package/components/form-core/test-suites/ValidateMixin.suite.js +280 -359
  131. package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +112 -163
  132. package/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.js +185 -218
  133. package/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.js +116 -109
  134. package/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.js +36 -70
  135. package/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.js +57 -65
  136. package/components/form-core/test-suites/form-group/FormGroupMixin.suite.js +664 -523
  137. package/components/form-core/translations/bg-BG.js +0 -1
  138. package/components/form-core/translations/cs-CZ.js +0 -1
  139. package/components/form-core/translations/de-DE.js +0 -1
  140. package/components/form-core/translations/en-AU.js +0 -1
  141. package/components/form-core/translations/en-GB.js +0 -1
  142. package/components/form-core/translations/en-US.js +0 -1
  143. package/components/form-core/translations/es-ES.js +0 -1
  144. package/components/form-core/translations/fr-BE.js +0 -1
  145. package/components/form-core/translations/fr-FR.js +0 -1
  146. package/components/form-core/translations/hu-HU.js +0 -1
  147. package/components/form-core/translations/it-IT.js +0 -1
  148. package/components/form-core/translations/nl-BE.js +0 -1
  149. package/components/form-core/translations/nl-NL.js +0 -1
  150. package/components/form-core/translations/pl-PL.js +0 -1
  151. package/components/form-core/translations/ro-RO.js +0 -1
  152. package/components/form-core/translations/ru-RU.js +0 -1
  153. package/components/form-core/translations/sk-SK.js +0 -1
  154. package/components/form-core/translations/tr-TR.js +0 -1
  155. package/components/form-core/translations/uk-UA.js +0 -1
  156. package/components/form-core/types/choice-group/ChoiceGroupMixinTypes.ts +5 -0
  157. package/components/form-integrations/test/dialog-integrations.test.js +1 -4
  158. package/components/form-integrations/test/form-group-methods.test.js +28 -31
  159. package/components/form-integrations/test/form-integrations.test.js +27 -28
  160. package/components/form-integrations/test/form-validation-integrations.test.js +21 -29
  161. package/components/form-integrations/test/helpers/umbrella-form.js +3 -5
  162. package/components/form-integrations/test/model-value-consistency.test.js +75 -77
  163. package/components/form-integrations/test/model-value-event.test.js +10 -20
  164. package/components/helpers/src/SbActionLogger.js +13 -17
  165. package/components/helpers/src/SbLocaleSwitcher.js +5 -5
  166. package/components/helpers/src/sortEachDepth.js +0 -2
  167. package/components/helpers/test/renderLitAsNode.test.js +0 -4
  168. package/components/helpers/test/sb-action-logger.test.js +24 -55
  169. package/components/icon/src/IconManager.js +0 -2
  170. package/components/icon/src/LionIcon.js +2 -7
  171. package/components/icon/src/icons.js +0 -2
  172. package/components/icon/test/IconManager.test.js +0 -15
  173. package/components/icon/test/hammer.svg.js +3 -4
  174. package/components/icon/test/heart.svg.js +3 -4
  175. package/components/icon/test/lion-icon.test.js +14 -43
  176. package/components/input/src/LionInput.js +2 -8
  177. package/components/input/test/input-integrations.test.js +0 -5
  178. package/components/input/test/lion-input-integrations.test.js +0 -4
  179. package/components/input/test/lion-input.test.js +28 -58
  180. package/components/input/test-helpers/getInputMembers.js +2 -2
  181. package/components/input-amount/src/LionInputAmount.js +37 -26
  182. package/components/input-amount/src/formatters.js +4 -5
  183. package/components/input-amount/src/parsers.js +0 -3
  184. package/components/input-amount/test/formatters.test.js +102 -80
  185. package/components/input-amount/test/lion-input-amount-integrations.test.js +0 -4
  186. package/components/input-amount/test/lion-input-amount.test.js +155 -164
  187. package/components/input-amount/test/parsers.test.js +33 -17
  188. package/components/input-amount/test/preprocessors.test.js +0 -3
  189. package/components/input-amount-dropdown/src/LionInputAmountDropdown.js +49 -59
  190. package/components/input-amount-dropdown/src/currencyUtil.js +8 -7
  191. package/components/input-amount-dropdown/src/parsers.js +0 -1
  192. package/components/input-amount-dropdown/src/validators.js +0 -1
  193. package/components/input-amount-dropdown/test/LionInputAmountDropdown.test.js +34 -36
  194. package/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.js +18 -13
  195. package/components/input-amount-dropdown/test-helpers/mimicUserChangingDropdown.js +5 -1
  196. package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +132 -107
  197. package/components/input-date/src/LionInputDate.js +4 -3
  198. package/components/input-date/test/lion-input-date-integrations.test.js +0 -3
  199. package/components/input-date/test/lion-input-date.test.js +19 -32
  200. package/components/input-datepicker/src/LionInputDatepicker.js +17 -29
  201. package/components/input-datepicker/src/localizeNamespaceLoader.js +1 -2
  202. package/components/input-datepicker/test/lion-input-datepicker-integrations.test.js +0 -3
  203. package/components/input-datepicker/test/lion-input-datepicker.test.js +88 -153
  204. package/components/input-datepicker/test-helpers/DatepickerInputObject.js +9 -12
  205. package/components/input-datepicker/test-suites/LionInputDatepicker.suite.js +6 -4
  206. package/components/input-datepicker/translations/bg-BG.js +0 -1
  207. package/components/input-datepicker/translations/cs-CZ.js +0 -1
  208. package/components/input-datepicker/translations/de-DE.js +0 -1
  209. package/components/input-datepicker/translations/en-AU.js +0 -1
  210. package/components/input-datepicker/translations/en-GB.js +0 -1
  211. package/components/input-datepicker/translations/en-US.js +0 -1
  212. package/components/input-datepicker/translations/es-ES.js +0 -1
  213. package/components/input-datepicker/translations/fr-BE.js +0 -1
  214. package/components/input-datepicker/translations/fr-FR.js +0 -1
  215. package/components/input-datepicker/translations/hu-HU.js +0 -1
  216. package/components/input-datepicker/translations/it-IT.js +0 -1
  217. package/components/input-datepicker/translations/nl-BE.js +0 -1
  218. package/components/input-datepicker/translations/nl-NL.js +0 -1
  219. package/components/input-datepicker/translations/pl-PL.js +0 -1
  220. package/components/input-datepicker/translations/ro-RO.js +0 -1
  221. package/components/input-datepicker/translations/ru-RU.js +0 -1
  222. package/components/input-datepicker/translations/sk-SK.js +0 -1
  223. package/components/input-datepicker/translations/tr-TR.js +0 -1
  224. package/components/input-datepicker/translations/uk-UA.js +0 -1
  225. package/components/input-email/test/lion-input-email-integrations.test.js +0 -2
  226. package/components/input-email/test/lion-input-email.test.js +1 -7
  227. package/components/input-file/src/FileHandle.js +0 -3
  228. package/components/input-file/src/LionInputFile.js +85 -83
  229. package/components/input-file/src/LionSelectedFileList.js +12 -12
  230. package/components/input-file/src/validators.js +10 -9
  231. package/components/input-file/test/FileValidators.test.js +170 -80
  232. package/components/input-file/test/lion-input-file.test.js +160 -244
  233. package/components/input-file/test/lion-selected-file-list.test.js +13 -22
  234. package/components/input-file/translations/bg-BG.js +0 -1
  235. package/components/input-file/translations/cs-CZ.js +0 -1
  236. package/components/input-file/translations/de-DE.js +0 -1
  237. package/components/input-file/translations/en-AU.js +0 -1
  238. package/components/input-file/translations/en-GB.js +0 -1
  239. package/components/input-file/translations/en-PH.js +0 -1
  240. package/components/input-file/translations/en-US.js +0 -1
  241. package/components/input-file/translations/en.js +2 -1
  242. package/components/input-file/translations/es-ES.js +0 -1
  243. package/components/input-file/translations/fr-BE.js +0 -1
  244. package/components/input-file/translations/fr-FR.js +0 -1
  245. package/components/input-file/translations/hu-HU.js +0 -1
  246. package/components/input-file/translations/id-ID.js +0 -1
  247. package/components/input-file/translations/id.js +2 -1
  248. package/components/input-file/translations/it-IT.js +0 -1
  249. package/components/input-file/translations/nl-BE.js +0 -1
  250. package/components/input-file/translations/nl-NL.js +0 -1
  251. package/components/input-file/translations/pl-PL.js +0 -1
  252. package/components/input-file/translations/ro-RO.js +0 -1
  253. package/components/input-file/translations/ru-RU.js +0 -1
  254. package/components/input-file/translations/sk-SK.js +0 -1
  255. package/components/input-file/translations/uk-UA.js +0 -1
  256. package/components/input-file/translations/zh-CN.js +0 -1
  257. package/components/input-iban/src/validators.js +6 -11
  258. package/components/input-iban/test/formatters.test.js +0 -3
  259. package/components/input-iban/test/lion-input-iban-integrations.test.js +0 -2
  260. package/components/input-iban/test/lion-input-iban.test.js +1 -9
  261. package/components/input-iban/test/parsers.test.js +0 -2
  262. package/components/input-iban/test/validators.test.js +0 -12
  263. package/components/input-iban/translations/bg-BG.js +0 -1
  264. package/components/input-iban/translations/cs-CZ.js +0 -1
  265. package/components/input-iban/translations/de-DE.js +0 -1
  266. package/components/input-iban/translations/en-AU.js +0 -1
  267. package/components/input-iban/translations/en-GB.js +0 -1
  268. package/components/input-iban/translations/en-US.js +0 -1
  269. package/components/input-iban/translations/es-ES.js +0 -1
  270. package/components/input-iban/translations/fr-BE.js +0 -1
  271. package/components/input-iban/translations/fr-FR.js +0 -1
  272. package/components/input-iban/translations/hu-HU.js +0 -1
  273. package/components/input-iban/translations/it-IT.js +0 -1
  274. package/components/input-iban/translations/nl-BE.js +0 -1
  275. package/components/input-iban/translations/nl-NL.js +0 -1
  276. package/components/input-iban/translations/pl-PL.js +0 -1
  277. package/components/input-iban/translations/ro-RO.js +0 -1
  278. package/components/input-iban/translations/ru-RU.js +0 -1
  279. package/components/input-iban/translations/sk-SK.js +0 -1
  280. package/components/input-iban/translations/uk-UA.js +0 -1
  281. package/components/input-range/src/LionInputRange.js +18 -19
  282. package/components/input-range/test/lion-input-range.test.js +23 -48
  283. package/components/input-range/translations/bg-BG.js +0 -1
  284. package/components/input-range/translations/cs-CZ.js +0 -1
  285. package/components/input-range/translations/de-DE.js +0 -1
  286. package/components/input-range/translations/en-AU.js +0 -1
  287. package/components/input-range/translations/en-GB.js +0 -1
  288. package/components/input-range/translations/en-PH.js +0 -1
  289. package/components/input-range/translations/en-US.js +0 -1
  290. package/components/input-range/translations/es-ES.js +0 -1
  291. package/components/input-range/translations/fr-BE.js +0 -1
  292. package/components/input-range/translations/fr-FR.js +0 -1
  293. package/components/input-range/translations/hu-HU.js +0 -1
  294. package/components/input-range/translations/it-IT.js +0 -1
  295. package/components/input-range/translations/nl-BE.js +0 -1
  296. package/components/input-range/translations/nl-NL.js +0 -1
  297. package/components/input-range/translations/pl-PL.js +0 -1
  298. package/components/input-range/translations/ro-RO.js +0 -1
  299. package/components/input-range/translations/ru-RU.js +0 -1
  300. package/components/input-range/translations/sk-SK.js +0 -1
  301. package/components/input-range/translations/uk-UA.js +0 -1
  302. package/components/input-range/translations/zh-CN.js +0 -1
  303. package/components/input-stepper/src/LionInputStepper.js +19 -38
  304. package/components/input-stepper/test/lion-input-stepper-integrations.test.js +0 -1
  305. package/components/input-stepper/test/lion-input-stepper.test.js +0 -1
  306. package/components/input-stepper/test-suites/lion-input-stepper.integration.suite.js +0 -2
  307. package/components/input-stepper/test-suites/lion-input-stepper.suite.js +56 -105
  308. package/components/input-stepper/translations/bg-BG.js +0 -1
  309. package/components/input-stepper/translations/cs-CZ.js +0 -1
  310. package/components/input-stepper/translations/de-DE.js +0 -1
  311. package/components/input-stepper/translations/en-AU.js +0 -1
  312. package/components/input-stepper/translations/en-GB.js +0 -1
  313. package/components/input-stepper/translations/en-US.js +0 -1
  314. package/components/input-stepper/translations/es-ES.js +0 -1
  315. package/components/input-stepper/translations/fr-BE.js +0 -1
  316. package/components/input-stepper/translations/fr-FR.js +0 -1
  317. package/components/input-stepper/translations/hu-HU.js +0 -1
  318. package/components/input-stepper/translations/it-IT.js +0 -1
  319. package/components/input-stepper/translations/nl-BE.js +0 -1
  320. package/components/input-stepper/translations/nl-NL.js +0 -1
  321. package/components/input-stepper/translations/pl-PL.js +0 -1
  322. package/components/input-stepper/translations/ro-RO.js +0 -1
  323. package/components/input-stepper/translations/ru-RU.js +0 -1
  324. package/components/input-stepper/translations/sk-SK.js +0 -1
  325. package/components/input-stepper/translations/uk-UA.js +0 -1
  326. package/components/input-tel/src/LionInputTel.js +53 -37
  327. package/components/input-tel/src/PhoneUtilManager.js +6 -4
  328. package/components/input-tel/src/formatters.js +12 -10
  329. package/components/input-tel/src/parsers.js +3 -3
  330. package/components/input-tel/src/preprocessors.js +15 -7
  331. package/components/input-tel/src/validators.js +4 -6
  332. package/components/input-tel/test/LionInputTel.test.js +4 -2
  333. package/components/input-tel/test/formatters.test.js +22 -10
  334. package/components/input-tel/test/parsers.test.js +40 -11
  335. package/components/input-tel/test/preprocessors.test.js +24 -13
  336. package/components/input-tel/test/validators.test.js +15 -13
  337. package/components/input-tel/test-helpers/mockPhoneUtilManager.js +7 -6
  338. package/components/input-tel/test-suites/LionInputTel.suite.js +33 -73
  339. package/components/input-tel/translations/bg-BG.js +0 -1
  340. package/components/input-tel/translations/cs-CZ.js +0 -1
  341. package/components/input-tel/translations/de-DE.js +0 -1
  342. package/components/input-tel/translations/en-AU.js +0 -1
  343. package/components/input-tel/translations/en-GB.js +0 -1
  344. package/components/input-tel/translations/en-US.js +0 -1
  345. package/components/input-tel/translations/es-ES.js +0 -1
  346. package/components/input-tel/translations/fr-BE.js +0 -1
  347. package/components/input-tel/translations/fr-FR.js +0 -1
  348. package/components/input-tel/translations/hu-HU.js +0 -1
  349. package/components/input-tel/translations/it-IT.js +0 -1
  350. package/components/input-tel/translations/nl-BE.js +0 -1
  351. package/components/input-tel/translations/nl-NL.js +0 -1
  352. package/components/input-tel/translations/pl-PL.js +0 -1
  353. package/components/input-tel/translations/ro-RO.js +0 -1
  354. package/components/input-tel/translations/ru-RU.js +0 -1
  355. package/components/input-tel/translations/sk-SK.js +0 -1
  356. package/components/input-tel/translations/uk-UA.js +0 -1
  357. package/components/input-tel-dropdown/src/LionInputTelDropdown.js +10 -28
  358. package/components/input-tel-dropdown/src/regionCodeToLocale.js +3 -1
  359. package/components/input-tel-dropdown/test/LionInputTelDropdown.test.js +31 -38
  360. package/components/input-tel-dropdown/test/regionCodeToLocale.test.js +0 -1
  361. package/components/input-tel-dropdown/test-helpers/mimicUserChangingDropdown.js +5 -1
  362. package/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.js +16 -11
  363. package/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js +54 -79
  364. package/components/listbox/src/LionListbox.js +4 -1
  365. package/components/listbox/src/LionOption.js +8 -7
  366. package/components/listbox/src/LionOptions.js +0 -3
  367. package/components/listbox/src/ListboxMixin.js +801 -819
  368. package/components/listbox/test/lion-listbox.test.js +0 -1
  369. package/components/listbox/test/lion-option.test.js +53 -64
  370. package/components/listbox/test/lion-options.test.js +3 -4
  371. package/components/listbox/test-helpers/getListboxMembers.js +6 -3
  372. package/components/listbox/test-suites/ListboxMixin.suite.js +101 -261
  373. package/components/listbox/types/ListboxMixinTypes.ts +7 -1
  374. package/components/localize/src/LocalizeManager.js +40 -40
  375. package/components/localize/src/LocalizeMixin.js +130 -157
  376. package/components/localize/src/date/formatDate.js +1 -5
  377. package/components/localize/src/date/getDateFormatBasedOnLocale.js +5 -3
  378. package/components/localize/src/date/getMonthNames.js +3 -5
  379. package/components/localize/src/date/getWeekdayNames.js +1 -5
  380. package/components/localize/src/date/parseDate.js +5 -20
  381. package/components/localize/src/date/utils/normalizeIntlDate.js +0 -7
  382. package/components/localize/src/getLocalizeManager.js +0 -3
  383. package/components/localize/src/number/formatNumber.js +3 -7
  384. package/components/localize/src/number/formatNumberToParts.js +52 -18
  385. package/components/localize/src/number/getCurrencyName.js +5 -5
  386. package/components/localize/src/number/getFractionDigits.js +4 -4
  387. package/components/localize/src/number/getSeparatorsFromNumber.js +1 -3
  388. package/components/localize/src/number/parseNumber.js +0 -3
  389. package/components/localize/src/number/utils/normalize-format-number-to-parts/forceAddGroupSeparators.js +0 -1
  390. package/components/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceBetweenCurrencyCodeAndNumber.js +4 -1
  391. package/components/localize/test/LocalizeManager.test.js +385 -278
  392. package/components/localize/test/LocalizeMixin.test.js +28 -112
  393. package/components/localize/test/date/formatDate.test.js +18 -48
  394. package/components/localize/test/date/getDateFormatBasedOnLocale.test.js +0 -3
  395. package/components/localize/test/date/getMonthNames.test.js +27 -12
  396. package/components/localize/test/date/getWeekdayNames.test.js +93 -49
  397. package/components/localize/test/date/normalizeDateTime.test.js +0 -2
  398. package/components/localize/test/date/parseDate.test.js +12 -16
  399. package/components/localize/test/getLocalizeManager.test.js +0 -3
  400. package/components/localize/test/isLocalizeESModule.test.js +32 -13
  401. package/components/localize/test/localize.test.js +0 -4
  402. package/components/localize/test/number/formatNumber.test.js +215 -106
  403. package/components/localize/test/number/formatNumberToParts.test.js +31 -38
  404. package/components/localize/test/number/getCurrencyName.test.js +20 -6
  405. package/components/localize/test/number/getDecimalSeparator.test.js +5 -4
  406. package/components/localize/test/number/getFractionDigits.test.js +0 -2
  407. package/components/localize/test/number/getGroupSeparator.test.js +0 -2
  408. package/components/localize/test/number/getSeparatorsFromNumber.test.js +5 -3
  409. package/components/localize/test/number/parseNumber.test.js +123 -56
  410. package/components/localize/test/side-effect-free-entrypoint.test.js +0 -6
  411. package/components/localize/test-helpers/fake-imports.js +11 -6
  412. package/components/localize/test-helpers/localizeTearDown.js +0 -1
  413. package/components/menu/README.md +360 -0
  414. package/components/menu/src/InteractiveListMixin.js +866 -0
  415. package/components/menu/src/LionMenu.js +423 -0
  416. package/components/menu/src/MoreButtonMenuMixin.js +272 -0
  417. package/components/menu/src/MultiLevelListMixin.js +306 -0
  418. package/components/menu/src/utils/isInView.js +25 -0
  419. package/components/menu/src/utils/listItemInteractions.js +124 -0
  420. package/components/menu/test/InteractiveListMixin.test.js +2 -0
  421. package/components/menu/test/MoreButtonMenuMixin.test.js +5 -0
  422. package/components/menu/test/MultiLevelListMixin.test.js +2 -0
  423. package/components/menu/test/lion-menu-interactions.test.js +2 -0
  424. package/components/menu/test/lion-menu.test.js +18 -0
  425. package/components/menu/test-helpers/mimicKeyPress.js +19 -0
  426. package/components/menu/test-suites/InteractiveListMixin.suite.js +498 -0
  427. package/components/menu/test-suites/LionMenu.suite.js +107 -0
  428. package/components/menu/test-suites/LionMenuInteractions.suite.js +561 -0
  429. package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +365 -0
  430. package/components/menu/test-suites/MultiLevelListMixin.suite.js +291 -0
  431. package/components/menu/types/InteractiveListMixinTypes.ts +126 -0
  432. package/components/menu/types/MoreButtonMenuMixinTypes.ts +51 -0
  433. package/components/menu/types/MultiLevelListMixinTypes.ts +28 -0
  434. package/components/menu/types/OverlayWithListInvokerMixinTypes.ts +61 -0
  435. package/components/overlays/NEXT.md +49 -0
  436. package/components/overlays/src/ArrowMixin.js +111 -127
  437. package/components/overlays/src/OverlayController.js +440 -246
  438. package/components/overlays/src/OverlayMixin.js +130 -68
  439. package/components/overlays/src/OverlaysManager.js +30 -32
  440. package/components/overlays/src/configurations/visibility-trigger-partials/withClickInteraction.js +0 -1
  441. package/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.js +11 -11
  442. package/components/overlays/src/configurations/withBottomSheetConfig.js +12 -13
  443. package/components/overlays/src/configurations/withDropdownConfig.js +4 -2
  444. package/components/overlays/src/configurations/withModalDialogConfig.js +12 -13
  445. package/components/overlays/src/configurations/withPopoverConfig.js +27 -25
  446. package/components/overlays/src/configurations/withTooltipConfig.js +15 -13
  447. package/components/overlays/src/overlayDocumentStyle.js +1 -1
  448. package/components/overlays/src/overlayShadowDomStyle.js +0 -1
  449. package/components/overlays/src/singleton.js +0 -2
  450. package/components/overlays/src/utils/adopt-styles.js +19 -19
  451. package/components/overlays/src/utils/deep-contains.js +7 -6
  452. package/components/overlays/src/utils/get-focusable-elements.js +7 -10
  453. package/components/overlays/src/utils/inert-siblings.js +2 -4
  454. package/components/overlays/src/utils/is-equal-config.js +14 -6
  455. package/components/overlays/src/utils/is-visible.js +0 -1
  456. package/components/overlays/src/utils/simulate-tab.js +1 -4
  457. package/components/overlays/src/utils/sort-by-tabindex.js +2 -4
  458. package/components/overlays/test/ArrowMixin.test.js +18 -30
  459. package/components/overlays/test/OverlayController.test.js +551 -533
  460. package/components/overlays/test/OverlayMixin.test.js +0 -2
  461. package/components/overlays/test/OverlaysManager.test.js +30 -35
  462. package/components/overlays/test/global-positioning.test.js +6 -10
  463. package/components/overlays/test/local-positioning.test.js +101 -103
  464. package/components/overlays/test/utils-tests/active-element.test.js +12 -27
  465. package/components/overlays/test/utils-tests/adopt-styles.test.js +25 -56
  466. package/components/overlays/test/utils-tests/deep-contains.test.js +73 -74
  467. package/components/overlays/test/utils-tests/get-focusable-elements.test.js +6 -23
  468. package/components/overlays/test/utils-tests/is-equal-config.test.js +32 -13
  469. package/components/overlays/test/utils-tests/visibility.test.js +44 -79
  470. package/components/overlays/test-helpers/createShadowHost.js +5 -3
  471. package/components/overlays/test-helpers/normalizeTransformStyle.js +2 -4
  472. package/components/overlays/test-suites/OverlayMixin.suite.js +159 -188
  473. package/components/overlays/test-suites/WithHoverInteraction.suite.js +96 -79
  474. package/components/overlays/translations/bg-BG.js +0 -1
  475. package/components/overlays/translations/cs-CZ.js +0 -1
  476. package/components/overlays/translations/de-DE.js +0 -1
  477. package/components/overlays/translations/en-AU.js +0 -1
  478. package/components/overlays/translations/en-GB.js +0 -1
  479. package/components/overlays/translations/en-US.js +0 -1
  480. package/components/overlays/translations/es-ES.js +0 -1
  481. package/components/overlays/translations/fr-BE.js +0 -1
  482. package/components/overlays/translations/fr-FR.js +0 -1
  483. package/components/overlays/translations/hu-HU.js +0 -1
  484. package/components/overlays/translations/it-IT.js +0 -1
  485. package/components/overlays/translations/nl-BE.js +0 -1
  486. package/components/overlays/translations/nl-NL.js +0 -1
  487. package/components/overlays/translations/pl-PL.js +0 -1
  488. package/components/overlays/translations/ro-RO.js +0 -1
  489. package/components/overlays/translations/ru-RU.js +0 -1
  490. package/components/overlays/translations/sk-SK.js +0 -1
  491. package/components/overlays/translations/tr-TR.js +0 -1
  492. package/components/overlays/translations/uk-UA.js +0 -1
  493. package/components/overlays/types/ArrowMixinTypes.ts +1 -3
  494. package/components/overlays/types/OverlayConfig.ts +20 -5
  495. package/components/overlays/types/OverlayMixinTypes.ts +2 -0
  496. package/components/pagination/src/LionPagination.js +9 -12
  497. package/components/pagination/test/lion-pagination.test.js +18 -50
  498. package/components/progress-indicator/src/LionProgressIndicator.js +10 -12
  499. package/components/progress-indicator/test/lion-progress-indicator.test.js +1 -22
  500. package/components/radio-group/src/LionRadioGroup.js +1 -2
  501. package/components/radio-group/test/lion-radio-group-integrations.test.js +0 -1
  502. package/components/radio-group/test/lion-radio-group.test.js +27 -27
  503. package/components/radio-group/test/lion-radio-integrations.test.js +3 -2
  504. package/components/radio-group/test/lion-radio.test.js +30 -16
  505. package/components/select/src/LionSelect.js +12 -13
  506. package/components/select/test/lion-select.test.js +7 -12
  507. package/components/select-rich/src/LionSelectInvoker.js +18 -11
  508. package/components/select-rich/src/LionSelectRich.js +32 -43
  509. package/components/select-rich/test/demos.screenshots-test.js +40 -9
  510. package/components/select-rich/test/lion-select-invoker.test.js +26 -43
  511. package/components/select-rich/test/lion-select-listbox-suite-integration.test.js +3 -3
  512. package/components/select-rich/test/lion-select-rich-dialog-integration.test.js +4 -9
  513. package/components/select-rich/test/lion-select-rich-interaction.test.js +154 -101
  514. package/components/select-rich/test/lion-select-rich-upgrade.test.js +26 -0
  515. package/components/select-rich/test/lion-select-rich.test.js +153 -195
  516. package/components/select-rich/test-helpers/getSelectRichMembers.js +4 -1
  517. package/components/steps/src/LionStep.js +21 -12
  518. package/components/steps/src/LionSteps.js +25 -25
  519. package/components/steps/test/lion-step.test.js +18 -25
  520. package/components/steps/test/lion-steps.test.js +45 -78
  521. package/components/switch/src/LionSwitch.js +2 -7
  522. package/components/switch/src/LionSwitchButton.js +5 -6
  523. package/components/switch/test/lion-switch-button.test.js +16 -28
  524. package/components/switch/test/lion-switch.test.js +17 -31
  525. package/components/tabs/src/LionTabs.js +25 -28
  526. package/components/tabs/test/lion-tabs.test.js +156 -154
  527. package/components/textarea/src/LionTextarea.js +4 -23
  528. package/components/textarea/test/lion-textarea-integrations.test.js +0 -5
  529. package/components/textarea/test/lion-textarea.test.js +2 -28
  530. package/components/tooltip/src/LionTooltip.js +6 -6
  531. package/components/tooltip/test/lion-tooltip.test.js +75 -102
  532. package/components/validate-messages/src/getLocalizedMessage.js +8 -7
  533. package/components/validate-messages/src/loadDefaultFeedbackMessages.js +3 -1
  534. package/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.js +9 -5
  535. package/components/validate-messages/src/per-entrypoint/loadComboboxMessagesNoSideEffects.js +5 -2
  536. package/components/validate-messages/src/per-entrypoint/loadFormCoreMessagesNoSideEffects.js +99 -35
  537. package/components/validate-messages/src/per-entrypoint/loadInputTelMessagesNoSideEffects.js +4 -3
  538. package/components/validate-messages/test/loadDefaultFeedbackMessages.test.js +5 -3
  539. package/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.test.js +80 -45
  540. package/components/validate-messages/translations/bg-BG.js +0 -1
  541. package/components/validate-messages/translations/cs-CZ.js +0 -1
  542. package/components/validate-messages/translations/de-DE.js +0 -1
  543. package/components/validate-messages/translations/en-AU.js +0 -1
  544. package/components/validate-messages/translations/en-GB.js +0 -1
  545. package/components/validate-messages/translations/en-PH.js +0 -1
  546. package/components/validate-messages/translations/en-US.js +0 -1
  547. package/components/validate-messages/translations/es-ES.js +0 -1
  548. package/components/validate-messages/translations/fr-BE.js +0 -1
  549. package/components/validate-messages/translations/fr-FR.js +0 -1
  550. package/components/validate-messages/translations/hu-HU.js +0 -1
  551. package/components/validate-messages/translations/it-IT.js +0 -1
  552. package/components/validate-messages/translations/nl-BE.js +0 -1
  553. package/components/validate-messages/translations/nl-NL.js +0 -1
  554. package/components/validate-messages/translations/pl-PL.js +0 -1
  555. package/components/validate-messages/translations/ro-RO.js +0 -1
  556. package/components/validate-messages/translations/ru-RU.js +0 -1
  557. package/components/validate-messages/translations/sk-SK.js +0 -1
  558. package/components/validate-messages/translations/tr-TR.js +0 -1
  559. package/components/validate-messages/translations/uk-UA.js +0 -1
  560. package/custom-elements.json +3312 -206
  561. package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
  562. package/dist-types/components/combobox/src/LionCombobox.d.ts.map +1 -1
  563. package/dist-types/components/core/src/SlotMixin.d.ts +6 -1
  564. package/dist-types/components/core/src/SlotMixin.d.ts.map +1 -1
  565. package/dist-types/components/core/types/SlotMixinTypes.d.ts +5 -1
  566. package/dist-types/components/core/types/SlotMixinTypes.d.ts.map +1 -1
  567. package/dist-types/components/dialog/src/LionDialog.d.ts +6 -2
  568. package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
  569. package/dist-types/components/form-core/src/LionField.d.ts +3 -1
  570. package/dist-types/components/form-core/src/LionField.d.ts.map +1 -1
  571. package/dist-types/components/form-core/src/choice-group/ChoiceGroupMixin.d.ts.map +1 -1
  572. package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts +5 -0
  573. package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts.map +1 -1
  574. package/dist-types/components/input-amount/src/LionInputAmount.d.ts +3 -1
  575. package/dist-types/components/input-amount/src/LionInputAmount.d.ts.map +1 -1
  576. package/dist-types/components/input-amount/src/formatters.d.ts +6 -4
  577. package/dist-types/components/input-amount/src/formatters.d.ts.map +1 -1
  578. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +1 -1
  579. package/dist-types/components/input-tel/src/LionInputTel.d.ts +6 -6
  580. package/dist-types/components/input-tel/src/LionInputTel.d.ts.map +1 -1
  581. package/dist-types/components/input-tel/src/PhoneUtilManager.d.ts +2 -2
  582. package/dist-types/components/input-tel/src/PhoneUtilManager.d.ts.map +1 -1
  583. package/dist-types/components/input-tel/src/formatters.d.ts +2 -2
  584. package/dist-types/components/input-tel/src/formatters.d.ts.map +1 -1
  585. package/dist-types/components/input-tel/src/preprocessors.d.ts +2 -2
  586. package/dist-types/components/input-tel/src/preprocessors.d.ts.map +1 -1
  587. package/dist-types/components/input-tel/test/validators.test.d.ts +1 -1
  588. package/dist-types/components/input-tel/test/validators.test.d.ts.map +1 -1
  589. package/dist-types/components/listbox/src/LionOption.d.ts +5 -2
  590. package/dist-types/components/listbox/src/LionOption.d.ts.map +1 -1
  591. package/dist-types/components/listbox/src/ListboxMixin.d.ts.map +1 -1
  592. package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts +7 -1
  593. package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts.map +1 -1
  594. package/dist-types/components/menu/src/InteractiveListMixin.d.ts +35 -0
  595. package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +1 -0
  596. package/dist-types/components/menu/src/LionMenu.d.ts +129 -0
  597. package/dist-types/components/menu/src/LionMenu.d.ts.map +1 -0
  598. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +8 -0
  599. package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +1 -0
  600. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +7 -0
  601. package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +1 -0
  602. package/dist-types/components/menu/src/utils/isInView.d.ts +9 -0
  603. package/dist-types/components/menu/src/utils/isInView.d.ts.map +1 -0
  604. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +48 -0
  605. package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +1 -0
  606. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +2 -0
  607. package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +1 -0
  608. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +2 -0
  609. package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +1 -0
  610. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +2 -0
  611. package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +1 -0
  612. package/dist-types/components/menu/test/lion-menu-interactions.test.d.ts +2 -0
  613. package/dist-types/components/menu/test/lion-menu-interactions.test.d.ts.map +1 -0
  614. package/dist-types/components/menu/test/lion-menu.test.d.ts +2 -0
  615. package/dist-types/components/menu/test/lion-menu.test.d.ts.map +1 -0
  616. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +7 -0
  617. package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +1 -0
  618. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +11 -0
  619. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -0
  620. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +9 -0
  621. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -0
  622. package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts +5 -0
  623. package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts.map +1 -0
  624. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +11 -0
  625. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -0
  626. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +11 -0
  627. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -0
  628. package/dist-types/components/menu/types/InteractiveListMixinTypes.d.ts +72 -0
  629. package/dist-types/components/menu/types/InteractiveListMixinTypes.d.ts.map +1 -0
  630. package/dist-types/components/menu/types/MoreButtonMenuMixinTypes.d.ts +30 -0
  631. package/dist-types/components/menu/types/MoreButtonMenuMixinTypes.d.ts.map +1 -0
  632. package/dist-types/components/menu/types/MultiLevelListMixinTypes.d.ts +16 -0
  633. package/dist-types/components/menu/types/MultiLevelListMixinTypes.d.ts.map +1 -0
  634. package/dist-types/components/menu/types/OverlayWithListInvokerMixinTypes.d.ts +35 -0
  635. package/dist-types/components/menu/types/OverlayWithListInvokerMixinTypes.d.ts.map +1 -0
  636. package/dist-types/components/overlays/src/OverlayController.d.ts +22 -5
  637. package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
  638. package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
  639. package/dist-types/components/overlays/src/OverlaysManager.d.ts.map +1 -1
  640. package/dist-types/components/overlays/src/overlayDocumentStyle.d.ts.map +1 -1
  641. package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
  642. package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
  643. package/dist-types/components/overlays/types/OverlayConfig.d.ts +12 -2
  644. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  645. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -0
  646. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
  647. package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts +3 -1
  648. package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts.map +1 -1
  649. package/dist-types/components/select-rich/src/LionSelectRich.d.ts +13 -2
  650. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  651. package/dist-types/components/select-rich/test/lion-select-rich-interaction.test.d.ts.map +1 -1
  652. package/dist-types/components/select-rich/test/lion-select-rich-upgrade.test.d.ts +2 -0
  653. package/dist-types/components/select-rich/test/lion-select-rich-upgrade.test.d.ts.map +1 -0
  654. package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
  655. package/dist-types/exports/define/lion-item.d.ts +2 -0
  656. package/dist-types/exports/define/lion-item.d.ts.map +1 -0
  657. package/dist-types/exports/define/lion-menu.d.ts +2 -0
  658. package/dist-types/exports/define/lion-menu.d.ts.map +1 -0
  659. package/dist-types/exports/define/lion-menuitem.d.ts +2 -0
  660. package/dist-types/exports/define/lion-menuitem.d.ts.map +1 -0
  661. package/dist-types/exports/menu-test-suites.d.ts +4 -0
  662. package/dist-types/exports/menu-test-suites.d.ts.map +1 -0
  663. package/dist-types/exports/menu.d.ts +3 -0
  664. package/dist-types/exports/menu.d.ts.map +1 -0
  665. package/dist-types/exports/overlays.d.ts +6 -0
  666. package/dist-types/exports/overlays.d.ts.map +1 -1
  667. package/dist-types/tsconfig.tsbuildinfo +1 -1
  668. package/docs/components/accordion/overview.md +2 -2
  669. package/docs/components/accordion/reference.md +2 -2
  670. package/docs/components/accordion/use-cases.md +2 -2
  671. package/docs/components/button/examples.md +2 -2
  672. package/docs/components/button/extensions.md +2 -2
  673. package/docs/components/button/overview.md +2 -2
  674. package/docs/components/button/use-cases.md +2 -2
  675. package/docs/components/calendar/overview.md +2 -2
  676. package/docs/components/calendar/use-cases.md +2 -2
  677. package/docs/components/checkbox-group/overview.md +4 -4
  678. package/docs/components/checkbox-group/use-cases.md +2 -2
  679. package/docs/components/collapsible/examples.md +2 -2
  680. package/docs/components/collapsible/overview.md +3 -3
  681. package/docs/components/collapsible/use-cases.md +2 -2
  682. package/docs/components/combobox/api-table.md +53 -39
  683. package/docs/components/combobox/extensions.md +2 -2
  684. package/docs/components/combobox/overview.md +3 -3
  685. package/docs/components/combobox/use-cases.md +3 -3
  686. package/docs/components/dialog/api-table.md +32 -6
  687. package/docs/components/dialog/overview.md +3 -3
  688. package/docs/components/dialog/use-cases.md +2 -2
  689. package/docs/components/drawer/overview.md +2 -2
  690. package/docs/components/drawer/use-cases.md +2 -2
  691. package/docs/components/fieldset/overview.md +7 -7
  692. package/docs/components/fieldset/use-cases.md +2 -2
  693. package/docs/components/form/overview.md +5 -5
  694. package/docs/components/form/use-cases.md +4 -4
  695. package/docs/components/icon/overview.md +2 -2
  696. package/docs/components/icon/use-cases.md +3 -3
  697. package/docs/components/input/overview.md +3 -3
  698. package/docs/components/input/use-cases.md +2 -2
  699. package/docs/components/input-amount/api-table.md +9 -7
  700. package/docs/components/input-amount/overview.md +5 -5
  701. package/docs/components/input-amount/use-cases.md +17 -6
  702. package/docs/components/input-amount-dropdown/api-table.md +2 -0
  703. package/docs/components/input-amount-dropdown/use-cases.md +2 -2
  704. package/docs/components/input-date/overview.md +5 -5
  705. package/docs/components/input-date/use-cases.md +2 -2
  706. package/docs/components/input-datepicker/api-table.md +63 -45
  707. package/docs/components/input-datepicker/overview.md +7 -7
  708. package/docs/components/input-datepicker/use-cases.md +2 -2
  709. package/docs/components/input-email/overview.md +4 -4
  710. package/docs/components/input-email/use-cases.md +2 -2
  711. package/docs/components/input-file/overview.md +3 -3
  712. package/docs/components/input-file/use-cases.md +2 -2
  713. package/docs/components/input-iban/overview.md +4 -4
  714. package/docs/components/input-iban/use-cases.md +2 -2
  715. package/docs/components/input-range/overview.md +4 -4
  716. package/docs/components/input-range/use-cases.md +2 -2
  717. package/docs/components/input-stepper/overview.md +3 -3
  718. package/docs/components/input-stepper/use-cases.md +2 -2
  719. package/docs/components/input-tel/overview.md +3 -3
  720. package/docs/components/input-tel/use-cases.md +8 -8
  721. package/docs/components/input-tel-dropdown/extensions.md +2 -2
  722. package/docs/components/input-tel-dropdown/overview.md +3 -3
  723. package/docs/components/input-tel-dropdown/use-cases.md +2 -2
  724. package/docs/components/listbox/overview.md +2 -2
  725. package/docs/components/listbox/use-cases.md +3 -3
  726. package/docs/components/menu/api-table.md +44 -0
  727. package/docs/components/menu/applyMenuDemoStyles.js +173 -0
  728. package/docs/components/menu/extensions.md +262 -0
  729. package/docs/components/menu/index.md +13 -0
  730. package/docs/components/menu/migration.md +129 -0
  731. package/docs/components/menu/overview.md +448 -0
  732. package/docs/components/menu/src/DemoNavigationBar.js +441 -0
  733. package/docs/components/menu/src/DemoSpinButton.js +215 -0
  734. package/docs/components/menu/src/DemoToolbar.js +101 -0
  735. package/docs/components/menu/src/DemoTree.js +55 -0
  736. package/docs/components/menu/src/navigation-bar-types.js +41 -0
  737. package/docs/components/menu/use-cases.md +74 -0
  738. package/docs/components/pagination/overview.md +2 -2
  739. package/docs/components/pagination/use-cases.md +2 -2
  740. package/docs/components/progress-indicator/examples.md +2 -2
  741. package/docs/components/progress-indicator/overview.md +2 -2
  742. package/docs/components/radio-group/overview.md +5 -5
  743. package/docs/components/radio-group/use-cases.md +2 -2
  744. package/docs/components/select/overview.md +2 -2
  745. package/docs/components/select/use-cases.md +3 -3
  746. package/docs/components/select-rich/api-table.md +51 -33
  747. package/docs/components/select-rich/examples.md +2 -2
  748. package/docs/components/select-rich/overview.md +2 -2
  749. package/docs/components/select-rich/use-cases.md +4 -4
  750. package/docs/components/steps/overview.md +2 -2
  751. package/docs/components/steps/use-cases.md +2 -2
  752. package/docs/components/switch/overview.md +2 -2
  753. package/docs/components/switch/reference.md +2 -2
  754. package/docs/components/switch/use-cases.md +2 -2
  755. package/docs/components/tabs/examples.md +3 -3
  756. package/docs/components/tabs/overview.md +2 -2
  757. package/docs/components/tabs/use-cases.md +2 -2
  758. package/docs/components/textarea/overview.md +2 -2
  759. package/docs/components/textarea/use-cases.md +2 -2
  760. package/docs/components/tooltip/api-table.md +33 -7
  761. package/docs/components/tooltip/examples.md +2 -2
  762. package/docs/components/tooltip/overview.md +2 -2
  763. package/docs/components/tooltip/use-cases.md +2 -2
  764. package/docs/fundamentals/index.md +4 -4
  765. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md +2 -2
  766. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md +2 -2
  767. package/docs/fundamentals/node-tools/providence-analytics/index.md +2 -2
  768. package/docs/fundamentals/node-tools/providence-analytics/overview.md +3 -3
  769. package/docs/fundamentals/node-tools/publish-docs/index.md +2 -2
  770. package/docs/fundamentals/node-tools/publish-docs/overview.md +5 -5
  771. package/docs/fundamentals/node-tools/remark-extend/index.md +2 -2
  772. package/docs/fundamentals/node-tools/remark-extend/overview.md +2 -2
  773. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md +2 -2
  774. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +4 -4
  775. package/docs/fundamentals/rationales/TypeScript.md +62 -2
  776. package/docs/fundamentals/rationales/accessibility.md +5 -5
  777. package/docs/fundamentals/rationales/side-effects.md +2 -2
  778. package/docs/fundamentals/rationales/versioning.md +2 -2
  779. package/docs/fundamentals/systems/core/SlotMixin.md +3 -3
  780. package/docs/fundamentals/systems/core/index.md +2 -2
  781. package/docs/fundamentals/systems/core/overview.md +3 -3
  782. package/docs/fundamentals/systems/form/formatting-and-parsing.md +6 -6
  783. package/docs/fundamentals/systems/form/index.md +2 -2
  784. package/docs/fundamentals/systems/form/interaction-states.md +2 -2
  785. package/docs/fundamentals/systems/form/model-value.md +3 -3
  786. package/docs/fundamentals/systems/form/overview.md +30 -30
  787. package/docs/fundamentals/systems/form/styling.md +2 -2
  788. package/docs/fundamentals/systems/form/use-cases.md +2 -2
  789. package/docs/fundamentals/systems/form/validate.md +4 -4
  790. package/docs/fundamentals/systems/icon/index.md +2 -2
  791. package/docs/fundamentals/systems/icon/overview.md +2 -2
  792. package/docs/fundamentals/systems/localize/dates.md +2 -2
  793. package/docs/fundamentals/systems/localize/index.md +2 -2
  794. package/docs/fundamentals/systems/localize/numbers.md +2 -2
  795. package/docs/fundamentals/systems/localize/overview.md +6 -6
  796. package/docs/fundamentals/systems/localize/rationale.md +2 -2
  797. package/docs/fundamentals/systems/localize/text.md +2 -2
  798. package/docs/fundamentals/systems/localize/use-cases.md +2 -2
  799. package/docs/fundamentals/systems/overlays/_edge-cases.md +2 -2
  800. package/docs/fundamentals/systems/overlays/api-table.md +46 -43
  801. package/docs/fundamentals/systems/overlays/configuration.md +4 -4
  802. package/docs/fundamentals/systems/overlays/index.md +2 -2
  803. package/docs/fundamentals/systems/overlays/overview.md +7 -7
  804. package/docs/fundamentals/systems/overlays/rationale.md +2 -2
  805. package/docs/fundamentals/systems/overlays/use-cases.md +4 -4
  806. package/docs/fundamentals/tools/ajax/index.md +2 -2
  807. package/docs/fundamentals/tools/ajax/overview.md +2 -2
  808. package/docs/fundamentals/tools/ajax/use-cases.md +2 -2
  809. package/docs/fundamentals/tools/helpers/action-logger.md +2 -2
  810. package/docs/fundamentals/tools/helpers/index.md +2 -2
  811. package/docs/fundamentals/tools/helpers/overview.md +3 -3
  812. package/docs/fundamentals/tools/singleton-manager/example-complex/index.md +2 -2
  813. package/docs/fundamentals/tools/singleton-manager/example-fail/index.md +2 -2
  814. package/docs/fundamentals/tools/singleton-manager/example-success/index.md +2 -2
  815. package/docs/fundamentals/tools/singleton-manager/index.md +2 -2
  816. package/docs/fundamentals/tools/singleton-manager/overview.md +6 -6
  817. package/docs/guides/how-to/create-a-custom-field.md +7 -7
  818. package/docs/guides/how-to/create-a-form.md +6 -6
  819. package/docs/guides/how-to/extend-a-native-input.md +4 -4
  820. package/docs/guides/how-to/get-started.md +2 -2
  821. package/docs/guides/how-to/index.md +1 -1
  822. package/docs/guides/index.md +8 -8
  823. package/docs/guides/principles/definitions-and-terms.md +2 -2
  824. package/docs/guides/principles/index.md +5 -5
  825. package/docs/guides/principles/scoped-elements.md +2 -2
  826. package/docs/guides/principles/styling.md +3 -3
  827. package/docs/guides/principles/subclasser-apis.md +2 -2
  828. package/exports/define/lion-accordion.js +0 -1
  829. package/exports/define/lion-button-reset.js +0 -1
  830. package/exports/define/lion-button-submit.js +0 -1
  831. package/exports/define/lion-button.js +0 -1
  832. package/exports/define/lion-calendar.js +0 -1
  833. package/exports/define/lion-checkbox-group.js +0 -1
  834. package/exports/define/lion-checkbox-indeterminate.js +0 -1
  835. package/exports/define/lion-checkbox.js +0 -1
  836. package/exports/define/lion-collapsible.js +0 -1
  837. package/exports/define/lion-combobox.js +0 -1
  838. package/exports/define/lion-dialog.js +0 -1
  839. package/exports/define/lion-drawer.js +0 -1
  840. package/exports/define/lion-field.js +0 -1
  841. package/exports/define/lion-fieldset.js +0 -1
  842. package/exports/define/lion-form.js +0 -1
  843. package/exports/define/lion-icon.js +0 -1
  844. package/exports/define/lion-input-amount-dropdown.js +0 -1
  845. package/exports/define/lion-input-amount.js +0 -1
  846. package/exports/define/lion-input-date.js +0 -1
  847. package/exports/define/lion-input-datepicker.js +0 -1
  848. package/exports/define/lion-input-email.js +0 -1
  849. package/exports/define/lion-input-file.js +0 -1
  850. package/exports/define/lion-input-iban.js +0 -1
  851. package/exports/define/lion-input-range.js +0 -1
  852. package/exports/define/lion-input-stepper.js +0 -1
  853. package/exports/define/lion-input-tel-dropdown.js +0 -1
  854. package/exports/define/lion-input-tel.js +0 -1
  855. package/exports/define/lion-input.js +0 -1
  856. package/exports/define/lion-item.js +2 -0
  857. package/exports/define/lion-listbox.js +0 -1
  858. package/exports/define/lion-menu.js +2 -0
  859. package/exports/define/lion-menuitem.js +2 -0
  860. package/exports/define/lion-option.js +0 -1
  861. package/exports/define/lion-options.js +0 -1
  862. package/exports/define/lion-pagination.js +0 -1
  863. package/exports/define/lion-progress-indicator.js +0 -1
  864. package/exports/define/lion-radio-group.js +0 -1
  865. package/exports/define/lion-radio.js +0 -1
  866. package/exports/define/lion-select-invoker.js +0 -1
  867. package/exports/define/lion-select-rich.js +0 -1
  868. package/exports/define/lion-select.js +0 -1
  869. package/exports/define/lion-selected-file-list.js +0 -1
  870. package/exports/define/lion-step.js +0 -1
  871. package/exports/define/lion-steps.js +0 -1
  872. package/exports/define/lion-switch-button.js +0 -1
  873. package/exports/define/lion-switch.js +0 -1
  874. package/exports/define/lion-tabs.js +0 -1
  875. package/exports/define/lion-textarea.js +0 -1
  876. package/exports/define/lion-tooltip.js +0 -1
  877. package/exports/define/lion-validation-feedback.js +0 -1
  878. package/exports/define-helpers/sb-action-logger.js +0 -1
  879. package/exports/define-helpers/sb-locale-switcher.js +0 -1
  880. package/exports/form-core.js +0 -8
  881. package/exports/localize-no-side-effects.js +0 -1
  882. package/exports/localize.js +0 -2
  883. package/exports/menu-test-suites.js +4 -0
  884. package/exports/menu.js +3 -0
  885. package/exports/overlays.js +6 -4
  886. package/generated/awesome-phonenumber/LICENSE +22 -0
  887. package/generated/awesome-phonenumber/LICENSE.closure-library +176 -0
  888. package/generated/awesome-phonenumber/LICENSE.libphonenumber +176 -0
  889. package/generated/awesome-phonenumber/checksums.json +6 -0
  890. package/generated/awesome-phonenumber/index-esm.mjs +817 -0
  891. package/generated/awesome-phonenumber/index.d.ts +227 -0
  892. package/generated/awesome-phonenumber/index.js +45 -0
  893. package/generated/awesome-phonenumber/lib/index.js +710 -0
  894. package/generated/awesome-phonenumber/package.json +9 -0
  895. package/generated/awesome-phonenumber/provenance.json +13 -0
  896. package/menu-test-suites.js +4 -0
  897. package/menu.js +3 -0
  898. package/overlays.js +6 -0
  899. package/package.json +35 -6
  900. package/vscode.html-custom-data.json +76 -8
  901. package/web-types.json +202 -17
@@ -12,13 +12,11 @@ import sinon from 'sinon';
12
12
  * @typedef {import('../types/input-file.js').SystemFile} SystemFile
13
13
  * @typedef {import('lit').TemplateResult} TemplateResult
14
14
  */
15
- const fixture = /** @type {(arg: TemplateResult|string) => Promise<LionInputFile>} */ (_fixture);
16
-
15
+ const fixture = /** @type {(arg: TemplateResult|string) => Promise<LionInputFile>} */ _fixture;
17
16
  const filesListChanged = (/** @type {LionInputFile} */ el, /** @type { CustomEvent } */ ev) => {
18
17
  // eslint-disable-next-line no-param-reassign
19
18
  el.uploadResponse = [...ev.detail.newFiles];
20
19
  };
21
-
22
20
  function mimicSelectFile(
23
21
  /** @type {LionInputFile} */ formControl,
24
22
  /** @type {InputFile[]} */ mockFiles,
@@ -26,7 +24,7 @@ function mimicSelectFile(
26
24
  // @ts-expect-error [allow-protected-in-tests]
27
25
  formControl._processFiles(mockFiles);
28
26
  // TODO: doesn't this set latest file.name only to formControl._inputNode.value?
29
- mockFiles.forEach(file => {
27
+ mockFiles.forEach((file) => {
30
28
  // @ts-expect-error [allow-protected-in-tests]
31
29
  Object.defineProperty(formControl._inputNode, 'value', {
32
30
  value: `C:\\fakepath\\${file.name}`,
@@ -34,75 +32,75 @@ function mimicSelectFile(
34
32
  });
35
33
  });
36
34
  // @ts-expect-error [allow-protected-in-tests]
37
- Object.defineProperty(formControl._inputNode, 'files', { value: mockFiles, writable: true });
35
+ Object.defineProperty(formControl._inputNode, 'files', {
36
+ value: mockFiles,
37
+ writable: true,
38
+ });
38
39
  // @ts-expect-error [allow-protected-in-tests]
39
- formControl._inputNode.dispatchEvent(new Event('input', { bubbles: true }));
40
+ formControl._inputNode.dispatchEvent(
41
+ new Event('input', {
42
+ bubbles: true,
43
+ }),
44
+ );
40
45
  }
41
-
42
- const file = /** @type {InputFile} */ (
46
+ const file =
47
+ /** @type {InputFile} */
43
48
  new File(['foo'], 'foo.txt', {
44
49
  type: 'text/plain',
45
- })
46
- );
47
- const file2 = /** @type {InputFile} */ (
50
+ });
51
+ const file2 =
52
+ /** @type {InputFile} */
48
53
  new File(['bar'], 'bar.txt', {
49
54
  type: 'text/plain',
50
- })
51
- );
52
- const file3 = /** @type {InputFile} */ (
55
+ });
56
+ const file3 =
57
+ /** @type {InputFile} */
53
58
  new File(['foo3'], 'foo3.txt', {
54
59
  type: 'text/plain',
55
- })
56
- );
57
- const file4 = /** @type {InputFile} */ (
60
+ });
61
+ const file4 =
62
+ /** @type {InputFile} */
58
63
  new File(['foo4'], 'foo4.txt', {
59
64
  type: 'text/plain',
60
- })
61
- );
62
-
65
+ });
63
66
  describe('lion-input-file', () => {
64
67
  const localizeManager = getLocalizeManager();
65
-
66
68
  afterEach(localizeTearDown);
67
-
68
69
  it('has a type of "file"', async () => {
69
70
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
70
71
  // @ts-expect-error [allow-protected-in-tests]
71
72
  const { _inputNode } = getInputMembers(el);
72
73
  expect(_inputNode.type).to.equal('file');
73
74
  });
74
-
75
75
  it('should add single file and dispatch "file-list-changed" event with newly added file', async () => {
76
76
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
77
-
78
77
  const fileListChangedEventPromise = oneEvent(el, 'file-list-changed');
79
78
  mimicSelectFile(el, [file]);
80
79
  const fileListChangedEvent = await fileListChangedEventPromise;
81
80
  // @ts-expect-error [allow-protected-in-tests]
82
81
  expect(el._selectedFilesMetaData.length).to.equal(1);
83
82
  expect(el.uploadResponse.length).to.equal(1);
84
-
85
83
  expect(fileListChangedEvent).to.exist;
86
84
  expect(fileListChangedEvent.detail.newFiles.length).to.equal(1);
87
85
  expect(fileListChangedEvent.detail.newFiles[0].name).to.equal('foo.txt');
88
86
  });
89
-
90
87
  it('should select 1 file', async () => {
91
88
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
92
89
  // @ts-expect-error [allow-protected-in-test]
93
90
  const processedFilesSpy = sinon.spy(el, '_processFiles');
94
91
 
95
92
  // @ts-expect-error [allow-protected-in-test]
96
- await el._onChange({ target: { files: [file] } });
93
+ await el._onChange({
94
+ target: {
95
+ files: [file],
96
+ },
97
+ });
97
98
  expect(processedFilesSpy).have.been.calledOnce;
98
99
  processedFilesSpy.restore();
99
100
  });
100
-
101
101
  it('should retain selected file when "Cancel" button is clicked in system file explorer dialog', async () => {
102
102
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
103
-
104
103
  mimicSelectFile(el, [file]);
105
-
106
104
  await el.updateComplete;
107
105
  // @ts-expect-error [allow-protected-in-test]
108
106
  expect(el._selectedFilesMetaData.length).to.equal(1);
@@ -110,12 +108,10 @@ describe('lion-input-file', () => {
110
108
 
111
109
  // when cancel is clicked, native input value is blank which means modelValue is blank
112
110
  el.modelValue = [];
113
-
114
111
  await el.updateComplete;
115
112
  // @ts-expect-error [allow-protected-in-test]
116
113
  expect(el._selectedFilesMetaData.length).to.equal(1);
117
114
  });
118
-
119
115
  it('has an attribute focused when focused', async () => {
120
116
  const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
121
117
 
@@ -129,26 +125,26 @@ describe('lion-input-file', () => {
129
125
  await el.updateComplete;
130
126
  expect(el.hasAttribute('focused')).to.be.false;
131
127
  });
132
-
133
128
  it('should set touched property true on change', async () => {
134
129
  const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
135
130
  expect(el.touched).to.be.false;
136
131
 
137
132
  // @ts-expect-error [allow-protected-in-test]
138
- await el._onChange({ target: { files: [file] } });
133
+ await el._onChange({
134
+ target: {
135
+ files: [file],
136
+ },
137
+ });
139
138
  expect(el.touched).to.be.true;
140
139
  });
141
-
142
140
  it('should replace previous file when new file is selected', async () => {
143
141
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
144
-
145
142
  mimicSelectFile(el, [file]);
146
143
  await el.updateComplete;
147
144
  // @ts-expect-error [allow-protected-in-test]
148
145
  expect(el._selectedFilesMetaData.length).to.equal(1);
149
146
  // @ts-expect-error [allow-protected-in-test]
150
147
  expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('foo.txt');
151
-
152
148
  mimicSelectFile(el, [file2]);
153
149
  await el.updateComplete;
154
150
  // @ts-expect-error [allow-protected-in-test]
@@ -156,67 +152,55 @@ describe('lion-input-file', () => {
156
152
  // @ts-expect-error [allow-protected-in-test]
157
153
  expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('bar.txt');
158
154
  });
159
-
160
155
  describe('structure', async () => {
161
156
  it('can has a button label by default', async () => {
162
157
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
163
158
  // @ts-expect-error [allow-protected-in-test]
164
159
  expect(el._buttonNode.textContent).to.equal('Select file');
165
160
  });
166
-
167
161
  it('can has a button label by default when multiple', async () => {
168
162
  const el = await fixture(html`<lion-input-file multiple></lion-input-file>`);
169
163
  // @ts-expect-error [allow-protected-in-test]
170
164
  expect(el._buttonNode.textContent).to.equal('Select files');
171
165
  });
172
-
173
166
  it('will update the button label on locale change', async () => {
174
167
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
175
168
  // @ts-expect-error [allow-protected-in-test]
176
169
  expect(el._buttonNode.textContent).to.equal('Select file');
177
-
178
170
  localizeManager.locale = 'nl-NL';
179
171
  await localizeManager.loadingComplete;
180
172
  await el.updateComplete;
181
173
  // @ts-expect-error [allow-protected-in-test]
182
174
  expect(el._buttonNode.textContent).to.equal('Selecteer bestand');
183
175
  });
184
-
185
176
  it('can overwrite the button label', async () => {
186
177
  const el = await fixture(html`<lion-input-file .buttonLabel="${'Foo'}"></lion-input-file>`);
187
178
  // @ts-expect-error [allow-protected-in-test]
188
179
  expect(el._buttonNode.textContent).to.equal('Foo');
189
-
190
180
  el.buttonLabel = 'Bar';
191
181
  await el.updateComplete;
192
182
  // @ts-expect-error [allow-protected-in-test]
193
183
  expect(el._buttonNode.textContent).to.equal('Bar');
194
184
  });
195
185
  });
196
-
197
186
  describe('invalid file types', async () => {
198
- const fileWrongType = /** @type {InputFile} */ (
187
+ const fileWrongType =
188
+ /** @type {InputFile} */
199
189
  new File(['foobar'], 'foobar.txt', {
200
190
  type: 'xxxxx',
201
- })
202
- );
203
-
191
+ });
204
192
  it('error should not be there when the file extensions are accepted', async () => {
205
193
  const el = await fixture(html`
206
194
  <lion-input-file label="Select" accept=".txt"></lion-input-file>
207
195
  `);
208
-
209
196
  mimicSelectFile(el, [fileWrongType]);
210
197
  await el.updateComplete;
211
-
212
198
  expect(el.hasFeedbackFor.length).to.equal(0);
213
199
  });
214
-
215
200
  it('should not be added to the selected list', async () => {
216
201
  const el = await fixture(html`
217
202
  <lion-input-file label="Select" accept="text/plain"></lion-input-file>
218
203
  `);
219
-
220
204
  mimicSelectFile(el, [fileWrongType]);
221
205
  await el.updateComplete;
222
206
 
@@ -230,118 +214,101 @@ describe('lion-input-file', () => {
230
214
  expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
231
215
  expect(el.uploadResponse[0].status).to.equal('FAIL');
232
216
  });
233
-
234
217
  it('error message should use main type when "/*" is used', async () => {
235
218
  const el = await fixture(html`
236
219
  <lion-input-file label="Select" accept="text/*"></lion-input-file>
237
220
  `);
238
-
239
221
  mimicSelectFile(el, [fileWrongType]);
240
222
  await el.updateComplete;
241
223
 
242
224
  // @ts-expect-error [allow-protected-in-test]
243
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
225
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
244
226
  expect(error.message).to.deep.equal('Please select a(n) text file with max 500MB.');
245
227
  });
246
228
  });
247
-
248
229
  it('error message should use main type when "text/plain" is used', async () => {
249
230
  const el = await fixture(html`
250
231
  <lion-input-file label="Select" accept="text/plain"></lion-input-file>
251
232
  `);
252
-
253
233
  mimicSelectFile(el, [fileWrongType]);
254
234
  await el.updateComplete;
255
235
 
256
236
  // @ts-expect-error [allow-protected-in-test]
257
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
237
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
258
238
  expect(error.message).to.deep.equal('Please select a(n) text file with max 500MB.');
259
239
  });
260
240
  });
261
-
262
241
  it('error message should use sub type when e.g. "text/html" is used', async () => {
263
242
  const el = await fixture(html`
264
243
  <lion-input-file label="Select" accept="text/html"></lion-input-file>
265
244
  `);
266
-
267
245
  mimicSelectFile(el, [fileWrongType]);
268
246
  await el.updateComplete;
269
247
 
270
248
  // @ts-expect-error [allow-protected-in-test]
271
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
249
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
272
250
  expect(error.message).to.deep.equal('Please select a(n) .html file with max 500MB.');
273
251
  });
274
252
  });
275
-
276
253
  it('error message should use the first sub type when e.g. "image/svg+xml" is used', async () => {
277
254
  const el = await fixture(html`
278
255
  <lion-input-file label="Select" accept="image/svg+xml"></lion-input-file>
279
256
  `);
280
-
281
257
  mimicSelectFile(el, [fileWrongType]);
282
258
  await el.updateComplete;
283
259
 
284
260
  // @ts-expect-error [allow-protected-in-test]
285
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
261
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
286
262
  expect(error.message).to.deep.equal('Please select a(n) .svg file with max 500MB.');
287
263
  });
288
264
  });
289
-
290
265
  it('can reflect multiple types in the error message', async () => {
291
266
  const el = await fixture(html`
292
267
  <lion-input-file label="Select" accept="text/html, text/csv"></lion-input-file>
293
268
  `);
294
-
295
269
  mimicSelectFile(el, [fileWrongType]);
296
270
  await el.updateComplete;
297
271
 
298
272
  // @ts-expect-error [allow-protected-in-test]
299
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
273
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
300
274
  expect(error.message).to.deep.equal('Please select a .html or .csv file with max 500MB.');
301
275
  });
302
276
  });
303
-
304
277
  it('can reflect multiple types in the error message also with a space " "', async () => {
305
278
  const el = await fixture(html`
306
279
  <lion-input-file label="Select" accept="text/html,text/csv"></lion-input-file>
307
280
  `);
308
-
309
281
  mimicSelectFile(el, [fileWrongType]);
310
282
  await el.updateComplete;
311
283
 
312
284
  // @ts-expect-error [allow-protected-in-test]
313
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
285
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
314
286
  expect(error.message).to.deep.equal('Please select a .html or .csv file with max 500MB.');
315
287
  });
316
288
  });
317
-
318
289
  it('can reflect multiple types in the error message with preference to extensions', async () => {
319
290
  const el = await fixture(html`
320
291
  <lion-input-file label="Select" accept=".jpg,image/svg+xml"></lion-input-file>
321
292
  `);
322
-
323
293
  mimicSelectFile(el, [fileWrongType]);
324
294
  await el.updateComplete;
325
295
 
326
296
  // @ts-expect-error [allow-protected-in-test]
327
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
297
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
328
298
  expect(error.message).to.deep.equal('Please select a(n) .jpg file with max 500MB.');
329
299
  });
330
300
  });
331
301
  });
332
-
333
302
  describe('invalid file extensions', async () => {
334
- const fileWrongType = /** @type {InputFile} */ (
303
+ const fileWrongType =
304
+ /** @type {InputFile} */
335
305
  new File(['foobar'], 'foobar.txt', {
336
306
  type: 'xxxxx',
337
- })
338
- );
339
-
307
+ });
340
308
  it('should not be added to the selected list', async () => {
341
309
  const el = await fixture(html`
342
310
  <lion-input-file label="Select" accept=".jpg, .png, .pdf"></lion-input-file>
343
311
  `);
344
-
345
312
  mimicSelectFile(el, [fileWrongType]);
346
313
  await el.updateComplete;
347
314
 
@@ -355,57 +322,48 @@ describe('lion-input-file', () => {
355
322
  expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
356
323
  expect(el.uploadResponse[0].status).to.equal('FAIL');
357
324
  });
358
-
359
325
  it('error message should add the file extension to the validator message', async () => {
360
326
  const el = await fixture(html`
361
327
  <lion-input-file label="Select" accept=".jpg"></lion-input-file>
362
328
  `);
363
-
364
329
  mimicSelectFile(el, [fileWrongType]);
365
330
  await el.updateComplete;
366
331
 
367
332
  // @ts-expect-error [allow-protected-in-test]
368
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
333
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
369
334
  expect(error.message).to.equal('Please select a(n) .jpg file with max 500MB.');
370
335
  });
371
336
  });
372
-
373
337
  it('error message should add all file extensions to the validator message', async () => {
374
338
  const el = await fixture(html`
375
339
  <lion-input-file label="Select" accept=".jpg, .png, .pdf"></lion-input-file>
376
340
  `);
377
-
378
341
  mimicSelectFile(el, [fileWrongType]);
379
342
  await el.updateComplete;
380
343
 
381
344
  // @ts-expect-error [allow-protected-in-test]
382
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
345
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
383
346
  expect(error.message).to.equal('Please select a .jpg, .png or .pdf file with max 500MB.');
384
347
  });
385
348
  });
386
-
387
349
  it('error message should add all file extensions to the validator message also works without spaces " "', async () => {
388
350
  const el = await fixture(html`
389
351
  <lion-input-file label="Select" accept=".jpg,.png,.pdf"></lion-input-file>
390
352
  `);
391
-
392
353
  mimicSelectFile(el, [fileWrongType]);
393
354
  await el.updateComplete;
394
355
 
395
356
  // @ts-expect-error [allow-protected-in-test]
396
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
357
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
397
358
  expect(error.message).to.equal('Please select a .jpg, .png or .pdf file with max 500MB.');
398
359
  });
399
360
  });
400
361
  });
401
-
402
362
  describe('invalid file sizes', async () => {
403
363
  // Size of this file is 4 bytes
404
- const fileWrongSize = /** @type {InputFile} */ (new File(['foobar'], 'foobar.txt'));
405
-
364
+ const fileWrongSize = /** @type {InputFile} */ new File(['foobar'], 'foobar.txt');
406
365
  it('should not be added to the selected list', async () => {
407
366
  const el = await fixture(html` <lion-input-file max-file-size="2"></lion-input-file> `);
408
-
409
367
  mimicSelectFile(el, [fileWrongSize]);
410
368
  await el.updateComplete;
411
369
 
@@ -419,21 +377,18 @@ describe('lion-input-file', () => {
419
377
  expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
420
378
  expect(el.uploadResponse[0].status).to.equal('FAIL');
421
379
  });
422
-
423
380
  it('error message should show only the max file size if no type/extension restrictions are defined', async () => {
424
381
  const el = await fixture(html`
425
382
  <lion-input-file label="Select" max-file-size="2"></lion-input-file>
426
383
  `);
427
-
428
384
  mimicSelectFile(el, [fileWrongSize]);
429
385
  await el.updateComplete;
430
386
 
431
387
  // @ts-expect-error [allow-protected-in-test]
432
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
388
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
433
389
  expect(error.message).to.equal('Please select a file with max 2 bytes.');
434
390
  });
435
391
  });
436
-
437
392
  it('error message should show the correct max file size if type/extension restrictions are defined', async () => {
438
393
  const el = await fixture(html`
439
394
  <lion-input-file
@@ -442,27 +397,23 @@ describe('lion-input-file', () => {
442
397
  accept=".jpg, .png, .pdf"
443
398
  ></lion-input-file>
444
399
  `);
445
-
446
400
  mimicSelectFile(el, [fileWrongSize]);
447
401
  await el.updateComplete;
448
402
 
449
403
  // @ts-expect-error [allow-protected-in-test]
450
- el._selectedFilesMetaData[0].validationFeedback?.forEach(error => {
404
+ el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
451
405
  expect(error.message).to.equal('Please select a .jpg, .png or .pdf file with max 2 bytes.');
452
406
  });
453
407
  });
454
408
  });
455
-
456
409
  it('should send "file-list-changed" event if selecting files succeeded partially', async () => {
457
410
  const el = await fixture(html`<lion-input-file multiple max-file-size="3"></lion-input-file>`);
458
411
 
459
412
  // Size of this file is 4 bytes
460
- const fileWrongSize = /** @type {InputFile} */ (new File(['foobar'], 'foobar.txt'));
461
-
413
+ const fileWrongSize = /** @type {InputFile} */ new File(['foobar'], 'foobar.txt');
462
414
  setTimeout(() => {
463
415
  mimicSelectFile(el, [fileWrongSize, file2]);
464
416
  });
465
-
466
417
  const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
467
418
 
468
419
  // @ts-expect-error [allow-protected-in-test]
@@ -470,13 +421,10 @@ describe('lion-input-file', () => {
470
421
  // @ts-expect-error [allow-protected-in-test]
471
422
  expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
472
423
  expect(el.uploadResponse[0].status).to.equal('FAIL');
473
-
474
424
  expect(fileListChangedEvent.detail.newFiles.length).to.equal(1);
475
425
  });
476
-
477
426
  it('should update downloadurl for successful files', async () => {
478
427
  const el = await fixture(html`<lion-input-file></lion-input-file>`);
479
-
480
428
  setTimeout(() => {
481
429
  mimicSelectFile(el, [file]);
482
430
  });
@@ -486,54 +434,41 @@ describe('lion-input-file', () => {
486
434
  // @ts-expect-error [allow-protected-in-test]
487
435
  expect(el._selectedFilesMetaData[0].downloadUrl).to.exist;
488
436
  });
489
-
490
437
  describe('format', () => {
491
438
  it('modelValue is an array of files', async () => {
492
439
  const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
493
-
494
440
  mimicSelectFile(el, [file]);
495
441
  await el.updateComplete;
496
442
  expect(el.modelValue).to.deep.equal([file]);
497
443
  });
498
-
499
444
  it('view value is a string', async () => {
500
445
  const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
501
-
502
446
  mimicSelectFile(el, [file]);
503
447
  await el.updateComplete;
504
-
505
448
  expect(el.value).to.equal('C:\\fakepath\\foo.txt');
506
449
  // @ts-expect-error [allow-protected-in-tests]
507
450
  expect(el._inputNode.value).to.equal('C:\\fakepath\\foo.txt');
508
451
  });
509
-
510
452
  it('formattedValue is a string', async () => {
511
453
  const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
512
-
513
454
  mimicSelectFile(el, [file]);
514
455
  await el.updateComplete;
515
-
516
456
  expect(el.formattedValue).to.equal('C:\\fakepath\\foo.txt');
517
457
  });
518
-
519
458
  it('serializedValue is an array of files', async () => {
520
459
  const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
521
-
522
460
  mimicSelectFile(el, [file]);
523
461
  await el.updateComplete;
524
462
  expect(el.serializedValue).to.deep.equal([file]);
525
463
  });
526
-
527
464
  it('fires `model-value-changed` for every programmatic modelValue change', async () => {
528
465
  const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
529
466
  let counter = 0;
530
467
  let isTriggeredByUser = false;
531
-
532
- el.addEventListener('model-value-changed', event => {
468
+ el.addEventListener('model-value-changed', (event) => {
533
469
  counter += 1;
534
- isTriggeredByUser = /** @type {CustomEvent} */ (event).detail.isTriggeredByUser;
470
+ isTriggeredByUser = /** @type {CustomEvent} */ event.detail.isTriggeredByUser;
535
471
  });
536
-
537
472
  el.modelValue = [file];
538
473
  expect(counter).to.equal(1);
539
474
  expect(isTriggeredByUser).to.be.false;
@@ -545,36 +480,29 @@ describe('lion-input-file', () => {
545
480
  el.modelValue = [file, file2];
546
481
  expect(counter).to.equal(2);
547
482
  });
548
-
549
483
  it('fires `model-value-changed` for every user input, adding `isTriggeredByUser` in event detail', async () => {
550
484
  const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
551
485
  let counter = 0;
552
486
  let isTriggeredByUser = false;
553
-
554
- el.addEventListener('model-value-changed', event => {
487
+ el.addEventListener('model-value-changed', (event) => {
555
488
  counter += 1;
556
- isTriggeredByUser = /** @type {CustomEvent} */ (event).detail.isTriggeredByUser;
489
+ isTriggeredByUser = /** @type {CustomEvent} */ event.detail.isTriggeredByUser;
557
490
  });
558
-
559
491
  mimicSelectFile(el, [file]);
560
492
  await el.updateComplete;
561
493
  expect(counter).to.equal(1);
562
494
  expect(isTriggeredByUser).to.be.true;
563
-
564
495
  mimicSelectFile(el, [file, file2]);
565
496
  await el.updateComplete;
566
497
  expect(counter).to.equal(2);
567
498
  });
568
499
  });
569
-
570
500
  describe('multiple file select', () => {
571
501
  it('should add multiple files', async () => {
572
502
  const el = await fixture(html`
573
503
  <lion-input-file label="Select" .multiple="${true}"> </lion-input-file>
574
504
  `);
575
-
576
505
  mimicSelectFile(el, [file, file2]);
577
-
578
506
  await el.updateComplete;
579
507
  // @ts-expect-error [allow-protected-in-test]
580
508
  expect(el._selectedFilesMetaData.length).to.equal(2);
@@ -582,15 +510,12 @@ describe('lion-input-file', () => {
582
510
  expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('foo.txt');
583
511
  // @ts-expect-error [allow-protected-in-test]
584
512
  expect(el._selectedFilesMetaData[1].systemFile.name).to.equal('bar.txt');
585
-
586
513
  expect(el.uploadResponse.length).to.equal(2);
587
514
  expect(el.uploadResponse[0].name).to.equal('foo.txt');
588
515
  expect(el.uploadResponse[1].name).to.equal('bar.txt');
589
516
  });
590
-
591
517
  it('should add new files and retain previous files', async () => {
592
518
  const el = await fixture(html` <lion-input-file .multiple="${true}"></lion-input-file> `);
593
-
594
519
  setTimeout(() => {
595
520
  mimicSelectFile(el, [file, file2]);
596
521
  });
@@ -601,7 +526,6 @@ describe('lion-input-file', () => {
601
526
  // @ts-expect-error [allow-protected-in-test]
602
527
  expect(el._selectedFilesMetaData.length).to.equal(2);
603
528
  expect(el.modelValue.length).to.equal(2);
604
-
605
529
  setTimeout(() => {
606
530
  mimicSelectFile(el, [file3, file4]);
607
531
  });
@@ -613,23 +537,18 @@ describe('lion-input-file', () => {
613
537
  expect(el._selectedFilesMetaData.length).to.equal(4);
614
538
  expect(el.modelValue.length).to.equal(4);
615
539
  });
616
-
617
540
  it('should add multiple files and dispatch file-list-changed event ONLY with newly added file', async () => {
618
541
  const el = await fixture(html` <lion-input-file .multiple="${true}"></lion-input-file> `);
619
-
620
542
  setTimeout(() => {
621
543
  mimicSelectFile(el, [file, file2]);
622
544
  });
623
545
  const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
624
546
  filesListChanged(el, fileListChangedEvent);
625
-
626
547
  setTimeout(() => {
627
548
  mimicSelectFile(el, [file3, file4]);
628
549
  });
629
-
630
550
  const fileListChangedEvent1 = await oneEvent(el, 'file-list-changed');
631
551
  filesListChanged(el, fileListChangedEvent1);
632
-
633
552
  expect(fileListChangedEvent1).to.exist;
634
553
  // @ts-expect-error [allow-protected-in-test]
635
554
  expect(el._selectedFilesMetaData.length).to.equal(4);
@@ -637,10 +556,8 @@ describe('lion-input-file', () => {
637
556
  expect(fileListChangedEvent1.detail.newFiles[0].name).to.equal('foo3.txt');
638
557
  expect(fileListChangedEvent1.detail.newFiles[1].name).to.equal('foo4.txt');
639
558
  });
640
-
641
559
  it('should not allow duplicate files to be selected and show notification message', async () => {
642
560
  const el = await fixture(html` <lion-input-file .multiple="${true}"></lion-input-file> `);
643
-
644
561
  setTimeout(() => {
645
562
  mimicSelectFile(el, [file]);
646
563
  });
@@ -653,17 +570,14 @@ describe('lion-input-file', () => {
653
570
  expect(el._selectedFilesMetaData.length).to.equal(1);
654
571
  // @ts-expect-error [allow-protected-in-test]
655
572
  expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('foo.txt');
656
-
657
573
  expect(fileListChangedEvent).to.exist;
658
574
  expect(fileListChangedEvent.detail.newFiles.length).to.equal(1);
659
575
  expect(fileListChangedEvent.detail.newFiles[0].name).to.equal('foo.txt');
660
-
661
- const fileDuplicate = /** @type {InputFile} */ (
576
+ const fileDuplicate =
577
+ /** @type {InputFile} */
662
578
  new File(['foo'], 'foo.txt', {
663
579
  type: 'text/plain',
664
- })
665
- );
666
-
580
+ });
667
581
  mimicSelectFile(el, [fileDuplicate]);
668
582
  await el.updateComplete;
669
583
  // @ts-expect-error [allow-protected-in-test]
@@ -671,23 +585,19 @@ describe('lion-input-file', () => {
671
585
  expect(el.hasFeedbackFor).to.deep.equals(['info'], 'hasFeedbackFor');
672
586
  expect(el.showsFeedbackFor).to.deep.equals(['info'], 'showsFeedbackFor');
673
587
  });
674
-
675
588
  it('should add valid files and skip invalid ones', async () => {
676
- const fileWrongSize = /** @type {InputFile} */ (new File(['foobar'], 'foobar.txt'));
677
- const fileWrongType = /** @type {InputFile} */ (
589
+ const fileWrongSize = /** @type {InputFile} */ new File(['foobar'], 'foobar.txt');
590
+ const fileWrongType =
591
+ /** @type {InputFile} */
678
592
  new File(['foobar'], 'foobar.txt', {
679
593
  type: 'xxxxx',
680
- })
681
- );
682
-
594
+ });
683
595
  const el = await fixture(html`
684
596
  <lion-input-file multiple max-file-size="3" accept=".txt"></lion-input-file>
685
597
  `);
686
-
687
598
  setTimeout(() => {
688
599
  mimicSelectFile(el, [file, fileWrongSize, file2, fileWrongType]);
689
600
  });
690
-
691
601
  const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
692
602
  // @ts-expect-error [allow-protected-in-test]
693
603
  expect(el._selectedFilesMetaData.length).to.equal(4);
@@ -697,7 +607,6 @@ describe('lion-input-file', () => {
697
607
  expect(fileListChangedEvent.detail.newFiles[1].name).to.equal('bar.txt');
698
608
  });
699
609
  });
700
-
701
610
  describe('status and error', () => {
702
611
  /**
703
612
  * @type {LionInputFile}
@@ -706,12 +615,15 @@ describe('lion-input-file', () => {
706
615
  beforeEach(async () => {
707
616
  el = await fixture(html`<lion-input-file accept="text/plain"></lion-input-file>`);
708
617
  });
709
-
710
618
  it('should set uploadResponse data to _selectedFilesMetaData for rendering error and status', async () => {
711
619
  mimicSelectFile(el, [file]);
712
-
713
- el.uploadResponse = [{ name: 'foo.txt', status: 'LOADING', errorMessage: '500' }];
714
-
620
+ el.uploadResponse = [
621
+ {
622
+ name: 'foo.txt',
623
+ status: 'LOADING',
624
+ errorMessage: '500',
625
+ },
626
+ ];
715
627
  await el.updateComplete;
716
628
 
717
629
  // @ts-expect-error [allow-protected-in-test]
@@ -719,32 +631,27 @@ describe('lion-input-file', () => {
719
631
  // @ts-ignore
720
632
  expect(el._selectedFilesMetaData[0].validationFeedback[0].message).to.equal('500');
721
633
  });
722
-
723
634
  it('should not fire file-list-changed event if invalid file is selected', async () => {
724
- const filePdf = /** @type {InputFile} */ (
635
+ const filePdf =
636
+ /** @type {InputFile} */
725
637
  new File(['foo'], 'foo.pdf', {
726
638
  type: 'application/pdf',
727
- })
728
- );
639
+ });
729
640
  // @ts-ignore
730
641
  const fileListChangedSpy = sinon.spy(el, '_dispatchFileListChangeEvent');
731
-
732
642
  mimicSelectFile(el, [filePdf]);
733
-
734
643
  expect(fileListChangedSpy).have.not.been.called;
735
644
  fileListChangedSpy.restore();
736
645
  });
737
-
738
646
  it('updates showFeedbackFor when a wrong file has been added/removed', async () => {
739
- const fileWrongType = /** @type {InputFile} */ (
647
+ const fileWrongType =
648
+ /** @type {InputFile} */
740
649
  new File(['foobar'], 'foobar.txt', {
741
650
  type: 'xxxxx',
742
- })
743
- );
651
+ });
744
652
 
745
653
  // create condition to also show the feedback
746
654
  el.prefilled = true;
747
-
748
655
  mimicSelectFile(el, [fileWrongType]);
749
656
  await el.updateComplete;
750
657
  expect(el.hasFeedbackFor).to.deep.equals(['error'], 'hasFeedbackFor');
@@ -757,17 +664,22 @@ describe('lion-input-file', () => {
757
664
  expect(el.showsFeedbackFor).to.deep.equals([]);
758
665
  });
759
666
  });
760
-
761
667
  describe('validations when used with lion-form', () => {
762
668
  it('should throw error with Required validator', async () => {
763
669
  const el = await fixture(html`
764
670
  <lion-input-file
765
671
  name="myFileInput"
766
- .validators="${[new Required({}, { getMessage: () => 'FooBar' })]}"
672
+ .validators="${[
673
+ new Required(
674
+ {},
675
+ {
676
+ getMessage: () => 'FooBar',
677
+ },
678
+ ),
679
+ ]}"
767
680
  >
768
681
  </lion-input-file>
769
682
  `);
770
-
771
683
  el.touched = true;
772
684
  el.dirty = true;
773
685
  await el.updateComplete;
@@ -777,7 +689,6 @@ describe('lion-input-file', () => {
777
689
  expect(_feedbackNode.feedbackData?.[0].message).to.equal('FooBar');
778
690
  expect(el.hasFeedbackFor.includes('error')).to.be.true;
779
691
  });
780
-
781
692
  it('reset method should remove File from modelValue but keep uploadResponse', async () => {
782
693
  const uploadResponse = [
783
694
  {
@@ -794,17 +705,14 @@ describe('lion-input-file', () => {
794
705
  // @ts-expect-error [allow-protected-in-test]
795
706
  el.uploadResponse = uploadResponse;
796
707
  await el.updateComplete;
797
-
798
708
  mimicSelectFile(el, [file]);
799
709
  await el.updateComplete;
800
-
801
710
  await el.reset();
802
711
  expect(el.modelValue).to.deep.equal([]);
803
712
  // @ts-expect-error [allow-protected-in-test]
804
713
  expect(el._selectedFilesMetaData).to.deep.equal([]);
805
714
  expect(el.uploadResponse).to.deep.equal(uploadResponse);
806
715
  });
807
-
808
716
  it('clear method should remove File from modelValue and uploadResponse', async () => {
809
717
  const uploadResponse = [
810
718
  {
@@ -818,7 +726,6 @@ describe('lion-input-file', () => {
818
726
 
819
727
  // @ts-expect-error [allow-protected-in-test]
820
728
  el.uploadResponse = uploadResponse;
821
-
822
729
  setTimeout(() => {
823
730
  mimicSelectFile(el, [file]);
824
731
  });
@@ -830,7 +737,6 @@ describe('lion-input-file', () => {
830
737
  expect(el._selectedFilesMetaData).to.deep.equal([]);
831
738
  });
832
739
  });
833
-
834
740
  describe('file select component with prefilled state', () => {
835
741
  /**
836
742
  * @type {LionInputFile}
@@ -849,7 +755,6 @@ describe('lion-input-file', () => {
849
755
  errorMessage: 'something went wrong',
850
756
  },
851
757
  ];
852
-
853
758
  beforeEach(async () => {
854
759
  el = await fixture(html`
855
760
  <lion-input-file name="myFiles" multiple="${true}"> </lion-input-file>
@@ -857,10 +762,8 @@ describe('lion-input-file', () => {
857
762
 
858
763
  // @ts-expect-error [allow-protected-in-test]
859
764
  el.uploadResponse = uploadResponse;
860
-
861
765
  await el.updateComplete;
862
766
  });
863
-
864
767
  it('should update the _selectedFilesMetaData according to uploadResponse', () => {
865
768
  // @ts-expect-error [allow-protected-in-test]
866
769
  expect(el._selectedFilesMetaData.length).to.equal(2);
@@ -875,7 +778,6 @@ describe('lion-input-file', () => {
875
778
  'something went wrong',
876
779
  );
877
780
  });
878
-
879
781
  it('should remove file on click of cross button', async () => {
880
782
  /**
881
783
  * @type {Partial<InputFile>}
@@ -883,8 +785,13 @@ describe('lion-input-file', () => {
883
785
  const removedFile = {
884
786
  name: 'file2.txt',
885
787
  status: 'FAIL',
886
- systemFile: { name: 'file2.txt' },
887
- response: { name: 'file2.txt', status: 'FAIL' },
788
+ systemFile: {
789
+ name: 'file2.txt',
790
+ },
791
+ response: {
792
+ name: 'file2.txt',
793
+ status: 'FAIL',
794
+ },
888
795
  };
889
796
  // @ts-expect-error [allow-protected-in-test]
890
797
  const removeFileSpy = sinon.spy(el, '_removeFile');
@@ -905,14 +812,12 @@ describe('lion-input-file', () => {
905
812
  },
906
813
  }),
907
814
  );
908
-
909
815
  await el.updateComplete;
910
816
  expect(removeFileSpy).have.been.calledOnce;
911
817
  // @ts-expect-error [allow-protected-in-test]
912
818
  expect(el._selectedFilesMetaData.length).to.equal(1);
913
819
  removeFileSpy.restore();
914
820
  });
915
-
916
821
  it('should fire file-removed event with uploadResponse in the details', async () => {
917
822
  /**
918
823
  * @type {Partial<InputFile>}
@@ -920,17 +825,19 @@ describe('lion-input-file', () => {
920
825
  const removedFile = {
921
826
  name: 'file2.txt',
922
827
  status: 'FAIL',
923
- systemFile: { name: 'file2.txt' },
924
- response: { name: 'file2.txt', status: 'FAIL' },
828
+ systemFile: {
829
+ name: 'file2.txt',
830
+ },
831
+ response: {
832
+ name: 'file2.txt',
833
+ status: 'FAIL',
834
+ },
925
835
  };
926
-
927
836
  setTimeout(() => {
928
837
  // @ts-ignore ignore file typing
929
838
  el._removeFile(removedFile);
930
839
  });
931
-
932
840
  await el.updateComplete;
933
-
934
841
  const removeFileEvent = await oneEvent(el, 'file-removed');
935
842
 
936
843
  // assertion for event data
@@ -953,7 +860,6 @@ describe('lion-input-file', () => {
953
860
  });
954
861
  });
955
862
  });
956
-
957
863
  describe('drag and drop', () => {
958
864
  /**
959
865
  * @type {LionInputFile}
@@ -963,44 +869,60 @@ describe('lion-input-file', () => {
963
869
  el = await fixture(html`
964
870
  <lion-input-file name="myFiles" multiple enable-drop-zone></lion-input-file>
965
871
  `);
966
-
967
872
  await el.updateComplete;
968
873
  });
969
-
970
874
  it('should set "is-dragging" on dragenter', async () => {
971
875
  const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
972
- dropzone?.dispatchEvent(new Event('dragenter', { bubbles: true }));
876
+ dropzone?.dispatchEvent(
877
+ new Event('dragenter', {
878
+ bubbles: true,
879
+ }),
880
+ );
973
881
  await el.updateComplete;
974
882
  expect(el.hasAttribute('is-dragging')).to.equal(true);
975
883
  });
976
-
977
884
  it('should set "is-dragging" on dragover', async () => {
978
885
  const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
979
- dropzone?.dispatchEvent(new Event('dragover', { bubbles: true }));
886
+ dropzone?.dispatchEvent(
887
+ new Event('dragover', {
888
+ bubbles: true,
889
+ }),
890
+ );
980
891
  await el.updateComplete;
981
892
  expect(el.hasAttribute('is-dragging')).to.equal(true);
982
893
  });
983
-
984
894
  it('should remove "is-dragging" on dragleave', async () => {
985
895
  const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
986
- dropzone?.dispatchEvent(new Event('dragenter', { bubbles: true }));
896
+ dropzone?.dispatchEvent(
897
+ new Event('dragenter', {
898
+ bubbles: true,
899
+ }),
900
+ );
987
901
  await el.updateComplete;
988
-
989
- dropzone?.dispatchEvent(new Event('dragleave', { bubbles: true }));
902
+ dropzone?.dispatchEvent(
903
+ new Event('dragleave', {
904
+ bubbles: true,
905
+ }),
906
+ );
990
907
  await el.updateComplete;
991
908
  expect(el.hasAttribute('is-dragging')).to.equal(false);
992
909
  });
993
-
994
910
  it('should remove "is-dragging" on drop', async () => {
995
911
  const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
996
- dropzone?.dispatchEvent(new Event('dragenter', { bubbles: true }));
912
+ dropzone?.dispatchEvent(
913
+ new Event('dragenter', {
914
+ bubbles: true,
915
+ }),
916
+ );
997
917
  await el.updateComplete;
998
-
999
- window.dispatchEvent(new Event('drop', { bubbles: true }));
918
+ window.dispatchEvent(
919
+ new Event('drop', {
920
+ bubbles: true,
921
+ }),
922
+ );
1000
923
  await el.updateComplete;
1001
924
  expect(el.hasAttribute('is-dragging')).to.equal(false);
1002
925
  });
1003
-
1004
926
  it('should update modelValue on drop', async () => {
1005
927
  const list = new DataTransfer();
1006
928
  // @ts-ignore
@@ -1010,13 +932,18 @@ describe('lion-input-file', () => {
1010
932
  // @ts-expect-error [allow-protected-in-test]
1011
933
  await el._processDroppedFiles({
1012
934
  // @ts-ignore
1013
- dataTransfer: { files: droppedFiles, items: [{ name: 'test.txt' }] },
935
+ dataTransfer: {
936
+ files: droppedFiles,
937
+ items: [
938
+ {
939
+ name: 'test.txt',
940
+ },
941
+ ],
942
+ },
1014
943
  preventDefault: () => {},
1015
944
  });
1016
945
  await el.updateComplete;
1017
-
1018
946
  expect(el.modelValue.length).to.equal(1);
1019
-
1020
947
  const list2 = new DataTransfer();
1021
948
  // @ts-ignore
1022
949
  list2.items.add(file2);
@@ -1024,14 +951,19 @@ describe('lion-input-file', () => {
1024
951
  // @ts-expect-error [allow-protected-in-test]
1025
952
  await el._processDroppedFiles({
1026
953
  // @ts-ignore
1027
- dataTransfer: { files: list2.files, items: [{ name: 'test2.txt' }] },
954
+ dataTransfer: {
955
+ files: list2.files,
956
+ items: [
957
+ {
958
+ name: 'test2.txt',
959
+ },
960
+ ],
961
+ },
1028
962
  preventDefault: () => {},
1029
963
  });
1030
964
  await el.updateComplete;
1031
-
1032
965
  expect(el.modelValue.length).to.equal(2);
1033
966
  });
1034
-
1035
967
  it('should call _processFiles method', async () => {
1036
968
  const list = new DataTransfer();
1037
969
  // @ts-ignore
@@ -1043,15 +975,20 @@ describe('lion-input-file', () => {
1043
975
  // @ts-expect-error [allow-protected-in-test]
1044
976
  await el._processDroppedFiles({
1045
977
  // @ts-ignore
1046
- dataTransfer: { files: droppedFiles, items: [{ name: 'test.txt' }] },
978
+ dataTransfer: {
979
+ files: droppedFiles,
980
+ items: [
981
+ {
982
+ name: 'test.txt',
983
+ },
984
+ ],
985
+ },
1047
986
  preventDefault: () => {},
1048
987
  });
1049
-
1050
988
  expect(_processFilesSpy).have.been.calledOnce;
1051
989
  _processFilesSpy.restore();
1052
990
  });
1053
991
  });
1054
-
1055
992
  describe('uploadOnSelect as true', () => {
1056
993
  it('should not remove file on click of cross button and fire file-removed event', async () => {
1057
994
  /**
@@ -1060,24 +997,24 @@ describe('lion-input-file', () => {
1060
997
  const removeFile = {
1061
998
  name: 'foo.txt',
1062
999
  status: 'SUCCESS',
1063
- systemFile: { name: 'foo.txt' },
1064
- response: { name: 'foo.txt', status: 'SUCCESS' },
1000
+ systemFile: {
1001
+ name: 'foo.txt',
1002
+ },
1003
+ response: {
1004
+ name: 'foo.txt',
1005
+ status: 'SUCCESS',
1006
+ },
1065
1007
  };
1066
-
1067
1008
  const el = await fixture(html`
1068
1009
  <lion-input-file .uploadOnSelect="${true}"> </lion-input-file>
1069
1010
  `);
1070
-
1071
1011
  el.modelValue = [file];
1072
1012
  mimicSelectFile(el, [file]);
1073
-
1074
1013
  await el.updateComplete;
1075
-
1076
1014
  setTimeout(() => {
1077
1015
  // @ts-ignore ignore file typing
1078
1016
  el._removeFile(removeFile);
1079
1017
  });
1080
-
1081
1018
  const removeFileEvent = await oneEvent(el, 'file-removed');
1082
1019
 
1083
1020
  // assertion for displayed file list to be same
@@ -1105,7 +1042,6 @@ describe('lion-input-file', () => {
1105
1042
  status: 'SUCCESS',
1106
1043
  });
1107
1044
  });
1108
-
1109
1045
  it('should remove file from displayed list if not available in uploadResponse array', async () => {
1110
1046
  const uploadResponse = [
1111
1047
  {
@@ -1120,14 +1056,12 @@ describe('lion-input-file', () => {
1120
1056
  errorMessage: 'something went wrong',
1121
1057
  },
1122
1058
  ];
1123
-
1124
1059
  const el = await fixture(html`
1125
1060
  <lion-input-file label="Select" .uploadOnSelect="${true}"> </lion-input-file>
1126
1061
  `);
1127
1062
 
1128
1063
  // @ts-expect-error [allow-protected-in-test]
1129
1064
  el.uploadResponse = uploadResponse;
1130
-
1131
1065
  await el.updateComplete;
1132
1066
  // assertion for displayed file list to be same
1133
1067
  // @ts-expect-error [allow-protected-in-test]
@@ -1150,13 +1084,11 @@ describe('lion-input-file', () => {
1150
1084
  expect(el._inputNode.value).to.equal('');
1151
1085
  });
1152
1086
  });
1153
-
1154
1087
  describe('Accessibility', async () => {
1155
1088
  it('is accessible', async () => {
1156
1089
  const el = await fixture(html`<lion-input-file label="Select"></lion-input-file>`);
1157
1090
  await expect(el).to.be.accessible();
1158
1091
  });
1159
-
1160
1092
  it('is accessible when a file is selected', async () => {
1161
1093
  const uploadResponse = [
1162
1094
  {
@@ -1170,10 +1102,8 @@ describe('lion-input-file', () => {
1170
1102
 
1171
1103
  // @ts-expect-error [allow-protected-in-test]
1172
1104
  el.uploadResponse = uploadResponse;
1173
-
1174
1105
  await expect(el).to.be.accessible();
1175
1106
  });
1176
-
1177
1107
  it('is accessible with an selected file and disabled', async () => {
1178
1108
  const uploadResponse = [
1179
1109
  {
@@ -1183,15 +1113,12 @@ describe('lion-input-file', () => {
1183
1113
  downloadUrl: '/downloadFile',
1184
1114
  },
1185
1115
  ];
1186
-
1187
1116
  const el = await fixture(html` <lion-input-file label="Select" disabled></lion-input-file> `);
1188
1117
 
1189
1118
  // @ts-expect-error [allow-protected-in-test]
1190
1119
  el.uploadResponse = uploadResponse;
1191
-
1192
1120
  await expect(el).to.be.accessible();
1193
1121
  });
1194
-
1195
1122
  describe('has correct aria-roles', async () => {
1196
1123
  it('select-button has aria-labelledby set to itself and the label', async () => {
1197
1124
  const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
@@ -1206,7 +1133,6 @@ describe('lion-input-file', () => {
1206
1133
  `label-${el._inputId}`,
1207
1134
  );
1208
1135
  });
1209
-
1210
1136
  it('select-button has aria-describedby set to the help-text, after and the feedback message', async () => {
1211
1137
  const uploadResponse = [
1212
1138
  {
@@ -1239,7 +1165,6 @@ describe('lion-input-file', () => {
1239
1165
  `after-${el._inputId}`,
1240
1166
  );
1241
1167
  });
1242
-
1243
1168
  it('after contains upload name of file when uploadOnSelect is true and status is SUCCESS', async () => {
1244
1169
  const uploadResponse = [
1245
1170
  {
@@ -1252,7 +1177,6 @@ describe('lion-input-file', () => {
1252
1177
  const el = await fixture(html`
1253
1178
  <lion-input-file label="Select" upload-on-select></lion-input-file>
1254
1179
  `);
1255
-
1256
1180
  expect(el.querySelector('[slot="after"]')?.textContent).to.equal('No files uploaded.');
1257
1181
  // @ts-expect-error
1258
1182
  el.uploadResponse = uploadResponse;
@@ -1261,7 +1185,6 @@ describe('lion-input-file', () => {
1261
1185
  'Uploaded file: file1.txt',
1262
1186
  );
1263
1187
  });
1264
-
1265
1188
  it('after contains upload name of file when uploadOnSelect is false and status is SUCCESS', async () => {
1266
1189
  const uploadResponse = [
1267
1190
  {
@@ -1272,7 +1195,6 @@ describe('lion-input-file', () => {
1272
1195
  },
1273
1196
  ];
1274
1197
  const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
1275
-
1276
1198
  expect(el.querySelector('[slot="after"]')?.textContent).to.equal('No files selected.');
1277
1199
  // @ts-expect-error
1278
1200
  el.uploadResponse = uploadResponse;
@@ -1281,7 +1203,6 @@ describe('lion-input-file', () => {
1281
1203
  'Selected file: file1.txt',
1282
1204
  );
1283
1205
  });
1284
-
1285
1206
  it('after contains upload validator message of file when FAIL', async () => {
1286
1207
  const uploadResponse = [
1287
1208
  {
@@ -1292,14 +1213,12 @@ describe('lion-input-file', () => {
1292
1213
  },
1293
1214
  ];
1294
1215
  const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
1295
-
1296
1216
  expect(el.querySelector('[slot="after"]')?.textContent).to.equal('No files selected.');
1297
1217
  // @ts-expect-error
1298
1218
  el.uploadResponse = uploadResponse;
1299
1219
  await el.updateComplete;
1300
1220
  expect(el.querySelector('[slot="after"]')?.textContent).to.equal('something went wrong');
1301
1221
  });
1302
-
1303
1222
  it('after contains upload status of files when uploadOnSelect is true and multiple files have been selected', async () => {
1304
1223
  const uploadResponse = [
1305
1224
  {
@@ -1320,13 +1239,11 @@ describe('lion-input-file', () => {
1320
1239
  `);
1321
1240
  // @ts-expect-error
1322
1241
  el.uploadResponse = uploadResponse;
1323
-
1324
1242
  await el.updateComplete;
1325
1243
  expect(el.querySelector('[slot="after"]')?.textContent?.trim()).to.equal(
1326
1244
  'Uploaded files: 2 files. "something went wrong", for file2.txt.',
1327
1245
  );
1328
1246
  });
1329
-
1330
1247
  it('after contains upload status of files when uploadOnSelect is false and multiple files have been selected', async () => {
1331
1248
  const uploadResponse = [
1332
1249
  {
@@ -1347,7 +1264,6 @@ describe('lion-input-file', () => {
1347
1264
  `);
1348
1265
  // @ts-expect-error
1349
1266
  el.uploadResponse = uploadResponse;
1350
-
1351
1267
  await el.updateComplete;
1352
1268
  expect(el.querySelector('[slot="after"]')?.textContent?.trim()).to.equal(
1353
1269
  'Selected files: 2 files. "something went wrong", for file2.txt.',