@ui5/webcomponents 2.4.0-rc.0 → 2.4.0-rc.1

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 (398) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/cypress/specs/Button.cy.ts +13 -26
  3. package/cypress/specs/Form.cy.ts +100 -96
  4. package/cypress/specs/Menu.cy.ts +5 -10
  5. package/cypress/specs/RTL.cy.ts +2 -4
  6. package/cypress/specs/base/AriaLabelHelper.cy.ts +2 -4
  7. package/dist/.tsbuildinfo +1 -1
  8. package/dist/Form.d.ts +3 -3
  9. package/dist/Form.js +5 -5
  10. package/dist/Form.js.map +1 -1
  11. package/dist/FormGroup.js +3 -0
  12. package/dist/FormGroup.js.map +1 -1
  13. package/dist/RangeSlider.d.ts +16 -6
  14. package/dist/RangeSlider.js +170 -19
  15. package/dist/RangeSlider.js.map +1 -1
  16. package/dist/Select.d.ts +3 -3
  17. package/dist/Select.js.map +1 -1
  18. package/dist/Slider.d.ts +10 -2
  19. package/dist/Slider.js +54 -6
  20. package/dist/Slider.js.map +1 -1
  21. package/dist/SliderBase.d.ts +28 -4
  22. package/dist/SliderBase.js +75 -9
  23. package/dist/SliderBase.js.map +1 -1
  24. package/dist/bundle.scoped.config.d.ts +1 -0
  25. package/dist/bundle.scoped.config.js +5 -0
  26. package/dist/bundle.scoped.config.js.map +1 -0
  27. package/dist/bundle.scoped.esm.d.ts +1 -0
  28. package/dist/bundle.scoped.esm.js +1 -4
  29. package/dist/bundle.scoped.esm.js.map +1 -1
  30. package/dist/css/themes/Avatar.css +1 -1
  31. package/dist/css/themes/AvatarGroup.css +1 -1
  32. package/dist/css/themes/Bar.css +1 -1
  33. package/dist/css/themes/Breadcrumbs.css +1 -1
  34. package/dist/css/themes/BusyIndicator.css +1 -1
  35. package/dist/css/themes/Button.css +1 -1
  36. package/dist/css/themes/Calendar.css +1 -1
  37. package/dist/css/themes/CalendarHeader.css +1 -1
  38. package/dist/css/themes/CalendarLegend.css +1 -1
  39. package/dist/css/themes/CalendarLegendItem.css +1 -1
  40. package/dist/css/themes/Card.css +1 -1
  41. package/dist/css/themes/CardHeader.css +1 -1
  42. package/dist/css/themes/Carousel.css +1 -1
  43. package/dist/css/themes/CheckBox.css +1 -1
  44. package/dist/css/themes/ColorPalette.css +1 -1
  45. package/dist/css/themes/ColorPaletteItem.css +1 -1
  46. package/dist/css/themes/ColorPalettePopover.css +1 -1
  47. package/dist/css/themes/ColorPicker.css +1 -1
  48. package/dist/css/themes/ComboBox.css +1 -1
  49. package/dist/css/themes/DatePicker.css +1 -1
  50. package/dist/css/themes/DateTimePickerPopover.css +1 -1
  51. package/dist/css/themes/DayPicker.css +1 -1
  52. package/dist/css/themes/Dialog.css +1 -1
  53. package/dist/css/themes/FileUploader.css +1 -1
  54. package/dist/css/themes/Form.css +1 -1
  55. package/dist/css/themes/FormItem.css +1 -1
  56. package/dist/css/themes/FormLabelSpan.css +1 -1
  57. package/dist/css/themes/FormLayout.css +1 -1
  58. package/dist/css/themes/GrowingButton.css +1 -1
  59. package/dist/css/themes/Icon.css +1 -1
  60. package/dist/css/themes/Input.css +1 -1
  61. package/dist/css/themes/InputIcon.css +1 -1
  62. package/dist/css/themes/InputSharedStyles.css +1 -1
  63. package/dist/css/themes/Link.css +1 -1
  64. package/dist/css/themes/List.css +1 -1
  65. package/dist/css/themes/ListItem.css +1 -1
  66. package/dist/css/themes/ListItemBase.css +1 -1
  67. package/dist/css/themes/ListItemCustom.css +1 -1
  68. package/dist/css/themes/ListItemGroup.css +1 -1
  69. package/dist/css/themes/ListItemGroupHeader.css +1 -1
  70. package/dist/css/themes/ListItemIcon.css +1 -1
  71. package/dist/css/themes/Menu.css +1 -1
  72. package/dist/css/themes/MenuItem.css +1 -1
  73. package/dist/css/themes/MessageStrip.css +1 -1
  74. package/dist/css/themes/MonthPicker.css +1 -1
  75. package/dist/css/themes/MultiComboBox.css +1 -1
  76. package/dist/css/themes/MultiComboBoxPopover.css +1 -1
  77. package/dist/css/themes/MultiInput.css +1 -1
  78. package/dist/css/themes/NavigationMenu.css +1 -1
  79. package/dist/css/themes/NavigationMenuItem.css +1 -1
  80. package/dist/css/themes/OptionBase.css +1 -1
  81. package/dist/css/themes/Panel.css +1 -1
  82. package/dist/css/themes/Popover.css +1 -1
  83. package/dist/css/themes/PopupsCommon.css +1 -1
  84. package/dist/css/themes/ProgressIndicator.css +1 -1
  85. package/dist/css/themes/RadioButton.css +1 -1
  86. package/dist/css/themes/RangeSlider.css +1 -1
  87. package/dist/css/themes/RatingIndicator.css +1 -1
  88. package/dist/css/themes/ResponsivePopover.css +1 -1
  89. package/dist/css/themes/ResponsivePopoverCommon.css +1 -1
  90. package/dist/css/themes/SegmentedButton.css +1 -1
  91. package/dist/css/themes/SegmentedButtonItem.css +1 -1
  92. package/dist/css/themes/Select.css +1 -1
  93. package/dist/css/themes/SliderBase.css +1 -1
  94. package/dist/css/themes/SplitButton.css +1 -1
  95. package/dist/css/themes/StepInput.css +1 -1
  96. package/dist/css/themes/SuggestionItem.css +1 -1
  97. package/dist/css/themes/SuggestionItemCustom.css +1 -1
  98. package/dist/css/themes/Switch.css +1 -1
  99. package/dist/css/themes/TabContainer.css +1 -1
  100. package/dist/css/themes/TabInOverflow.css +1 -1
  101. package/dist/css/themes/TabInStrip.css +1 -1
  102. package/dist/css/themes/TabSemanticIcon.css +1 -1
  103. package/dist/css/themes/TabSeparatorInOverflow.css +1 -1
  104. package/dist/css/themes/Table.css +1 -1
  105. package/dist/css/themes/TableCellBase.css +1 -1
  106. package/dist/css/themes/TableHeaderRow.css +1 -1
  107. package/dist/css/themes/TableRow.css +1 -1
  108. package/dist/css/themes/TableRowBase.css +1 -1
  109. package/dist/css/themes/Tag.css +1 -1
  110. package/dist/css/themes/Text.css +1 -1
  111. package/dist/css/themes/TextArea.css +1 -1
  112. package/dist/css/themes/TimePicker.css +1 -1
  113. package/dist/css/themes/Toast.css +1 -1
  114. package/dist/css/themes/ToggleButton.css +1 -1
  115. package/dist/css/themes/Token.css +1 -1
  116. package/dist/css/themes/Tokenizer.css +1 -1
  117. package/dist/css/themes/TokenizerPopover.css +1 -1
  118. package/dist/css/themes/Toolbar.css +1 -1
  119. package/dist/css/themes/ToolbarPopover.css +1 -1
  120. package/dist/css/themes/TreeItem.css +1 -1
  121. package/dist/css/themes/ValueStateMessage.css +1 -1
  122. package/dist/css/themes/YearPicker.css +1 -1
  123. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  124. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  125. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  126. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  127. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  128. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  129. package/dist/css/themes/sap_horizon_dark_exp/parameters-bundle.css +1 -1
  130. package/dist/css/themes/sap_horizon_exp/parameters-bundle.css +1 -1
  131. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  132. package/dist/css/themes/sap_horizon_hcb_exp/parameters-bundle.css +1 -1
  133. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  134. package/dist/css/themes/sap_horizon_hcw_exp/parameters-bundle.css +1 -1
  135. package/dist/custom-elements-internal.json +84 -5
  136. package/dist/custom-elements.json +78 -5
  137. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  138. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  139. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  140. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  141. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  142. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  143. package/dist/generated/assets/themes/sap_horizon_dark_exp/parameters-bundle.css.json +1 -1
  144. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -1
  145. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  146. package/dist/generated/assets/themes/sap_horizon_hcb_exp/parameters-bundle.css.json +1 -1
  147. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  148. package/dist/generated/assets/themes/sap_horizon_hcw_exp/parameters-bundle.css.json +1 -1
  149. package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
  150. package/dist/generated/i18n/i18n-defaults.js +3 -1
  151. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  152. package/dist/generated/templates/DialogTemplate.lit.js +1 -1
  153. package/dist/generated/templates/DialogTemplate.lit.js.map +1 -1
  154. package/dist/generated/templates/PopoverTemplate.lit.js +1 -1
  155. package/dist/generated/templates/PopoverTemplate.lit.js.map +1 -1
  156. package/dist/generated/templates/PopupTemplate.lit.js +1 -1
  157. package/dist/generated/templates/PopupTemplate.lit.js.map +1 -1
  158. package/dist/generated/templates/RangeSliderTemplate.lit.js +9 -3
  159. package/dist/generated/templates/RangeSliderTemplate.lit.js.map +1 -1
  160. package/dist/generated/templates/ResponsivePopoverTemplate.lit.js +1 -1
  161. package/dist/generated/templates/ResponsivePopoverTemplate.lit.js.map +1 -1
  162. package/dist/generated/templates/SliderBaseTemplate.lit.js +3 -1
  163. package/dist/generated/templates/SliderBaseTemplate.lit.js.map +1 -1
  164. package/dist/generated/templates/SliderTemplate.lit.js +6 -2
  165. package/dist/generated/templates/SliderTemplate.lit.js.map +1 -1
  166. package/dist/generated/themes/Avatar.css.js +1 -1
  167. package/dist/generated/themes/Avatar.css.js.map +1 -1
  168. package/dist/generated/themes/AvatarGroup.css.js +1 -1
  169. package/dist/generated/themes/AvatarGroup.css.js.map +1 -1
  170. package/dist/generated/themes/Bar.css.js +1 -1
  171. package/dist/generated/themes/Bar.css.js.map +1 -1
  172. package/dist/generated/themes/Breadcrumbs.css.js +1 -1
  173. package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
  174. package/dist/generated/themes/BusyIndicator.css.js +1 -1
  175. package/dist/generated/themes/BusyIndicator.css.js.map +1 -1
  176. package/dist/generated/themes/Button.css.js +1 -1
  177. package/dist/generated/themes/Button.css.js.map +1 -1
  178. package/dist/generated/themes/Calendar.css.js +1 -1
  179. package/dist/generated/themes/Calendar.css.js.map +1 -1
  180. package/dist/generated/themes/CalendarHeader.css.js +1 -1
  181. package/dist/generated/themes/CalendarHeader.css.js.map +1 -1
  182. package/dist/generated/themes/CalendarLegend.css.js +1 -1
  183. package/dist/generated/themes/CalendarLegend.css.js.map +1 -1
  184. package/dist/generated/themes/CalendarLegendItem.css.js +1 -1
  185. package/dist/generated/themes/CalendarLegendItem.css.js.map +1 -1
  186. package/dist/generated/themes/Card.css.js +1 -1
  187. package/dist/generated/themes/Card.css.js.map +1 -1
  188. package/dist/generated/themes/CardHeader.css.js +1 -1
  189. package/dist/generated/themes/CardHeader.css.js.map +1 -1
  190. package/dist/generated/themes/Carousel.css.js +1 -1
  191. package/dist/generated/themes/Carousel.css.js.map +1 -1
  192. package/dist/generated/themes/CheckBox.css.js +1 -1
  193. package/dist/generated/themes/CheckBox.css.js.map +1 -1
  194. package/dist/generated/themes/ColorPalette.css.js +1 -1
  195. package/dist/generated/themes/ColorPalette.css.js.map +1 -1
  196. package/dist/generated/themes/ColorPaletteItem.css.js +1 -1
  197. package/dist/generated/themes/ColorPaletteItem.css.js.map +1 -1
  198. package/dist/generated/themes/ColorPalettePopover.css.js +1 -1
  199. package/dist/generated/themes/ColorPalettePopover.css.js.map +1 -1
  200. package/dist/generated/themes/ColorPicker.css.js +1 -1
  201. package/dist/generated/themes/ColorPicker.css.js.map +1 -1
  202. package/dist/generated/themes/ComboBox.css.js +1 -1
  203. package/dist/generated/themes/ComboBox.css.js.map +1 -1
  204. package/dist/generated/themes/DatePicker.css.js +1 -1
  205. package/dist/generated/themes/DatePicker.css.js.map +1 -1
  206. package/dist/generated/themes/DateTimePickerPopover.css.js +1 -1
  207. package/dist/generated/themes/DateTimePickerPopover.css.js.map +1 -1
  208. package/dist/generated/themes/DayPicker.css.js +1 -1
  209. package/dist/generated/themes/DayPicker.css.js.map +1 -1
  210. package/dist/generated/themes/Dialog.css.js +1 -1
  211. package/dist/generated/themes/Dialog.css.js.map +1 -1
  212. package/dist/generated/themes/FileUploader.css.js +1 -1
  213. package/dist/generated/themes/FileUploader.css.js.map +1 -1
  214. package/dist/generated/themes/Form.css.js +1 -1
  215. package/dist/generated/themes/Form.css.js.map +1 -1
  216. package/dist/generated/themes/FormItem.css.js +1 -1
  217. package/dist/generated/themes/FormItem.css.js.map +1 -1
  218. package/dist/generated/themes/FormLabelSpan.css.js +1 -1
  219. package/dist/generated/themes/FormLabelSpan.css.js.map +1 -1
  220. package/dist/generated/themes/FormLayout.css.js +1 -1
  221. package/dist/generated/themes/FormLayout.css.js.map +1 -1
  222. package/dist/generated/themes/GrowingButton.css.js +1 -1
  223. package/dist/generated/themes/GrowingButton.css.js.map +1 -1
  224. package/dist/generated/themes/Icon.css.js +1 -1
  225. package/dist/generated/themes/Icon.css.js.map +1 -1
  226. package/dist/generated/themes/Input.css.js +1 -1
  227. package/dist/generated/themes/Input.css.js.map +1 -1
  228. package/dist/generated/themes/InputIcon.css.js +1 -1
  229. package/dist/generated/themes/InputIcon.css.js.map +1 -1
  230. package/dist/generated/themes/InputSharedStyles.css.js +1 -1
  231. package/dist/generated/themes/InputSharedStyles.css.js.map +1 -1
  232. package/dist/generated/themes/Link.css.js +1 -1
  233. package/dist/generated/themes/Link.css.js.map +1 -1
  234. package/dist/generated/themes/List.css.js +1 -1
  235. package/dist/generated/themes/List.css.js.map +1 -1
  236. package/dist/generated/themes/ListItem.css.js +1 -1
  237. package/dist/generated/themes/ListItem.css.js.map +1 -1
  238. package/dist/generated/themes/ListItemBase.css.js +1 -1
  239. package/dist/generated/themes/ListItemBase.css.js.map +1 -1
  240. package/dist/generated/themes/ListItemCustom.css.js +1 -1
  241. package/dist/generated/themes/ListItemCustom.css.js.map +1 -1
  242. package/dist/generated/themes/ListItemGroup.css.js +1 -1
  243. package/dist/generated/themes/ListItemGroup.css.js.map +1 -1
  244. package/dist/generated/themes/ListItemGroupHeader.css.js +1 -1
  245. package/dist/generated/themes/ListItemGroupHeader.css.js.map +1 -1
  246. package/dist/generated/themes/ListItemIcon.css.js +1 -1
  247. package/dist/generated/themes/ListItemIcon.css.js.map +1 -1
  248. package/dist/generated/themes/Menu.css.js +1 -1
  249. package/dist/generated/themes/Menu.css.js.map +1 -1
  250. package/dist/generated/themes/MenuItem.css.js +1 -1
  251. package/dist/generated/themes/MenuItem.css.js.map +1 -1
  252. package/dist/generated/themes/MessageStrip.css.js +1 -1
  253. package/dist/generated/themes/MessageStrip.css.js.map +1 -1
  254. package/dist/generated/themes/MonthPicker.css.js +1 -1
  255. package/dist/generated/themes/MonthPicker.css.js.map +1 -1
  256. package/dist/generated/themes/MultiComboBox.css.js +1 -1
  257. package/dist/generated/themes/MultiComboBox.css.js.map +1 -1
  258. package/dist/generated/themes/MultiComboBoxPopover.css.js +1 -1
  259. package/dist/generated/themes/MultiComboBoxPopover.css.js.map +1 -1
  260. package/dist/generated/themes/MultiInput.css.js +1 -1
  261. package/dist/generated/themes/MultiInput.css.js.map +1 -1
  262. package/dist/generated/themes/NavigationMenu.css.js +1 -1
  263. package/dist/generated/themes/NavigationMenu.css.js.map +1 -1
  264. package/dist/generated/themes/NavigationMenuItem.css.js +1 -1
  265. package/dist/generated/themes/NavigationMenuItem.css.js.map +1 -1
  266. package/dist/generated/themes/OptionBase.css.js +1 -1
  267. package/dist/generated/themes/OptionBase.css.js.map +1 -1
  268. package/dist/generated/themes/Panel.css.js +1 -1
  269. package/dist/generated/themes/Panel.css.js.map +1 -1
  270. package/dist/generated/themes/Popover.css.js +1 -1
  271. package/dist/generated/themes/Popover.css.js.map +1 -1
  272. package/dist/generated/themes/PopupsCommon.css.js +1 -1
  273. package/dist/generated/themes/PopupsCommon.css.js.map +1 -1
  274. package/dist/generated/themes/ProgressIndicator.css.js +1 -1
  275. package/dist/generated/themes/ProgressIndicator.css.js.map +1 -1
  276. package/dist/generated/themes/RadioButton.css.js +1 -1
  277. package/dist/generated/themes/RadioButton.css.js.map +1 -1
  278. package/dist/generated/themes/RangeSlider.css.js +1 -1
  279. package/dist/generated/themes/RangeSlider.css.js.map +1 -1
  280. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  281. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  282. package/dist/generated/themes/ResponsivePopover.css.js +1 -1
  283. package/dist/generated/themes/ResponsivePopover.css.js.map +1 -1
  284. package/dist/generated/themes/ResponsivePopoverCommon.css.js +1 -1
  285. package/dist/generated/themes/ResponsivePopoverCommon.css.js.map +1 -1
  286. package/dist/generated/themes/SegmentedButton.css.js +1 -1
  287. package/dist/generated/themes/SegmentedButton.css.js.map +1 -1
  288. package/dist/generated/themes/SegmentedButtonItem.css.js +1 -1
  289. package/dist/generated/themes/SegmentedButtonItem.css.js.map +1 -1
  290. package/dist/generated/themes/Select.css.js +1 -1
  291. package/dist/generated/themes/Select.css.js.map +1 -1
  292. package/dist/generated/themes/SliderBase.css.js +1 -1
  293. package/dist/generated/themes/SliderBase.css.js.map +1 -1
  294. package/dist/generated/themes/SplitButton.css.js +1 -1
  295. package/dist/generated/themes/SplitButton.css.js.map +1 -1
  296. package/dist/generated/themes/StepInput.css.js +1 -1
  297. package/dist/generated/themes/StepInput.css.js.map +1 -1
  298. package/dist/generated/themes/SuggestionItem.css.js +1 -1
  299. package/dist/generated/themes/SuggestionItem.css.js.map +1 -1
  300. package/dist/generated/themes/SuggestionItemCustom.css.js +1 -1
  301. package/dist/generated/themes/SuggestionItemCustom.css.js.map +1 -1
  302. package/dist/generated/themes/Switch.css.js +1 -1
  303. package/dist/generated/themes/Switch.css.js.map +1 -1
  304. package/dist/generated/themes/TabContainer.css.js +1 -1
  305. package/dist/generated/themes/TabContainer.css.js.map +1 -1
  306. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  307. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  308. package/dist/generated/themes/TabInStrip.css.js +1 -1
  309. package/dist/generated/themes/TabInStrip.css.js.map +1 -1
  310. package/dist/generated/themes/TabSemanticIcon.css.js +1 -1
  311. package/dist/generated/themes/TabSemanticIcon.css.js.map +1 -1
  312. package/dist/generated/themes/TabSeparatorInOverflow.css.js +1 -1
  313. package/dist/generated/themes/TabSeparatorInOverflow.css.js.map +1 -1
  314. package/dist/generated/themes/Table.css.js +1 -1
  315. package/dist/generated/themes/Table.css.js.map +1 -1
  316. package/dist/generated/themes/TableCellBase.css.js +1 -1
  317. package/dist/generated/themes/TableCellBase.css.js.map +1 -1
  318. package/dist/generated/themes/TableHeaderRow.css.js +1 -1
  319. package/dist/generated/themes/TableHeaderRow.css.js.map +1 -1
  320. package/dist/generated/themes/TableRow.css.js +1 -1
  321. package/dist/generated/themes/TableRow.css.js.map +1 -1
  322. package/dist/generated/themes/TableRowBase.css.js +1 -1
  323. package/dist/generated/themes/TableRowBase.css.js.map +1 -1
  324. package/dist/generated/themes/Tag.css.js +1 -1
  325. package/dist/generated/themes/Tag.css.js.map +1 -1
  326. package/dist/generated/themes/Text.css.js +1 -1
  327. package/dist/generated/themes/Text.css.js.map +1 -1
  328. package/dist/generated/themes/TextArea.css.js +1 -1
  329. package/dist/generated/themes/TextArea.css.js.map +1 -1
  330. package/dist/generated/themes/TimePicker.css.js +1 -1
  331. package/dist/generated/themes/TimePicker.css.js.map +1 -1
  332. package/dist/generated/themes/Toast.css.js +1 -1
  333. package/dist/generated/themes/Toast.css.js.map +1 -1
  334. package/dist/generated/themes/ToggleButton.css.js +1 -1
  335. package/dist/generated/themes/ToggleButton.css.js.map +1 -1
  336. package/dist/generated/themes/Token.css.js +1 -1
  337. package/dist/generated/themes/Token.css.js.map +1 -1
  338. package/dist/generated/themes/Tokenizer.css.js +1 -1
  339. package/dist/generated/themes/Tokenizer.css.js.map +1 -1
  340. package/dist/generated/themes/TokenizerPopover.css.js +1 -1
  341. package/dist/generated/themes/TokenizerPopover.css.js.map +1 -1
  342. package/dist/generated/themes/Toolbar.css.js +1 -1
  343. package/dist/generated/themes/Toolbar.css.js.map +1 -1
  344. package/dist/generated/themes/ToolbarPopover.css.js +1 -1
  345. package/dist/generated/themes/ToolbarPopover.css.js.map +1 -1
  346. package/dist/generated/themes/TreeItem.css.js +1 -1
  347. package/dist/generated/themes/TreeItem.css.js.map +1 -1
  348. package/dist/generated/themes/ValueStateMessage.css.js +1 -1
  349. package/dist/generated/themes/ValueStateMessage.css.js.map +1 -1
  350. package/dist/generated/themes/YearPicker.css.js +1 -1
  351. package/dist/generated/themes/YearPicker.css.js.map +1 -1
  352. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  353. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
  354. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  355. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js.map +1 -1
  356. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  357. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js.map +1 -1
  358. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  359. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js.map +1 -1
  360. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  361. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  362. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  363. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  364. package/dist/generated/themes/sap_horizon_dark_exp/parameters-bundle.css.js +1 -1
  365. package/dist/generated/themes/sap_horizon_dark_exp/parameters-bundle.css.js.map +1 -1
  366. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -1
  367. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js.map +1 -1
  368. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  369. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  370. package/dist/generated/themes/sap_horizon_hcb_exp/parameters-bundle.css.js +1 -1
  371. package/dist/generated/themes/sap_horizon_hcb_exp/parameters-bundle.css.js.map +1 -1
  372. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  373. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  374. package/dist/generated/themes/sap_horizon_hcw_exp/parameters-bundle.css.js +1 -1
  375. package/dist/generated/themes/sap_horizon_hcw_exp/parameters-bundle.css.js.map +1 -1
  376. package/dist/vscode.html-custom-data.json +17 -2
  377. package/dist/web-types.json +25 -5
  378. package/package.json +9 -9
  379. package/src/Popup.hbs +2 -2
  380. package/src/RangeSlider.hbs +70 -38
  381. package/src/Slider.hbs +37 -18
  382. package/src/SliderBase.hbs +13 -4
  383. package/src/i18n/messagebundle.properties +6 -0
  384. package/src/themes/ColorPicker.css +9 -1
  385. package/src/themes/Form.css +3 -2
  386. package/src/themes/FormLayout.css +3 -3
  387. package/src/themes/ListItemBase.css +2 -2
  388. package/src/themes/SliderBase.css +27 -7
  389. package/src/themes/base/sizes-parameters.css +1 -1
  390. package/src/themes/sap_fiori_3/SliderBase-parameters.css +7 -0
  391. package/src/themes/sap_fiori_3/sizes-parameters.css +4 -0
  392. package/src/themes/sap_fiori_3_dark/SliderBase-parameters.css +7 -0
  393. package/src/themes/sap_fiori_3_dark/sizes-parameters.css +4 -0
  394. package/src/themes/sap_fiori_3_hcb/sizes-parameters.css +6 -0
  395. package/src/themes/sap_fiori_3_hcw/sizes-parameters.css +6 -0
  396. package/src/themes/sap_horizon_hcb/SliderBase-parameters.css +1 -1
  397. package/src/themes/sap_horizon_hcw/SliderBase-parameters.css +1 -1
  398. package/tsconfig.json +2 -0
package/dist/Form.d.ts CHANGED
@@ -57,7 +57,7 @@ type ItemsInfo = {
57
57
  * - **S** (< 600px) – 1 column is recommended (default: 1)
58
58
  * - **M** (600px - 1022px) – up to 2 columns are recommended (default: 1)
59
59
  * - **L** (1023px - 1439px) - up to 3 columns are recommended (default: 2)
60
- * - **XL** (> 1439px) – up to 6 columns are recommended (default: 2)
60
+ * - **XL** (> 1439px) – up to 6 columns are recommended (default: 3)
61
61
  *
62
62
  * To change the layout, use the `layout` property - f.e. layout="S1 M2 L3 XL6".
63
63
  *
@@ -123,9 +123,9 @@ declare class Form extends UI5Element {
123
123
  * - `S` - 1 column by default (1 column is recommended)
124
124
  * - `M` - 1 column by default (up to 2 columns are recommended)
125
125
  * - `L` - 2 columns by default (up to 3 columns are recommended)
126
- * - `XL` - 2 columns by default (up to 6 columns are recommended)
126
+ * - `XL` - 3 columns by default (up to 6 columns are recommended)
127
127
  *
128
- * @default "S1 M1 L2 XL2"
128
+ * @default "S1 M1 L2 XL3"
129
129
  * @public
130
130
  */
131
131
  layout: string;
package/dist/Form.js CHANGED
@@ -53,7 +53,7 @@ const StepColumn = {
53
53
  * - **S** (< 600px) – 1 column is recommended (default: 1)
54
54
  * - **M** (600px - 1022px) – up to 2 columns are recommended (default: 1)
55
55
  * - **L** (1023px - 1439px) - up to 3 columns are recommended (default: 2)
56
- * - **XL** (> 1439px) – up to 6 columns are recommended (default: 2)
56
+ * - **XL** (> 1439px) – up to 6 columns are recommended (default: 3)
57
57
  *
58
58
  * To change the layout, use the `layout` property - f.e. layout="S1 M2 L3 XL6".
59
59
  *
@@ -121,12 +121,12 @@ let Form = class Form extends UI5Element {
121
121
  * - `S` - 1 column by default (1 column is recommended)
122
122
  * - `M` - 1 column by default (up to 2 columns are recommended)
123
123
  * - `L` - 2 columns by default (up to 3 columns are recommended)
124
- * - `XL` - 2 columns by default (up to 6 columns are recommended)
124
+ * - `XL` - 3 columns by default (up to 6 columns are recommended)
125
125
  *
126
- * @default "S1 M1 L2 XL2"
126
+ * @default "S1 M1 L2 XL3"
127
127
  * @public
128
128
  */
129
- this.layout = "S1 M1 L2 XL2";
129
+ this.layout = "S1 M1 L2 XL3";
130
130
  /**
131
131
  * Defines the width proportion of the labels and fields of a FormItem by breakpoint.
132
132
  *
@@ -160,7 +160,7 @@ let Form = class Form extends UI5Element {
160
160
  this.labelSpanM = 4;
161
161
  this.columnsL = 2;
162
162
  this.labelSpanL = 4;
163
- this.columnsXl = 2;
163
+ this.columnsXl = 3;
164
164
  this.labelSpanXl = 4;
165
165
  }
166
166
  onBeforeRendering() {
package/dist/Form.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","sourceRoot":"","sources":["../src/Form.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\n// Template\nimport FormTemplate from \"./generated/templates/FormTemplate.lit.js\";\n\n// Styles\nimport FormCss from \"./generated/themes/Form.css.js\";\n\nimport Title from \"./Title.js\";\nimport type FormItemSpacing from \"./types/FormItemSpacing.js\";\nimport type FormGroup from \"./FormGroup.js\";\n\nconst additionalStylesMap = new Map<string, string>();\n\nconst StepColumn = {\n\t\"S\": 1,\n\t\"M\": 2,\n\t\"L\": 3,\n\t\"XL\": 6,\n};\n\n/**\n * Interface for components that can be slotted inside `ui5-form` as items.\n * @public\n * @experimental\n * @since 2.0.0\n */\ninterface IFormItem extends HTMLElement {\n\tlabelSpan: string\n\titemSpacing: `${FormItemSpacing}`;\n\treadonly isGroup: boolean;\n\tcolsXl?: number;\n\tcolsL?: number;\n\tcolsM?: number;\n\tcolsS?: number;\n\tcolumnSpan?: number;\n}\n\ntype GroupItemsInfo = {\n\tgroupItem: IFormItem,\n\tclasses: string,\n\titems: Array<ItemsInfo>,\n}\n\ntype ItemsInfo = {\n\titem: IFormItem,\n\tclasses: string,\n}\n\n/**\n * @class\n *\n * ### Overview\n *\n * The Form is a layout component that arranges labels and form fields (like input fields) pairs\n * into a specific number of columns.\n *\n * **Note:** The Form web component is a layout component, it isn't a replacement for the native `form` HTML element.\n * The Form web component does not provide any APIs for form submission.\n *\n * ### Structure\n *\n * - **Form** (`ui5-form`) is the top-level container component, responsible for the content layout and responsiveness.\n * - **FormGroup** (`ui5-form-group`) enables the grouping of the Form content.\n * - **FormItem** (`ui5-form-item`) is a pair of label and form fields and can be used directly in a Form, or as part of a FormGroup.\n *\n * The simplest Form (`ui5-form`) consists of a header area on top,\n * displaying a header text (see the `headingText` property) and content below - an arbitrary number of FormItems (ui5-form-item),\n * representing the pairs of label and form fields.\n *\n * And, there is also \"grouping\" available to assist the implementation of richer UIs.\n * This is enabled by the FormGroup (`ui5-form-group`) component.\n * In this case, the Form is structured into FormGroups and each FormGroup consists of FormItems.\n *\n * ### Responsiveness\n *\n * The Form component reacts and changes its layout on predefined breakpoints.\n * Depending on its size, the Form content (FormGroups and FormItems) gets divided into one or more columns as follows:\n * - **S** (< 600px) – 1 column is recommended (default: 1)\n * - **M** (600px - 1022px) – up to 2 columns are recommended (default: 1)\n * - **L** (1023px - 1439px) - up to 3 columns are recommended (default: 2)\n * - **XL** (> 1439px) – up to 6 columns are recommended (default: 2)\n *\n * To change the layout, use the `layout` property - f.e. layout=\"S1 M2 L3 XL6\".\n *\n * ### Groups\n *\n * To make better use of screen space, there is built-in logic to determine how many columns should a FormGroup occupy.\n *\n * - **Example #1** (perfect match):\n * 4 columns and 4 groups: each group will use 1 column.\n *\n * - **Example #2** (balanced distribution):\n * 4 columns and 2 groups: each group will use 2 columns.\n * 6 columns and 2 groups: each group will use 3 columns.\n *\n * - **Example #3** (unbalanced distribution):\n * 3 columns and 2 groups: the larger one will use 2 columns, the smaller 1 column.\n * 5 columns and 3 groups: two of the groups will use 2 columns each, the smallest 1 column.\n *\n * **Note:** The size of a group element is determined by the number of FormItems assigned to it.\n * In the case of equality, the first in the DOM will use more columns, and the last - fewer columns.\n *\n * - **Example #4** (more groups than columns):\n * 3 columns and 4 groups: each FormGroup uses only 1 column, the last FormGroup will wrap on the second row.\n *\n * ### Groups Column Span\n *\n * To influence the built-in group distribution, described in the previous section,\n * you can use the FormGroup's `columnSpan` property, that defines how many columns the group should expand to.\n *\n * ### Items Column Span\n *\n * FormItem's columnSpan property defines how many columns the form item should expand to inside a form group or the form.\n *\n * ### Items Label Span\n *\n * The placement of the labels depends on the size of the used column.\n * If there is enough space, the labels are next to their associated fields, otherwise - above the fields.\n * By default, the labels take 4/12 of the FormItem, leaving 8/12 parts to associated fields.\n * You can control what space the labels should take via the `labelSpan` property.\n *\n * **For example:** To always place the labels on top set: `labelSpan=\"S12 M12 L12 XL12\"` property.\n *\n * ### ES6 Module Import\n *\n * - import @ui5/webcomponents/dist/Form.js\";\n * - import @ui5/webcomponents/dist/FormGroup.js\";\n * - import @ui5/webcomponents/dist/FormItem.js\";\n *\n * @csspart header - Used to style the wrapper of the header.\n * @csspart layout - Used to style the element defining the form column layout.\n * @csspart column - Used to style a single column of the form column layout.\n *\n * @public\n * @since 2.0.0\n * @experimental This component is availabe since 2.0 under an experimental flag and its API and behaviour are subject to change.\n * @extends UI5Element\n */\n@customElement({\n\ttag: \"ui5-form\",\n\trenderer: litRender,\n\tstyles: FormCss,\n\ttemplate: FormTemplate,\n\tdependencies: [Title],\n})\nclass Form extends UI5Element {\n\t/**\n\t * Defines the number of columns to distribute the form content by breakpoint.\n\t *\n\t * Supported values:\n\t * - `S` - 1 column by default (1 column is recommended)\n\t * - `M` - 1 column by default (up to 2 columns are recommended)\n\t * - `L` - 2 columns by default (up to 3 columns are recommended)\n\t * - `XL` - 2 columns by default (up to 6 columns are recommended)\n\t *\n\t * @default \"S1 M1 L2 XL2\"\n\t * @public\n\t */\n\t@property()\n\tlayout = \"S1 M1 L2 XL2\"\n\n\t/**\n\t * Defines the width proportion of the labels and fields of a FormItem by breakpoint.\n\t *\n\t * By default, the labels take 4/12 (or 1/3) of the form item in M,L and XL sizes,\n\t * and 12/12 in S size, e.g in S the label is on top of its associated field.\n\t *\n\t * The supported values are between 1 and 12. Greater the number, more space the label will use.\n\t *\n\t * **Note:** If \"12\" is set, the label will be displayed on top of its assosiated field.\n\t * @default \"S12 M4 L4 XL4\"\n\t * @public\n\t */\n\t@property()\n\tlabelSpan = \"S12 M4 L4 XL4\";\n\n\t/**\n\t * Defines the header text of the component.\n\t *\n\t * **Note:** The property gets overridden by the `header` slot.\n\t *\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\theaderText?: string;\n\n\t/**\n\t * Defines the vertical spacing between form items.\n\t *\n\t * **Note:** If the Form is meant to be switched between \"non-edit\" and \"edit\" modes,\n\t * we recommend using \"Large\" item spacing in \"non-edit\" mode, and \"Normal\" - for \"edit\" mode,\n\t * to avoid \"jumping\" effect, caused by the hight difference between texts in \"non-edit\" mode and the input fields in \"edit\" mode.\n\t *\n\t * @default \"Normal\"\n\t * @public\n\t */\n\t@property()\n\titemSpacing: `${FormItemSpacing}` = \"Normal\";\n\n\t/**\n\t * Defines the component header area.\n\t *\n\t * **Note:** When a `header` is provided, the `headerText` property is ignored.\n\t * @public\n\t */\n\t@slot({ type: HTMLElement })\n\theader!: Array<HTMLElement>;\n\n\t/**\n\t * Defines the component content - FormGroups or FormItems.\n\t *\n\t * **Note:** Mixing FormGroups and standalone FormItems (not belonging to a group) is not supported.\n\t * Either use FormGroups and make sure all FormItems are part of a FormGroup, or use just FormItems without any FormGroups.\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\t\"default\": true,\n\t\tindividualSlots: true,\n\t\tinvalidateOnChildChange: true,\n\t})\n\titems!: Array<IFormItem>;\n\n\t/**\n\t * @private\n\t */\n\t@property({ type: Number })\n\tcolumnsS = 1;\n\t@property({ type: Number })\n\tlabelSpanS = 12\n\n\t@property({ type: Number })\n\tcolumnsM = 1;\n\t@property({ type: Number })\n\tlabelSpanM = 4;\n\n\t@property({ type: Number })\n\tcolumnsL = 2;\n\t@property({ type: Number })\n\tlabelSpanL = 4;\n\n\t@property({ type: Number })\n\tcolumnsXl = 2;\n\t@property({ type: Number })\n\tlabelSpanXl = 4;\n\n\tonBeforeRendering() {\n\t\t// Parse the layout and set it to the FormGroups/FormItems.\n\t\tthis.setColumnLayout();\n\n\t\t// Parse the labelSpan and set it to the FormGroups/FormItems.\n\t\tthis.setLabelSpan();\n\n\t\t// Define how many columns a group should take.\n\t\tthis.setGroupsColSpan();\n\t}\n\n\tonAfterRendering() {\n\t\t// Create additional CSS for number of columns that are not supported by default.\n\t\tthis.createAdditionalCSSStyleSheet();\n\t}\n\n\tsetColumnLayout() {\n\t\tconst layoutArr = this.layout.split(\" \");\n\t\tlayoutArr.forEach((breakpoint: string) => {\n\t\t\tif (breakpoint.startsWith(\"S\")) {\n\t\t\t\tthis.columnsS = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"M\")) {\n\t\t\t\tthis.columnsM = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"L\")) {\n\t\t\t\tthis.columnsL = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"XL\")) {\n\t\t\t\tthis.columnsXl = parseInt(breakpoint.slice(2));\n\t\t\t}\n\t\t});\n\t}\n\n\tsetLabelSpan() {\n\t\tthis.labelSpan.split(\" \").forEach((breakpoint: string) => {\n\t\t\tif (breakpoint.startsWith(\"S\")) {\n\t\t\t\tthis.labelSpanS = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"M\")) {\n\t\t\t\tthis.labelSpanM = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"L\")) {\n\t\t\t\tthis.labelSpanL = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"XL\")) {\n\t\t\t\tthis.labelSpanXl = parseInt(breakpoint.slice(2));\n\t\t\t}\n\t\t});\n\n\t\tthis.items.forEach((item: IFormItem) => {\n\t\t\titem.labelSpan = this.labelSpan;\n\t\t\titem.itemSpacing = this.itemSpacing;\n\t\t});\n\t}\n\n\tsetGroupsColSpan() {\n\t\tif (!this.hasGroupItems) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst itemsCount = this.items.length;\n\t\tconst sortedItems = [...this.items].sort((itemA: IFormItem, itemB: IFormItem) => {\n\t\t\treturn (itemB as FormGroup)?.items.length - (itemA as FormGroup)?.items.length;\n\t\t});\n\n\t\tsortedItems.forEach((item: IFormItem, idx: number) => {\n\t\t\titem.colsXl = this.getGroupsColSpan(this.columnsXl, itemsCount, idx, item);\n\t\t\titem.colsL = this.getGroupsColSpan(this.columnsL, itemsCount, idx, item);\n\t\t\titem.colsM = this.getGroupsColSpan(this.columnsM, itemsCount, idx, item);\n\t\t\titem.colsS = this.getGroupsColSpan(this.columnsS, itemsCount, idx, item);\n\t\t});\n\t}\n\n\tgetGroupsColSpan(cols: number, groups: number, index: number, group: IFormItem): number {\n\t\t// Case 0: column span is set from outside.\n\t\tif (group.columnSpan) {\n\t\t\treturn group.columnSpan;\n\t\t}\n\n\t\t// CASE 1: The number of available columns match the number of groups, or only 1 column is available - each group takes 1 column.\n\t\t// For example: 1 column - 1 group, 2 columns - 2 groups, 3 columns - 3 groups, 4columns - 4 groups\n\t\tif (cols === 1 || cols <= groups) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// CASE 2: The number of available columns IS multiple of the number of groups.\n\t\t// For example: 2 column - 1 group, 3 columns - 1 groups, 4 columns - 1 group, 4 columns - 2 groups\n\t\tif (cols % groups === 0) {\n\t\t\treturn cols / groups;\n\t\t}\n\n\t\t// CASE 3: The number of available columns IS NOT multiple of the number of groups.\n\t\tconst MIN_COL_SPAN = 1;\n\t\tconst delta = cols - groups;\n\n\t\t// 7 cols & 4 groups => 2, 2, 2, 1\n\t\tif (delta <= groups) {\n\t\t\treturn index < delta ? MIN_COL_SPAN + 1 : MIN_COL_SPAN;\n\t\t}\n\n\t\t// 7 cols & 3 groups => 3, 2, 2\n\t\treturn index === 0 ? MIN_COL_SPAN + (delta - groups) + 1 : MIN_COL_SPAN + 1;\n\t}\n\n\tget hasGroupItems(): boolean {\n\t\treturn this.items.some((item: IFormItem) => item.isGroup);\n\t}\n\n\tget hasHeader(): boolean {\n\t\treturn this.hasCustomHeader || !!this.headerText;\n\t}\n\n\tget hasCustomHeader(): boolean {\n\t\treturn !!this.header.length;\n\t}\n\n\tget ariaLabelledByID(): string | undefined {\n\t\treturn this.hasCustomHeader ? undefined : `${this._id}-header-text`;\n\t}\n\n\tget groupItemsInfo(): Array<GroupItemsInfo> {\n\t\treturn this.items.map((groupItem: IFormItem) => {\n\t\t\treturn {\n\t\t\t\tgroupItem,\n\t\t\t\tclasses: `ui5-form-column-spanL-${groupItem.colsL} ui5-form-column-spanXL-${groupItem.colsXl} ui5-form-column-spanM-${groupItem.colsM} ui5-form-column-spanS-${groupItem.colsS}`,\n\t\t\t\titems: this.getItemsInfo((Array.from(groupItem.children) as Array<IFormItem>)),\n\t\t\t};\n\t\t});\n\t}\n\n\tget itemsInfo(): Array<ItemsInfo> {\n\t\treturn this.getItemsInfo();\n\t}\n\n\tgetItemsInfo(items?: Array<IFormItem>): Array<ItemsInfo> {\n\t\treturn (items || this.items).map((item: IFormItem) => {\n\t\t\treturn {\n\t\t\t\titem,\n\t\t\t\tclasses: item.columnSpan ? `ui5-form-item-span-${item.columnSpan}` : \"\",\n\t\t\t};\n\t\t});\n\t}\n\n\tcreateAdditionalCSSStyleSheet() {\n\t\t[\n\t\t\t{ breakpoint: \"S\", columns: this.columnsS },\n\t\t\t{ breakpoint: \"M\", columns: this.columnsM },\n\t\t\t{ breakpoint: \"L\", columns: this.columnsL },\n\t\t\t{ breakpoint: \"XL\", columns: this.columnsXl },\n\t\t].forEach(step => {\n\t\t\tconst additionalStyle: string | undefined = this.getAdditionalCSS(step.breakpoint, step.columns);\n\n\t\t\tif (additionalStyle) {\n\t\t\t\tthis.shadowRoot!.adoptedStyleSheets = [...this.shadowRoot!.adoptedStyleSheets, this.getCSSStyleSheet(additionalStyle)];\n\t\t\t}\n\t\t});\n\t}\n\n\tgetAdditionalCSS(step: string, colsNumber: number): string | undefined {\n\t\tif (StepColumn[step as keyof typeof StepColumn] >= colsNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst key = `${step}-${colsNumber}`;\n\n\t\tif (!additionalStylesMap.has(key)) {\n\t\t\tlet containerQuery;\n\t\t\tlet supporedColumnsNumber = StepColumn.S;\n\t\t\tlet stepSpanCSS = \"\";\n\t\t\tlet cols = colsNumber;\n\n\t\t\tif (step === \"S\") {\n\t\t\t\tsupporedColumnsNumber = StepColumn.S;\n\t\t\t\tcontainerQuery = `@container (max-width: 599px) {`;\n\t\t\t} else if (step === \"M\") {\n\t\t\t\tsupporedColumnsNumber = StepColumn.M;\n\t\t\t\tcontainerQuery = `@container (width > 599px) and (width < 1024px) {`;\n\t\t\t} else if (step === \"L\") {\n\t\t\t\tsupporedColumnsNumber = StepColumn.L;\n\t\t\t\tcontainerQuery = `@container (width > 1023px) and (width < 1439px) {`;\n\t\t\t} else if (step === \"XL\") {\n\t\t\t\tcontainerQuery = `@container (min-width: 1440px) {`;\n\t\t\t\tsupporedColumnsNumber = StepColumn.XL;\n\t\t\t}\n\n\t\t\twhile (cols > supporedColumnsNumber) {\n\t\t\t\tstepSpanCSS += `\n\t\t\t\t:host([columns-${step.toLocaleLowerCase()}=\"${cols}\"]) .ui5-form-layout {\n\t\t\t\t\tgrid-template-columns: repeat(${cols}, 1fr);\n\t\t\t\t}\n\n\t\t\t\t.ui5-form-column-span${step}-${cols},\n\t\t\t\t.ui5-form-item-span-${cols} {\n\t\t\t\t\tgrid-column: span ${cols};\n\t\t\t\t}\n\n\t\t\t\t.ui5-form-column-span${step}-${cols} .ui5-form-group-layout {\n\t\t\t\t\tgrid-template-columns: repeat(${cols}, 1fr);\n\t\t\t\t}\n\t\t\t\t`;\n\t\t\t\tcols--;\n\t\t\t}\n\n\t\t\tconst css = `${containerQuery}${stepSpanCSS}}`;\n\t\t\tadditionalStylesMap.set(key, css);\n\t\t}\n\n\t\treturn additionalStylesMap.get(key)!;\n\t}\n\n\tgetCSSStyleSheet(cssText: string): CSSStyleSheet {\n\t\tconst style = new CSSStyleSheet();\n\t\tstyle.replaceSync(cssText);\n\t\treturn style;\n\t}\n}\n\nForm.define();\n\nexport default Form;\nexport type {\n\tIFormItem,\n};\n"]}
1
+ {"version":3,"file":"Form.js","sourceRoot":"","sources":["../src/Form.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\n// Template\nimport FormTemplate from \"./generated/templates/FormTemplate.lit.js\";\n\n// Styles\nimport FormCss from \"./generated/themes/Form.css.js\";\n\nimport Title from \"./Title.js\";\nimport type FormItemSpacing from \"./types/FormItemSpacing.js\";\nimport type FormGroup from \"./FormGroup.js\";\n\nconst additionalStylesMap = new Map<string, string>();\n\nconst StepColumn = {\n\t\"S\": 1,\n\t\"M\": 2,\n\t\"L\": 3,\n\t\"XL\": 6,\n};\n\n/**\n * Interface for components that can be slotted inside `ui5-form` as items.\n * @public\n * @experimental\n * @since 2.0.0\n */\ninterface IFormItem extends HTMLElement {\n\tlabelSpan: string\n\titemSpacing: `${FormItemSpacing}`;\n\treadonly isGroup: boolean;\n\tcolsXl?: number;\n\tcolsL?: number;\n\tcolsM?: number;\n\tcolsS?: number;\n\tcolumnSpan?: number;\n}\n\ntype GroupItemsInfo = {\n\tgroupItem: IFormItem,\n\tclasses: string,\n\titems: Array<ItemsInfo>,\n}\n\ntype ItemsInfo = {\n\titem: IFormItem,\n\tclasses: string,\n}\n\n/**\n * @class\n *\n * ### Overview\n *\n * The Form is a layout component that arranges labels and form fields (like input fields) pairs\n * into a specific number of columns.\n *\n * **Note:** The Form web component is a layout component, it isn't a replacement for the native `form` HTML element.\n * The Form web component does not provide any APIs for form submission.\n *\n * ### Structure\n *\n * - **Form** (`ui5-form`) is the top-level container component, responsible for the content layout and responsiveness.\n * - **FormGroup** (`ui5-form-group`) enables the grouping of the Form content.\n * - **FormItem** (`ui5-form-item`) is a pair of label and form fields and can be used directly in a Form, or as part of a FormGroup.\n *\n * The simplest Form (`ui5-form`) consists of a header area on top,\n * displaying a header text (see the `headingText` property) and content below - an arbitrary number of FormItems (ui5-form-item),\n * representing the pairs of label and form fields.\n *\n * And, there is also \"grouping\" available to assist the implementation of richer UIs.\n * This is enabled by the FormGroup (`ui5-form-group`) component.\n * In this case, the Form is structured into FormGroups and each FormGroup consists of FormItems.\n *\n * ### Responsiveness\n *\n * The Form component reacts and changes its layout on predefined breakpoints.\n * Depending on its size, the Form content (FormGroups and FormItems) gets divided into one or more columns as follows:\n * - **S** (< 600px) – 1 column is recommended (default: 1)\n * - **M** (600px - 1022px) – up to 2 columns are recommended (default: 1)\n * - **L** (1023px - 1439px) - up to 3 columns are recommended (default: 2)\n * - **XL** (> 1439px) – up to 6 columns are recommended (default: 3)\n *\n * To change the layout, use the `layout` property - f.e. layout=\"S1 M2 L3 XL6\".\n *\n * ### Groups\n *\n * To make better use of screen space, there is built-in logic to determine how many columns should a FormGroup occupy.\n *\n * - **Example #1** (perfect match):\n * 4 columns and 4 groups: each group will use 1 column.\n *\n * - **Example #2** (balanced distribution):\n * 4 columns and 2 groups: each group will use 2 columns.\n * 6 columns and 2 groups: each group will use 3 columns.\n *\n * - **Example #3** (unbalanced distribution):\n * 3 columns and 2 groups: the larger one will use 2 columns, the smaller 1 column.\n * 5 columns and 3 groups: two of the groups will use 2 columns each, the smallest 1 column.\n *\n * **Note:** The size of a group element is determined by the number of FormItems assigned to it.\n * In the case of equality, the first in the DOM will use more columns, and the last - fewer columns.\n *\n * - **Example #4** (more groups than columns):\n * 3 columns and 4 groups: each FormGroup uses only 1 column, the last FormGroup will wrap on the second row.\n *\n * ### Groups Column Span\n *\n * To influence the built-in group distribution, described in the previous section,\n * you can use the FormGroup's `columnSpan` property, that defines how many columns the group should expand to.\n *\n * ### Items Column Span\n *\n * FormItem's columnSpan property defines how many columns the form item should expand to inside a form group or the form.\n *\n * ### Items Label Span\n *\n * The placement of the labels depends on the size of the used column.\n * If there is enough space, the labels are next to their associated fields, otherwise - above the fields.\n * By default, the labels take 4/12 of the FormItem, leaving 8/12 parts to associated fields.\n * You can control what space the labels should take via the `labelSpan` property.\n *\n * **For example:** To always place the labels on top set: `labelSpan=\"S12 M12 L12 XL12\"` property.\n *\n * ### ES6 Module Import\n *\n * - import @ui5/webcomponents/dist/Form.js\";\n * - import @ui5/webcomponents/dist/FormGroup.js\";\n * - import @ui5/webcomponents/dist/FormItem.js\";\n *\n * @csspart header - Used to style the wrapper of the header.\n * @csspart layout - Used to style the element defining the form column layout.\n * @csspart column - Used to style a single column of the form column layout.\n *\n * @public\n * @since 2.0.0\n * @experimental This component is availabe since 2.0 under an experimental flag and its API and behaviour are subject to change.\n * @extends UI5Element\n */\n@customElement({\n\ttag: \"ui5-form\",\n\trenderer: litRender,\n\tstyles: FormCss,\n\ttemplate: FormTemplate,\n\tdependencies: [Title],\n})\nclass Form extends UI5Element {\n\t/**\n\t * Defines the number of columns to distribute the form content by breakpoint.\n\t *\n\t * Supported values:\n\t * - `S` - 1 column by default (1 column is recommended)\n\t * - `M` - 1 column by default (up to 2 columns are recommended)\n\t * - `L` - 2 columns by default (up to 3 columns are recommended)\n\t * - `XL` - 3 columns by default (up to 6 columns are recommended)\n\t *\n\t * @default \"S1 M1 L2 XL3\"\n\t * @public\n\t */\n\t@property()\n\tlayout = \"S1 M1 L2 XL3\"\n\n\t/**\n\t * Defines the width proportion of the labels and fields of a FormItem by breakpoint.\n\t *\n\t * By default, the labels take 4/12 (or 1/3) of the form item in M,L and XL sizes,\n\t * and 12/12 in S size, e.g in S the label is on top of its associated field.\n\t *\n\t * The supported values are between 1 and 12. Greater the number, more space the label will use.\n\t *\n\t * **Note:** If \"12\" is set, the label will be displayed on top of its assosiated field.\n\t * @default \"S12 M4 L4 XL4\"\n\t * @public\n\t */\n\t@property()\n\tlabelSpan = \"S12 M4 L4 XL4\";\n\n\t/**\n\t * Defines the header text of the component.\n\t *\n\t * **Note:** The property gets overridden by the `header` slot.\n\t *\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\theaderText?: string;\n\n\t/**\n\t * Defines the vertical spacing between form items.\n\t *\n\t * **Note:** If the Form is meant to be switched between \"non-edit\" and \"edit\" modes,\n\t * we recommend using \"Large\" item spacing in \"non-edit\" mode, and \"Normal\" - for \"edit\" mode,\n\t * to avoid \"jumping\" effect, caused by the hight difference between texts in \"non-edit\" mode and the input fields in \"edit\" mode.\n\t *\n\t * @default \"Normal\"\n\t * @public\n\t */\n\t@property()\n\titemSpacing: `${FormItemSpacing}` = \"Normal\";\n\n\t/**\n\t * Defines the component header area.\n\t *\n\t * **Note:** When a `header` is provided, the `headerText` property is ignored.\n\t * @public\n\t */\n\t@slot({ type: HTMLElement })\n\theader!: Array<HTMLElement>;\n\n\t/**\n\t * Defines the component content - FormGroups or FormItems.\n\t *\n\t * **Note:** Mixing FormGroups and standalone FormItems (not belonging to a group) is not supported.\n\t * Either use FormGroups and make sure all FormItems are part of a FormGroup, or use just FormItems without any FormGroups.\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\t\"default\": true,\n\t\tindividualSlots: true,\n\t\tinvalidateOnChildChange: true,\n\t})\n\titems!: Array<IFormItem>;\n\n\t/**\n\t * @private\n\t */\n\t@property({ type: Number })\n\tcolumnsS = 1;\n\t@property({ type: Number })\n\tlabelSpanS = 12\n\n\t@property({ type: Number })\n\tcolumnsM = 1;\n\t@property({ type: Number })\n\tlabelSpanM = 4;\n\n\t@property({ type: Number })\n\tcolumnsL = 2;\n\t@property({ type: Number })\n\tlabelSpanL = 4;\n\n\t@property({ type: Number })\n\tcolumnsXl = 3;\n\t@property({ type: Number })\n\tlabelSpanXl = 4;\n\n\tonBeforeRendering() {\n\t\t// Parse the layout and set it to the FormGroups/FormItems.\n\t\tthis.setColumnLayout();\n\n\t\t// Parse the labelSpan and set it to the FormGroups/FormItems.\n\t\tthis.setLabelSpan();\n\n\t\t// Define how many columns a group should take.\n\t\tthis.setGroupsColSpan();\n\t}\n\n\tonAfterRendering() {\n\t\t// Create additional CSS for number of columns that are not supported by default.\n\t\tthis.createAdditionalCSSStyleSheet();\n\t}\n\n\tsetColumnLayout() {\n\t\tconst layoutArr = this.layout.split(\" \");\n\t\tlayoutArr.forEach((breakpoint: string) => {\n\t\t\tif (breakpoint.startsWith(\"S\")) {\n\t\t\t\tthis.columnsS = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"M\")) {\n\t\t\t\tthis.columnsM = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"L\")) {\n\t\t\t\tthis.columnsL = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"XL\")) {\n\t\t\t\tthis.columnsXl = parseInt(breakpoint.slice(2));\n\t\t\t}\n\t\t});\n\t}\n\n\tsetLabelSpan() {\n\t\tthis.labelSpan.split(\" \").forEach((breakpoint: string) => {\n\t\t\tif (breakpoint.startsWith(\"S\")) {\n\t\t\t\tthis.labelSpanS = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"M\")) {\n\t\t\t\tthis.labelSpanM = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"L\")) {\n\t\t\t\tthis.labelSpanL = parseInt(breakpoint.slice(1));\n\t\t\t} else if (breakpoint.startsWith(\"XL\")) {\n\t\t\t\tthis.labelSpanXl = parseInt(breakpoint.slice(2));\n\t\t\t}\n\t\t});\n\n\t\tthis.items.forEach((item: IFormItem) => {\n\t\t\titem.labelSpan = this.labelSpan;\n\t\t\titem.itemSpacing = this.itemSpacing;\n\t\t});\n\t}\n\n\tsetGroupsColSpan() {\n\t\tif (!this.hasGroupItems) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst itemsCount = this.items.length;\n\t\tconst sortedItems = [...this.items].sort((itemA: IFormItem, itemB: IFormItem) => {\n\t\t\treturn (itemB as FormGroup)?.items.length - (itemA as FormGroup)?.items.length;\n\t\t});\n\n\t\tsortedItems.forEach((item: IFormItem, idx: number) => {\n\t\t\titem.colsXl = this.getGroupsColSpan(this.columnsXl, itemsCount, idx, item);\n\t\t\titem.colsL = this.getGroupsColSpan(this.columnsL, itemsCount, idx, item);\n\t\t\titem.colsM = this.getGroupsColSpan(this.columnsM, itemsCount, idx, item);\n\t\t\titem.colsS = this.getGroupsColSpan(this.columnsS, itemsCount, idx, item);\n\t\t});\n\t}\n\n\tgetGroupsColSpan(cols: number, groups: number, index: number, group: IFormItem): number {\n\t\t// Case 0: column span is set from outside.\n\t\tif (group.columnSpan) {\n\t\t\treturn group.columnSpan;\n\t\t}\n\n\t\t// CASE 1: The number of available columns match the number of groups, or only 1 column is available - each group takes 1 column.\n\t\t// For example: 1 column - 1 group, 2 columns - 2 groups, 3 columns - 3 groups, 4columns - 4 groups\n\t\tif (cols === 1 || cols <= groups) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// CASE 2: The number of available columns IS multiple of the number of groups.\n\t\t// For example: 2 column - 1 group, 3 columns - 1 groups, 4 columns - 1 group, 4 columns - 2 groups\n\t\tif (cols % groups === 0) {\n\t\t\treturn cols / groups;\n\t\t}\n\n\t\t// CASE 3: The number of available columns IS NOT multiple of the number of groups.\n\t\tconst MIN_COL_SPAN = 1;\n\t\tconst delta = cols - groups;\n\n\t\t// 7 cols & 4 groups => 2, 2, 2, 1\n\t\tif (delta <= groups) {\n\t\t\treturn index < delta ? MIN_COL_SPAN + 1 : MIN_COL_SPAN;\n\t\t}\n\n\t\t// 7 cols & 3 groups => 3, 2, 2\n\t\treturn index === 0 ? MIN_COL_SPAN + (delta - groups) + 1 : MIN_COL_SPAN + 1;\n\t}\n\n\tget hasGroupItems(): boolean {\n\t\treturn this.items.some((item: IFormItem) => item.isGroup);\n\t}\n\n\tget hasHeader(): boolean {\n\t\treturn this.hasCustomHeader || !!this.headerText;\n\t}\n\n\tget hasCustomHeader(): boolean {\n\t\treturn !!this.header.length;\n\t}\n\n\tget ariaLabelledByID(): string | undefined {\n\t\treturn this.hasCustomHeader ? undefined : `${this._id}-header-text`;\n\t}\n\n\tget groupItemsInfo(): Array<GroupItemsInfo> {\n\t\treturn this.items.map((groupItem: IFormItem) => {\n\t\t\treturn {\n\t\t\t\tgroupItem,\n\t\t\t\tclasses: `ui5-form-column-spanL-${groupItem.colsL} ui5-form-column-spanXL-${groupItem.colsXl} ui5-form-column-spanM-${groupItem.colsM} ui5-form-column-spanS-${groupItem.colsS}`,\n\t\t\t\titems: this.getItemsInfo((Array.from(groupItem.children) as Array<IFormItem>)),\n\t\t\t};\n\t\t});\n\t}\n\n\tget itemsInfo(): Array<ItemsInfo> {\n\t\treturn this.getItemsInfo();\n\t}\n\n\tgetItemsInfo(items?: Array<IFormItem>): Array<ItemsInfo> {\n\t\treturn (items || this.items).map((item: IFormItem) => {\n\t\t\treturn {\n\t\t\t\titem,\n\t\t\t\tclasses: item.columnSpan ? `ui5-form-item-span-${item.columnSpan}` : \"\",\n\t\t\t};\n\t\t});\n\t}\n\n\tcreateAdditionalCSSStyleSheet() {\n\t\t[\n\t\t\t{ breakpoint: \"S\", columns: this.columnsS },\n\t\t\t{ breakpoint: \"M\", columns: this.columnsM },\n\t\t\t{ breakpoint: \"L\", columns: this.columnsL },\n\t\t\t{ breakpoint: \"XL\", columns: this.columnsXl },\n\t\t].forEach(step => {\n\t\t\tconst additionalStyle: string | undefined = this.getAdditionalCSS(step.breakpoint, step.columns);\n\n\t\t\tif (additionalStyle) {\n\t\t\t\tthis.shadowRoot!.adoptedStyleSheets = [...this.shadowRoot!.adoptedStyleSheets, this.getCSSStyleSheet(additionalStyle)];\n\t\t\t}\n\t\t});\n\t}\n\n\tgetAdditionalCSS(step: string, colsNumber: number): string | undefined {\n\t\tif (StepColumn[step as keyof typeof StepColumn] >= colsNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst key = `${step}-${colsNumber}`;\n\n\t\tif (!additionalStylesMap.has(key)) {\n\t\t\tlet containerQuery;\n\t\t\tlet supporedColumnsNumber = StepColumn.S;\n\t\t\tlet stepSpanCSS = \"\";\n\t\t\tlet cols = colsNumber;\n\n\t\t\tif (step === \"S\") {\n\t\t\t\tsupporedColumnsNumber = StepColumn.S;\n\t\t\t\tcontainerQuery = `@container (max-width: 599px) {`;\n\t\t\t} else if (step === \"M\") {\n\t\t\t\tsupporedColumnsNumber = StepColumn.M;\n\t\t\t\tcontainerQuery = `@container (width > 599px) and (width < 1024px) {`;\n\t\t\t} else if (step === \"L\") {\n\t\t\t\tsupporedColumnsNumber = StepColumn.L;\n\t\t\t\tcontainerQuery = `@container (width > 1023px) and (width < 1439px) {`;\n\t\t\t} else if (step === \"XL\") {\n\t\t\t\tcontainerQuery = `@container (min-width: 1440px) {`;\n\t\t\t\tsupporedColumnsNumber = StepColumn.XL;\n\t\t\t}\n\n\t\t\twhile (cols > supporedColumnsNumber) {\n\t\t\t\tstepSpanCSS += `\n\t\t\t\t:host([columns-${step.toLocaleLowerCase()}=\"${cols}\"]) .ui5-form-layout {\n\t\t\t\t\tgrid-template-columns: repeat(${cols}, 1fr);\n\t\t\t\t}\n\n\t\t\t\t.ui5-form-column-span${step}-${cols},\n\t\t\t\t.ui5-form-item-span-${cols} {\n\t\t\t\t\tgrid-column: span ${cols};\n\t\t\t\t}\n\n\t\t\t\t.ui5-form-column-span${step}-${cols} .ui5-form-group-layout {\n\t\t\t\t\tgrid-template-columns: repeat(${cols}, 1fr);\n\t\t\t\t}\n\t\t\t\t`;\n\t\t\t\tcols--;\n\t\t\t}\n\n\t\t\tconst css = `${containerQuery}${stepSpanCSS}}`;\n\t\t\tadditionalStylesMap.set(key, css);\n\t\t}\n\n\t\treturn additionalStylesMap.get(key)!;\n\t}\n\n\tgetCSSStyleSheet(cssText: string): CSSStyleSheet {\n\t\tconst style = new CSSStyleSheet();\n\t\tstyle.replaceSync(cssText);\n\t\treturn style;\n\t}\n}\n\nForm.define();\n\nexport default Form;\nexport type {\n\tIFormItem,\n};\n"]}
package/dist/FormGroup.js CHANGED
@@ -88,6 +88,9 @@ __decorate([
88
88
  __decorate([
89
89
  property()
90
90
  ], FormGroup.prototype, "itemSpacing", void 0);
91
+ __decorate([
92
+ property()
93
+ ], FormGroup.prototype, "labelSpan", void 0);
91
94
  FormGroup = __decorate([
92
95
  customElement("ui5-form-group")
93
96
  ], FormGroup);
@@ -1 +1 @@
1
- {"version":3,"file":"FormGroup.js","sourceRoot":"","sources":["../src/FormGroup.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,IAAI,MAAM,iDAAiD,CAAC;AAMnE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QA8BC;;WAEG;QAEH,UAAK,GAAG,CAAC,CAAC;QAGV,UAAK,GAAG,CAAC,CAAC;QAGV,UAAK,GAAG,CAAC,CAAC;QAGV,WAAM,GAAG,CAAC,CAAC;QAGX,gBAAW,GAAyB,QAAQ,CAAC;QAE7C,cAAS,GAAG,eAAe,CAAC;IAgB7B,CAAC;IAdA,iBAAiB;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAc,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAA;AAxDA;IADC,QAAQ,EAAE;6CACS;AAUpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CACP;AAUpB;IAJC,IAAI,CAAC;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI;KACf,CAAC;wCACsB;AAMxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACjB;AAGV;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACjB;AAGV;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACjB;AAGV;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yCAChB;AAGX;IADC,QAAQ,EAAE;8CACkC;AA9CxC,SAAS;IADd,aAAa,CAAC,gBAAgB,CAAC;GAC1B,SAAS,CAgEd;AAED,SAAS,CAAC,MAAM,EAAE,CAAC;AAEnB,eAAe,SAAS,CAAC","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\n\nimport type FormItem from \"./FormItem.js\";\nimport type { IFormItem } from \"./Form.js\";\nimport type FormItemSpacing from \"./types/FormItemSpacing.js\";\n\n/**\n * @class\n *\n * ### Overview\n *\n * The FormGroup (ui5-form-group) represents a group inside the Form (ui5-form) component\n * and it consists of FormItem (ui5-form-item) components.\n *\n * The layout of the FormGroup is mostly defined and controlled by the overarching Form (ui5-form) component.\n * Still, one can influence the layout via the FormGroup's `columnSpan` property,\n * that defines how many columns the group should expand to.\n *\n * ### Usage\n *\n * Тhe FormGroup (ui5-form-group) allows to split a Form into groups,\n * e.g to group FormItems that logically belong together.\n *\n * ### ES6 Module Import\n *\n * - import @ui5/webcomponents/dist/FormGroup.js\";\n *\n * @public\n * @implements {IFormItem}\n * @since 2.0.0\n * @experimental This component is availabe since 2.0 under an experimental flag and its API and behaviour are subject to change.\n * @extends UI5Element\n */\n@customElement(\"ui5-form-group\")\nclass FormGroup extends UI5Element implements IFormItem {\n\t/**\n\t * Defines header text of the component.\n\t *\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\theaderText?: string;\n\n\t/**\n\t * Defines column span of the component,\n\t * e.g how many columns the group should span to.\n\t *\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcolumnSpan?: number;\n\n\t/**\n\t * Defines the items of the component.\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\t\"default\": true,\n\t})\n\titems!: Array<FormItem>;\n\n\t/**\n\t * @private\n\t */\n\t@property({ type: Number })\n\tcolsS = 1;\n\n\t@property({ type: Number })\n\tcolsM = 1;\n\n\t@property({ type: Number })\n\tcolsL = 1;\n\n\t@property({ type: Number })\n\tcolsXl = 1;\n\n\t@property()\n\titemSpacing: `${FormItemSpacing}` = \"Normal\";\n\n\tlabelSpan = \"S12 M4 L4 XL4\";\n\n\tonBeforeRendering() {\n\t\tthis.processFormItems();\n\t}\n\n\tprocessFormItems() {\n\t\tthis.items.forEach((item: FormItem) => {\n\t\t\titem.labelSpan = this.labelSpan;\n\t\t\titem.itemSpacing = this.itemSpacing;\n\t\t});\n\t}\n\n\tget isGroup() {\n\t\treturn true;\n\t}\n}\n\nFormGroup.define();\n\nexport default FormGroup;\n"]}
1
+ {"version":3,"file":"FormGroup.js","sourceRoot":"","sources":["../src/FormGroup.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,IAAI,MAAM,iDAAiD,CAAC;AAMnE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QA8BC;;WAEG;QAEH,UAAK,GAAG,CAAC,CAAC;QAGV,UAAK,GAAG,CAAC,CAAC;QAGV,UAAK,GAAG,CAAC,CAAC;QAGV,WAAM,GAAG,CAAC,CAAC;QAGX,gBAAW,GAAyB,QAAQ,CAAC;QAG7C,cAAS,GAAG,eAAe,CAAC;IAgB7B,CAAC;IAdA,iBAAiB;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAc,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAA;AAzDA;IADC,QAAQ,EAAE;6CACS;AAUpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CACP;AAUpB;IAJC,IAAI,CAAC;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI;KACf,CAAC;wCACsB;AAMxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACjB;AAGV;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACjB;AAGV;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACjB;AAGV;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yCAChB;AAGX;IADC,QAAQ,EAAE;8CACkC;AAG7C;IADC,QAAQ,EAAE;4CACiB;AAjDvB,SAAS;IADd,aAAa,CAAC,gBAAgB,CAAC;GAC1B,SAAS,CAiEd;AAED,SAAS,CAAC,MAAM,EAAE,CAAC;AAEnB,eAAe,SAAS,CAAC","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\n\nimport type FormItem from \"./FormItem.js\";\nimport type { IFormItem } from \"./Form.js\";\nimport type FormItemSpacing from \"./types/FormItemSpacing.js\";\n\n/**\n * @class\n *\n * ### Overview\n *\n * The FormGroup (ui5-form-group) represents a group inside the Form (ui5-form) component\n * and it consists of FormItem (ui5-form-item) components.\n *\n * The layout of the FormGroup is mostly defined and controlled by the overarching Form (ui5-form) component.\n * Still, one can influence the layout via the FormGroup's `columnSpan` property,\n * that defines how many columns the group should expand to.\n *\n * ### Usage\n *\n * Тhe FormGroup (ui5-form-group) allows to split a Form into groups,\n * e.g to group FormItems that logically belong together.\n *\n * ### ES6 Module Import\n *\n * - import @ui5/webcomponents/dist/FormGroup.js\";\n *\n * @public\n * @implements {IFormItem}\n * @since 2.0.0\n * @experimental This component is availabe since 2.0 under an experimental flag and its API and behaviour are subject to change.\n * @extends UI5Element\n */\n@customElement(\"ui5-form-group\")\nclass FormGroup extends UI5Element implements IFormItem {\n\t/**\n\t * Defines header text of the component.\n\t *\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\theaderText?: string;\n\n\t/**\n\t * Defines column span of the component,\n\t * e.g how many columns the group should span to.\n\t *\n\t * @default undefined\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcolumnSpan?: number;\n\n\t/**\n\t * Defines the items of the component.\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\t\"default\": true,\n\t})\n\titems!: Array<FormItem>;\n\n\t/**\n\t * @private\n\t */\n\t@property({ type: Number })\n\tcolsS = 1;\n\n\t@property({ type: Number })\n\tcolsM = 1;\n\n\t@property({ type: Number })\n\tcolsL = 1;\n\n\t@property({ type: Number })\n\tcolsXl = 1;\n\n\t@property()\n\titemSpacing: `${FormItemSpacing}` = \"Normal\";\n\n\t@property()\n\tlabelSpan = \"S12 M4 L4 XL4\";\n\n\tonBeforeRendering() {\n\t\tthis.processFormItems();\n\t}\n\n\tprocessFormItems() {\n\t\tthis.items.forEach((item: FormItem) => {\n\t\t\titem.labelSpan = this.labelSpan;\n\t\t\titem.itemSpacing = this.itemSpacing;\n\t\t});\n\t}\n\n\tget isGroup() {\n\t\treturn true;\n\t}\n}\n\nFormGroup.define();\n\nexport default FormGroup;\n"]}
@@ -78,6 +78,8 @@ declare class RangeSlider extends SliderBase implements IFormInputElement {
78
78
  */
79
79
  endValue: number;
80
80
  rangePressed: boolean;
81
+ _isStartValueValid: boolean;
82
+ _isEndValueValid: boolean;
81
83
  _startValueInitial?: number;
82
84
  _endValueInitial?: number;
83
85
  _valueAffected?: AffectedValue;
@@ -91,6 +93,9 @@ declare class RangeSlider extends SliderBase implements IFormInputElement {
91
93
  _secondHandlePositionFromStart?: number;
92
94
  _selectedRange?: number;
93
95
  _reversedValues: boolean;
96
+ _lastValidStartValue: string;
97
+ _lastValidEndValue: string;
98
+ _areInputValuesSwapped: boolean;
94
99
  static i18nBundle: I18nBundle;
95
100
  get formFormattedValue(): FormData;
96
101
  constructor();
@@ -124,14 +129,15 @@ declare class RangeSlider extends SliderBase implements IFormInputElement {
124
129
  * Resets the stored Range Slider's initial values saved when it was first focused
125
130
  * @private
126
131
  */
127
- _onfocusout(): void;
132
+ _onfocusout(e: FocusEvent): void;
133
+ _onInputFocusOut(e: FocusEvent): void;
128
134
  /**
129
135
  * Handles keyup logic. If one of the handles came across the other
130
136
  * swap the start and end values. Reset the affected value by the finished
131
137
  * user interaction.
132
138
  * @private
133
139
  */
134
- _onkeyup(): void;
140
+ _onkeyup(e: KeyboardEvent): void;
135
141
  _handleActionKeyPress(e: KeyboardEvent): void;
136
142
  /**
137
143
  * Determines affected value (start/end) depending on the currently
@@ -182,7 +188,8 @@ declare class RangeSlider extends SliderBase implements IFormInputElement {
182
188
  * @private
183
189
  */
184
190
  _updateValueOnRangeDrag(event: TouchEvent | MouseEvent): void;
185
- _handleUp(): void;
191
+ _handleUp(e: MouseEvent): void;
192
+ _updateValueFromInput(e: Event): void;
186
193
  /**
187
194
  * Determines where the press occured and which values of the Range Slider
188
195
  * handles should be updated on further interaction.
@@ -261,6 +268,10 @@ declare class RangeSlider extends SliderBase implements IFormInputElement {
261
268
  * @private
262
269
  */
263
270
  _updateHandlesAndRange(newValue: number): void;
271
+ _onInputKeydown(e: KeyboardEvent): void;
272
+ _updateInputValue(): void;
273
+ _saveInputValues(): void;
274
+ _getFormattedValue(value: string): string;
264
275
  /**
265
276
  * Swaps the start and end values of the handles if one came accros the other:
266
277
  * - If the start value is greater than the endValue swap them and their handles
@@ -286,9 +297,8 @@ declare class RangeSlider extends SliderBase implements IFormInputElement {
286
297
  get _startHandle(): HTMLElement;
287
298
  get _endHandle(): HTMLElement;
288
299
  get _progressBar(): HTMLElement;
289
- get _ariaLabelledByStartHandleRefs(): string;
290
- get _ariaLabelledByEndHandleRefs(): string;
291
- get _ariaLabelledByProgressBarRefs(): string;
300
+ get _ariaLabelledByInputText(): string;
301
+ get _ariaDescribedByInputText(): string;
292
302
  get styles(): {
293
303
  progress: {
294
304
  [x: string]: string;
@@ -8,12 +8,13 @@ var RangeSlider_1;
8
8
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
9
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
10
10
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
11
- import { isEscape, isHome, isEnd, } from "@ui5/webcomponents-base/dist/Keys.js";
11
+ import { isEscape, isEnter, isHome, isEnd, } from "@ui5/webcomponents-base/dist/Keys.js";
12
12
  import SliderBase from "./SliderBase.js";
13
13
  import Icon from "./Icon.js";
14
14
  import RangeSliderTemplate from "./generated/templates/RangeSliderTemplate.lit.js";
15
+ import Input from "./Input.js";
15
16
  // Texts
16
- import { RANGE_SLIDER_ARIA_DESCRIPTION, RANGE_SLIDER_START_HANDLE_DESCRIPTION, RANGE_SLIDER_END_HANDLE_DESCRIPTION, } from "./generated/i18n/i18n-defaults.js";
17
+ import { RANGE_SLIDER_ARIA_DESCRIPTION, RANGE_SLIDER_START_HANDLE_DESCRIPTION, RANGE_SLIDER_END_HANDLE_DESCRIPTION, SLIDER_TOOLTIP_INPUT_LABEL, SLIDER_TOOLTIP_INPUT_DESCRIPTION, } from "./generated/i18n/i18n-defaults.js";
17
18
  // Styles
18
19
  import rangeSliderStyles from "./generated/themes/RangeSlider.css.js";
19
20
  /**
@@ -99,11 +100,16 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
99
100
  */
100
101
  this.endValue = 100;
101
102
  this.rangePressed = false;
103
+ this._isStartValueValid = false;
104
+ this._isEndValueValid = false;
102
105
  this._isPressInCurrentRange = false;
103
106
  this._handeIsPressed = false;
104
107
  this._reversedValues = false;
108
+ this._areInputValuesSwapped = false;
105
109
  this._stateStorage.startValue = undefined;
106
110
  this._stateStorage.endValue = undefined;
111
+ this._lastValidStartValue = this.min.toString();
112
+ this._lastValidEndValue = this.max.toString();
107
113
  }
108
114
  get tooltipStartValue() {
109
115
  const ctor = this.constructor;
@@ -155,12 +161,16 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
155
161
  this._setAffectedValue(affectedValue);
156
162
  this.update(affectedValue, this.startValue, this.endValue);
157
163
  }
164
+ if (this.editableTooltip) {
165
+ this._saveInputValues();
166
+ }
158
167
  if (!this.isCurrentStateOutdated()) {
159
168
  return;
160
169
  }
161
170
  this.notResized = true;
162
171
  this.syncUIAndState();
163
172
  this._updateHandlesAndRange(0);
173
+ this.update(this._valueAffected, this.startValue, this.endValue);
164
174
  }
165
175
  syncUIAndState() {
166
176
  // Validate step and update the stored state for the step property.
@@ -214,7 +224,7 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
214
224
  * Resets the stored Range Slider's initial values saved when it was first focused
215
225
  * @private
216
226
  */
217
- _onfocusout() {
227
+ _onfocusout(e) {
218
228
  if (this._isFocusing()) {
219
229
  this._preventFocusOut();
220
230
  return;
@@ -222,9 +232,36 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
222
232
  this._setAffectedValue(undefined);
223
233
  this._startValueInitial = undefined;
224
234
  this._endValueInitial = undefined;
225
- if (this.showTooltip) {
235
+ if (this.showTooltip && !e.relatedTarget?.hasAttribute("ui5-input")) {
236
+ this._tooltipVisibility = SliderBase.TOOLTIP_VISIBILITY.HIDDEN;
237
+ }
238
+ }
239
+ _onInputFocusOut(e) {
240
+ const tooltipInput = e.target;
241
+ const oppositeTooltipInput = tooltipInput.hasAttribute("data-sap-ui-start-value") ? this.shadowRoot.querySelector("[ui5-input][data-sap-ui-end-value]") : this.shadowRoot.querySelector("[ui5-input][data-sap-ui-start-value]");
242
+ const relatedTarget = e.relatedTarget;
243
+ if (this.startValue > this.endValue) {
244
+ this._areInputValuesSwapped = true;
245
+ oppositeTooltipInput.focus();
246
+ return;
247
+ }
248
+ if (tooltipInput.hasAttribute("data-sap-ui-start-value")) {
249
+ this._setAffectedValue("startValue");
250
+ }
251
+ else {
252
+ this._setAffectedValue("endValue");
253
+ }
254
+ if (!this._areInputValuesSwapped || !this.shadowRoot.contains(relatedTarget)) {
226
255
  this._tooltipVisibility = SliderBase.TOOLTIP_VISIBILITY.HIDDEN;
227
256
  }
257
+ this._updateValueFromInput(e);
258
+ this._updateInputValue();
259
+ this.update(this._valueAffected, parseFloat(this._lastValidStartValue), parseFloat(this._lastValidEndValue));
260
+ const isTooltipInputValueValid = parseFloat(tooltipInput.value) >= this.min && parseFloat(tooltipInput.value) <= this.max;
261
+ if (!isTooltipInputValueValid) {
262
+ tooltipInput.value = tooltipInput.hasAttribute("data-sap-ui-start-value") ? this._lastValidStartValue : this._lastValidEndValue;
263
+ tooltipInput.valueState = "None";
264
+ }
228
265
  }
229
266
  /**
230
267
  * Handles keyup logic. If one of the handles came across the other
@@ -232,9 +269,11 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
232
269
  * user interaction.
233
270
  * @private
234
271
  */
235
- _onkeyup() {
236
- super._onkeyup();
237
- this._setAffectedValue(undefined);
272
+ _onkeyup(e) {
273
+ super._onKeyupBase();
274
+ if (!isEnter(e)) {
275
+ this._setAffectedValue(undefined);
276
+ }
238
277
  if (this.startValue !== this._startValueAtBeginningOfAction || this.endValue !== this._endValueAtBeginningOfAction) {
239
278
  this.fireDecoratorEvent("change");
240
279
  }
@@ -340,9 +379,12 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
340
379
  * @private
341
380
  */
342
381
  _onmousedown(e) {
382
+ if (e?.button && e?.button !== 0) {
383
+ return;
384
+ }
343
385
  // If step is 0 no interaction is available because there is no constant
344
386
  // (equal for all user environments) quantitative representation of the value
345
- if (this.disabled || this._effectiveStep === 0) {
387
+ if (this.disabled || this._effectiveStep === 0 || e.target.hasAttribute("ui5-input")) {
346
388
  return;
347
389
  }
348
390
  // Calculate the new value from the press position of the event
@@ -387,7 +429,7 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
387
429
  _handleMove(e) {
388
430
  e.preventDefault();
389
431
  // If 'step' is 0 no interaction is available as there is no constant quantitative representation of the value
390
- if (this.disabled || this._effectiveStep === 0) {
432
+ if (this.disabled || this._effectiveStep === 0 || e.target.hasAttribute("ui5-input")) {
391
433
  return;
392
434
  }
393
435
  // Update UI and state when dragging a single Range Slider handle
@@ -421,7 +463,10 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
421
463
  // Update the UI and the state according to the calculated new values
422
464
  this.update(undefined, newValues[0], newValues[1]);
423
465
  }
424
- _handleUp() {
466
+ _handleUp(e) {
467
+ if (e.target.hasAttribute("ui5-input")) {
468
+ return;
469
+ }
425
470
  this._setAffectedValueByFocusedElement();
426
471
  this._setAffectedValue(undefined);
427
472
  if (this.startValue !== this._startValueAtBeginningOfAction || this.endValue !== this._endValueAtBeginningOfAction) {
@@ -433,6 +478,25 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
433
478
  this._startValueAtBeginningOfAction = undefined;
434
479
  this._endValueAtBeginningOfAction = undefined;
435
480
  }
481
+ _updateValueFromInput(e) {
482
+ if (this._areInputValuesSwapped) {
483
+ return;
484
+ }
485
+ const input = e.target;
486
+ const inputValue = parseFloat(input.value);
487
+ const isValueValid = inputValue >= this._effectiveMin && inputValue <= this._effectiveMax;
488
+ if (!isValueValid) {
489
+ return;
490
+ }
491
+ if (input.hasAttribute("data-sap-ui-start-value")) {
492
+ this.startValue = inputValue;
493
+ return;
494
+ }
495
+ this.endValue = inputValue;
496
+ if (this.startValue > this.endValue) {
497
+ this._areInputValuesSwapped = true;
498
+ }
499
+ }
436
500
  /**
437
501
  * Determines where the press occured and which values of the Range Slider
438
502
  * handles should be updated on further interaction.
@@ -518,6 +582,9 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
518
582
  * @protected
519
583
  */
520
584
  focusInnerElement() {
585
+ if (this.editableTooltip && this._tooltipVisibility === SliderBase.TOOLTIP_VISIBILITY.HIDDEN) {
586
+ return;
587
+ }
521
588
  const isReversed = this._areValuesReversed();
522
589
  const affectedValue = this._valueAffected;
523
590
  if (this._isPressInCurrentRange || !affectedValue) {
@@ -620,6 +687,84 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
620
687
  this._secondHandlePositionFromStart = ((this.endValue - min) / (max - min)) * 100;
621
688
  }
622
689
  }
690
+ _onInputKeydown(e) {
691
+ const targetedInput = e.target;
692
+ const startValueInput = this.shadowRoot.querySelector("[ui5-input][data-sap-ui-start-value]");
693
+ const endValueInput = this.shadowRoot.querySelector("[ui5-input][data-sap-ui-end-value]");
694
+ const startValue = parseFloat(startValueInput.value);
695
+ const endValue = parseFloat(endValueInput.value);
696
+ const affectedValue = targetedInput.hasAttribute("data-sap-ui-start-value") ? "startValue" : "endValue";
697
+ super._onInputKeydown(e);
698
+ if (isEnter(e) && startValue > endValue) {
699
+ const swappedInput = affectedValue === "startValue" ? endValueInput : startValueInput;
700
+ const isValueValid = parseFloat(targetedInput.value) >= this.min && parseFloat(startValueInput.value) <= this.max;
701
+ if (!isValueValid) {
702
+ targetedInput.valueState = "Negative";
703
+ return;
704
+ }
705
+ this._isEndValueValid = parseFloat(endValueInput.value) >= this.min && parseFloat(endValueInput.value) <= this.max;
706
+ this._areInputValuesSwapped = true;
707
+ this._setAffectedValue(affectedValue === "startValue" ? "endValue" : "startValue");
708
+ startValueInput.value = this._getFormattedValue(this.endValue.toString());
709
+ endValueInput.value = this._getFormattedValue(this.startValue.toString());
710
+ swappedInput.focus();
711
+ return;
712
+ }
713
+ this._setAffectedValue(affectedValue);
714
+ }
715
+ _updateInputValue() {
716
+ const startValueInput = this.shadowRoot.querySelector("[ui5-input][data-sap-ui-start-value]");
717
+ const endValueInput = this.shadowRoot.querySelector("[ui5-input][data-sap-ui-end-value]");
718
+ if (!startValueInput && !endValueInput) {
719
+ return;
720
+ }
721
+ this._isStartValueValid = parseFloat(startValueInput.value) >= this.min && parseFloat(startValueInput.value) <= this.max;
722
+ this._isEndValueValid = parseFloat(endValueInput.value) >= this.min && parseFloat(endValueInput.value) <= this.max;
723
+ if (!this._isStartValueValid) {
724
+ startValueInput.valueState = "Negative";
725
+ return;
726
+ }
727
+ if (!this._isEndValueValid) {
728
+ endValueInput.valueState = "Negative";
729
+ return;
730
+ }
731
+ this._lastValidStartValue = startValueInput.value;
732
+ this._lastValidEndValue = endValueInput.value;
733
+ startValueInput.valueState = "None";
734
+ endValueInput.valueState = "None";
735
+ }
736
+ _saveInputValues() {
737
+ const startValueInput = this.shadowRoot.querySelector("[ui5-input][data-sap-ui-start-value]");
738
+ const endValueInput = this.shadowRoot.querySelector("[ui5-input][data-sap-ui-end-value]");
739
+ if (this.editableTooltip && startValueInput && endValueInput) {
740
+ const inputStartValue = parseFloat(startValueInput.value);
741
+ const inputEndValue = parseFloat(endValueInput.value);
742
+ const isStartValueValid = inputStartValue >= this.min && inputStartValue <= this.max;
743
+ const isEndValueValid = inputEndValue >= this.min && inputEndValue <= this.max;
744
+ if (this._isUserInteraction) {
745
+ startValueInput.value = isStartValueValid ? this._getFormattedValue(this.startValue.toString()) : this._getFormattedValue(this._lastValidStartValue);
746
+ endValueInput.value = isEndValueValid ? this._getFormattedValue(this.endValue.toString()) : this._getFormattedValue(this._lastValidEndValue);
747
+ this.startValue = parseFloat(this._getFormattedValue(this.startValue.toString()));
748
+ this.endValue = parseFloat(this._getFormattedValue(this.endValue.toString()));
749
+ this.syncUIAndState();
750
+ this._updateHandlesAndRange(0);
751
+ this.update(this._valueAffected, this.startValue, this.endValue);
752
+ return;
753
+ }
754
+ this._lastValidStartValue = isStartValueValid ? this._getFormattedValue(inputStartValue.toString()) : this._getFormattedValue(this._lastValidStartValue);
755
+ this._lastValidEndValue = isEndValueValid ? this._getFormattedValue(inputEndValue.toString()) : this._getFormattedValue(this._lastValidEndValue);
756
+ if (startValueInput.valueState !== "Negative" && endValueInput.valueState !== "Negative") {
757
+ startValueInput.value = isStartValueValid ? this._getFormattedValue(inputStartValue.toString()) : this._getFormattedValue(this._lastValidStartValue);
758
+ endValueInput.value = isEndValueValid ? this._getFormattedValue(inputEndValue.toString()) : this._getFormattedValue(this._lastValidEndValue);
759
+ }
760
+ }
761
+ }
762
+ _getFormattedValue(value) {
763
+ const valueNumber = parseFloat(value);
764
+ const ctor = this.constructor;
765
+ const stepPrecision = ctor._getDecimalPrecisionOfNumber(this._effectiveStep);
766
+ return valueNumber.toFixed(stepPrecision).toString();
767
+ }
623
768
  /**
624
769
  * Swaps the start and end values of the handles if one came accros the other:
625
770
  * - If the start value is greater than the endValue swap them and their handles
@@ -648,8 +793,11 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
648
793
  }
649
794
  this._setValuesAreReversed();
650
795
  this._updateHandlesAndRange(this[affectedValue]);
651
- this.focusInnerElement();
796
+ if (!this._areInputValuesSwapped) {
797
+ this.focusInnerElement();
798
+ }
652
799
  this.syncUIAndState();
800
+ this._areInputValuesSwapped = false;
653
801
  }
654
802
  /**
655
803
  * Flag that we have swapped the values of the 'start' and 'end' properties,
@@ -686,14 +834,11 @@ let RangeSlider = RangeSlider_1 = class RangeSlider extends SliderBase {
686
834
  get _progressBar() {
687
835
  return this.shadowRoot.querySelector(".ui5-slider-progress");
688
836
  }
689
- get _ariaLabelledByStartHandleRefs() {
690
- return [`${this._id}-accName`, `${this._id}-startHandleDesc`].join(" ").trim();
691
- }
692
- get _ariaLabelledByEndHandleRefs() {
693
- return [`${this._id}-accName`, `${this._id}-endHandleDesc`].join(" ").trim();
837
+ get _ariaLabelledByInputText() {
838
+ return RangeSlider_1.i18nBundle.getText(SLIDER_TOOLTIP_INPUT_LABEL);
694
839
  }
695
- get _ariaLabelledByProgressBarRefs() {
696
- return [`${this._id}-accName`, `${this._id}-sliderDesc`].join(" ").trim();
840
+ get _ariaDescribedByInputText() {
841
+ return RangeSlider_1.i18nBundle.getText(SLIDER_TOOLTIP_INPUT_DESCRIPTION);
697
842
  }
698
843
  get styles() {
699
844
  return {
@@ -730,6 +875,12 @@ __decorate([
730
875
  __decorate([
731
876
  property({ type: Boolean })
732
877
  ], RangeSlider.prototype, "rangePressed", void 0);
878
+ __decorate([
879
+ property({ type: Boolean })
880
+ ], RangeSlider.prototype, "_isStartValueValid", void 0);
881
+ __decorate([
882
+ property({ type: Boolean })
883
+ ], RangeSlider.prototype, "_isEndValueValid", void 0);
733
884
  __decorate([
734
885
  i18n("@ui5/webcomponents")
735
886
  ], RangeSlider, "i18nBundle", void 0);
@@ -739,7 +890,7 @@ RangeSlider = RangeSlider_1 = __decorate([
739
890
  languageAware: true,
740
891
  formAssociated: true,
741
892
  template: RangeSliderTemplate,
742
- dependencies: [Icon],
893
+ dependencies: [Icon, Input],
743
894
  styles: [SliderBase.styles, rangeSliderStyles],
744
895
  })
745
896
  ], RangeSlider);