@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
@@ -14,29 +14,25 @@ import { runCalendarSuite } from '../test-suites/LionCalendar.suite.js';
14
14
  * @typedef {import('lit').TemplateResult} TemplateResult
15
15
  */
16
16
 
17
- const fixture = /** @type {(arg: TemplateResult) => Promise<LionCalendar>} */ (_fixture);
17
+ const fixture = /** @type {(arg: TemplateResult) => Promise<LionCalendar>} */ _fixture;
18
18
  /**
19
19
  * @param {HTMLElement} el
20
20
  * @returns {HTMLElement | null | undefined}
21
21
  */
22
- const getSelectedDateEl = el => el?.shadowRoot?.querySelector('.calendar__day-button[selected]');
22
+ const getSelectedDateEl = (el) => el?.shadowRoot?.querySelector('.calendar__day-button[selected]');
23
23
  /**
24
24
  * @param {HTMLElement} el
25
25
  * @returns {void}
26
26
  */
27
- const focusSelectedDate = el => getSelectedDateEl(el)?.focus();
28
-
27
+ const focusSelectedDate = (el) => getSelectedDateEl(el)?.focus();
29
28
  describe('<lion-calendar>', () => {
30
29
  const localizeManager = getLocalizeManager();
31
-
32
30
  beforeEach(() => {
33
31
  localizeTearDown();
34
32
  });
35
-
36
33
  describe('Structure', () => {
37
34
  it('implements BEM structure', async () => {
38
35
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
39
-
40
36
  expect(el.shadowRoot?.querySelector('.calendar')).to.exist;
41
37
  expect(el.shadowRoot?.querySelector('.calendar__navigation')).to.exist;
42
38
  expect(el.shadowRoot?.querySelector('.calendar__previous-button')).to.exist;
@@ -44,12 +40,11 @@ describe('<lion-calendar>', () => {
44
40
  expect(el.shadowRoot?.querySelector('.calendar__navigation-heading')).to.exist;
45
41
  expect(el.shadowRoot?.querySelector('.calendar__grid')).to.exist;
46
42
  });
47
-
48
43
  it('has heading with month and year', async () => {
49
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/01').getTime() });
50
-
44
+ const clock = sinon.useFakeTimers({
45
+ now: new Date('2000/12/01').getTime(),
46
+ });
51
47
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
52
-
53
48
  expect(el.shadowRoot?.querySelector('#year')).dom.to.equal(`
54
49
  <h2
55
50
  id="year"
@@ -68,10 +63,8 @@ describe('<lion-calendar>', () => {
68
63
  December
69
64
  </h2>
70
65
  `);
71
-
72
66
  clock.restore();
73
67
  });
74
-
75
68
  it('has previous year button', async () => {
76
69
  const el = await fixture(
77
70
  html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
@@ -80,7 +73,6 @@ describe('<lion-calendar>', () => {
80
73
  <button class="calendar__previous-button" aria-label="Previous year, November 2018" title="Previous year, November 2018">&lt;</button>
81
74
  `);
82
75
  });
83
-
84
76
  it('has next year button', async () => {
85
77
  const el = await fixture(
86
78
  html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
@@ -89,7 +81,6 @@ describe('<lion-calendar>', () => {
89
81
  <button class="calendar__next-button" aria-label="Next year, November 2020" title="Next year, November 2020">&gt;</button>
90
82
  `);
91
83
  });
92
-
93
84
  it('has previous month button', async () => {
94
85
  const el = await fixture(
95
86
  html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
@@ -98,7 +89,6 @@ describe('<lion-calendar>', () => {
98
89
  <button class="calendar__previous-button" aria-label="Previous month, October 2019" title="Previous month, October 2019">&lt;</button>
99
90
  `);
100
91
  });
101
-
102
92
  it('has next month button', async () => {
103
93
  const el = await fixture(
104
94
  html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
@@ -108,7 +98,6 @@ describe('<lion-calendar>', () => {
108
98
  `);
109
99
  });
110
100
  });
111
-
112
101
  describe('Public API', () => {
113
102
  it('has property "centralDate" that determines currently visible month', async () => {
114
103
  const elObj = new CalendarObject(
@@ -119,19 +108,17 @@ describe('<lion-calendar>', () => {
119
108
  expect(elObj.activeMonth).to.equal('May');
120
109
  expect(elObj.activeYear).to.equal('2014');
121
110
  });
122
-
123
111
  it('sets "centralDate" to today by default', async () => {
124
- const clock = sinon.useFakeTimers({ now: new Date('2013/03/15').getTime() });
125
-
112
+ const clock = sinon.useFakeTimers({
113
+ now: new Date('2013/03/15').getTime(),
114
+ });
126
115
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
127
116
  const elObj = new CalendarObject(el);
128
117
  expect(isSameDate(el.centralDate, new Date())).to.be.true;
129
118
  expect(elObj.activeMonth).to.equal('March');
130
119
  expect(elObj.activeYear).to.equal('2013');
131
-
132
120
  clock.restore();
133
121
  });
134
-
135
122
  it('determines the date focusable with keyboard from "centralDate"', async () => {
136
123
  const elObj = new CalendarObject(
137
124
  await fixture(html`
@@ -140,18 +127,17 @@ describe('<lion-calendar>', () => {
140
127
  );
141
128
  expect(
142
129
  elObj.checkForAllDayObjs(
143
- /** @param {DayObject} o */ o => o.buttonEl.getAttribute('tabindex') === '0',
144
- /** @param {number} n */ n => n === 5,
130
+ /** @param {DayObject} o */ (o) => o.buttonEl.getAttribute('tabindex') === '0',
131
+ /** @param {number} n */ (n) => n === 5,
145
132
  ),
146
133
  ).to.be.true;
147
134
  expect(
148
135
  elObj.checkForAllDayObjs(
149
- /** @param {DayObject} o */ o => o.buttonEl.getAttribute('tabindex') === '-1',
150
- /** @param {number} n */ n => n !== 5,
136
+ /** @param {DayObject} o */ (o) => o.buttonEl.getAttribute('tabindex') === '-1',
137
+ /** @param {number} n */ (n) => n !== 5,
151
138
  ),
152
139
  ).to.be.true;
153
140
  });
154
-
155
141
  it('has property "selectedDate" for the selected date', async () => {
156
142
  const el = await fixture(html`
157
143
  <lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
@@ -164,7 +150,6 @@ describe('<lion-calendar>', () => {
164
150
  await el.updateComplete;
165
151
  expect(elObj.getDayObj(15).isSelected).to.equal(false);
166
152
  });
167
-
168
153
  it('gives priority to "centralDate" to display the month when "selectedDate" is also defined', async () => {
169
154
  const elObj = new CalendarObject(
170
155
  await fixture(html`
@@ -177,10 +162,10 @@ describe('<lion-calendar>', () => {
177
162
  expect(elObj.activeMonth).to.equal('June');
178
163
  expect(elObj.activeYear).to.equal('2018');
179
164
  });
180
-
181
165
  it('changes "centralDate" from default to "selectedDate" on first render if no other custom "centralDate" is provided', async () => {
182
- const clock = sinon.useFakeTimers({ now: new Date('2010/01/01').getTime() });
183
-
166
+ const clock = sinon.useFakeTimers({
167
+ now: new Date('2010/01/01').getTime(),
168
+ });
184
169
  const el = await fixture(html`
185
170
  <lion-calendar .selectedDate="${new Date('2016/10/20')}"></lion-calendar>
186
171
  `);
@@ -190,7 +175,6 @@ describe('<lion-calendar>', () => {
190
175
  expect(elObj.activeYear).to.equal('2016');
191
176
  clock.restore();
192
177
  });
193
-
194
178
  it('does not change "centralDate" to "selectedDate" when new date is provided programmatically', async () => {
195
179
  const el = await fixture(html`
196
180
  <lion-calendar
@@ -203,7 +187,6 @@ describe('<lion-calendar>', () => {
203
187
  await el.updateComplete;
204
188
  expect(isSameDate(el.centralDate, new Date('2018/06/01'))).to.be.true;
205
189
  });
206
-
207
190
  it('does not set "selectedDate" by default', async () => {
208
191
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
209
192
  const elObj = new CalendarObject(el);
@@ -211,7 +194,6 @@ describe('<lion-calendar>', () => {
211
194
  expect(el.selectedDate).to.equal(undefined);
212
195
  expect(elObj.getDayObj(today.getDate()).isSelected).to.equal(false);
213
196
  });
214
-
215
197
  it('allows to reset "selectedDate"', async () => {
216
198
  const el = await fixture(html`
217
199
  <lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
@@ -221,7 +203,6 @@ describe('<lion-calendar>', () => {
221
203
  await el.updateComplete;
222
204
  expect(elObj.selectedDayObj).to.be.undefined;
223
205
  });
224
-
225
206
  it('recalculates "centralDate" when "selectedDate" is reset', async () => {
226
207
  const el = await fixture(html`
227
208
  <lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
@@ -232,7 +213,6 @@ describe('<lion-calendar>', () => {
232
213
  expect(elObj.selectedDayObj).to.be.undefined;
233
214
  expect(isSameDate(el.centralDate, new Date('2019/06/15'))).to.be.true;
234
215
  });
235
-
236
216
  it('sends event "user-selected-date-changed" when user selects a date via mouse', async () => {
237
217
  const dateChangedSpy = sinon.spy();
238
218
  const el = await fixture(html`
@@ -250,10 +230,9 @@ describe('<lion-calendar>', () => {
250
230
  isSameDate(dateChangedSpy.args[0][0].detail.selectedDate, new Date('2000/12/15')),
251
231
  ).to.equal(true);
252
232
  });
253
-
254
233
  it('doesn\'t send event "user-selected-date-changed" when user selects a disabled date via mouse', async () => {
255
234
  const dateChangedSpy = sinon.spy();
256
- const disable15th = /** @param {Date} d */ d => d.getDate() === 15;
235
+ const disable15th = /** @param {Date} d */ (d) => d.getDate() === 15;
257
236
  const el = await fixture(html`
258
237
  <lion-calendar
259
238
  .selectedDate="${new Date('2000/12/12')}"
@@ -265,9 +244,8 @@ describe('<lion-calendar>', () => {
265
244
  elObj.getDayEl(15).click();
266
245
  await el.updateComplete;
267
246
  expect(dateChangedSpy.called).to.equal(false);
268
- expect(isSameDate(/** @type {Date} */ (el.selectedDate), new Date('2000/12/12'))).to.be.true;
247
+ expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/12/12'))).to.be.true;
269
248
  });
270
-
271
249
  it.skip('sends event "user-selected-date-changed" when user selects a date via [Enter]', async () => {
272
250
  /**
273
251
  * TODO fix me
@@ -282,19 +260,24 @@ describe('<lion-calendar>', () => {
282
260
  ></lion-calendar>
283
261
  `);
284
262
  const elObj = new CalendarObject(el);
285
-
286
- el.__contentWrapperElement?.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft' }));
263
+ el.__contentWrapperElement?.dispatchEvent(
264
+ new KeyboardEvent('keydown', {
265
+ key: 'ArrowLeft',
266
+ }),
267
+ );
287
268
  await el.updateComplete;
288
269
  expect(elObj.activeMonth).to.equal('October');
289
270
  expect(elObj.activeYear).to.equal('2000');
290
271
  expect(elObj.focusedDayObj?.monthday).to.equal(11);
291
-
292
- el.__contentWrapperElement?.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));
272
+ el.__contentWrapperElement?.dispatchEvent(
273
+ new KeyboardEvent('keydown', {
274
+ key: 'Enter',
275
+ }),
276
+ );
293
277
  await el.updateComplete;
294
- expect(isSameDate(/** @type {Date} */ (el.selectedDate), new Date('2000/10/11'))).to.be.true;
278
+ expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/10/11'))).to.be.true;
295
279
  expect(dateChangedSpy.called).to.equal(true);
296
280
  });
297
-
298
281
  it('doesn\'t send event "user-selected-date-changed" when user selects a disabled date via [Enter]', async () => {
299
282
  const dateChangedSpy = sinon.spy();
300
283
  const el = await fixture(html`
@@ -305,20 +288,21 @@ describe('<lion-calendar>', () => {
305
288
  ></lion-calendar>
306
289
  `);
307
290
  const elObj = new CalendarObject(el);
308
-
309
291
  focusSelectedDate(el);
310
- await sendKeys({ press: 'ArrowLeft' });
292
+ await sendKeys({
293
+ press: 'ArrowLeft',
294
+ });
311
295
  await el.updateComplete;
312
296
  expect(elObj.activeMonth).to.equal('October');
313
297
  expect(elObj.activeYear).to.equal('2000');
314
298
  expect(elObj.focusedDayObj?.monthday).to.equal(11);
315
-
316
- await sendKeys({ press: 'Enter' });
299
+ await sendKeys({
300
+ press: 'Enter',
301
+ });
317
302
  await el.updateComplete;
318
- expect(isSameDate(/** @type {Date} */ (el.selectedDate), new Date('2000/10/12'))).to.be.true;
303
+ expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/10/12'))).to.be.true;
319
304
  expect(dateChangedSpy.called).to.equal(false);
320
305
  });
321
-
322
306
  it('exposes focusedDate getter', async () => {
323
307
  const el = await fixture(html`
324
308
  <lion-calendar .centralDate="${new Date('2019/06/01')}"></lion-calendar>
@@ -326,19 +310,15 @@ describe('<lion-calendar>', () => {
326
310
  const elObj = new CalendarObject(el);
327
311
  expect(el.focusedDate).to.be.null;
328
312
  elObj.getDayEl(15).click();
329
- expect(isSameDate(/** @type {Date} */ (el.focusedDate), new Date('2019/06/15'))).to.equal(
330
- true,
331
- );
313
+ expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2019/06/15'))).to.equal(true);
332
314
  });
333
-
334
315
  it('has a focusDate() method to focus an arbitrary date', async () => {
335
316
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
336
317
  const elObj = new CalendarObject(el);
337
318
  await el.focusDate(new Date('2016/06/10'));
338
- expect(isSameDate(/** @type {Date} */ (el.focusedDate), new Date('2016/06/10'))).to.be.true;
319
+ expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2016/06/10'))).to.be.true;
339
320
  expect(elObj.getDayObj(10).isFocused).to.be.true;
340
321
  });
341
-
342
322
  it('has a focusCentralDate() method to focus the central date', async () => {
343
323
  const el = await fixture(html`
344
324
  <lion-calendar
@@ -348,10 +328,9 @@ describe('<lion-calendar>', () => {
348
328
  `);
349
329
  const elObj = new CalendarObject(el);
350
330
  el.focusCentralDate();
351
- expect(isSameDate(/** @type {Date} */ (el.focusedDate), new Date('2015/12/02'))).to.be.true;
331
+ expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2015/12/02'))).to.be.true;
352
332
  expect(elObj.getDayObj(2).isFocused).to.be.true;
353
333
  });
354
-
355
334
  it('has a focusSelectedDate() method to focus the selected date', async () => {
356
335
  const el = await fixture(html`
357
336
  <lion-calendar
@@ -361,10 +340,9 @@ describe('<lion-calendar>', () => {
361
340
  `);
362
341
  const elObj = new CalendarObject(el);
363
342
  await el.focusSelectedDate();
364
- expect(isSameDate(/** @type {Date} */ (el.focusedDate), new Date('2014/07/07'))).to.be.true;
343
+ expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2014/07/07'))).to.be.true;
365
344
  expect(elObj.getDayObj(7).isFocused).to.be.true;
366
345
  });
367
-
368
346
  it('has a initCentralDate() method for external contexts like datepickers', async () => {
369
347
  const initialCentralDate = new Date('2014/07/05');
370
348
  const initialSelectedDate = new Date('2014/07/07');
@@ -374,10 +352,8 @@ describe('<lion-calendar>', () => {
374
352
  .selectedDate="${initialSelectedDate}"
375
353
  ></lion-calendar>`,
376
354
  );
377
-
378
355
  expect(el.selectedDate).to.equal(initialSelectedDate);
379
356
  expect(el.centralDate).to.equal(initialCentralDate);
380
-
381
357
  const newSelectedDate = new Date('2015/07/05');
382
358
  el.selectedDate = newSelectedDate;
383
359
  el.initCentralDate();
@@ -386,7 +362,6 @@ describe('<lion-calendar>', () => {
386
362
  el.initCentralDate();
387
363
  expect(el.centralDate).to.equal(initialCentralDate);
388
364
  });
389
-
390
365
  describe('Enabled Dates', () => {
391
366
  it('disables all days before "minDate" property', async () => {
392
367
  const el = await fixture(html`
@@ -403,7 +378,6 @@ describe('<lion-calendar>', () => {
403
378
  expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
404
379
  });
405
380
  });
406
-
407
381
  it('disables all days after "maxDate" property', async () => {
408
382
  const el = await fixture(html`
409
383
  <lion-calendar
@@ -419,10 +393,9 @@ describe('<lion-calendar>', () => {
419
393
  expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
420
394
  });
421
395
  });
422
-
423
396
  it('disables a date with disableDates function', async () => {
424
397
  /** @param {Date} d */
425
- const disable15th = d => d.getDate() === 15;
398
+ const disable15th = (d) => d.getDate() === 15;
426
399
  const el = await fixture(html`
427
400
  <lion-calendar
428
401
  .selectedDate="${new Date('2000/12/01')}"
@@ -434,7 +407,6 @@ describe('<lion-calendar>', () => {
434
407
  const shouldBeDisabled = i === 15 - 1;
435
408
  expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
436
409
  });
437
-
438
410
  el.selectedDate = new Date('2000/11/01'); // When month view updates, it should still work
439
411
  await el.updateComplete;
440
412
  elObj.dayEls.forEach((d, i) => {
@@ -442,27 +414,26 @@ describe('<lion-calendar>', () => {
442
414
  expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
443
415
  });
444
416
  });
445
-
446
417
  it('does not prevent initializing "centralDate" from "selectedDate" when today is disabled', async () => {
447
- const clock = sinon.useFakeTimers({ now: new Date('2019/06/03').getTime() });
448
-
418
+ const clock = sinon.useFakeTimers({
419
+ now: new Date('2019/06/03').getTime(),
420
+ });
449
421
  const el = await fixture(html`
450
422
  <lion-calendar
451
423
  .selectedDate="${new Date('2001/01/08')}"
452
- .disableDates=${/** @param {Date} date */ date => date.getDate() === 3}
424
+ .disableDates=${/** @param {Date} date */ (date) => date.getDate() === 3}
453
425
  ></lion-calendar>
454
426
  `);
455
427
  const elObj = new CalendarObject(el);
456
428
  expect(isSameDate(el.centralDate, new Date('2001/01/08'))).to.be.true;
457
429
  expect(elObj.activeMonth).to.equal('January');
458
430
  expect(elObj.activeYear).to.equal('2001');
459
-
460
431
  clock.restore();
461
432
  });
462
-
463
433
  it('requires the user to set an appropriate centralDate even when minDate and maxDate are equal', async () => {
464
- const clock = sinon.useFakeTimers({ now: new Date('2019/06/03').getTime() });
465
-
434
+ const clock = sinon.useFakeTimers({
435
+ now: new Date('2019/06/03').getTime(),
436
+ });
466
437
  const el = await fixture(html`
467
438
  <lion-calendar
468
439
  .minDate="${new Date('2019/07/03')}"
@@ -476,32 +447,27 @@ describe('<lion-calendar>', () => {
476
447
  .maxDate="${new Date('2019/07/03')}"
477
448
  ></lion-calendar>
478
449
  `);
479
-
480
450
  clock.restore();
481
451
  expect(isSameDate(el.centralDate, new Date('2019/07/03'))).to.be.true;
482
452
  expect(isSameDate(elSetting.centralDate, new Date('2019/07/03'))).to.be.true;
483
453
  });
484
-
485
454
  describe('Normalization', () => {
486
455
  it('normalizes all generated dates', async () => {
487
456
  /** @param {Date} d */
488
457
  function isNormalizedDate(d) {
489
458
  return d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0;
490
459
  }
491
-
492
460
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
493
461
  // The central date will be today's date: it's the date all other
494
462
  // dates in the month view will be derived from.
495
463
  expect(isNormalizedDate(el.centralDate)).to.be.true;
496
464
  });
497
-
498
465
  it('normalizes dates in date comparisons', async () => {
499
466
  const selectedDate = new Date('2000-11-04T03:00:00');
500
467
  // without normalization, selectedDate > maxDate would wrongfully be disabled
501
468
  const maxDate = new Date('2000-11-29T02:00:00');
502
469
  // without normalization, selectedDate < minDate would wrongfully be disabled
503
470
  const minDate = new Date('2000-11-02T04:00:00');
504
-
505
471
  const el = await fixture(html`
506
472
  <lion-calendar
507
473
  .selectedDate="${selectedDate}"
@@ -510,17 +476,14 @@ describe('<lion-calendar>', () => {
510
476
  ></lion-calendar>
511
477
  `);
512
478
  const elObj = new CalendarObject(el);
513
-
514
479
  expect(elObj.getDayObj(29).isDisabled).to.equal(false);
515
480
  expect(elObj.getDayObj(30).isDisabled).to.equal(true);
516
-
517
481
  expect(elObj.getDayObj(2).isDisabled).to.equal(false);
518
482
  expect(elObj.getDayObj(1).isDisabled).to.equal(true);
519
483
  });
520
484
  });
521
485
  });
522
486
  });
523
-
524
487
  describe('Calendar navigation', () => {
525
488
  describe('Title', () => {
526
489
  it('contains secondary title displaying the current month and year in focus', async () => {
@@ -531,7 +494,6 @@ describe('<lion-calendar>', () => {
531
494
  expect(elObj.activeMonth).to.equal('December');
532
495
  expect(elObj.activeYear).to.equal('2000');
533
496
  });
534
-
535
497
  it('updates the secondary title when the displayed month/year changes', async () => {
536
498
  const el = await fixture(
537
499
  html`<lion-calendar .centralDate="${new Date('2000/12/12')}"></lion-calendar>`,
@@ -542,7 +504,6 @@ describe('<lion-calendar>', () => {
542
504
  expect(elObj.activeMonth).to.equal('October');
543
505
  expect(elObj.activeYear).to.equal('1999');
544
506
  });
545
-
546
507
  describe('Accessibility', () => {
547
508
  it('has aria-atomic="true" set on the secondary title', async () => {
548
509
  const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
@@ -550,7 +511,6 @@ describe('<lion-calendar>', () => {
550
511
  });
551
512
  });
552
513
  });
553
-
554
514
  describe('Navigation', () => {
555
515
  describe('finding enabled dates', () => {
556
516
  it('has helper for `findNextEnabledDate()`, `findPreviousEnabledDate()`, `findNearestEnabledDate()`', async () => {
@@ -558,92 +518,79 @@ describe('<lion-calendar>', () => {
558
518
  <lion-calendar
559
519
  .selectedDate="${new Date('2001/01/02')}"
560
520
  .disableDates=${
561
- /** @param {Date} date */ date => date.getDate() === 3 || date.getDate() === 4
521
+ /** @param {Date} date */ (date) => date.getDate() === 3 || date.getDate() === 4
562
522
  }
563
523
  ></lion-calendar>
564
524
  `);
565
525
  const elObj = new CalendarObject(el);
566
-
567
526
  el.focusDate(el.findNextEnabledDate());
568
527
  await el.updateComplete;
569
528
  expect(elObj.focusedDayObj?.monthday).to.equal(5);
570
-
571
529
  el.focusDate(el.findPreviousEnabledDate());
572
530
  await el.updateComplete;
573
531
  expect(elObj.focusedDayObj?.monthday).to.equal(2);
574
-
575
532
  el.focusDate(el.findNearestEnabledDate());
576
533
  await el.updateComplete;
577
534
  expect(elObj.focusedDayObj?.monthday).to.equal(1);
578
535
  });
579
-
580
536
  it('future dates take precedence over past dates when "distance" between dates is equal', async () => {
581
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
582
-
537
+ const clock = sinon.useFakeTimers({
538
+ now: new Date('2000/12/15').getTime(),
539
+ });
583
540
  const el = await fixture(html`
584
541
  <lion-calendar
585
- .disableDates="${/** @param {Date} d */ d => d.getDate() === 15}"
542
+ .disableDates="${/** @param {Date} d */ (d) => d.getDate() === 15}"
586
543
  ></lion-calendar>
587
544
  `);
588
545
  el.focusDate(el.findNearestEnabledDate(new Date()));
589
546
  await el.updateComplete;
590
-
591
547
  const elObj = new CalendarObject(el);
592
548
  expect(elObj.centralDayObj?.monthday).to.equal(16);
593
-
594
549
  clock.restore();
595
550
  });
596
-
597
551
  it('will search 750 days in the past', async () => {
598
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
599
-
552
+ const clock = sinon.useFakeTimers({
553
+ now: new Date('2000/12/15').getTime(),
554
+ });
600
555
  const el = await fixture(html`
601
556
  <lion-calendar
602
- .disableDates="${/** @param {Date} d */ d => d.getFullYear() > 1998}"
557
+ .disableDates="${/** @param {Date} d */ (d) => d.getFullYear() > 1998}"
603
558
  ></lion-calendar>
604
559
  `);
605
560
  el.focusDate(el.findNearestEnabledDate(new Date()));
606
561
  await el.updateComplete;
607
-
608
562
  expect(el.centralDate.getFullYear()).to.equal(1998);
609
563
  expect(el.centralDate.getMonth()).to.equal(11);
610
564
  expect(el.centralDate.getDate()).to.equal(31);
611
-
612
565
  clock.restore();
613
566
  });
614
-
615
567
  it('will search 750 days in the future', async () => {
616
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
617
-
568
+ const clock = sinon.useFakeTimers({
569
+ now: new Date('2000/12/15').getTime(),
570
+ });
618
571
  const el = await fixture(html`
619
572
  <lion-calendar
620
- .disableDates="${/** @param {Date} d */ d => d.getFullYear() < 2002}"
573
+ .disableDates="${/** @param {Date} d */ (d) => d.getFullYear() < 2002}"
621
574
  ></lion-calendar>
622
575
  `);
623
-
624
576
  el.focusDate(el.findNearestEnabledDate(new Date()));
625
577
  await el.updateComplete;
626
-
627
578
  expect(el.centralDate.getFullYear()).to.equal(2002);
628
579
  expect(el.centralDate.getMonth()).to.equal(0);
629
580
  expect(el.centralDate.getDate()).to.equal(1);
630
-
631
581
  clock.restore();
632
582
  });
633
-
634
583
  it('throws if no available date can be found within +/- 750 days', async () => {
635
584
  const el = await fixture(html`
636
585
  <lion-calendar
637
- .disableDates="${/** @param {Date} d */ d => d.getFullYear() < 2002}"
586
+ .disableDates="${/** @param {Date} d */ (d) => d.getFullYear() < 2002}"
638
587
  ></lion-calendar>
639
588
  `);
640
-
641
589
  expect(() => {
642
590
  el.findNextEnabledDate(new Date('1900/01/01'));
643
591
  }).to.throw(Error, 'Could not find a selectable date within +/- 750 day for 1900/1/1');
644
592
  });
645
593
  });
646
-
647
594
  describe('Year', () => {
648
595
  it('has a button for navigation to previous year', async () => {
649
596
  const el = await fixture(
@@ -654,17 +601,18 @@ describe('<lion-calendar>', () => {
654
601
  expect(elObj.activeMonth).to.equal('January');
655
602
  expect(elObj.activeYear).to.equal('2001');
656
603
 
657
- /** @type {HTMLElement} */ (elObj.previousYearButtonEl).click();
604
+ /** @type {HTMLElement} */
605
+ elObj.previousYearButtonEl.click();
658
606
  await el.updateComplete;
659
607
  expect(elObj.activeMonth).to.equal('January');
660
608
  expect(elObj.activeYear).to.equal('2000');
661
609
 
662
- /** @type {HTMLElement} */ (elObj.previousYearButtonEl).click();
610
+ /** @type {HTMLElement} */
611
+ elObj.previousYearButtonEl.click();
663
612
  await el.updateComplete;
664
613
  expect(elObj.activeMonth).to.equal('January');
665
614
  expect(elObj.activeYear).to.equal('1999');
666
615
  });
667
-
668
616
  it('has a button for navigation to next year', async () => {
669
617
  const el = await fixture(
670
618
  html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
@@ -674,17 +622,18 @@ describe('<lion-calendar>', () => {
674
622
  expect(elObj.activeMonth).to.equal('December');
675
623
  expect(elObj.activeYear).to.equal('2000');
676
624
 
677
- /** @type {HTMLElement} */ (elObj.nextYearButtonEl).click();
625
+ /** @type {HTMLElement} */
626
+ elObj.nextYearButtonEl.click();
678
627
  await el.updateComplete;
679
628
  expect(elObj.activeMonth).to.equal('December');
680
629
  expect(elObj.activeYear).to.equal('2001');
681
630
 
682
- /** @type {HTMLElement} */ (elObj.nextYearButtonEl).click();
631
+ /** @type {HTMLElement} */
632
+ elObj.nextYearButtonEl.click();
683
633
  await el.updateComplete;
684
634
  expect(elObj.activeMonth).to.equal('December');
685
635
  expect(elObj.activeYear).to.equal('2002');
686
636
  });
687
-
688
637
  it('disables previousYearButton and nextYearButton based on disabled days accordingly', async () => {
689
638
  const el = await fixture(html`
690
639
  <lion-calendar .selectedDate="${new Date('2000/06/12')}"></lion-calendar>
@@ -694,27 +643,23 @@ describe('<lion-calendar>', () => {
694
643
  expect(elObj.activeYear).to.equal('2000');
695
644
  expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
696
645
  expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(false);
697
-
698
646
  el.minDate = new Date('2000/01/01');
699
647
  el.maxDate = new Date('2000/12/31');
700
648
  await el.updateComplete;
701
-
702
649
  expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(true);
703
650
  expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(true);
704
651
 
705
- /** @type {HTMLElement} */ (elObj.previousYearButtonEl).click();
652
+ /** @type {HTMLElement} */
653
+ elObj.previousYearButtonEl.click();
706
654
  await el.updateComplete;
707
655
  expect(elObj.activeMonth).to.equal('June');
708
656
  expect(elObj.activeYear).to.equal('2000');
709
-
710
657
  el.minDate = new Date('1999/12/31');
711
658
  el.maxDate = new Date('2001/01/01');
712
659
  await el.updateComplete;
713
-
714
660
  expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
715
661
  expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(false);
716
662
  });
717
-
718
663
  it('sets label to correct month previousYearButton and nextYearButton based on disabled days accordingly', async () => {
719
664
  const el = await fixture(html`
720
665
  <lion-calendar .selectedDate="${new Date('2000/06/12')}"></lion-calendar>
@@ -723,7 +668,6 @@ describe('<lion-calendar>', () => {
723
668
  el.minDate = new Date('1999/07/12');
724
669
  el.maxDate = new Date('2001/05/12');
725
670
  await el.updateComplete;
726
-
727
671
  expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
728
672
  expect(elObj.previousYearButtonEl.getAttribute('aria-label')).to.equal(
729
673
  'Previous year, July 1999',
@@ -732,7 +676,6 @@ describe('<lion-calendar>', () => {
732
676
  expect(elObj.nextYearButtonEl.getAttribute('aria-label')).to.equal('Next year, May 2001');
733
677
  });
734
678
  });
735
-
736
679
  describe('Month', () => {
737
680
  it('has a button for navigation to previous month', async () => {
738
681
  const el = await fixture(
@@ -743,17 +686,18 @@ describe('<lion-calendar>', () => {
743
686
  expect(elObj.activeMonth).to.equal('January');
744
687
  expect(elObj.activeYear).to.equal('2001');
745
688
 
746
- /** @type {HTMLElement} */ (elObj.previousMonthButtonEl).click();
689
+ /** @type {HTMLElement} */
690
+ elObj.previousMonthButtonEl.click();
747
691
  await el.updateComplete;
748
692
  expect(elObj.activeMonth).to.equal('December');
749
693
  expect(elObj.activeYear).to.equal('2000');
750
694
 
751
- /** @type {HTMLElement} */ (elObj.previousMonthButtonEl).click();
695
+ /** @type {HTMLElement} */
696
+ elObj.previousMonthButtonEl.click();
752
697
  await el.updateComplete;
753
698
  expect(elObj.activeMonth).to.equal('November');
754
699
  expect(elObj.activeYear).to.equal('2000');
755
700
  });
756
-
757
701
  it('has a button for navigation to next month', async () => {
758
702
  const el = await fixture(
759
703
  html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
@@ -762,17 +706,18 @@ describe('<lion-calendar>', () => {
762
706
  expect(elObj.nextMonthButtonEl).not.to.equal(null);
763
707
  expect(elObj.activeMonth).to.equal('December');
764
708
  expect(elObj.activeYear).to.equal('2000');
765
- /** @type {HTMLElement} */ (elObj.nextMonthButtonEl).click();
709
+ /** @type {HTMLElement} */
710
+ elObj.nextMonthButtonEl.click();
766
711
  await el.updateComplete;
767
712
  expect(elObj.activeMonth).to.equal('January');
768
713
  expect(elObj.activeYear).to.equal('2001');
769
714
 
770
- /** @type {HTMLElement} */ (elObj.nextMonthButtonEl).click();
715
+ /** @type {HTMLElement} */
716
+ elObj.nextMonthButtonEl.click();
771
717
  await el.updateComplete;
772
718
  expect(elObj.activeMonth).to.equal('February');
773
719
  expect(elObj.activeYear).to.equal('2001');
774
720
  });
775
-
776
721
  it('disables previousMonthButton and nextMonthButton based on disabled days accordingly', async () => {
777
722
  const el = await fixture(html`
778
723
  <lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
@@ -782,68 +727,63 @@ describe('<lion-calendar>', () => {
782
727
  expect(elObj.activeYear).to.equal('2000');
783
728
  expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
784
729
  expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
785
-
786
730
  el.minDate = new Date('2000/12/01');
787
731
  el.maxDate = new Date('2000/12/31');
788
732
  await el.updateComplete;
789
-
790
733
  expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(true);
791
734
  expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(true);
792
- /** @type {HTMLElement} */ (elObj.previousMonthButtonEl).click();
735
+ /** @type {HTMLElement} */
736
+ elObj.previousMonthButtonEl.click();
793
737
  await el.updateComplete;
794
738
  expect(elObj.activeMonth).to.equal('December');
795
739
  expect(elObj.activeYear).to.equal('2000');
796
- /** @type {HTMLElement} */ (elObj.previousMonthButtonEl).click();
740
+ /** @type {HTMLElement} */
741
+ elObj.previousMonthButtonEl.click();
797
742
  await el.updateComplete;
798
743
  expect(elObj.activeMonth).to.equal('December');
799
744
  expect(elObj.activeYear).to.equal('2000');
800
745
  });
801
-
802
746
  it('handles switch to previous month when dates are disabled', async () => {
803
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
804
-
747
+ const clock = sinon.useFakeTimers({
748
+ now: new Date('2000/12/15').getTime(),
749
+ });
805
750
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
806
751
  const elObj = new CalendarObject(el);
807
752
  expect(elObj.activeMonth).to.equal('December');
808
753
  expect(elObj.activeYear).to.equal('2000');
809
-
810
754
  el.minDate = new Date('2000/11/20');
811
755
  await el.updateComplete;
812
-
813
756
  expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
814
757
  expect(isSameDate(el.centralDate, new Date('2000/12/15'))).to.be.true;
815
758
 
816
- /** @type {HTMLElement} */ (elObj.previousMonthButtonEl).click();
759
+ /** @type {HTMLElement} */
760
+ elObj.previousMonthButtonEl.click();
817
761
  await el.updateComplete;
818
762
  expect(elObj.activeMonth).to.equal('November');
819
763
  expect(elObj.activeYear).to.equal('2000');
820
764
  expect(isSameDate(el.centralDate, new Date('2000/11/15'))).to.be.true;
821
-
822
765
  clock.restore();
823
766
  });
824
-
825
767
  it('handles switch to next month when dates are disabled', async () => {
826
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
827
-
768
+ const clock = sinon.useFakeTimers({
769
+ now: new Date('2000/12/15').getTime(),
770
+ });
828
771
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
829
772
  const elObj = new CalendarObject(el);
830
773
  expect(elObj.activeMonth).to.equal('December');
831
774
  expect(elObj.activeYear).to.equal('2000');
832
-
833
775
  el.maxDate = new Date('2001/01/10');
834
776
  await el.updateComplete;
835
-
836
777
  expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
837
778
  expect(isSameDate(el.centralDate, new Date('2000/12/15'))).to.be.true;
838
- /** @type {HTMLElement} */ (elObj.nextMonthButtonEl).click();
779
+ /** @type {HTMLElement} */
780
+ elObj.nextMonthButtonEl.click();
839
781
  await el.updateComplete;
840
782
  expect(elObj.activeMonth).to.equal('January');
841
783
  expect(elObj.activeYear).to.equal('2001');
842
784
  expect(isSameDate(el.centralDate, new Date('2001/01/15'))).to.be.true;
843
-
844
785
  clock.restore();
845
786
  });
846
-
847
787
  it('supports navigating from larger months to smaller ones (day counts)', async () => {
848
788
  // given
849
789
  const inputDate = new Date('2019/08/31');
@@ -852,7 +792,8 @@ describe('<lion-calendar>', () => {
852
792
  `);
853
793
  // when
854
794
  const remote = new CalendarObject(element);
855
- /** @type {HTMLElement} */ (remote.nextMonthButtonEl).click();
795
+ /** @type {HTMLElement} */
796
+ remote.nextMonthButtonEl.click();
856
797
  await element.updateComplete;
857
798
  // then
858
799
  expect(remote.activeMonth).to.equal('September');
@@ -876,7 +817,6 @@ describe('<lion-calendar>', () => {
876
817
  `);
877
818
  });
878
819
  });
879
-
880
820
  describe('Accessibility', () => {
881
821
  it('navigate buttons have a aria-label and title attribute with accessible label', async () => {
882
822
  const el = await fixture(html`
@@ -909,10 +849,9 @@ describe('<lion-calendar>', () => {
909
849
  'Next year, December 2001',
910
850
  );
911
851
  });
912
-
913
852
  it('disables a date with disableDates function provide a correct message', async () => {
914
853
  /** @param {Date} d */
915
- const disable15th = d => d.getDate() === 15;
854
+ const disable15th = (d) => d.getDate() === 15;
916
855
  const el = await fixture(html`
917
856
  <lion-calendar
918
857
  .selectedDate="${new Date('2000/12/01')}"
@@ -939,7 +878,6 @@ describe('<lion-calendar>', () => {
939
878
  </div>
940
879
  `);
941
880
  });
942
-
943
881
  it('disables days before "minDate" property provide a correct message', async () => {
944
882
  const el = await fixture(html`
945
883
  <lion-calendar
@@ -968,7 +906,6 @@ describe('<lion-calendar>', () => {
968
906
  </div>
969
907
  `);
970
908
  });
971
-
972
909
  it('disables days after "maxDate" property provide a correct message', async () => {
973
910
  const el = await fixture(html`
974
911
  <lion-calendar
@@ -1000,14 +937,13 @@ describe('<lion-calendar>', () => {
1000
937
  });
1001
938
  });
1002
939
  });
1003
-
1004
940
  describe('Calendar body (months view)', () => {
1005
941
  it('renders the days of the week as table headers', async () => {
1006
942
  const el = await fixture(
1007
943
  html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
1008
944
  );
1009
945
  const elObj = new CalendarObject(el);
1010
- expect(elObj.weekdayHeaderEls.map(h => h.textContent?.trim())).to.deep.equal([
946
+ expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
1011
947
  'Sun',
1012
948
  'Mon',
1013
949
  'Tue',
@@ -1017,22 +953,19 @@ describe('<lion-calendar>', () => {
1017
953
  'Sat',
1018
954
  ]);
1019
955
  });
1020
-
1021
956
  describe('Day view', () => {
1022
957
  it('adds "today" attribute if date is today', async () => {
1023
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
1024
-
958
+ const clock = sinon.useFakeTimers({
959
+ now: new Date('2000/12/15').getTime(),
960
+ });
1025
961
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
1026
962
  const elObj = new CalendarObject(el);
1027
963
  expect(elObj.getDayEl(15).hasAttribute('today')).to.be.true;
1028
-
1029
- expect(elObj.checkForAllDayObjs(/** @param {DayObject} d */ d => d.isToday, [15])).to.equal(
1030
- true,
1031
- );
1032
-
964
+ expect(
965
+ elObj.checkForAllDayObjs(/** @param {DayObject} d */ (d) => d.isToday, [15]),
966
+ ).to.equal(true);
1033
967
  clock.restore();
1034
968
  });
1035
-
1036
969
  it('adds "selected" attribute to the selected date', async () => {
1037
970
  const el = await fixture(
1038
971
  html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
@@ -1040,24 +973,23 @@ describe('<lion-calendar>', () => {
1040
973
  const elObj = new CalendarObject(el);
1041
974
  expect(
1042
975
  elObj.checkForAllDayObjs(
1043
- /** @param {DayObject} obj */ obj => obj.el.hasAttribute('selected'),
976
+ /** @param {DayObject} obj */ (obj) => obj.el.hasAttribute('selected'),
1044
977
  [12],
1045
978
  ),
1046
979
  ).to.equal(true);
1047
-
1048
980
  el.selectedDate = new Date('2000/12/15');
1049
981
  await el.updateComplete;
1050
982
  expect(
1051
983
  elObj.checkForAllDayObjs(
1052
- /** @param {DayObject} obj */ obj => obj.el.hasAttribute('selected'),
984
+ /** @param {DayObject} obj */ (obj) => obj.el.hasAttribute('selected'),
1053
985
  [15],
1054
986
  ),
1055
987
  ).to.equal(true);
1056
988
  });
1057
-
1058
989
  it('adds aria-disabled="true" attribute to disabled dates', async () => {
1059
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
1060
-
990
+ const clock = sinon.useFakeTimers({
991
+ now: new Date('2000/12/15').getTime(),
992
+ });
1061
993
  const el = await fixture(html`
1062
994
  <lion-calendar
1063
995
  .selectedDate="${new Date('2000/12/10')}"
@@ -1069,15 +1001,13 @@ describe('<lion-calendar>', () => {
1069
1001
  const elObj = new CalendarObject(el);
1070
1002
  expect(
1071
1003
  elObj.checkForAllDayObjs(
1072
- /** @param {DayObject} d */ d => d.el.getAttribute('aria-disabled') === 'true',
1004
+ /** @param {DayObject} d */ (d) => d.el.getAttribute('aria-disabled') === 'true',
1073
1005
  [1, 2, 30, 31],
1074
1006
  ),
1075
1007
  ).to.equal(true);
1076
-
1077
1008
  clock.restore();
1078
1009
  });
1079
1010
  });
1080
-
1081
1011
  describe('User Interaction', () => {
1082
1012
  // For implementation, base on: https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/grid/js/dataGrid.js
1083
1013
 
@@ -1089,12 +1019,11 @@ describe('<lion-calendar>', () => {
1089
1019
  const elObj = new CalendarObject(el);
1090
1020
  expect(
1091
1021
  elObj.checkForAllDayObjs(
1092
- /** @param {DayObject} d */ d => d.buttonEl.getAttribute('tabindex') === '0',
1022
+ /** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '0',
1093
1023
  [12],
1094
1024
  ),
1095
1025
  ).to.equal(true);
1096
1026
  });
1097
-
1098
1027
  it('non focused days are not reachable via tab (have tabindex="-1")', async () => {
1099
1028
  const el = await fixture(html`
1100
1029
  <lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
@@ -1102,12 +1031,11 @@ describe('<lion-calendar>', () => {
1102
1031
  const elObj = new CalendarObject(el);
1103
1032
  expect(
1104
1033
  elObj.checkForAllDayObjs(
1105
- /** @param {DayObject} d */ d => d.buttonEl.getAttribute('tabindex') === '-1',
1106
- /** @param {number} dayNumber */ dayNumber => dayNumber !== 12,
1034
+ /** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '-1',
1035
+ /** @param {number} dayNumber */ (dayNumber) => dayNumber !== 12,
1107
1036
  ),
1108
1037
  ).to.equal(true);
1109
1038
  });
1110
-
1111
1039
  it('blocks navigation to disabled days', async () => {
1112
1040
  const el = await fixture(html`
1113
1041
  <lion-calendar
@@ -1119,12 +1047,11 @@ describe('<lion-calendar>', () => {
1119
1047
  const elObj = new CalendarObject(el);
1120
1048
  expect(
1121
1049
  elObj.checkForAllDayObjs(
1122
- /** @param {DayObject} d */ d => d.buttonEl.getAttribute('tabindex') === '-1',
1123
- /** @param {number} dayNumber */ dayNumber => dayNumber < 9,
1050
+ /** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '-1',
1051
+ /** @param {number} dayNumber */ (dayNumber) => dayNumber < 9,
1124
1052
  ),
1125
1053
  ).to.equal(true);
1126
1054
  });
1127
-
1128
1055
  it('navigates through months with [pageup] [pagedown] keys', async () => {
1129
1056
  const el = await fixture(html`
1130
1057
  <lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
@@ -1132,30 +1059,28 @@ describe('<lion-calendar>', () => {
1132
1059
  const elObj = new CalendarObject(el);
1133
1060
  expect(elObj.activeMonth).to.equal('January');
1134
1061
  expect(elObj.activeYear).to.equal('2001');
1135
-
1136
1062
  focusSelectedDate(el);
1137
- await sendKeys({ press: 'PageUp' });
1138
-
1063
+ await sendKeys({
1064
+ press: 'PageUp',
1065
+ });
1139
1066
  await el.updateComplete;
1140
1067
  expect(elObj.activeMonth).to.equal('December');
1141
1068
  expect(elObj.activeYear).to.equal('2000');
1142
-
1143
- await sendKeys({ press: 'PageDown' });
1069
+ await sendKeys({
1070
+ press: 'PageDown',
1071
+ });
1144
1072
  await el.updateComplete;
1145
1073
  expect(elObj.activeMonth).to.equal('January');
1146
1074
  expect(elObj.activeYear).to.equal('2001');
1147
1075
  });
1148
-
1149
1076
  it('navigates through years with [alt + pageup] [alt + pagedown] keys', async () => {
1150
1077
  const el = await fixture(html`
1151
1078
  <lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
1152
1079
  `);
1153
1080
  focusSelectedDate(el);
1154
-
1155
1081
  const elObj = new CalendarObject(el);
1156
1082
  expect(elObj.activeMonth).to.equal('January');
1157
1083
  expect(elObj.activeYear).to.equal('2001');
1158
-
1159
1084
  await sendKeys({
1160
1085
  down: 'Alt',
1161
1086
  });
@@ -1165,12 +1090,10 @@ describe('<lion-calendar>', () => {
1165
1090
  await sendKeys({
1166
1091
  up: 'Alt',
1167
1092
  });
1168
-
1169
1093
  await el.updateComplete;
1170
1094
  focusSelectedDate(el);
1171
1095
  expect(elObj.activeMonth).to.equal('January');
1172
1096
  expect(elObj.activeYear).to.equal('2002');
1173
-
1174
1097
  await sendKeys({
1175
1098
  down: 'Alt',
1176
1099
  });
@@ -1184,103 +1107,102 @@ describe('<lion-calendar>', () => {
1184
1107
  expect(elObj.activeMonth).to.equal('January');
1185
1108
  expect(elObj.activeYear).to.equal('2001');
1186
1109
  });
1187
-
1188
1110
  describe('Arrow keys', () => {
1189
1111
  it('navigates (sets focus) to next row item via [arrow down] key', async () => {
1190
1112
  const el = await fixture(html`
1191
1113
  <lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
1192
1114
  `);
1193
1115
  const elObj = new CalendarObject(el);
1194
-
1195
1116
  focusSelectedDate(el);
1196
- await sendKeys({ press: 'ArrowDown' });
1117
+ await sendKeys({
1118
+ press: 'ArrowDown',
1119
+ });
1197
1120
  await el.updateComplete;
1198
1121
  expect(elObj.focusedDayObj?.monthday).to.equal(2 + 7);
1199
1122
  });
1200
-
1201
1123
  it('navigates (sets focus) to previous row item via [arrow up] key', async () => {
1202
1124
  const el = await fixture(html`
1203
1125
  <lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
1204
1126
  `);
1205
1127
  const elObj = new CalendarObject(el);
1206
-
1207
1128
  focusSelectedDate(el);
1208
- await sendKeys({ press: 'ArrowUp' });
1129
+ await sendKeys({
1130
+ press: 'ArrowUp',
1131
+ });
1209
1132
  await el.updateComplete;
1210
1133
  expect(elObj.focusedDayObj?.monthday).to.equal(26); // of month before
1211
1134
  });
1212
-
1213
1135
  it('navigates (sets focus) to previous column item via [arrow left] key', async () => {
1214
1136
  // 2000-12-12 is Tuesday; at 2nd of row
1215
1137
  const el = await fixture(html`
1216
1138
  <lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
1217
1139
  `);
1218
1140
  const elObj = new CalendarObject(el);
1219
-
1220
1141
  focusSelectedDate(el);
1221
- await sendKeys({ press: 'ArrowLeft' });
1142
+ await sendKeys({
1143
+ press: 'ArrowLeft',
1144
+ });
1222
1145
  await el.updateComplete;
1223
1146
  expect(elObj.focusedDayObj?.monthday).to.equal(12 - 1);
1224
1147
  });
1225
-
1226
1148
  it('navigates (sets focus) to next column item via [arrow right] key', async () => {
1227
1149
  // 2000-12-12 is Tuesday; at 2nd of row
1228
1150
  const el = await fixture(html`
1229
1151
  <lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
1230
1152
  `);
1231
1153
  const elObj = new CalendarObject(el);
1232
-
1233
1154
  focusSelectedDate(el);
1234
- await sendKeys({ press: 'ArrowRight' });
1155
+ await sendKeys({
1156
+ press: 'ArrowRight',
1157
+ });
1235
1158
  await el.updateComplete;
1236
1159
  expect(elObj.focusedDayObj?.monthday).to.equal(12 + 1);
1237
1160
  });
1238
-
1239
1161
  it('navigates (sets focus) to next column item via [arrow right] key', async () => {
1240
1162
  const el = await fixture(html`
1241
1163
  <lion-calendar
1242
1164
  .selectedDate="${new Date('2001/01/02')}"
1243
1165
  .disableDates=${
1244
- /** @param {Date} date */ date => date.getDate() === 3 || date.getDate() === 4
1166
+ /** @param {Date} date */ (date) => date.getDate() === 3 || date.getDate() === 4
1245
1167
  }
1246
1168
  ></lion-calendar>
1247
1169
  `);
1248
1170
  const elObj = new CalendarObject(el);
1249
-
1250
1171
  focusSelectedDate(el);
1251
- await sendKeys({ press: 'ArrowRight' });
1172
+ await sendKeys({
1173
+ press: 'ArrowRight',
1174
+ });
1252
1175
  await el.updateComplete;
1253
1176
  expect(elObj.focusedDayObj?.monthday).to.equal(3);
1254
1177
  });
1255
-
1256
1178
  it('navigates (sets focus) to next row via [arrow right] key if last item in row', async () => {
1257
1179
  const el = await fixture(html`
1258
1180
  <lion-calendar .selectedDate="${new Date('2019/01/05')}"></lion-calendar>
1259
1181
  `);
1260
1182
  const elObj = new CalendarObject(el);
1261
1183
  expect(elObj.centralDayObj?.weekdayNameShort).to.equal('Sat');
1262
-
1263
1184
  focusSelectedDate(el);
1264
- await sendKeys({ press: 'ArrowRight' });
1185
+ await sendKeys({
1186
+ press: 'ArrowRight',
1187
+ });
1265
1188
  await el.updateComplete;
1266
1189
  expect(elObj.focusedDayObj?.monthday).to.equal(6);
1267
1190
  expect(elObj.focusedDayObj?.weekdayNameShort).to.equal('Sun');
1268
1191
  });
1269
-
1270
1192
  it('navigates (sets focus) to previous row via [arrow left] key if first item in row', async () => {
1271
1193
  const el = await fixture(html`
1272
1194
  <lion-calendar .selectedDate="${new Date('2019/01/06')}"></lion-calendar>
1273
1195
  `);
1274
1196
  const elObj = new CalendarObject(el);
1275
1197
  expect(elObj.centralDayObj?.weekdayNameShort).to.equal('Sun');
1276
-
1277
1198
  focusSelectedDate(el);
1278
- await sendKeys({ press: 'ArrowLeft' });
1199
+ await sendKeys({
1200
+ press: 'ArrowLeft',
1201
+ });
1279
1202
  await el.updateComplete;
1280
1203
  expect(elObj.focusedDayObj?.monthday).to.equal(5);
1281
1204
  expect(elObj.focusedDayObj?.weekdayNameShort).to.equal('Sat');
1282
1205
  });
1283
-
1284
1206
  it('navigates to next month via [arrow right] key if last day of month', async () => {
1285
1207
  const el = await fixture(html`
1286
1208
  <lion-calendar .selectedDate="${new Date('2000/12/31')}"></lion-calendar>
@@ -1288,15 +1210,15 @@ describe('<lion-calendar>', () => {
1288
1210
  const elObj = new CalendarObject(el);
1289
1211
  expect(elObj.activeMonth).to.equal('December');
1290
1212
  expect(elObj.activeYear).to.equal('2000');
1291
-
1292
1213
  focusSelectedDate(el);
1293
- await sendKeys({ press: 'ArrowRight' });
1214
+ await sendKeys({
1215
+ press: 'ArrowRight',
1216
+ });
1294
1217
  await el.updateComplete;
1295
1218
  expect(elObj.activeMonth).to.equal('January');
1296
1219
  expect(elObj.activeYear).to.equal('2001');
1297
1220
  expect(elObj.focusedDayObj?.monthday).to.equal(1);
1298
1221
  });
1299
-
1300
1222
  it('navigates to previous month via [arrow left] key if first day of month', async () => {
1301
1223
  const el = await fixture(html`
1302
1224
  <lion-calendar .selectedDate="${new Date('2001/01/01')}"></lion-calendar>
@@ -1304,15 +1226,15 @@ describe('<lion-calendar>', () => {
1304
1226
  const elObj = new CalendarObject(el);
1305
1227
  expect(elObj.activeMonth).to.equal('January');
1306
1228
  expect(elObj.activeYear).to.equal('2001');
1307
-
1308
1229
  focusSelectedDate(el);
1309
- await sendKeys({ press: 'ArrowLeft' });
1230
+ await sendKeys({
1231
+ press: 'ArrowLeft',
1232
+ });
1310
1233
  await el.updateComplete;
1311
1234
  expect(elObj.activeMonth).to.equal('December');
1312
1235
  expect(elObj.activeYear).to.equal('2000');
1313
1236
  expect(elObj.focusedDayObj?.monthday).to.equal(31);
1314
1237
  });
1315
-
1316
1238
  it('navigates to next month via [arrow down] key if last row of month', async () => {
1317
1239
  const el = await fixture(html`
1318
1240
  <lion-calendar .selectedDate="${new Date('2000/12/30')}"></lion-calendar>
@@ -1320,15 +1242,15 @@ describe('<lion-calendar>', () => {
1320
1242
  const elObj = new CalendarObject(el);
1321
1243
  expect(elObj.activeMonth).to.equal('December');
1322
1244
  expect(elObj.activeYear).to.equal('2000');
1323
-
1324
1245
  focusSelectedDate(el);
1325
- await sendKeys({ press: 'ArrowDown' });
1246
+ await sendKeys({
1247
+ press: 'ArrowDown',
1248
+ });
1326
1249
  await el.updateComplete;
1327
1250
  expect(elObj.activeMonth).to.equal('January');
1328
1251
  expect(elObj.activeYear).to.equal('2001');
1329
1252
  expect(elObj.focusedDayObj?.monthday).to.equal(6);
1330
1253
  });
1331
-
1332
1254
  it('navigates to previous month via [arrow up] key if first row of month', async () => {
1333
1255
  const el = await fixture(html`
1334
1256
  <lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
@@ -1336,9 +1258,10 @@ describe('<lion-calendar>', () => {
1336
1258
  const elObj = new CalendarObject(el);
1337
1259
  expect(elObj.activeMonth).to.equal('January');
1338
1260
  expect(elObj.activeYear).to.equal('2001');
1339
-
1340
1261
  focusSelectedDate(el);
1341
- await sendKeys({ press: 'ArrowUp' });
1262
+ await sendKeys({
1263
+ press: 'ArrowUp',
1264
+ });
1342
1265
  await el.updateComplete;
1343
1266
  expect(elObj.activeMonth).to.equal('December');
1344
1267
  expect(elObj.activeYear).to.equal('2000');
@@ -1346,7 +1269,6 @@ describe('<lion-calendar>', () => {
1346
1269
  });
1347
1270
  });
1348
1271
  });
1349
-
1350
1272
  describe('Initial central', () => {
1351
1273
  it('is based on "selectedDate"', async () => {
1352
1274
  const el = await fixture(html`
@@ -1355,42 +1277,37 @@ describe('<lion-calendar>', () => {
1355
1277
  const elObj = new CalendarObject(el);
1356
1278
  expect(elObj.centralDayObj?.monthday).to.equal(15);
1357
1279
  });
1358
-
1359
1280
  it('is today if no selected date is available', async () => {
1360
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
1361
-
1281
+ const clock = sinon.useFakeTimers({
1282
+ now: new Date('2000/12/15').getTime(),
1283
+ });
1362
1284
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
1363
1285
  const elObj = new CalendarObject(el);
1364
1286
  expect(elObj.centralDayObj?.monthday).to.equal(15);
1365
-
1366
1287
  clock.restore();
1367
1288
  });
1368
-
1369
1289
  it('is nearest to today if no selected date is available and today is disabled', async () => {
1370
- const clock = sinon.useFakeTimers({ now: new Date('2000/12/15').getTime() });
1371
-
1290
+ const clock = sinon.useFakeTimers({
1291
+ now: new Date('2000/12/15').getTime(),
1292
+ });
1372
1293
  const calWithMin = await fixture(
1373
1294
  html`<lion-calendar .minDate=${new Date('2000/12/25')}></lion-calendar>`,
1374
1295
  );
1375
1296
  const calObjWithMin = new CalendarObject(calWithMin);
1376
1297
  expect(calObjWithMin.centralDayObj?.monthday).to.equal(25);
1377
-
1378
1298
  const calWithMax = await fixture(
1379
1299
  html`<lion-calendar .maxDate=${new Date('2000/12/05')}></lion-calendar>`,
1380
1300
  );
1381
1301
  const calObjWithMax = new CalendarObject(calWithMax);
1382
1302
  expect(calObjWithMax.centralDayObj?.monthday).to.equal(5);
1383
-
1384
1303
  const calWithDisabled = await fixture(
1385
1304
  html`<lion-calendar
1386
- .disableDates=${/** @param {Date} date */ date => date.getDate() === 15}
1305
+ .disableDates=${/** @param {Date} date */ (date) => date.getDate() === 15}
1387
1306
  ></lion-calendar>`,
1388
1307
  );
1389
1308
  await calWithDisabled.updateComplete;
1390
-
1391
1309
  const calObjWithDisabled = new CalendarObject(calWithDisabled);
1392
1310
  expect(calObjWithDisabled.centralDayObj?.monthday).to.equal(16);
1393
-
1394
1311
  clock.restore();
1395
1312
  });
1396
1313
  });
@@ -1400,7 +1317,6 @@ describe('<lion-calendar>', () => {
1400
1317
  * - (virtual) scrolling: still under discussion. Wait for UX
1401
1318
  */
1402
1319
  });
1403
-
1404
1320
  describe('Accessibility', () => {
1405
1321
  // Based on:
1406
1322
  // - https://codepen.io/erikkroes/pen/jJEWpR
@@ -1417,17 +1333,15 @@ describe('<lion-calendar>', () => {
1417
1333
  const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
1418
1334
  expect(elObj.rootEl?.getAttribute('role')).to.equal('application');
1419
1335
  });
1420
-
1421
1336
  it(`renders the calendar as a table element with role="grid", aria-readonly="true" and
1422
1337
  a caption (month + year)`, async () => {
1423
1338
  const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
1424
1339
  expect(elObj.gridEl?.getAttribute('role')).to.equal('grid');
1425
1340
  expect(elObj.gridEl?.getAttribute('aria-readonly')).to.equal('true');
1426
1341
  });
1427
-
1428
1342
  it('adds aria-labels to the weekday table headers', async () => {
1429
1343
  const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
1430
- expect(elObj.weekdayHeaderEls.map(h => h.getAttribute('aria-label'))).to.eql([
1344
+ expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
1431
1345
  'Sunday',
1432
1346
  'Monday',
1433
1347
  'Tuesday',
@@ -1437,14 +1351,12 @@ describe('<lion-calendar>', () => {
1437
1351
  'Saturday',
1438
1352
  ]);
1439
1353
  });
1440
-
1441
1354
  it('renders each day as a button inside a table cell', async () => {
1442
1355
  const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
1443
- const hasBtn = /** @param {DayObject} d */ d =>
1356
+ const hasBtn = /** @param {DayObject} d */ (d) =>
1444
1357
  d.el.tagName === 'DIV' && d.el.getAttribute('role') === 'button';
1445
1358
  expect(elObj.checkForAllDayObjs(hasBtn)).to.equal(true);
1446
1359
  });
1447
-
1448
1360
  it('renders days for previous and next months', async () => {
1449
1361
  const elObj = new CalendarObject(
1450
1362
  await fixture(html`
@@ -1459,7 +1371,6 @@ describe('<lion-calendar>', () => {
1459
1371
  expect(previousMonthDayObjs[1].monthday).to.equal(30);
1460
1372
  expect(previousMonthDayObjs[2].cellIndex).to.equal(2);
1461
1373
  expect(previousMonthDayObjs[2].monthday).to.equal(31);
1462
-
1463
1374
  expect(nextMonthDayObjs.length).to.equal(9);
1464
1375
  expect(nextMonthDayObjs[0].cellIndex).to.equal(5);
1465
1376
  expect(nextMonthDayObjs[0].monthday).to.equal(1);
@@ -1480,7 +1391,6 @@ describe('<lion-calendar>', () => {
1480
1391
  expect(nextMonthDayObjs[8].cellIndex).to.equal(6);
1481
1392
  expect(nextMonthDayObjs[8].monthday).to.equal(9);
1482
1393
  });
1483
-
1484
1394
  it('renders days for next months in the last month of the year', async () => {
1485
1395
  const elObj = new CalendarObject(
1486
1396
  await fixture(html`
@@ -1508,7 +1418,6 @@ describe('<lion-calendar>', () => {
1508
1418
  expect(nextMonthDayObjs[8].cellIndex).to.equal(6);
1509
1419
  expect(nextMonthDayObjs[8].monthday).to.equal(9);
1510
1420
  });
1511
-
1512
1421
  it('renders days for previous months in the first month of the year', async () => {
1513
1422
  const elObj = new CalendarObject(
1514
1423
  await fixture(html`
@@ -1524,22 +1433,20 @@ describe('<lion-calendar>', () => {
1524
1433
  expect(previousMonthDayObjs[2].cellIndex).to.equal(2);
1525
1434
  expect(previousMonthDayObjs[2].monthday).to.equal(31);
1526
1435
  });
1527
-
1528
1436
  it('sets aria-current="date" to todays button', async () => {
1529
1437
  const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
1530
- const hasAriaCurrent = /** @param {DayObject} d */ d =>
1438
+ const hasAriaCurrent = /** @param {DayObject} d */ (d) =>
1531
1439
  d.buttonEl.getAttribute('aria-current') === 'date';
1532
1440
  const monthday = new Date().getDate();
1533
1441
  expect(elObj.checkForAllDayObjs(hasAriaCurrent, [monthday])).to.equal(true);
1534
1442
  });
1535
-
1536
1443
  it('sets aria-pressed="true" on selected date button', async () => {
1537
1444
  const elObj = new CalendarObject(
1538
1445
  await fixture(html`
1539
1446
  <lion-calendar .selectedDate="${new Date('2000/11/12')}"></lion-calendar>
1540
1447
  `),
1541
1448
  );
1542
- const hasAriaPressed = /** @param {DayObject} d */ d =>
1449
+ const hasAriaPressed = /** @param {DayObject} d */ (d) =>
1543
1450
  d.buttonEl.getAttribute('aria-pressed') === 'true';
1544
1451
  expect(elObj.checkForAllDayObjs(hasAriaPressed, [12])).to.equal(true);
1545
1452
  });
@@ -1555,7 +1462,6 @@ describe('<lion-calendar>', () => {
1555
1462
  * - show week numbers
1556
1463
  */
1557
1464
  });
1558
-
1559
1465
  describe('Localization', () => {
1560
1466
  it('supports custom locale with a fallback to a global locale', async () => {
1561
1467
  const el = await fixture(html`
@@ -1563,35 +1469,28 @@ describe('<lion-calendar>', () => {
1563
1469
  `);
1564
1470
  const elObj = new CalendarObject(el);
1565
1471
  expect(elObj.activeMonth).to.equal('December');
1566
-
1567
1472
  el.locale = 'fr-FR';
1568
1473
  await el.updateComplete;
1569
1474
  expect(elObj.activeMonth).to.equal('décembre');
1570
-
1571
1475
  localizeManager.locale = 'cs-CZ';
1572
1476
  await el.updateComplete;
1573
1477
  expect(elObj.activeMonth).to.equal('décembre');
1574
-
1575
1478
  el.locale = '';
1576
1479
  await el.updateComplete;
1577
1480
  expect(elObj.activeMonth).to.equal('prosinec');
1578
1481
  });
1579
-
1580
1482
  it('displays the right translations according to locale', async () => {
1581
1483
  const el = await fixture(html`
1582
1484
  <lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>
1583
1485
  `);
1584
-
1585
1486
  const elObj = new CalendarObject(el);
1586
1487
  expect(elObj.nextMonthButtonEl?.getAttribute('aria-label')).to.equal(
1587
1488
  'Next month, December 2019',
1588
1489
  );
1589
-
1590
1490
  expect(elObj.previousMonthButtonEl?.getAttribute('aria-label')).to.equal(
1591
1491
  'Previous month, October 2019',
1592
1492
  );
1593
-
1594
- expect(elObj.weekdayHeaderEls.map(h => h.getAttribute('aria-label'))).to.eql([
1493
+ expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
1595
1494
  'Sunday',
1596
1495
  'Monday',
1597
1496
  'Tuesday',
@@ -1600,8 +1499,7 @@ describe('<lion-calendar>', () => {
1600
1499
  'Friday',
1601
1500
  'Saturday',
1602
1501
  ]);
1603
-
1604
- expect(elObj.weekdayHeaderEls.map(h => h.textContent?.trim())).to.deep.equal([
1502
+ expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
1605
1503
  'Sun',
1606
1504
  'Mon',
1607
1505
  'Tue',
@@ -1610,19 +1508,16 @@ describe('<lion-calendar>', () => {
1610
1508
  'Fri',
1611
1509
  'Sat',
1612
1510
  ]);
1613
-
1614
1511
  localizeManager.locale = 'nl-NL';
1615
1512
  await el.localizeNamespacesLoaded;
1616
1513
  await el.updateComplete;
1617
1514
  expect(elObj.nextMonthButtonEl?.getAttribute('aria-label')).to.equal(
1618
1515
  'Volgende maand, december 2019',
1619
1516
  );
1620
-
1621
1517
  expect(elObj.previousMonthButtonEl?.getAttribute('aria-label')).to.equal(
1622
1518
  'Vorige maand, oktober 2019',
1623
1519
  );
1624
-
1625
- expect(elObj.weekdayHeaderEls.map(h => h.getAttribute('aria-label'))).to.eql([
1520
+ expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
1626
1521
  'zondag',
1627
1522
  'maandag',
1628
1523
  'dinsdag',
@@ -1631,8 +1526,7 @@ describe('<lion-calendar>', () => {
1631
1526
  'vrijdag',
1632
1527
  'zaterdag',
1633
1528
  ]);
1634
-
1635
- expect(elObj.weekdayHeaderEls.map(h => h.textContent?.trim())).to.deep.equal([
1529
+ expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
1636
1530
  'zo',
1637
1531
  'ma',
1638
1532
  'di',
@@ -1643,13 +1537,11 @@ describe('<lion-calendar>', () => {
1643
1537
  ]);
1644
1538
  });
1645
1539
  });
1646
-
1647
1540
  describe('Accessibility', () => {
1648
1541
  it('is accessible', async () => {
1649
1542
  const el = await fixture(html`<lion-calendar></lion-calendar>`);
1650
1543
  await expect(el).to.be.accessible();
1651
1544
  });
1652
-
1653
1545
  it('is accessible with a date selected', async () => {
1654
1546
  const today = new Date();
1655
1547
  const selectedDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
@@ -1658,24 +1550,21 @@ describe('<lion-calendar>', () => {
1658
1550
  );
1659
1551
  await expect(el).to.be.accessible();
1660
1552
  });
1661
-
1662
1553
  it('is accessible with disabled dates', async () => {
1663
1554
  const el = await fixture(html`
1664
1555
  <lion-calendar
1665
1556
  .disableDates=${
1666
- /** @param {Date} date */ date => date.getDay() === 6 || date.getDay() === 0
1557
+ /** @param {Date} date */ (date) => date.getDay() === 6 || date.getDay() === 0
1667
1558
  }
1668
1559
  ></lion-calendar>
1669
1560
  `);
1670
1561
  await expect(el).to.be.accessible();
1671
1562
  });
1672
-
1673
1563
  it('is hidden when attribute hidden is true', async () => {
1674
1564
  const el = await fixture(html`<lion-calendar hidden></lion-calendar>`);
1675
1565
  expect(el).not.to.be.displayed;
1676
1566
  });
1677
1567
  });
1678
-
1679
1568
  describe('Run suite', () => {
1680
1569
  runCalendarSuite();
1681
1570
  });