@ui5/webcomponents 1.0.0-rc.6 → 1.0.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 (729) hide show
  1. package/CHANGELOG.md +816 -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 +2 -1
  7. package/dist/Avatar.js +222 -37
  8. package/dist/AvatarGroup.js +603 -0
  9. package/dist/Badge.js +44 -22
  10. package/dist/Breadcrumbs.js +573 -0
  11. package/dist/BreadcrumbsItem.js +103 -0
  12. package/dist/BusyIndicator.js +172 -17
  13. package/dist/Button.js +148 -35
  14. package/dist/Calendar.js +342 -546
  15. package/dist/CalendarDate.js +45 -0
  16. package/dist/CalendarHeader.js +133 -62
  17. package/dist/CalendarPart.js +111 -0
  18. package/dist/Card.js +44 -158
  19. package/dist/CardHeader.js +288 -0
  20. package/dist/Carousel.js +432 -78
  21. package/dist/CheckBox.js +150 -50
  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 +626 -90
  27. package/dist/ComboBoxFilters.js +8 -1
  28. package/dist/ComboBoxGroupItem.js +70 -0
  29. package/dist/ComboBoxItem.js +12 -24
  30. package/dist/CustomListItem.js +38 -9
  31. package/dist/DateComponentBase.js +170 -0
  32. package/dist/DatePicker.js +446 -382
  33. package/dist/DateRangePicker.js +328 -0
  34. package/dist/DateTimePicker.js +430 -0
  35. package/dist/DayPicker.js +509 -431
  36. package/dist/Dialog.js +498 -51
  37. package/dist/DurationPicker.js +312 -0
  38. package/dist/FileUploader.js +222 -29
  39. package/dist/GroupHeaderListItem.js +32 -8
  40. package/dist/Icon.js +197 -36
  41. package/dist/Input.js +689 -170
  42. package/dist/Interfaces.js +192 -0
  43. package/dist/Label.js +27 -12
  44. package/dist/Link.js +139 -29
  45. package/dist/List.js +514 -111
  46. package/dist/ListItem.js +124 -20
  47. package/dist/ListItemBase.js +42 -8
  48. package/dist/MessageStrip.js +56 -70
  49. package/dist/MonthPicker.js +180 -182
  50. package/dist/MultiComboBox.js +589 -202
  51. package/dist/MultiComboBoxItem.js +8 -5
  52. package/dist/MultiInput.js +301 -0
  53. package/dist/Option.js +48 -5
  54. package/dist/Panel.js +118 -36
  55. package/dist/Popover.js +286 -234
  56. package/dist/Popup.js +381 -284
  57. package/dist/ProgressIndicator.js +235 -0
  58. package/dist/RadioButton.js +133 -53
  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 +82 -40
  63. package/dist/SegmentedButton.js +137 -51
  64. package/dist/SegmentedButtonItem.js +109 -0
  65. package/dist/Select.js +478 -100
  66. package/dist/Slider.js +320 -0
  67. package/dist/SliderBase.js +842 -0
  68. package/dist/StandardListItem.js +45 -22
  69. package/dist/StepInput.js +684 -0
  70. package/dist/SuggestionGroupItem.js +64 -0
  71. package/dist/SuggestionItem.js +38 -30
  72. package/dist/SuggestionListItem.js +76 -0
  73. package/dist/Switch.js +60 -42
  74. package/dist/Tab.js +181 -15
  75. package/dist/TabContainer.js +296 -230
  76. package/dist/TabSeparator.js +2 -1
  77. package/dist/Table.js +480 -35
  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 +244 -18
  82. package/dist/TextArea.js +311 -36
  83. package/dist/TimePicker.js +56 -683
  84. package/dist/TimePickerBase.js +463 -0
  85. package/dist/TimeSelection.js +493 -0
  86. package/dist/Title.js +17 -10
  87. package/dist/Toast.js +25 -14
  88. package/dist/ToggleButton.js +21 -13
  89. package/dist/Token.js +84 -45
  90. package/dist/Tokenizer.js +246 -64
  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 +227 -77
  95. package/dist/YearPicker.js +199 -255
  96. package/dist/api.json +6871 -1
  97. package/dist/features/ColorPaletteMoreColors.js +42 -0
  98. package/dist/features/InputElementsFormSupport.js +0 -1
  99. package/dist/features/InputSuggestions.js +273 -53
  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 -1
  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 -15
  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 +13 -14
  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 -13
  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 +7 -7
  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 -12
  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 -13
  197. package/dist/generated/templates/ListTemplate.lit.js +12 -9
  198. package/dist/generated/templates/MessageStripTemplate.lit.js +6 -27
  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 +4 -9
  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 -19
  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 -10
  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 +4 -8
  236. package/dist/generated/templates/TimePickerTemplate.lit.js +6 -5
  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 +7 -7
  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 +6 -7
  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 +6 -7
  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 +6 -7
  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 +6 -7
  324. package/dist/generated/themes/TimePickerPopover.css.js +6 -7
  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 +6 -7
  335. package/dist/generated/themes/WheelSlider.css.js +6 -7
  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 -1
  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 +3 -3
  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 +2 -2
  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 +1 -1
  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 -6
  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 +573 -0
  462. package/src/BreadcrumbsItem.js +103 -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 +530 -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 +521 -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 -82
  719. package/dist/TimelineItem.js +0 -161
  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 -55
  728. package/dist/types/AvatarFitType.js +0 -40
  729. package/dist/webcomponentsjs/package.json +0 -46
package/dist/ComboBox.js CHANGED
@@ -1,15 +1,36 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
3
  import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
4
- import { isPhone } from "@ui5/webcomponents-base/dist/Device.js";
5
- import "@ui5/webcomponents-icons/dist/icons/slim-arrow-down.js";
6
- import "@ui5/webcomponents-icons/dist/icons/decline.js";
4
+ import { isPhone, isSafari } from "@ui5/webcomponents-base/dist/Device.js";
5
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
6
+ import { getEffectiveAriaLabelText } from "@ui5/webcomponents-base/dist/util/AriaLabelHelper.js";
7
+ import announce from "@ui5/webcomponents-base/dist/util/InvisibleMessage.js";
8
+ import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
9
+ import "@ui5/webcomponents-icons/dist/decline.js";
10
+ import "@ui5/webcomponents-icons/dist/not-editable.js";
7
11
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
- import { isBackSpace, isDelete, isShow } from "@ui5/webcomponents-base/dist/Keys.js";
12
+ import {
13
+ isBackSpace,
14
+ isDelete,
15
+ isShow,
16
+ isUp,
17
+ isDown,
18
+ isEnter,
19
+ isEscape,
20
+ isTabNext,
21
+ isTabPrevious,
22
+ } from "@ui5/webcomponents-base/dist/Keys.js";
9
23
  import * as Filters from "./ComboBoxFilters.js";
10
24
 
11
25
  import {
26
+ VALUE_STATE_SUCCESS,
27
+ VALUE_STATE_ERROR,
28
+ VALUE_STATE_WARNING,
29
+ VALUE_STATE_INFORMATION,
12
30
  INPUT_SUGGESTIONS_TITLE,
31
+ SELECT_OPTIONS,
32
+ LIST_ITEM_POSITION,
33
+ LIST_ITEM_SELECTED,
13
34
  } from "./generated/i18n/i18n-defaults.js";
14
35
 
15
36
  // Templates
@@ -20,24 +41,28 @@ import ComboBoxPopoverTemplate from "./generated/templates/ComboBoxPopoverTempla
20
41
  import ComboBoxCss from "./generated/themes/ComboBox.css.js";
21
42
  import ComboBoxPopoverCss from "./generated/themes/ComboBoxPopover.css.js";
22
43
  import ResponsivePopoverCommonCss from "./generated/themes/ResponsivePopoverCommon.css.js";
44
+ import ValueStateMessageCss from "./generated/themes/ValueStateMessage.css.js";
45
+ import SuggestionsCss from "./generated/themes/Suggestions.css.js";
23
46
 
24
47
  import ComboBoxItem from "./ComboBoxItem.js";
25
48
  import Icon from "./Icon.js";
49
+ import Popover from "./Popover.js";
26
50
  import ResponsivePopover from "./ResponsivePopover.js";
27
51
  import List from "./List.js";
28
52
  import BusyIndicator from "./BusyIndicator.js";
29
53
  import Button from "./Button.js";
30
54
  import StandardListItem from "./StandardListItem.js";
55
+ import ComboBoxGroupItem from "./ComboBoxGroupItem.js";
31
56
 
32
57
  /**
33
58
  * @public
34
59
  */
35
60
  const metadata = {
36
61
  tag: "ui5-combobox",
37
- defaultSlot: "items",
62
+ languageAware: true,
38
63
  properties: /** @lends sap.ui.webcomponents.main.ComboBox.prototype */ {
39
64
  /**
40
- * Defines the value of the <code>ui5-combobox</code>.
65
+ * Defines the value of the component.
41
66
  *
42
67
  * @type {string}
43
68
  * @defaultvalue ""
@@ -49,16 +74,16 @@ const metadata = {
49
74
  },
50
75
 
51
76
  /**
52
- * Defines the "live" value of the <code>ui5-combobox</code>.
77
+ * Defines the "live" value of the component.
53
78
  * <br><br>
54
- * <b>Note:</b> The property is updated upon typing.
79
+ * <b>Note:</b> If we have an item e.g. "Bulgaria", "B" is typed, "ulgaria" is typed ahead, value will be "Bulgaria", filterValue will be "B".
55
80
  *
56
81
  * <br><br>
57
82
  * <b>Note:</b> Initially the filter value is synced with value.
58
83
  *
59
84
  * @type {string}
60
85
  * @defaultvalue ""
61
- * @public
86
+ * @private
62
87
  */
63
88
  filterValue: {
64
89
  type: String,
@@ -67,7 +92,7 @@ const metadata = {
67
92
 
68
93
  /**
69
94
  * Defines a short hint intended to aid the user with data entry when the
70
- * <code>ui5-combobox</code> has no value.
95
+ * component has no value.
71
96
  * @type {string}
72
97
  * @defaultvalue ""
73
98
  * @public
@@ -78,9 +103,9 @@ const metadata = {
78
103
  },
79
104
 
80
105
  /**
81
- * Defines whether <code>ui5-combobox</code> is in disabled state.
106
+ * Defines whether the component is in disabled state.
82
107
  * <br><br>
83
- * <b>Note:</b> A disabled <code>ui5-combobox</code> is completely uninteractive.
108
+ * <b>Note:</b> A disabled component is completely noninteractive.
84
109
  *
85
110
  * @type {boolean}
86
111
  * @defaultvalue false
@@ -91,7 +116,7 @@ const metadata = {
91
116
  },
92
117
 
93
118
  /**
94
- * Defines the value state of the <code>ui5-combobox</code>.
119
+ * Defines the value state of the component.
95
120
  * <br><br>
96
121
  * Available options are:
97
122
  * <ul>
@@ -102,7 +127,7 @@ const metadata = {
102
127
  * <li><code>Information</code></li>
103
128
  * </ul>
104
129
  *
105
- * @type {string}
130
+ * @type {ValueState}
106
131
  * @defaultvalue "None"
107
132
  * @public
108
133
  */
@@ -112,9 +137,9 @@ const metadata = {
112
137
  },
113
138
 
114
139
  /**
115
- * Defines whether the <code>ui5-combobox</code> is readonly.
140
+ * Defines whether the component is read-only.
116
141
  * <br><br>
117
- * <b>Note:</b> A read-only <code>ui5-combobox</code> is not editable,
142
+ * <b>Note:</b> A read-only component is not editable,
118
143
  * but still provides visual feedback upon user interaction.
119
144
  *
120
145
  * @type {boolean}
@@ -126,7 +151,7 @@ const metadata = {
126
151
  },
127
152
 
128
153
  /**
129
- * Defines whether the <code>ui5-combobox</code> is required.
154
+ * Defines whether the component is required.
130
155
  *
131
156
  * @type {boolean}
132
157
  * @defaultvalue false
@@ -138,6 +163,9 @@ const metadata = {
138
163
 
139
164
  /**
140
165
  * Indicates whether a loading indicator should be shown in the picker.
166
+ *
167
+ * @type {boolean}
168
+ * @defaultvalue false
141
169
  * @public
142
170
  */
143
171
  loading: {
@@ -145,7 +173,7 @@ const metadata = {
145
173
  },
146
174
 
147
175
  /**
148
- * Defines the filter type of the <code>ui5-combobox</code>.
176
+ * Defines the filter type of the component.
149
177
  * Available options are: <code>StartsWithPerTerm</code>, <code>StartsWith</code> and <code>Contains</code>.
150
178
  *
151
179
  * @type {string}
@@ -165,40 +193,96 @@ const metadata = {
165
193
  type: Boolean,
166
194
  },
167
195
 
168
- _iconPressed: {
196
+ /**
197
+ * Indicates whether the visual focus is on the value state header
198
+ * @private
199
+ */
200
+ _isValueStateFocused: {
169
201
  type: Boolean,
170
- noAttribute: true,
171
202
  },
172
203
 
173
- _tempValue: {
204
+ /**
205
+ * Sets the accessible aria name of the component.
206
+ *
207
+ * @type {String}
208
+ * @defaultvalue: ""
209
+ * @public
210
+ * @since 1.0.0-rc.15
211
+ */
212
+ accessibleName: {
213
+ type: String,
214
+ defaultValue: undefined,
215
+ },
216
+
217
+ /**
218
+ * Receives id(or many ids) of the elements that label the combo box
219
+ * @type {String}
220
+ * @defaultvalue ""
221
+ * @public
222
+ * @since 1.0.0-rc.15
223
+ */
224
+ accessibleNameRef: {
174
225
  type: String,
175
226
  defaultValue: "",
176
227
  },
177
228
 
229
+ _iconPressed: {
230
+ type: Boolean,
231
+ noAttribute: true,
232
+ },
233
+
178
234
  _filteredItems: {
179
235
  type: Object,
180
236
  },
237
+
238
+ _listWidth: {
239
+ type: Integer,
240
+ defaultValue: 0,
241
+ noAttribute: true,
242
+ },
181
243
  },
182
244
  managedSlots: true,
183
245
  slots: /** @lends sap.ui.webcomponents.main.ComboBox.prototype */ {
184
246
  /**
185
- * Defines the <code>ui5-combobox</code> items.
247
+ * Defines the component items.
248
+ *
249
+ * @type {sap.ui.webcomponents.main.IComboBoxItem[]}
250
+ * @slot items
251
+ * @public
252
+ */
253
+ "default": {
254
+ propertyName: "items",
255
+ type: HTMLElement,
256
+ invalidateOnChildChange: true,
257
+ },
258
+
259
+ /**
260
+ * Defines the value state message that will be displayed as pop up under the component.
186
261
  * <br><br>
187
- * Example: <br>
188
- * &lt;ui5-combobox><br>
189
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ui5-li>Item #1&lt;/ui5-li><br>
190
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ui5-li>Item #2&lt;/ui5-li><br>
191
- * &lt;/ui5-combobox>
192
- * <br> <br>
193
262
  *
263
+ * <b>Note:</b> If not specified, a default text (in the respective language) will be displayed.
264
+ * <br>
265
+ * <b>Note:</b> The <code>valueStateMessage</code> would be displayed,
266
+ * when the <code>ui5-combobox</code> is in <code>Information</code>, <code>Warning</code> or <code>Error</code> value state.
194
267
  * @type {HTMLElement[]}
268
+ * @since 1.0.0-rc.9
195
269
  * @slot
196
270
  * @public
197
271
  */
198
- "default": {
199
- propertyName: "items",
272
+ valueStateMessage: {
273
+ type: HTMLElement,
274
+ },
275
+
276
+ /**
277
+ * Defines the icon to be displayed in the input field.
278
+ *
279
+ * @type {sap.ui.webcomponents.main.IIcon}
280
+ * @slot
281
+ * @public
282
+ * @since 1.0.0-rc.9
283
+ */
284
+ icon: {
200
285
  type: HTMLElement,
201
- listenFor: { include: ["*"] },
202
286
  },
203
287
  },
204
288
  events: /** @lends sap.ui.webcomponents.main.ComboBox.prototype */ {
@@ -218,6 +302,19 @@ const metadata = {
218
302
  * @public
219
303
  */
220
304
  input: {},
305
+
306
+ /**
307
+ * Fired when selection is changed by user interaction
308
+ *
309
+ * @event sap.ui.webcomponents.main.ComboBox#selection-change
310
+ * @param {HTMLElement} item item to be selected.
311
+ * @public
312
+ */
313
+ "selection-change": {
314
+ detail: {
315
+ item: { type: HTMLElement },
316
+ },
317
+ },
221
318
  },
222
319
  };
223
320
 
@@ -228,7 +325,7 @@ const metadata = {
228
325
  *
229
326
  * The <code>ui5-combobox</code> component represents a drop-down menu with a list of the available options and a text input field to narrow down the options.
230
327
  *
231
- * It is commonly used to enable users to select one or more options from a predefined list.
328
+ * It is commonly used to enable users to select an option from a predefined list.
232
329
  * <h3>Structure</h3>
233
330
  * The <code>ui5-combobox</code> consists of the following elements:
234
331
  * <ul>
@@ -256,7 +353,7 @@ const metadata = {
256
353
  * @alias sap.ui.webcomponents.main.ComboBox
257
354
  * @extends UI5Element
258
355
  * @tagname ui5-combobox
259
- * @appenddocs ComboBoxItem
356
+ * @appenddocs ComboBoxItem ComboBoxGroupItem
260
357
  * @public
261
358
  * @since 1.0.0-rc.6
262
359
  */
@@ -274,7 +371,7 @@ class ComboBox extends UI5Element {
274
371
  }
275
372
 
276
373
  static get staticAreaStyles() {
277
- return [ComboBoxPopoverCss, ResponsivePopoverCommonCss];
374
+ return [ResponsivePopoverCommonCss, ValueStateMessageCss, ComboBoxPopoverCss, SuggestionsCss];
278
375
  }
279
376
 
280
377
  static get template() {
@@ -290,18 +387,13 @@ class ComboBox extends UI5Element {
290
387
 
291
388
  this._filteredItems = [];
292
389
  this._initialRendering = true;
293
- this.i18nBundle = getI18nBundle("@ui5/webcomponents");
390
+ this._itemFocused = false;
391
+ this._selectionChanged = false;
294
392
  }
295
393
 
296
394
  onBeforeRendering() {
297
- const domValue = this._initialRendering ? this.value : this.filterValue;
298
-
299
- this._filteredItems = this._filterItems(domValue);
300
-
301
- if (this._autocomplete && domValue !== "") {
302
- this._autoCompleteValue(domValue);
303
- } else {
304
- this._tempValue = domValue;
395
+ if (this._initialRendering) {
396
+ this._filteredItems = this.items;
305
397
  }
306
398
 
307
399
  if (!this._initialRendering && this.popover && document.activeElement === this && !this._filteredItems.length) {
@@ -318,20 +410,54 @@ class ComboBox extends UI5Element {
318
410
  // Set initial focus to the native input
319
411
  this.inner.focus();
320
412
  }
413
+
414
+ if (this.shouldClosePopover() && !isPhone()) {
415
+ this.responsivePopover.close(false, false, true);
416
+ this._clearFocus();
417
+ this._itemFocused = false;
418
+ }
419
+
420
+ this.toggleValueStatePopover(this.shouldOpenValueStateMessagePopover);
421
+ this.storeResponsivePopoverWidth();
422
+
423
+ // Safari is quite slow and does not preserve text highlighting on control rerendering.
424
+ // That's why we need to restore it "manually".
425
+ if (isSafari() && this._autocomplete && this.filterValue !== this.value) {
426
+ this.inner.setSelectionRange(
427
+ (this._isKeyNavigation ? 0 : this.filterValue.length),
428
+ this.value.length,
429
+ );
430
+ }
431
+ }
432
+
433
+ shouldClosePopover() {
434
+ return this.responsivePopover.opened && !this.focused && !this._itemFocused && !this._isValueStateFocused;
321
435
  }
322
436
 
323
437
  _focusin(event) {
324
438
  this.focused = true;
325
439
 
326
- if (this.filterValue !== this.value) {
327
- this.filterValue = this.value;
328
- }
440
+ this._lastValue = this.value;
441
+
442
+ this._autocomplete = false;
329
443
 
330
- event.target.setSelectionRange(0, this.value.length);
444
+ !isPhone() && event.target.setSelectionRange(0, this.value.length);
331
445
  }
332
446
 
333
- _focusout() {
334
- this.focused = false;
447
+ _focusout(event) {
448
+ const focusedOutToValueStateMessage = event.relatedTarget && event.relatedTarget.shadowRoot && event.relatedTarget.shadowRoot.querySelector(".ui5-valuestatemessage-root");
449
+
450
+ this._fireChangeEvent();
451
+
452
+ if (focusedOutToValueStateMessage) {
453
+ event.stopImmediatePropagation();
454
+ return;
455
+ }
456
+
457
+ if (!this.shadowRoot.contains(event.relatedTarget)) {
458
+ this.focused = false;
459
+ !isPhone() && this._closeRespPopover(event);
460
+ }
335
461
  }
336
462
 
337
463
  _afterOpenPopover() {
@@ -340,11 +466,17 @@ class ComboBox extends UI5Element {
340
466
 
341
467
  _afterClosePopover() {
342
468
  this._iconPressed = false;
469
+ this._filteredItems = this.items;
343
470
 
344
471
  // close device's keyboard and prevent further typing
345
472
  if (isPhone()) {
346
473
  this.blur();
347
474
  }
475
+
476
+ if (this._selectionPerformed) {
477
+ this._lastValue = this.value;
478
+ this._selectionPerformed = false;
479
+ }
348
480
  }
349
481
 
350
482
  _toggleRespPopover() {
@@ -355,6 +487,35 @@ class ComboBox extends UI5Element {
355
487
  }
356
488
  }
357
489
 
490
+ storeResponsivePopoverWidth() {
491
+ if (this.open && !this._listWidth) {
492
+ this._listWidth = this.responsivePopover.offsetWidth;
493
+ }
494
+ }
495
+
496
+ toggleValueStatePopover(open) {
497
+ if (open) {
498
+ this.openValueStatePopover();
499
+ } else {
500
+ this.closeValueStatePopover();
501
+ }
502
+ }
503
+
504
+ async openValueStatePopover() {
505
+ this.popover = await this._getPopover();
506
+ this.popover && this.popover.showAt(this);
507
+ }
508
+
509
+ async closeValueStatePopover() {
510
+ this.popover = await this._getPopover();
511
+ this.popover && this.popover.close();
512
+ }
513
+
514
+ async _getPopover() {
515
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
516
+ return staticAreaItem.querySelector(".ui5-valuestatemessage-popover");
517
+ }
518
+
358
519
  _resetFilter() {
359
520
  this._filteredItems = this._filterItems("");
360
521
  this._selectMatchingItem();
@@ -367,31 +528,226 @@ class ComboBox extends UI5Element {
367
528
  this._toggleRespPopover();
368
529
  }
369
530
 
531
+ _readonlyIconClick() {
532
+ this.inner.focus();
533
+ }
534
+
370
535
  _input(event) {
371
536
  const { value } = event.target;
372
537
 
373
538
  if (event.target === this.inner) {
374
539
  // stop the native event, as the semantic "input" would be fired.
375
540
  event.stopImmediatePropagation();
541
+ this.focused = true;
542
+ this._isValueStateFocused = false;
376
543
  }
377
544
 
545
+ this._filteredItems = this._filterItems(value);
546
+
547
+ this.value = value;
378
548
  this.filterValue = value;
549
+
550
+ this._clearFocus();
551
+
552
+ // autocomplete
553
+ if (this._autocomplete) {
554
+ const item = this._getFirstMatchingItem(value);
555
+ this._applyAtomicValueAndSelection(item, value, true);
556
+
557
+ if (value !== "" && !this._selectionChanged && (item && !item.selected && !item.isGroupItem)) {
558
+ this.fireEvent("selection-change", {
559
+ item,
560
+ });
561
+
562
+ this._selectionChanged = false;
563
+ }
564
+ }
565
+
379
566
  this.fireEvent("input");
380
567
 
381
- this._openRespPopover();
568
+ if (isPhone()) {
569
+ return;
570
+ }
571
+
572
+ if (!this._filteredItems.length || value === "") {
573
+ this._closeRespPopover();
574
+ } else {
575
+ this._openRespPopover();
576
+ }
382
577
  }
383
578
 
384
579
  _startsWithMatchingItems(str) {
385
580
  return Filters.StartsWith(str, this._filteredItems);
386
581
  }
387
582
 
583
+ _clearFocus() {
584
+ this._filteredItems.map(item => {
585
+ item.focused = false;
586
+
587
+ return item;
588
+ });
589
+ }
590
+
591
+ async handleArrowKeyPress(event) {
592
+ if (this.readonly || !this._filteredItems.length) {
593
+ return;
594
+ }
595
+
596
+ const isOpen = this.open;
597
+ const isArrowDown = isDown(event);
598
+ const isArrowUp = isUp(event);
599
+ const currentItem = this._filteredItems.find(item => {
600
+ return isOpen ? item.focused : item.selected;
601
+ });
602
+ const indexOfItem = this._filteredItems.indexOf(currentItem);
603
+
604
+ event.preventDefault();
605
+
606
+ if ((this.focused === true && isArrowUp && isOpen) || (this._filteredItems.length - 1 === indexOfItem && isArrowDown)) {
607
+ return;
608
+ }
609
+
610
+ this._isKeyNavigation = true;
611
+
612
+ if (isArrowDown) {
613
+ this._handleArrowDown(event, indexOfItem);
614
+ }
615
+
616
+ if (isArrowUp) {
617
+ this._handleArrowUp(event, indexOfItem);
618
+ }
619
+ }
620
+
621
+ _handleItemNavigation(event, indexOfItem, isForward) {
622
+ const isOpen = this.open;
623
+ const currentItem = this._filteredItems[indexOfItem];
624
+ const nextItem = isForward ? this._filteredItems[indexOfItem + 1] : this._filteredItems[indexOfItem - 1];
625
+ const isGroupItem = currentItem && currentItem.isGroupItem;
626
+
627
+ if ((!isOpen) && ((isGroupItem && !nextItem) || (!isGroupItem && !currentItem))) {
628
+ return;
629
+ }
630
+
631
+ this._clearFocus();
632
+
633
+ if (isOpen) {
634
+ this._itemFocused = true;
635
+ this.value = isGroupItem ? this.filterValue : currentItem.text;
636
+ this.focused = false;
637
+ currentItem.focused = true;
638
+ } else {
639
+ this.focused = true;
640
+ this.value = isGroupItem ? nextItem.text : currentItem.text;
641
+ currentItem.focused = false;
642
+ }
643
+
644
+ this._isValueStateFocused = false;
645
+ this._selectionChanged = true;
646
+
647
+ if (isGroupItem && isOpen) {
648
+ return;
649
+ }
650
+
651
+ this._announceSelectedItem(indexOfItem);
652
+
653
+ // autocomplete
654
+ const item = this._getFirstMatchingItem(this.value);
655
+ this._applyAtomicValueAndSelection(item, "", true);
656
+
657
+ if ((item && !item.selected)) {
658
+ this.fireEvent("selection-change", {
659
+ item,
660
+ });
661
+ }
662
+
663
+ this.fireEvent("input");
664
+ this._fireChangeEvent();
665
+ }
666
+
667
+ _handleArrowDown(event, indexOfItem) {
668
+ const isOpen = this.open;
669
+
670
+ if (this.focused && indexOfItem === -1 && this.hasValueStateText && isOpen) {
671
+ this._isValueStateFocused = true;
672
+ this.focused = false;
673
+ return;
674
+ }
675
+
676
+ indexOfItem = !isOpen && this.hasValueState && indexOfItem === -1 ? 0 : indexOfItem;
677
+
678
+ this._handleItemNavigation(event, ++indexOfItem, true /* isForward */);
679
+ }
680
+
681
+ _handleArrowUp(event, indexOfItem) {
682
+ const isOpen = this.open;
683
+
684
+ if (indexOfItem === 0 && !this.hasValueStateText) {
685
+ this._clearFocus();
686
+ this.focused = true;
687
+ this._itemFocused = false;
688
+ return;
689
+ }
690
+
691
+ if (indexOfItem === 0 && this.hasValueStateText && isOpen) {
692
+ this._clearFocus();
693
+ this._itemFocused = false;
694
+ this._isValueStateFocused = true;
695
+ this._filteredItems[0].selected = false;
696
+ return;
697
+ }
698
+
699
+ if (this._isValueStateFocused) {
700
+ this.focused = true;
701
+ this._isValueStateFocused = false;
702
+ return;
703
+ }
704
+
705
+ indexOfItem = !isOpen && this.hasValueState && indexOfItem === -1 ? 0 : indexOfItem;
706
+ this._handleItemNavigation(event, --indexOfItem, false /* isForward */);
707
+ }
708
+
388
709
  _keydown(event) {
710
+ const isArrowKey = isDown(event) || isUp(event);
389
711
  this._autocomplete = !(isBackSpace(event) || isDelete(event));
712
+ this._isKeyNavigation = false;
713
+
714
+ if (isArrowKey) {
715
+ this.handleArrowKeyPress(event);
716
+ }
717
+
718
+ if (isEnter(event)) {
719
+ this._fireChangeEvent();
720
+ this._closeRespPopover();
721
+ this.focused = true;
722
+ }
723
+
724
+ if (isEscape(event)) {
725
+ this.focused = true;
726
+ this.value = !this.open ? this._lastValue : this.value;
727
+ this._isValueStateFocused = false;
728
+ }
729
+
730
+ if ((isTabNext(event) || isTabPrevious(event)) && this.open) {
731
+ this._closeRespPopover();
732
+ }
390
733
 
391
734
  if (isShow(event) && !this.readonly && !this.disabled) {
392
735
  event.preventDefault();
736
+
393
737
  this._resetFilter();
394
738
  this._toggleRespPopover();
739
+
740
+ const selectedItem = this._filteredItems.find(item => {
741
+ return item.selected;
742
+ });
743
+
744
+ if (selectedItem && this.open) {
745
+ this._itemFocused = true;
746
+ selectedItem.focused = true;
747
+ this.focused = false;
748
+ } else {
749
+ this.focused = true;
750
+ }
395
751
  }
396
752
  }
397
753
 
@@ -401,76 +757,153 @@ class ComboBox extends UI5Element {
401
757
  }
402
758
  }
403
759
 
404
- _closeRespPopover() {
760
+ _closeRespPopover(event) {
761
+ if (isPhone() && event && event.target.classList.contains("ui5-responsive-popover-close-btn") && this._selectedItemText) {
762
+ this.value = this._selectedItemText;
763
+ this.filterValue = this._selectedItemText;
764
+ }
765
+
766
+ this._isValueStateFocused = false;
767
+ this._clearFocus();
768
+
405
769
  this.responsivePopover.close();
406
770
  }
407
771
 
408
772
  _openRespPopover() {
409
- this.updateStaticAreaItemContentDensity();
410
- this.responsivePopover.open(this);
773
+ this.responsivePopover.showAt(this);
411
774
  }
412
775
 
413
776
  _filterItems(str) {
414
- return (Filters[this.filter] || Filters.StartsWithPerTerm)(str, this.items);
777
+ const itemsToFilter = this.items.filter(item => !item.isGroupItem);
778
+ const filteredItems = (Filters[this.filter] || Filters.StartsWithPerTerm)(str, itemsToFilter);
779
+
780
+ // Return the filtered items and their group items
781
+ return this.items.filter((item, idx, allItems) => ComboBox._groupItemFilter(item, ++idx, allItems, filteredItems) || filteredItems.indexOf(item) !== -1);
415
782
  }
416
783
 
417
- _autoCompleteValue(current) {
418
- const currentValue = current;
419
- const matchingItems = this._startsWithMatchingItems(currentValue);
784
+ /**
785
+ * Returns true if the group header should be shown (if there is a filtered suggestion item for this group item)
786
+ *
787
+ * @private
788
+ */
789
+ static _groupItemFilter(item, idx, allItems, filteredItems) {
790
+ if (item.isGroupItem) {
791
+ let groupHasFilteredItems;
792
+
793
+ while (allItems[idx] && !allItems[idx].isGroupItem && !groupHasFilteredItems) {
794
+ groupHasFilteredItems = filteredItems.indexOf(allItems[idx]) !== -1;
795
+ idx++;
796
+ }
797
+
798
+ return groupHasFilteredItems;
799
+ }
800
+ }
801
+
802
+ _getFirstMatchingItem(current) {
803
+ const currentlyFocusedItem = this.items.find(item => item.focused === true);
804
+
805
+ if (currentlyFocusedItem && currentlyFocusedItem.isGroupItem) {
806
+ this.value = this.filterValue;
807
+ return;
808
+ }
809
+
810
+ const matchingItems = this._startsWithMatchingItems(current).filter(item => !item.isGroupItem);
420
811
 
421
812
  if (matchingItems.length) {
422
- this._tempValue = matchingItems[0] ? matchingItems[0].text : current;
423
- } else {
424
- this._tempValue = current;
813
+ return matchingItems[0];
814
+ }
815
+ }
816
+
817
+ _applyAtomicValueAndSelection(item, filterValue, highlightValue) {
818
+ if (!item) {
819
+ return;
425
820
  }
426
821
 
427
- if (matchingItems.length && (currentValue !== this._tempValue)) {
428
- setTimeout(() => {
429
- this.inner.setSelectionRange(currentValue.length, this._tempValue.length);
430
- }, 0);
822
+ const value = (item && item.text) || "";
823
+ this.inner.value = value;
824
+ if (highlightValue) {
825
+ this.inner.setSelectionRange(filterValue.length, value.length);
431
826
  }
827
+ this.value = value;
432
828
  }
433
829
 
434
830
  _selectMatchingItem() {
435
- this._filteredItems = this._filteredItems.map(item => {
436
- item.selected = (item.text === this._tempValue);
831
+ const currentlyFocusedItem = this.items.find(item => item.focused);
832
+ const shouldSelectionBeCleared = currentlyFocusedItem && currentlyFocusedItem.isGroupItem;
437
833
 
834
+ this._filteredItems = this._filteredItems.map(item => {
835
+ item.selected = !item.isGroupItem && (item.text === this.value) && !shouldSelectionBeCleared;
438
836
  return item;
439
837
  });
440
838
  }
441
839
 
442
- _inputChange() {
443
- if (this.value !== this._tempValue) {
444
- this.value = this._tempValue;
840
+ _fireChangeEvent() {
841
+ if (this.value !== this._lastValue) {
445
842
  this.fireEvent("change");
446
- this.inner.setSelectionRange(this.value.length, this.value.length);
843
+ this._lastValue = this.value;
447
844
  }
448
845
  }
449
846
 
847
+ _inputChange(event) {
848
+ event.preventDefault();
849
+ }
850
+
851
+ _itemMousedown(event) {
852
+ event.preventDefault();
853
+ }
854
+
450
855
  _selectItem(event) {
451
856
  const listItem = event.detail.item;
452
857
 
453
- this._tempValue = listItem.mappedItem.text;
454
- this.filterValue = this._tempValue;
858
+ this._selectedItemText = listItem.mappedItem.text;
859
+ this._selectionPerformed = true;
455
860
 
456
- this._filteredItems.map(item => {
457
- item.selected = (item === listItem.mappedItem);
861
+ const sameItemSelected = this.value === this._selectedItemText;
862
+ const sameSelectionPerformed = this.value.toLowerCase() === this.filterValue.toLowerCase();
863
+
864
+ if (sameItemSelected && sameSelectionPerformed) {
865
+ return this._closeRespPopover();
866
+ }
458
867
 
868
+ this.value = this._selectedItemText;
869
+
870
+ if (!listItem.mappedItem.selected) {
871
+ this.fireEvent("selection-change", {
872
+ item: listItem.mappedItem,
873
+ });
874
+
875
+ this._selectionChanged = true;
876
+ }
877
+
878
+ this._filteredItems.map(item => {
879
+ item.selected = (item === listItem.mappedItem && !item.isGroupItem);
459
880
  return item;
460
881
  });
461
882
 
462
- this._inputChange();
883
+ this._fireChangeEvent();
463
884
  this._closeRespPopover();
885
+
886
+ // reset selection
887
+ this.inner.setSelectionRange(this.value.length, this.value.length);
464
888
  }
465
889
 
466
- get _filteredItems() {
467
- return !this.items.length ? [] : this.items.filter(item => {
468
- return item.text.toLowerCase().startsWith(this.value.toLowerCase());
469
- });
890
+ _onItemFocus(event) {
891
+ this._itemFocused = true;
892
+ }
893
+
894
+ _announceSelectedItem(indexOfItem) {
895
+ const itemPositionText = ComboBox.i18nBundle.getText(LIST_ITEM_POSITION, indexOfItem + 1, this._filteredItems.length);
896
+ const itemSelectionText = ComboBox.i18nBundle.getText(LIST_ITEM_SELECTED);
897
+
898
+ announce(`${itemPositionText} ${itemSelectionText}`, "Polite");
470
899
  }
471
900
 
472
901
  get _headerTitleText() {
473
- return this.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
902
+ return ComboBox.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
903
+ }
904
+
905
+ get _iconAccessibleNameText() {
906
+ return ComboBox.i18nBundle.getText(SELECT_OPTIONS);
474
907
  }
475
908
 
476
909
  get inner() {
@@ -479,7 +912,7 @@ class ComboBox extends UI5Element {
479
912
 
480
913
  async _respPopover() {
481
914
  const staticAreaItem = await this.getStaticAreaItemDomRef();
482
- this.responsivePopover = staticAreaItem.querySelector("ui5-responsive-popover");
915
+ this.responsivePopover = staticAreaItem.querySelector("[ui5-responsive-popover]");
483
916
  return this.responsivePopover;
484
917
  }
485
918
 
@@ -487,16 +920,119 @@ class ComboBox extends UI5Element {
487
920
  return !this.readonly;
488
921
  }
489
922
 
923
+ get hasValueState() {
924
+ return this.valueState !== ValueState.None;
925
+ }
926
+
927
+ get hasValueStateText() {
928
+ return this.hasValueState && this.valueState !== ValueState.Success;
929
+ }
930
+
931
+ get valueStateText() {
932
+ return this.valueStateTextMappings[this.valueState];
933
+ }
934
+
935
+ get valueStateMessageText() {
936
+ return this.getSlottedNodes("valueStateMessage").map(el => el.cloneNode(true));
937
+ }
938
+
939
+ get valueStateTextId() {
940
+ return this.hasValueState ? `${this._id}-valueStateDesc` : undefined;
941
+ }
942
+
943
+ get valueStateTextMappings() {
944
+ return {
945
+ "Success": ComboBox.i18nBundle.getText(VALUE_STATE_SUCCESS),
946
+ "Error": ComboBox.i18nBundle.getText(VALUE_STATE_ERROR),
947
+ "Warning": ComboBox.i18nBundle.getText(VALUE_STATE_WARNING),
948
+ "Information": ComboBox.i18nBundle.getText(VALUE_STATE_INFORMATION),
949
+ };
950
+ }
951
+
952
+ get shouldOpenValueStateMessagePopover() {
953
+ return this.focused && this.hasValueStateText && !this._iconPressed
954
+ && !this.open && !this._isPhone;
955
+ }
956
+
957
+ get shouldDisplayDefaultValueStateMessage() {
958
+ return !this.valueStateMessage.length && this.hasValueStateText;
959
+ }
960
+
961
+ /**
962
+ * This method is relevant for sap_horizon theme only
963
+ */
964
+ get _valueStateMessageIcon() {
965
+ const iconPerValueState = {
966
+ Error: "error",
967
+ Warning: "alert",
968
+ Success: "sys-enter-2",
969
+ Information: "information",
970
+ };
971
+
972
+ return this.valueState !== ValueState.None ? iconPerValueState[this.valueState] : "";
973
+ }
974
+
975
+ get open() {
976
+ return this.responsivePopover ? this.responsivePopover.opened : false;
977
+ }
978
+
979
+ get _isPhone() {
980
+ return isPhone();
981
+ }
982
+
983
+ get itemTabIndex() {
984
+ return undefined;
985
+ }
986
+
987
+ get ariaLabelText() {
988
+ return getEffectiveAriaLabelText(this);
989
+ }
990
+
991
+ static get dependencies() {
992
+ return [
993
+ ComboBoxItem,
994
+ Icon,
995
+ ResponsivePopover,
996
+ List,
997
+ BusyIndicator,
998
+ Button,
999
+ StandardListItem,
1000
+ Popover,
1001
+ ComboBoxGroupItem,
1002
+ ];
1003
+ }
1004
+
490
1005
  static async onDefine() {
491
- await Promise.all([
492
- ComboBoxItem.define(),
493
- Icon.define(),
494
- ResponsivePopover.define(),
495
- List.define(),
496
- BusyIndicator.define(),
497
- Button.define(),
498
- StandardListItem.define(),
499
- ]);
1006
+ ComboBox.i18nBundle = await getI18nBundle("@ui5/webcomponents");
1007
+ }
1008
+
1009
+ get styles() {
1010
+ return {
1011
+ popoverHeader: {
1012
+ "width": `${this.offsetWidth}px`,
1013
+ },
1014
+ suggestionPopoverHeader: {
1015
+ "display": this._listWidth === 0 ? "none" : "inline-block",
1016
+ "width": `${this._listWidth}px`,
1017
+ },
1018
+ };
1019
+ }
1020
+
1021
+ get classes() {
1022
+ return {
1023
+ popover: {
1024
+ "ui5-suggestions-popover": !this.isPhone,
1025
+ "ui5-suggestions-popover-with-value-state-header": !this.isPhone && this.hasValueStateText,
1026
+ },
1027
+ popoverValueState: {
1028
+ "ui5-valuestatemessage-header": true,
1029
+ "ui5-valuestatemessage-root": true,
1030
+ "ui5-valuestatemessage--success": this.valueState === ValueState.Success,
1031
+ "ui5-valuestatemessage--error": this.valueState === ValueState.Error,
1032
+ "ui5-valuestatemessage--warning": this.valueState === ValueState.Warning,
1033
+ "ui5-valuestatemessage--information": this.valueState === ValueState.Information,
1034
+ },
1035
+ };
500
1036
  }
501
1037
  }
502
1038