@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
@@ -3,7 +3,6 @@ import sinon from 'sinon';
3
3
  // @ts-ignore
4
4
  import { fetchMock } from '@bundled-es-modules/fetch-mock';
5
5
  import { setupFakeImport, resetFakeImport, fakeImport } from '@lion/ui/localize-test-helpers.js';
6
-
7
6
  import { LocalizeManager } from '@lion/ui/localize-no-side-effects.js';
8
7
 
9
8
  /**
@@ -26,51 +25,44 @@ function getProtectedMembers(localizeManagerEl) {
26
25
  function removeLtrRtl(str) {
27
26
  return str.replace(/(\u200E|\u200E)/g, '');
28
27
  }
29
-
30
28
  describe('LocalizeManager', () => {
31
29
  /** @type {LocalizeManager} */
32
30
  let manager;
33
-
34
31
  beforeEach(() => {
35
32
  // makes sure that between tests the localization is reset to default state
36
33
  document.documentElement.lang = 'en-GB';
37
34
  });
38
-
39
35
  afterEach(() => {
40
36
  manager.teardown();
41
37
  });
42
-
43
38
  afterEach(() => {
44
39
  fetchMock.restore();
45
40
  resetFakeImport();
46
41
  });
47
-
48
42
  it('syncs locale back to <html> if changed', () => {
49
43
  manager = new LocalizeManager();
50
44
  manager.locale = 'nl-NL';
51
45
  expect(document.documentElement.lang).to.equal('nl-NL');
52
46
  });
53
-
54
47
  it('sets locale to "en-GB" by default if nothing is set on <html>', () => {
55
48
  document.documentElement.lang = '';
56
49
  manager = new LocalizeManager();
57
50
  expect(manager.locale).to.equal('en-GB');
58
51
  expect(document.documentElement.lang).to.equal('en-GB');
59
52
  });
60
-
61
53
  it('empties storage after reset() is invoked', async () => {
62
54
  manager = new LocalizeManager();
63
-
64
55
  let deferredResolve;
65
56
  manager.loadNamespace({
66
57
  generic: () =>
67
- new Promise(resolve => {
68
- deferredResolve = () => resolve({ greeting: 'Hello!' });
58
+ new Promise((resolve) => {
59
+ deferredResolve = () =>
60
+ resolve({
61
+ greeting: 'Hello!',
62
+ });
69
63
  }),
70
64
  });
71
-
72
65
  const { loadingComplete } = manager;
73
-
74
66
  manager.reset();
75
67
  expect(getProtectedMembers(manager).storage).to.be.empty;
76
68
 
@@ -81,308 +73,362 @@ describe('LocalizeManager', () => {
81
73
  // storage still needs to be empty after promise is fulfilled.
82
74
  expect(getProtectedMembers(manager).storage).to.be.empty;
83
75
  });
84
-
85
76
  it('has teardown() method removing all side effects', () => {
86
77
  manager = new LocalizeManager();
87
78
  const disconnectObserverSpy = sinon.spy(
88
79
  manager._htmlLangAttributeObserver,
89
- /** @type {never} */ ('disconnect'),
80
+ /** @type {never} */ 'disconnect',
90
81
  );
91
82
  manager.teardown();
92
83
  expect(disconnectObserverSpy.callCount).to.equal(1);
93
84
  });
94
-
95
85
  describe('"localeChanged" event with detail.newLocale and detail.oldLocale', () => {
96
86
  it('fires "localeChanged" event if locale was changed via manager', async () => {
97
87
  manager = new LocalizeManager();
98
88
  setTimeout(() => {
99
89
  manager.locale = 'en-US';
100
90
  });
101
-
102
91
  const event = await oneEvent(
103
- /** @type {EventTarget} */ (/** @type {unknown} */ (manager)),
92
+ /** @type {EventTarget} */ /** @type {unknown} */ manager,
104
93
  'localeChanged',
105
94
  );
106
95
  expect(event.detail.newLocale).to.equal('en-US');
107
96
  expect(event.detail.oldLocale).to.equal('en-GB');
108
97
  });
109
-
110
98
  it('does not fire "localeChanged" event if it was set to the same locale', () => {
111
99
  manager = new LocalizeManager();
112
100
  const eventSpy = sinon.spy();
113
-
114
101
  manager.addEventListener('localeChanged', eventSpy);
115
102
  manager.locale = 'en-US';
116
103
  manager.locale = 'en-US';
117
104
  expect(eventSpy.callCount).to.equal(1);
118
105
  });
119
106
  });
120
-
121
107
  describe('addData()', () => {
122
108
  it('allows to provide inline data', () => {
123
109
  manager = new LocalizeManager();
124
110
  const { storage } = getProtectedMembers(manager);
125
-
126
- manager.addData('en-GB', 'lion-hello', { greeting: 'Hi!' });
127
-
111
+ manager.addData('en-GB', 'lion-hello', {
112
+ greeting: 'Hi!',
113
+ });
128
114
  expect(storage).to.deep.equal({
129
115
  'en-GB': {
130
- 'lion-hello': { greeting: 'Hi!' },
116
+ 'lion-hello': {
117
+ greeting: 'Hi!',
118
+ },
131
119
  },
132
120
  });
133
-
134
- manager.addData('en-GB', 'lion-goodbye', { farewell: 'Cheers!' });
135
-
121
+ manager.addData('en-GB', 'lion-goodbye', {
122
+ farewell: 'Cheers!',
123
+ });
136
124
  expect(storage).to.deep.equal({
137
125
  'en-GB': {
138
- 'lion-hello': { greeting: 'Hi!' },
139
- 'lion-goodbye': { farewell: 'Cheers!' },
126
+ 'lion-hello': {
127
+ greeting: 'Hi!',
128
+ },
129
+ 'lion-goodbye': {
130
+ farewell: 'Cheers!',
131
+ },
140
132
  },
141
133
  });
142
-
143
- manager.addData('nl-NL', 'lion-hello', { greeting: 'Hoi!' });
144
- manager.addData('nl-NL', 'lion-goodbye', { farewell: 'Doei!' });
145
-
134
+ manager.addData('nl-NL', 'lion-hello', {
135
+ greeting: 'Hoi!',
136
+ });
137
+ manager.addData('nl-NL', 'lion-goodbye', {
138
+ farewell: 'Doei!',
139
+ });
146
140
  expect(storage).to.deep.equal({
147
141
  'en-GB': {
148
- 'lion-hello': { greeting: 'Hi!' },
149
- 'lion-goodbye': { farewell: 'Cheers!' },
142
+ 'lion-hello': {
143
+ greeting: 'Hi!',
144
+ },
145
+ 'lion-goodbye': {
146
+ farewell: 'Cheers!',
147
+ },
150
148
  },
151
149
  'nl-NL': {
152
- 'lion-hello': { greeting: 'Hoi!' },
153
- 'lion-goodbye': { farewell: 'Doei!' },
150
+ 'lion-hello': {
151
+ greeting: 'Hoi!',
152
+ },
153
+ 'lion-goodbye': {
154
+ farewell: 'Doei!',
155
+ },
154
156
  },
155
157
  });
156
158
  });
157
-
158
159
  it('prevents mutating existing data for the same locale & namespace when "allowOverridesForExistingNamespaces" option is not given in constructor', () => {
159
160
  manager = new LocalizeManager();
160
161
  const { storage } = getProtectedMembers(manager);
161
-
162
- manager.addData('en-GB', 'lion-hello', { greeting: 'Hi!' });
163
-
162
+ manager.addData('en-GB', 'lion-hello', {
163
+ greeting: 'Hi!',
164
+ });
164
165
  expect(() => {
165
- manager.addData('en-GB', 'lion-hello', { greeting: 'Hello!' });
166
+ manager.addData('en-GB', 'lion-hello', {
167
+ greeting: 'Hello!',
168
+ });
166
169
  }).to.throw();
167
-
168
170
  expect(storage).to.deep.equal({
169
- 'en-GB': { 'lion-hello': { greeting: 'Hi!' } },
171
+ 'en-GB': {
172
+ 'lion-hello': {
173
+ greeting: 'Hi!',
174
+ },
175
+ },
170
176
  });
171
177
  });
172
-
173
178
  it('allows mutating existing data for the same locale & namespace when "allowOverridesForExistingNamespaces" option is set to "true" in constructor', () => {
174
- manager = new LocalizeManager({ allowOverridesForExistingNamespaces: true });
179
+ manager = new LocalizeManager({
180
+ allowOverridesForExistingNamespaces: true,
181
+ });
175
182
  const { storage } = getProtectedMembers(manager);
176
-
177
- manager.addData('en-GB', 'lion-hello', { greeting: 'Hi!' });
178
-
183
+ manager.addData('en-GB', 'lion-hello', {
184
+ greeting: 'Hi!',
185
+ });
179
186
  expect(storage).to.deep.equal({
180
- 'en-GB': { 'lion-hello': { greeting: 'Hi!' } },
187
+ 'en-GB': {
188
+ 'lion-hello': {
189
+ greeting: 'Hi!',
190
+ },
191
+ },
192
+ });
193
+ manager.addData('en-GB', 'lion-hello', {
194
+ greeting: 'Hi!',
195
+ alternative: 'Hello!',
181
196
  });
182
-
183
- manager.addData('en-GB', 'lion-hello', { greeting: 'Hi!', alternative: 'Hello!' });
184
-
185
197
  expect(storage).to.deep.equal({
186
- 'en-GB': { 'lion-hello': { greeting: 'Hi!', alternative: 'Hello!' } },
198
+ 'en-GB': {
199
+ 'lion-hello': {
200
+ greeting: 'Hi!',
201
+ alternative: 'Hello!',
202
+ },
203
+ },
187
204
  });
188
205
  });
189
206
  });
190
-
191
207
  describe('loading via dynamic imports', () => {
192
208
  it('loads a namespace via loadNamespace()', async () => {
193
- setupFakeImport('./my-component/en-GB.js', { default: { greeting: 'Hello!' } });
194
-
209
+ setupFakeImport('./my-component/en-GB.js', {
210
+ default: {
211
+ greeting: 'Hello!',
212
+ },
213
+ });
195
214
  manager = new LocalizeManager();
196
215
  const { storage } = getProtectedMembers(manager);
197
-
198
216
  await manager.loadNamespace({
199
217
  /** @param {string} locale */
200
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`),
218
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
201
219
  });
202
-
203
220
  expect(storage).to.deep.equal({
204
221
  'en-GB': {
205
- 'my-component': { greeting: 'Hello!' },
222
+ 'my-component': {
223
+ greeting: 'Hello!',
224
+ },
206
225
  },
207
226
  });
208
227
  });
209
-
210
228
  it('can load a namespace for a different locale', async () => {
211
- setupFakeImport('./my-component/nl-NL.js', { default: { greeting: 'Hello!' } });
212
-
229
+ setupFakeImport('./my-component/nl-NL.js', {
230
+ default: {
231
+ greeting: 'Hello!',
232
+ },
233
+ });
213
234
  manager = new LocalizeManager();
214
235
  const { storage } = getProtectedMembers(manager);
215
236
  manager.locale = 'en-US';
216
-
217
237
  await manager.loadNamespace(
218
238
  {
219
239
  /** @param {string} locale */
220
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`),
240
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
241
+ },
242
+ {
243
+ locale: 'nl-NL',
221
244
  },
222
- { locale: 'nl-NL' },
223
245
  );
224
-
225
246
  expect(storage).to.deep.equal({
226
247
  'nl-NL': {
227
- 'my-component': { greeting: 'Hello!' },
248
+ 'my-component': {
249
+ greeting: 'Hello!',
250
+ },
228
251
  },
229
252
  });
230
253
  });
231
-
232
254
  it('loads multiple namespaces via loadNamespaces()', async () => {
233
- setupFakeImport('./my-defaults/en-GB.js', { default: { submit: 'Submit' } });
234
- setupFakeImport('./my-send-button/en-GB.js', { default: { submit: 'Send' } });
235
-
255
+ setupFakeImport('./my-defaults/en-GB.js', {
256
+ default: {
257
+ submit: 'Submit',
258
+ },
259
+ });
260
+ setupFakeImport('./my-send-button/en-GB.js', {
261
+ default: {
262
+ submit: 'Send',
263
+ },
264
+ });
236
265
  manager = new LocalizeManager();
237
266
  const { storage } = getProtectedMembers(manager);
238
-
239
267
  await manager.loadNamespaces([
240
268
  {
241
269
  /** @param {string} locale */
242
- 'my-defaults': locale => fakeImport(`./my-defaults/${locale}.js`),
270
+ 'my-defaults': (locale) => fakeImport(`./my-defaults/${locale}.js`),
243
271
  },
244
272
  {
245
273
  /** @param {string} locale */
246
- 'my-send-button': locale => fakeImport(`./my-send-button/${locale}.js`),
274
+ 'my-send-button': (locale) => fakeImport(`./my-send-button/${locale}.js`),
247
275
  },
248
276
  ]);
249
-
250
277
  expect(storage).to.deep.equal({
251
278
  'en-GB': {
252
- 'my-defaults': { submit: 'Submit' },
253
- 'my-send-button': { submit: 'Send' },
279
+ 'my-defaults': {
280
+ submit: 'Submit',
281
+ },
282
+ 'my-send-button': {
283
+ submit: 'Send',
284
+ },
254
285
  },
255
286
  });
256
287
  });
257
-
258
288
  it('can load multiple namespaces for a different locale', async () => {
259
- setupFakeImport('./my-defaults/nl-NL.js', { default: { submit: 'Submit' } });
260
- setupFakeImport('./my-send-button/nl-NL.js', { default: { submit: 'Send' } });
261
-
289
+ setupFakeImport('./my-defaults/nl-NL.js', {
290
+ default: {
291
+ submit: 'Submit',
292
+ },
293
+ });
294
+ setupFakeImport('./my-send-button/nl-NL.js', {
295
+ default: {
296
+ submit: 'Send',
297
+ },
298
+ });
262
299
  manager = new LocalizeManager();
263
300
  const { storage } = getProtectedMembers(manager);
264
301
  manager.locale = 'en-US';
265
-
266
302
  await manager.loadNamespaces(
267
303
  [
268
304
  {
269
305
  /** @param {string} locale */
270
- 'my-defaults': locale => fakeImport(`./my-defaults/${locale}.js`),
306
+ 'my-defaults': (locale) => fakeImport(`./my-defaults/${locale}.js`),
271
307
  },
272
308
  {
273
309
  /** @param {string} locale */
274
- 'my-send-button': locale => fakeImport(`./my-send-button/${locale}.js`),
310
+ 'my-send-button': (locale) => fakeImport(`./my-send-button/${locale}.js`),
275
311
  },
276
312
  ],
277
- { locale: 'nl-NL' },
313
+ {
314
+ locale: 'nl-NL',
315
+ },
278
316
  );
279
-
280
317
  expect(storage).to.deep.equal({
281
318
  'nl-NL': {
282
- 'my-defaults': { submit: 'Submit' },
283
- 'my-send-button': { submit: 'Send' },
319
+ 'my-defaults': {
320
+ submit: 'Submit',
321
+ },
322
+ 'my-send-button': {
323
+ submit: 'Send',
324
+ },
284
325
  },
285
326
  });
286
327
  });
287
-
288
328
  it('loads generic language file if locale file is not found', async () => {
289
- setupFakeImport('./my-component/en.js', { default: { greeting: 'Hello!' } });
290
-
329
+ setupFakeImport('./my-component/en.js', {
330
+ default: {
331
+ greeting: 'Hello!',
332
+ },
333
+ });
291
334
  manager = new LocalizeManager();
292
335
  const { storage } = getProtectedMembers(manager);
293
-
294
336
  await manager.loadNamespace({
295
337
  /** @param {string} locale */
296
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`),
338
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
297
339
  });
298
-
299
340
  expect(storage).to.deep.equal({
300
341
  'en-GB': {
301
- 'my-component': { greeting: 'Hello!' },
342
+ 'my-component': {
343
+ greeting: 'Hello!',
344
+ },
302
345
  },
303
346
  });
304
347
  });
305
-
306
348
  it('throws if both locale and language files could not be loaded', async () => {
307
349
  manager = new LocalizeManager();
308
-
309
350
  try {
310
351
  await manager.loadNamespace({
311
352
  /** @param {string} locale */
312
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`),
353
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
313
354
  });
314
355
  } catch (e) {
315
356
  expect(e).to.be.instanceof(Error);
316
- expect(/** @type {Error} */ (e).message).to.equal(
357
+ expect(/** @type {Error} */ e.message).to.equal(
317
358
  'Data for namespace "my-component" and locale "en-GB" could not be loaded. ' +
318
359
  'Make sure you have data for locale "en-GB" (and/or generic language "en").',
319
360
  );
320
361
  return;
321
362
  }
322
-
323
363
  throw new Error('did not throw');
324
364
  });
325
-
326
365
  describe('fallback locale', () => {
327
366
  it('can load a fallback locale if current one can not be loaded', async () => {
328
- manager = new LocalizeManager({ fallbackLocale: 'en-GB' });
367
+ manager = new LocalizeManager({
368
+ fallbackLocale: 'en-GB',
369
+ });
329
370
  const { storage } = getProtectedMembers(manager);
330
371
  manager.locale = 'nl-NL';
331
-
332
- setupFakeImport('./my-component/en-GB.js', { default: { greeting: 'Hello!' } });
333
-
372
+ setupFakeImport('./my-component/en-GB.js', {
373
+ default: {
374
+ greeting: 'Hello!',
375
+ },
376
+ });
334
377
  await manager.loadNamespace({
335
378
  /** @param {string} locale */
336
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`),
379
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
337
380
  });
338
-
339
381
  expect(storage).to.deep.equal({
340
382
  'nl-NL': {
341
- 'my-component': { greeting: 'Hello!' },
383
+ 'my-component': {
384
+ greeting: 'Hello!',
385
+ },
342
386
  },
343
387
  });
344
388
  });
345
-
346
389
  it('can load fallback generic language file if fallback locale file is not found', async () => {
347
- manager = new LocalizeManager({ fallbackLocale: 'en-GB' });
390
+ manager = new LocalizeManager({
391
+ fallbackLocale: 'en-GB',
392
+ });
348
393
  const { storage } = getProtectedMembers(manager);
349
394
  manager.locale = 'nl-NL';
350
-
351
- setupFakeImport('./my-component/en.js', { default: { greeting: 'Hello!' } });
352
-
395
+ setupFakeImport('./my-component/en.js', {
396
+ default: {
397
+ greeting: 'Hello!',
398
+ },
399
+ });
353
400
  await manager.loadNamespace({
354
401
  /** @param {string} locale */
355
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`),
402
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
356
403
  });
357
-
358
404
  expect(storage).to.deep.equal({
359
405
  'nl-NL': {
360
- 'my-component': { greeting: 'Hello!' },
406
+ 'my-component': {
407
+ greeting: 'Hello!',
408
+ },
361
409
  },
362
410
  });
363
411
  });
364
-
365
412
  it('throws if neither current locale nor fallback locale are found', async () => {
366
- manager = new LocalizeManager({ fallbackLocale: 'en-GB' });
413
+ manager = new LocalizeManager({
414
+ fallbackLocale: 'en-GB',
415
+ });
367
416
  manager.locale = 'nl-NL';
368
-
369
417
  try {
370
418
  await manager.loadNamespace({
371
419
  /** @param {string} locale */
372
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`),
420
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
373
421
  });
374
422
  } catch (e) {
375
423
  expect(e).to.be.instanceof(Error);
376
- expect(/** @type {Error} */ (e).message).to.equal(
424
+ expect(/** @type {Error} */ e.message).to.equal(
377
425
  'Data for namespace "my-component" and current locale "nl-NL" or fallback locale "en-GB" could not be loaded. ' +
378
426
  'Make sure you have data either for locale "nl-NL" (and/or generic language "nl") or for fallback "en-GB" (and/or "en").',
379
427
  );
380
428
  return;
381
429
  }
382
-
383
430
  throw new Error('did not throw');
384
431
  });
385
-
386
432
  it('throws an error if the locale set by the user is not a full language locale', async () => {
387
433
  manager = new LocalizeManager();
388
434
  expect(() => {
@@ -393,7 +439,6 @@ describe('LocalizeManager', () => {
393
439
  See https://github.com/ing-bank/lion/issues/187 for more information.
394
440
  `);
395
441
  });
396
-
397
442
  it('does not throw an error if locale was set through the html lang attribute', async () => {
398
443
  manager = new LocalizeManager();
399
444
  expect(() => {
@@ -402,32 +447,26 @@ describe('LocalizeManager', () => {
402
447
  });
403
448
  });
404
449
  });
405
-
406
450
  describe('loading using routes predefined via setupNamespaceLoader()', () => {
407
451
  it('loads a namespace via loadNamespace() using string route', async () => {
408
- fetchMock.get('./my-component/en-GB.json', { greeting: 'Hello!' });
409
-
452
+ fetchMock.get('./my-component/en-GB.json', {
453
+ greeting: 'Hello!',
454
+ });
410
455
  manager = new LocalizeManager();
411
456
  const { storage } = getProtectedMembers(manager);
412
-
413
- manager.setupNamespaceLoader(
414
- 'my-component',
415
- /** @param {string} locale */
416
- async locale => {
417
- const response = await fetch(`./my-component/${locale}.json`);
418
- return response.json();
419
- },
420
- );
421
-
457
+ manager.setupNamespaceLoader('my-component' /** @param {string} locale */, async (locale) => {
458
+ const response = await fetch(`./my-component/${locale}.json`);
459
+ return response.json();
460
+ });
422
461
  await manager.loadNamespace('my-component');
423
-
424
462
  expect(storage).to.deep.equal({
425
463
  'en-GB': {
426
- 'my-component': { greeting: 'Hello!' },
464
+ 'my-component': {
465
+ greeting: 'Hello!',
466
+ },
427
467
  },
428
468
  });
429
469
  });
430
-
431
470
  it('loads multiple namespaces via loadNamespaces() using string routes', async () => {
432
471
  fetchMock.get('./my-defaults/en-GB.json', {
433
472
  submit: 'Submit',
@@ -435,30 +474,20 @@ describe('LocalizeManager', () => {
435
474
  fetchMock.get('./my-send-button/en-GB.json', {
436
475
  submit: 'Send',
437
476
  });
438
-
439
477
  manager = new LocalizeManager();
440
478
  const { storage } = getProtectedMembers(manager);
441
-
442
- manager.setupNamespaceLoader(
443
- 'my-defaults',
444
- /** @param {string} locale */
445
- async locale => {
446
- const response = await fetch(`./my-defaults/${locale}.json`);
447
- return response.json();
448
- },
449
- );
450
-
479
+ manager.setupNamespaceLoader('my-defaults' /** @param {string} locale */, async (locale) => {
480
+ const response = await fetch(`./my-defaults/${locale}.json`);
481
+ return response.json();
482
+ });
451
483
  manager.setupNamespaceLoader(
452
- 'my-send-button',
453
- /** @param {string} locale */
454
- async locale => {
484
+ 'my-send-button' /** @param {string} locale */,
485
+ async (locale) => {
455
486
  const response = await fetch(`./my-send-button/${locale}.json`);
456
487
  return response.json();
457
488
  },
458
489
  );
459
-
460
490
  await manager.loadNamespaces(['my-defaults', 'my-send-button']);
461
-
462
491
  expect(storage).to.deep.equal({
463
492
  'en-GB': {
464
493
  'my-send-button': {
@@ -470,13 +499,12 @@ describe('LocalizeManager', () => {
470
499
  },
471
500
  });
472
501
  });
473
-
474
502
  it('loads a namespace via loadNamespace() using RegExp route', async () => {
475
- fetchMock.get('./my-component/en-GB.json', { greeting: 'Hello!' });
476
-
503
+ fetchMock.get('./my-component/en-GB.json', {
504
+ greeting: 'Hello!',
505
+ });
477
506
  manager = new LocalizeManager();
478
507
  const { storage } = getProtectedMembers(manager);
479
-
480
508
  manager.setupNamespaceLoader(
481
509
  /my-.+/,
482
510
  /**
@@ -488,23 +516,24 @@ describe('LocalizeManager', () => {
488
516
  return response.json();
489
517
  },
490
518
  );
491
-
492
519
  await manager.loadNamespace('my-component');
493
-
494
520
  expect(storage).to.deep.equal({
495
521
  'en-GB': {
496
- 'my-component': { greeting: 'Hello!' },
522
+ 'my-component': {
523
+ greeting: 'Hello!',
524
+ },
497
525
  },
498
526
  });
499
527
  });
500
-
501
528
  it('loads multiple namespaces via loadNamespaces() using RegExp routes', async () => {
502
- fetchMock.get('./my-defaults/en-GB.json', { submit: 'Submit' });
503
- fetchMock.get('./my-send-button/en-GB.json', { submit: 'Send' });
504
-
529
+ fetchMock.get('./my-defaults/en-GB.json', {
530
+ submit: 'Submit',
531
+ });
532
+ fetchMock.get('./my-send-button/en-GB.json', {
533
+ submit: 'Send',
534
+ });
505
535
  manager = new LocalizeManager();
506
536
  const { storage } = getProtectedMembers(manager);
507
-
508
537
  manager.setupNamespaceLoader(
509
538
  /my-.+/,
510
539
  /**
@@ -516,129 +545,168 @@ describe('LocalizeManager', () => {
516
545
  return response.json();
517
546
  },
518
547
  );
519
-
520
548
  await manager.loadNamespaces(['my-defaults', 'my-send-button']);
521
-
522
549
  expect(storage).to.deep.equal({
523
550
  'en-GB': {
524
- 'my-defaults': { submit: 'Submit' },
525
- 'my-send-button': { submit: 'Send' },
551
+ 'my-defaults': {
552
+ submit: 'Submit',
553
+ },
554
+ 'my-send-button': {
555
+ submit: 'Send',
556
+ },
526
557
  },
527
558
  });
528
559
  });
529
560
  });
530
-
531
561
  describe('{ autoLoadOnLocaleChange: true }', () => {
532
562
  it('loads namespaces automatically when locale is changed via manager', async () => {
533
- setupFakeImport('./my-component/en-GB.js', { default: { greeting: 'Hello!' } });
534
- setupFakeImport('./my-component/nl-NL.js', { default: { greeting: 'Hallo!' } });
535
-
536
- manager = new LocalizeManager({ autoLoadOnLocaleChange: true });
563
+ setupFakeImport('./my-component/en-GB.js', {
564
+ default: {
565
+ greeting: 'Hello!',
566
+ },
567
+ });
568
+ setupFakeImport('./my-component/nl-NL.js', {
569
+ default: {
570
+ greeting: 'Hallo!',
571
+ },
572
+ });
573
+ manager = new LocalizeManager({
574
+ autoLoadOnLocaleChange: true,
575
+ });
537
576
  const { storage } = getProtectedMembers(manager);
538
-
539
577
  await manager.loadNamespace({
540
578
  /** @param {string} locale */
541
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`, 25),
579
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`, 25),
542
580
  });
543
-
544
581
  expect(storage).to.deep.equal({
545
- 'en-GB': { 'my-component': { greeting: 'Hello!' } },
582
+ 'en-GB': {
583
+ 'my-component': {
584
+ greeting: 'Hello!',
585
+ },
586
+ },
546
587
  });
547
-
548
588
  manager.locale = 'nl-NL';
549
589
  await manager.loadingComplete;
550
-
551
590
  expect(storage).to.deep.equal({
552
- 'en-GB': { 'my-component': { greeting: 'Hello!' } },
553
- 'nl-NL': { 'my-component': { greeting: 'Hallo!' } },
591
+ 'en-GB': {
592
+ 'my-component': {
593
+ greeting: 'Hello!',
594
+ },
595
+ },
596
+ 'nl-NL': {
597
+ 'my-component': {
598
+ greeting: 'Hallo!',
599
+ },
600
+ },
554
601
  });
555
602
  });
556
603
  });
557
-
558
604
  describe('loading extra features', () => {
559
605
  it('has a Promise "loadingComplete" that resolved once all pending loading is done', async () => {
560
- setupFakeImport('./my-component/en-GB.js', { default: { greeting: 'Hello!' } });
606
+ setupFakeImport('./my-component/en-GB.js', {
607
+ default: {
608
+ greeting: 'Hello!',
609
+ },
610
+ });
561
611
  manager = new LocalizeManager();
562
612
  const { storage } = getProtectedMembers(manager);
563
-
564
613
  manager.loadNamespace({
565
614
  /** @param {string} locale */
566
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`, 25),
615
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`, 25),
567
616
  });
568
617
  expect(storage).to.deep.equal({});
569
618
  await manager.loadingComplete;
570
619
  expect(storage).to.deep.equal({
571
- 'en-GB': { 'my-component': { greeting: 'Hello!' } },
620
+ 'en-GB': {
621
+ 'my-component': {
622
+ greeting: 'Hello!',
623
+ },
624
+ },
572
625
  });
573
626
  });
574
-
575
627
  it('loads namespace only once for the same locale', async () => {
576
628
  let called = 0;
577
629
  const myNamespace = {
578
630
  'my-namespace': () => {
579
631
  called += 1;
580
- return Promise.resolve({ default: {} });
632
+ return Promise.resolve({
633
+ default: {},
634
+ });
581
635
  },
582
636
  };
583
637
  manager = new LocalizeManager();
584
-
585
638
  await Promise.all([
586
639
  manager.loadNamespace(myNamespace),
587
640
  manager.loadNamespace(myNamespace),
588
641
  manager.loadNamespace(myNamespace),
589
642
  ]);
590
-
591
643
  expect(called).to.equal(1);
592
644
  });
593
-
594
645
  it('does not load inlined data', async () => {
595
- setupFakeImport('./my-component/en-GB.js', { default: { greeting: 'Loaded hello!' } });
596
-
646
+ setupFakeImport('./my-component/en-GB.js', {
647
+ default: {
648
+ greeting: 'Loaded hello!',
649
+ },
650
+ });
597
651
  manager = new LocalizeManager();
598
652
  const { storage } = getProtectedMembers(manager);
599
- manager.addData('en-GB', 'my-component', { greeting: 'Hello!' });
600
-
653
+ manager.addData('en-GB', 'my-component', {
654
+ greeting: 'Hello!',
655
+ });
601
656
  await manager.loadNamespace('my-component');
602
-
603
657
  expect(storage).to.deep.equal({
604
- 'en-GB': { 'my-component': { greeting: 'Hello!' } },
658
+ 'en-GB': {
659
+ 'my-component': {
660
+ greeting: 'Hello!',
661
+ },
662
+ },
605
663
  });
606
-
607
664
  let called = 0;
608
665
  await manager.loadNamespace({
609
666
  /** @param {string} locale */
610
- 'my-component': locale => {
667
+ 'my-component': (locale) => {
611
668
  called += 1;
612
669
  return fakeImport(`./my-component/${locale}.js`);
613
670
  },
614
671
  });
615
-
616
672
  expect(called).to.equal(0);
617
673
  expect(storage).to.deep.equal({
618
- 'en-GB': { 'my-component': { greeting: 'Hello!' } },
674
+ 'en-GB': {
675
+ 'my-component': {
676
+ greeting: 'Hello!',
677
+ },
678
+ },
619
679
  });
620
680
  });
621
681
  });
622
-
623
682
  describe('message()', () => {
624
683
  it('gets the message for the key in the format of "namespace:name"', () => {
625
684
  manager = new LocalizeManager();
626
- manager.addData('en-GB', 'my-ns', { greeting: 'Hello!' });
685
+ manager.addData('en-GB', 'my-ns', {
686
+ greeting: 'Hello!',
687
+ });
627
688
  expect(manager.msg('my-ns:greeting')).to.equal('Hello!');
628
689
  });
629
-
630
690
  it('supports nested names in the format of "namespace:path.to.deep.name"', () => {
631
691
  manager = new LocalizeManager();
632
- manager.addData('en-GB', 'my-ns', { 'login-section': { greeting: 'Hello!' } });
692
+ manager.addData('en-GB', 'my-ns', {
693
+ 'login-section': {
694
+ greeting: 'Hello!',
695
+ },
696
+ });
633
697
  expect(manager.msg('my-ns:login-section.greeting')).to.equal('Hello!');
634
698
  });
635
-
636
699
  it('supports variables', () => {
637
700
  manager = new LocalizeManager();
638
- manager.addData('en-GB', 'my-ns', { greeting: 'Hello {name}!' });
639
- expect(manager.msg('my-ns:greeting', { name: 'John' })).to.equal('Hello John!');
701
+ manager.addData('en-GB', 'my-ns', {
702
+ greeting: 'Hello {name}!',
703
+ });
704
+ expect(
705
+ manager.msg('my-ns:greeting', {
706
+ name: 'John',
707
+ }),
708
+ ).to.equal('Hello John!');
640
709
  });
641
-
642
710
  it('supports Intl MessageFormat proposal for messages', () => {
643
711
  manager = new LocalizeManager();
644
712
  manager.addData('en-GB', 'my-ns', {
@@ -646,70 +714,115 @@ describe('LocalizeManager', () => {
646
714
  number: 'You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}',
647
715
  });
648
716
  const today = new Date('2018/04/30');
649
- expect(removeLtrRtl(manager.msg('my-ns:date', { today }))).to.equal(
650
- 'I was written on 30 Apr 2018.',
651
- );
652
- expect(manager.msg('my-ns:number', { n: 0 })).to.equal('You have no photos.');
653
- expect(manager.msg('my-ns:number', { n: 1 })).to.equal('You have one photo.');
654
- expect(manager.msg('my-ns:number', { n: 2 })).to.equal('You have 2 photos.');
717
+ expect(
718
+ removeLtrRtl(
719
+ manager.msg('my-ns:date', {
720
+ today,
721
+ }),
722
+ ),
723
+ ).to.equal('I was written on 30 Apr 2018.');
724
+ expect(
725
+ manager.msg('my-ns:number', {
726
+ n: 0,
727
+ }),
728
+ ).to.equal('You have no photos.');
729
+ expect(
730
+ manager.msg('my-ns:number', {
731
+ n: 1,
732
+ }),
733
+ ).to.equal('You have one photo.');
734
+ expect(
735
+ manager.msg('my-ns:number', {
736
+ n: 2,
737
+ }),
738
+ ).to.equal('You have 2 photos.');
655
739
  });
656
-
657
740
  it('takes into account globally changed locale', () => {
658
741
  manager = new LocalizeManager();
659
742
  manager.locale = 'nl-NL';
660
- manager.addData('en-GB', 'my-ns', { greeting: 'Hi!' });
661
- manager.addData('nl-NL', 'my-ns', { greeting: 'Hey!' });
743
+ manager.addData('en-GB', 'my-ns', {
744
+ greeting: 'Hi!',
745
+ });
746
+ manager.addData('nl-NL', 'my-ns', {
747
+ greeting: 'Hey!',
748
+ });
662
749
  expect(manager.msg('my-ns:greeting')).to.equal('Hey!');
663
750
  });
664
-
665
751
  it('allows to provide a different locale for specific call', () => {
666
752
  manager = new LocalizeManager();
667
- manager.addData('en-GB', 'my-ns', { greeting: 'Hi!' });
668
- manager.addData('nl-NL', 'my-ns', { greeting: 'Hey!' });
669
- expect(manager.msg('my-ns:greeting', undefined, { locale: 'nl-NL' })).to.equal('Hey!');
753
+ manager.addData('en-GB', 'my-ns', {
754
+ greeting: 'Hi!',
755
+ });
756
+ manager.addData('nl-NL', 'my-ns', {
757
+ greeting: 'Hey!',
758
+ });
759
+ expect(
760
+ manager.msg('my-ns:greeting', undefined, {
761
+ locale: 'nl-NL',
762
+ }),
763
+ ).to.equal('Hey!');
670
764
  manager.reset();
671
- manager.addData('en-GB', 'my-ns', { greeting: 'Hi {name}!' });
672
- manager.addData('nl-NL', 'my-ns', { greeting: 'Hey {name}!' });
673
- expect(manager.msg('my-ns:greeting', { name: 'John' }, { locale: 'nl-NL' })).to.equal(
674
- 'Hey John!',
675
- );
765
+ manager.addData('en-GB', 'my-ns', {
766
+ greeting: 'Hi {name}!',
767
+ });
768
+ manager.addData('nl-NL', 'my-ns', {
769
+ greeting: 'Hey {name}!',
770
+ });
771
+ expect(
772
+ manager.msg(
773
+ 'my-ns:greeting',
774
+ {
775
+ name: 'John',
776
+ },
777
+ {
778
+ locale: 'nl-NL',
779
+ },
780
+ ),
781
+ ).to.equal('Hey John!');
676
782
  });
677
-
678
783
  it('allows to provide an ordered list of keys where the first resolved is used', () => {
679
784
  manager = new LocalizeManager();
680
785
  const keys = ['overridden-ns:greeting', 'default-ns:greeting'];
681
786
  expect(manager.msg(keys)).to.equal('');
682
- manager.addData('en-GB', 'default-ns', { greeting: 'Hi!' });
787
+ manager.addData('en-GB', 'default-ns', {
788
+ greeting: 'Hi!',
789
+ });
683
790
  expect(manager.msg(keys)).to.equal('Hi!');
684
- manager.addData('en-GB', 'overridden-ns', { greeting: 'Hello!' });
791
+ manager.addData('en-GB', 'overridden-ns', {
792
+ greeting: 'Hello!',
793
+ });
685
794
  expect(manager.msg(keys)).to.equal('Hello!');
686
795
  });
687
-
688
796
  it('throws a custom error when namespace prefix is missing', () => {
689
797
  manager = new LocalizeManager();
690
798
  const msgKey = 'greeting';
691
- manager.addData('en-GB', 'my-ns', { [msgKey]: 'Hello!' });
799
+ manager.addData('en-GB', 'my-ns', {
800
+ [msgKey]: 'Hello!',
801
+ });
692
802
  expect(() => manager.msg(msgKey)).to.throw(
693
803
  `Namespace is missing in the key "${msgKey}". The format for keys is "namespace:name".`,
694
804
  );
695
805
  });
696
806
  });
697
-
698
807
  describe('show key as fallback', () => {
699
808
  it('shows the key as a fallback when a translation cannot be found', () => {
700
- manager = new LocalizeManager({ showKeyAsFallback: true });
701
- manager.addData('en-GB', 'my-ns', { greeting: 'Hello!' });
809
+ manager = new LocalizeManager({
810
+ showKeyAsFallback: true,
811
+ });
812
+ manager.addData('en-GB', 'my-ns', {
813
+ greeting: 'Hello!',
814
+ });
702
815
  expect(manager.msg('my-ns:unknownKey')).to.equal('my-ns:unknownKey');
703
816
  });
704
-
705
817
  it('shows nothing when a translation cannot be found by default', () => {
706
818
  manager = new LocalizeManager();
707
- manager.addData('en-GB', 'my-ns', { greeting: 'Hello!' });
819
+ manager.addData('en-GB', 'my-ns', {
820
+ greeting: 'Hello!',
821
+ });
708
822
  expect(manager.msg('my-ns:unknownKey')).to.equal('');
709
823
  });
710
824
  });
711
825
  });
712
-
713
826
  describe('When supporting external translation tools like Google Translate', () => {
714
827
  let manager;
715
828
  const originalLang = document.documentElement.lang;
@@ -718,7 +831,6 @@ describe('When supporting external translation tools like Google Translate', ()
718
831
  async function simulateGoogleTranslateOn(lang) {
719
832
  document.documentElement.lang = lang;
720
833
  }
721
-
722
834
  async function simulateGoogleTranslateOff() {
723
835
  document.documentElement.lang = 'auto';
724
836
  }
@@ -730,16 +842,13 @@ describe('When supporting external translation tools like Google Translate', ()
730
842
  function getInstance(cfg) {
731
843
  return new LocalizeManager(cfg || {});
732
844
  }
733
-
734
845
  afterEach(() => {
735
846
  document.documentElement.removeAttribute('lang');
736
847
  document.documentElement.removeAttribute('data-localize-lang');
737
848
  });
738
-
739
849
  after(() => {
740
850
  document.documentElement.lang = originalLang;
741
851
  });
742
-
743
852
  describe('On initialization', () => {
744
853
  /** A default scenario */
745
854
  it('synchronizes from html[data-localize-lang] attribute to LocalizeManager', async () => {
@@ -757,29 +866,23 @@ describe('When supporting external translation tools like Google Translate', ()
757
866
  manager = getInstance();
758
867
  expect(manager.locale).to.equal('en-US');
759
868
  });
760
-
761
869
  it("doesn't synchronize from html[lang] attribute to LocalizeManager", async () => {
762
870
  document.documentElement.setAttribute('data-localize-lang', 'en-US');
763
871
  manager = getInstance();
764
872
  document.documentElement.lang = 'nl-NL';
765
873
  expect(manager.locale).to.not.equal('nl-NL');
766
874
  });
767
-
768
875
  it('triggers support for external translation tools via data-localize-lang', async () => {
769
876
  document.documentElement.removeAttribute('data-localize-lang');
770
877
  manager = getInstance();
771
878
  const { supportExternalTranslationTools: first } = getProtectedMembers(manager);
772
-
773
879
  expect(first).to.be.false;
774
-
775
880
  document.documentElement.setAttribute('data-localize-lang', 'nl-NL');
776
881
  manager = getInstance();
777
882
  const { supportExternalTranslationTools: second } = getProtectedMembers(manager);
778
-
779
883
  expect(second).to.be.true;
780
884
  });
781
885
  });
782
-
783
886
  describe('After initialization', () => {
784
887
  it(`synchronizes from LocalizeManager to html[lang] when
785
888
  3rd party translation tool is NOT in control`, async () => {
@@ -789,7 +892,6 @@ describe('When supporting external translation tools like Google Translate', ()
789
892
  manager.locale = 'nl-NL';
790
893
  expect(document.documentElement.lang).to.equal('nl-NL');
791
894
  });
792
-
793
895
  it(`doesn't synchronize from LocalizeManager to html[lang] when
794
896
  3rd party translation tool is in control`, async () => {
795
897
  document.documentElement.setAttribute('data-localize-lang', 'en-US');
@@ -798,7 +900,6 @@ describe('When supporting external translation tools like Google Translate', ()
798
900
  manager.locale = 'nl-NL';
799
901
  expect(document.documentElement.lang).to.equal('fr');
800
902
  });
801
-
802
903
  it(`doesn't synchronize from html[lang] attribute to LocalizeManager`, async () => {
803
904
  document.documentElement.setAttribute('data-localize-lang', 'en-US');
804
905
  manager = getInstance();
@@ -808,7 +909,6 @@ describe('When supporting external translation tools like Google Translate', ()
808
909
  await simulateGoogleTranslateOn('fr');
809
910
  expect(manager.locale).to.equal('nl-NL');
810
911
  });
811
-
812
912
  it(`restores html[lang] when 3rd party translation tool is turned off again`, async () => {
813
913
  manager = getInstance();
814
914
  manager.locale = 'nl-NL';
@@ -819,69 +919,76 @@ describe('When supporting external translation tools like Google Translate', ()
819
919
  });
820
920
  });
821
921
  });
822
-
823
922
  describe('[deprecated] When not supporting external translation tools like Google Translate', () => {
824
923
  /** @type {LocalizeManager} */
825
924
  let manager;
826
-
827
925
  beforeEach(() => {
828
926
  // makes sure that between tests the localization is reset to default state
829
927
  document.documentElement.lang = 'en-GB';
830
928
  });
831
-
832
929
  afterEach(() => {
833
930
  manager.teardown();
834
931
  });
835
-
836
932
  afterEach(() => {
837
933
  fetchMock.restore();
838
934
  resetFakeImport();
839
935
  });
840
-
841
936
  it('initializes locale from <html> by default', () => {
842
937
  manager = new LocalizeManager({});
843
938
  expect(manager.locale).to.equal('en-GB');
844
939
  });
845
-
846
940
  it('fires "localeChanged" event if locale was changed via <html lang> attribute', async () => {
847
941
  manager = new LocalizeManager({});
848
942
  setTimeout(() => {
849
943
  document.documentElement.lang = 'en-US';
850
944
  });
851
-
852
945
  const event = await oneEvent(
853
- /** @type {EventTarget} */ (/** @type {unknown} */ (manager)),
946
+ /** @type {EventTarget} */ /** @type {unknown} */ manager,
854
947
  'localeChanged',
855
948
  );
856
949
  expect(event.detail.newLocale).to.equal('en-US');
857
950
  expect(event.detail.oldLocale).to.equal('en-GB');
858
951
  });
859
-
860
952
  it('loads namespaces automatically when locale is changed via <html lang> attribute', async () => {
861
- setupFakeImport('./my-component/en-GB.js', { default: { greeting: 'Hello!' } });
862
- setupFakeImport('./my-component/nl-NL.js', { default: { greeting: 'Hallo!' } });
863
-
953
+ setupFakeImport('./my-component/en-GB.js', {
954
+ default: {
955
+ greeting: 'Hello!',
956
+ },
957
+ });
958
+ setupFakeImport('./my-component/nl-NL.js', {
959
+ default: {
960
+ greeting: 'Hallo!',
961
+ },
962
+ });
864
963
  manager = new LocalizeManager({
865
964
  autoLoadOnLocaleChange: true,
866
965
  });
867
966
  const { storage } = getProtectedMembers(manager);
868
-
869
967
  await manager.loadNamespace({
870
968
  /** @param {string} locale */
871
- 'my-component': locale => fakeImport(`./my-component/${locale}.js`, 25),
969
+ 'my-component': (locale) => fakeImport(`./my-component/${locale}.js`, 25),
872
970
  });
873
-
874
971
  expect(storage).to.deep.equal({
875
- 'en-GB': { 'my-component': { greeting: 'Hello!' } },
972
+ 'en-GB': {
973
+ 'my-component': {
974
+ greeting: 'Hello!',
975
+ },
976
+ },
876
977
  });
877
-
878
978
  document.documentElement.lang = 'nl-NL';
879
979
  await aTimeout(0); // wait for mutation observer to be called
880
980
  await manager.loadingComplete;
881
-
882
981
  expect(storage).to.deep.equal({
883
- 'en-GB': { 'my-component': { greeting: 'Hello!' } },
884
- 'nl-NL': { 'my-component': { greeting: 'Hallo!' } },
982
+ 'en-GB': {
983
+ 'my-component': {
984
+ greeting: 'Hello!',
985
+ },
986
+ },
987
+ 'nl-NL': {
988
+ 'my-component': {
989
+ greeting: 'Hallo!',
990
+ },
991
+ },
885
992
  });
886
993
  });
887
994
  });