@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,1274 +1,2 @@
1
- import '@lion/ui/define/lion-input-file.js';
2
- import { Required } from '@lion/ui/form-core.js';
3
- import { getInputMembers } from '@lion/ui/input-test-helpers.js';
4
- import { getLocalizeManager } from '@lion/ui/localize-no-side-effects.js';
5
- import { localizeTearDown } from '@lion/ui/localize-test-helpers.js';
6
- import { expect, fixture as _fixture, html, oneEvent, elementUpdated } from '@open-wc/testing';
7
- import sinon from 'sinon';
8
-
9
- /**
10
- * @typedef {import('../src/LionInputFile.js').LionInputFile} LionInputFile
11
- * @typedef {import('../types/input-file.js').InputFile} InputFile
12
- * @typedef {import('../types/input-file.js').SystemFile} SystemFile
13
- * @typedef {import('lit').TemplateResult} TemplateResult
14
- */
15
- const fixture = /** @type {(arg: TemplateResult|string) => Promise<LionInputFile>} */ _fixture;
16
- const filesListChanged = (/** @type {LionInputFile} */ el, /** @type { CustomEvent } */ ev) => {
17
- // eslint-disable-next-line no-param-reassign
18
- el.uploadResponse = [...ev.detail.newFiles];
19
- };
20
- function mimicSelectFile(
21
- /** @type {LionInputFile} */ formControl,
22
- /** @type {InputFile[]} */ mockFiles,
23
- ) {
24
- // @ts-expect-error [allow-protected-in-tests]
25
- formControl._processFiles(mockFiles);
26
- // TODO: doesn't this set latest file.name only to formControl._inputNode.value?
27
- mockFiles.forEach((file) => {
28
- // @ts-expect-error [allow-protected-in-tests]
29
- Object.defineProperty(formControl._inputNode, 'value', {
30
- value: `C:\\fakepath\\${file.name}`,
31
- writable: true,
32
- });
33
- });
34
- // @ts-expect-error [allow-protected-in-tests]
35
- Object.defineProperty(formControl._inputNode, 'files', {
36
- value: mockFiles,
37
- writable: true,
38
- });
39
- // @ts-expect-error [allow-protected-in-tests]
40
- formControl._inputNode.dispatchEvent(
41
- new Event('input', {
42
- bubbles: true,
43
- }),
44
- );
45
- }
46
- const file =
47
- /** @type {InputFile} */
48
- new File(['foo'], 'foo.txt', {
49
- type: 'text/plain',
50
- });
51
- const file2 =
52
- /** @type {InputFile} */
53
- new File(['bar'], 'bar.txt', {
54
- type: 'text/plain',
55
- });
56
- const file3 =
57
- /** @type {InputFile} */
58
- new File(['foo3'], 'foo3.txt', {
59
- type: 'text/plain',
60
- });
61
- const file4 =
62
- /** @type {InputFile} */
63
- new File(['foo4'], 'foo4.txt', {
64
- type: 'text/plain',
65
- });
66
- describe('lion-input-file', () => {
67
- const localizeManager = getLocalizeManager();
68
- afterEach(localizeTearDown);
69
- it('has a type of "file"', async () => {
70
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
71
- // @ts-expect-error [allow-protected-in-tests]
72
- const { _inputNode } = getInputMembers(el);
73
- expect(_inputNode.type).to.equal('file');
74
- });
75
- it('should add single file and dispatch "file-list-changed" event with newly added file', async () => {
76
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
77
- const fileListChangedEventPromise = oneEvent(el, 'file-list-changed');
78
- mimicSelectFile(el, [file]);
79
- const fileListChangedEvent = await fileListChangedEventPromise;
80
- // @ts-expect-error [allow-protected-in-tests]
81
- expect(el._selectedFilesMetaData.length).to.equal(1);
82
- expect(el.uploadResponse.length).to.equal(1);
83
- expect(fileListChangedEvent).to.exist;
84
- expect(fileListChangedEvent.detail.newFiles.length).to.equal(1);
85
- expect(fileListChangedEvent.detail.newFiles[0].name).to.equal('foo.txt');
86
- });
87
- it('should select 1 file', async () => {
88
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
89
- // @ts-expect-error [allow-protected-in-test]
90
- const processedFilesSpy = sinon.spy(el, '_processFiles');
91
-
92
- // @ts-expect-error [allow-protected-in-test]
93
- await el._onChange({
94
- target: {
95
- files: [file],
96
- },
97
- });
98
- expect(processedFilesSpy).have.been.calledOnce;
99
- processedFilesSpy.restore();
100
- });
101
- it('should retain selected file when "Cancel" button is clicked in system file explorer dialog', async () => {
102
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
103
- mimicSelectFile(el, [file]);
104
- await el.updateComplete;
105
- // @ts-expect-error [allow-protected-in-test]
106
- expect(el._selectedFilesMetaData.length).to.equal(1);
107
- expect(el.uploadResponse.length).to.equal(1);
108
-
109
- // when cancel is clicked, native input value is blank which means modelValue is blank
110
- el.modelValue = [];
111
- await el.updateComplete;
112
- // @ts-expect-error [allow-protected-in-test]
113
- expect(el._selectedFilesMetaData.length).to.equal(1);
114
- });
115
- it('has an attribute focused when focused', async () => {
116
- const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
117
-
118
- // @ts-expect-error [allow-protected-in-test]
119
- el._buttonNode.focus();
120
- await el.updateComplete;
121
- expect(el.hasAttribute('focused')).to.be.true;
122
-
123
- // @ts-expect-error [allow-protected-in-test]
124
- el._buttonNode.blur();
125
- await el.updateComplete;
126
- expect(el.hasAttribute('focused')).to.be.false;
127
- });
128
- it('should set touched property true on change', async () => {
129
- const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
130
- expect(el.touched).to.be.false;
131
-
132
- // @ts-expect-error [allow-protected-in-test]
133
- await el._onChange({
134
- target: {
135
- files: [file],
136
- },
137
- });
138
- expect(el.touched).to.be.true;
139
- });
140
- it('should replace previous file when new file is selected', async () => {
141
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
142
- mimicSelectFile(el, [file]);
143
- await el.updateComplete;
144
- // @ts-expect-error [allow-protected-in-test]
145
- expect(el._selectedFilesMetaData.length).to.equal(1);
146
- // @ts-expect-error [allow-protected-in-test]
147
- expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('foo.txt');
148
- mimicSelectFile(el, [file2]);
149
- await el.updateComplete;
150
- // @ts-expect-error [allow-protected-in-test]
151
- expect(el._selectedFilesMetaData.length).to.equal(1);
152
- // @ts-expect-error [allow-protected-in-test]
153
- expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('bar.txt');
154
- });
155
- describe('structure', async () => {
156
- it('can has a button label by default', async () => {
157
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
158
- // @ts-expect-error [allow-protected-in-test]
159
- expect(el._buttonNode.textContent).to.equal('Select file');
160
- });
161
- it('can has a button label by default when multiple', async () => {
162
- const el = await fixture(html`<lion-input-file multiple></lion-input-file>`);
163
- // @ts-expect-error [allow-protected-in-test]
164
- expect(el._buttonNode.textContent).to.equal('Select files');
165
- });
166
- it('will update the button label on locale change', async () => {
167
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
168
- // @ts-expect-error [allow-protected-in-test]
169
- expect(el._buttonNode.textContent).to.equal('Select file');
170
- localizeManager.locale = 'nl-NL';
171
- await localizeManager.loadingComplete;
172
- await el.updateComplete;
173
- // @ts-expect-error [allow-protected-in-test]
174
- expect(el._buttonNode.textContent).to.equal('Selecteer bestand');
175
- });
176
- it('can overwrite the button label', async () => {
177
- const el = await fixture(html`<lion-input-file .buttonLabel="${'Foo'}"></lion-input-file>`);
178
- // @ts-expect-error [allow-protected-in-test]
179
- expect(el._buttonNode.textContent).to.equal('Foo');
180
- el.buttonLabel = 'Bar';
181
- await el.updateComplete;
182
- // @ts-expect-error [allow-protected-in-test]
183
- expect(el._buttonNode.textContent).to.equal('Bar');
184
- });
185
- });
186
- describe('invalid file types', async () => {
187
- const fileWrongType =
188
- /** @type {InputFile} */
189
- new File(['foobar'], 'foobar.txt', {
190
- type: 'xxxxx',
191
- });
192
- it('error should not be there when the file extensions are accepted', async () => {
193
- const el = await fixture(html`
194
- <lion-input-file label="Select" accept=".txt"></lion-input-file>
195
- `);
196
- mimicSelectFile(el, [fileWrongType]);
197
- await el.updateComplete;
198
- expect(el.hasFeedbackFor.length).to.equal(0);
199
- });
200
- it('should not be added to the selected list', async () => {
201
- const el = await fixture(html`
202
- <lion-input-file label="Select" accept="text/plain"></lion-input-file>
203
- `);
204
- mimicSelectFile(el, [fileWrongType]);
205
- await el.updateComplete;
206
-
207
- // @ts-expect-error [allow-protected-in-test]
208
- expect(el._selectedFilesMetaData.length).to.equal(1);
209
- // @ts-expect-error [allow-protected-in-test]
210
- expect(el._selectedFilesMetaData[0].failedProp?.length).to.equal(1);
211
- // @ts-expect-error [allow-protected-in-test]
212
- expect(el._selectedFilesMetaData[0].validationFeedback).to.exist;
213
- // @ts-expect-error [allow-protected-in-test]
214
- expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
215
- expect(el.uploadResponse[0].status).to.equal('FAIL');
216
- });
217
- it('error message should use main type when "/*" is used', async () => {
218
- const el = await fixture(html`
219
- <lion-input-file label="Select" accept="text/*"></lion-input-file>
220
- `);
221
- mimicSelectFile(el, [fileWrongType]);
222
- await el.updateComplete;
223
-
224
- // @ts-expect-error [allow-protected-in-test]
225
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
226
- expect(error.message).to.deep.equal('Please select a(n) text file with max 500MB.');
227
- });
228
- });
229
- it('error message should use main type when "text/plain" is used', async () => {
230
- const el = await fixture(html`
231
- <lion-input-file label="Select" accept="text/plain"></lion-input-file>
232
- `);
233
- mimicSelectFile(el, [fileWrongType]);
234
- await el.updateComplete;
235
-
236
- // @ts-expect-error [allow-protected-in-test]
237
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
238
- expect(error.message).to.deep.equal('Please select a(n) text file with max 500MB.');
239
- });
240
- });
241
- it('error message should use sub type when e.g. "text/html" is used', async () => {
242
- const el = await fixture(html`
243
- <lion-input-file label="Select" accept="text/html"></lion-input-file>
244
- `);
245
- mimicSelectFile(el, [fileWrongType]);
246
- await el.updateComplete;
247
-
248
- // @ts-expect-error [allow-protected-in-test]
249
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
250
- expect(error.message).to.deep.equal('Please select a(n) .html file with max 500MB.');
251
- });
252
- });
253
- it('error message should use the first sub type when e.g. "image/svg+xml" is used', async () => {
254
- const el = await fixture(html`
255
- <lion-input-file label="Select" accept="image/svg+xml"></lion-input-file>
256
- `);
257
- mimicSelectFile(el, [fileWrongType]);
258
- await el.updateComplete;
259
-
260
- // @ts-expect-error [allow-protected-in-test]
261
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
262
- expect(error.message).to.deep.equal('Please select a(n) .svg file with max 500MB.');
263
- });
264
- });
265
- it('can reflect multiple types in the error message', async () => {
266
- const el = await fixture(html`
267
- <lion-input-file label="Select" accept="text/html, text/csv"></lion-input-file>
268
- `);
269
- mimicSelectFile(el, [fileWrongType]);
270
- await el.updateComplete;
271
-
272
- // @ts-expect-error [allow-protected-in-test]
273
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
274
- expect(error.message).to.deep.equal('Please select a .html or .csv file with max 500MB.');
275
- });
276
- });
277
- it('can reflect multiple types in the error message also with a space " "', async () => {
278
- const el = await fixture(html`
279
- <lion-input-file label="Select" accept="text/html,text/csv"></lion-input-file>
280
- `);
281
- mimicSelectFile(el, [fileWrongType]);
282
- await el.updateComplete;
283
-
284
- // @ts-expect-error [allow-protected-in-test]
285
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
286
- expect(error.message).to.deep.equal('Please select a .html or .csv file with max 500MB.');
287
- });
288
- });
289
- it('can reflect multiple types in the error message with preference to extensions', async () => {
290
- const el = await fixture(html`
291
- <lion-input-file label="Select" accept=".jpg,image/svg+xml"></lion-input-file>
292
- `);
293
- mimicSelectFile(el, [fileWrongType]);
294
- await el.updateComplete;
295
-
296
- // @ts-expect-error [allow-protected-in-test]
297
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
298
- expect(error.message).to.deep.equal('Please select a(n) .jpg file with max 500MB.');
299
- });
300
- });
301
- });
302
- describe('invalid file extensions', async () => {
303
- const fileWrongType =
304
- /** @type {InputFile} */
305
- new File(['foobar'], 'foobar.txt', {
306
- type: 'xxxxx',
307
- });
308
- it('should not be added to the selected list', async () => {
309
- const el = await fixture(html`
310
- <lion-input-file label="Select" accept=".jpg, .png, .pdf"></lion-input-file>
311
- `);
312
- mimicSelectFile(el, [fileWrongType]);
313
- await el.updateComplete;
314
-
315
- // @ts-expect-error [allow-protected-in-test]
316
- expect(el._selectedFilesMetaData.length).to.equal(1);
317
- // @ts-expect-error [allow-protected-in-test]
318
- expect(el._selectedFilesMetaData[0].failedProp?.length).to.equal(1);
319
- // @ts-expect-error [allow-protected-in-test]
320
- expect(el._selectedFilesMetaData[0].validationFeedback).to.exist;
321
- // @ts-expect-error [allow-protected-in-test]
322
- expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
323
- expect(el.uploadResponse[0].status).to.equal('FAIL');
324
- });
325
- it('error message should add the file extension to the validator message', async () => {
326
- const el = await fixture(html`
327
- <lion-input-file label="Select" accept=".jpg"></lion-input-file>
328
- `);
329
- mimicSelectFile(el, [fileWrongType]);
330
- await el.updateComplete;
331
-
332
- // @ts-expect-error [allow-protected-in-test]
333
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
334
- expect(error.message).to.equal('Please select a(n) .jpg file with max 500MB.');
335
- });
336
- });
337
- it('error message should add all file extensions to the validator message', async () => {
338
- const el = await fixture(html`
339
- <lion-input-file label="Select" accept=".jpg, .png, .pdf"></lion-input-file>
340
- `);
341
- mimicSelectFile(el, [fileWrongType]);
342
- await el.updateComplete;
343
-
344
- // @ts-expect-error [allow-protected-in-test]
345
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
346
- expect(error.message).to.equal('Please select a .jpg, .png or .pdf file with max 500MB.');
347
- });
348
- });
349
- it('error message should add all file extensions to the validator message also works without spaces " "', async () => {
350
- const el = await fixture(html`
351
- <lion-input-file label="Select" accept=".jpg,.png,.pdf"></lion-input-file>
352
- `);
353
- mimicSelectFile(el, [fileWrongType]);
354
- await el.updateComplete;
355
-
356
- // @ts-expect-error [allow-protected-in-test]
357
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
358
- expect(error.message).to.equal('Please select a .jpg, .png or .pdf file with max 500MB.');
359
- });
360
- });
361
- });
362
- describe('invalid file sizes', async () => {
363
- // Size of this file is 4 bytes
364
- const fileWrongSize = /** @type {InputFile} */ new File(['foobar'], 'foobar.txt');
365
- it('should not be added to the selected list', async () => {
366
- const el = await fixture(html` <lion-input-file max-file-size="2"></lion-input-file> `);
367
- mimicSelectFile(el, [fileWrongSize]);
368
- await el.updateComplete;
369
-
370
- // @ts-expect-error [allow-protected-in-test]
371
- expect(el._selectedFilesMetaData.length).to.equal(1);
372
- // @ts-expect-error [allow-protected-in-test]
373
- expect(el._selectedFilesMetaData[0].failedProp?.length).to.equal(1);
374
- // @ts-expect-error [allow-protected-in-test]
375
- expect(el._selectedFilesMetaData[0].validationFeedback).to.exist;
376
- // @ts-expect-error [allow-protected-in-test]
377
- expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
378
- expect(el.uploadResponse[0].status).to.equal('FAIL');
379
- });
380
- it('error message should show only the max file size if no type/extension restrictions are defined', async () => {
381
- const el = await fixture(html`
382
- <lion-input-file label="Select" max-file-size="2"></lion-input-file>
383
- `);
384
- mimicSelectFile(el, [fileWrongSize]);
385
- await el.updateComplete;
386
-
387
- // @ts-expect-error [allow-protected-in-test]
388
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
389
- expect(error.message).to.equal('Please select a file with max 2 bytes.');
390
- });
391
- });
392
- it('error message should show the correct max file size if type/extension restrictions are defined', async () => {
393
- const el = await fixture(html`
394
- <lion-input-file
395
- label="Select"
396
- max-file-size="2"
397
- accept=".jpg, .png, .pdf"
398
- ></lion-input-file>
399
- `);
400
- mimicSelectFile(el, [fileWrongSize]);
401
- await el.updateComplete;
402
-
403
- // @ts-expect-error [allow-protected-in-test]
404
- el._selectedFilesMetaData[0].validationFeedback?.forEach((error) => {
405
- expect(error.message).to.equal('Please select a .jpg, .png or .pdf file with max 2 bytes.');
406
- });
407
- });
408
- });
409
- it('should send "file-list-changed" event if selecting files succeeded partially', async () => {
410
- const el = await fixture(html`<lion-input-file multiple max-file-size="3"></lion-input-file>`);
411
-
412
- // Size of this file is 4 bytes
413
- const fileWrongSize = /** @type {InputFile} */ new File(['foobar'], 'foobar.txt');
414
- setTimeout(() => {
415
- mimicSelectFile(el, [fileWrongSize, file2]);
416
- });
417
- const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
418
-
419
- // @ts-expect-error [allow-protected-in-test]
420
- expect(el._selectedFilesMetaData.length).to.equal(2);
421
- // @ts-expect-error [allow-protected-in-test]
422
- expect(el._selectedFilesMetaData[0].status).to.equal('FAIL');
423
- expect(el.uploadResponse[0].status).to.equal('FAIL');
424
- expect(fileListChangedEvent.detail.newFiles.length).to.equal(1);
425
- });
426
- it('should update downloadurl for successful files', async () => {
427
- const el = await fixture(html`<lion-input-file></lion-input-file>`);
428
- setTimeout(() => {
429
- mimicSelectFile(el, [file]);
430
- });
431
- const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
432
- filesListChanged(el, fileListChangedEvent);
433
-
434
- // @ts-expect-error [allow-protected-in-test]
435
- expect(el._selectedFilesMetaData[0].downloadUrl).to.exist;
436
- });
437
- describe('format', () => {
438
- it('modelValue is an array of files', async () => {
439
- const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
440
- mimicSelectFile(el, [file]);
441
- await el.updateComplete;
442
- expect(el.modelValue).to.deep.equal([file]);
443
- });
444
- it('view value is a string', async () => {
445
- const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
446
- mimicSelectFile(el, [file]);
447
- await el.updateComplete;
448
- expect(el.value).to.equal('C:\\fakepath\\foo.txt');
449
- // @ts-expect-error [allow-protected-in-tests]
450
- expect(el._inputNode.value).to.equal('C:\\fakepath\\foo.txt');
451
- });
452
- it('formattedValue is a string', async () => {
453
- const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
454
- mimicSelectFile(el, [file]);
455
- await el.updateComplete;
456
- expect(el.formattedValue).to.equal('C:\\fakepath\\foo.txt');
457
- });
458
- it('serializedValue is an array of files', async () => {
459
- const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
460
- mimicSelectFile(el, [file]);
461
- await el.updateComplete;
462
- expect(el.serializedValue).to.deep.equal([file]);
463
- });
464
- it('fires `model-value-changed` for every programmatic modelValue change', async () => {
465
- const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
466
- let counter = 0;
467
- let isTriggeredByUser = false;
468
- el.addEventListener('model-value-changed', (event) => {
469
- counter += 1;
470
- isTriggeredByUser = /** @type {CustomEvent} */ event.detail.isTriggeredByUser;
471
- });
472
- el.modelValue = [file];
473
- expect(counter).to.equal(1);
474
- expect(isTriggeredByUser).to.be.false;
475
-
476
- // TODO: should no change mean no event?
477
- // el.modelValue = [file];
478
- // expect(counter).to.equal(1);
479
-
480
- el.modelValue = [file, file2];
481
- expect(counter).to.equal(2);
482
- });
483
- it('fires `model-value-changed` for every user input, adding `isTriggeredByUser` in event detail', async () => {
484
- const el = await fixture(html` <lion-input-file name="select"></lion-input-file> `);
485
- let counter = 0;
486
- let isTriggeredByUser = false;
487
- el.addEventListener('model-value-changed', (event) => {
488
- counter += 1;
489
- isTriggeredByUser = /** @type {CustomEvent} */ event.detail.isTriggeredByUser;
490
- });
491
- mimicSelectFile(el, [file]);
492
- await el.updateComplete;
493
- expect(counter).to.equal(1);
494
- expect(isTriggeredByUser).to.be.true;
495
- mimicSelectFile(el, [file, file2]);
496
- await el.updateComplete;
497
- expect(counter).to.equal(2);
498
- });
499
- });
500
- describe('multiple file select', () => {
501
- it('should add multiple files', async () => {
502
- const el = await fixture(html`
503
- <lion-input-file label="Select" .multiple="${true}"> </lion-input-file>
504
- `);
505
- mimicSelectFile(el, [file, file2]);
506
- await el.updateComplete;
507
- // @ts-expect-error [allow-protected-in-test]
508
- expect(el._selectedFilesMetaData.length).to.equal(2);
509
- // @ts-expect-error [allow-protected-in-test]
510
- expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('foo.txt');
511
- // @ts-expect-error [allow-protected-in-test]
512
- expect(el._selectedFilesMetaData[1].systemFile.name).to.equal('bar.txt');
513
- expect(el.uploadResponse.length).to.equal(2);
514
- expect(el.uploadResponse[0].name).to.equal('foo.txt');
515
- expect(el.uploadResponse[1].name).to.equal('bar.txt');
516
- });
517
- it('should add new files and retain previous files', async () => {
518
- const el = await fixture(html` <lion-input-file .multiple="${true}"></lion-input-file> `);
519
- setTimeout(() => {
520
- mimicSelectFile(el, [file, file2]);
521
- });
522
- const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
523
- filesListChanged(el, fileListChangedEvent);
524
- await elementUpdated(el);
525
-
526
- // @ts-expect-error [allow-protected-in-test]
527
- expect(el._selectedFilesMetaData.length).to.equal(2);
528
- expect(el.modelValue.length).to.equal(2);
529
- setTimeout(() => {
530
- mimicSelectFile(el, [file3, file4]);
531
- });
532
- const fileListChangedEvent1 = await oneEvent(el, 'file-list-changed');
533
- filesListChanged(el, fileListChangedEvent1);
534
- await elementUpdated(el);
535
-
536
- // @ts-expect-error [allow-protected-in-test]
537
- expect(el._selectedFilesMetaData.length).to.equal(4);
538
- expect(el.modelValue.length).to.equal(4);
539
- });
540
- it('should add multiple files and dispatch file-list-changed event ONLY with newly added file', async () => {
541
- const el = await fixture(html` <lion-input-file .multiple="${true}"></lion-input-file> `);
542
- setTimeout(() => {
543
- mimicSelectFile(el, [file, file2]);
544
- });
545
- const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
546
- filesListChanged(el, fileListChangedEvent);
547
- setTimeout(() => {
548
- mimicSelectFile(el, [file3, file4]);
549
- });
550
- const fileListChangedEvent1 = await oneEvent(el, 'file-list-changed');
551
- filesListChanged(el, fileListChangedEvent1);
552
- expect(fileListChangedEvent1).to.exist;
553
- // @ts-expect-error [allow-protected-in-test]
554
- expect(el._selectedFilesMetaData.length).to.equal(4);
555
- expect(fileListChangedEvent1.detail.newFiles.length).to.equal(2);
556
- expect(fileListChangedEvent1.detail.newFiles[0].name).to.equal('foo3.txt');
557
- expect(fileListChangedEvent1.detail.newFiles[1].name).to.equal('foo4.txt');
558
- });
559
- it('should not allow duplicate files to be selected and show notification message', async () => {
560
- const el = await fixture(html` <lion-input-file .multiple="${true}"></lion-input-file> `);
561
- setTimeout(() => {
562
- mimicSelectFile(el, [file]);
563
- });
564
-
565
- // create condition to also show the feedback
566
- el.prefilled = true;
567
- const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
568
-
569
- // @ts-expect-error [allow-protected-in-test]
570
- expect(el._selectedFilesMetaData.length).to.equal(1);
571
- // @ts-expect-error [allow-protected-in-test]
572
- expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('foo.txt');
573
- expect(fileListChangedEvent).to.exist;
574
- expect(fileListChangedEvent.detail.newFiles.length).to.equal(1);
575
- expect(fileListChangedEvent.detail.newFiles[0].name).to.equal('foo.txt');
576
- const fileDuplicate =
577
- /** @type {InputFile} */
578
- new File(['foo'], 'foo.txt', {
579
- type: 'text/plain',
580
- });
581
- mimicSelectFile(el, [fileDuplicate]);
582
- await el.updateComplete;
583
- // @ts-expect-error [allow-protected-in-test]
584
- expect(el._selectedFilesMetaData.length).to.equal(1);
585
- expect(el.hasFeedbackFor).to.deep.equals(['info'], 'hasFeedbackFor');
586
- expect(el.showsFeedbackFor).to.deep.equals(['info'], 'showsFeedbackFor');
587
- });
588
- it('should add valid files and skip invalid ones', async () => {
589
- const fileWrongSize = /** @type {InputFile} */ new File(['foobar'], 'foobar.txt');
590
- const fileWrongType =
591
- /** @type {InputFile} */
592
- new File(['foobar'], 'foobar.txt', {
593
- type: 'xxxxx',
594
- });
595
- const el = await fixture(html`
596
- <lion-input-file multiple max-file-size="3" accept=".txt"></lion-input-file>
597
- `);
598
- setTimeout(() => {
599
- mimicSelectFile(el, [file, fileWrongSize, file2, fileWrongType]);
600
- });
601
- const fileListChangedEvent = await oneEvent(el, 'file-list-changed');
602
- // @ts-expect-error [allow-protected-in-test]
603
- expect(el._selectedFilesMetaData.length).to.equal(4);
604
- expect(fileListChangedEvent).to.exist;
605
- expect(fileListChangedEvent.detail.newFiles.length).to.equal(2);
606
- expect(fileListChangedEvent.detail.newFiles[0].name).to.equal('foo.txt');
607
- expect(fileListChangedEvent.detail.newFiles[1].name).to.equal('bar.txt');
608
- });
609
- });
610
- describe('status and error', () => {
611
- /**
612
- * @type {LionInputFile}
613
- */
614
- let el;
615
- beforeEach(async () => {
616
- el = await fixture(html`<lion-input-file accept="text/plain"></lion-input-file>`);
617
- });
618
- it('should set uploadResponse data to _selectedFilesMetaData for rendering error and status', async () => {
619
- mimicSelectFile(el, [file]);
620
- el.uploadResponse = [
621
- {
622
- name: 'foo.txt',
623
- status: 'LOADING',
624
- errorMessage: '500',
625
- },
626
- ];
627
- await el.updateComplete;
628
-
629
- // @ts-expect-error [allow-protected-in-test]
630
- expect(el._selectedFilesMetaData[0].status).to.equal('LOADING');
631
- // @ts-ignore
632
- expect(el._selectedFilesMetaData[0].validationFeedback[0].message).to.equal('500');
633
- });
634
- it('should not fire file-list-changed event if invalid file is selected', async () => {
635
- const filePdf =
636
- /** @type {InputFile} */
637
- new File(['foo'], 'foo.pdf', {
638
- type: 'application/pdf',
639
- });
640
- // @ts-ignore
641
- const fileListChangedSpy = sinon.spy(el, '_dispatchFileListChangeEvent');
642
- mimicSelectFile(el, [filePdf]);
643
- expect(fileListChangedSpy).have.not.been.called;
644
- fileListChangedSpy.restore();
645
- });
646
- it('updates showFeedbackFor when a wrong file has been added/removed', async () => {
647
- const fileWrongType =
648
- /** @type {InputFile} */
649
- new File(['foobar'], 'foobar.txt', {
650
- type: 'xxxxx',
651
- });
652
-
653
- // create condition to also show the feedback
654
- el.prefilled = true;
655
- mimicSelectFile(el, [fileWrongType]);
656
- await el.updateComplete;
657
- expect(el.hasFeedbackFor).to.deep.equals(['error'], 'hasFeedbackFor');
658
- expect(el.showsFeedbackFor).to.deep.equals(['error'], 'showsFeedbackFor');
659
-
660
- // on change the showsFeedbackFor should be empty again
661
- mimicSelectFile(el, [file]);
662
- await el.updateComplete;
663
- expect(el.hasFeedbackFor).to.deep.equals([]);
664
- expect(el.showsFeedbackFor).to.deep.equals([]);
665
- });
666
- });
667
- describe('validations when used with lion-form', () => {
668
- it('should throw error with Required validator', async () => {
669
- const el = await fixture(html`
670
- <lion-input-file
671
- name="myFileInput"
672
- .validators="${[
673
- new Required(
674
- {},
675
- {
676
- getMessage: () => 'FooBar',
677
- },
678
- ),
679
- ]}"
680
- >
681
- </lion-input-file>
682
- `);
683
- el.touched = true;
684
- el.dirty = true;
685
- await el.updateComplete;
686
- await el.feedbackComplete;
687
- // @ts-ignore input type="file" is a specific input member
688
- const { _feedbackNode } = getInputMembers(el);
689
- expect(_feedbackNode.feedbackData?.[0].message).to.equal('FooBar');
690
- expect(el.hasFeedbackFor.includes('error')).to.be.true;
691
- });
692
- it('reset method should remove File from modelValue but keep uploadResponse', async () => {
693
- const uploadResponse = [
694
- {
695
- name: 'file1.txt',
696
- status: 'SUCCESS',
697
- errorMessage: '',
698
- downloadUrl: '/downloadFile',
699
- },
700
- ];
701
- const el = await fixture(html`
702
- <lion-input-file label="Select" .uploadResponse="${uploadResponse}"></lion-input-file>
703
- `);
704
-
705
- // @ts-expect-error [allow-protected-in-test]
706
- el.uploadResponse = uploadResponse;
707
- await el.updateComplete;
708
- mimicSelectFile(el, [file]);
709
- await el.updateComplete;
710
- await el.reset();
711
- expect(el.modelValue).to.deep.equal([]);
712
- // @ts-expect-error [allow-protected-in-test]
713
- expect(el._selectedFilesMetaData).to.deep.equal([]);
714
- expect(el.uploadResponse).to.deep.equal(uploadResponse);
715
- });
716
- it('clear method should remove File from modelValue and uploadResponse', async () => {
717
- const uploadResponse = [
718
- {
719
- name: 'file1.txt',
720
- status: 'SUCCESS',
721
- errorMessage: '',
722
- downloadUrl: '/downloadFile',
723
- },
724
- ];
725
- const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
726
-
727
- // @ts-expect-error [allow-protected-in-test]
728
- el.uploadResponse = uploadResponse;
729
- setTimeout(() => {
730
- mimicSelectFile(el, [file]);
731
- });
732
- await oneEvent(el, 'file-list-changed');
733
- await el.clear();
734
- expect(el.modelValue).to.deep.equal([]);
735
- expect(el.uploadResponse).to.deep.equal([]);
736
- // @ts-expect-error [allow-protected-in-test]
737
- expect(el._selectedFilesMetaData).to.deep.equal([]);
738
- });
739
- });
740
- describe('file select component with prefilled state', () => {
741
- /**
742
- * @type {LionInputFile}
743
- */
744
- let el;
745
- const uploadResponse = [
746
- {
747
- name: 'file1.txt',
748
- status: 'SUCCESS',
749
- errorMessage: '',
750
- downloadUrl: '/downloadFile',
751
- },
752
- {
753
- name: 'file2.txt',
754
- status: 'FAIL',
755
- errorMessage: 'something went wrong',
756
- },
757
- ];
758
- beforeEach(async () => {
759
- el = await fixture(html`
760
- <lion-input-file name="myFiles" multiple="${true}"> </lion-input-file>
761
- `);
762
-
763
- // @ts-expect-error [allow-protected-in-test]
764
- el.uploadResponse = uploadResponse;
765
- await el.updateComplete;
766
- });
767
- it('should update the _selectedFilesMetaData according to uploadResponse', () => {
768
- // @ts-expect-error [allow-protected-in-test]
769
- expect(el._selectedFilesMetaData.length).to.equal(2);
770
- // @ts-expect-error [allow-protected-in-test]
771
- expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('file1.txt');
772
- // @ts-expect-error [allow-protected-in-test]
773
- expect(el._selectedFilesMetaData[0].status).to.equal('SUCCESS');
774
- // @ts-expect-error [allow-protected-in-test]
775
- expect(el._selectedFilesMetaData[0].downloadUrl).to.equal('/downloadFile');
776
- // @ts-expect-error [allow-protected-in-test]
777
- expect(el._selectedFilesMetaData[1].validationFeedback[0].message).to.equal(
778
- 'something went wrong',
779
- );
780
- });
781
- it('should remove file on click of cross button', async () => {
782
- /**
783
- * @type {Partial<InputFile>}
784
- */
785
- const removedFile = {
786
- name: 'file2.txt',
787
- status: 'FAIL',
788
- systemFile: {
789
- name: 'file2.txt',
790
- },
791
- response: {
792
- name: 'file2.txt',
793
- status: 'FAIL',
794
- },
795
- };
796
- // @ts-expect-error [allow-protected-in-test]
797
- const removeFileSpy = sinon.spy(el, '_removeFile');
798
-
799
- // assertion for displayed file list to be same
800
- // @ts-expect-error [allow-protected-in-test]
801
- expect(el._selectedFilesMetaData.length).to.equal(2);
802
- // @ts-expect-error [allow-protected-in-test]
803
- expect(el._selectedFilesMetaData[1].systemFile.name).to.equal('file2.txt');
804
-
805
- // @ts-expect-error [allow-protected-in-test]
806
- el._fileListNode.dispatchEvent(
807
- new CustomEvent('file-remove-requested', {
808
- detail: {
809
- removedFile,
810
- status: removedFile.status,
811
- uploadResponse: removedFile.response,
812
- },
813
- }),
814
- );
815
- await el.updateComplete;
816
- expect(removeFileSpy).have.been.calledOnce;
817
- // @ts-expect-error [allow-protected-in-test]
818
- expect(el._selectedFilesMetaData.length).to.equal(1);
819
- removeFileSpy.restore();
820
- });
821
- it('should fire file-removed event with uploadResponse in the details', async () => {
822
- /**
823
- * @type {Partial<InputFile>}
824
- */
825
- const removedFile = {
826
- name: 'file2.txt',
827
- status: 'FAIL',
828
- systemFile: {
829
- name: 'file2.txt',
830
- },
831
- response: {
832
- name: 'file2.txt',
833
- status: 'FAIL',
834
- },
835
- };
836
- setTimeout(() => {
837
- // @ts-ignore ignore file typing
838
- el._removeFile(removedFile);
839
- });
840
- await el.updateComplete;
841
- const removeFileEvent = await oneEvent(el, 'file-removed');
842
-
843
- // assertion for event data
844
- expect(removeFileEvent).to.exist;
845
- expect(removeFileEvent.detail.removedFile).to.deep.equal({
846
- name: 'file2.txt',
847
- status: 'FAIL',
848
- systemFile: {
849
- name: 'file2.txt',
850
- },
851
- response: {
852
- name: 'file2.txt',
853
- status: 'FAIL',
854
- },
855
- });
856
- expect(removeFileEvent.detail.status).to.deep.equal('FAIL');
857
- expect(removeFileEvent.detail.uploadResponse).to.deep.equal({
858
- name: 'file2.txt',
859
- status: 'FAIL',
860
- });
861
- });
862
- });
863
- describe('drag and drop', () => {
864
- /**
865
- * @type {LionInputFile}
866
- */
867
- let el;
868
- beforeEach(async () => {
869
- el = await fixture(html`
870
- <lion-input-file name="myFiles" multiple enable-drop-zone></lion-input-file>
871
- `);
872
- await el.updateComplete;
873
- });
874
- it('should set "is-dragging" on dragenter', async () => {
875
- const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
876
- dropzone?.dispatchEvent(
877
- new Event('dragenter', {
878
- bubbles: true,
879
- }),
880
- );
881
- await el.updateComplete;
882
- expect(el.hasAttribute('is-dragging')).to.equal(true);
883
- });
884
- it('should set "is-dragging" on dragover', async () => {
885
- const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
886
- dropzone?.dispatchEvent(
887
- new Event('dragover', {
888
- bubbles: true,
889
- }),
890
- );
891
- await el.updateComplete;
892
- expect(el.hasAttribute('is-dragging')).to.equal(true);
893
- });
894
- it('should remove "is-dragging" on dragleave', async () => {
895
- const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
896
- dropzone?.dispatchEvent(
897
- new Event('dragenter', {
898
- bubbles: true,
899
- }),
900
- );
901
- await el.updateComplete;
902
- dropzone?.dispatchEvent(
903
- new Event('dragleave', {
904
- bubbles: true,
905
- }),
906
- );
907
- await el.updateComplete;
908
- expect(el.hasAttribute('is-dragging')).to.equal(false);
909
- });
910
- it('should remove "is-dragging" on drop', async () => {
911
- const dropzone = el.shadowRoot?.querySelector('.input-file__drop-zone');
912
- dropzone?.dispatchEvent(
913
- new Event('dragenter', {
914
- bubbles: true,
915
- }),
916
- );
917
- await el.updateComplete;
918
- window.dispatchEvent(
919
- new Event('drop', {
920
- bubbles: true,
921
- }),
922
- );
923
- await el.updateComplete;
924
- expect(el.hasAttribute('is-dragging')).to.equal(false);
925
- });
926
- it('should update modelValue on drop', async () => {
927
- const list = new DataTransfer();
928
- // @ts-ignore
929
- list.items.add(file);
930
- const droppedFiles = list.files;
931
-
932
- // @ts-expect-error [allow-protected-in-test]
933
- await el._processDroppedFiles({
934
- // @ts-ignore
935
- dataTransfer: {
936
- files: droppedFiles,
937
- items: [
938
- {
939
- name: 'test.txt',
940
- },
941
- ],
942
- },
943
- preventDefault: () => {},
944
- });
945
- await el.updateComplete;
946
- expect(el.modelValue.length).to.equal(1);
947
- const list2 = new DataTransfer();
948
- // @ts-ignore
949
- list2.items.add(file2);
950
-
951
- // @ts-expect-error [allow-protected-in-test]
952
- await el._processDroppedFiles({
953
- // @ts-ignore
954
- dataTransfer: {
955
- files: list2.files,
956
- items: [
957
- {
958
- name: 'test2.txt',
959
- },
960
- ],
961
- },
962
- preventDefault: () => {},
963
- });
964
- await el.updateComplete;
965
- expect(el.modelValue.length).to.equal(2);
966
- });
967
- it('should call _processFiles method', async () => {
968
- const list = new DataTransfer();
969
- // @ts-ignore
970
- list.items.add(file);
971
- const droppedFiles = list.files;
972
- // @ts-ignore
973
- const _processFilesSpy = sinon.spy(el, '_processFiles');
974
-
975
- // @ts-expect-error [allow-protected-in-test]
976
- await el._processDroppedFiles({
977
- // @ts-ignore
978
- dataTransfer: {
979
- files: droppedFiles,
980
- items: [
981
- {
982
- name: 'test.txt',
983
- },
984
- ],
985
- },
986
- preventDefault: () => {},
987
- });
988
- expect(_processFilesSpy).have.been.calledOnce;
989
- _processFilesSpy.restore();
990
- });
991
- });
992
- describe('uploadOnSelect as true', () => {
993
- it('should not remove file on click of cross button and fire file-removed event', async () => {
994
- /**
995
- * @type {Partial<InputFile>}
996
- */
997
- const removeFile = {
998
- name: 'foo.txt',
999
- status: 'SUCCESS',
1000
- systemFile: {
1001
- name: 'foo.txt',
1002
- },
1003
- response: {
1004
- name: 'foo.txt',
1005
- status: 'SUCCESS',
1006
- },
1007
- };
1008
- const el = await fixture(html`
1009
- <lion-input-file .uploadOnSelect="${true}"> </lion-input-file>
1010
- `);
1011
- el.modelValue = [file];
1012
- mimicSelectFile(el, [file]);
1013
- await el.updateComplete;
1014
- setTimeout(() => {
1015
- // @ts-ignore ignore file typing
1016
- el._removeFile(removeFile);
1017
- });
1018
- const removeFileEvent = await oneEvent(el, 'file-removed');
1019
-
1020
- // assertion for displayed file list to be same
1021
- // @ts-expect-error [allow-protected-in-test]
1022
- expect(el._selectedFilesMetaData.length).to.equal(1);
1023
- // @ts-expect-error [allow-protected-in-test]
1024
- expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('foo.txt');
1025
-
1026
- // assertion for event data
1027
- expect(removeFileEvent).to.exist;
1028
- expect(removeFileEvent.detail.removedFile).to.deep.equal({
1029
- name: 'foo.txt',
1030
- status: 'SUCCESS',
1031
- systemFile: {
1032
- name: 'foo.txt',
1033
- },
1034
- response: {
1035
- name: 'foo.txt',
1036
- status: 'SUCCESS',
1037
- },
1038
- });
1039
- expect(removeFileEvent.detail.status).to.deep.equal('SUCCESS');
1040
- expect(removeFileEvent.detail.uploadResponse).to.deep.equal({
1041
- name: 'foo.txt',
1042
- status: 'SUCCESS',
1043
- });
1044
- });
1045
- it('should remove file from displayed list if not available in uploadResponse array', async () => {
1046
- const uploadResponse = [
1047
- {
1048
- name: 'file1.txt',
1049
- status: 'SUCCESS',
1050
- errorMessage: '',
1051
- downloadUrl: '/downloadFile',
1052
- },
1053
- {
1054
- name: 'file2.txt',
1055
- status: 'FAIL',
1056
- errorMessage: 'something went wrong',
1057
- },
1058
- ];
1059
- const el = await fixture(html`
1060
- <lion-input-file label="Select" .uploadOnSelect="${true}"> </lion-input-file>
1061
- `);
1062
-
1063
- // @ts-expect-error [allow-protected-in-test]
1064
- el.uploadResponse = uploadResponse;
1065
- await el.updateComplete;
1066
- // assertion for displayed file list to be same
1067
- // @ts-expect-error [allow-protected-in-test]
1068
- expect(el._selectedFilesMetaData.length).to.equal(2);
1069
- el.uploadResponse = [
1070
- {
1071
- name: 'file1.txt',
1072
- status: 'SUCCESS',
1073
- errorMessage: '',
1074
- downloadUrl: '/downloadFile',
1075
- },
1076
- ];
1077
- await el.updateComplete;
1078
- // assertion for displayed file list to be same
1079
- // @ts-expect-error [allow-protected-in-test]
1080
- expect(el._selectedFilesMetaData.length).to.equal(1);
1081
- // @ts-expect-error [allow-protected-in-test]
1082
- expect(el._selectedFilesMetaData[0].systemFile.name).to.equal('file1.txt');
1083
- // @ts-expect-error [allow-protected-in-tests]
1084
- expect(el._inputNode.value).to.equal('');
1085
- });
1086
- });
1087
- describe('Accessibility', async () => {
1088
- it('is accessible', async () => {
1089
- const el = await fixture(html`<lion-input-file label="Select"></lion-input-file>`);
1090
- await expect(el).to.be.accessible();
1091
- });
1092
- it('is accessible when a file is selected', async () => {
1093
- const uploadResponse = [
1094
- {
1095
- name: 'file1.txt',
1096
- status: 'SUCCESS',
1097
- errorMessage: '',
1098
- downloadUrl: '/downloadFile',
1099
- },
1100
- ];
1101
- const el = await fixture(html` <lion-input-file label="Select"></lion-input-file>`);
1102
-
1103
- // @ts-expect-error [allow-protected-in-test]
1104
- el.uploadResponse = uploadResponse;
1105
- await expect(el).to.be.accessible();
1106
- });
1107
- it('is accessible with an selected file and disabled', async () => {
1108
- const uploadResponse = [
1109
- {
1110
- name: 'file1.txt',
1111
- status: 'SUCCESS',
1112
- errorMessage: '',
1113
- downloadUrl: '/downloadFile',
1114
- },
1115
- ];
1116
- const el = await fixture(html` <lion-input-file label="Select" disabled></lion-input-file> `);
1117
-
1118
- // @ts-expect-error [allow-protected-in-test]
1119
- el.uploadResponse = uploadResponse;
1120
- await expect(el).to.be.accessible();
1121
- });
1122
- describe('has correct aria-roles', async () => {
1123
- it('select-button has aria-labelledby set to itself and the label', async () => {
1124
- const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
1125
- // @ts-expect-error [allow-protected-in-test]
1126
- expect(el._buttonNode?.getAttribute('aria-labelledby')).to.contain(
1127
- // @ts-expect-error [allow-protected-in-test]
1128
- `select-button-${el._inputId}`,
1129
- );
1130
- // @ts-expect-error [allow-protected-in-test]
1131
- expect(el._buttonNode?.getAttribute('aria-labelledby')).to.contain(
1132
- // @ts-expect-error [allow-protected-in-test]
1133
- `label-${el._inputId}`,
1134
- );
1135
- });
1136
- it('select-button has aria-describedby set to the help-text, after and the feedback message', async () => {
1137
- const uploadResponse = [
1138
- {
1139
- name: 'file1.txt',
1140
- status: 'SUCCESS',
1141
- errorMessage: '',
1142
- downloadUrl: '/downloadFile',
1143
- },
1144
- ];
1145
- const el = await fixture(html`
1146
- <lion-input-file label="Select" help-text="foo"></lion-input-file>
1147
- `);
1148
-
1149
- // @ts-expect-error [allow-protected-in-test]
1150
- el.uploadResponse = uploadResponse;
1151
-
1152
- // @ts-expect-error [allow-protected-in-test]
1153
- expect(el._buttonNode?.getAttribute('aria-describedby')).to.contain(
1154
- // @ts-expect-error [allow-protected-in-test]
1155
- `help-text-${el._inputId}`,
1156
- );
1157
- // @ts-expect-error [allow-protected-in-test]
1158
- expect(el._buttonNode?.getAttribute('aria-describedby')).to.contain(
1159
- // @ts-expect-error [allow-protected-in-test]
1160
- `feedback-${el._inputId}`,
1161
- );
1162
- // @ts-expect-error [allow-protected-in-test]
1163
- expect(el._buttonNode?.getAttribute('aria-describedby')).to.contain(
1164
- // @ts-expect-error [allow-protected-in-test]
1165
- `after-${el._inputId}`,
1166
- );
1167
- });
1168
- it('after contains upload name of file when uploadOnSelect is true and status is SUCCESS', async () => {
1169
- const uploadResponse = [
1170
- {
1171
- name: 'file1.txt',
1172
- status: 'SUCCESS',
1173
- errorMessage: '',
1174
- downloadUrl: '/downloadFile',
1175
- },
1176
- ];
1177
- const el = await fixture(html`
1178
- <lion-input-file label="Select" upload-on-select></lion-input-file>
1179
- `);
1180
- expect(el.querySelector('[slot="after"]')?.textContent).to.equal('No files uploaded.');
1181
- // @ts-expect-error
1182
- el.uploadResponse = uploadResponse;
1183
- await el.updateComplete;
1184
- expect(el.querySelector('[slot="after"]')?.textContent).to.equal(
1185
- 'Uploaded file: file1.txt',
1186
- );
1187
- });
1188
- it('after contains upload name of file when uploadOnSelect is false and status is SUCCESS', async () => {
1189
- const uploadResponse = [
1190
- {
1191
- name: 'file1.txt',
1192
- status: 'SUCCESS',
1193
- errorMessage: '',
1194
- downloadUrl: '/downloadFile',
1195
- },
1196
- ];
1197
- const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
1198
- expect(el.querySelector('[slot="after"]')?.textContent).to.equal('No files selected.');
1199
- // @ts-expect-error
1200
- el.uploadResponse = uploadResponse;
1201
- await el.updateComplete;
1202
- expect(el.querySelector('[slot="after"]')?.textContent).to.equal(
1203
- 'Selected file: file1.txt',
1204
- );
1205
- });
1206
- it('after contains upload validator message of file when FAIL', async () => {
1207
- const uploadResponse = [
1208
- {
1209
- name: 'file1.txt',
1210
- status: 'FAIL',
1211
- errorMessage: 'something went wrong',
1212
- downloadUrl: '/downloadFile',
1213
- },
1214
- ];
1215
- const el = await fixture(html` <lion-input-file label="Select"></lion-input-file> `);
1216
- expect(el.querySelector('[slot="after"]')?.textContent).to.equal('No files selected.');
1217
- // @ts-expect-error
1218
- el.uploadResponse = uploadResponse;
1219
- await el.updateComplete;
1220
- expect(el.querySelector('[slot="after"]')?.textContent).to.equal('something went wrong');
1221
- });
1222
- it('after contains upload status of files when uploadOnSelect is true and multiple files have been selected', async () => {
1223
- const uploadResponse = [
1224
- {
1225
- name: 'file1.txt',
1226
- status: 'SUCCESS',
1227
- errorMessage: '',
1228
- downloadUrl: '/downloadFile',
1229
- },
1230
- {
1231
- name: 'file2.txt',
1232
- status: 'FAIL',
1233
- errorMessage: 'something went wrong',
1234
- downloadUrl: '/downloadFile',
1235
- },
1236
- ];
1237
- const el = await fixture(html`
1238
- <lion-input-file label="Select" multiple upload-on-select></lion-input-file>
1239
- `);
1240
- // @ts-expect-error
1241
- el.uploadResponse = uploadResponse;
1242
- await el.updateComplete;
1243
- expect(el.querySelector('[slot="after"]')?.textContent?.trim()).to.equal(
1244
- 'Uploaded files: 2 files. "something went wrong", for file2.txt.',
1245
- );
1246
- });
1247
- it('after contains upload status of files when uploadOnSelect is false and multiple files have been selected', async () => {
1248
- const uploadResponse = [
1249
- {
1250
- name: 'file1.txt',
1251
- status: 'SUCCESS',
1252
- errorMessage: '',
1253
- downloadUrl: '/downloadFile',
1254
- },
1255
- {
1256
- name: 'file2.txt',
1257
- status: 'FAIL',
1258
- errorMessage: 'something went wrong',
1259
- downloadUrl: '/downloadFile',
1260
- },
1261
- ];
1262
- const el = await fixture(html`
1263
- <lion-input-file label="Select" multiple></lion-input-file>
1264
- `);
1265
- // @ts-expect-error
1266
- el.uploadResponse = uploadResponse;
1267
- await el.updateComplete;
1268
- expect(el.querySelector('[slot="after"]')?.textContent?.trim()).to.equal(
1269
- 'Selected files: 2 files. "something went wrong", for file2.txt.',
1270
- );
1271
- });
1272
- });
1273
- });
1274
- });
1
+ import { runInputFileSuite } from '../test-suites/lion-input-file.suite.js';
2
+ runInputFileSuite();