@lion/ui 0.25.0 → 0.26.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 (771) hide show
  1. package/README.md +25 -7
  2. package/accordion-test-suites.js +2 -0
  3. package/collapsible-test-suites.js +1 -0
  4. package/combobox-test-suites.js +2 -0
  5. package/components/accordion/test/lion-accordion.test.js +2 -565
  6. package/components/accordion/test-suites/lion-accordion.suite.js +596 -0
  7. package/components/button/test-suites/LionButton.suite.js +13 -11
  8. package/components/button/test-suites/LionButtonReset.suite.js +11 -3
  9. package/components/button/test-suites/LionButtonSubmit.suite.js +11 -3
  10. package/components/calendar/test/lion-calendar.test.js +1 -1570
  11. package/components/calendar/test-suites/LionCalendar.suite.js +1617 -5
  12. package/components/checkbox-group/test/lion-checkbox-group-integrations.test.js +5 -2
  13. package/components/checkbox-group/test/lion-checkbox-indeterminate-integrations.test.js +13 -4
  14. package/components/checkbox-group/test/lion-checkbox-integrations.test.js +4 -1
  15. package/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.js +54 -54
  16. package/components/collapsible/test/lion-collapsible.test.js +2 -126
  17. package/components/collapsible/test-suites/LionCollapsible.suite.js +147 -0
  18. package/components/combobox/test/lion-combobox-integrations.test.js +11 -4
  19. package/components/combobox/test/lion-combobox.test.js +2 -3622
  20. package/components/combobox/test-suites/lion-combobox.suite.js +3665 -0
  21. package/components/core/src/ScopedElementsMixin.js +16 -1
  22. package/components/core/test-helpers/isElementVisible.js +21 -0
  23. package/components/core/test-helpers/resolveSuiteTag.js +97 -0
  24. package/components/core/types/TestSuiteTypes.ts +43 -0
  25. package/components/dialog/test/lion-dialog.integration.test.js +9 -10
  26. package/components/dialog/test/lion-dialog.test.js +2 -399
  27. package/components/dialog/test-suites/lion-dialog.suite.js +412 -0
  28. package/components/drawer/test/lion-drawer.test.js +2 -84
  29. package/components/drawer/test-suites/LionDrawer.suite.js +108 -0
  30. package/components/fieldset/test/lion-fieldset.test.js +7 -2
  31. package/components/form/test/lion-form.test.js +2 -348
  32. package/components/form/test-suites/lion-form.suite.js +398 -0
  33. package/components/form-core/test/FormatMixin.test.js +4 -1
  34. package/components/form-core/test/choice-group/CustomChoiceGroupMixin.integrations.test.js +13 -0
  35. package/components/form-core/test-suites/FormRegistrationMixins.suite.js +21 -26
  36. package/components/form-core/test-suites/FormatMixin.suite.js +45 -43
  37. package/components/form-core/test-suites/InteractionStateMixin.suite.js +19 -15
  38. package/components/form-core/test-suites/NativeTextFieldMixin.suite.js +8 -9
  39. package/components/form-core/test-suites/ValidateMixin.suite.js +14 -10
  40. package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +15 -2
  41. package/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.js +55 -33
  42. package/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.js +7 -6
  43. package/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.js +19 -22
  44. package/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.js +14 -5
  45. package/components/form-core/test-suites/form-group/FormGroupMixin.suite.js +13 -4
  46. package/components/icon/test/lion-icon.test.js +2 -188
  47. package/components/icon/test-suites/lion-icon.suite.js +206 -0
  48. package/components/input/test/input-integrations.test.js +18 -15
  49. package/components/input/test/lion-input-integrations.test.js +7 -3
  50. package/components/input/test/lion-input.test.js +2 -198
  51. package/components/input/test-suites/lion-input.suite.js +214 -0
  52. package/components/input-amount/src/parsers.js +5 -1
  53. package/components/input-amount/test/lion-input-amount-integrations.test.js +7 -3
  54. package/components/input-amount/test/lion-input-amount.test.js +2 -421
  55. package/components/input-amount/test/parsers.test.js +12 -0
  56. package/components/input-amount/test-suites/lion-input-amount.suite.js +418 -0
  57. package/components/input-amount-dropdown/test/LionInputAmountDropdown.test.js +3 -2
  58. package/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.js +4 -2
  59. package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +6 -4
  60. package/components/input-date/test/lion-input-date-integrations.test.js +7 -3
  61. package/components/input-date/test/lion-input-date.test.js +2 -177
  62. package/components/input-date/test-suites/lion-input-date.suite.js +195 -0
  63. package/components/input-datepicker/test/lion-input-datepicker-integrations.test.js +7 -3
  64. package/components/input-datepicker/test/lion-input-datepicker.test.js +1 -844
  65. package/components/input-datepicker/test-helpers/DatepickerInputObject.js +26 -0
  66. package/components/input-datepicker/test-suites/LionInputDatepicker.suite.js +899 -14
  67. package/components/input-email/test/lion-input-email-integrations.test.js +4 -2
  68. package/components/input-email/test/lion-input-email.test.js +2 -46
  69. package/components/input-email/test-suites/lion-input-email.suite.js +63 -0
  70. package/components/input-file/test/lion-input-file.test.js +2 -1274
  71. package/components/input-file/test-suites/lion-input-file.suite.js +1505 -0
  72. package/components/input-iban/test/lion-input-iban-integrations.test.js +4 -2
  73. package/components/input-iban/test/lion-input-iban.test.js +2 -73
  74. package/components/input-iban/test-suites/lion-input-iban.suite.js +88 -0
  75. package/components/input-range/test/lion-input-range.test.js +2 -176
  76. package/components/input-range/test-suites/lion-input-range.suite.js +195 -0
  77. package/components/input-stepper/test-suites/lion-input-stepper.integration.suite.js +14 -3
  78. package/components/input-stepper/test-suites/lion-input-stepper.suite.js +14 -10
  79. package/components/input-tel/test/LionInputTel.test.js +3 -1
  80. package/components/input-tel/test-suites/LionInputTel.suite.js +9 -4
  81. package/components/input-tel-dropdown/test/LionInputTelDropdown.test.js +6 -4
  82. package/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.js +10 -13
  83. package/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js +6 -5
  84. package/components/listbox/test-suites/ListboxMixin.suite.js +19 -19
  85. package/components/menu/test-suites/InteractiveListMixin.suite.js +6 -9
  86. package/components/menu/test-suites/LionMenu.suite.js +6 -10
  87. package/components/menu/test-suites/LionMenuInteractions.suite.js +13 -4
  88. package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +6 -9
  89. package/components/menu/test-suites/MultiLevelListMixin.suite.js +15 -11
  90. package/components/overlays/test/OverlayController.test.js +6 -1
  91. package/components/overlays/test-suites/OverlayMixin.suite.js +3 -5
  92. package/components/pagination/test/lion-pagination.test.js +2 -176
  93. package/components/pagination/test-suites/LionPagination.suite.js +201 -0
  94. package/components/progress-indicator/test/lion-progress-indicator.test.js +2 -203
  95. package/components/progress-indicator/test-suites/lion-progress-indicator.suite.js +214 -0
  96. package/components/radio-group/test/lion-radio-group.test.js +2 -162
  97. package/components/radio-group/test/lion-radio.test.js +2 -54
  98. package/components/radio-group/test-suites/lion-radio-group.suite.js +173 -0
  99. package/components/radio-group/test-suites/lion-radio.suite.js +70 -0
  100. package/components/select/test/lion-select.test.js +2 -79
  101. package/components/select/test-suites/LionSelect.suite.js +94 -0
  102. package/components/select-rich/test/lion-select-invoker.test.js +2 -86
  103. package/components/select-rich/test/lion-select-rich-interaction.test.js +2 -430
  104. package/components/select-rich/test/lion-select-rich.test.js +2 -1193
  105. package/components/select-rich/test-suites/lion-select-invoker.suite.js +98 -0
  106. package/components/select-rich/test-suites/lion-select-rich-interaction.suite.js +452 -0
  107. package/components/select-rich/test-suites/lion-select-rich.suite.js +1236 -0
  108. package/components/steps/test/lion-step.test.js +2 -97
  109. package/components/steps/test/lion-steps.test.js +2 -433
  110. package/components/steps/test-suites/lion-step.suite.js +113 -0
  111. package/components/steps/test-suites/lion-steps.suite.js +445 -0
  112. package/components/switch/test/lion-switch.test.js +2 -232
  113. package/components/switch/test-suites/lion-switch.suite.js +450 -0
  114. package/components/tabs/test/lion-tabs.test.js +2 -596
  115. package/components/tabs/test-suites/lion-tabs.suite.js +617 -0
  116. package/components/textarea/src/LionTextarea.js +5 -2
  117. package/components/textarea/test/lion-textarea.test.js +2 -159
  118. package/components/textarea/test-suites/lion-textarea.suite.js +192 -0
  119. package/components/tooltip/test/lion-tooltip.test.js +2 -393
  120. package/components/tooltip/test-suites/lion-tooltip.suite.js +409 -0
  121. package/custom-elements.json +14855 -10161
  122. package/dialog-test-suites.js +2 -0
  123. package/dist-types/components/accordion/test/lion-accordion.test.d.ts +1 -2
  124. package/dist-types/components/accordion/test/lion-accordion.test.d.ts.map +1 -1
  125. package/dist-types/components/accordion/test-suites/lion-accordion.suite.d.ts +18 -0
  126. package/dist-types/components/accordion/test-suites/lion-accordion.suite.d.ts.map +1 -0
  127. package/dist-types/components/button/test-suites/LionButton.suite.d.ts +10 -4
  128. package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
  129. package/dist-types/components/button/test-suites/LionButtonReset.suite.d.ts +10 -4
  130. package/dist-types/components/button/test-suites/LionButtonReset.suite.d.ts.map +1 -1
  131. package/dist-types/components/button/test-suites/LionButtonSubmit.suite.d.ts +10 -4
  132. package/dist-types/components/button/test-suites/LionButtonSubmit.suite.d.ts.map +1 -1
  133. package/dist-types/components/calendar/test/lion-calendar.test.d.ts +1 -3
  134. package/dist-types/components/calendar/test/lion-calendar.test.d.ts.map +1 -1
  135. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts +13 -4
  136. package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts.map +1 -1
  137. package/dist-types/components/checkbox-group/test/lion-checkbox-group-integrations.test.d.ts.map +1 -1
  138. package/dist-types/components/checkbox-group/test/lion-checkbox-integrations.test.d.ts.map +1 -1
  139. package/dist-types/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.d.ts +12 -9
  140. package/dist-types/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.d.ts.map +1 -1
  141. package/dist-types/components/collapsible/test/lion-collapsible.test.d.ts +1 -3
  142. package/dist-types/components/collapsible/test/lion-collapsible.test.d.ts.map +1 -1
  143. package/dist-types/components/collapsible/test-suites/LionCollapsible.suite.d.ts +18 -0
  144. package/dist-types/components/collapsible/test-suites/LionCollapsible.suite.d.ts.map +1 -0
  145. package/dist-types/components/combobox/test/lion-combobox.test.d.ts +1 -5
  146. package/dist-types/components/combobox/test/lion-combobox.test.d.ts.map +1 -1
  147. package/dist-types/components/combobox/test-suites/lion-combobox.suite.d.ts +17 -0
  148. package/dist-types/components/combobox/test-suites/lion-combobox.suite.d.ts.map +1 -0
  149. package/dist-types/components/core/src/ScopedElementsMixin.d.ts.map +1 -1
  150. package/dist-types/components/core/test-helpers/isElementVisible.d.ts +12 -0
  151. package/dist-types/components/core/test-helpers/isElementVisible.d.ts.map +1 -0
  152. package/dist-types/components/core/test-helpers/resolveSuiteTag.d.ts +29 -0
  153. package/dist-types/components/core/test-helpers/resolveSuiteTag.d.ts.map +1 -0
  154. package/dist-types/components/core/types/TestSuiteTypes.d.ts +40 -0
  155. package/dist-types/components/core/types/TestSuiteTypes.d.ts.map +1 -0
  156. package/dist-types/components/dialog/test/lion-dialog.integration.test.d.ts.map +1 -1
  157. package/dist-types/components/dialog/test/lion-dialog.test.d.ts +1 -5
  158. package/dist-types/components/dialog/test/lion-dialog.test.d.ts.map +1 -1
  159. package/dist-types/components/dialog/test-suites/lion-dialog.suite.d.ts +19 -0
  160. package/dist-types/components/dialog/test-suites/lion-dialog.suite.d.ts.map +1 -0
  161. package/dist-types/components/drawer/test/lion-drawer.test.d.ts +1 -3
  162. package/dist-types/components/drawer/test/lion-drawer.test.d.ts.map +1 -1
  163. package/dist-types/components/drawer/test-suites/LionDrawer.suite.d.ts +20 -0
  164. package/dist-types/components/drawer/test-suites/LionDrawer.suite.d.ts.map +1 -0
  165. package/dist-types/components/fieldset/test/lion-fieldset.test.d.ts.map +1 -1
  166. package/dist-types/components/form/test/lion-form.test.d.ts +1 -12
  167. package/dist-types/components/form/test/lion-form.test.d.ts.map +1 -1
  168. package/dist-types/components/form/test-suites/lion-form.suite.d.ts +39 -0
  169. package/dist-types/components/form/test-suites/lion-form.suite.d.ts.map +1 -0
  170. package/dist-types/components/form-core/test-suites/FormRegistrationMixins.suite.d.ts +14 -17
  171. package/dist-types/components/form-core/test-suites/FormRegistrationMixins.suite.d.ts.map +1 -1
  172. package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts +22 -38
  173. package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts.map +1 -1
  174. package/dist-types/components/form-core/test-suites/InteractionStateMixin.suite.d.ts +11 -5
  175. package/dist-types/components/form-core/test-suites/InteractionStateMixin.suite.d.ts.map +1 -1
  176. package/dist-types/components/form-core/test-suites/NativeTextFieldMixin.suite.d.ts +9 -4
  177. package/dist-types/components/form-core/test-suites/NativeTextFieldMixin.suite.d.ts.map +1 -1
  178. package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts +9 -4
  179. package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
  180. package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts +10 -1
  181. package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
  182. package/dist-types/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.d.ts +17 -6
  183. package/dist-types/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.d.ts.map +1 -1
  184. package/dist-types/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.d.ts +5 -2
  185. package/dist-types/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.d.ts.map +1 -1
  186. package/dist-types/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.d.ts +10 -5
  187. package/dist-types/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.d.ts.map +1 -1
  188. package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.d.ts +10 -5
  189. package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.d.ts.map +1 -1
  190. package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin.suite.d.ts +10 -5
  191. package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin.suite.d.ts.map +1 -1
  192. package/dist-types/components/icon/test/lion-icon.test.d.ts +1 -4
  193. package/dist-types/components/icon/test/lion-icon.test.d.ts.map +1 -1
  194. package/dist-types/components/icon/test-suites/lion-icon.suite.d.ts +16 -0
  195. package/dist-types/components/icon/test-suites/lion-icon.suite.d.ts.map +1 -0
  196. package/dist-types/components/input/test/lion-input-integrations.test.d.ts.map +1 -1
  197. package/dist-types/components/input/test/lion-input.test.d.ts +1 -2
  198. package/dist-types/components/input/test/lion-input.test.d.ts.map +1 -1
  199. package/dist-types/components/input/test-suites/lion-input.suite.d.ts +17 -0
  200. package/dist-types/components/input/test-suites/lion-input.suite.d.ts.map +1 -0
  201. package/dist-types/components/input-amount/src/parsers.d.ts.map +1 -1
  202. package/dist-types/components/input-amount/test/lion-input-amount-integrations.test.d.ts.map +1 -1
  203. package/dist-types/components/input-amount/test/lion-input-amount.test.d.ts +1 -2
  204. package/dist-types/components/input-amount/test/lion-input-amount.test.d.ts.map +1 -1
  205. package/dist-types/components/input-amount/test-suites/lion-input-amount.suite.d.ts +19 -0
  206. package/dist-types/components/input-amount/test-suites/lion-input-amount.suite.d.ts.map +1 -0
  207. package/dist-types/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.d.ts.map +1 -1
  208. package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts +7 -3
  209. package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts.map +1 -1
  210. package/dist-types/components/input-date/test/lion-input-date-integrations.test.d.ts.map +1 -1
  211. package/dist-types/components/input-date/test/lion-input-date.test.d.ts +1 -3
  212. package/dist-types/components/input-date/test/lion-input-date.test.d.ts.map +1 -1
  213. package/dist-types/components/input-date/test-suites/lion-input-date.suite.d.ts +15 -0
  214. package/dist-types/components/input-date/test-suites/lion-input-date.suite.d.ts.map +1 -0
  215. package/dist-types/components/input-datepicker/test/lion-input-datepicker-integrations.test.d.ts.map +1 -1
  216. package/dist-types/components/input-datepicker/test/lion-input-datepicker.test.d.ts +1 -2
  217. package/dist-types/components/input-datepicker/test/lion-input-datepicker.test.d.ts.map +1 -1
  218. package/dist-types/components/input-datepicker/test-helpers/DatepickerInputObject.d.ts +8 -0
  219. package/dist-types/components/input-datepicker/test-helpers/DatepickerInputObject.d.ts.map +1 -1
  220. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts +15 -5
  221. package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts.map +1 -1
  222. package/dist-types/components/input-email/test/lion-input-email-integrations.test.d.ts.map +1 -1
  223. package/dist-types/components/input-email/test/lion-input-email.test.d.ts +1 -3
  224. package/dist-types/components/input-email/test/lion-input-email.test.d.ts.map +1 -1
  225. package/dist-types/components/input-email/test-suites/lion-input-email.suite.d.ts +15 -0
  226. package/dist-types/components/input-email/test-suites/lion-input-email.suite.d.ts.map +1 -0
  227. package/dist-types/components/input-file/test/lion-input-file.test.d.ts +1 -5
  228. package/dist-types/components/input-file/test/lion-input-file.test.d.ts.map +1 -1
  229. package/dist-types/components/input-file/test-suites/lion-input-file.suite.d.ts +19 -0
  230. package/dist-types/components/input-file/test-suites/lion-input-file.suite.d.ts.map +1 -0
  231. package/dist-types/components/input-iban/test/lion-input-iban-integrations.test.d.ts.map +1 -1
  232. package/dist-types/components/input-iban/test/lion-input-iban.test.d.ts +1 -3
  233. package/dist-types/components/input-iban/test/lion-input-iban.test.d.ts.map +1 -1
  234. package/dist-types/components/input-iban/test-suites/lion-input-iban.suite.d.ts +15 -0
  235. package/dist-types/components/input-iban/test-suites/lion-input-iban.suite.d.ts.map +1 -0
  236. package/dist-types/components/input-range/test/lion-input-range.test.d.ts +1 -3
  237. package/dist-types/components/input-range/test/lion-input-range.test.d.ts.map +1 -1
  238. package/dist-types/components/input-range/test-suites/lion-input-range.suite.d.ts +15 -0
  239. package/dist-types/components/input-range/test-suites/lion-input-range.suite.d.ts.map +1 -0
  240. package/dist-types/components/input-stepper/test-suites/lion-input-stepper.integration.suite.d.ts +10 -2
  241. package/dist-types/components/input-stepper/test-suites/lion-input-stepper.integration.suite.d.ts.map +1 -1
  242. package/dist-types/components/input-stepper/test-suites/lion-input-stepper.suite.d.ts +10 -2
  243. package/dist-types/components/input-stepper/test-suites/lion-input-stepper.suite.d.ts.map +1 -1
  244. package/dist-types/components/input-tel/test-suites/LionInputTel.suite.d.ts +6 -4
  245. package/dist-types/components/input-tel/test-suites/LionInputTel.suite.d.ts.map +1 -1
  246. package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.d.ts +7 -3
  247. package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.d.ts.map +1 -1
  248. package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.d.ts +7 -3
  249. package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.d.ts.map +1 -1
  250. package/dist-types/components/listbox/test-suites/ListboxMixin.suite.d.ts +3 -4
  251. package/dist-types/components/listbox/test-suites/ListboxMixin.suite.d.ts.map +1 -1
  252. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +6 -5
  253. package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -1
  254. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +6 -5
  255. package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -1
  256. package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts +10 -4
  257. package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts.map +1 -1
  258. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +6 -5
  259. package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -1
  260. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +7 -6
  261. package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -1
  262. package/dist-types/components/overlays/test-suites/OverlayMixin.suite.d.ts.map +1 -1
  263. package/dist-types/components/pagination/test/lion-pagination.test.d.ts +1 -3
  264. package/dist-types/components/pagination/test/lion-pagination.test.d.ts.map +1 -1
  265. package/dist-types/components/pagination/test-suites/LionPagination.suite.d.ts +18 -0
  266. package/dist-types/components/pagination/test-suites/LionPagination.suite.d.ts.map +1 -0
  267. package/dist-types/components/progress-indicator/test/lion-progress-indicator.test.d.ts +1 -3
  268. package/dist-types/components/progress-indicator/test/lion-progress-indicator.test.d.ts.map +1 -1
  269. package/dist-types/components/progress-indicator/test-suites/lion-progress-indicator.suite.d.ts +15 -0
  270. package/dist-types/components/progress-indicator/test-suites/lion-progress-indicator.suite.d.ts.map +1 -0
  271. package/dist-types/components/radio-group/test/lion-radio-group.test.d.ts +1 -5
  272. package/dist-types/components/radio-group/test/lion-radio-group.test.d.ts.map +1 -1
  273. package/dist-types/components/radio-group/test/lion-radio.test.d.ts +1 -2
  274. package/dist-types/components/radio-group/test/lion-radio.test.d.ts.map +1 -1
  275. package/dist-types/components/radio-group/test-suites/lion-radio-group.suite.d.ts +19 -0
  276. package/dist-types/components/radio-group/test-suites/lion-radio-group.suite.d.ts.map +1 -0
  277. package/dist-types/components/radio-group/test-suites/lion-radio.suite.d.ts +17 -0
  278. package/dist-types/components/radio-group/test-suites/lion-radio.suite.d.ts.map +1 -0
  279. package/dist-types/components/select/test/lion-select.test.d.ts +1 -2
  280. package/dist-types/components/select/test/lion-select.test.d.ts.map +1 -1
  281. package/dist-types/components/select/test-suites/LionSelect.suite.d.ts +16 -0
  282. package/dist-types/components/select/test-suites/LionSelect.suite.d.ts.map +1 -0
  283. package/dist-types/components/select-rich/test/lion-select-invoker.test.d.ts +1 -2
  284. package/dist-types/components/select-rich/test/lion-select-invoker.test.d.ts.map +1 -1
  285. package/dist-types/components/select-rich/test/lion-select-rich-interaction.test.d.ts +1 -5
  286. package/dist-types/components/select-rich/test/lion-select-rich-interaction.test.d.ts.map +1 -1
  287. package/dist-types/components/select-rich/test/lion-select-rich.test.d.ts +1 -8
  288. package/dist-types/components/select-rich/test/lion-select-rich.test.d.ts.map +1 -1
  289. package/dist-types/components/select-rich/test-suites/lion-select-invoker.suite.d.ts +19 -0
  290. package/dist-types/components/select-rich/test-suites/lion-select-invoker.suite.d.ts.map +1 -0
  291. package/dist-types/components/select-rich/test-suites/lion-select-rich-interaction.suite.d.ts +19 -0
  292. package/dist-types/components/select-rich/test-suites/lion-select-rich-interaction.suite.d.ts.map +1 -0
  293. package/dist-types/components/select-rich/test-suites/lion-select-rich.suite.d.ts +21 -0
  294. package/dist-types/components/select-rich/test-suites/lion-select-rich.suite.d.ts.map +1 -0
  295. package/dist-types/components/steps/test/lion-step.test.d.ts +1 -2
  296. package/dist-types/components/steps/test/lion-step.test.d.ts.map +1 -1
  297. package/dist-types/components/steps/test/lion-steps.test.d.ts +1 -8
  298. package/dist-types/components/steps/test/lion-steps.test.d.ts.map +1 -1
  299. package/dist-types/components/steps/test-suites/lion-step.suite.d.ts +17 -0
  300. package/dist-types/components/steps/test-suites/lion-step.suite.d.ts.map +1 -0
  301. package/dist-types/components/steps/test-suites/lion-steps.suite.d.ts +22 -0
  302. package/dist-types/components/steps/test-suites/lion-steps.suite.d.ts.map +1 -0
  303. package/dist-types/components/switch/test/lion-switch.test.d.ts +1 -4
  304. package/dist-types/components/switch/test/lion-switch.test.d.ts.map +1 -1
  305. package/dist-types/components/switch/test-suites/lion-switch.suite.d.ts +17 -0
  306. package/dist-types/components/switch/test-suites/lion-switch.suite.d.ts.map +1 -0
  307. package/dist-types/components/tabs/test/lion-tabs.test.d.ts +1 -5
  308. package/dist-types/components/tabs/test/lion-tabs.test.d.ts.map +1 -1
  309. package/dist-types/components/tabs/test-suites/lion-tabs.suite.d.ts +17 -0
  310. package/dist-types/components/tabs/test-suites/lion-tabs.suite.d.ts.map +1 -0
  311. package/dist-types/components/textarea/src/LionTextarea.d.ts.map +1 -1
  312. package/dist-types/components/textarea/test/lion-textarea.test.d.ts +1 -3
  313. package/dist-types/components/textarea/test/lion-textarea.test.d.ts.map +1 -1
  314. package/dist-types/components/textarea/test-suites/lion-textarea.suite.d.ts +15 -0
  315. package/dist-types/components/textarea/test-suites/lion-textarea.suite.d.ts.map +1 -0
  316. package/dist-types/components/tooltip/test/lion-tooltip.test.d.ts +1 -3
  317. package/dist-types/components/tooltip/test/lion-tooltip.test.d.ts.map +1 -1
  318. package/dist-types/components/tooltip/test-suites/lion-tooltip.suite.d.ts +19 -0
  319. package/dist-types/components/tooltip/test-suites/lion-tooltip.suite.d.ts.map +1 -0
  320. package/dist-types/exports/accordion-test-suites.d.ts +2 -0
  321. package/dist-types/exports/accordion-test-suites.d.ts.map +1 -0
  322. package/dist-types/exports/collapsible-test-suites.d.ts +2 -0
  323. package/dist-types/exports/collapsible-test-suites.d.ts.map +1 -0
  324. package/dist-types/exports/combobox-test-suites.d.ts +2 -0
  325. package/dist-types/exports/combobox-test-suites.d.ts.map +1 -0
  326. package/dist-types/exports/dialog-test-suites.d.ts +2 -0
  327. package/dist-types/exports/dialog-test-suites.d.ts.map +1 -0
  328. package/dist-types/exports/drawer-test-suites.d.ts +2 -0
  329. package/dist-types/exports/drawer-test-suites.d.ts.map +1 -0
  330. package/dist-types/exports/form-test-suites.d.ts +2 -0
  331. package/dist-types/exports/form-test-suites.d.ts.map +1 -0
  332. package/dist-types/exports/icon-test-suites.d.ts +2 -0
  333. package/dist-types/exports/icon-test-suites.d.ts.map +1 -0
  334. package/dist-types/exports/input-amount-test-suites.d.ts +2 -0
  335. package/dist-types/exports/input-amount-test-suites.d.ts.map +1 -0
  336. package/dist-types/exports/input-date-test-suites.d.ts +2 -0
  337. package/dist-types/exports/input-date-test-suites.d.ts.map +1 -0
  338. package/dist-types/exports/input-email-test-suites.d.ts +2 -0
  339. package/dist-types/exports/input-email-test-suites.d.ts.map +1 -0
  340. package/dist-types/exports/input-file-test-suites.d.ts +2 -0
  341. package/dist-types/exports/input-file-test-suites.d.ts.map +1 -0
  342. package/dist-types/exports/input-iban-test-suites.d.ts +2 -0
  343. package/dist-types/exports/input-iban-test-suites.d.ts.map +1 -0
  344. package/dist-types/exports/input-range-test-suites.d.ts +2 -0
  345. package/dist-types/exports/input-range-test-suites.d.ts.map +1 -0
  346. package/dist-types/exports/input-stepper-suites.d.ts +7 -2
  347. package/dist-types/exports/input-stepper-suites.d.ts.map +1 -1
  348. package/dist-types/exports/input-test-suites.d.ts +2 -0
  349. package/dist-types/exports/input-test-suites.d.ts.map +1 -0
  350. package/dist-types/exports/menu-test-suites.d.ts.map +1 -1
  351. package/dist-types/exports/pagination-test-suites.d.ts +2 -0
  352. package/dist-types/exports/pagination-test-suites.d.ts.map +1 -0
  353. package/dist-types/exports/progress-indicator-test-suites.d.ts +2 -0
  354. package/dist-types/exports/progress-indicator-test-suites.d.ts.map +1 -0
  355. package/dist-types/exports/radio-group-test-suites.d.ts +3 -0
  356. package/dist-types/exports/radio-group-test-suites.d.ts.map +1 -0
  357. package/dist-types/exports/select-rich-test-suites.d.ts +4 -0
  358. package/dist-types/exports/select-rich-test-suites.d.ts.map +1 -0
  359. package/dist-types/exports/select-test-suites.d.ts +2 -0
  360. package/dist-types/exports/select-test-suites.d.ts.map +1 -0
  361. package/dist-types/exports/steps-test-suites.d.ts +3 -0
  362. package/dist-types/exports/steps-test-suites.d.ts.map +1 -0
  363. package/dist-types/exports/switch-test-suites.d.ts +2 -0
  364. package/dist-types/exports/switch-test-suites.d.ts.map +1 -0
  365. package/dist-types/exports/tabs-test-suites.d.ts +2 -0
  366. package/dist-types/exports/tabs-test-suites.d.ts.map +1 -0
  367. package/dist-types/exports/textarea-test-suites.d.ts +2 -0
  368. package/dist-types/exports/textarea-test-suites.d.ts.map +1 -0
  369. package/dist-types/exports/tooltip-test-suites.d.ts +2 -0
  370. package/dist-types/exports/tooltip-test-suites.d.ts.map +1 -0
  371. package/dist-types/exports/types/test-suites.d.ts +4 -0
  372. package/dist-types/exports/types/test-suites.d.ts.map +1 -0
  373. package/dist-types/tsconfig.tsbuildinfo +1 -1
  374. package/drawer-test-suites.js +1 -0
  375. package/exports/accordion-test-suites.js +2 -0
  376. package/exports/collapsible-test-suites.js +1 -0
  377. package/exports/combobox-test-suites.js +2 -0
  378. package/exports/dialog-test-suites.js +2 -0
  379. package/exports/drawer-test-suites.js +1 -0
  380. package/exports/form-test-suites.js +2 -0
  381. package/exports/icon-test-suites.js +2 -0
  382. package/exports/input-amount-test-suites.js +2 -0
  383. package/exports/input-date-test-suites.js +2 -0
  384. package/exports/input-email-test-suites.js +2 -0
  385. package/exports/input-file-test-suites.js +2 -0
  386. package/exports/input-iban-test-suites.js +2 -0
  387. package/exports/input-range-test-suites.js +2 -0
  388. package/exports/input-stepper-suites.js +18 -4
  389. package/exports/input-test-suites.js +2 -0
  390. package/exports/menu-test-suites.js +3 -0
  391. package/exports/pagination-test-suites.js +1 -0
  392. package/exports/progress-indicator-test-suites.js +2 -0
  393. package/exports/radio-group-test-suites.js +3 -0
  394. package/exports/select-rich-test-suites.js +4 -0
  395. package/exports/select-test-suites.js +1 -0
  396. package/exports/steps-test-suites.js +3 -0
  397. package/exports/switch-test-suites.js +2 -0
  398. package/exports/tabs-test-suites.js +2 -0
  399. package/exports/textarea-test-suites.js +2 -0
  400. package/exports/tooltip-test-suites.js +2 -0
  401. package/exports/types/test-suites.ts +3 -0
  402. package/form-test-suites.js +2 -0
  403. package/generated/awesome-phonenumber/provenance.json +1 -1
  404. package/icon-test-suites.js +2 -0
  405. package/input-amount-test-suites.js +2 -0
  406. package/input-date-test-suites.js +2 -0
  407. package/input-email-test-suites.js +2 -0
  408. package/input-file-test-suites.js +2 -0
  409. package/input-iban-test-suites.js +2 -0
  410. package/input-range-test-suites.js +2 -0
  411. package/input-stepper-suites.js +18 -4
  412. package/input-test-suites.js +2 -0
  413. package/menu-test-suites.js +3 -0
  414. package/package.json +4 -1
  415. package/pagination-test-suites.js +1 -0
  416. package/progress-indicator-test-suites.js +2 -0
  417. package/radio-group-test-suites.js +3 -0
  418. package/select-rich-test-suites.js +4 -0
  419. package/select-test-suites.js +1 -0
  420. package/steps-test-suites.js +3 -0
  421. package/switch-test-suites.js +2 -0
  422. package/tabs-test-suites.js +2 -0
  423. package/textarea-test-suites.js +2 -0
  424. package/tooltip-test-suites.js +2 -0
  425. package/vscode.html-custom-data.json +55 -0
  426. package/web-types.json +219 -1
  427. package/components/button/test/demos.screenshots-test.js +0 -100
  428. package/components/calendar/test/demos.screenshots-test.js +0 -118
  429. package/components/input-file/test/lion-selected-file-list.test.js +0 -199
  430. package/components/select-rich/test/demos.screenshots-test.js +0 -168
  431. package/components/switch/test/lion-switch-button.test.js +0 -204
  432. package/dist-types/components/button/test/demos.screenshots-test.d.ts +0 -2
  433. package/dist-types/components/button/test/demos.screenshots-test.d.ts.map +0 -1
  434. package/dist-types/components/calendar/test/demos.screenshots-test.d.ts +0 -2
  435. package/dist-types/components/calendar/test/demos.screenshots-test.d.ts.map +0 -1
  436. package/dist-types/components/input-file/test/lion-selected-file-list.test.d.ts +0 -5
  437. package/dist-types/components/input-file/test/lion-selected-file-list.test.d.ts.map +0 -1
  438. package/dist-types/components/select-rich/test/demos.screenshots-test.d.ts +0 -2
  439. package/dist-types/components/select-rich/test/demos.screenshots-test.d.ts.map +0 -1
  440. package/dist-types/components/switch/test/lion-switch-button.test.d.ts +0 -4
  441. package/dist-types/components/switch/test/lion-switch-button.test.d.ts.map +0 -1
  442. package/docs/components/accordion/api-table.md +0 -53
  443. package/docs/components/accordion/index.md +0 -13
  444. package/docs/components/accordion/overview.md +0 -141
  445. package/docs/components/accordion/reference.md +0 -59
  446. package/docs/components/accordion/use-cases.md +0 -303
  447. package/docs/components/button/api-table.md +0 -84
  448. package/docs/components/button/assets/bootstrap-button.js +0 -245
  449. package/docs/components/button/examples.md +0 -42
  450. package/docs/components/button/extensions.md +0 -42
  451. package/docs/components/button/index.md +0 -13
  452. package/docs/components/button/overview.md +0 -42
  453. package/docs/components/button/src/icon.svg.js +0 -5
  454. package/docs/components/button/use-cases.md +0 -121
  455. package/docs/components/calendar/api-table.md +0 -56
  456. package/docs/components/calendar/index.md +0 -13
  457. package/docs/components/calendar/overview.md +0 -61
  458. package/docs/components/calendar/use-cases.md +0 -243
  459. package/docs/components/checkbox-group/api-table.md +0 -117
  460. package/docs/components/checkbox-group/index.md +0 -13
  461. package/docs/components/checkbox-group/overview.md +0 -51
  462. package/docs/components/checkbox-group/use-cases.md +0 -192
  463. package/docs/components/collapsible/api-table.md +0 -55
  464. package/docs/components/collapsible/assets/CustomCollapsible.js +0 -117
  465. package/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js +0 -41
  466. package/docs/components/collapsible/examples.md +0 -95
  467. package/docs/components/collapsible/index.md +0 -13
  468. package/docs/components/collapsible/overview.md +0 -51
  469. package/docs/components/collapsible/use-cases.md +0 -91
  470. package/docs/components/combobox/api-table.md +0 -122
  471. package/docs/components/combobox/extensions.md +0 -174
  472. package/docs/components/combobox/index.md +0 -13
  473. package/docs/components/combobox/overview.md +0 -74
  474. package/docs/components/combobox/src/LinkMixin.js +0 -60
  475. package/docs/components/combobox/src/demo-selection-display.js +0 -164
  476. package/docs/components/combobox/src/gh-combobox/gh-button.js +0 -71
  477. package/docs/components/combobox/src/gh-combobox/gh-combobox.js +0 -515
  478. package/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js +0 -9
  479. package/docs/components/combobox/src/google-combobox/assets/google-search-icon.js +0 -9
  480. package/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js +0 -19
  481. package/docs/components/combobox/src/google-combobox/google-combobox.js +0 -461
  482. package/docs/components/combobox/src/lazyRender.js +0 -29
  483. package/docs/components/combobox/src/levenshtein.js +0 -95
  484. package/docs/components/combobox/src/md-combobox/MdFieldMixin.js +0 -345
  485. package/docs/components/combobox/src/md-combobox/md-combobox.js +0 -91
  486. package/docs/components/combobox/src/md-combobox/md-input.js +0 -5
  487. package/docs/components/combobox/src/md-combobox/style/load-roboto.js +0 -6
  488. package/docs/components/combobox/src/md-combobox/style/md-ripple.js +0 -82
  489. package/docs/components/combobox/src/wa-combobox/wa-combobox.js +0 -375
  490. package/docs/components/combobox/use-cases.md +0 -561
  491. package/docs/components/dialog/api-table.md +0 -61
  492. package/docs/components/dialog/index.md +0 -13
  493. package/docs/components/dialog/overview.md +0 -71
  494. package/docs/components/dialog/src/demoStyle.js +0 -57
  495. package/docs/components/dialog/src/external-dialog.js +0 -32
  496. package/docs/components/dialog/src/slots-dialog-content.js +0 -32
  497. package/docs/components/dialog/src/styled-dialog-content.js +0 -38
  498. package/docs/components/dialog/use-cases.md +0 -199
  499. package/docs/components/drawer/api-table.md +0 -64
  500. package/docs/components/drawer/index.md +0 -13
  501. package/docs/components/drawer/overview.md +0 -80
  502. package/docs/components/drawer/src/demoStyle.js +0 -71
  503. package/docs/components/drawer/use-cases.md +0 -206
  504. package/docs/components/fieldset/api-table.md +0 -24
  505. package/docs/components/fieldset/index.md +0 -13
  506. package/docs/components/fieldset/overview.md +0 -61
  507. package/docs/components/fieldset/use-cases.md +0 -203
  508. package/docs/components/form/api-table.md +0 -12
  509. package/docs/components/form/index.md +0 -13
  510. package/docs/components/form/overview.md +0 -66
  511. package/docs/components/form/use-cases.md +0 -230
  512. package/docs/components/icon/api-table.md +0 -41
  513. package/docs/components/icon/assets/bugs/bug01.svg.js +0 -2
  514. package/docs/components/icon/assets/bugs/bug02.svg.js +0 -2
  515. package/docs/components/icon/assets/bugs/bug05.svg.js +0 -2
  516. package/docs/components/icon/assets/bugs/bug06.svg.js +0 -2
  517. package/docs/components/icon/assets/bugs/bug08.svg.js +0 -2
  518. package/docs/components/icon/assets/bugs/bug12.svg.js +0 -2
  519. package/docs/components/icon/assets/bugs/bug19.svg.js +0 -2
  520. package/docs/components/icon/assets/bugs/bug23.svg.js +0 -2
  521. package/docs/components/icon/assets/bugs/bug24.svg.js +0 -2
  522. package/docs/components/icon/assets/iconset-bugs.js +0 -11
  523. package/docs/components/icon/assets/iconset-misc.js +0 -3
  524. package/docs/components/icon/assets/iconset-space.js +0 -31
  525. package/docs/components/icon/assets/misc/arrowLeft.svg.js +0 -6
  526. package/docs/components/icon/assets/space/aliens-spaceship.svg.js +0 -2
  527. package/docs/components/icon/assets/space/meteor.svg.js +0 -2
  528. package/docs/components/icon/assets/space/moon-flag.svg.js +0 -2
  529. package/docs/components/icon/assets/space/moon.svg.js +0 -2
  530. package/docs/components/icon/assets/space/night.svg.js +0 -2
  531. package/docs/components/icon/assets/space/orbit.svg.js +0 -2
  532. package/docs/components/icon/assets/space/planet.svg.js +0 -2
  533. package/docs/components/icon/assets/space/robot.svg.js +0 -2
  534. package/docs/components/icon/assets/space/rocket.svg.js +0 -2
  535. package/docs/components/icon/assets/space/satellite.svg.js +0 -2
  536. package/docs/components/icon/assets/space/signal.svg.js +0 -2
  537. package/docs/components/icon/assets/space/space-helmet.svg.js +0 -2
  538. package/docs/components/icon/assets/space/sun.svg.js +0 -2
  539. package/docs/components/icon/assets/space/telescope.svg.js +0 -2
  540. package/docs/components/icon/index.md +0 -13
  541. package/docs/components/icon/overview.md +0 -52
  542. package/docs/components/icon/use-cases.md +0 -92
  543. package/docs/components/index.md +0 -17
  544. package/docs/components/input/api-table.md +0 -52
  545. package/docs/components/input/index.md +0 -13
  546. package/docs/components/input/overview.md +0 -48
  547. package/docs/components/input/use-cases.md +0 -90
  548. package/docs/components/input-amount/api-table.md +0 -66
  549. package/docs/components/input-amount/index.md +0 -13
  550. package/docs/components/input-amount/overview.md +0 -61
  551. package/docs/components/input-amount/use-cases.md +0 -147
  552. package/docs/components/input-amount-dropdown/api-table.md +0 -87
  553. package/docs/components/input-amount-dropdown/index.md +0 -13
  554. package/docs/components/input-amount-dropdown/use-cases.md +0 -103
  555. package/docs/components/input-date/api-table.md +0 -58
  556. package/docs/components/input-date/index.md +0 -13
  557. package/docs/components/input-date/overview.md +0 -51
  558. package/docs/components/input-date/use-cases.md +0 -96
  559. package/docs/components/input-datepicker/api-table.md +0 -99
  560. package/docs/components/input-datepicker/index.md +0 -13
  561. package/docs/components/input-datepicker/overview.md +0 -54
  562. package/docs/components/input-datepicker/use-cases.md +0 -117
  563. package/docs/components/input-email/api-table.md +0 -53
  564. package/docs/components/input-email/index.md +0 -13
  565. package/docs/components/input-email/overview.md +0 -44
  566. package/docs/components/input-email/use-cases.md +0 -60
  567. package/docs/components/input-file/api-table.md +0 -157
  568. package/docs/components/input-file/index.md +0 -13
  569. package/docs/components/input-file/overview.md +0 -44
  570. package/docs/components/input-file/use-cases.md +0 -454
  571. package/docs/components/input-iban/api-table.md +0 -54
  572. package/docs/components/input-iban/index.md +0 -13
  573. package/docs/components/input-iban/overview.md +0 -49
  574. package/docs/components/input-iban/use-cases.md +0 -114
  575. package/docs/components/input-range/api-table.md +0 -71
  576. package/docs/components/input-range/index.md +0 -13
  577. package/docs/components/input-range/overview.md +0 -44
  578. package/docs/components/input-range/use-cases.md +0 -126
  579. package/docs/components/input-stepper/api-table.md +0 -74
  580. package/docs/components/input-stepper/index.md +0 -13
  581. package/docs/components/input-stepper/overview.md +0 -48
  582. package/docs/components/input-stepper/use-cases.md +0 -155
  583. package/docs/components/input-tel/api-table.md +0 -77
  584. package/docs/components/input-tel/index.md +0 -13
  585. package/docs/components/input-tel/overview.md +0 -74
  586. package/docs/components/input-tel/src/h-region-code-table.js +0 -109
  587. package/docs/components/input-tel/use-cases.md +0 -319
  588. package/docs/components/input-tel-dropdown/api-table.md +0 -85
  589. package/docs/components/input-tel-dropdown/extensions.md +0 -44
  590. package/docs/components/input-tel-dropdown/index.md +0 -13
  591. package/docs/components/input-tel-dropdown/overview.md +0 -50
  592. package/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js +0 -138
  593. package/docs/components/input-tel-dropdown/use-cases.md +0 -171
  594. package/docs/components/listbox/api-table.md +0 -65
  595. package/docs/components/listbox/index.md +0 -13
  596. package/docs/components/listbox/overview.md +0 -54
  597. package/docs/components/listbox/src/listboxData.js +0 -131
  598. package/docs/components/listbox/use-cases.md +0 -154
  599. package/docs/components/menu/api-table.md +0 -44
  600. package/docs/components/menu/applyMenuDemoStyles.js +0 -173
  601. package/docs/components/menu/extensions.md +0 -262
  602. package/docs/components/menu/index.md +0 -13
  603. package/docs/components/menu/migration.md +0 -129
  604. package/docs/components/menu/overview.md +0 -448
  605. package/docs/components/menu/src/DemoNavigationBar.js +0 -441
  606. package/docs/components/menu/src/DemoSpinButton.js +0 -215
  607. package/docs/components/menu/src/DemoToolbar.js +0 -101
  608. package/docs/components/menu/src/DemoTree.js +0 -55
  609. package/docs/components/menu/src/navigation-bar-types.js +0 -41
  610. package/docs/components/menu/use-cases.md +0 -74
  611. package/docs/components/pagination/api-table.md +0 -45
  612. package/docs/components/pagination/index.md +0 -13
  613. package/docs/components/pagination/overview.md +0 -41
  614. package/docs/components/pagination/use-cases.md +0 -113
  615. package/docs/components/progress-indicator/api-table.md +0 -48
  616. package/docs/components/progress-indicator/assets/my-determinate-progress-bar.js +0 -30
  617. package/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js +0 -55
  618. package/docs/components/progress-indicator/examples.md +0 -137
  619. package/docs/components/progress-indicator/index.md +0 -13
  620. package/docs/components/progress-indicator/overview.md +0 -48
  621. package/docs/components/radio-group/api-table.md +0 -63
  622. package/docs/components/radio-group/index.md +0 -13
  623. package/docs/components/radio-group/overview.md +0 -58
  624. package/docs/components/radio-group/use-cases.md +0 -146
  625. package/docs/components/select/api-table.md +0 -51
  626. package/docs/components/select/index.md +0 -13
  627. package/docs/components/select/overview.md +0 -56
  628. package/docs/components/select/use-cases.md +0 -128
  629. package/docs/components/select-rich/api-table.md +0 -123
  630. package/docs/components/select-rich/examples.md +0 -43
  631. package/docs/components/select-rich/index.md +0 -13
  632. package/docs/components/select-rich/overview.md +0 -55
  633. package/docs/components/select-rich/src/flagStyles.js +0 -1250
  634. package/docs/components/select-rich/src/intl-select-rich.js +0 -194
  635. package/docs/components/select-rich/src/regionMetaList.js +0 -1717
  636. package/docs/components/select-rich/use-cases.md +0 -387
  637. package/docs/components/steps/api-table.md +0 -92
  638. package/docs/components/steps/index.md +0 -13
  639. package/docs/components/steps/overview.md +0 -77
  640. package/docs/components/steps/use-cases.md +0 -181
  641. package/docs/components/switch/api-table.md +0 -82
  642. package/docs/components/switch/index.md +0 -13
  643. package/docs/components/switch/overview.md +0 -87
  644. package/docs/components/switch/reference.md +0 -51
  645. package/docs/components/switch/use-cases.md +0 -88
  646. package/docs/components/tabs/api-table.md +0 -51
  647. package/docs/components/tabs/examples.md +0 -35
  648. package/docs/components/tabs/index.md +0 -13
  649. package/docs/components/tabs/overview.md +0 -60
  650. package/docs/components/tabs/src/lea-tab-panel.js +0 -26
  651. package/docs/components/tabs/src/lea-tab.js +0 -50
  652. package/docs/components/tabs/src/lea-tabs.js +0 -28
  653. package/docs/components/tabs/use-cases.md +0 -231
  654. package/docs/components/textarea/api-table.md +0 -57
  655. package/docs/components/textarea/index.md +0 -13
  656. package/docs/components/textarea/overview.md +0 -47
  657. package/docs/components/textarea/use-cases.md +0 -107
  658. package/docs/components/tooltip/api-table.md +0 -62
  659. package/docs/components/tooltip/examples.md +0 -51
  660. package/docs/components/tooltip/index.md +0 -13
  661. package/docs/components/tooltip/overview.md +0 -56
  662. package/docs/components/tooltip/use-cases.md +0 -275
  663. package/docs/fundamentals/index.md +0 -19
  664. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md +0 -13
  665. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md +0 -246
  666. package/docs/fundamentals/node-tools/index.md +0 -11
  667. package/docs/fundamentals/node-tools/providence-analytics/index.md +0 -13
  668. package/docs/fundamentals/node-tools/providence-analytics/overview.md +0 -108
  669. package/docs/fundamentals/node-tools/publish-docs/index.md +0 -13
  670. package/docs/fundamentals/node-tools/publish-docs/overview.md +0 -149
  671. package/docs/fundamentals/node-tools/remark-extend/index.md +0 -13
  672. package/docs/fundamentals/node-tools/remark-extend/overview.md +0 -287
  673. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md +0 -13
  674. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +0 -298
  675. package/docs/fundamentals/rationales/TypeScript.md +0 -123
  676. package/docs/fundamentals/rationales/accessibility.md +0 -40
  677. package/docs/fundamentals/rationales/index.md +0 -11
  678. package/docs/fundamentals/rationales/side-effects.md +0 -215
  679. package/docs/fundamentals/rationales/versioning.md +0 -47
  680. package/docs/fundamentals/systems/core/SlotMixin.md +0 -168
  681. package/docs/fundamentals/systems/core/api-table.md +0 -43
  682. package/docs/fundamentals/systems/core/index.md +0 -15
  683. package/docs/fundamentals/systems/core/overview.md +0 -98
  684. package/docs/fundamentals/systems/form/api-table.md +0 -40
  685. package/docs/fundamentals/systems/form/assets/h-output.js +0 -156
  686. package/docs/fundamentals/systems/form/formatting-and-parsing.md +0 -258
  687. package/docs/fundamentals/systems/form/index.md +0 -15
  688. package/docs/fundamentals/systems/form/interaction-states.md +0 -195
  689. package/docs/fundamentals/systems/form/model-value.md +0 -57
  690. package/docs/fundamentals/systems/form/overview.md +0 -95
  691. package/docs/fundamentals/systems/form/styling.md +0 -92
  692. package/docs/fundamentals/systems/form/use-cases.md +0 -187
  693. package/docs/fundamentals/systems/form/validate.md +0 -985
  694. package/docs/fundamentals/systems/icon/index.md +0 -15
  695. package/docs/fundamentals/systems/icon/overview.md +0 -137
  696. package/docs/fundamentals/systems/index.md +0 -11
  697. package/docs/fundamentals/systems/localize/api-table.md +0 -72
  698. package/docs/fundamentals/systems/localize/assets/all-locales.js +0 -437
  699. package/docs/fundamentals/systems/localize/assets/en-AU.js +0 -6
  700. package/docs/fundamentals/systems/localize/assets/en-GB.js +0 -6
  701. package/docs/fundamentals/systems/localize/assets/en-US.js +0 -6
  702. package/docs/fundamentals/systems/localize/assets/en.js +0 -4
  703. package/docs/fundamentals/systems/localize/assets/nl-BE.js +0 -6
  704. package/docs/fundamentals/systems/localize/assets/nl-NL.js +0 -6
  705. package/docs/fundamentals/systems/localize/assets/nl.js +0 -4
  706. package/docs/fundamentals/systems/localize/dates.md +0 -208
  707. package/docs/fundamentals/systems/localize/index.md +0 -15
  708. package/docs/fundamentals/systems/localize/numbers.md +0 -230
  709. package/docs/fundamentals/systems/localize/overview.md +0 -61
  710. package/docs/fundamentals/systems/localize/rationale.md +0 -75
  711. package/docs/fundamentals/systems/localize/text.md +0 -139
  712. package/docs/fundamentals/systems/localize/use-cases.md +0 -334
  713. package/docs/fundamentals/systems/overlays/_configuration-positioning.md +0 -118
  714. package/docs/fundamentals/systems/overlays/_edge-cases.md +0 -149
  715. package/docs/fundamentals/systems/overlays/api-table.md +0 -174
  716. package/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js +0 -23
  717. package/docs/fundamentals/systems/overlays/assets/demo-el-using-overlaymixin.js +0 -104
  718. package/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js +0 -47
  719. package/docs/fundamentals/systems/overlays/assets/demo-overlay-positioning.mjs +0 -537
  720. package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +0 -140
  721. package/docs/fundamentals/systems/overlays/configuration.md +0 -516
  722. package/docs/fundamentals/systems/overlays/index.md +0 -15
  723. package/docs/fundamentals/systems/overlays/overview.md +0 -126
  724. package/docs/fundamentals/systems/overlays/rationale.md +0 -242
  725. package/docs/fundamentals/systems/overlays/use-cases.md +0 -717
  726. package/docs/fundamentals/tools/ajax/index.md +0 -15
  727. package/docs/fundamentals/tools/ajax/overview.md +0 -269
  728. package/docs/fundamentals/tools/ajax/use-cases.md +0 -469
  729. package/docs/fundamentals/tools/helpers/action-logger.md +0 -175
  730. package/docs/fundamentals/tools/helpers/index.md +0 -15
  731. package/docs/fundamentals/tools/helpers/overview.md +0 -43
  732. package/docs/fundamentals/tools/index.md +0 -11
  733. package/docs/fundamentals/tools/singleton-manager/example-complex/demo-app.js +0 -95
  734. package/docs/fundamentals/tools/singleton-manager/example-complex/index.md +0 -34
  735. package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/index.js +0 -30
  736. package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/instance.js +0 -4
  737. package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/page-a.js +0 -35
  738. package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/index.js +0 -30
  739. package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/instance.js +0 -4
  740. package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/page-b.js +0 -49
  741. package/docs/fundamentals/tools/singleton-manager/example-complex/overlayCompatibility.js +0 -69
  742. package/docs/fundamentals/tools/singleton-manager/example-fail/demo-app.js +0 -93
  743. package/docs/fundamentals/tools/singleton-manager/example-fail/index.md +0 -32
  744. package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/index.js +0 -30
  745. package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/instance.js +0 -3
  746. package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-c/page-c.js +0 -34
  747. package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-d/node_modules/overlays/index.js +0 -30
  748. package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-d/node_modules/overlays/instance.js +0 -3
  749. package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-d/page-d.js +0 -34
  750. package/docs/fundamentals/tools/singleton-manager/example-success/demo-app.js +0 -95
  751. package/docs/fundamentals/tools/singleton-manager/example-success/index.md +0 -31
  752. package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/index.js +0 -30
  753. package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/instance.js +0 -4
  754. package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-e/page-e.js +0 -33
  755. package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-f/node_modules/overlays/index.js +0 -30
  756. package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-f/node_modules/overlays/instance.js +0 -4
  757. package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-f/page-f.js +0 -34
  758. package/docs/fundamentals/tools/singleton-manager/example-success/overlayCompatibility.js +0 -23
  759. package/docs/fundamentals/tools/singleton-manager/index.md +0 -15
  760. package/docs/fundamentals/tools/singleton-manager/overview.md +0 -317
  761. package/docs/guides/how-to/create-a-custom-field.md +0 -212
  762. package/docs/guides/how-to/create-a-form.md +0 -101
  763. package/docs/guides/how-to/extend-a-native-input.md +0 -78
  764. package/docs/guides/how-to/get-started.md +0 -116
  765. package/docs/guides/how-to/index.md +0 -25
  766. package/docs/guides/index.md +0 -44
  767. package/docs/guides/principles/definitions-and-terms.md +0 -53
  768. package/docs/guides/principles/index.md +0 -36
  769. package/docs/guides/principles/scoped-elements.md +0 -119
  770. package/docs/guides/principles/styling.md +0 -43
  771. package/docs/guides/principles/subclasser-apis.md +0 -40
@@ -1,1193 +1,2 @@
1
- import { LionSelectInvoker, LionSelectRich } from '@lion/ui/select-rich.js';
2
- import { getSelectRichMembers } from '@lion/ui/select-rich-test-helpers.js';
3
- import { mimicClick } from '@lion/ui/overlays-test-helpers.js';
4
- import { OverlayController } from '@lion/ui/overlays.js';
5
- import { LionOption } from '@lion/ui/listbox.js';
6
- import '@lion/ui/define/lion-select-rich.js';
7
- import '@lion/ui/define/lion-listbox.js';
8
- import '@lion/ui/define/lion-option.js';
9
- import '@lion/ui/define/lion-tabs.js';
10
- import { LitElement, nothing } from 'lit';
11
- import sinon from 'sinon';
12
- import {
13
- fixture as _fixture,
14
- unsafeStatic,
15
- nextFrame,
16
- aTimeout,
17
- defineCE,
18
- expect,
19
- html,
20
- waitUntil,
21
- } from '@open-wc/testing';
22
- import { cache } from 'lit/directives/cache.js';
23
- import { isActiveElement } from '../../core/test-helpers/isActiveElement.js';
24
-
25
- /**
26
- * @typedef {import('../../form-core/types/FormControlMixinTypes.js').FormControlHost} FormControlHost
27
- * @typedef {import('../../listbox/types/ListboxMixinTypes.js').ListboxHost} ListboxHost
28
- * @typedef {import('../../listbox/src/LionOptions.js').LionOptions} LionOptions
29
- * @typedef {import('lit').TemplateResult} TemplateResult
30
- */
31
-
32
- const fixture = /** @type {(arg: TemplateResult) => Promise<LionSelectRich>} */ _fixture;
33
- describe('lion-select-rich', () => {
34
- it('clicking the label should focus the invoker', async () => {
35
- const el = await fixture(html` <lion-select-rich label="foo"> </lion-select-rich> `);
36
- expect(isActiveElement(document.body)).to.be.true;
37
- const { _labelNode, _invokerNode } = getSelectRichMembers(el);
38
- _labelNode.click();
39
- expect(isActiveElement(_invokerNode)).to.be.true;
40
- });
41
- it('has an attribute focused when focused', async () => {
42
- const el = await fixture(html` <lion-select-rich label="foo"> </lion-select-rich> `);
43
- el.focus();
44
- await el.updateComplete;
45
- expect(el.hasAttribute('focused')).to.be.true;
46
- el.blur();
47
- await el.updateComplete;
48
- expect(el.hasAttribute('focused')).to.be.false;
49
- });
50
- it('checks the first enabled option', async () => {
51
- const el = await fixture(html`
52
- <lion-select-rich>
53
- <lion-option .choiceValue=${'Red'}></lion-option>
54
- <lion-option .choiceValue=${'Hotpink'}></lion-option>
55
- <lion-option .choiceValue=${'Blue'}></lion-option>
56
- </lion-select-rich>
57
- `);
58
- expect(el.activeIndex).to.equal(0);
59
- expect(el.checkedIndex).to.equal(0);
60
- });
61
- it('still has a checked value while disabled', async () => {
62
- const el = await fixture(html`
63
- <lion-select-rich disabled>
64
- <lion-option .choiceValue=${'Red'}>Red</lion-option>
65
- <lion-option .choiceValue=${'Hotpink'}>Hotpink</lion-option>
66
- <lion-option .choiceValue=${'Blue'}>Blue</lion-option>
67
- </lion-select-rich>
68
- `);
69
- expect(el.modelValue).to.equal('Red');
70
- });
71
- it('supports having no default selection initially', async () => {
72
- const el = await fixture(html`
73
- <lion-select-rich id="color" name="color" label="Favorite color" has-no-default-selected>
74
- <lion-option .choiceValue=${'red'}>Red</lion-option>
75
- <lion-option .choiceValue=${'hotpink'}>Hotpink</lion-option>
76
- <lion-option .choiceValue=${'teal'}>Teal</lion-option>
77
- </lion-select-rich>
78
- `);
79
- const { _invokerNode } = getSelectRichMembers(el);
80
- expect(_invokerNode.selectedElement).to.be.undefined;
81
- expect(el.modelValue).to.equal('');
82
- });
83
- describe('Invoker', () => {
84
- it('generates an lion-select-invoker if no invoker is provided', async () => {
85
- const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
86
- const { _invokerNode } = getSelectRichMembers(el);
87
- expect(_invokerNode).to.exist;
88
- expect(_invokerNode).to.be.instanceOf(LionSelectInvoker);
89
- });
90
- it('sets the first option as the selectedElement if no option is checked', async () => {
91
- const el = await fixture(html`
92
- <lion-select-rich name="foo">
93
- <lion-option .choiceValue=${10}>Item 1</lion-option>
94
- <lion-option .choiceValue=${20}>Item 2</lion-option>
95
- </lion-select-rich>
96
- `);
97
- const { _invokerNode } = getSelectRichMembers(el);
98
- const options = el.formElements;
99
- expect(_invokerNode.selectedElement).dom.to.equal(options[0]);
100
- });
101
- it('syncs the selected element to the invoker', async () => {
102
- const el = await fixture(html`
103
- <lion-select-rich name="foo">
104
- <lion-option .choiceValue=${10}>Item 1</lion-option>
105
- <lion-option .choiceValue=${20} checked>Item 2</lion-option>
106
- </lion-select-rich>
107
- `);
108
- const { _invokerNode } = getSelectRichMembers(el);
109
- const options = el.querySelectorAll('lion-option');
110
- expect(_invokerNode.selectedElement).dom.to.equal(options[1]);
111
- el.checkedIndex = 0;
112
- await el.updateComplete;
113
- expect(_invokerNode.selectedElement).dom.to.equal(options[0]);
114
- });
115
- it('delegates readonly to the invoker', async () => {
116
- const el = await fixture(html`
117
- <lion-select-rich readonly>
118
- <lion-option .choiceValue=${10}>Item 1</lion-option>
119
- <lion-option .choiceValue=${20}>Item 2</lion-option>
120
- </lion-select-rich>
121
- `);
122
- const { _invokerNode } = getSelectRichMembers(el);
123
- expect(el.hasAttribute('readonly')).to.be.true;
124
- expect(_invokerNode.hasAttribute('readonly')).to.be.true;
125
- });
126
- it('delegates singleOption to the invoker', async () => {
127
- const el = await fixture(html`
128
- <lion-select-rich>
129
- <lion-option .choiceValue=${10}>Item 1</lion-option>
130
- </lion-select-rich>
131
- `);
132
- const { _invokerNode } = getSelectRichMembers(el);
133
- expect(el.singleOption).to.be.true;
134
- expect(_invokerNode.hasAttribute('single-option')).to.be.true;
135
- });
136
- it('sets and removes the button role and aria attributes on change of singleOption', async () => {
137
- const el = await fixture(html`
138
- <lion-select-rich>
139
- <lion-option .choiceValue=${10}>Item 1</lion-option>
140
- <lion-option .choiceValue=${20}>Item 2</lion-option>
141
- </lion-select-rich>
142
- `);
143
- const { _invokerNode } = getSelectRichMembers(el);
144
- expect(_invokerNode.hasAttribute('role')).to.be.true;
145
- expect(_invokerNode.hasAttribute('aria-haspopup')).to.be.true;
146
- expect(_invokerNode.hasAttribute('aria-expanded')).to.be.true;
147
- el.singleOption = true;
148
- await el.updateComplete;
149
- expect(_invokerNode.hasAttribute('role')).to.be.false;
150
- expect(_invokerNode.hasAttribute('aria-haspopup')).to.be.false;
151
- expect(_invokerNode.hasAttribute('aria-expanded')).to.be.false;
152
- el.singleOption = false;
153
- await el.updateComplete;
154
- expect(_invokerNode.hasAttribute('role')).to.be.true;
155
- expect(_invokerNode.hasAttribute('aria-haspopup')).to.be.true;
156
- expect(_invokerNode.hasAttribute('aria-expanded')).to.be.true;
157
- });
158
- it('updates the invoker when the selected element is the same but the modelValue was updated asynchronously', async () => {
159
- const tagString = defineCE(
160
- class LionCustomOption extends LionOption {
161
- render() {
162
- return html`${this.modelValue.value}`;
163
- }
164
- createRenderRoot() {
165
- return this;
166
- }
167
- },
168
- );
169
- const tag = unsafeStatic(tagString);
170
- const firstOption =
171
- /** @type {LionOption} */
172
- await _fixture(html`<${tag} checked .choiceValue=${10}></${tag}>`);
173
- const el = await fixture(html`
174
- <lion-select-rich>
175
- ${firstOption}
176
- <${tag} .choiceValue=${20}></${tag}>
177
- </lion-select-rich>
178
- `);
179
- const { _invokerNode } = getSelectRichMembers(el);
180
- const firstChild =
181
- /** @type {HTMLElement} */
182
- /** @type {ShadowRoot} */ _invokerNode.shadowRoot.firstElementChild;
183
- expect(firstChild.textContent).to.equal('10');
184
- firstOption.modelValue = {
185
- value: 30,
186
- checked: true,
187
- };
188
- await el.updateComplete;
189
- expect(firstChild.textContent).to.equal('30');
190
- });
191
-
192
- // FIXME: wrong values in safari/webkit even though this passes in the "real" debug browsers
193
- it.skip('inherits the content width including arrow width', async () => {
194
- const el = await fixture(html`
195
- <lion-select-rich>
196
- <lion-option .choiceValue=${10}>Item 1</lion-option>
197
- <lion-option .choiceValue=${10}>Item 2 with long label</lion-option>
198
- </lion-select-rich>
199
- `);
200
- el.opened = true;
201
- const options = el.formElements;
202
- await el.updateComplete;
203
- const { _invokerNode, _inputNode } = getSelectRichMembers(el);
204
- expect(_invokerNode.clientWidth).to.equal(options[1].clientWidth);
205
- const newOption = /** @type {LionOption} */ document.createElement('lion-option');
206
- newOption.choiceValue = 30;
207
- newOption.textContent = '30 with longer label';
208
- _inputNode.appendChild(newOption);
209
- await el.updateComplete;
210
- expect(_invokerNode.clientWidth).to.equal(options[2].clientWidth);
211
- _inputNode.removeChild(newOption);
212
- await el.updateComplete;
213
- expect(_invokerNode.clientWidth).to.equal(options[1].clientWidth);
214
- });
215
- });
216
- describe('overlay', () => {
217
- it('should be closed by default', async () => {
218
- const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
219
- expect(el.opened).to.be.false;
220
- });
221
- it('shows/hides the listbox via opened attribute', async () => {
222
- const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
223
- const { _overlayCtrl } = getSelectRichMembers(el);
224
- el.opened = true;
225
- await el.updateComplete;
226
- expect(_overlayCtrl.isShown).to.be.true;
227
- el.opened = false;
228
- await el.updateComplete;
229
- await el.updateComplete; // safari takes a little longer
230
- expect(_overlayCtrl.isShown).to.be.false;
231
- });
232
- it('syncs opened state with overlay shown', async () => {
233
- const el = await fixture(html` <lion-select-rich .opened=${true}></lion-select-rich> `);
234
- const outerEl = /** @type {HTMLButtonElement} */ await _fixture('<button>somewhere</button>');
235
- expect(el.opened).to.be.true;
236
- mimicClick(outerEl);
237
- await aTimeout(0);
238
- expect(el.opened).to.be.false;
239
- });
240
- it('will focus the listbox on open and invoker on close', async () => {
241
- const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
242
- const { _overlayCtrl, _listboxNode, _invokerNode } = getSelectRichMembers(el);
243
- await _overlayCtrl.show();
244
- await el.updateComplete;
245
- expect(isActiveElement(_listboxNode)).to.be.true;
246
- expect(isActiveElement(_invokerNode)).to.be.false;
247
- el.opened = false;
248
- await el.updateComplete;
249
- await el.updateComplete; // safari takes a little longer
250
- expect(isActiveElement(_listboxNode)).to.be.false;
251
- expect(isActiveElement(_invokerNode)).to.be.true;
252
- });
253
- it('opens the listbox with checked option as active', async () => {
254
- const el = await fixture(html`
255
- <lion-select-rich>
256
- <lion-option .choiceValue=${10}>Item 1</lion-option>
257
- <lion-option .choiceValue=${20} checked>Item 2</lion-option>
258
- </lion-select-rich>
259
- `);
260
- const { _overlayCtrl } = getSelectRichMembers(el);
261
- await _overlayCtrl.show();
262
- await el.updateComplete;
263
- const options = el.formElements;
264
- expect(options[1].active).to.be.true;
265
- expect(options[1].checked).to.be.true;
266
- });
267
- it('stays closed on click if it is disabled or readonly or has a single option', async () => {
268
- const elReadOnly = await fixture(html`
269
- <lion-select-rich readonly>
270
- <lion-option .choiceValue=${10}>Item 1</lion-option>
271
- <lion-option .choiceValue=${20} checked>Item 2</lion-option>
272
- </lion-select-rich>
273
- `);
274
- const { _invokerNode: _invokerNodeReadOnly } = getSelectRichMembers(elReadOnly);
275
- const elDisabled = await fixture(html`
276
- <lion-select-rich disabled>
277
- <lion-option .choiceValue=${10}>Item 1</lion-option>
278
- <lion-option .choiceValue=${20} checked>Item 2</lion-option>
279
- </lion-select-rich>
280
- `);
281
- const { _invokerNode: _invokerNodeDisabled } = getSelectRichMembers(elDisabled);
282
- const elSingleoption = await fixture(html`
283
- <lion-select-rich>
284
- <lion-option .choiceValue=${10}>Item 1</lion-option>
285
- </lion-select-rich>
286
- `);
287
- const { _invokerNode: _invokerNodeSingleOption } = getSelectRichMembers(elSingleoption);
288
- _invokerNodeReadOnly.click();
289
- await elReadOnly.updateComplete;
290
- expect(elReadOnly.opened).to.be.false;
291
- _invokerNodeDisabled.click();
292
- await elDisabled.updateComplete;
293
- expect(elDisabled.opened).to.be.false;
294
- _invokerNodeSingleOption.click();
295
- await elSingleoption.updateComplete;
296
- expect(elSingleoption.opened).to.be.false;
297
- });
298
- it('stays closed with [ArrowUp] or [ArrowDown] key in readonly mode or has a single option', async () => {
299
- const elReadOnly = await fixture(html`
300
- <lion-select-rich readonly>
301
- <lion-option .choiceValue=${10}>Item 1</lion-option>
302
- <lion-option .choiceValue=${20} checked>Item 2</lion-option>
303
- </lion-select-rich>
304
- `);
305
- const elSingleOption = await fixture(html`
306
- <lion-select-rich>
307
- <lion-option .choiceValue=${10}>Item 1</lion-option>
308
- </lion-select-rich>
309
- `);
310
- elReadOnly.dispatchEvent(
311
- new KeyboardEvent('keyup', {
312
- key: 'ArrowDown',
313
- }),
314
- );
315
- expect(elReadOnly.opened).to.be.false;
316
- elReadOnly.dispatchEvent(
317
- new KeyboardEvent('keyup', {
318
- key: 'ArrowUp',
319
- }),
320
- );
321
- expect(elReadOnly.opened).to.be.false;
322
- elSingleOption.dispatchEvent(
323
- new KeyboardEvent('keyup', {
324
- key: 'ArrowDown',
325
- }),
326
- );
327
- expect(elSingleOption.opened).to.be.false;
328
- elSingleOption.dispatchEvent(
329
- new KeyboardEvent('keyup', {
330
- key: 'ArrowUp',
331
- }),
332
- );
333
- expect(elSingleOption.opened).to.be.false;
334
- });
335
- it('sets inheritsReferenceWidth to min by default', async () => {
336
- const el = await fixture(html`
337
- <lion-select-rich name="favoriteColor" label="Favorite color">
338
- <lion-option .choiceValue=${'red'}>Red</lion-option>
339
- <lion-option .choiceValue=${'hotpink'}>Hotpink</lion-option>
340
- <lion-option .choiceValue=${'teal'}>Teal</lion-option>
341
- </lion-select-rich>
342
- `);
343
- const { _overlayCtrl } = getSelectRichMembers(el);
344
- expect(_overlayCtrl.inheritsReferenceWidth).to.equal('min');
345
- el.opened = true;
346
- await el.updateComplete;
347
- expect(_overlayCtrl.inheritsReferenceWidth).to.equal('min');
348
- });
349
- it('should override the inheritsWidth prop when no default selected feature is used', async () => {
350
- const el = await fixture(html`
351
- <lion-select-rich name="favoriteColor" label="Favorite color" has-no-default-selected>
352
- <lion-option .choiceValue=${'red'}>Red</lion-option>
353
- <lion-option .choiceValue=${'hotpink'}>Hotpink</lion-option>
354
- <lion-option .choiceValue=${'teal'}>Teal</lion-option>
355
- </lion-select-rich>
356
- `);
357
- const { _overlayCtrl } = getSelectRichMembers(el);
358
-
359
- // The default is min, so we override that behavior here
360
- _overlayCtrl.updateConfig({
361
- inheritsReferenceWidth: 'full',
362
- });
363
- el._initialInheritsReferenceWidth = 'full';
364
- expect(_overlayCtrl.inheritsReferenceWidth).to.equal('full');
365
- el.opened = true;
366
- await el.updateComplete;
367
- // Opens while hasNoDefaultSelected = true, so we expect an override
368
- expect(_overlayCtrl.inheritsReferenceWidth).to.equal('min');
369
-
370
- // Emulate selecting hotpink, it closing, and opening it again
371
- el.modelValue = 'hotpink';
372
- el.opened = false;
373
- await el.updateComplete; // necessary for overlay controller to actually close and re-open
374
- await el.updateComplete; // safari takes a little longer
375
- el.opened = true;
376
- await el.updateComplete;
377
- await el.updateComplete; // safari takes a little longer
378
- await _overlayCtrl._showComplete;
379
-
380
- // noDefaultSelected will now flip the override back to what was the initial reference width
381
- expect(_overlayCtrl.inheritsReferenceWidth).to.equal('full');
382
- });
383
- it('should have singleOption only if there is exactly one option', async () => {
384
- const el = await fixture(html`
385
- <lion-select-rich>
386
- <lion-option .choiceValue=${10}>Item 1</lion-option>
387
- <lion-option .choiceValue=${20}>Item 2</lion-option>
388
- </lion-select-rich>
389
- `);
390
- const { _inputNode, _invokerNode } = getSelectRichMembers(el);
391
- expect(el.singleOption).to.be.false;
392
- expect(_invokerNode.singleOption).to.be.false;
393
- const optionElm = el.formElements[0];
394
- optionElm.parentNode.removeChild(optionElm);
395
- // @ts-ignore [test] we don't need args in this case
396
- el.requestUpdate();
397
- await el.updateComplete;
398
- expect(el.singleOption).to.be.true;
399
- expect(_invokerNode.singleOption).to.be.true;
400
- const newOption = /** @type {LionOption} */ document.createElement('lion-option');
401
- newOption.choiceValue = 30;
402
- _inputNode.appendChild(newOption);
403
- // @ts-ignore [test] allow to not provide args for testing purposes
404
- el.requestUpdate();
405
- await el.updateComplete;
406
- expect(el.singleOption).to.be.false;
407
- expect(_invokerNode.singleOption).to.be.false;
408
- });
409
- it('should have singleOption only if one option and no hasNoDefaultSelected', async () => {
410
- const el = await fixture(html`
411
- <lion-select-rich has-no-default-selected>
412
- <lion-option .choiceValue=${10}>Item 1</lion-option>
413
- </lion-select-rich>
414
- `);
415
- const { _invokerNode } = getSelectRichMembers(el);
416
- expect(el.singleOption).to.be.false;
417
- expect(_invokerNode.singleOption).to.be.false;
418
- });
419
- it('adds/removes the autofocus attribute to/from _listboxNode', async () => {
420
- const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
421
- const { _listboxNode } = getSelectRichMembers(el);
422
- expect(_listboxNode.hasAttribute('autofocus')).to.be.false;
423
- el.opened = true;
424
- await el.updateComplete;
425
- expect(_listboxNode.hasAttribute('autofocus')).to.be.true;
426
- el.opened = false;
427
- await el.updateComplete;
428
- await el.updateComplete; // safari takes a little longer
429
- expect(_listboxNode.hasAttribute('autofocus')).to.be.false;
430
- });
431
- it('adds focus to element with [role=listbox] when trapsKeyboardFocus is true', async () => {
432
- const el = await fixture(html`
433
- <lion-select-rich
434
- .config=${{
435
- trapsKeyboardFocus: true,
436
- }}
437
- ></lion-select-rich>
438
- `);
439
- const { _listboxNode } = getSelectRichMembers(el);
440
- expect(isActiveElement(_listboxNode)).to.be.false;
441
- el.opened = true;
442
- await el.updateComplete;
443
- expect(isActiveElement(_listboxNode)).to.be.true;
444
- el.opened = false;
445
- await el.updateComplete;
446
- await el.updateComplete; // safari takes a little longer
447
- expect(isActiveElement(_listboxNode)).to.be.false;
448
- });
449
- });
450
- describe('interaction-mode', () => {
451
- it('allows to specify an interaction-mode which determines other behaviors', async () => {
452
- const el = await fixture(html`
453
- <lion-select-rich interaction-mode="mac"> </lion-select-rich>
454
- `);
455
- expect(el.interactionMode).to.equal('mac');
456
- });
457
- });
458
- describe('Keyboard navigation', () => {
459
- it('opens the listbox with [Enter] key via click handler', async () => {
460
- const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
461
- const { _invokerNode } = getSelectRichMembers(el);
462
- _invokerNode.click();
463
- await aTimeout(0);
464
- expect(el.opened).to.be.true;
465
- });
466
- it('opens the listbox with [ ](Space) key via click handler', async () => {
467
- const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
468
- const { _invokerNode } = getSelectRichMembers(el);
469
- _invokerNode.click();
470
- await aTimeout(0);
471
- expect(el.opened).to.be.true;
472
- });
473
- it('closes the listbox with [Escape] key once opened', async () => {
474
- const el = await fixture(html` <lion-select-rich opened> </lion-select-rich> `);
475
- const { _listboxNode } = getSelectRichMembers(el);
476
- _listboxNode.dispatchEvent(
477
- new KeyboardEvent('keydown', {
478
- key: 'Escape',
479
- }),
480
- );
481
- expect(el.opened).to.be.false;
482
- });
483
- it('closes the listbox with [Tab] key once opened', async () => {
484
- const el = await fixture(html` <lion-select-rich opened> </lion-select-rich> `);
485
- // tab can only be caught via keydown
486
- const { _listboxNode } = getSelectRichMembers(el);
487
- _listboxNode.dispatchEvent(
488
- new KeyboardEvent('keydown', {
489
- key: 'Tab',
490
- }),
491
- );
492
- expect(el.opened).to.be.false;
493
- });
494
- it('does not close the listbox with [Tab] key once opened when trapsKeyboardFocus is true', async () => {
495
- const el = await fixture(html`
496
- <lion-select-rich
497
- opened
498
- .config=${{
499
- trapsKeyboardFocus: true,
500
- }}
501
- >
502
- </lion-select-rich>
503
- `);
504
- // tab can only be caught via keydown
505
- const { _listboxNode } = getSelectRichMembers(el);
506
- _listboxNode.dispatchEvent(
507
- new KeyboardEvent('keydown', {
508
- key: 'Tab',
509
- }),
510
- );
511
- expect(el.opened).to.be.true;
512
- });
513
- });
514
- describe('Mouse navigation', () => {
515
- it('opens the listbox via click on invoker', async () => {
516
- const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
517
- expect(el.opened).to.be.false;
518
- const { _invokerNode } = getSelectRichMembers(el);
519
- _invokerNode.click();
520
- await nextFrame(); // reflection of click takes some time
521
- expect(el.opened).to.be.true;
522
- });
523
- it('closes the listbox when an option gets clicked', async () => {
524
- const el = await fixture(html`
525
- <lion-select-rich opened>
526
- <lion-option .choiceValue=${10}>Item 1</lion-option>
527
- </lion-select-rich>
528
- `);
529
- expect(el.opened).to.be.true;
530
- el.formElements[0].click();
531
- expect(el.opened).to.be.false;
532
- });
533
- });
534
- describe('Keyboard navigation Windows', () => {
535
- it('closes the listbox with [Enter] key once opened', async () => {
536
- const el = await fixture(html` <lion-select-rich opened> </lion-select-rich> `);
537
- const { _listboxNode } = getSelectRichMembers(el);
538
- _listboxNode.dispatchEvent(
539
- new KeyboardEvent('keydown', {
540
- key: 'Enter',
541
- }),
542
- );
543
- expect(el.opened).to.be.false;
544
- });
545
- });
546
- describe('Keyboard navigation Mac', () => {
547
- it('checks active item and closes the listbox with [Enter] key via click handler once opened', async () => {
548
- const el = await fixture(html`
549
- <lion-select-rich opened interaction-mode="mac">
550
- <lion-option .choiceValue=${10}>Item 1</lion-option>
551
- <lion-option .choiceValue=${20}>Item 2</lion-option>
552
- </lion-select-rich>
553
- `);
554
- const { _listboxNode } = getSelectRichMembers(el);
555
-
556
- // changes active but not checked
557
- el.activeIndex = 1;
558
- expect(el.checkedIndex).to.equal(0);
559
- _listboxNode.dispatchEvent(
560
- new KeyboardEvent('keydown', {
561
- key: 'Enter',
562
- }),
563
- );
564
- expect(el.opened).to.be.false;
565
- expect(el.checkedIndex).to.equal(1);
566
- });
567
- it('opens the listbox with [ArrowUp] key', async () => {
568
- const el = await fixture(html`
569
- <lion-select-rich interaction-mode="mac"> </lion-select-rich>
570
- `);
571
- el.dispatchEvent(
572
- new KeyboardEvent('keyup', {
573
- key: 'ArrowUp',
574
- }),
575
- );
576
- await el.updateComplete;
577
- expect(el.opened).to.be.true;
578
- });
579
- it('opens the listbox with [ArrowDown] key', async () => {
580
- const el = await fixture(html`
581
- <lion-select-rich interaction-mode="mac"> </lion-select-rich>
582
- `);
583
- el.dispatchEvent(
584
- new KeyboardEvent('keyup', {
585
- key: 'ArrowDown',
586
- }),
587
- );
588
- await el.updateComplete;
589
- expect(el.opened).to.be.true;
590
- });
591
- });
592
- describe('Accessibility', () => {
593
- it('has the right references to its inner elements', async () => {
594
- const el = await fixture(html`
595
- <lion-select-rich label="age">
596
- <lion-option .choiceValue=${10}>Item 1</lion-option>
597
- <lion-option .choiceValue=${20}>Item 2</lion-option>
598
- </lion-select-rich>
599
- `);
600
- const { _invokerNode, _feedbackNode, _labelNode, _helpTextNode } = getSelectRichMembers(el);
601
- expect(_invokerNode.getAttribute('aria-labelledby')).to.contain(_labelNode.id);
602
- expect(_invokerNode.getAttribute('aria-labelledby')).to.contain(_invokerNode.id);
603
- expect(_invokerNode.getAttribute('aria-describedby')).to.contain(_helpTextNode.id);
604
- expect(_invokerNode.getAttribute('aria-describedby')).to.contain(_feedbackNode.id);
605
- expect(_invokerNode.getAttribute('aria-haspopup')).to.equal('listbox');
606
- });
607
- it('notifies when the listbox is expanded or not', async () => {
608
- // smoke test for overlay functionality
609
- const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
610
- const { _invokerNode } = getSelectRichMembers(el);
611
- expect(_invokerNode.getAttribute('aria-expanded')).to.equal('false');
612
- el.opened = true;
613
- await el.updateComplete;
614
- await el.updateComplete; // need 2 awaits as overlay.show is an async function
615
-
616
- expect(_invokerNode.getAttribute('aria-expanded')).to.equal('true');
617
- });
618
- });
619
- describe('Use cases', () => {
620
- it('keeps showing the selected item after a new item has been added in the selectedIndex position', async () => {
621
- const mySelectContainerTagString = defineCE(
622
- // @ts-expect-error
623
- class extends LitElement {
624
- static get properties() {
625
- return {
626
- colorList: Array,
627
- };
628
- }
629
- constructor() {
630
- super();
631
- this.colorList = [
632
- {
633
- label: 'Red',
634
- value: 'red',
635
- checked: false,
636
- },
637
- {
638
- label: 'Hotpink',
639
- value: 'hotpink',
640
- checked: true,
641
- },
642
- {
643
- label: 'Teal',
644
- value: 'teal',
645
- checked: false,
646
- },
647
- ];
648
- }
649
- render() {
650
- return html`
651
- <lion-select-rich label="Favorite color" name="color">
652
- ${this.colorList.map(
653
- (colorObj) => html`
654
- <lion-option
655
- .modelValue=${{
656
- value: colorObj.value,
657
- checked: colorObj.checked,
658
- }}
659
- >${colorObj.label}</lion-option
660
- >
661
- `,
662
- )}
663
- </lion-select-rich>
664
- `;
665
- }
666
- },
667
- );
668
- const mySelectContainerTag = unsafeStatic(mySelectContainerTagString);
669
- const el = await fixture(html`
670
- <${mySelectContainerTag}></${mySelectContainerTag}>
671
- `);
672
- const selectRich =
673
- /** @type {LionSelectRich} */
674
- /** @type {ShadowRoot} */ el.shadowRoot.querySelector('lion-select-rich');
675
- const { _invokerNode, _listboxNode } = getSelectRichMembers(selectRich);
676
- expect(selectRich.checkedIndex).to.equal(1);
677
- expect(selectRich.modelValue).to.equal('hotpink');
678
- expect(/** @type {LionOption} */ _invokerNode.selectedElement.value).to.equal('hotpink');
679
- const newOption = /** @type {LionOption} */ document.createElement('lion-option');
680
- newOption.modelValue = {
681
- checked: false,
682
- value: 'blue',
683
- };
684
- newOption.textContent = 'Blue';
685
- const hotpinkEl = _listboxNode.children[1];
686
- hotpinkEl.insertAdjacentElement('beforebegin', newOption);
687
- expect(selectRich.checkedIndex).to.equal(2);
688
- expect(selectRich.modelValue).to.equal('hotpink');
689
- expect(/** @type {LionOption} */ _invokerNode.selectedElement.value).to.equal('hotpink');
690
- });
691
- });
692
- describe('Render from `lit` `cache`', () => {
693
- describe('when `lion-option` is set by `.choiceValue` property with and no `checked` attribute', () => {
694
- it('should display the second option', async () => {
695
- const colours = [
696
- {
697
- label: 'Red',
698
- value: 'red',
699
- },
700
- {
701
- label: 'Blue',
702
- value: 'blue',
703
- },
704
- ];
705
-
706
- /**
707
- * Note, inactive tab content is **destroyed** on every tab switch.
708
- */
709
- class Wrapper extends LitElement {
710
- static properties = {
711
- ...super.properties,
712
- activeTabIndex: {
713
- type: Number,
714
- },
715
- };
716
- constructor() {
717
- super();
718
- this.activeTabIndex = 0;
719
- }
720
-
721
- /**
722
- * @param {number} index
723
- */
724
- changeActiveTabIndex(index) {
725
- this.activeTabIndex = index;
726
- }
727
- render() {
728
- const changeActiveTabIndexRef = this.changeActiveTabIndex.bind(this);
729
- return html`
730
- <lion-tabs>
731
- <button slot="tab" class="first-button" @click=${() => changeActiveTabIndexRef(0)}>
732
- Info
733
- </button>
734
- <p slot="panel">
735
- ${cache(
736
- this.activeTabIndex === 0
737
- ? html`<lion-select-rich name="favoriteColor" label="Favorite color">
738
- ${colours.map(
739
- (colour) =>
740
- html`<lion-option .choiceValue="${colour.value}"
741
- >${colour.label}</lion-option
742
- >`,
743
- )}
744
- </lion-select-rich>`
745
- : nothing,
746
- )}
747
- </p>
748
- <button slot="tab" class="second-button" @click=${() => changeActiveTabIndexRef(1)}>
749
- Work
750
- </button>
751
- <p slot="panel">Info page with lots of information about us.</p>
752
- </lion-tabs>
753
- `;
754
- }
755
- }
756
- const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ _fixture;
757
- const tagString = defineCE(Wrapper);
758
- const wrapperTag = unsafeStatic(tagString);
759
- const wrapperElement =
760
- /** @type {Wrapper} */
761
- await wrapperFixture(html`<${wrapperTag}></${wrapperTag}>`);
762
- await wrapperElement.updateComplete;
763
- const wrapperElementShadowRoot = wrapperElement.shadowRoot;
764
- /**
765
- * @returns { HTMLElement | null | undefined }
766
- */
767
- const getFirstButton = () => wrapperElementShadowRoot?.querySelector('.first-button');
768
- /**
769
- * @returns { HTMLElement | null | undefined }
770
- */
771
- const getSecondButton = () => wrapperElementShadowRoot?.querySelector('.second-button');
772
- /**
773
- * @returns { HTMLElement | null | undefined }
774
- */
775
- const getInvoker = () => wrapperElementShadowRoot?.querySelector('lion-select-invoker');
776
- /**
777
- * @returns { boolean }
778
- */
779
- const isSelectRichRendered = () => !!getInvoker()?.shadowRoot?.childNodes.length;
780
- /**
781
- * @returns { string | undefined }
782
- */
783
- const getSelectedColourLabel = () =>
784
- getInvoker()?.shadowRoot?.querySelector('#content-wrapper')?.textContent?.trim();
785
- const getDialog = () =>
786
- wrapperElementShadowRoot
787
- ?.querySelector('lion-select-rich')
788
- ?.shadowRoot?.querySelector('dialog');
789
- const isDialogVisible = () =>
790
- // @ts-ignore
791
- getDialog()?.checkVisibility() === true &&
792
- getDialog()?.querySelector('#overlay-content-node-wrapper[data-popper-placement]');
793
- await waitUntil(isSelectRichRendered);
794
- getInvoker()?.click();
795
- await waitUntil(isDialogVisible);
796
- // @ts-ignore [dynamic-key-access-in-test]
797
- const optionBlue =
798
- /** @type { HTMLElement | undefined } */ wrapperElementShadowRoot?.querySelectorAll(
799
- 'lion-option',
800
- )?.[1];
801
- optionBlue?.click();
802
- await waitUntil(() => !isDialogVisible());
803
- const selectedColourLabelBeforeTabSwitch = getSelectedColourLabel();
804
- expect(selectedColourLabelBeforeTabSwitch).to.equal('Blue');
805
- getSecondButton()?.click();
806
- await waitUntil(() => !isSelectRichRendered());
807
- getFirstButton()?.click();
808
- await waitUntil(isSelectRichRendered);
809
- const selectedColourAfterTabSwitch = getSelectedColourLabel();
810
- expect(selectedColourAfterTabSwitch).to.equal('Blue');
811
- });
812
- });
813
- describe('when `lion-option` is set by `.choiceValue` property and `checked` attribute', () => {
814
- it('should display the second option', async () => {
815
- const colours = [
816
- {
817
- label: 'Red',
818
- value: 'red',
819
- checked: true,
820
- },
821
- {
822
- label: 'Blue',
823
- value: 'blue',
824
- checked: false,
825
- },
826
- ];
827
-
828
- /**
829
- * Note, inactive tab content is **destroyed** on every tab switch.
830
- */
831
- class Wrapper extends LitElement {
832
- static properties = {
833
- ...super.properties,
834
- activeTabIndex: {
835
- type: Number,
836
- },
837
- };
838
- constructor() {
839
- super();
840
- this.activeTabIndex = 0;
841
- }
842
-
843
- /**
844
- * @param {number} index
845
- */
846
- changeActiveTabIndex(index) {
847
- this.activeTabIndex = index;
848
- }
849
- render() {
850
- const changeActiveTabIndexRef = this.changeActiveTabIndex.bind(this);
851
- return html`
852
- <lion-tabs>
853
- <button slot="tab" class="first-button" @click=${() => changeActiveTabIndexRef(0)}>
854
- Info
855
- </button>
856
- <p slot="panel">
857
- ${cache(
858
- this.activeTabIndex === 0
859
- ? html`<lion-select-rich name="favoriteColor" label="Favorite color">
860
- ${colours.map(
861
- (colour) =>
862
- html`<lion-option
863
- .choiceValue="${colour.value}"
864
- checked="${colour.checked || nothing}"
865
- >${colour.label}</lion-option
866
- >`,
867
- )}
868
- </lion-select-rich>`
869
- : nothing,
870
- )}
871
- </p>
872
- <button slot="tab" class="second-button" @click=${() => changeActiveTabIndexRef(1)}>
873
- Work
874
- </button>
875
- <p slot="panel">Info page with lots of information about us.</p>
876
- </lion-tabs>
877
- `;
878
- }
879
- }
880
- const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ _fixture;
881
- const tagString = defineCE(Wrapper);
882
- const wrapperTag = unsafeStatic(tagString);
883
- const wrapperElement =
884
- /** @type {Wrapper} */
885
- await wrapperFixture(html`<${wrapperTag}></${wrapperTag}>`);
886
- await wrapperElement.updateComplete;
887
- const wrapperElementShadowRoot = wrapperElement.shadowRoot;
888
- /**
889
- * @returns { HTMLElement | null | undefined }
890
- */
891
- const getFirstButton = () => wrapperElementShadowRoot?.querySelector('.first-button');
892
- /**
893
- * @returns { HTMLElement | null | undefined }
894
- */
895
- const getSecondButton = () => wrapperElementShadowRoot?.querySelector('.second-button');
896
- /**
897
- * @returns { HTMLElement | null | undefined }
898
- */
899
- const getInvoker = () => wrapperElementShadowRoot?.querySelector('lion-select-invoker');
900
- /**
901
- * @returns { boolean }
902
- */
903
- const isSelectRichRendered = () => !!getInvoker()?.shadowRoot?.childNodes.length;
904
- /**
905
- * @returns { string | undefined }
906
- */
907
- const getSelectedColourLabel = () =>
908
- getInvoker()?.shadowRoot?.querySelector('#content-wrapper')?.textContent?.trim();
909
- const getDialog = () =>
910
- wrapperElementShadowRoot
911
- ?.querySelector('lion-select-rich')
912
- ?.shadowRoot?.querySelector('dialog');
913
- const isDialogVisible = () =>
914
- // @ts-ignore
915
- getDialog()?.checkVisibility() === true &&
916
- getDialog()?.querySelector('#overlay-content-node-wrapper[data-popper-placement]');
917
- await waitUntil(isSelectRichRendered);
918
- getInvoker()?.click();
919
- await waitUntil(isDialogVisible);
920
- // @ts-ignore [dynamic-key-access-in-test]
921
- const optionBlue =
922
- /** @type { HTMLElement | undefined } */ wrapperElementShadowRoot?.querySelectorAll(
923
- 'lion-option',
924
- )?.[1];
925
- optionBlue?.click();
926
- await waitUntil(() => !isDialogVisible());
927
- const selectedColourLabelBeforeTabSwitch = getSelectedColourLabel();
928
- expect(selectedColourLabelBeforeTabSwitch).to.equal('Blue');
929
- getSecondButton()?.click();
930
- await waitUntil(() => !isSelectRichRendered());
931
- getFirstButton()?.click();
932
- await waitUntil(isSelectRichRendered);
933
- const selectedColourAfterTabSwitch = getSelectedColourLabel();
934
- expect(selectedColourAfterTabSwitch).to.equal('Blue');
935
- });
936
- });
937
- describe('when `lion-option` is set by `.modelValue` property', () => {
938
- it('should display the second option', async () => {
939
- const colours = [
940
- {
941
- label: 'Red',
942
- value: 'red',
943
- checked: true,
944
- },
945
- {
946
- label: 'Blue',
947
- value: 'blue',
948
- checked: false,
949
- },
950
- ];
951
-
952
- /**
953
- * Note, inactive tab content is **destroyed** on every tab switch.
954
- */
955
- class Wrapper extends LitElement {
956
- static properties = {
957
- ...super.properties,
958
- activeTabIndex: {
959
- type: Number,
960
- },
961
- };
962
- constructor() {
963
- super();
964
- this.activeTabIndex = 0;
965
- }
966
-
967
- /**
968
- * @param {number} index
969
- */
970
- changeActiveTabIndex(index) {
971
- this.activeTabIndex = index;
972
- }
973
- render() {
974
- const changeActiveTabIndexRef = this.changeActiveTabIndex.bind(this);
975
- return html`
976
- <lion-tabs>
977
- <button slot="tab" class="first-button" @click=${() => changeActiveTabIndexRef(0)}>
978
- Info
979
- </button>
980
- <p slot="panel">
981
- ${cache(
982
- this.activeTabIndex === 0
983
- ? html`<lion-select-rich name="favoriteColor" label="Favorite color">
984
- ${colours.map(
985
- (colour) =>
986
- html`<lion-option
987
- @model-value-changed=${(/** @type {Event} */ ev) => {
988
- const lionOption = /** @type {LionOption} */ ev.target;
989
- // eslint-disable-next-line no-param-reassign
990
- colour.checked = lionOption.modelValue.checked;
991
- }}
992
- .modelValue=${{
993
- value: colour.value,
994
- checked: colour.checked,
995
- }}
996
- >${colour.label}</lion-option
997
- >`,
998
- )}
999
- </lion-select-rich>`
1000
- : nothing,
1001
- )}
1002
- </p>
1003
- <button slot="tab" class="second-button" @click=${() => changeActiveTabIndexRef(1)}>
1004
- Work
1005
- </button>
1006
- <p slot="panel">Info page with lots of information about us.</p>
1007
- </lion-tabs>
1008
- `;
1009
- }
1010
- }
1011
- const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ _fixture;
1012
- const tagString = defineCE(Wrapper);
1013
- const wrapperTag = unsafeStatic(tagString);
1014
- const wrapperElement =
1015
- /** @type {Wrapper} */
1016
- await wrapperFixture(html`<${wrapperTag}></${wrapperTag}>`);
1017
- await wrapperElement.updateComplete;
1018
- const wrapperElementShadowRoot = wrapperElement.shadowRoot;
1019
- /**
1020
- * @returns { HTMLElement | null | undefined }
1021
- */
1022
- const getFirstButton = () => wrapperElementShadowRoot?.querySelector('.first-button');
1023
- /**
1024
- * @returns { HTMLElement | null | undefined }
1025
- */
1026
- const getSecondButton = () => wrapperElementShadowRoot?.querySelector('.second-button');
1027
- /**
1028
- * @returns { HTMLElement | null | undefined }
1029
- */
1030
- const getInvoker = () => wrapperElementShadowRoot?.querySelector('lion-select-invoker');
1031
- /**
1032
- * @returns { boolean }
1033
- */
1034
- const isSelectRichRendered = () => !!getInvoker()?.shadowRoot?.childNodes.length;
1035
- /**
1036
- * @returns { string | undefined }
1037
- */
1038
- const getSelectedColourLabel = () =>
1039
- getInvoker()?.shadowRoot?.querySelector('#content-wrapper')?.textContent?.trim();
1040
- const getDialog = () =>
1041
- wrapperElementShadowRoot
1042
- ?.querySelector('lion-select-rich')
1043
- ?.shadowRoot?.querySelector('dialog');
1044
- const isDialogVisible = () =>
1045
- // @ts-ignore
1046
- getDialog()?.checkVisibility() === true &&
1047
- getDialog()?.querySelector('#overlay-content-node-wrapper[data-popper-placement]');
1048
- await waitUntil(isSelectRichRendered);
1049
- getInvoker()?.click();
1050
- await waitUntil(isDialogVisible);
1051
- // @ts-ignore [dynamic-key-access-in-test]
1052
- const optionBlue =
1053
- /** @type { HTMLElement | undefined } */ wrapperElementShadowRoot?.querySelectorAll(
1054
- 'lion-option',
1055
- )?.[1];
1056
- optionBlue?.click();
1057
- await waitUntil(() => !isDialogVisible());
1058
- const selectedColourLabelBeforeTabSwitch = getSelectedColourLabel();
1059
- expect(selectedColourLabelBeforeTabSwitch).to.equal('Blue');
1060
- getSecondButton()?.click();
1061
- await waitUntil(() => !isSelectRichRendered());
1062
- getFirstButton()?.click();
1063
- await waitUntil(isSelectRichRendered);
1064
- const selectedColourAfterTabSwitch = getSelectedColourLabel();
1065
- expect(selectedColourAfterTabSwitch).to.equal('Blue');
1066
- });
1067
- });
1068
- });
1069
- describe('Teardown', () => {
1070
- it('does not throw when tearing down before the overlay controller is set up', () => {
1071
- const el = /** @type {LionSelectRich} */ document.createElement('lion-select-rich');
1072
-
1073
- // @ts-expect-error [allow-private] in tests
1074
- expect(() => el._teardownOverlayCtrl()).not.to.throw();
1075
- });
1076
- it('correctly removes event listeners when disconnected from dom', async () => {
1077
- const el = await fixture(html`
1078
- <lion-select-rich label="age">
1079
- <lion-option .choiceValue=${10}>Item 1</lion-option>
1080
- <lion-option .choiceValue=${20}>Item 2</lion-option>
1081
- </lion-select-rich>
1082
- `);
1083
- const { _overlayCtrl } = getSelectRichMembers(el);
1084
- const eventRemoveSpy = sinon.spy(_overlayCtrl, 'removeEventListener');
1085
- el.parentNode?.removeChild(el);
1086
- expect(eventRemoveSpy.callCount).to.equal(0);
1087
- await el.updateComplete;
1088
- expect(eventRemoveSpy.callCount).to.equal(0);
1089
- await el.updateComplete;
1090
- const hasOneInstanceFor = (
1091
- /** @type {string} */ eventName,
1092
- /** @type {any[][]} */ eventsToSearch,
1093
- /** @type {string} */ methodToRemove,
1094
- ) =>
1095
- Boolean(
1096
- eventsToSearch.filter(
1097
- ([eventToSearch, methodToSearch]) =>
1098
- eventToSearch === eventName && methodToSearch === methodToRemove,
1099
- ).length,
1100
- );
1101
-
1102
- // @ts-expect-error [allow-private] in tests
1103
- expect(hasOneInstanceFor('show', eventRemoveSpy.args, el.__overlayOnShow)).to.be.true;
1104
- // @ts-expect-error [allow-private] in tests
1105
- expect(hasOneInstanceFor('before-show', eventRemoveSpy.args, el.__overlayBeforeShow)).to.be
1106
- .true;
1107
- // @ts-expect-error [allow-private] in tests
1108
- expect(hasOneInstanceFor('hide', eventRemoveSpy.args, el.__overlayOnHide)).to.be.true;
1109
- });
1110
- });
1111
- describe('Subclassers', () => {
1112
- it('allows to override the type of overlay', async () => {
1113
- const mySelectTagString = defineCE(
1114
- class MySelect extends LionSelectRich {
1115
- // @ts-expect-error
1116
- _defineOverlay({ invokerNode, contentNode, contentWrapperNode }) {
1117
- const ctrl = new OverlayController({
1118
- placementMode: 'global',
1119
- contentNode,
1120
- contentWrapperNode,
1121
- invokerNode,
1122
- });
1123
- this.addEventListener('switch', () => {
1124
- ctrl.updateConfig({
1125
- placementMode: 'local',
1126
- });
1127
- });
1128
- return ctrl;
1129
- }
1130
- },
1131
- );
1132
- const mySelectTag = unsafeStatic(mySelectTagString);
1133
- const el = await fixture(html`
1134
- <${mySelectTag} label="Favorite color" name="color">
1135
-
1136
- ${Array(2).map(
1137
- (_, i) => html`
1138
- <lion-option
1139
- .modelValue="${{
1140
- value: i,
1141
- checked: false,
1142
- }}"
1143
- >value ${i}</lion-option
1144
- >
1145
- `,
1146
- )}
1147
-
1148
- </${mySelectTag}>
1149
- `);
1150
- await el.updateComplete;
1151
- const { _overlayCtrl } = getSelectRichMembers(el);
1152
- expect(_overlayCtrl.placementMode).to.equal('global');
1153
- el.dispatchEvent(new Event('switch'));
1154
- expect(_overlayCtrl.placementMode).to.equal('local');
1155
- });
1156
- it('supports putting a placeholder template when there is no default selection initially', async () => {
1157
- const invokerTagName = defineCE(
1158
- class extends LionSelectInvoker {
1159
- _noSelectionTemplate() {
1160
- return html` Please select an option.. `;
1161
- }
1162
- },
1163
- );
1164
- // const invokerTag = unsafeStatic(invokerTagName);
1165
-
1166
- const selectTagName = defineCE(
1167
- class extends LionSelectRich {
1168
- get slots() {
1169
- return {
1170
- ...super.slots,
1171
- invoker: () => document.createElement(invokerTagName),
1172
- };
1173
- }
1174
- },
1175
- );
1176
- const selectTag = unsafeStatic(selectTagName);
1177
- const el = await fixture(html`
1178
- <${selectTag} id="color" name="color" label="Favorite color" has-no-default-selected>
1179
-
1180
- <lion-option .choiceValue=${'red'}>Red</lion-option>
1181
- <lion-option .choiceValue=${'hotpink'} disabled>Hotpink</lion-option>
1182
- <lion-option .choiceValue=${'teal'}>Teal</lion-option>
1183
-
1184
- </${selectTag}>
1185
- `);
1186
- const { _invokerNode } = getSelectRichMembers(el);
1187
- expect(
1188
- /** @type {ShadowRoot} */ _invokerNode.shadowRoot.getElementById('content-wrapper'),
1189
- ).dom.to.equal(`<div id="content-wrapper">Please select an option..</div>`);
1190
- expect(el.modelValue).to.equal('');
1191
- });
1192
- });
1193
- });
1
+ import { runSelectRichSuite } from '../test-suites/lion-select-rich.suite.js';
2
+ runSelectRichSuite();