@ui5/webcomponents 0.0.0-323968e1b → 0.0.0-4180fe799

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 (730) hide show
  1. package/CHANGELOG.md +717 -1
  2. package/README.md +144 -41
  3. package/csp.js +7 -0
  4. package/customI18n.js +50 -0
  5. package/dist/Assets-static.js +6 -0
  6. package/dist/Assets.js +3 -2
  7. package/dist/Avatar.js +224 -40
  8. package/dist/AvatarGroup.js +603 -0
  9. package/dist/Badge.js +48 -28
  10. package/dist/Breadcrumbs.js +563 -0
  11. package/dist/BreadcrumbsItem.js +109 -0
  12. package/dist/BusyIndicator.js +172 -19
  13. package/dist/Button.js +180 -49
  14. package/dist/Calendar.js +345 -554
  15. package/dist/CalendarDate.js +45 -0
  16. package/dist/CalendarHeader.js +133 -64
  17. package/dist/CalendarPart.js +111 -0
  18. package/dist/Card.js +47 -161
  19. package/dist/CardHeader.js +288 -0
  20. package/dist/Carousel.js +681 -0
  21. package/dist/CheckBox.js +154 -54
  22. package/dist/ColorPalette.js +493 -0
  23. package/dist/ColorPaletteItem.js +137 -0
  24. package/dist/ColorPalettePopover.js +219 -0
  25. package/dist/ColorPicker.js +524 -0
  26. package/dist/ComboBox.js +664 -107
  27. package/dist/ComboBoxFilters.js +8 -1
  28. package/dist/ComboBoxGroupItem.js +70 -0
  29. package/dist/ComboBoxItem.js +33 -30
  30. package/dist/CustomListItem.js +38 -9
  31. package/dist/DateComponentBase.js +170 -0
  32. package/dist/DatePicker.js +468 -384
  33. package/dist/DateRangePicker.js +328 -0
  34. package/dist/DateTimePicker.js +430 -0
  35. package/dist/DayPicker.js +513 -438
  36. package/dist/Dialog.js +501 -47
  37. package/dist/DurationPicker.js +312 -0
  38. package/dist/FileUploader.js +532 -0
  39. package/dist/GroupHeaderListItem.js +36 -8
  40. package/dist/Icon.js +221 -43
  41. package/dist/Input.js +796 -127
  42. package/dist/Interfaces.js +192 -0
  43. package/dist/Label.js +27 -12
  44. package/dist/Link.js +143 -35
  45. package/dist/List.js +560 -73
  46. package/dist/ListItem.js +139 -30
  47. package/dist/ListItemBase.js +53 -9
  48. package/dist/MessageStrip.js +82 -93
  49. package/dist/MonthPicker.js +181 -184
  50. package/dist/MultiComboBox.js +625 -200
  51. package/dist/MultiComboBoxItem.js +43 -0
  52. package/dist/MultiInput.js +301 -0
  53. package/dist/Option.js +48 -5
  54. package/dist/Panel.js +123 -41
  55. package/dist/Popover.js +314 -234
  56. package/dist/Popup.js +382 -287
  57. package/dist/ProgressIndicator.js +235 -0
  58. package/dist/RadioButton.js +153 -66
  59. package/dist/RadioButtonGroup.js +53 -29
  60. package/dist/RangeSlider.js +769 -0
  61. package/dist/RatingIndicator.js +291 -0
  62. package/dist/ResponsivePopover.js +117 -61
  63. package/dist/SegmentedButton.js +290 -0
  64. package/dist/SegmentedButtonItem.js +109 -0
  65. package/dist/Select.js +500 -110
  66. package/dist/Slider.js +320 -0
  67. package/dist/SliderBase.js +842 -0
  68. package/dist/StandardListItem.js +46 -24
  69. package/dist/StepInput.js +684 -0
  70. package/dist/SuggestionGroupItem.js +64 -0
  71. package/dist/SuggestionItem.js +146 -0
  72. package/dist/SuggestionListItem.js +76 -0
  73. package/dist/Switch.js +62 -48
  74. package/dist/Tab.js +184 -18
  75. package/dist/TabContainer.js +337 -235
  76. package/dist/TabSeparator.js +2 -1
  77. package/dist/Table.js +492 -39
  78. package/dist/TableCell.js +13 -15
  79. package/dist/TableColumn.js +18 -7
  80. package/dist/TableGroupRow.js +160 -0
  81. package/dist/TableRow.js +254 -31
  82. package/dist/TextArea.js +314 -38
  83. package/dist/TimePicker.js +166 -0
  84. package/dist/TimePickerBase.js +463 -0
  85. package/dist/TimeSelection.js +493 -0
  86. package/dist/Title.js +18 -10
  87. package/dist/Toast.js +63 -37
  88. package/dist/ToggleButton.js +21 -13
  89. package/dist/Token.js +87 -49
  90. package/dist/Tokenizer.js +250 -65
  91. package/dist/Tree.js +443 -0
  92. package/dist/TreeItem.js +168 -0
  93. package/dist/TreeListItem.js +332 -0
  94. package/dist/WheelSlider.js +435 -0
  95. package/dist/YearPicker.js +201 -258
  96. package/dist/api.json +6877 -0
  97. package/dist/features/ColorPaletteMoreColors.js +42 -0
  98. package/dist/features/InputElementsFormSupport.js +35 -1
  99. package/dist/features/InputSuggestions.js +294 -52
  100. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -0
  105. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -0
  110. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -0
  111. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -0
  112. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -0
  113. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  114. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -0
  115. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  116. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  117. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  118. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -0
  119. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  120. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  121. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  122. package/dist/generated/assets/i18n/messagebundle_in.json +1 -0
  123. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  124. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  125. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  126. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  127. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  128. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  129. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  130. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  131. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  132. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  133. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  134. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  135. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -0
  136. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  137. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  138. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  139. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  140. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  141. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  142. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  143. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  144. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  145. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  146. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  147. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  148. package/dist/generated/assets/themes/sap_belize/parameters-bundle.css.json +1 -1
  149. package/dist/generated/assets/themes/sap_belize_hcb/parameters-bundle.css.json +1 -1
  150. package/dist/generated/assets/themes/sap_belize_hcw/parameters-bundle.css.json +1 -0
  151. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  152. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  153. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -0
  154. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -0
  155. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -0
  156. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -0
  157. package/dist/generated/i18n/i18n-defaults.js +2 -2
  158. package/dist/generated/json-imports/Themes-static.js +35 -0
  159. package/dist/generated/json-imports/Themes.js +23 -13
  160. package/dist/generated/json-imports/i18n-static.js +162 -0
  161. package/dist/generated/json-imports/i18n.js +113 -89
  162. package/dist/generated/templates/AvatarGroupTemplate.lit.js +9 -0
  163. package/dist/generated/templates/AvatarTemplate.lit.js +9 -9
  164. package/dist/generated/templates/BadgeTemplate.lit.js +5 -6
  165. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js +8 -0
  166. package/dist/generated/templates/BreadcrumbsTemplate.lit.js +9 -0
  167. package/dist/generated/templates/BusyIndicatorTemplate.lit.js +7 -5
  168. package/dist/generated/templates/ButtonTemplate.lit.js +6 -6
  169. package/dist/generated/templates/CalendarHeaderTemplate.lit.js +6 -4
  170. package/dist/generated/templates/CalendarTemplate.lit.js +4 -4
  171. package/dist/generated/templates/CardHeaderTemplate.lit.js +12 -0
  172. package/dist/generated/templates/CardTemplate.lit.js +5 -8
  173. package/dist/generated/templates/CarouselTemplate.lit.js +16 -0
  174. package/dist/generated/templates/CheckBoxTemplate.lit.js +7 -7
  175. package/dist/generated/templates/ColorPaletteDialogTemplate.lit.js +7 -0
  176. package/dist/generated/templates/ColorPaletteItemTemplate.lit.js +7 -0
  177. package/dist/generated/templates/ColorPalettePopoverTemplate.lit.js +8 -0
  178. package/dist/generated/templates/ColorPaletteTemplate.lit.js +12 -0
  179. package/dist/generated/templates/ColorPickerTemplate.lit.js +7 -0
  180. package/dist/generated/templates/ComboBoxPopoverTemplate.lit.js +20 -5
  181. package/dist/generated/templates/ComboBoxTemplate.lit.js +8 -5
  182. package/dist/generated/templates/CustomListItemTemplate.lit.js +13 -12
  183. package/dist/generated/templates/DatePickerPopoverTemplate.lit.js +7 -4
  184. package/dist/generated/templates/DatePickerTemplate.lit.js +6 -5
  185. package/dist/generated/templates/DateTimePickerPopoverTemplate.lit.js +12 -0
  186. package/dist/generated/templates/DayPickerTemplate.lit.js +13 -11
  187. package/dist/generated/templates/DialogTemplate.lit.js +9 -8
  188. package/dist/generated/templates/FileUploaderPopoverTemplate.lit.js +10 -0
  189. package/dist/generated/templates/FileUploaderTemplate.lit.js +10 -0
  190. package/dist/generated/templates/GroupHeaderListItemTemplate.lit.js +4 -4
  191. package/dist/generated/templates/IconTemplate.lit.js +6 -6
  192. package/dist/generated/templates/InputPopoverTemplate.lit.js +24 -6
  193. package/dist/generated/templates/InputTemplate.lit.js +9 -8
  194. package/dist/generated/templates/LabelTemplate.lit.js +4 -4
  195. package/dist/generated/templates/LinkTemplate.lit.js +5 -5
  196. package/dist/generated/templates/ListItemTemplate.lit.js +13 -12
  197. package/dist/generated/templates/ListTemplate.lit.js +12 -8
  198. package/dist/generated/templates/MessageStripTemplate.lit.js +6 -22
  199. package/dist/generated/templates/MonthPickerTemplate.lit.js +6 -6
  200. package/dist/generated/templates/MultiComboBoxPopoverTemplate.lit.js +23 -7
  201. package/dist/generated/templates/MultiComboBoxTemplate.lit.js +10 -8
  202. package/dist/generated/templates/MultiInputTemplate.lit.js +16 -0
  203. package/dist/generated/templates/PanelTemplate.lit.js +9 -6
  204. package/dist/generated/templates/PopoverTemplate.lit.js +9 -9
  205. package/dist/generated/templates/PopupBlockLayerTemplate.lit.js +7 -0
  206. package/dist/generated/templates/PopupTemplate.lit.js +4 -4
  207. package/dist/generated/templates/ProgressIndicatorTemplate.lit.js +17 -0
  208. package/dist/generated/templates/RadioButtonTemplate.lit.js +7 -7
  209. package/dist/generated/templates/RangeSliderTemplate.lit.js +13 -0
  210. package/dist/generated/templates/RatingIndicatorTemplate.lit.js +14 -0
  211. package/dist/generated/templates/ResponsivePopoverTemplate.lit.js +16 -11
  212. package/dist/generated/templates/SegmentedButtonItemTemplate.lit.js +8 -0
  213. package/dist/generated/templates/SegmentedButtonTemplate.lit.js +7 -0
  214. package/dist/generated/templates/SelectPopoverTemplate.lit.js +20 -6
  215. package/dist/generated/templates/SelectTemplate.lit.js +6 -4
  216. package/dist/generated/templates/SliderBaseTemplate.lit.js +11 -0
  217. package/dist/generated/templates/SliderTemplate.lit.js +12 -0
  218. package/dist/generated/templates/StandardListItemTemplate.lit.js +21 -18
  219. package/dist/generated/templates/StepInputTemplate.lit.js +10 -0
  220. package/dist/generated/templates/SuggestionListItemTemplate.lit.js +27 -0
  221. package/dist/generated/templates/SwitchTemplate.lit.js +8 -6
  222. package/dist/generated/templates/TabContainerPopoverTemplate.lit.js +6 -8
  223. package/dist/generated/templates/TabContainerTemplate.lit.js +16 -18
  224. package/dist/generated/templates/TabInOverflowTemplate.lit.js +9 -0
  225. package/dist/generated/templates/TabInStripTemplate.lit.js +11 -0
  226. package/dist/generated/templates/TabSeparatorTemplate.lit.js +4 -4
  227. package/dist/generated/templates/TabTemplate.lit.js +4 -4
  228. package/dist/generated/templates/TableCellTemplate.lit.js +4 -4
  229. package/dist/generated/templates/TableColumnTemplate.lit.js +4 -4
  230. package/dist/generated/templates/TableGroupRowTemplate.lit.js +7 -0
  231. package/dist/generated/templates/TableRowTemplate.lit.js +12 -6
  232. package/dist/generated/templates/TableTemplate.lit.js +13 -8
  233. package/dist/generated/templates/TextAreaPopoverTemplate.lit.js +11 -0
  234. package/dist/generated/templates/TextAreaTemplate.lit.js +8 -8
  235. package/dist/generated/templates/TimePickerPopoverTemplate.lit.js +7 -0
  236. package/dist/generated/templates/TimePickerTemplate.lit.js +9 -0
  237. package/dist/generated/templates/TimeSelectionTemplate.lit.js +11 -0
  238. package/dist/generated/templates/TitleTemplate.lit.js +10 -10
  239. package/dist/generated/templates/ToastTemplate.lit.js +5 -4
  240. package/dist/generated/templates/ToggleButtonTemplate.lit.js +6 -6
  241. package/dist/generated/templates/TokenTemplate.lit.js +7 -5
  242. package/dist/generated/templates/TokenizerPopoverTemplate.lit.js +12 -0
  243. package/dist/generated/templates/TokenizerTemplate.lit.js +6 -6
  244. package/dist/generated/templates/TreeListItemTemplate.lit.js +21 -0
  245. package/dist/generated/templates/TreeTemplate.lit.js +8 -0
  246. package/dist/generated/templates/WheelSliderTemplate.lit.js +10 -0
  247. package/dist/generated/templates/YearPickerTemplate.lit.js +6 -6
  248. package/dist/generated/themes/Avatar.css.js +6 -7
  249. package/dist/generated/themes/AvatarGroup.css.js +8 -0
  250. package/dist/generated/themes/Badge.css.js +6 -7
  251. package/dist/generated/themes/Breadcrumbs.css.js +8 -0
  252. package/dist/generated/themes/BreadcrumbsPopover.css.js +8 -0
  253. package/dist/generated/themes/BrowserScrollbar.css.js +8 -0
  254. package/dist/generated/themes/BusyIndicator.css.js +6 -7
  255. package/dist/generated/themes/Button.css.js +6 -7
  256. package/dist/generated/themes/Button.ie11.css.js +8 -0
  257. package/dist/generated/themes/Calendar.css.js +6 -7
  258. package/dist/generated/themes/CalendarHeader.css.js +6 -7
  259. package/dist/generated/themes/Card.css.js +6 -7
  260. package/dist/generated/themes/CardHeader.css.js +8 -0
  261. package/dist/generated/themes/Carousel.css.js +8 -0
  262. package/dist/generated/themes/CheckBox.css.js +6 -7
  263. package/dist/generated/themes/ColorPalette.css.js +8 -0
  264. package/dist/generated/themes/ColorPaletteItem.css.js +8 -0
  265. package/dist/generated/themes/ColorPalettePopover.css.js +8 -0
  266. package/dist/generated/themes/ColorPaletteStaticArea.css.js +8 -0
  267. package/dist/generated/themes/ColorPicker.css.js +8 -0
  268. package/dist/generated/themes/ComboBox.css.js +6 -7
  269. package/dist/generated/themes/ComboBoxPopover.css.js +6 -7
  270. package/dist/generated/themes/CustomListItem.css.js +6 -7
  271. package/dist/generated/themes/DatePicker.css.js +6 -7
  272. package/dist/generated/themes/DatePickerPopover.css.js +6 -7
  273. package/dist/generated/themes/DateRangePicker.css.js +8 -0
  274. package/dist/generated/themes/DateTimePicker.css.js +8 -0
  275. package/dist/generated/themes/DateTimePickerPopover.css.js +8 -0
  276. package/dist/generated/themes/DayPicker.css.js +6 -7
  277. package/dist/generated/themes/Dialog.css.js +6 -7
  278. package/dist/generated/themes/FileUploader.css.js +8 -0
  279. package/dist/generated/themes/GroupHeaderListItem.css.js +6 -7
  280. package/dist/generated/themes/GrowingButton.css.js +8 -0
  281. package/dist/generated/themes/Icon.css.js +6 -7
  282. package/dist/generated/themes/Input.css.js +6 -7
  283. package/dist/generated/themes/InputIcon.css.js +6 -7
  284. package/dist/generated/themes/InvisibleTextStyles.css.js +6 -7
  285. package/dist/generated/themes/Label.css.js +6 -7
  286. package/dist/generated/themes/Link.css.js +6 -7
  287. package/dist/generated/themes/List.css.js +6 -7
  288. package/dist/generated/themes/ListItem.css.js +6 -7
  289. package/dist/generated/themes/ListItemBase.css.js +6 -7
  290. package/dist/generated/themes/MessageStrip.css.js +6 -7
  291. package/dist/generated/themes/MonthPicker.css.js +6 -7
  292. package/dist/generated/themes/MultiComboBox.css.js +6 -7
  293. package/dist/generated/themes/MultiInput.css.js +8 -0
  294. package/dist/generated/themes/Panel.css.js +6 -7
  295. package/dist/generated/themes/Popover.css.js +6 -7
  296. package/dist/generated/themes/Popup.css.js +6 -7
  297. package/dist/generated/themes/PopupGlobal.css.js +8 -0
  298. package/dist/generated/themes/PopupStaticAreaStyles.css.js +8 -0
  299. package/dist/generated/themes/PopupsCommon.css.js +8 -0
  300. package/dist/generated/themes/ProgressIndicator.css.js +8 -0
  301. package/dist/generated/themes/RadioButton.css.js +6 -7
  302. package/dist/generated/themes/RatingIndicator.css.js +8 -0
  303. package/dist/generated/themes/ResponsivePopover.css.js +6 -7
  304. package/dist/generated/themes/ResponsivePopoverCommon.css.js +6 -7
  305. package/dist/generated/themes/SegmentedButton.css.js +8 -0
  306. package/dist/generated/themes/Select.css.js +6 -7
  307. package/dist/generated/themes/SelectPopover.css.js +8 -0
  308. package/dist/generated/themes/SliderBase.css.js +8 -0
  309. package/dist/generated/themes/StepInput.css.js +8 -0
  310. package/dist/generated/themes/Suggestions.css.js +8 -0
  311. package/dist/generated/themes/Switch.css.js +6 -7
  312. package/dist/generated/themes/Tab.css.js +6 -7
  313. package/dist/generated/themes/TabContainer.css.js +6 -7
  314. package/dist/generated/themes/TabInOverflow.css.js +8 -0
  315. package/dist/generated/themes/TabInStrip.css.js +8 -0
  316. package/dist/generated/themes/Table.css.js +6 -7
  317. package/dist/generated/themes/TableCell.css.js +6 -7
  318. package/dist/generated/themes/TableColumn.css.js +6 -7
  319. package/dist/generated/themes/TableGroupRow.css.js +8 -0
  320. package/dist/generated/themes/TableRow.css.js +6 -7
  321. package/dist/generated/themes/TapHighlightColor.css.js +8 -0
  322. package/dist/generated/themes/TextArea.css.js +6 -7
  323. package/dist/generated/themes/TimePicker.css.js +8 -0
  324. package/dist/generated/themes/TimePickerPopover.css.js +8 -0
  325. package/dist/generated/themes/TimeSelection.css.js +8 -0
  326. package/dist/generated/themes/Title.css.js +6 -7
  327. package/dist/generated/themes/Toast.css.js +6 -7
  328. package/dist/generated/themes/ToggleButton.css.js +6 -7
  329. package/dist/generated/themes/ToggleButton.ie11.css.js +8 -0
  330. package/dist/generated/themes/Token.css.js +6 -7
  331. package/dist/generated/themes/Tokenizer.css.js +6 -7
  332. package/dist/generated/themes/Tree.css.js +8 -0
  333. package/dist/generated/themes/TreeListItem.css.js +8 -0
  334. package/dist/generated/themes/ValueStateMessage.css.js +8 -0
  335. package/dist/generated/themes/WheelSlider.css.js +8 -0
  336. package/dist/generated/themes/YearPicker.css.js +6 -7
  337. package/dist/generated/themes/sap_belize/parameters-bundle.css.js +1 -1
  338. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js +1 -1
  339. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js +1 -0
  340. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  341. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  342. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -0
  343. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -0
  344. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -0
  345. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -0
  346. package/dist/i18n/messagebundle.properties +335 -0
  347. package/dist/i18n/messagebundle_ar.properties +224 -0
  348. package/dist/i18n/messagebundle_bg.properties +224 -0
  349. package/dist/i18n/messagebundle_ca.properties +224 -0
  350. package/dist/i18n/messagebundle_cs.properties +224 -0
  351. package/dist/i18n/messagebundle_cy.properties +224 -0
  352. package/dist/i18n/messagebundle_da.properties +224 -0
  353. package/dist/i18n/messagebundle_de.properties +224 -0
  354. package/dist/i18n/messagebundle_el.properties +224 -0
  355. package/dist/i18n/messagebundle_en.properties +224 -0
  356. package/dist/i18n/messagebundle_en_GB.properties +224 -0
  357. package/dist/i18n/messagebundle_en_US_sappsd.properties +224 -0
  358. package/dist/i18n/messagebundle_en_US_saprigi.properties +224 -0
  359. package/dist/i18n/messagebundle_en_US_saptrc.properties +224 -0
  360. package/dist/i18n/messagebundle_es.properties +224 -0
  361. package/dist/i18n/messagebundle_es_MX.properties +224 -0
  362. package/dist/i18n/messagebundle_et.properties +224 -0
  363. package/dist/i18n/messagebundle_fi.properties +224 -0
  364. package/dist/i18n/messagebundle_fr.properties +224 -0
  365. package/dist/i18n/messagebundle_fr_CA.properties +224 -0
  366. package/dist/i18n/messagebundle_hi.properties +224 -0
  367. package/dist/i18n/messagebundle_hr.properties +224 -0
  368. package/dist/i18n/messagebundle_hu.properties +224 -0
  369. package/dist/i18n/messagebundle_id.properties +224 -0
  370. package/dist/i18n/messagebundle_in.properties +172 -0
  371. package/dist/i18n/messagebundle_it.properties +224 -0
  372. package/dist/i18n/messagebundle_iw.properties +224 -0
  373. package/dist/i18n/messagebundle_ja.properties +224 -0
  374. package/dist/i18n/messagebundle_kk.properties +224 -0
  375. package/dist/i18n/messagebundle_ko.properties +224 -0
  376. package/dist/i18n/messagebundle_lt.properties +224 -0
  377. package/dist/i18n/messagebundle_lv.properties +224 -0
  378. package/dist/i18n/messagebundle_ms.properties +224 -0
  379. package/dist/i18n/messagebundle_nl.properties +224 -0
  380. package/dist/i18n/messagebundle_no.properties +224 -0
  381. package/dist/i18n/messagebundle_pl.properties +224 -0
  382. package/dist/i18n/messagebundle_pt.properties +224 -0
  383. package/dist/i18n/messagebundle_pt_PT.properties +224 -0
  384. package/dist/i18n/messagebundle_ro.properties +224 -0
  385. package/dist/i18n/messagebundle_ru.properties +224 -0
  386. package/dist/i18n/messagebundle_sh.properties +224 -0
  387. package/dist/i18n/messagebundle_sk.properties +224 -0
  388. package/dist/i18n/messagebundle_sl.properties +224 -0
  389. package/dist/i18n/messagebundle_sv.properties +224 -0
  390. package/dist/i18n/messagebundle_th.properties +224 -0
  391. package/dist/i18n/messagebundle_tr.properties +224 -0
  392. package/dist/i18n/messagebundle_uk.properties +224 -0
  393. package/dist/i18n/messagebundle_vi.properties +224 -0
  394. package/dist/i18n/messagebundle_zh_CN.properties +224 -0
  395. package/dist/i18n/messagebundle_zh_TW.properties +224 -0
  396. package/dist/popup-utils/OpenedPopupsRegistry.js +18 -13
  397. package/dist/popup-utils/PopoverRegistry.js +55 -21
  398. package/dist/timepicker-utils/TimeSlider.js +103 -0
  399. package/dist/types/{AvatarBackgroundColor.js → AvatarColorScheme.js} +9 -9
  400. package/dist/types/AvatarGroupType.js +43 -0
  401. package/dist/types/AvatarShape.js +1 -1
  402. package/dist/types/AvatarSize.js +1 -1
  403. package/dist/types/BreadcrumbsDesign.js +42 -0
  404. package/dist/types/BreadcrumbsSeparatorStyle.js +69 -0
  405. package/dist/types/BusyIndicatorSize.js +1 -1
  406. package/dist/types/ButtonDesign.js +8 -1
  407. package/dist/types/CalendarSelectionMode.js +47 -0
  408. package/dist/types/CarouselArrowsPlacement.js +40 -0
  409. package/dist/types/GrowingMode.js +48 -0
  410. package/dist/types/InputType.js +7 -7
  411. package/dist/types/LinkDesign.js +1 -1
  412. package/dist/types/ListGrowingMode.js +15 -0
  413. package/dist/types/ListItemType.js +8 -1
  414. package/dist/types/ListMode.js +9 -1
  415. package/dist/types/ListSeparators.js +1 -1
  416. package/dist/types/{MessageStripType.js → MessageStripDesign.js} +7 -7
  417. package/dist/types/PanelAccessibleRole.js +1 -1
  418. package/dist/types/PopoverHorizontalAlign.js +1 -1
  419. package/dist/types/PopoverPlacementType.js +2 -2
  420. package/dist/types/PopoverVerticalAlign.js +1 -2
  421. package/dist/types/Priority.js +55 -0
  422. package/dist/types/SemanticColor.js +1 -1
  423. package/dist/types/SwitchDesign.js +40 -0
  424. package/dist/types/TabContainerTabsPlacement.js +40 -0
  425. package/dist/types/TabLayout.js +40 -0
  426. package/dist/types/TableGrowingMode.js +15 -0
  427. package/dist/types/TableMode.js +47 -0
  428. package/dist/types/TableRowType.js +40 -0
  429. package/dist/types/TitleLevel.js +1 -1
  430. package/dist/types/ToastPlacement.js +1 -2
  431. package/dist/types/WrappingType.js +41 -0
  432. package/dist/webcomponentsjs/CHANGELOG.md +61 -0
  433. package/dist/webcomponentsjs/README.md +64 -47
  434. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +38 -38
  435. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +1 -1
  436. package/dist/webcomponentsjs/bundles/webcomponents-pf_dom.js +60 -0
  437. package/dist/webcomponentsjs/bundles/webcomponents-pf_dom.js.map +1 -0
  438. package/dist/webcomponentsjs/bundles/webcomponents-pf_js.js +95 -0
  439. package/dist/webcomponentsjs/bundles/webcomponents-pf_js.js.map +1 -0
  440. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +292 -229
  441. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +1 -1
  442. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +190 -170
  443. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +1 -1
  444. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +151 -132
  445. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +1 -1
  446. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +2 -2
  447. package/dist/webcomponentsjs/webcomponents-bundle.js +302 -230
  448. package/dist/webcomponentsjs/webcomponents-bundle.js.map +1 -1
  449. package/dist/webcomponentsjs/webcomponents-loader.js +49 -28
  450. package/package-scripts.js +1 -0
  451. package/package.json +23 -8
  452. package/src/Assets-static.js +6 -0
  453. package/src/Assets.js +7 -0
  454. package/src/Avatar.hbs +20 -0
  455. package/src/Avatar.js +392 -0
  456. package/src/AvatarGroup.hbs +30 -0
  457. package/src/AvatarGroup.js +603 -0
  458. package/src/Badge.hbs +14 -0
  459. package/src/Badge.js +165 -0
  460. package/src/Breadcrumbs.hbs +42 -0
  461. package/src/Breadcrumbs.js +563 -0
  462. package/src/BreadcrumbsItem.js +109 -0
  463. package/src/BreadcrumbsPopover.hbs +28 -0
  464. package/src/BusyIndicator.hbs +32 -0
  465. package/src/BusyIndicator.js +269 -0
  466. package/src/Button.hbs +45 -0
  467. package/src/Button.js +463 -0
  468. package/src/Calendar.hbs +69 -0
  469. package/src/Calendar.js +489 -0
  470. package/src/CalendarDate.js +45 -0
  471. package/src/CalendarHeader.hbs +54 -0
  472. package/src/CalendarHeader.js +209 -0
  473. package/src/CalendarPart.js +111 -0
  474. package/src/Card.hbs +14 -0
  475. package/src/Card.js +160 -0
  476. package/src/CardHeader.hbs +35 -0
  477. package/src/CardHeader.js +288 -0
  478. package/src/Carousel.hbs +85 -0
  479. package/src/Carousel.js +681 -0
  480. package/src/CheckBox.hbs +44 -0
  481. package/src/CheckBox.js +424 -0
  482. package/src/ColorPalette.hbs +52 -0
  483. package/src/ColorPalette.js +493 -0
  484. package/src/ColorPaletteDialog.hbs +18 -0
  485. package/src/ColorPaletteItem.hbs +11 -0
  486. package/src/ColorPaletteItem.js +137 -0
  487. package/src/ColorPalettePopover.hbs +29 -0
  488. package/src/ColorPalettePopover.js +219 -0
  489. package/src/ColorPicker.hbs +98 -0
  490. package/src/ColorPicker.js +524 -0
  491. package/src/ComboBox.hbs +49 -0
  492. package/src/ComboBox.js +1041 -0
  493. package/src/ComboBoxFilters.js +40 -0
  494. package/src/ComboBoxGroupItem.js +70 -0
  495. package/src/ComboBoxItem.js +49 -0
  496. package/src/ComboBoxPopover.hbs +125 -0
  497. package/src/CustomListItem.hbs +5 -0
  498. package/src/CustomListItem.js +99 -0
  499. package/src/DateComponentBase.js +170 -0
  500. package/src/DatePicker.hbs +44 -0
  501. package/src/DatePicker.js +823 -0
  502. package/src/DatePickerPopover.hbs +63 -0
  503. package/src/DateRangePicker.js +328 -0
  504. package/src/DateTimePicker.js +430 -0
  505. package/src/DateTimePickerPopover.hbs +74 -0
  506. package/src/DayPicker.hbs +66 -0
  507. package/src/DayPicker.js +754 -0
  508. package/src/Dialog.hbs +35 -0
  509. package/src/Dialog.js +601 -0
  510. package/src/DurationPicker.js +312 -0
  511. package/src/FileUploader.hbs +40 -0
  512. package/src/FileUploader.js +532 -0
  513. package/src/FileUploaderPopover.hbs +25 -0
  514. package/src/GroupHeaderListItem.hbs +15 -0
  515. package/src/GroupHeaderListItem.js +94 -0
  516. package/src/Icon.hbs +25 -0
  517. package/src/Icon.js +373 -0
  518. package/src/Input.hbs +78 -0
  519. package/src/Input.js +1381 -0
  520. package/src/InputPopover.hbs +118 -0
  521. package/src/Interfaces.js +192 -0
  522. package/src/Label.hbs +13 -0
  523. package/src/Label.js +152 -0
  524. package/src/Link.hbs +20 -0
  525. package/src/Link.js +349 -0
  526. package/src/List.hbs +89 -0
  527. package/src/List.js +1056 -0
  528. package/src/ListItem.hbs +102 -0
  529. package/src/ListItem.js +371 -0
  530. package/src/ListItemBase.js +179 -0
  531. package/src/MessageStrip.hbs +34 -0
  532. package/src/MessageStrip.js +227 -0
  533. package/src/MonthPicker.hbs +29 -0
  534. package/src/MonthPicker.js +299 -0
  535. package/src/MultiComboBox.hbs +78 -0
  536. package/src/MultiComboBox.js +1091 -0
  537. package/src/MultiComboBoxItem.js +43 -0
  538. package/src/MultiComboBoxPopover.hbs +133 -0
  539. package/src/MultiInput.hbs +41 -0
  540. package/src/MultiInput.js +301 -0
  541. package/src/Option.js +115 -0
  542. package/src/Panel.hbs +63 -0
  543. package/src/Panel.js +462 -0
  544. package/src/Popover.hbs +25 -0
  545. package/src/Popover.js +786 -0
  546. package/src/Popup.hbs +34 -0
  547. package/src/Popup.js +567 -0
  548. package/src/PopupBlockLayer.hbs +7 -0
  549. package/src/ProgressIndicator.hbs +35 -0
  550. package/src/ProgressIndicator.js +235 -0
  551. package/src/RadioButton.hbs +33 -0
  552. package/src/RadioButton.js +494 -0
  553. package/src/RadioButtonGroup.js +205 -0
  554. package/src/RangeSlider.hbs +70 -0
  555. package/src/RangeSlider.js +769 -0
  556. package/src/RatingIndicator.hbs +33 -0
  557. package/src/RatingIndicator.js +291 -0
  558. package/src/ResponsivePopover.hbs +39 -0
  559. package/src/ResponsivePopover.js +206 -0
  560. package/src/SegmentedButton.hbs +17 -0
  561. package/src/SegmentedButton.js +290 -0
  562. package/src/SegmentedButtonItem.hbs +42 -0
  563. package/src/SegmentedButtonItem.js +109 -0
  564. package/src/Select.hbs +45 -0
  565. package/src/Select.js +834 -0
  566. package/src/SelectPopover.hbs +89 -0
  567. package/src/Slider.hbs +42 -0
  568. package/src/Slider.js +320 -0
  569. package/src/SliderBase.hbs +38 -0
  570. package/src/SliderBase.js +842 -0
  571. package/src/StandardListItem.hbs +44 -0
  572. package/src/StandardListItem.js +191 -0
  573. package/src/StepInput.hbs +80 -0
  574. package/src/StepInput.js +684 -0
  575. package/src/SuggestionGroupItem.js +64 -0
  576. package/src/SuggestionItem.js +146 -0
  577. package/src/SuggestionListItem.hbs +33 -0
  578. package/src/SuggestionListItem.js +76 -0
  579. package/src/Switch.hbs +50 -0
  580. package/src/Switch.js +262 -0
  581. package/src/Tab.hbs +3 -0
  582. package/src/Tab.js +334 -0
  583. package/src/TabContainer.hbs +93 -0
  584. package/src/TabContainer.js +679 -0
  585. package/src/TabContainerPopover.hbs +24 -0
  586. package/src/TabInOverflow.hbs +22 -0
  587. package/src/TabInStrip.hbs +43 -0
  588. package/src/TabSeparator.hbs +1 -0
  589. package/src/TabSeparator.js +44 -0
  590. package/src/Table.hbs +99 -0
  591. package/src/Table.js +761 -0
  592. package/src/TableCell.hbs +7 -0
  593. package/src/TableCell.js +88 -0
  594. package/src/TableColumn.hbs +8 -0
  595. package/src/TableColumn.js +136 -0
  596. package/src/TableGroupRow.hbs +12 -0
  597. package/src/TableGroupRow.js +160 -0
  598. package/src/TableRow.hbs +61 -0
  599. package/src/TableRow.js +388 -0
  600. package/src/TextArea.hbs +50 -0
  601. package/src/TextArea.js +691 -0
  602. package/src/TextAreaPopover.hbs +28 -0
  603. package/src/TimePicker.hbs +35 -0
  604. package/src/TimePicker.js +166 -0
  605. package/src/TimePickerBase.js +463 -0
  606. package/src/TimePickerPopover.hbs +34 -0
  607. package/src/TimeSelection.hbs +60 -0
  608. package/src/TimeSelection.js +493 -0
  609. package/src/Title.hbs +47 -0
  610. package/src/Title.js +132 -0
  611. package/src/Toast.hbs +13 -0
  612. package/src/Toast.js +243 -0
  613. package/src/ToggleButton.hbs +5 -0
  614. package/src/ToggleButton.js +84 -0
  615. package/src/Token.hbs +30 -0
  616. package/src/Token.js +219 -0
  617. package/src/Tokenizer.hbs +27 -0
  618. package/src/Tokenizer.js +414 -0
  619. package/src/TokenizerPopover.hbs +50 -0
  620. package/src/Tree.hbs +42 -0
  621. package/src/Tree.js +443 -0
  622. package/src/TreeItem.js +168 -0
  623. package/src/TreeListItem.hbs +48 -0
  624. package/src/TreeListItem.js +332 -0
  625. package/src/WheelSlider.hbs +48 -0
  626. package/src/WheelSlider.js +435 -0
  627. package/src/YearPicker.hbs +27 -0
  628. package/src/YearPicker.js +324 -0
  629. package/src/features/ColorPaletteMoreColors.js +42 -0
  630. package/src/features/InputElementsFormSupport.js +88 -0
  631. package/src/features/InputSuggestions.js +530 -0
  632. package/src/i18n/messagebundle.properties +335 -0
  633. package/src/i18n/messagebundle_ar.properties +224 -0
  634. package/src/i18n/messagebundle_bg.properties +224 -0
  635. package/src/i18n/messagebundle_ca.properties +224 -0
  636. package/src/i18n/messagebundle_cs.properties +224 -0
  637. package/src/i18n/messagebundle_cy.properties +224 -0
  638. package/src/i18n/messagebundle_da.properties +224 -0
  639. package/src/i18n/messagebundle_de.properties +224 -0
  640. package/src/i18n/messagebundle_el.properties +224 -0
  641. package/src/i18n/messagebundle_en.properties +224 -0
  642. package/src/i18n/messagebundle_en_GB.properties +224 -0
  643. package/src/i18n/messagebundle_en_US_sappsd.properties +224 -0
  644. package/src/i18n/messagebundle_en_US_saprigi.properties +224 -0
  645. package/src/i18n/messagebundle_en_US_saptrc.properties +224 -0
  646. package/src/i18n/messagebundle_es.properties +224 -0
  647. package/src/i18n/messagebundle_es_MX.properties +224 -0
  648. package/src/i18n/messagebundle_et.properties +224 -0
  649. package/src/i18n/messagebundle_fi.properties +224 -0
  650. package/src/i18n/messagebundle_fr.properties +224 -0
  651. package/src/i18n/messagebundle_fr_CA.properties +224 -0
  652. package/src/i18n/messagebundle_hi.properties +224 -0
  653. package/src/i18n/messagebundle_hr.properties +224 -0
  654. package/src/i18n/messagebundle_hu.properties +224 -0
  655. package/src/i18n/messagebundle_id.properties +224 -0
  656. package/src/i18n/messagebundle_in.properties +172 -0
  657. package/src/i18n/messagebundle_it.properties +224 -0
  658. package/src/i18n/messagebundle_iw.properties +224 -0
  659. package/src/i18n/messagebundle_ja.properties +224 -0
  660. package/src/i18n/messagebundle_kk.properties +224 -0
  661. package/src/i18n/messagebundle_ko.properties +224 -0
  662. package/src/i18n/messagebundle_lt.properties +224 -0
  663. package/src/i18n/messagebundle_lv.properties +224 -0
  664. package/src/i18n/messagebundle_ms.properties +224 -0
  665. package/src/i18n/messagebundle_nl.properties +224 -0
  666. package/src/i18n/messagebundle_no.properties +224 -0
  667. package/src/i18n/messagebundle_pl.properties +224 -0
  668. package/src/i18n/messagebundle_pt.properties +224 -0
  669. package/src/i18n/messagebundle_pt_PT.properties +224 -0
  670. package/src/i18n/messagebundle_ro.properties +224 -0
  671. package/src/i18n/messagebundle_ru.properties +224 -0
  672. package/src/i18n/messagebundle_sh.properties +224 -0
  673. package/src/i18n/messagebundle_sk.properties +224 -0
  674. package/src/i18n/messagebundle_sl.properties +224 -0
  675. package/src/i18n/messagebundle_sv.properties +224 -0
  676. package/src/i18n/messagebundle_th.properties +224 -0
  677. package/src/i18n/messagebundle_tr.properties +224 -0
  678. package/src/i18n/messagebundle_uk.properties +224 -0
  679. package/src/i18n/messagebundle_vi.properties +224 -0
  680. package/src/i18n/messagebundle_zh_CN.properties +224 -0
  681. package/src/i18n/messagebundle_zh_TW.properties +224 -0
  682. package/src/popup-utils/OpenedPopupsRegistry.js +50 -0
  683. package/src/popup-utils/PopoverRegistry.js +145 -0
  684. package/src/timepicker-utils/TimeSlider.js +103 -0
  685. package/src/types/AvatarColorScheme.js +104 -0
  686. package/src/types/AvatarGroupType.js +43 -0
  687. package/src/types/AvatarShape.js +41 -0
  688. package/src/types/AvatarSize.js +67 -0
  689. package/src/types/BreadcrumbsDesign.js +42 -0
  690. package/src/types/BreadcrumbsSeparatorStyle.js +69 -0
  691. package/src/types/BusyIndicatorSize.js +47 -0
  692. package/src/types/ButtonDesign.js +68 -0
  693. package/src/types/CalendarSelectionMode.js +47 -0
  694. package/src/types/CarouselArrowsPlacement.js +40 -0
  695. package/src/types/GrowingMode.js +48 -0
  696. package/src/types/InputType.js +68 -0
  697. package/src/types/LinkDesign.js +47 -0
  698. package/src/types/ListGrowingMode.js +15 -0
  699. package/src/types/ListItemType.js +47 -0
  700. package/src/types/ListMode.js +77 -0
  701. package/src/types/ListSeparators.js +46 -0
  702. package/src/types/MessageStripDesign.js +54 -0
  703. package/src/types/PanelAccessibleRole.js +48 -0
  704. package/src/types/PopoverHorizontalAlign.js +54 -0
  705. package/src/types/PopoverPlacementType.js +54 -0
  706. package/src/types/PopoverVerticalAlign.js +54 -0
  707. package/src/types/Priority.js +55 -0
  708. package/src/types/SemanticColor.js +61 -0
  709. package/src/types/SwitchDesign.js +40 -0
  710. package/src/types/TabContainerTabsPlacement.js +40 -0
  711. package/src/types/TabLayout.js +40 -0
  712. package/src/types/TableGrowingMode.js +15 -0
  713. package/src/types/TableMode.js +47 -0
  714. package/src/types/TableRowType.js +40 -0
  715. package/src/types/TitleLevel.js +68 -0
  716. package/src/types/ToastPlacement.js +91 -0
  717. package/src/types/WrappingType.js +41 -0
  718. package/dist/Timeline.js +0 -81
  719. package/dist/TimelineItem.js +0 -163
  720. package/dist/generated/templates/ComboBoxItemTemplate.lit.js +0 -7
  721. package/dist/generated/templates/TimelineItemTemplate.lit.js +0 -12
  722. package/dist/generated/templates/TimelineTemplate.lit.js +0 -8
  723. package/dist/generated/themes/ComboBoxItem.css.js +0 -9
  724. package/dist/generated/themes/TabContainerPopup.css.js +0 -9
  725. package/dist/generated/themes/Timeline.css.js +0 -9
  726. package/dist/generated/themes/TimelineItem.css.js +0 -9
  727. package/dist/popup-utils/PopupUtils.js +0 -42
  728. package/dist/types/AvatarFitType.js +0 -40
  729. package/dist/webcomponentsjs/package.json +0 -46
  730. package/index.js +0 -2
package/dist/Select.js CHANGED
@@ -6,21 +6,37 @@ import {
6
6
  isDown,
7
7
  isEnter,
8
8
  isEscape,
9
+ isHome,
10
+ isEnd,
9
11
  isShow,
10
- } from "@ui5/webcomponents-base/dist/events/PseudoEvents.js";
12
+ isTabNext,
13
+ isTabPrevious,
14
+ } from "@ui5/webcomponents-base/dist/Keys.js";
15
+ import announce from "@ui5/webcomponents-base/dist/util/InvisibleMessage.js";
16
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
11
17
  import { getFeature } from "@ui5/webcomponents-base/dist/FeaturesRegistry.js";
12
- import { getRTL } from "@ui5/webcomponents-base/dist/config/RTL.js";
18
+ import { getEffectiveAriaLabelText } from "@ui5/webcomponents-base/dist/util/AriaLabelHelper.js";
13
19
  import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
14
- import "@ui5/webcomponents-icons/dist/icons/slim-arrow-down.js";
20
+ import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
21
+ import { isPhone } from "@ui5/webcomponents-base/dist/Device.js";
15
22
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
23
+ import "@ui5/webcomponents-icons/dist/decline.js";
16
24
  import {
25
+ VALUE_STATE_SUCCESS,
26
+ VALUE_STATE_INFORMATION,
27
+ VALUE_STATE_ERROR,
28
+ VALUE_STATE_WARNING,
17
29
  INPUT_SUGGESTIONS_TITLE,
30
+ LIST_ITEM_POSITION,
18
31
  } from "./generated/i18n/i18n-defaults.js";
32
+ import Option from "./Option.js";
19
33
  import Label from "./Label.js";
20
34
  import ResponsivePopover from "./ResponsivePopover.js";
35
+ import Popover from "./Popover.js";
21
36
  import List from "./List.js";
22
37
  import StandardListItem from "./StandardListItem.js";
23
38
  import Icon from "./Icon.js";
39
+ import Button from "./Button.js";
24
40
 
25
41
  // Templates
26
42
  import SelectTemplate from "./generated/templates/SelectTemplate.lit.js";
@@ -29,37 +45,71 @@ import SelectPopoverTemplate from "./generated/templates/SelectPopoverTemplate.l
29
45
  // Styles
30
46
  import selectCss from "./generated/themes/Select.css.js";
31
47
  import ResponsivePopoverCommonCss from "./generated/themes/ResponsivePopoverCommon.css.js";
48
+ import ValueStateMessageCss from "./generated/themes/ValueStateMessage.css.js";
49
+ import SelectPopoverCss from "./generated/themes/SelectPopover.css.js";
32
50
 
33
51
  /**
34
52
  * @public
35
53
  */
36
54
  const metadata = {
37
55
  tag: "ui5-select",
56
+ languageAware: true,
57
+ managedSlots: true,
38
58
  slots: /** @lends sap.ui.webcomponents.main.Select.prototype */ {
39
59
 
40
60
  /**
41
- * Defines the <code>ui5-select</code> options.
61
+ * Defines the component options.
62
+ *
42
63
  * <br><br>
43
64
  * <b>Note:</b> Only one selected option is allowed.
44
65
  * If more than one option is defined as selected, the last one would be considered as the selected one.
66
+ *
45
67
  * <br><br>
46
68
  * <b>Note:</b> Use the <code>ui5-option</code> component to define the desired options.
47
- * @type {HTMLElement[]}
48
- * @slot
69
+ * @type {sap.ui.webcomponents.main.ISelectOption[]}
70
+ * @slot options
49
71
  * @public
50
72
  */
51
73
  "default": {
52
74
  propertyName: "options",
53
75
  type: HTMLElement,
54
- listenFor: { include: ["*"] },
76
+ invalidateOnChildChange: true,
77
+ },
78
+
79
+ /**
80
+ * Defines the value state message that will be displayed as pop up under the component.
81
+ * <br><br>
82
+ *
83
+ * <b>Note:</b> If not specified, a default text (in the respective language) will be displayed.
84
+ * <br>
85
+ * <b>Note:</b> The <code>valueStateMessage</code> would be displayed,
86
+ * when the component is in <code>Information</code>, <code>Warning</code> or <code>Error</code> value state.
87
+ * @type {HTMLElement[]}
88
+ * @since 1.0.0-rc.9
89
+ * @slot
90
+ * @public
91
+ */
92
+ valueStateMessage: {
93
+ type: HTMLElement,
94
+ },
95
+
96
+ /**
97
+ * The slot is used to render native <code>input</code> HTML element within Light DOM to enable form submit,
98
+ * when <code>name</code> property is set.
99
+ * @type {HTMLElement[]}
100
+ * @slot
101
+ * @private
102
+ */
103
+ formSupport: {
104
+ type: HTMLElement,
55
105
  },
56
106
  },
57
107
  properties: /** @lends sap.ui.webcomponents.main.Select.prototype */ {
58
108
 
59
109
  /**
60
- * Defines whether <code>ui5-select</code> is in disabled state.
110
+ * Defines whether the component is in disabled state.
61
111
  * <br><br>
62
- * <b>Note:</b> A disabled <code>ui5-select</code> is noninteractive.
112
+ * <b>Note:</b> A disabled component is noninteractive.
63
113
  *
64
114
  * @type {boolean}
65
115
  * @defaultvalue false
@@ -70,12 +120,14 @@ const metadata = {
70
120
  },
71
121
 
72
122
  /**
73
- * Determines the name with which the <code>ui5-select</code> will be submitted in an HTML form.
74
- * The value of the <code>ui5-select</code> will be the value of the currently selected <code>ui5-option</code>.
123
+ * Determines the name with which the component will be submitted in an HTML form.
124
+ * The value of the component will be the value of the currently selected <code>ui5-option</code>.
75
125
  *
126
+ * <br><br>
76
127
  * <b>Important:</b> For the <code>name</code> property to have effect, you must add the following import to your project:
77
128
  * <code>import "@ui5/webcomponents/dist/features/InputElementsFormSupport.js";</code>
78
129
  *
130
+ * <br><br>
79
131
  * <b>Note:</b> When set, a native <code>input</code> HTML element
80
132
  * will be created inside the <code>ui5-select</code> so that it can be submitted as
81
133
  * part of an HTML form. Do not use this property unless you need to submit a form.
@@ -89,10 +141,18 @@ const metadata = {
89
141
  },
90
142
 
91
143
  /**
92
- * Defines the value state of <code>ui5-select</code>.
93
- * Available options are: <code>None</code>, <code>Success</code>, <code>Warning</code> and <code>Error</code>.
144
+ * Defines the value state of the component.
145
+ * <br><br>
146
+ * Available options are:
147
+ * <ul>
148
+ * <li><code>None</code></li>
149
+ * <li><code>Error</code></li>
150
+ * <li><code>Warning</code></li>
151
+ * <li><code>Success</code></li>
152
+ * <li><code>Information</code></li>
153
+ * </ul>
94
154
  *
95
- * @type {string}
155
+ * @type {ValueState}
96
156
  * @defaultvalue "None"
97
157
  * @public
98
158
  */
@@ -101,6 +161,43 @@ const metadata = {
101
161
  defaultValue: ValueState.None,
102
162
  },
103
163
 
164
+ /**
165
+ * Defines whether the component is required.
166
+ *
167
+ * @since 1.0.0-rc.9
168
+ * @type {boolean}
169
+ * @defaultvalue false
170
+ * @public
171
+ */
172
+ required: {
173
+ type: Boolean,
174
+ },
175
+
176
+ /**
177
+ * Sets the accessible aria name of the component.
178
+ *
179
+ * @type {String}
180
+ * @since 1.0.0-rc.9
181
+ * @public
182
+ * @since 1.0.0-rc.15
183
+ */
184
+ accessibleName: {
185
+ type: String,
186
+ },
187
+
188
+ /**
189
+ * Receives id(or many ids) of the elements that label the select.
190
+ *
191
+ * @type {String}
192
+ * @defaultvalue ""
193
+ * @public
194
+ * @since 1.0.0-rc.15
195
+ */
196
+ accessibleNameRef: {
197
+ type: String,
198
+ defaultValue: "",
199
+ },
200
+
104
201
  _text: {
105
202
  type: String,
106
203
  noAttribute: true,
@@ -118,6 +215,12 @@ const metadata = {
118
215
  type: Boolean,
119
216
  },
120
217
 
218
+ _listWidth: {
219
+ type: Integer,
220
+ defaultValue: 0,
221
+ noAttribute: true,
222
+ },
223
+
121
224
  /**
122
225
  * @private
123
226
  */
@@ -127,10 +230,10 @@ const metadata = {
127
230
  },
128
231
  events: /** @lends sap.ui.webcomponents.main.Select.prototype */ {
129
232
  /**
130
- * Fired when the selected item changes.
233
+ * Fired when the selected option changes.
131
234
  *
132
235
  * @event
133
- * @param {HTMLElement} item the selected item.
236
+ * @param {HTMLElement} selectedOption the selected option.
134
237
  * @public
135
238
  */
136
239
  change: {
@@ -144,16 +247,23 @@ const metadata = {
144
247
  /**
145
248
  * @class
146
249
  *
250
+ * <h3 class="comment-api-title">Overview</h3>
147
251
  * The <code>ui5-select</code> component is used to create a drop-down list.
148
252
  * The items inside the <code>ui5-select</code> define the available options by using the <code>ui5-option</code> component.
149
253
  *
150
254
  * <h3>Keyboard Handling</h3>
151
255
  * The <code>ui5-select</code> provides advanced keyboard handling.
152
- * If the <code>ui5-select</code> is focused,
153
- * you can open or close the drop-down by pressing <code>F4</code>, <code>ALT+UP</code> or <code>ALT+DOWN</code> keys.
154
- * Once the drop-down is opened, you can use the <code>UP</code> and <code>DOWN</code> arrow keys
155
- * to navigate through the available options and select one by pressing the <code>Space</code> or <code>Enter</code> keys.
156
256
  * <br>
257
+ * <ul>
258
+ * <li>[F4, ALT+UP, ALT+DOWN, SPACE, ENTER] - Opens/closes the drop-down.</li>
259
+ * <li>[UP, DOWN] - If the drop-down is closed - changes selection to the next or the previous option. If the drop-down is opened - moves focus to the next or the previous option.</li>
260
+ * <li>[SPACE, ENTER] - If the drop-down is opened - selects the focused option.</li>
261
+ * <li>[ESC] - Closes the drop-down without changing the selection.</li>
262
+ * <li>[HOME] - Navigates to first option</li>
263
+ * <li>[END] - Navigates to the last option</li>
264
+ * </ul>
265
+ * <br>
266
+ *
157
267
  * <h3>ES6 Module Import</h3>
158
268
  * <code>import "@ui5/webcomponents/dist/Select";</code>
159
269
  * <br>
@@ -189,7 +299,7 @@ class Select extends UI5Element {
189
299
  }
190
300
 
191
301
  static get staticAreaStyles() {
192
- return ResponsivePopoverCommonCss;
302
+ return [ResponsivePopoverCommonCss, ValueStateMessageCss, SelectPopoverCss];
193
303
  }
194
304
 
195
305
  constructor() {
@@ -200,7 +310,8 @@ class Select extends UI5Element {
200
310
  this._selectedIndexBeforeOpen = -1;
201
311
  this._escapePressed = false;
202
312
  this._lastSelectedOption = null;
203
- this.i18nBundle = getI18nBundle("@ui5/webcomponents");
313
+ this._typedChars = "";
314
+ this._typingTimeoutID = -1;
204
315
  }
205
316
 
206
317
  onBeforeRendering() {
@@ -208,6 +319,18 @@ class Select extends UI5Element {
208
319
  this._enableFormSupport();
209
320
  }
210
321
 
322
+ onAfterRendering() {
323
+ this.toggleValueStatePopover(this.shouldOpenValueStateMessagePopover);
324
+
325
+ if (this._isPickerOpen) {
326
+ if (!this._listWidth) {
327
+ this._listWidth = this.responsivePopover.offsetWidth;
328
+ }
329
+ }
330
+
331
+ this._attachRealDomRefs();
332
+ }
333
+
211
334
  _onfocusin() {
212
335
  this.focused = true;
213
336
  }
@@ -217,71 +340,94 @@ class Select extends UI5Element {
217
340
  }
218
341
 
219
342
  get _isPickerOpen() {
220
- return this._respPopover && this._respPopover.opened;
343
+ return !!this.responsivePopover && this.responsivePopover.opened;
221
344
  }
222
345
 
223
- get _respPopover() {
224
- return this.getStaticAreaItemDomRef().querySelector("ui5-responsive-popover");
346
+ async _respPopover() {
347
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
348
+ return staticAreaItem.querySelector("[ui5-responsive-popover]");
225
349
  }
226
350
 
227
351
  /**
228
- * Currently selected option
352
+ * Currently selected option.
229
353
  * @readonly
230
354
  * @type { ui5-option }
231
355
  * @public
232
356
  */
233
357
  get selectedOption() {
234
- return this.options.find(option => option.selected);
358
+ return this._filteredItems.find(option => option.selected);
235
359
  }
236
360
 
237
- _toggleRespPopover() {
361
+ async _toggleRespPopover() {
362
+ this._iconPressed = true;
363
+ this.responsivePopover = await this._respPopover();
238
364
  if (this.disabled) {
239
365
  return;
240
366
  }
241
367
 
242
368
  if (this._isPickerOpen) {
243
- this._respPopover.close();
369
+ this.responsivePopover.close();
244
370
  } else {
245
- this._respPopover.open(this);
371
+ this.responsivePopover.showAt(this);
246
372
  }
247
373
  }
248
374
 
375
+ async _attachRealDomRefs() {
376
+ this.responsivePopover = await this._respPopover();
377
+
378
+ this.options.forEach(option => {
379
+ option._getRealDomRef = () => this.responsivePopover.querySelector(`*[data-ui5-stable=${option.stableDomRef}]`);
380
+ });
381
+ }
382
+
249
383
  _syncSelection() {
250
- let lastSelectedOptionIndex = -1;
251
- const opts = this.options.map((opt, index) => {
252
- if (opt.selected) {
384
+ let lastSelectedOptionIndex = -1,
385
+ firstEnabledOptionIndex = -1;
386
+ const options = this._filteredItems;
387
+ const syncOpts = options.map((opt, index) => {
388
+ if (opt.selected || opt.textContent === this.value) {
389
+ // The second condition in the IF statement is added because of Angular Reactive Forms Support(Two way data binding)
253
390
  lastSelectedOptionIndex = index;
254
391
  }
392
+ if (firstEnabledOptionIndex === -1) {
393
+ firstEnabledOptionIndex = index;
394
+ }
255
395
 
256
396
  opt.selected = false;
397
+ opt._focused = false;
257
398
 
258
399
  return {
259
400
  selected: false,
401
+ _focused: false,
260
402
  icon: opt.icon,
261
403
  value: opt.value,
262
404
  textContent: opt.textContent,
263
405
  id: opt._id,
406
+ stableDomRef: opt.stableDomRef,
264
407
  };
265
408
  });
266
409
 
267
- if (lastSelectedOptionIndex > -1) {
268
- opts[lastSelectedOptionIndex].selected = true;
269
- this.options[lastSelectedOptionIndex].selected = true;
270
- this._text = opts[lastSelectedOptionIndex].textContent;
410
+ if (lastSelectedOptionIndex > -1 && !syncOpts[lastSelectedOptionIndex].disabled) {
411
+ syncOpts[lastSelectedOptionIndex].selected = true;
412
+ syncOpts[lastSelectedOptionIndex]._focused = true;
413
+ options[lastSelectedOptionIndex].selected = true;
414
+ options[lastSelectedOptionIndex]._focused = true;
415
+ this._text = syncOpts[lastSelectedOptionIndex].textContent;
271
416
  this._selectedIndex = lastSelectedOptionIndex;
272
417
  } else {
273
418
  this._text = "";
274
419
  this._selectedIndex = -1;
420
+ if (syncOpts[firstEnabledOptionIndex]) {
421
+ syncOpts[firstEnabledOptionIndex].selected = true;
422
+ syncOpts[firstEnabledOptionIndex]._focused = true;
423
+ options[firstEnabledOptionIndex].selected = true;
424
+ options[firstEnabledOptionIndex]._focused = true;
425
+ this._selectedIndex = firstEnabledOptionIndex;
426
+ this._text = options[firstEnabledOptionIndex].textContent;
427
+ }
275
428
  }
276
429
 
277
- if (lastSelectedOptionIndex === -1 && opts[0]) {
278
- opts[0].selected = true;
279
- this.options[0].selected = true;
280
- this._selectedIndex = 0;
281
- this._text = this.options[0].textContent;
282
- }
283
-
284
- this._syncedOptions = opts;
430
+ this._syncedOptions = syncOpts;
285
431
  }
286
432
 
287
433
  _enableFormSupport() {
@@ -289,7 +435,7 @@ class Select extends UI5Element {
289
435
  if (FormSupport) {
290
436
  FormSupport.syncNativeHiddenInput(this, (element, nativeInput) => {
291
437
  nativeInput.disabled = element.disabled;
292
- nativeInput.value = element._currentlySelectedOption.value;
438
+ nativeInput.value = element._currentlySelectedOption ? element._currentlySelectedOption.value : "";
293
439
  });
294
440
  } else if (this.name) {
295
441
  console.warn(`In order for the "name" property to have effect, you should also: import "@ui5/webcomponents/dist/features/InputElementsFormSupport.js";`); // eslint-disable-line
@@ -297,18 +443,99 @@ class Select extends UI5Element {
297
443
  }
298
444
 
299
445
  _onkeydown(event) {
446
+ const isTab = (isTabNext(event) || isTabPrevious(event));
447
+
448
+ if (isTab && this.responsivePopover && this.responsivePopover.opened) {
449
+ this.responsivePopover.close();
450
+ }
451
+
300
452
  if (isShow(event)) {
453
+ event.preventDefault();
301
454
  this._toggleRespPopover();
455
+ } else if (isSpace(event)) {
456
+ event.preventDefault();
457
+ } else if (isEscape(event) && this._isPickerOpen) {
458
+ this._escapePressed = true;
459
+ } else if (isHome(event)) {
460
+ this._handleHomeKey(event);
461
+ } else if (isEnd(event)) {
462
+ this._handleEndKey(event);
463
+ } else if (isEnter(event)) {
464
+ this._handleSelectionChange();
465
+ } else if (isUp(event) || isDown(event)) {
466
+ this._handleArrowNavigation(event);
302
467
  }
468
+ }
303
469
 
304
- if (!this._isPickerOpen) {
305
- this._handleArrowNavigation(event, true);
470
+ _handleKeyboardNavigation(event) {
471
+ if (isEnter(event)) {
472
+ return;
473
+ }
474
+
475
+ const typedCharacter = event.key.toLowerCase();
476
+
477
+ this._typedChars += typedCharacter;
478
+
479
+ // We check if we have more than one characters and they are all duplicate, we set the
480
+ // text to be the last input character (typedCharacter). If not, we set the text to be
481
+ // the whole input string.
482
+
483
+ const text = (/^(.)\1+$/i).test(this._typedChars) ? typedCharacter : this._typedChars;
484
+
485
+ clearTimeout(this._typingTimeoutID);
486
+
487
+ this._typingTimeoutID = setTimeout(() => {
488
+ this._typedChars = "";
489
+ this._typingTimeoutID = -1;
490
+ }, 1000);
491
+
492
+ this._selectTypedItem(text);
493
+ }
494
+
495
+ _selectTypedItem(text) {
496
+ const currentIndex = this._selectedIndex;
497
+ const itemToSelect = this._searchNextItemByText(text);
498
+
499
+ if (itemToSelect) {
500
+ const nextIndex = this._getSelectedItemIndex(itemToSelect);
501
+
502
+ this._changeSelectedItem(this._selectedIndex, nextIndex);
503
+
504
+ if (currentIndex !== this._selectedIndex) {
505
+ this.itemSelectionAnnounce();
506
+ }
306
507
  }
307
508
  }
308
509
 
510
+ _searchNextItemByText(text) {
511
+ let orderedOptions = this._filteredItems.slice(0);
512
+ const optionsAfterSelected = orderedOptions.splice(this._selectedIndex + 1, orderedOptions.length - this._selectedIndex);
513
+ const optionsBeforeSelected = orderedOptions.splice(0, orderedOptions.length - 1);
514
+
515
+ orderedOptions = optionsAfterSelected.concat(optionsBeforeSelected);
516
+
517
+ return orderedOptions.find(option => option.textContent.toLowerCase().startsWith(text));
518
+ }
519
+
520
+ _handleHomeKey(event) {
521
+ event.preventDefault();
522
+ this._changeSelectedItem(this._selectedIndex, 0);
523
+ }
524
+
525
+ _handleEndKey(event) {
526
+ const lastIndex = this._filteredItems.length - 1;
527
+
528
+ event.preventDefault();
529
+ this._changeSelectedItem(this._selectedIndex, lastIndex);
530
+ }
531
+
309
532
  _onkeyup(event) {
310
- if (isSpace(event) && !this._isPickerOpen) {
311
- this._toggleRespPopover();
533
+ if (isSpace(event)) {
534
+ if (this._isPickerOpen) {
535
+ this._handleSelectionChange();
536
+ } else {
537
+ this._toggleRespPopover();
538
+ }
312
539
  }
313
540
  }
314
541
 
@@ -317,63 +544,78 @@ class Select extends UI5Element {
317
544
  }
318
545
 
319
546
  _select(index) {
320
- this.options[this._selectedIndex].selected = false;
547
+ this._filteredItems[this._selectedIndex].selected = false;
321
548
  this._selectedIndex = index;
322
- this.options[index].selected = true;
549
+ this._filteredItems[index].selected = true;
323
550
  }
324
551
 
325
- _selectionChange(event) {
326
- const selectedItemIndex = this._getSelectedItemIndex(event.detail.item);
552
+ /**
553
+ * The user clicked on an item from the list
554
+ * @private
555
+ */
556
+ _handleItemPress(event) {
557
+ const item = event.detail.item;
558
+ const selectedItemIndex = this._getSelectedItemIndex(item);
327
559
 
328
- this._select(selectedItemIndex);
329
- this._toggleRespPopover();
560
+ this._handleSelectionChange(selectedItemIndex);
330
561
  }
331
562
 
332
- _applyFocusAfterOpen() {
333
- this._toggleIcon();
334
-
335
- if (!this._currentlySelectedOption) {
336
- return;
337
- }
338
-
339
- const li = this._respPopover.querySelector(`#${this._currentlySelectedOption._id}-li`);
563
+ _itemMousedown(event) {
564
+ // prevent actual focus of items
565
+ event.preventDefault();
566
+ }
340
567
 
341
- li.parentElement._itemNavigation.currentIndex = this._selectedIndex;
342
- li && li.focus();
568
+ _onclick(event) {
569
+ this.getFocusDomRef().focus();
570
+ this._toggleRespPopover();
343
571
  }
344
572
 
345
- _handlePickerKeydown(event) {
346
- this._handleArrowNavigation(event, false);
573
+ /**
574
+ * The user selected an item with Enter or Space
575
+ * @private
576
+ */
577
+ _handleSelectionChange(index = this._selectedIndex) {
578
+ this._select(index);
579
+
580
+ this._toggleRespPopover();
347
581
  }
348
582
 
349
- _handleArrowNavigation(event, shouldFireEvent) {
583
+ _handleArrowNavigation(event) {
350
584
  let nextIndex = -1;
585
+ const currentIndex = this._selectedIndex;
351
586
  const isDownKey = isDown(event);
352
- const isUpKey = isUp(event);
353
587
 
354
- if (isDownKey || isUpKey) {
355
- event.preventDefault();
356
- if (isDownKey) {
357
- nextIndex = this._getNextOptionIndex();
358
- } else {
359
- nextIndex = this._getPreviousOptionIndex();
360
- }
588
+ event.preventDefault();
589
+ if (isDownKey) {
590
+ nextIndex = this._getNextOptionIndex();
591
+ } else {
592
+ nextIndex = this._getPreviousOptionIndex();
593
+ }
361
594
 
362
- this.options[this._selectedIndex].selected = false;
363
- this.options[nextIndex].selected = true;
364
- this._selectedIndex = nextIndex === -1 ? this._selectedIndex : nextIndex;
595
+ this._changeSelectedItem(this._selectedIndex, nextIndex);
365
596
 
366
- if (shouldFireEvent) {
367
- this.fireEvent("change", { selectedOption: this.options[nextIndex] });
368
- }
597
+ if (currentIndex !== this._selectedIndex) {
598
+ // Announce new item even if picker is opened.
599
+ // The aria-activedescendents attribute can't be used,
600
+ // because listitem elements are in different shadow dom
601
+ this.itemSelectionAnnounce();
369
602
  }
603
+ }
370
604
 
371
- if (isEscape(event)) {
372
- this._escapePressed = true;
373
- }
605
+ _changeSelectedItem(oldIndex, newIndex) {
606
+ const options = this._filteredItems;
374
607
 
375
- if (isEnter(event) || isSpace(event)) {
376
- this._shouldClosePopover = true;
608
+ options[oldIndex].selected = false;
609
+ options[oldIndex]._focused = false;
610
+
611
+ options[newIndex].selected = true;
612
+ options[newIndex]._focused = true;
613
+
614
+ this._selectedIndex = newIndex;
615
+
616
+ if (!this._isPickerOpen) {
617
+ // arrow pressed on closed picker - do selection change
618
+ this._fireChangeEvent(options[newIndex]);
377
619
  }
378
620
  }
379
621
 
@@ -387,55 +629,203 @@ class Select extends UI5Element {
387
629
 
388
630
  _beforeOpen() {
389
631
  this._selectedIndexBeforeOpen = this._selectedIndex;
390
- this._lastSelectedOption = this.options[this._selectedIndex];
632
+ this._lastSelectedOption = this._filteredItems[this._selectedIndex];
633
+ }
634
+
635
+ _afterOpen() {
636
+ this.opened = true;
391
637
  }
392
638
 
393
639
  _afterClose() {
394
- this._toggleIcon();
640
+ this.opened = false;
641
+ this._iconPressed = false;
642
+ this._listWidth = 0;
395
643
 
396
644
  if (this._escapePressed) {
397
645
  this._select(this._selectedIndexBeforeOpen);
398
646
  this._escapePressed = false;
399
- } else if (this._lastSelectedOption !== this.options[this._selectedIndex]) {
400
- this.fireEvent("change", { selectedOption: this.options[this._selectedIndex] });
401
- this._lastSelectedOption = this.options[this._selectedIndex];
647
+ } else if (this._lastSelectedOption !== this._filteredItems[this._selectedIndex]) {
648
+ this._fireChangeEvent(this._filteredItems[this._selectedIndex]);
649
+ this._lastSelectedOption = this._filteredItems[this._selectedIndex];
402
650
  }
403
651
  }
404
652
 
405
- _toggleIcon() {
406
- this._iconPressed = !this._iconPressed;
653
+ _fireChangeEvent(selectedOption) {
654
+ this.fireEvent("change", { selectedOption });
655
+
656
+ // Angular two way data binding
657
+ this.selectedItem = selectedOption.textContent;
658
+ this.fireEvent("selected-item-changed");
659
+ }
660
+
661
+ get valueStateTextMappings() {
662
+ return {
663
+ "Success": Select.i18nBundle.getText(VALUE_STATE_SUCCESS),
664
+ "Information": Select.i18nBundle.getText(VALUE_STATE_INFORMATION),
665
+ "Error": Select.i18nBundle.getText(VALUE_STATE_ERROR),
666
+ "Warning": Select.i18nBundle.getText(VALUE_STATE_WARNING),
667
+ };
668
+ }
669
+
670
+ get valueStateText() {
671
+ return this.valueStateTextMappings[this.valueState];
672
+ }
673
+
674
+ get hasValueState() {
675
+ return this.valueState !== ValueState.None;
676
+ }
677
+
678
+ get valueStateTextId() {
679
+ return this.hasValueState ? `${this._id}-valueStateDesc` : undefined;
680
+ }
681
+
682
+ get isDisabled() {
683
+ return this.disabled || undefined;
407
684
  }
408
685
 
409
686
  get _headerTitleText() {
410
- return this.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
687
+ return Select.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
411
688
  }
412
689
 
413
690
  get _currentSelectedItem() {
414
- return this.shadowRoot.querySelector(`#${this.options[this._selectedIndex]._id}-li`);
691
+ return this.shadowRoot.querySelector(`#${this._filteredItems[this._selectedIndex]._id}-li`);
415
692
  }
416
693
 
417
694
  get _currentlySelectedOption() {
418
- return this.options[this._selectedIndex];
695
+ return this._filteredItems[this._selectedIndex];
419
696
  }
420
697
 
421
698
  get tabIndex() {
422
- return this.disabled ? "-1" : "0";
699
+ return this.disabled
700
+ || (this.responsivePopover // Handles focus on Tab/Shift + Tab when the popover is opened
701
+ && this.responsivePopover.opened) ? "-1" : "0";
702
+ }
703
+
704
+ /**
705
+ * This method is relevant for sap_horizon theme only
706
+ */
707
+ get _valueStateMessageInputIcon() {
708
+ const iconPerValueState = {
709
+ Error: "error",
710
+ Warning: "alert",
711
+ Success: "sys-enter-2",
712
+ Information: "information",
713
+ };
714
+
715
+ return this.valueState !== ValueState.None ? iconPerValueState[this.valueState] : "";
716
+ }
717
+
718
+ get classes() {
719
+ return {
720
+ popoverValueState: {
721
+ "ui5-valuestatemessage-root": true,
722
+ "ui5-valuestatemessage--success": this.valueState === ValueState.Success,
723
+ "ui5-valuestatemessage--error": this.valueState === ValueState.Error,
724
+ "ui5-valuestatemessage--warning": this.valueState === ValueState.Warning,
725
+ "ui5-valuestatemessage--information": this.valueState === ValueState.Information,
726
+ },
727
+ popover: {
728
+ "ui5-valuestatemessage-popover": this.hasValueState,
729
+ },
730
+ };
731
+ }
732
+
733
+ get styles() {
734
+ return {
735
+ popoverHeader: {
736
+ "max-width": `${this.offsetWidth}px`,
737
+ },
738
+ responsivePopoverHeader: {
739
+ "display": this._filteredItems.length && this._listWidth === 0 ? "none" : "inline-block",
740
+ "width": `${this._filteredItems.length ? this._listWidth : this.offsetWidth}px`,
741
+ },
742
+ };
743
+ }
744
+
745
+ get ariaLabelText() {
746
+ return getEffectiveAriaLabelText(this);
747
+ }
748
+
749
+ get valueStateMessageText() {
750
+ return this.getSlottedNodes("valueStateMessage").map(el => el.cloneNode(true));
751
+ }
752
+
753
+ get shouldDisplayDefaultValueStateMessage() {
754
+ return !this.valueStateMessage.length && this.hasValueStateText;
755
+ }
756
+
757
+ get hasValueStateText() {
758
+ return this.hasValueState && this.valueState !== ValueState.Success;
423
759
  }
424
760
 
425
- get dir() {
426
- return getRTL() ? "rtl" : "ltr";
761
+ get shouldOpenValueStateMessagePopover() {
762
+ return this.focused && this.hasValueStateText && !this._iconPressed
763
+ && !this._isPickerOpen && !this._isPhone;
427
764
  }
428
765
 
429
- static async define(...params) {
430
- await Promise.all([
431
- Label.define(),
432
- ResponsivePopover.define(),
433
- List.define(),
434
- StandardListItem.define(),
435
- Icon.define(),
436
- ]);
766
+ get _isPhone() {
767
+ return isPhone();
768
+ }
769
+
770
+ get _filteredItems() {
771
+ return this.options.filter(option => !option.disabled);
772
+ }
773
+
774
+ itemSelectionAnnounce() {
775
+ let text;
776
+ const optionsCount = this._filteredItems.length;
777
+ const itemPositionText = Select.i18nBundle.getText(LIST_ITEM_POSITION, this._selectedIndex + 1, optionsCount);
778
+
779
+ if (this.focused && this._currentlySelectedOption) {
780
+ text = `${this._currentlySelectedOption.textContent} ${this._isPickerOpen ? itemPositionText : ""}`;
781
+
782
+ announce(text, "Polite");
783
+ }
784
+ }
785
+
786
+ async openValueStatePopover() {
787
+ this.popover = await this._getPopover();
788
+ if (this.popover) {
789
+ this.popover.showAt(this);
790
+ }
791
+ }
792
+
793
+ closeValueStatePopover() {
794
+ this.popover && this.popover.close();
795
+ }
796
+
797
+ toggleValueStatePopover(open) {
798
+ if (open) {
799
+ this.openValueStatePopover();
800
+ } else {
801
+ this.closeValueStatePopover();
802
+ }
803
+ }
804
+
805
+ get selectedOptionIcon() {
806
+ return this.selectedOption && this.selectedOption.icon;
807
+ }
808
+
809
+ async _getPopover() {
810
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
811
+ return staticAreaItem.querySelector("[ui5-popover]");
812
+ }
813
+
814
+ static get dependencies() {
815
+ return [
816
+ Option,
817
+ Label,
818
+ ResponsivePopover,
819
+ Popover,
820
+ List,
821
+ StandardListItem,
822
+ Icon,
823
+ Button,
824
+ ];
825
+ }
437
826
 
438
- super.define(...params);
827
+ static async onDefine() {
828
+ Select.i18nBundle = await getI18nBundle("@ui5/webcomponents");
439
829
  }
440
830
  }
441
831