@ui5/webcomponents 2.25.0-rc.0 → 2.25.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 (279) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/CarouselTemplate.js +1 -1
  4. package/dist/CarouselTemplate.js.map +1 -1
  5. package/dist/ComboBox.d.ts +1 -0
  6. package/dist/ComboBox.js +8 -1
  7. package/dist/ComboBox.js.map +1 -1
  8. package/dist/DayPicker.d.ts +4 -2
  9. package/dist/DayPicker.js +15 -11
  10. package/dist/DayPicker.js.map +1 -1
  11. package/dist/DynamicDateRange.d.ts +11 -0
  12. package/dist/DynamicDateRange.js +12 -0
  13. package/dist/DynamicDateRange.js.map +1 -1
  14. package/dist/DynamicDateRangeInputTemplate.js +1 -1
  15. package/dist/DynamicDateRangeInputTemplate.js.map +1 -1
  16. package/dist/FileUploader.js +1 -2
  17. package/dist/FileUploader.js.map +1 -1
  18. package/dist/FileUploaderTemplate.js +1 -1
  19. package/dist/FileUploaderTemplate.js.map +1 -1
  20. package/dist/IToolbarArrowNavProvider.d.ts +32 -0
  21. package/dist/IToolbarArrowNavProvider.js +4 -0
  22. package/dist/IToolbarArrowNavProvider.js.map +1 -0
  23. package/dist/Input.d.ts +3 -1
  24. package/dist/Input.js +18 -0
  25. package/dist/Input.js.map +1 -1
  26. package/dist/InputIcon.d.ts +64 -0
  27. package/dist/InputIcon.js +118 -0
  28. package/dist/InputIcon.js.map +1 -0
  29. package/dist/InputIconTemplate.d.ts +2 -0
  30. package/dist/InputIconTemplate.js +11 -0
  31. package/dist/InputIconTemplate.js.map +1 -0
  32. package/dist/ListItemCustom.js.map +1 -1
  33. package/dist/MenuItem.js +1 -1
  34. package/dist/MenuItem.js.map +1 -1
  35. package/dist/MenuSeparator.d.ts +7 -14
  36. package/dist/MenuSeparator.js +5 -24
  37. package/dist/MenuSeparator.js.map +1 -1
  38. package/dist/MenuSeparatorTemplate.js +1 -2
  39. package/dist/MenuSeparatorTemplate.js.map +1 -1
  40. package/dist/MultiComboBox.js +8 -3
  41. package/dist/MultiComboBox.js.map +1 -1
  42. package/dist/MultiComboBoxItem.d.ts +1 -0
  43. package/dist/MultiComboBoxItem.js +7 -1
  44. package/dist/MultiComboBoxItem.js.map +1 -1
  45. package/dist/MultiComboBoxItemTemplate.js +4 -2
  46. package/dist/MultiComboBoxItemTemplate.js.map +1 -1
  47. package/dist/MultiInput.js +1 -0
  48. package/dist/MultiInput.js.map +1 -1
  49. package/dist/RangeSlider.js +1 -1
  50. package/dist/RangeSlider.js.map +1 -1
  51. package/dist/RatingIndicator.d.ts +2 -0
  52. package/dist/RatingIndicator.js +2 -0
  53. package/dist/RatingIndicator.js.map +1 -1
  54. package/dist/Slider.js +3 -0
  55. package/dist/Slider.js.map +1 -1
  56. package/dist/SliderBase.d.ts +6 -0
  57. package/dist/SliderBase.js +8 -0
  58. package/dist/SliderBase.js.map +1 -1
  59. package/dist/SliderTemplate.js +1 -1
  60. package/dist/SliderTemplate.js.map +1 -1
  61. package/dist/Table.js +4 -2
  62. package/dist/Table.js.map +1 -1
  63. package/dist/Toolbar.d.ts +40 -3
  64. package/dist/Toolbar.js +225 -6
  65. package/dist/Toolbar.js.map +1 -1
  66. package/dist/ToolbarItem.d.ts +30 -0
  67. package/dist/ToolbarItem.js +202 -0
  68. package/dist/ToolbarItem.js.map +1 -1
  69. package/dist/ToolbarItemBase.d.ts +10 -0
  70. package/dist/ToolbarItemBase.js +19 -0
  71. package/dist/ToolbarItemBase.js.map +1 -1
  72. package/dist/ToolbarSelect.d.ts +4 -2
  73. package/dist/ToolbarSelect.js +7 -4
  74. package/dist/ToolbarSelect.js.map +1 -1
  75. package/dist/ToolbarSelectOption.d.ts +7 -0
  76. package/dist/ToolbarSelectOption.js +4 -1
  77. package/dist/ToolbarSelectOption.js.map +1 -1
  78. package/dist/ToolbarSelectTemplate.js +1 -1
  79. package/dist/ToolbarSelectTemplate.js.map +1 -1
  80. package/dist/TreeItemBase.js.map +1 -1
  81. package/dist/bundle.esm.js +1 -0
  82. package/dist/bundle.esm.js.map +1 -1
  83. package/dist/css/themes/ColorPalette.css +1 -1
  84. package/dist/css/themes/ComboBox.css +1 -1
  85. package/dist/css/themes/DatePicker.css +1 -1
  86. package/dist/css/themes/DynamicDateRange.css +1 -1
  87. package/dist/css/themes/FileUploader.css +1 -1
  88. package/dist/css/themes/Input.css +1 -1
  89. package/dist/css/themes/InputIcon.css +1 -1
  90. package/dist/css/themes/MultiComboBox.css +1 -1
  91. package/dist/css/themes/MultiComboBoxItem.css +1 -1
  92. package/dist/css/themes/MultiComboBoxPopover.css +1 -1
  93. package/dist/css/themes/MultiInput.css +1 -1
  94. package/dist/css/themes/Select.css +1 -1
  95. package/dist/css/themes/StepInput.css +1 -1
  96. package/dist/css/themes/TimePicker.css +1 -1
  97. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  98. package/dist/css/themes/sap_horizon_auto/parameters-bundle.css +1 -1
  99. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  100. package/dist/custom-elements-internal.json +157 -40
  101. package/dist/custom-elements.json +140 -25
  102. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  105. package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  110. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  111. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  112. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  113. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  114. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  115. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  116. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  117. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  118. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  119. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  120. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  121. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  122. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  123. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  124. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  125. package/dist/generated/assets/i18n/messagebundle_id.json +1 -1
  126. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  127. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  128. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  129. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  130. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  131. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  132. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  133. package/dist/generated/assets/i18n/messagebundle_mk.json +1 -1
  134. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  135. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  136. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  137. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  138. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  139. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  140. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  141. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  142. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  143. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  144. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  145. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
  146. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  147. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  148. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  149. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  150. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  151. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  152. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  153. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  154. package/dist/generated/assets/themes/sap_horizon_auto/parameters-bundle.css.json +1 -1
  155. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  156. package/dist/generated/i18n/i18n-defaults.js +1 -1
  157. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  158. package/dist/generated/themes/ColorPalette.css.d.ts +1 -1
  159. package/dist/generated/themes/ColorPalette.css.js +1 -1
  160. package/dist/generated/themes/ColorPalette.css.js.map +1 -1
  161. package/dist/generated/themes/ComboBox.css.d.ts +1 -1
  162. package/dist/generated/themes/ComboBox.css.js +1 -1
  163. package/dist/generated/themes/ComboBox.css.js.map +1 -1
  164. package/dist/generated/themes/DatePicker.css.d.ts +1 -1
  165. package/dist/generated/themes/DatePicker.css.js +1 -1
  166. package/dist/generated/themes/DatePicker.css.js.map +1 -1
  167. package/dist/generated/themes/DynamicDateRange.css.d.ts +1 -1
  168. package/dist/generated/themes/DynamicDateRange.css.js +1 -1
  169. package/dist/generated/themes/DynamicDateRange.css.js.map +1 -1
  170. package/dist/generated/themes/FileUploader.css.d.ts +1 -1
  171. package/dist/generated/themes/FileUploader.css.js +1 -1
  172. package/dist/generated/themes/FileUploader.css.js.map +1 -1
  173. package/dist/generated/themes/Input.css.d.ts +1 -1
  174. package/dist/generated/themes/Input.css.js +1 -1
  175. package/dist/generated/themes/Input.css.js.map +1 -1
  176. package/dist/generated/themes/InputIcon.css.d.ts +1 -1
  177. package/dist/generated/themes/InputIcon.css.js +1 -1
  178. package/dist/generated/themes/InputIcon.css.js.map +1 -1
  179. package/dist/generated/themes/MultiComboBox.css.d.ts +1 -1
  180. package/dist/generated/themes/MultiComboBox.css.js +1 -1
  181. package/dist/generated/themes/MultiComboBox.css.js.map +1 -1
  182. package/dist/generated/themes/MultiComboBoxItem.css.d.ts +1 -1
  183. package/dist/generated/themes/MultiComboBoxItem.css.js +1 -1
  184. package/dist/generated/themes/MultiComboBoxItem.css.js.map +1 -1
  185. package/dist/generated/themes/MultiComboBoxPopover.css.d.ts +1 -1
  186. package/dist/generated/themes/MultiComboBoxPopover.css.js +1 -1
  187. package/dist/generated/themes/MultiComboBoxPopover.css.js.map +1 -1
  188. package/dist/generated/themes/MultiInput.css.d.ts +1 -1
  189. package/dist/generated/themes/MultiInput.css.js +1 -1
  190. package/dist/generated/themes/MultiInput.css.js.map +1 -1
  191. package/dist/generated/themes/Select.css.d.ts +1 -1
  192. package/dist/generated/themes/Select.css.js +1 -1
  193. package/dist/generated/themes/Select.css.js.map +1 -1
  194. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  195. package/dist/generated/themes/StepInput.css.js +1 -1
  196. package/dist/generated/themes/StepInput.css.js.map +1 -1
  197. package/dist/generated/themes/TimePicker.css.d.ts +1 -1
  198. package/dist/generated/themes/TimePicker.css.js +1 -1
  199. package/dist/generated/themes/TimePicker.css.js.map +1 -1
  200. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
  201. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  202. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  203. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.d.ts +1 -1
  204. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.js +1 -1
  205. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.js.map +1 -1
  206. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
  207. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  208. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  209. package/dist/vscode.html-custom-data.json +31 -4
  210. package/dist/web-types.json +72 -22
  211. package/package.json +11 -11
  212. package/src/CarouselTemplate.tsx +0 -1
  213. package/src/DynamicDateRangeInputTemplate.tsx +1 -0
  214. package/src/FileUploaderTemplate.tsx +1 -1
  215. package/src/InputIconTemplate.tsx +36 -0
  216. package/src/MenuSeparatorTemplate.tsx +2 -4
  217. package/src/MultiComboBoxItemTemplate.tsx +4 -1
  218. package/src/SliderTemplate.tsx +1 -0
  219. package/src/ToolbarSelectTemplate.tsx +1 -0
  220. package/src/i18n/messagebundle.properties +1 -1
  221. package/src/i18n/messagebundle_ar.properties +6 -1
  222. package/src/i18n/messagebundle_bg.properties +6 -1
  223. package/src/i18n/messagebundle_ca.properties +6 -1
  224. package/src/i18n/messagebundle_cnr.properties +6 -1
  225. package/src/i18n/messagebundle_cs.properties +6 -1
  226. package/src/i18n/messagebundle_cy.properties +6 -1
  227. package/src/i18n/messagebundle_da.properties +6 -1
  228. package/src/i18n/messagebundle_de.properties +6 -1
  229. package/src/i18n/messagebundle_el.properties +6 -1
  230. package/src/i18n/messagebundle_en.properties +6 -1
  231. package/src/i18n/messagebundle_en_GB.properties +6 -1
  232. package/src/i18n/messagebundle_en_US_sappsd.properties +6 -1
  233. package/src/i18n/messagebundle_en_US_saprigi.properties +6 -1
  234. package/src/i18n/messagebundle_en_US_saptrc.properties +6 -1
  235. package/src/i18n/messagebundle_es.properties +6 -1
  236. package/src/i18n/messagebundle_es_MX.properties +6 -1
  237. package/src/i18n/messagebundle_et.properties +6 -1
  238. package/src/i18n/messagebundle_fi.properties +6 -1
  239. package/src/i18n/messagebundle_fr.properties +15 -10
  240. package/src/i18n/messagebundle_fr_CA.properties +6 -1
  241. package/src/i18n/messagebundle_hi.properties +6 -1
  242. package/src/i18n/messagebundle_hr.properties +6 -1
  243. package/src/i18n/messagebundle_hu.properties +6 -1
  244. package/src/i18n/messagebundle_id.properties +6 -1
  245. package/src/i18n/messagebundle_it.properties +6 -1
  246. package/src/i18n/messagebundle_iw.properties +6 -1
  247. package/src/i18n/messagebundle_ja.properties +6 -1
  248. package/src/i18n/messagebundle_kk.properties +6 -1
  249. package/src/i18n/messagebundle_ko.properties +6 -1
  250. package/src/i18n/messagebundle_lt.properties +6 -1
  251. package/src/i18n/messagebundle_lv.properties +6 -1
  252. package/src/i18n/messagebundle_mk.properties +6 -1
  253. package/src/i18n/messagebundle_ms.properties +6 -1
  254. package/src/i18n/messagebundle_nl.properties +6 -1
  255. package/src/i18n/messagebundle_no.properties +6 -1
  256. package/src/i18n/messagebundle_pl.properties +6 -1
  257. package/src/i18n/messagebundle_pt.properties +6 -1
  258. package/src/i18n/messagebundle_pt_PT.properties +6 -1
  259. package/src/i18n/messagebundle_ro.properties +6 -1
  260. package/src/i18n/messagebundle_ru.properties +6 -1
  261. package/src/i18n/messagebundle_sh.properties +6 -1
  262. package/src/i18n/messagebundle_sk.properties +6 -1
  263. package/src/i18n/messagebundle_sl.properties +6 -1
  264. package/src/i18n/messagebundle_sr.properties +6 -1
  265. package/src/i18n/messagebundle_sv.properties +6 -1
  266. package/src/i18n/messagebundle_th.properties +6 -1
  267. package/src/i18n/messagebundle_tr.properties +6 -1
  268. package/src/i18n/messagebundle_uk.properties +6 -1
  269. package/src/i18n/messagebundle_vi.properties +6 -1
  270. package/src/i18n/messagebundle_zh_CN.properties +6 -1
  271. package/src/i18n/messagebundle_zh_TW.properties +6 -1
  272. package/src/themes/ColorPalette.css +1 -0
  273. package/src/themes/DatePicker.css +1 -2
  274. package/src/themes/Input.css +64 -0
  275. package/src/themes/InputIcon.css +44 -8
  276. package/src/themes/MultiComboBoxItem.css +2 -0
  277. package/src/themes/MultiComboBoxPopover.css +16 -6
  278. package/src/themes/sap_horizon/Card-parameters.css +1 -1
  279. package/src/themes/sap_horizon_dark/Card-parameters.css +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../src/Toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { ChangeInfo, DefaultSlot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js\";\nimport \"@ui5/webcomponents-icons/dist/overflow.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\n\nimport {\n\tTOOLBAR_OVERFLOW_BUTTON_ARIA_LABEL,\n\tTOOLBAR_POPOVER_AVAILABLE_VALUES,\n} from \"./generated/i18n/i18n-defaults.js\";\n\nimport ToolbarTemplate from \"./ToolbarTemplate.js\";\nimport ToolbarCss from \"./generated/themes/Toolbar.css.js\";\n\nimport ToolbarPopoverCss from \"./generated/themes/ToolbarPopover.css.js\";\n\nimport type ToolbarAlign from \"./types/ToolbarAlign.js\";\nimport type ToolbarDesign from \"./types/ToolbarDesign.js\";\nimport ToolbarItemOverflowBehavior from \"./types/ToolbarItemOverflowBehavior.js\";\n\nimport type ToolbarItemBase from \"./ToolbarItemBase.js\";\nimport type ToolbarSeparator from \"./ToolbarSeparator.js\";\n\nimport type Button from \"./Button.js\";\nimport type Popover from \"./Popover.js\";\nimport getActiveElement from \"@ui5/webcomponents-base/dist/util/getActiveElement.js\";\n\ntype ToolbarMinWidthChangeEventDetail = {\n\tminWidth: number,\n};\n\nfunction calculateCSSREMValue(styleSet: CSSStyleDeclaration, propertyName: string): number {\n\treturn Number(styleSet.getPropertyValue(propertyName).replace(\"rem\", \"\")) * parseInt(getComputedStyle(document.body).getPropertyValue(\"font-size\"));\n}\n\nfunction parsePxValue(styleSet: CSSStyleDeclaration, propertyName: string): number {\n\treturn Number(styleSet.getPropertyValue(propertyName).replace(\"px\", \"\"));\n}\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-toolbar` component is used to create a horizontal layout with items.\n * The items can be overflowing in a popover, when the space is not enough to show all of them.\n *\n * ### Keyboard Handling\n * The `ui5-toolbar` provides advanced keyboard handling.\n *\n * - The control is not interactive, but can contain of interactive elements\n * - [Tab] - iterates through elements\n *\n * ### ES6 Module Import\n * `import \"@ui5/webcomponents/dist/Toolbar.js\";`\n * @constructor\n * @extends UI5Element\n * @public\n * @since 1.17.0\n */\n@customElement({\n\ttag: \"ui5-toolbar\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: ToolbarTemplate,\n})\n/**\n * @private\n*/\n@event(\"_min-content-width-change\", {\n\tbubbles: true,\n})\n\nclass Toolbar extends UI5Element {\n\teventDetails!: {\n\t\t\"_min-content-width-change\": ToolbarMinWidthChangeEventDetail\n\t}\n\t@i18n(\"@ui5/webcomponents\")\n\tstatic i18nBundle: I18nBundle;\n\n\t/**\n\t * Indicated the direction in which the Toolbar items will be aligned.\n\t * @public\n\t * @default \"End\"\n\t */\n\t@property()\n\talignContent: `${ToolbarAlign}` = \"End\";\n\n\t/**\n\t * Calculated width of the whole toolbar.\n\t * @private\n\t * @default undefined\n\t */\n\t@property({ type: Number })\n\twidth?: number;\n\n\t/**\n\t * Calculated width of the toolbar content.\n\t * @private\n\t * @default undefined\n\t */\n\t@property({ type: Number })\n\tcontentWidth?: number;\n\n\t/**\n\t * Notifies the toolbar if it should show the items in a reverse way if Toolbar Popover needs to be placed on \"Top\" position.\n\t * @private\n\t */\n\t@property({ type: Boolean })\n\treverseOverflow = false;\n\n\t/**\n\t * Defines the accessible ARIA name of the component.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\taccessibleName?: string;\n\n\t/**\n\t * Receives id(or many ids) of the elements that label the input.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\taccessibleNameRef?: string;\n\n\t/**\n\t * Defines the accessible ARIA name of the overflow button of the component.\n\t *\n\t * **Note:** When not set, the built-in translation for \"Additional Options\" is used.\n\t * @default undefined\n\t * @public\n\t * @since 2.22.0\n\t */\n\t@property()\n\toverflowButtonAccessibleName?: string;\n\n\t/**\n\t * Defines the toolbar design.\n\t * @public\n\t * @default \"Solid\"\n\t * @since 2.0.0\n\t */\n\t@property()\n\tdesign: `${ToolbarDesign}` = \"Solid\"\n\n\t@property({ type: Boolean })\n\tpopoverOpen = false;\n\n\t/**\n\t * Defines the items of the component.\n\t *\n\t * **Note:** Currently only `ui5-toolbar-button`, `ui5-toolbar-select`, `ui5-toolbar-separator` and `ui5-toolbar-spacer` are allowed here.\n\t * @public\n\t */\n\t@slot({\n\t\t\"default\": true, type: HTMLElement, invalidateOnChildChange: true, individualSlots: true,\n\t})\n\titems!: DefaultSlot<ToolbarItemBase>\n\n\t_onResize!: ResizeObserverCallback;\n\t_onCloseOverflow!: EventListener;\n\titemsToOverflow: Array<ToolbarItemBase> = [];\n\titemsWidth = 0;\n\tminContentWidth = 0;\n\n\tITEMS_WIDTH_MAP: Map<string, number> = new Map();\n\n\tstatic get styles() {\n\t\treturn [\n\t\t\tToolbarCss,\n\t\t\tToolbarPopoverCss,\n\t\t];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._onResize = this.onResize.bind(this);\n\t\tthis._onCloseOverflow = this.closeOverflow.bind(this);\n\t}\n\n\t/**\n\t * Read-only members\n\t */\n\n\tget overflowButtonSize(): number {\n\t\treturn this.overflowButtonDOM?.getBoundingClientRect().width || 0;\n\t}\n\n\tget padding(): number {\n\t\tconst toolbarComputedStyle = getComputedStyle(this.getDomRef()!);\n\t\treturn calculateCSSREMValue(toolbarComputedStyle, \"--_ui5-toolbar-padding-left\")\n\t\t\t+ calculateCSSREMValue(toolbarComputedStyle, \"--_ui5-toolbar-padding-right\");\n\t}\n\n\tget alwaysOverflowItems() {\n\t\treturn this.items.filter(item => item.overflowPriority === ToolbarItemOverflowBehavior.AlwaysOverflow);\n\t}\n\n\tget movableItems() {\n\t\treturn this.items.filter(item => item.overflowPriority !== ToolbarItemOverflowBehavior.AlwaysOverflow && item.overflowPriority !== ToolbarItemOverflowBehavior.NeverOverflow);\n\t}\n\n\tget overflowItems() {\n\t\t// spacers are ignored\n\t\tconst overflowItems = this.itemsToOverflow.filter(item => !item.ignoreSpace);\n\t\treturn this.reverseOverflow ? overflowItems.reverse() : overflowItems;\n\t}\n\n\tget standardItems() {\n\t\treturn this.items.filter(item => this.itemsToOverflow.indexOf(item) === -1);\n\t}\n\n\tget hideOverflowButton() {\n\t\treturn this.itemsToOverflow.filter(item => !(item.ignoreSpace || item.isSeparator)).length === 0;\n\t}\n\n\tget interactiveItems() {\n\t\treturn this.items.filter((item: ToolbarItemBase) => item.isInteractive);\n\t}\n\n\t/**\n\t * Accessibility\n\t */\n\n\tget hasAriaSemantics() {\n\t\treturn this.interactiveItems.length > 1;\n\t}\n\n\tget accessibleRole() {\n\t\treturn this.hasAriaSemantics ? \"toolbar\" as const : undefined;\n\t}\n\n\tget ariaLabelText() {\n\t\treturn this.hasAriaSemantics ? getEffectiveAriaLabelText(this) : undefined;\n\t}\n\n\tget accInfo() {\n\t\treturn {\n\t\t\troot: {\n\t\t\t\trole: this.accessibleRole,\n\t\t\t\taccessibleName: this.ariaLabelText,\n\t\t\t},\n\t\t\toverflowButton: {\n\t\t\t\taccessibleName: this.overflowButtonAccessibleName || Toolbar.i18nBundle.getText(TOOLBAR_OVERFLOW_BUTTON_ARIA_LABEL),\n\t\t\t\ttooltip: Toolbar.i18nBundle.getText(TOOLBAR_OVERFLOW_BUTTON_ARIA_LABEL),\n\t\t\t\taccessibilityAttributes: {\n\t\t\t\t\texpanded: this.popoverOpen,\n\t\t\t\t\thasPopup: \"menu\" as const,\n\t\t\t\t},\n\t\t\t},\n\t\t\tpopover: {\n\t\t\t\taccessibleName: Toolbar.i18nBundle.getText(TOOLBAR_POPOVER_AVAILABLE_VALUES),\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Toolbar Overflow Popover\n\t */\n\n\tget overflowButtonDOM(): Button | null {\n\t\treturn this.shadowRoot!.querySelector(\".ui5-tb-overflow-btn\");\n\t}\n\n\tget hasFlexibleSpacers() {\n\t\treturn this.items.some((item: ToolbarItemBase) => item.hasFlexibleWidth);\n\t}\n\n\t/**\n\t * Lifecycle methods\n\t */\n\tonEnterDOM() {\n\t\tResizeHandler.register(this, this._onResize);\n\t}\n\n\tonExitDOM() {\n\t\tResizeHandler.deregister(this, this._onResize);\n\t}\n\n\tonInvalidation(changeInfo: ChangeInfo) {\n\t\tif (changeInfo.reason === \"childchange\") {\n\t\t\tconst currentItemsWidth = this.items.reduce((total, item) => total + this.getItemWidth(item), 0);\n\t\t\tif (currentItemsWidth !== this.itemsWidth) {\n\t\t\t\tthis.onToolbarItemChange();\n\t\t\t}\n\t\t}\n\t}\n\n\tonBeforeRendering() {\n\t\tthis.detachListeners();\n\t\tthis.attachListeners();\n\t\tif (getActiveElement() === this.overflowButtonDOM?.getFocusDomRef() && this.hideOverflowButton) {\n\t\t\tconst lastItem = this.standardItems.filter(item => item.isInteractive).at(-1);\n\t\t\tlastItem?.focus();\n\t\t}\n\t\tthis.prePopulateAlwaysOverflowItems();\n\t}\n\n\tasync onAfterRendering() {\n\t\tawait renderFinished();\n\t\tthis.storeItemsWidth();\n\t\tthis.processOverflowLayout();\n\t\tthis.items.forEach(item => {\n\t\t\tthis.addItemsAdditionalProperties(item);\n\t\t});\n\t}\n\n\taddItemsAdditionalProperties(item: ToolbarItemBase) {\n\t\titem.isOverflowed = this.overflowItems.indexOf(item) !== -1;\n\t\tconst itemWrapper = this.shadowRoot!.querySelector(`#${item._individualSlot}`) as HTMLElement;\n\t\tif (item.hasOverflow && !item.isOverflowed && itemWrapper) {\n\t\t\t// We need to set the max-width to the self-overflow element in order ot prevent it from taking all the available space,\n\t\t\t// since, unlike the other items, it is allowed to grow and shrink\n\t\t\t// We need to set the max-width to none and its position to absolute to allow the item to grow and measure its width,\n\t\t\t// then when set, the max-width will be cached and we will set its highest value to not cut it when the Toolbar shrinks it\n\t\t\t// on rendering and then we resize it manually.\n\t\t\titemWrapper.style.maxWidth = `none`;\n\t\t\titemWrapper?.classList.add(\"ui5-tb-self-overflow-grow\");\n\t\t\titem._maxWidth = Math.max(this.getItemWidth(item), item._maxWidth);\n\t\t\titemWrapper.style.maxWidth = `${item._maxWidth}px`;\n\t\t\titemWrapper?.classList.remove(\"ui5-tb-self-overflow-grow\");\n\t\t}\n\t}\n\n\t/**\n\t * Returns if the overflow popup is open.\n\t * @public\n\t */\n\tisOverflowOpen(): boolean {\n\t\tconst overflowPopover = this.getOverflowPopover();\n\t\treturn overflowPopover.open;\n\t}\n\n\topenOverflow(): void {\n\t\tconst overflowPopover = this.getOverflowPopover();\n\t\toverflowPopover.opener = this.overflowButtonDOM!;\n\t\toverflowPopover.open = true;\n\t\tthis.reverseOverflow = overflowPopover.actualPlacement === \"Top\";\n\t}\n\n\tcloseOverflow() {\n\t\tconst overflowPopover = this.getOverflowPopover();\n\t\toverflowPopover.open = false;\n\t}\n\n\ttoggleOverflow() {\n\t\tif (this.popoverOpen) {\n\t\t\tthis.closeOverflow();\n\t\t} else {\n\t\t\tthis.openOverflow();\n\t\t}\n\t}\n\n\tgetOverflowPopover(): Popover {\n\t\treturn this.shadowRoot!.querySelector<Popover>(\".ui5-overflow-popover\")!;\n\t}\n\n\t/**\n\t * Layout management\n\t */\n\n\tprocessOverflowLayout() {\n\t\tif (this.offsetWidth === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst containerWidth = this.offsetWidth - this.padding;\n\t\tconst contentWidth = this.itemsWidth;\n\t\tlet overflowSpace = contentWidth - containerWidth + this.overflowButtonSize;\n\n\t\tif (contentWidth <= containerWidth) {\n\t\t\toverflowSpace = 0;\n\t\t}\n\n\t\t// skip calculation if the width has not been changed or if the items width has not been changed\n\t\tif (this.width === containerWidth && this.contentWidth === contentWidth) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.distributeItems(overflowSpace);\n\t\tthis.width = containerWidth;\n\t\tthis.contentWidth = contentWidth;\n\t}\n\n\tstoreItemsWidth() {\n\t\tlet totalWidth = 0,\n\t\t\tminWidth = 0;\n\n\t\tthis.items.forEach(item => {\n\t\t\tconst itemWidth = this.getItemWidth(item);\n\t\t\ttotalWidth += itemWidth;\n\t\t\tif (item.overflowPriority === ToolbarItemOverflowBehavior.NeverOverflow) {\n\t\t\t\tminWidth += itemWidth;\n\t\t\t}\n\t\t\tthis.ITEMS_WIDTH_MAP.set(item._id, itemWidth);\n\t\t});\n\n\t\tif (minWidth !== this.minContentWidth) {\n\t\t\tconst spaceAroundContent = this.offsetWidth - this.getDomRef()!.offsetWidth;\n\t\t\tthis.fireDecoratorEvent(\"_min-content-width-change\", {\n\t\t\t\tminWidth: minWidth + spaceAroundContent + this.overflowButtonSize,\n\t\t\t});\n\t\t}\n\n\t\tthis.itemsWidth = totalWidth;\n\t\tthis.minContentWidth = minWidth;\n\t}\n\n\tdistributeItems(overflowSpace = 0) {\n\t\tconst movableItems = this.movableItems.reverse();\n\t\tlet index = 0;\n\t\tlet currentItem = movableItems[index];\n\n\t\tthis.itemsToOverflow = [];\n\n\t\t// distribute items that always overflow\n\t\tthis.distributeItemsThatAlwaysOverflow();\n\n\t\twhile (overflowSpace > 0 && currentItem) {\n\t\t\tthis.itemsToOverflow.unshift(currentItem);\n\t\t\toverflowSpace -= this.getCachedItemWidth(currentItem?._id) || 0;\n\t\t\tindex++;\n\t\t\tcurrentItem = movableItems[index];\n\t\t}\n\n\t\t// If the last bar item is a spacer, force it to the overflow even if there is enough space for it\n\t\tif (index < movableItems.length) {\n\t\t\tlet lastItem = movableItems[index];\n\t\t\twhile (index <= movableItems.length - 1 && lastItem.isSeparator) {\n\t\t\t\tthis.itemsToOverflow.unshift(lastItem);\n\t\t\t\tindex++;\n\t\t\t\tlastItem = movableItems[index];\n\t\t\t}\n\t\t}\n\n\t\tthis.setSeperatorsVisibilityInOverflow();\n\t}\n\n\tdistributeItemsThatAlwaysOverflow() {\n\t\tthis.alwaysOverflowItems.forEach((item: ToolbarItemBase) => {\n\t\t\tthis.itemsToOverflow.push(item);\n\t\t});\n\t}\n\n\tsetSeperatorsVisibilityInOverflow() {\n\t\tthis.itemsToOverflow.forEach((item, idx, items) => {\n\t\t\tif (item.isSeparator) {\n\t\t\t\t(item as ToolbarSeparator).visible = this.shouldShowSeparatorInOverflow(idx, items);\n\t\t\t}\n\t\t});\n\t}\n\n\tshouldShowSeparatorInOverflow(separatorIdx: number, overflowItems: Array<ToolbarItemBase>) {\n\t\tlet foundPrevNonSeparatorItem = false;\n\t\tlet foundNextNonSeperatorItem = false;\n\n\t\t// search for non-separator item before and after the seperator\n\t\toverflowItems.forEach((item, idx) => {\n\t\t\tif (idx < separatorIdx && !item.isSeparator) {\n\t\t\t\tfoundPrevNonSeparatorItem = true;\n\t\t\t}\n\t\t\tif (idx > separatorIdx && !item.isSeparator) {\n\t\t\t\tfoundNextNonSeperatorItem = true;\n\t\t\t}\n\t\t});\n\n\t\treturn foundPrevNonSeparatorItem && foundNextNonSeperatorItem;\n\t}\n\n\t/**\n\t * Adds AlwaysOverflow items to overflow to ensure they are never rendered outside overflow (and visual flash is prevented)\n\t */\n\tprePopulateAlwaysOverflowItems() {\n\t\tthis.alwaysOverflowItems.forEach(item => {\n\t\t\tif (!this.itemsToOverflow.includes(item)) {\n\t\t\t\tthis.itemsToOverflow.push(item);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Event Handlers\n\t */\n\n\tonOverflowPopoverClosed() {\n\t\tthis.popoverOpen = false;\n\t}\n\n\tonOverflowPopoverOpened() {\n\t\tthis.popoverOpen = true;\n\t}\n\n\tonResize() {\n\t\tthis.closeOverflow();\n\t\tthis.storeItemsWidth();\n\t\tthis.processOverflowLayout();\n\t}\n\n\t/**\n\t * Private members\n\t */\n\n\tattachListeners() {\n\t\tthis.addEventListener(\"ui5-close-overflow\", this._onCloseOverflow);\n\t}\n\n\tdetachListeners() {\n\t\tthis.removeEventListener(\"ui5-close-overflow\", this._onCloseOverflow);\n\t}\n\n\tonToolbarItemChange() {\n\t\t// some items were updated reset the cache and trigger a re-render\n\t\tthis.itemsToOverflow = [];\n\t\tthis.contentWidth = 0; // re-render\n\t}\n\n\tgetItemWidth(item: ToolbarItemBase): number {\n\t\t// Spacer width - always 0 for flexible spacers, so that they shrink, otherwise - measure the width normally\n\t\tif (item.ignoreSpace || item.isSeparator) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst id: string = item._id;\n\t\t// Measure rendered width for spacers with width, and for normal items\n\t\tconst renderedItem = this.shadowRoot!.querySelector<HTMLElement>(`#${item._individualSlot}`);\n\n\t\tlet itemWidth = 0;\n\n\t\tif (renderedItem && !renderedItem.classList.contains(\"ui5-tb-popover-item\") && renderedItem.offsetWidth && item._isRendering === false) {\n\t\t\tconst ItemCSSStyleSet = getComputedStyle(renderedItem);\n\t\t\titemWidth = renderedItem.offsetWidth + parsePxValue(ItemCSSStyleSet, \"margin-inline-end\")\n\t\t\t\t+ parsePxValue(ItemCSSStyleSet, \"margin-inline-start\");\n\t\t} else {\n\t\t\titemWidth = this.getCachedItemWidth(id) || 0;\n\t\t}\n\n\t\treturn Math.ceil(itemWidth);\n\t}\n\n\tgetCachedItemWidth(id: string) {\n\t\treturn this.ITEMS_WIDTH_MAP.get(id);\n\t}\n}\n\nToolbar.define();\n\nexport default Toolbar;\nexport type {\n\tToolbarMinWidthChangeEventDetail,\n};\n"]}
1
+ {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../src/Toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { ChangeInfo, DefaultSlot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport {\n\tisLeft,\n\tisRight,\n\tisHome,\n\tisEnd,\n\tisTabNext,\n\tisTabPrevious,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js\";\nimport \"@ui5/webcomponents-icons/dist/overflow.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\n\nimport {\n\tTOOLBAR_OVERFLOW_BUTTON_ARIA_LABEL,\n\tTOOLBAR_POPOVER_AVAILABLE_VALUES,\n} from \"./generated/i18n/i18n-defaults.js\";\n\nimport ToolbarTemplate from \"./ToolbarTemplate.js\";\nimport ToolbarCss from \"./generated/themes/Toolbar.css.js\";\n\nimport ToolbarPopoverCss from \"./generated/themes/ToolbarPopover.css.js\";\n\nimport type ToolbarAlign from \"./types/ToolbarAlign.js\";\nimport type ToolbarDesign from \"./types/ToolbarDesign.js\";\nimport ToolbarItemOverflowBehavior from \"./types/ToolbarItemOverflowBehavior.js\";\n\nimport ToolbarItemBase from \"./ToolbarItemBase.js\";\nimport type ToolbarSeparator from \"./ToolbarSeparator.js\";\n\nimport type Button from \"./Button.js\";\nimport type Popover from \"./Popover.js\";\nimport getActiveElement from \"@ui5/webcomponents-base/dist/util/getActiveElement.js\";\n\ntype ToolbarMinWidthChangeEventDetail = {\n\tminWidth: number,\n};\n\nfunction calculateCSSREMValue(styleSet: CSSStyleDeclaration, propertyName: string): number {\n\treturn Number(styleSet.getPropertyValue(propertyName).replace(\"rem\", \"\")) * parseInt(getComputedStyle(document.body).getPropertyValue(\"font-size\"));\n}\n\nfunction parsePxValue(styleSet: CSSStyleDeclaration, propertyName: string): number {\n\treturn Number(styleSet.getPropertyValue(propertyName).replace(\"px\", \"\"));\n}\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-toolbar` component is used to create a horizontal layout with items.\n * The items can be overflowing in a popover, when the space is not enough to show all of them.\n *\n * ### Keyboard Handling\n * The `ui5-toolbar` provides advanced keyboard handling.\n *\n * - [Left]/[Right] - navigate among toolbar items\n * - [Home]/[End] - move to first/last toolbar item\n * - [Tab] / [Shift]+[Tab] - exit the toolbar\n *\n * ### ES6 Module Import\n * `import \"@ui5/webcomponents/dist/Toolbar.js\";`\n * @constructor\n * @extends UI5Element\n * @public\n * @since 1.17.0\n */\n@customElement({\n\ttag: \"ui5-toolbar\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: ToolbarTemplate,\n})\n/**\n * @private\n*/\n@event(\"_min-content-width-change\", {\n\tbubbles: true,\n})\n\nclass Toolbar extends UI5Element {\n\teventDetails!: {\n\t\t\"_min-content-width-change\": ToolbarMinWidthChangeEventDetail\n\t}\n\t@i18n(\"@ui5/webcomponents\")\n\tstatic i18nBundle: I18nBundle;\n\n\t/**\n\t * Indicated the direction in which the Toolbar items will be aligned.\n\t * @public\n\t * @default \"End\"\n\t */\n\t@property()\n\talignContent: `${ToolbarAlign}` = \"End\";\n\n\t/**\n\t * Calculated width of the whole toolbar.\n\t * @private\n\t * @default undefined\n\t */\n\t@property({ type: Number })\n\twidth?: number;\n\n\t/**\n\t * Calculated width of the toolbar content.\n\t * @private\n\t * @default undefined\n\t */\n\t@property({ type: Number })\n\tcontentWidth?: number;\n\n\t/**\n\t * Notifies the toolbar if it should show the items in a reverse way if Toolbar Popover needs to be placed on \"Top\" position.\n\t * @private\n\t */\n\t@property({ type: Boolean })\n\treverseOverflow = false;\n\n\t/**\n\t * Defines the accessible ARIA name of the component.\n\t *\n\t * **Note:** It is strongly recommended to always set this property or `accessibleNameRef`\n\t * when the toolbar has `role=\"toolbar\"` (i.e. when it contains more than one interactive item).\n\t * Without an accessible name, screen readers will announce the toolbar without any context,\n\t * making it harder for keyboard-only and AT users to understand its purpose.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\taccessibleName?: string;\n\n\t/**\n\t * Receives id(or many ids) of the elements that label the input.\n\t *\n\t * **Note:** When the toolbar has `role=\"toolbar\"`, at least one of `accessibleName` or\n\t * `accessibleNameRef` should be provided to satisfy WCAG 2.1 success criterion 4.1.2.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\taccessibleNameRef?: string;\n\n\t/**\n\t * Defines the accessible ARIA name of the overflow button of the component.\n\t *\n\t * **Note:** When not set, the built-in translation for \"Additional Options\" is used.\n\t * @default undefined\n\t * @public\n\t * @since 2.22.0\n\t */\n\t@property()\n\toverflowButtonAccessibleName?: string;\n\n\t/**\n\t * Defines the toolbar design.\n\t * @public\n\t * @default \"Solid\"\n\t * @since 2.0.0\n\t */\n\t@property()\n\tdesign: `${ToolbarDesign}` = \"Solid\"\n\n\t@property({ type: Boolean })\n\tpopoverOpen = false;\n\n\t/**\n\t * Defines the items of the component.\n\t *\n\t * **Note:** Currently only `ui5-toolbar-button`, `ui5-toolbar-select`, `ui5-toolbar-separator` and `ui5-toolbar-spacer` are allowed here.\n\t * @public\n\t */\n\t@slot({\n\t\t\"default\": true, type: HTMLElement, invalidateOnChildChange: true, individualSlots: true,\n\t})\n\titems!: DefaultSlot<ToolbarItemBase>\n\n\t_onResize!: ResizeObserverCallback;\n\t_onCloseOverflow!: EventListener;\n\t_onFocusIn!: (e: FocusEvent) => void;\n\t_onKeyDown!: (e: KeyboardEvent) => void;\n\titemsToOverflow: Array<ToolbarItemBase> = [];\n\titemsWidth = 0;\n\tminContentWidth = 0;\n\t_lastFocusedItem?: ToolbarItemBase | HTMLElement;\n\n\tITEMS_WIDTH_MAP: Map<string, number> = new Map();\n\n\tstatic get styles() {\n\t\treturn [\n\t\t\tToolbarCss,\n\t\t\tToolbarPopoverCss,\n\t\t];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._onResize = this.onResize.bind(this);\n\t\tthis._onCloseOverflow = this.closeOverflow.bind(this);\n\t\tthis._onFocusIn = this._onfocusin.bind(this);\n\t\tthis._onKeyDown = this._onkeydown.bind(this);\n\t}\n\t/**\n\t * Read-only members\n\t */\n\tget overflowButtonSize(): number {\n\t\treturn this.overflowButtonDOM?.getBoundingClientRect().width || 0;\n\t}\n\tget padding(): number {\n\t\tconst toolbarComputedStyle = getComputedStyle(this.getDomRef()!);\n\t\treturn calculateCSSREMValue(toolbarComputedStyle, \"--_ui5-toolbar-padding-left\")\n\t\t\t+ calculateCSSREMValue(toolbarComputedStyle, \"--_ui5-toolbar-padding-right\");\n\t}\n\n\tget alwaysOverflowItems() {\n\t\treturn this.items.filter(item => item.overflowPriority === ToolbarItemOverflowBehavior.AlwaysOverflow);\n\t}\n\n\tget movableItems() {\n\t\treturn this.items.filter(item => item.overflowPriority !== ToolbarItemOverflowBehavior.AlwaysOverflow && item.overflowPriority !== ToolbarItemOverflowBehavior.NeverOverflow);\n\t}\n\n\tget overflowItems() {\n\t\t// spacers are ignored\n\t\tconst overflowItems = this.itemsToOverflow.filter(item => !item.ignoreSpace);\n\t\treturn this.reverseOverflow ? overflowItems.reverse() : overflowItems;\n\t}\n\n\tget standardItems() {\n\t\treturn this.items.filter(item => this.itemsToOverflow.indexOf(item) === -1);\n\t}\n\n\tget hideOverflowButton() {\n\t\treturn this.itemsToOverflow.filter(item => !(item.ignoreSpace || item.isSeparator)).length === 0;\n\t}\n\n\tget interactiveItems() {\n\t\treturn this.items.filter((item: ToolbarItemBase) => item.isInteractive);\n\t}\n\n\t/**\n\t * Accessibility\n\t */\n\n\tget hasAriaSemantics() {\n\t\treturn this.interactiveItems.length > 1;\n\t}\n\n\tget accessibleRole() {\n\t\treturn this.hasAriaSemantics ? \"toolbar\" as const : undefined;\n\t}\n\n\tget ariaLabelText() {\n\t\treturn this.hasAriaSemantics ? getEffectiveAriaLabelText(this) : undefined;\n\t}\n\n\tget accInfo() {\n\t\treturn {\n\t\t\troot: {\n\t\t\t\trole: this.accessibleRole,\n\t\t\t\taccessibleName: this.ariaLabelText,\n\t\t\t},\n\t\t\toverflowButton: {\n\t\t\t\taccessibleName: this.overflowButtonAccessibleName || Toolbar.i18nBundle.getText(TOOLBAR_OVERFLOW_BUTTON_ARIA_LABEL),\n\t\t\t\ttooltip: Toolbar.i18nBundle.getText(TOOLBAR_OVERFLOW_BUTTON_ARIA_LABEL),\n\t\t\t\taccessibilityAttributes: {\n\t\t\t\t\texpanded: this.popoverOpen,\n\t\t\t\t\thasPopup: \"menu\" as const,\n\t\t\t\t},\n\t\t\t},\n\t\t\tpopover: {\n\t\t\t\taccessibleName: Toolbar.i18nBundle.getText(TOOLBAR_POPOVER_AVAILABLE_VALUES),\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Toolbar Overflow Popover\n\t */\n\n\tget overflowButtonDOM(): Button | null {\n\t\treturn this.shadowRoot!.querySelector(\".ui5-tb-overflow-btn\");\n\t}\n\n\tget hasFlexibleSpacers() {\n\t\treturn this.items.some((item: ToolbarItemBase) => item.hasFlexibleWidth);\n\t}\n\n\t/**\n\t * Lifecycle methods\n\t */\n\tonEnterDOM() {\n\t\tResizeHandler.register(this, this._onResize);\n\t\tthis.attachListeners();\n\t}\n\n\tonExitDOM() {\n\t\tResizeHandler.deregister(this, this._onResize);\n\t\tthis.detachListeners();\n\t}\n\n\tonInvalidation(changeInfo: ChangeInfo) {\n\t\tif (changeInfo.reason === \"childchange\") {\n\t\t\tconst currentItemsWidth = this.items.reduce((total, item) => total + this.getItemWidth(item), 0);\n\t\t\tif (currentItemsWidth !== this.itemsWidth) {\n\t\t\t\tthis.onToolbarItemChange();\n\t\t\t}\n\t\t}\n\t}\n\n\tonBeforeRendering() {\n\t\tif (getActiveElement() === this.overflowButtonDOM?.getFocusDomRef() && this.hideOverflowButton) {\n\t\t\tconst items = this.standardItems.filter(item => item.isToolbarNavigatable);\n\t\t\tconst lastItem = items.at(-1);\n\t\t\tif (lastItem) {\n\t\t\t\tthis._lastFocusedItem = lastItem;\n\t\t\t\tlastItem.focusForToolbarNavigation(false);\n\t\t\t}\n\t\t}\n\t\tthis.prePopulateAlwaysOverflowItems();\n\t}\n\n\tasync onAfterRendering() {\n\t\tawait renderFinished();\n\t\tthis.storeItemsWidth();\n\t\tthis.processOverflowLayout();\n\t\tthis.items.forEach(item => {\n\t\t\tthis.addItemsAdditionalProperties(item);\n\t\t});\n\t\tthis._reconcileLastFocusedItem();\n\t}\n\n\t/**\n\t * Drops the tracked re-entry item once it leaves the navigation chain\n\t * (moved to overflow or removed), so Tab re-entry and arrow/Home/End\n\t * navigation don't silently restart from the first item.\n\t */\n\t_reconcileLastFocusedItem() {\n\t\tif (this._lastFocusedItem instanceof ToolbarItemBase && !this._getNavigationChain().includes(this._lastFocusedItem)) {\n\t\t\tthis._lastFocusedItem = undefined;\n\t\t}\n\t}\n\n\taddItemsAdditionalProperties(item: ToolbarItemBase) {\n\t\titem.isOverflowed = this.overflowItems.indexOf(item) !== -1;\n\t\tconst itemWrapper = this.shadowRoot!.querySelector(`#${item._individualSlot}`) as HTMLElement;\n\t\tif (item.hasOverflow && !item.isOverflowed && itemWrapper) {\n\t\t\t// We need to set the max-width to the self-overflow element in order ot prevent it from taking all the available space,\n\t\t\t// since, unlike the other items, it is allowed to grow and shrink\n\t\t\t// We need to set the max-width to none and its position to absolute to allow the item to grow and measure its width,\n\t\t\t// then when set, the max-width will be cached and we will set its highest value to not cut it when the Toolbar shrinks it\n\t\t\t// on rendering and then we resize it manually.\n\t\t\titemWrapper.style.maxWidth = `none`;\n\t\t\titemWrapper?.classList.add(\"ui5-tb-self-overflow-grow\");\n\t\t\titem._maxWidth = Math.max(this.getItemWidth(item), item._maxWidth);\n\t\t\titemWrapper.style.maxWidth = `${item._maxWidth}px`;\n\t\t\titemWrapper?.classList.remove(\"ui5-tb-self-overflow-grow\");\n\t\t}\n\t}\n\n\t/**\n\t * Returns if the overflow popup is open.\n\t * @public\n\t */\n\tisOverflowOpen(): boolean {\n\t\tconst overflowPopover = this.getOverflowPopover();\n\t\treturn overflowPopover.open;\n\t}\n\n\topenOverflow(): void {\n\t\tconst overflowPopover = this.getOverflowPopover();\n\t\toverflowPopover.opener = this.overflowButtonDOM!;\n\t\toverflowPopover.open = true;\n\t\tthis.reverseOverflow = overflowPopover.actualPlacement === \"Top\";\n\t}\n\n\tcloseOverflow() {\n\t\tconst overflowPopover = this.getOverflowPopover();\n\t\toverflowPopover.open = false;\n\t}\n\n\ttoggleOverflow() {\n\t\tif (this.popoverOpen) {\n\t\t\tthis.closeOverflow();\n\t\t} else {\n\t\t\tthis.openOverflow();\n\t\t}\n\t}\n\n\tgetOverflowPopover(): Popover {\n\t\treturn this.shadowRoot!.querySelector<Popover>(\".ui5-overflow-popover\")!;\n\t}\n\n\t/**\n\t * Layout management\n\t */\n\n\tprocessOverflowLayout() {\n\t\tif (this.offsetWidth === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst containerWidth = this.offsetWidth - this.padding;\n\t\tconst contentWidth = this.itemsWidth;\n\t\tlet overflowSpace = contentWidth - containerWidth + this.overflowButtonSize;\n\n\t\tif (contentWidth <= containerWidth) {\n\t\t\toverflowSpace = 0;\n\t\t}\n\n\t\t// skip calculation if the width has not been changed or if the items width has not been changed\n\t\tif (this.width === containerWidth && this.contentWidth === contentWidth) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.distributeItems(overflowSpace);\n\t\tthis.width = containerWidth;\n\t\tthis.contentWidth = contentWidth;\n\t}\n\n\tstoreItemsWidth() {\n\t\tlet totalWidth = 0,\n\t\t\tminWidth = 0;\n\n\t\tthis.items.forEach(item => {\n\t\t\tconst itemWidth = this.getItemWidth(item);\n\t\t\ttotalWidth += itemWidth;\n\t\t\tif (item.overflowPriority === ToolbarItemOverflowBehavior.NeverOverflow) {\n\t\t\t\tminWidth += itemWidth;\n\t\t\t}\n\t\t\tthis.ITEMS_WIDTH_MAP.set(item._id, itemWidth);\n\t\t});\n\n\t\tif (minWidth !== this.minContentWidth) {\n\t\t\tconst spaceAroundContent = this.offsetWidth - this.getDomRef()!.offsetWidth;\n\t\t\tthis.fireDecoratorEvent(\"_min-content-width-change\", {\n\t\t\t\tminWidth: minWidth + spaceAroundContent + this.overflowButtonSize,\n\t\t\t});\n\t\t}\n\n\t\tthis.itemsWidth = totalWidth;\n\t\tthis.minContentWidth = minWidth;\n\t}\n\n\tdistributeItems(overflowSpace = 0) {\n\t\tconst movableItems = this.movableItems.reverse();\n\t\tlet index = 0;\n\t\tlet currentItem = movableItems[index];\n\n\t\tthis.itemsToOverflow = [];\n\n\t\t// distribute items that always overflow\n\t\tthis.distributeItemsThatAlwaysOverflow();\n\n\t\twhile (overflowSpace > 0 && currentItem) {\n\t\t\tthis.itemsToOverflow.unshift(currentItem);\n\t\t\toverflowSpace -= this.getCachedItemWidth(currentItem?._id) || 0;\n\t\t\tindex++;\n\t\t\tcurrentItem = movableItems[index];\n\t\t}\n\n\t\t// If the last bar item is a spacer, force it to the overflow even if there is enough space for it\n\t\tif (index < movableItems.length) {\n\t\t\tlet lastItem = movableItems[index];\n\t\t\twhile (index <= movableItems.length - 1 && lastItem.isSeparator) {\n\t\t\t\tthis.itemsToOverflow.unshift(lastItem);\n\t\t\t\tindex++;\n\t\t\t\tlastItem = movableItems[index];\n\t\t\t}\n\t\t}\n\n\t\tthis.setSeperatorsVisibilityInOverflow();\n\t}\n\n\tdistributeItemsThatAlwaysOverflow() {\n\t\tthis.alwaysOverflowItems.forEach((item: ToolbarItemBase) => {\n\t\t\tthis.itemsToOverflow.push(item);\n\t\t});\n\t}\n\n\tsetSeperatorsVisibilityInOverflow() {\n\t\tthis.itemsToOverflow.forEach((item, idx, items) => {\n\t\t\tif (item.isSeparator) {\n\t\t\t\t(item as ToolbarSeparator).visible = this.shouldShowSeparatorInOverflow(idx, items);\n\t\t\t}\n\t\t});\n\t}\n\n\tshouldShowSeparatorInOverflow(separatorIdx: number, overflowItems: Array<ToolbarItemBase>) {\n\t\tlet foundPrevNonSeparatorItem = false;\n\t\tlet foundNextNonSeperatorItem = false;\n\n\t\t// search for non-separator item before and after the seperator\n\t\toverflowItems.forEach((item, idx) => {\n\t\t\tif (idx < separatorIdx && !item.isSeparator) {\n\t\t\t\tfoundPrevNonSeparatorItem = true;\n\t\t\t}\n\t\t\tif (idx > separatorIdx && !item.isSeparator) {\n\t\t\t\tfoundNextNonSeperatorItem = true;\n\t\t\t}\n\t\t});\n\n\t\treturn foundPrevNonSeparatorItem && foundNextNonSeperatorItem;\n\t}\n\n\t/**\n\t * Adds AlwaysOverflow items to overflow to ensure they are never rendered outside overflow (and visual flash is prevented)\n\t */\n\tprePopulateAlwaysOverflowItems() {\n\t\tthis.alwaysOverflowItems.forEach(item => {\n\t\t\tif (!this.itemsToOverflow.includes(item)) {\n\t\t\t\tthis.itemsToOverflow.push(item);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Event Handlers\n\t */\n\n\tonOverflowPopoverClosed() {\n\t\tthis.popoverOpen = false;\n\t}\n\n\tonOverflowPopoverOpened() {\n\t\tthis.popoverOpen = true;\n\t\tconst firstItem = this.overflowItems.find(item => item.isInteractive && !item.hidden);\n\t\tfirstItem?.focusForToolbarNavigation(true);\n\t}\n\n\tonResize() {\n\t\tthis.closeOverflow();\n\t\tthis.storeItemsWidth();\n\t\tthis.processOverflowLayout();\n\t}\n\n\t/**\n\t * Private members\n\t */\n\n\tattachListeners() {\n\t\tthis.addEventListener(\"ui5-close-overflow\", this._onCloseOverflow);\n\t\tthis.addEventListener(\"focusin\", this._onFocusIn);\n\t\tthis.addEventListener(\"keydown\", this._onKeyDown, true);\n\t}\n\n\tdetachListeners() {\n\t\tthis.removeEventListener(\"ui5-close-overflow\", this._onCloseOverflow);\n\t\tthis.removeEventListener(\"focusin\", this._onFocusIn);\n\t\tthis.removeEventListener(\"keydown\", this._onKeyDown, true);\n\t}\n\n\tonToolbarItemChange() {\n\t\t// some items were updated reset the cache and trigger a re-render\n\t\tthis.itemsToOverflow = [];\n\t\tthis.contentWidth = 0; // re-render\n\t}\n\n\tgetItemWidth(item: ToolbarItemBase): number {\n\t\t// Spacer width - always 0 for flexible spacers, so that they shrink, otherwise - measure the width normally\n\t\tif (item.ignoreSpace || item.isSeparator) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst id: string = item._id;\n\t\t// Measure rendered width for spacers with width, and for normal items\n\t\tconst renderedItem = this.shadowRoot!.querySelector<HTMLElement>(`#${item._individualSlot}`);\n\n\t\tlet itemWidth = 0;\n\n\t\tif (renderedItem && !renderedItem.classList.contains(\"ui5-tb-popover-item\") && renderedItem.offsetWidth && item._isRendering === false) {\n\t\t\tconst ItemCSSStyleSet = getComputedStyle(renderedItem);\n\t\t\titemWidth = renderedItem.offsetWidth + parsePxValue(ItemCSSStyleSet, \"margin-inline-end\")\n\t\t\t\t+ parsePxValue(ItemCSSStyleSet, \"margin-inline-start\");\n\t\t} else {\n\t\t\titemWidth = this.getCachedItemWidth(id) || 0;\n\t\t}\n\n\t\treturn Math.ceil(itemWidth);\n\t}\n\n\tgetCachedItemWidth(id: string) {\n\t\treturn this.ITEMS_WIDTH_MAP.get(id);\n\t}\n\n\t/**\n\t * Keyboard Navigation\n\t */\n\n\t_isFocusInsideOverflow(path: Array<EventTarget>): boolean {\n\t\tconst popover = this.getOverflowPopover();\n\t\tif (!popover) {\n\t\t\treturn false;\n\t\t}\n\t\t// Check popover shadow DOM (e.g. focus trap sentinels)\n\t\tif ((path as Node[]).some(node => popover === node || popover.shadowRoot === node)) {\n\t\t\treturn true;\n\t\t}\n\t\t// Check if the event originates from a slotted overflow item (light DOM, not contained by popover)\n\t\tconst overflowItemSet = new Set<ToolbarItemBase>(this.overflowItems);\n\t\treturn (path as Node[]).some(node => overflowItemSet.has(node as ToolbarItemBase));\n\t}\n\n\t_onfocusin(e: FocusEvent) {\n\t\tconst path = e.composedPath();\n\n\t\tif (this.popoverOpen && this._isFocusInsideOverflow(path)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentTarget = this._findItemByPath(path)\n\t\t\t|| this._findOverflowButtonByPath(path)\n\t\t\t|| this._findCurrentTargetByActiveElement();\n\n\t\tif (currentTarget) {\n\t\t\tthis._setCurrentItem(currentTarget);\n\t\t}\n\t}\n\n\t_onkeydown(e: KeyboardEvent) {\n\t\tconst path = e.composedPath();\n\n\t\tif (this.popoverOpen && this._isFocusInsideOverflow(path)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isTabNext(e) || isTabPrevious(e)) {\n\t\t\tconst tabTarget = this._findItemByPath(path)\n\t\t\t\t|| this._findOverflowButtonByPath(path)\n\t\t\t\t|| this._findCurrentTargetByActiveElement()\n\t\t\t\t|| this._lastFocusedItem;\n\t\t\tif (tabTarget) {\n\t\t\t\tthis._setCurrentItem(tabTarget);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst isForward = this.effectiveDir === \"rtl\" ? isLeft(e) : isRight(e);\n\t\tconst isBackward = this.effectiveDir === \"rtl\" ? isRight(e) : isLeft(e);\n\t\tconst isHomeKey = isHome(e);\n\t\tconst isEndKey = isEnd(e);\n\n\t\tif (!isForward && !isBackward && !isHomeKey && !isEndKey) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentTarget = this._findItemByPath(path)\n\t\t\t|| this._findOverflowButtonByPath(path)\n\t\t\t|| this._findCurrentTargetByActiveElement()\n\t\t\t|| this._lastFocusedItem;\n\t\tif (!currentTarget) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Items that manage their own internal navigation (Input caret, Breadcrumbs,\n\t\t// checkbox groups) report a boundary state; the toolbar only takes over the\n\t\t// key once the item is at the relevant end.\n\t\tconst navState = currentTarget instanceof ToolbarItemBase ? currentTarget.getArrowNavState() : undefined;\n\n\t\tif (navState && (isForward || isBackward)) {\n\t\t\tconst atEnd = isForward ? navState.atRightEnd : navState.atLeftEnd;\n\t\t\tif (!atEnd) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (navState && (isHomeKey || isEndKey)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isHomeKey) {\n\t\t\tthis._moveToFirst();\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\tif (isEndKey) {\n\t\t\tthis._moveToLast();\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\tif (isForward || isBackward) {\n\t\t\tif (isForward) {\n\t\t\t\tthis._moveToNext();\n\t\t\t} else {\n\t\t\t\tthis._moveToPrev();\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t}\n\n\t_findItemByPath(path: Array<EventTarget>): ToolbarItemBase | undefined {\n\t\treturn (path as HTMLElement[]).find((el): el is ToolbarItemBase => el instanceof ToolbarItemBase);\n\t}\n\n\t_findOverflowButtonByPath(path: Array<EventTarget>): HTMLElement | undefined {\n\t\tconst overflowButton = this.overflowButtonDOM;\n\t\tif (!overflowButton) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst active = getActiveElement() as HTMLElement | null;\n\t\treturn path.includes(overflowButton)\n\t\t\t|| !!(active && this._isNodeInsideElement(active, overflowButton))\n\t\t\t? overflowButton\n\t\t\t: undefined;\n\t}\n\n\t_isNodeInsideElement(node: Node, element: HTMLElement) {\n\t\tlet current: Node | null = node;\n\n\t\twhile (current) {\n\t\t\tif (current === element) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst root = current.getRootNode?.();\n\t\t\tif (root instanceof ShadowRoot) {\n\t\t\t\tcurrent = root.host;\n\t\t\t} else {\n\t\t\t\tcurrent = current.parentNode;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t_findCurrentTargetByActiveElement(): ToolbarItemBase | HTMLElement | undefined {\n\t\tconst active = getActiveElement() as HTMLElement | null;\n\t\tif (!active) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst overflowButton = this.overflowButtonDOM;\n\t\tif (overflowButton && this._isNodeInsideElement(active, overflowButton)) {\n\t\t\treturn overflowButton;\n\t\t}\n\n\t\t// _getNavigationTargets() already includes the item's focus ref, so a single\n\t\t// membership check per item is enough - no need to test getFocusDomRef separately.\n\t\treturn this._getNavigableItems().find(item => item._getNavigationTargets().some(target => this._isNodeInsideElement(active, target)));\n\t}\n\n\t_getNavigationChain() {\n\t\tconst chain: Array<ToolbarItemBase | HTMLElement> = [...this._getNavigableItems()];\n\t\tconst overflowButton = this.overflowButtonDOM;\n\n\t\tif (!this.hideOverflowButton && overflowButton) {\n\t\t\tchain.push(overflowButton);\n\t\t}\n\n\t\treturn chain;\n\t}\n\n\t_getNavigableItems() {\n\t\treturn this.items.filter(item => item.isToolbarNavigatable && !item.isOverflowed);\n\t}\n\n\t_setCurrentItem(item: ToolbarItemBase | HTMLElement) {\n\t\tthis._lastFocusedItem = item;\n\t}\n\n\t_moveToNext() {\n\t\tthis._moveToItem((current, items) => Math.min(current + 1, items.length - 1), true);\n\t}\n\n\t_moveToPrev() {\n\t\tthis._moveToItem(current => Math.max(current - 1, 0), false);\n\t}\n\n\t_moveToFirst() {\n\t\tthis._moveToItem(() => 0, true);\n\t}\n\n\t_moveToLast() {\n\t\tthis._moveToItem((_, items) => items.length - 1, false);\n\t}\n\n\t_moveToItem(indexCalc: (currentIndex: number, items: Array<ToolbarItemBase | HTMLElement>) => number, isForward: boolean) {\n\t\tconst items = this._getNavigationChain();\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst currentIndex = this._lastFocusedItem ? items.indexOf(this._lastFocusedItem) : -1;\n\n\t\t// No tracked item in the current chain: enter at the near end for the\n\t\t// pressed direction (first item for forward, last for backward) instead\n\t\t// of coercing to 0 and then stepping past it.\n\t\tif (currentIndex === -1) {\n\t\t\tconst entryItem = items[isForward ? 0 : items.length - 1];\n\t\t\tthis._setCurrentItem(entryItem);\n\t\t\tthis._focusNavigationItem(entryItem, isForward);\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextIndex = indexCalc(currentIndex, items);\n\n\t\tif (nextIndex === currentIndex) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextItem = items[nextIndex];\n\t\tthis._setCurrentItem(nextItem);\n\t\tthis._focusNavigationItem(nextItem, isForward);\n\t}\n\n\t_focusNavigationItem(item: ToolbarItemBase | HTMLElement, isForward: boolean) {\n\t\tif (item instanceof ToolbarItemBase) {\n\t\t\titem.focusForToolbarNavigation(isForward);\n\t\t} else {\n\t\t\titem.focus();\n\t\t}\n\t}\n}\n\nToolbar.define();\n\nexport default Toolbar;\nexport type {\n\tToolbarMinWidthChangeEventDetail,\n};\n"]}
@@ -1,9 +1,12 @@
1
1
  import ToolbarItemBase from "./ToolbarItemBase.js";
2
+ import type { ToolbarArrowNavState } from "./IToolbarArrowNavProvider.js";
2
3
  import type { DefaultSlot } from "@ui5/webcomponents-base";
3
4
  /**
4
5
  * Interface for the slotted item in `ui5-toolbar-item`.
5
6
  *
6
7
  * It could be any HTMLElement or UI5 Web Component with option to specify custom overflow closing events and overflow behavior.
8
+ * Components that also implement `IToolbarArrowNavProvider` can report their internal navigation boundary
9
+ * state to the toolbar for caret-aware arrow-key handling.
7
10
  *
8
11
  * @public
9
12
  * @since 2.20.0
@@ -40,6 +43,7 @@ declare class ToolbarItem extends ToolbarItemBase {
40
43
  _maxWidth: number;
41
44
  _wrapperChecked: boolean;
42
45
  fireCloseOverflowRef: () => void;
46
+ _onMultiChildKeydownRef: (e: KeyboardEvent) => void;
43
47
  closeOverflowSet: {
44
48
  "ui5-button": string[];
45
49
  "ui5-select": string[];
@@ -66,7 +70,33 @@ declare class ToolbarItem extends ToolbarItemBase {
66
70
  detachCloseOverflowHandlers(): void;
67
71
  fireCloseOverflow(): void;
68
72
  get itemTagName(): string;
73
+ get isInteractive(): boolean;
74
+ _isFocusable(el: HTMLElement): boolean;
75
+ _resolveFocusableTarget(el: HTMLElement): HTMLElement;
69
76
  get hasOverflow(): boolean;
77
+ getFocusDomRef(): HTMLElement | undefined;
78
+ /**
79
+ * Resolves the element that should receive focus for a slotted child:
80
+ * the child's own focus DOM ref when it is a UI5 component, otherwise the
81
+ * first tabbable descendant, falling back to the child itself.
82
+ */
83
+ _resolveChildFocusTarget(child: HTMLElement): HTMLElement;
84
+ _getFirstTabbableDescendant(root: HTMLElement): HTMLElement | null;
85
+ getFocusDomRefForNavigation(forward: boolean): HTMLElement | undefined;
86
+ _handleNavigationTarget(target: HTMLElement): void;
87
+ _resolveNavigationHost(target: HTMLElement): HTMLElement;
88
+ _isUI5Host(target: HTMLElement): boolean;
89
+ _isRadioButtonHost(target: HTMLElement): boolean;
90
+ _matchesNavigationTarget(target: HTMLElement, candidate: HTMLElement): boolean;
91
+ _getNavigationTargets(): HTMLElement[];
92
+ _getCurrentNavigationState(): {
93
+ items: HTMLElement[];
94
+ current: HTMLElement | undefined;
95
+ currentIndex: number;
96
+ };
97
+ _onMultiChildKeydown(e: KeyboardEvent): void;
98
+ getArrowNavState(): ToolbarArrowNavState | undefined;
99
+ focusForToolbarNavigation(isForward: boolean): void;
70
100
  }
71
101
  export type { IToolbarItemContent, };
72
102
  export default ToolbarItem;
@@ -8,9 +8,13 @@ var ToolbarItem_1;
8
8
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
9
9
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
10
10
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
11
+ import getActiveElement from "@ui5/webcomponents-base/dist/util/getActiveElement.js";
12
+ import { instanceOfUI5Element } from "@ui5/webcomponents-base/dist/UI5Element.js";
13
+ import { isLeft, isRight, isHome, isEnd, } from "@ui5/webcomponents-base/dist/Keys.js";
11
14
  import ToolbarItemTemplate from "./ToolbarItemTemplate.js";
12
15
  import ToolbarItemCss from "./generated/themes/ToolbarItem.css.js";
13
16
  import ToolbarItemBase from "./ToolbarItemBase.js";
17
+ import { isToolbarArrowNavProvider } from "./IToolbarArrowNavProvider.js";
14
18
  /**
15
19
  * @class
16
20
  *
@@ -41,6 +45,7 @@ let ToolbarItem = ToolbarItem_1 = class ToolbarItem extends ToolbarItemBase {
41
45
  this._maxWidth = 0;
42
46
  this._wrapperChecked = false;
43
47
  this.fireCloseOverflowRef = this.fireCloseOverflow.bind(this);
48
+ this._onMultiChildKeydownRef = this._onMultiChildKeydown.bind(this);
44
49
  this.closeOverflowSet = {
45
50
  "ui5-button": ["click"],
46
51
  "ui5-select": ["change"],
@@ -57,9 +62,16 @@ let ToolbarItem = ToolbarItem_1 = class ToolbarItem extends ToolbarItemBase {
57
62
  onBeforeRendering() {
58
63
  this.checkForWrapper();
59
64
  this.attachCloseOverflowHandlers();
65
+ if (this.item.length > 1) {
66
+ this.addEventListener("keydown", this._onMultiChildKeydownRef, true);
67
+ }
68
+ else {
69
+ this.removeEventListener("keydown", this._onMultiChildKeydownRef, true);
70
+ }
60
71
  }
61
72
  onExitDOM() {
62
73
  this.detachCloseOverflowHandlers();
74
+ this.removeEventListener("keydown", this._onMultiChildKeydownRef, true);
63
75
  }
64
76
  // Method called by ui5-toolbar to inform about the existing toolbar wrapper
65
77
  checkForWrapper() {
@@ -107,9 +119,199 @@ let ToolbarItem = ToolbarItem_1 = class ToolbarItem extends ToolbarItemBase {
107
119
  const ctor = this.getSlottedNodes("item")[0]?.constructor;
108
120
  return ctor?.getMetadata ? ctor.getMetadata().getPureTag() : this.getSlottedNodes("item")[0]?.tagName;
109
121
  }
122
+ get isInteractive() {
123
+ return this._getNavigationTargets().some(target => this._isFocusable(target));
124
+ }
125
+ _isFocusable(el) {
126
+ const target = this._resolveFocusableTarget(el);
127
+ // A disabled control reports tabIndex 0 but isn't focusable.
128
+ if ("disabled" in target && !!target.disabled) {
129
+ return false;
130
+ }
131
+ // A bare <a> with no href reports tabIndex 0 but isn't focusable, UNLESS it
132
+ // opts in via an explicit tabindex attribute (e.g. ui5-link rendered as a
133
+ // button - <a role="button" tabindex="0"> with no href, used by the
134
+ // Breadcrumbs overflow arrow).
135
+ if (target.matches("a:not([href]):not([tabindex])")) {
136
+ return false;
137
+ }
138
+ // tabIndex >= 0 covers focusable-by-default elements and explicit tabindex;
139
+ // static content (div, span, ui5-text's focus ref) reports -1.
140
+ return target.tabIndex >= 0;
141
+ }
142
+ _resolveFocusableTarget(el) {
143
+ // Drill through UI5 hosts that delegate focus (date-picker ->
144
+ // datetime-input -> native input); each host reports tabIndex -1.
145
+ let current = el;
146
+ const seen = new Set();
147
+ while (instanceOfUI5Element(current) && !seen.has(current)) {
148
+ seen.add(current);
149
+ const next = current.getFocusDomRef();
150
+ if (!next || next === current) {
151
+ break;
152
+ }
153
+ current = next;
154
+ }
155
+ return current;
156
+ }
110
157
  get hasOverflow() {
111
158
  return this.item[0]?.hasOverflow ?? false;
112
159
  }
160
+ getFocusDomRef() {
161
+ const child = this.item[0];
162
+ if (child) {
163
+ return this._resolveChildFocusTarget(child);
164
+ }
165
+ return super.getFocusDomRef();
166
+ }
167
+ /**
168
+ * Resolves the element that should receive focus for a slotted child:
169
+ * the child's own focus DOM ref when it is a UI5 component, otherwise the
170
+ * first tabbable descendant, falling back to the child itself.
171
+ */
172
+ _resolveChildFocusTarget(child) {
173
+ const withFocusRef = child;
174
+ if (typeof withFocusRef.getFocusDomRef === "function") {
175
+ return withFocusRef.getFocusDomRef() || child;
176
+ }
177
+ return this._getFirstTabbableDescendant(child) || child;
178
+ }
179
+ _getFirstTabbableDescendant(root) {
180
+ return root.querySelector("a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])");
181
+ }
182
+ getFocusDomRefForNavigation(forward) {
183
+ const targets = this._getNavigationTargets();
184
+ if (!targets.length) {
185
+ return this.getFocusDomRef();
186
+ }
187
+ return forward ? targets[0] : targets[targets.length - 1];
188
+ }
189
+ _handleNavigationTarget(target) {
190
+ const hostTarget = this._resolveNavigationHost(target);
191
+ if (this._isRadioButtonHost(hostTarget)) {
192
+ const radio = hostTarget;
193
+ hostTarget.focus();
194
+ if (!radio.disabled && !radio.readonly && !radio.checked) {
195
+ radio.click();
196
+ }
197
+ return;
198
+ }
199
+ hostTarget.focus();
200
+ }
201
+ _resolveNavigationHost(target) {
202
+ if (this._isUI5Host(target)) {
203
+ return target;
204
+ }
205
+ const root = target.getRootNode();
206
+ if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {
207
+ return root.host;
208
+ }
209
+ return target;
210
+ }
211
+ _isUI5Host(target) {
212
+ const ctor = target.constructor;
213
+ return typeof ctor.getMetadata === "function";
214
+ }
215
+ _isRadioButtonHost(target) {
216
+ return target.hasAttribute("ui5-radio-button");
217
+ }
218
+ _matchesNavigationTarget(target, candidate) {
219
+ if (target === candidate || target.contains(candidate) || !!target.shadowRoot?.contains(candidate)) {
220
+ return true;
221
+ }
222
+ const host = this._resolveNavigationHost(candidate);
223
+ return target === host || target.contains(host) || !!target.shadowRoot?.contains(host);
224
+ }
225
+ _getNavigationTargets() {
226
+ return this.item
227
+ .filter(child => !("disabled" in child && !!child.disabled))
228
+ .map(child => this._resolveChildFocusTarget(child));
229
+ }
230
+ _getCurrentNavigationState() {
231
+ const items = this._getNavigationTargets();
232
+ const active = getActiveElement();
233
+ const current = active
234
+ ? items.find(item => this._matchesNavigationTarget(item, active))
235
+ : undefined;
236
+ const currentIndex = current ? items.indexOf(current) : -1;
237
+ return {
238
+ items,
239
+ current,
240
+ currentIndex,
241
+ };
242
+ }
243
+ _onMultiChildKeydown(e) {
244
+ const isForward = this.effectiveDir === "rtl" ? isLeft(e) : isRight(e);
245
+ const isBackward = this.effectiveDir === "rtl" ? isRight(e) : isLeft(e);
246
+ const isHomeKey = isHome(e);
247
+ const isEndKey = isEnd(e);
248
+ if (!isForward && !isBackward && !isHomeKey && !isEndKey) {
249
+ return;
250
+ }
251
+ const { items, currentIndex } = this._getCurrentNavigationState();
252
+ if (currentIndex === -1) {
253
+ return;
254
+ }
255
+ // Home/End jump to the first/last child within the group.
256
+ let nextIndex;
257
+ if (isHomeKey) {
258
+ nextIndex = 0;
259
+ }
260
+ else if (isEndKey) {
261
+ nextIndex = items.length - 1;
262
+ }
263
+ else {
264
+ nextIndex = isForward ? currentIndex + 1 : currentIndex - 1;
265
+ }
266
+ if (nextIndex === currentIndex || nextIndex < 0 || nextIndex >= items.length) {
267
+ return;
268
+ }
269
+ e.preventDefault();
270
+ e.stopPropagation();
271
+ this._handleNavigationTarget(items[nextIndex]);
272
+ }
273
+ getArrowNavState() {
274
+ const child = this.item[0];
275
+ if (!child) {
276
+ return undefined;
277
+ }
278
+ // Priority 1: ItemNavigation-based components (e.g. Breadcrumbs, SegmentedButton)
279
+ const itemNavOwner = child;
280
+ if (typeof itemNavOwner._itemNavigation?._getCurrentItem === "function"
281
+ && typeof itemNavOwner._getFocusableItems === "function") {
282
+ const items = itemNavOwner._getFocusableItems();
283
+ const current = itemNavOwner._itemNavigation._getCurrentItem();
284
+ const currentIndex = current
285
+ ? items.findIndex(item => (item.getFocusDomRef ? item.getFocusDomRef() : item) === current)
286
+ : -1;
287
+ if (currentIndex !== -1) {
288
+ return {
289
+ atLeftEnd: currentIndex === 0,
290
+ atRightEnd: currentIndex === items.length - 1,
291
+ };
292
+ }
293
+ }
294
+ // Priority 2: IToolbarArrowNavProvider interface (e.g. Input)
295
+ if (isToolbarArrowNavProvider(child)) {
296
+ return child.getArrowNavState();
297
+ }
298
+ // Priority 3: proprietary multi-child fallback (e.g. bare checkbox group)
299
+ if (this.item.length <= 1) {
300
+ return undefined;
301
+ }
302
+ const { items, currentIndex } = this._getCurrentNavigationState();
303
+ if (currentIndex === -1) {
304
+ return undefined;
305
+ }
306
+ return {
307
+ atLeftEnd: currentIndex === 0,
308
+ atRightEnd: currentIndex === items.length - 1,
309
+ };
310
+ }
311
+ focusForToolbarNavigation(isForward) {
312
+ const target = this.getFocusDomRefForNavigation(isForward);
313
+ target?.focus();
314
+ }
113
315
  };
114
316
  __decorate([
115
317
  slot({
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarItem.js","sourceRoot":"","sources":["../src/ToolbarItem.ts"],"names":[],"mappings":"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","sourcesContent":["import slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport ToolbarItemTemplate from \"./ToolbarItemTemplate.js\";\nimport ToolbarItemCss from \"./generated/themes/ToolbarItem.css.js\";\nimport ToolbarItemBase from \"./ToolbarItemBase.js\";\nimport type { DefaultSlot } from \"@ui5/webcomponents-base\";\n\n/**\n * Interface for the slotted item in `ui5-toolbar-item`.\n *\n * It could be any HTMLElement or UI5 Web Component with option to specify custom overflow closing events and overflow behavior.\n *\n * @public\n * @since 2.20.0\n */\ninterface IToolbarItemContent extends HTMLElement {\n\toverflowCloseEvents?: string[];\n\thasOverflow?: boolean;\n}\n\n/**\n * @class\n *\n * ### Overview\n * The `ui5-toolbar-item` is a wrapper component used to integrate UI5 Web Components into the `ui5-toolbar`.\n * It renders within the toolbar's shadow DOM and manages the lifecycle\n * and overflow behavior of its child component.\n *\n * ### Structure\n * The toolbar item wraps a single UI5 Web Component (such as CheckBox, Title, etc.) and handles:\n * - Overflow management (determining if the item should be displayed in the main toolbar or overflow popover)\n * - Automatic popover closing on interaction\n * - CSS custom state exposure for styling based on overflow state\n *\n * ### Usage\n * The `ui5-toolbar-item` is typically used implicitly when adding components to a toolbar,\n * but specialized wrappers like `ui5-toolbar-button` provide\n * component-specific functionality and should be preferred when available.\n *\n * @constructor\n * @extends ToolbarItemBase\n * @public\n * @since 2.20.0\n */\n@customElement({\n\ttag: \"ui5-toolbar-item\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: ToolbarItemTemplate,\n\tstyles: ToolbarItemCss,\n})\nclass ToolbarItem extends ToolbarItemBase {\n\t_maxWidth = 0;\n\t_wrapperChecked = false;\n\tfireCloseOverflowRef = this.fireCloseOverflow.bind(this);\n\n\tcloseOverflowSet = {\n\t\t\"ui5-button\": [\"click\"],\n\t\t\"ui5-select\": [\"change\"],\n\t\t\"ui5-combobox\": [\"change\"],\n\t\t\"ui5-multi-combobox\": [\"selection-change\"],\n\t\t\"ui5-date-picker\": [\"change\"],\n\t\t\"ui5-switch\": [\"change\"],\n\t}\n\n\tpredefinedWrapperSet = {\n\t\t\"ui5-button\": \"ToolbarButton\",\n\t\t\"ui5-select\": \"ToolbarSelect\",\n\t}\n\n\tonBeforeRendering(): void {\n\t\tthis.checkForWrapper();\n\t\tthis.attachCloseOverflowHandlers();\n\t}\n\n\tonExitDOM(): void {\n\t\tthis.detachCloseOverflowHandlers();\n\t}\n\n\t/**\n\t * Wrapped component slot.\n\t * @public\n\t * @since 2.20.0\n\t */\n\n\t@slot({\n\t\t\"default\": true, type: HTMLElement, invalidateOnChildChange: true,\n\t})\n\titem!: DefaultSlot<IToolbarItemContent>;\n\n\t// Method called by ui5-toolbar to inform about the existing toolbar wrapper\n\tcheckForWrapper() {\n\t\tif (this._wrapperChecked) {\n\t\t\treturn;\n\t\t}\n\t\tthis._wrapperChecked = true;\n\n\t\tconst tagName = this.itemTagName as keyof typeof this.predefinedWrapperSet;\n\t\tconst ctor = this.constructor as typeof ToolbarItem;\n\t\tconst wrapperName = ctor?.getMetadata ? ctor.getMetadata().getPureTag() : this.tagName;\n\t\tif (wrapperName === \"ui5-toolbar-item\"\n\t\t\t&& this.predefinedWrapperSet[tagName]) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`This UI5 web component has its predefined toolbar wrapper called ${this.predefinedWrapperSet[tagName]}.`);\n\t\t}\n\t}\n\n\t// We want to close the overflow popover, when closing event is being executed\n\tgetClosingEvents(): string[] {\n\t\tconst item = this.item[0];\n\n\t\tconst closeEvents = this.closeOverflowSet[this.itemTagName as keyof typeof this.closeOverflowSet] || [];\n\t\tif (!item) {\n\t\t\treturn [...closeEvents];\n\t\t}\n\t\tconst overflowCloseEvents = item.overflowCloseEvents ? item.overflowCloseEvents : [];\n\n\t\treturn [...closeEvents, ...overflowCloseEvents];\n\t}\n\n\tattachCloseOverflowHandlers() {\n\t\tconst closingEvents = this.getClosingEvents();\n\t\tclosingEvents.forEach(clEvent => {\n\t\t\tif (!this.preventOverflowClosing) {\n\t\t\t\tthis.addEventListener(clEvent, this.fireCloseOverflowRef);\n\t\t\t}\n\t\t});\n\t}\n\n\tdetachCloseOverflowHandlers() {\n\t\tconst closingEvents = this.getClosingEvents();\n\t\tclosingEvents.forEach(clEvent => {\n\t\t\tthis.removeEventListener(clEvent, this.fireCloseOverflowRef);\n\t\t});\n\t}\n\n\tfireCloseOverflow() {\n\t\tthis.fireDecoratorEvent(\"close-overflow\");\n\t}\n\n\tget itemTagName() {\n\t\tconst ctor = this.getSlottedNodes<IToolbarItemContent>(\"item\")[0]?.constructor as typeof ToolbarItem;\n\t\treturn ctor?.getMetadata ? ctor.getMetadata().getPureTag() : this.getSlottedNodes<IToolbarItemContent>(\"item\")[0]?.tagName;\n\t}\n\n\tget hasOverflow(): boolean {\n\t\treturn this.item[0]?.hasOverflow ?? false;\n\t}\n}\n\nexport type {\n\tIToolbarItemContent,\n};\nToolbarItem.define();\n\nexport default ToolbarItem;\n"]}
1
+ {"version":3,"file":"ToolbarItem.js","sourceRoot":"","sources":["../src/ToolbarItem.ts"],"names":[],"mappings":"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","sourcesContent":["import slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport getActiveElement from \"@ui5/webcomponents-base/dist/util/getActiveElement.js\";\nimport { instanceOfUI5Element } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport {\n\tisLeft,\n\tisRight,\n\tisHome,\n\tisEnd,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport ToolbarItemTemplate from \"./ToolbarItemTemplate.js\";\nimport ToolbarItemCss from \"./generated/themes/ToolbarItem.css.js\";\nimport ToolbarItemBase from \"./ToolbarItemBase.js\";\nimport type { ToolbarArrowNavState } from \"./IToolbarArrowNavProvider.js\";\nimport { isToolbarArrowNavProvider } from \"./IToolbarArrowNavProvider.js\";\nimport type { DefaultSlot } from \"@ui5/webcomponents-base\";\n\n/**\n * Interface for the slotted item in `ui5-toolbar-item`.\n *\n * It could be any HTMLElement or UI5 Web Component with option to specify custom overflow closing events and overflow behavior.\n * Components that also implement `IToolbarArrowNavProvider` can report their internal navigation boundary\n * state to the toolbar for caret-aware arrow-key handling.\n *\n * @public\n * @since 2.20.0\n */\ninterface IToolbarItemContent extends HTMLElement {\n\toverflowCloseEvents?: string[];\n\thasOverflow?: boolean;\n}\n\ninterface IItemNavigationOwner extends HTMLElement {\n\t_itemNavigation?: {\n\t\t_getCurrentItem: () => HTMLElement | undefined;\n\t};\n\t_getFocusableItems?: () => Array<{ getFocusDomRef?: () => HTMLElement }>;\n}\n\n/**\n * @class\n *\n * ### Overview\n * The `ui5-toolbar-item` is a wrapper component used to integrate UI5 Web Components into the `ui5-toolbar`.\n * It renders within the toolbar's shadow DOM and manages the lifecycle\n * and overflow behavior of its child component.\n *\n * ### Structure\n * The toolbar item wraps a single UI5 Web Component (such as CheckBox, Title, etc.) and handles:\n * - Overflow management (determining if the item should be displayed in the main toolbar or overflow popover)\n * - Automatic popover closing on interaction\n * - CSS custom state exposure for styling based on overflow state\n *\n * ### Usage\n * The `ui5-toolbar-item` is typically used implicitly when adding components to a toolbar,\n * but specialized wrappers like `ui5-toolbar-button` provide\n * component-specific functionality and should be preferred when available.\n *\n * @constructor\n * @extends ToolbarItemBase\n * @public\n * @since 2.20.0\n */\n@customElement({\n\ttag: \"ui5-toolbar-item\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: ToolbarItemTemplate,\n\tstyles: ToolbarItemCss,\n})\nclass ToolbarItem extends ToolbarItemBase {\n\t_maxWidth = 0;\n\t_wrapperChecked = false;\n\tfireCloseOverflowRef = this.fireCloseOverflow.bind(this);\n\t_onMultiChildKeydownRef = this._onMultiChildKeydown.bind(this);\n\n\tcloseOverflowSet = {\n\t\t\"ui5-button\": [\"click\"],\n\t\t\"ui5-select\": [\"change\"],\n\t\t\"ui5-combobox\": [\"change\"],\n\t\t\"ui5-multi-combobox\": [\"selection-change\"],\n\t\t\"ui5-date-picker\": [\"change\"],\n\t\t\"ui5-switch\": [\"change\"],\n\t}\n\n\tpredefinedWrapperSet = {\n\t\t\"ui5-button\": \"ToolbarButton\",\n\t\t\"ui5-select\": \"ToolbarSelect\",\n\t}\n\n\tonBeforeRendering(): void {\n\t\tthis.checkForWrapper();\n\t\tthis.attachCloseOverflowHandlers();\n\t\tif (this.item.length > 1) {\n\t\t\tthis.addEventListener(\"keydown\", this._onMultiChildKeydownRef, true);\n\t\t} else {\n\t\t\tthis.removeEventListener(\"keydown\", this._onMultiChildKeydownRef, true);\n\t\t}\n\t}\n\n\tonExitDOM(): void {\n\t\tthis.detachCloseOverflowHandlers();\n\t\tthis.removeEventListener(\"keydown\", this._onMultiChildKeydownRef, true);\n\t}\n\n\t/**\n\t * Wrapped component slot.\n\t * @public\n\t * @since 2.20.0\n\t */\n\n\t@slot({\n\t\t\"default\": true, type: HTMLElement, invalidateOnChildChange: true,\n\t})\n\titem!: DefaultSlot<IToolbarItemContent>;\n\n\t// Method called by ui5-toolbar to inform about the existing toolbar wrapper\n\tcheckForWrapper() {\n\t\tif (this._wrapperChecked) {\n\t\t\treturn;\n\t\t}\n\t\tthis._wrapperChecked = true;\n\n\t\tconst tagName = this.itemTagName as keyof typeof this.predefinedWrapperSet;\n\t\tconst ctor = this.constructor as typeof ToolbarItem;\n\t\tconst wrapperName = ctor?.getMetadata ? ctor.getMetadata().getPureTag() : this.tagName;\n\t\tif (wrapperName === \"ui5-toolbar-item\"\n\t\t\t&& this.predefinedWrapperSet[tagName]) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`This UI5 web component has its predefined toolbar wrapper called ${this.predefinedWrapperSet[tagName]}.`);\n\t\t}\n\t}\n\n\t// We want to close the overflow popover, when closing event is being executed\n\tgetClosingEvents(): string[] {\n\t\tconst item = this.item[0];\n\n\t\tconst closeEvents = this.closeOverflowSet[this.itemTagName as keyof typeof this.closeOverflowSet] || [];\n\t\tif (!item) {\n\t\t\treturn [...closeEvents];\n\t\t}\n\t\tconst overflowCloseEvents = item.overflowCloseEvents ? item.overflowCloseEvents : [];\n\n\t\treturn [...closeEvents, ...overflowCloseEvents];\n\t}\n\n\tattachCloseOverflowHandlers() {\n\t\tconst closingEvents = this.getClosingEvents();\n\t\tclosingEvents.forEach(clEvent => {\n\t\t\tif (!this.preventOverflowClosing) {\n\t\t\t\tthis.addEventListener(clEvent, this.fireCloseOverflowRef);\n\t\t\t}\n\t\t});\n\t}\n\n\tdetachCloseOverflowHandlers() {\n\t\tconst closingEvents = this.getClosingEvents();\n\t\tclosingEvents.forEach(clEvent => {\n\t\t\tthis.removeEventListener(clEvent, this.fireCloseOverflowRef);\n\t\t});\n\t}\n\n\tfireCloseOverflow() {\n\t\tthis.fireDecoratorEvent(\"close-overflow\");\n\t}\n\n\tget itemTagName() {\n\t\tconst ctor = this.getSlottedNodes<IToolbarItemContent>(\"item\")[0]?.constructor as typeof ToolbarItem;\n\t\treturn ctor?.getMetadata ? ctor.getMetadata().getPureTag() : this.getSlottedNodes<IToolbarItemContent>(\"item\")[0]?.tagName;\n\t}\n\n\tget isInteractive(): boolean {\n\t\treturn this._getNavigationTargets().some(target => this._isFocusable(target));\n\t}\n\n\t_isFocusable(el: HTMLElement): boolean {\n\t\tconst target = this._resolveFocusableTarget(el);\n\t\t// A disabled control reports tabIndex 0 but isn't focusable.\n\t\tif (\"disabled\" in target && !!(target as { disabled?: boolean }).disabled) {\n\t\t\treturn false;\n\t\t}\n\t\t// A bare <a> with no href reports tabIndex 0 but isn't focusable, UNLESS it\n\t\t// opts in via an explicit tabindex attribute (e.g. ui5-link rendered as a\n\t\t// button - <a role=\"button\" tabindex=\"0\"> with no href, used by the\n\t\t// Breadcrumbs overflow arrow).\n\t\tif (target.matches(\"a:not([href]):not([tabindex])\")) {\n\t\t\treturn false;\n\t\t}\n\t\t// tabIndex >= 0 covers focusable-by-default elements and explicit tabindex;\n\t\t// static content (div, span, ui5-text's focus ref) reports -1.\n\t\treturn target.tabIndex >= 0;\n\t}\n\n\t_resolveFocusableTarget(el: HTMLElement): HTMLElement {\n\t\t// Drill through UI5 hosts that delegate focus (date-picker ->\n\t\t// datetime-input -> native input); each host reports tabIndex -1.\n\t\tlet current: HTMLElement = el;\n\t\tconst seen = new Set<HTMLElement>();\n\t\twhile (instanceOfUI5Element(current) && !seen.has(current)) {\n\t\t\tseen.add(current);\n\t\t\tconst next = current.getFocusDomRef();\n\t\t\tif (!next || next === current) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = next;\n\t\t}\n\t\treturn current;\n\t}\n\n\tget hasOverflow(): boolean {\n\t\treturn this.item[0]?.hasOverflow ?? false;\n\t}\n\n\tgetFocusDomRef(): HTMLElement | undefined {\n\t\tconst child = this.item[0];\n\t\tif (child) {\n\t\t\treturn this._resolveChildFocusTarget(child);\n\t\t}\n\n\t\treturn super.getFocusDomRef();\n\t}\n\n\t/**\n\t * Resolves the element that should receive focus for a slotted child:\n\t * the child's own focus DOM ref when it is a UI5 component, otherwise the\n\t * first tabbable descendant, falling back to the child itself.\n\t */\n\t_resolveChildFocusTarget(child: HTMLElement): HTMLElement {\n\t\tconst withFocusRef = child as HTMLElement & { getFocusDomRef?: () => HTMLElement };\n\t\tif (typeof withFocusRef.getFocusDomRef === \"function\") {\n\t\t\treturn withFocusRef.getFocusDomRef() || child;\n\t\t}\n\n\t\treturn this._getFirstTabbableDescendant(child) || child;\n\t}\n\n\t_getFirstTabbableDescendant(root: HTMLElement): HTMLElement | null {\n\t\treturn root.querySelector<HTMLElement>(\"a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])\");\n\t}\n\n\tgetFocusDomRefForNavigation(forward: boolean): HTMLElement | undefined {\n\t\tconst targets = this._getNavigationTargets();\n\t\tif (!targets.length) {\n\t\t\treturn this.getFocusDomRef();\n\t\t}\n\n\t\treturn forward ? targets[0] : targets[targets.length - 1];\n\t}\n\n\t_handleNavigationTarget(target: HTMLElement) {\n\t\tconst hostTarget = this._resolveNavigationHost(target);\n\n\t\tif (this._isRadioButtonHost(hostTarget)) {\n\t\t\tconst radio = hostTarget as HTMLElement & {\n\t\t\t\tdisabled?: boolean;\n\t\t\t\treadonly?: boolean;\n\t\t\t\tchecked?: boolean;\n\t\t\t\tclick: () => void;\n\t\t\t};\n\n\t\t\thostTarget.focus();\n\n\t\t\tif (!radio.disabled && !radio.readonly && !radio.checked) {\n\t\t\t\tradio.click();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\thostTarget.focus();\n\t}\n\n\t_resolveNavigationHost(target: HTMLElement): HTMLElement {\n\t\tif (this._isUI5Host(target)) {\n\t\t\treturn target;\n\t\t}\n\n\t\tconst root = target.getRootNode();\n\t\tif (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n\t\t\treturn root.host;\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t_isUI5Host(target: HTMLElement): boolean {\n\t\tconst ctor = target.constructor as { getMetadata?: () => unknown };\n\t\treturn typeof ctor.getMetadata === \"function\";\n\t}\n\n\t_isRadioButtonHost(target: HTMLElement): boolean {\n\t\treturn target.hasAttribute(\"ui5-radio-button\");\n\t}\n\n\t_matchesNavigationTarget(target: HTMLElement, candidate: HTMLElement): boolean {\n\t\tif (target === candidate || target.contains(candidate) || !!target.shadowRoot?.contains(candidate)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst host = this._resolveNavigationHost(candidate);\n\t\treturn target === host || target.contains(host) || !!target.shadowRoot?.contains(host);\n\t}\n\n\t_getNavigationTargets(): HTMLElement[] {\n\t\treturn this.item\n\t\t\t.filter(child => !(\"disabled\" in child && !!(child as { disabled?: boolean }).disabled))\n\t\t\t.map(child => this._resolveChildFocusTarget(child));\n\t}\n\n\t_getCurrentNavigationState() {\n\t\tconst items = this._getNavigationTargets();\n\t\tconst active = getActiveElement() as HTMLElement | null;\n\t\tconst current = active\n\t\t\t? items.find(item => this._matchesNavigationTarget(item, active))\n\t\t\t: undefined;\n\t\tconst currentIndex = current ? items.indexOf(current) : -1;\n\n\t\treturn {\n\t\t\titems,\n\t\t\tcurrent,\n\t\t\tcurrentIndex,\n\t\t};\n\t}\n\n\t_onMultiChildKeydown(e: KeyboardEvent) {\n\t\tconst isForward = this.effectiveDir === \"rtl\" ? isLeft(e) : isRight(e);\n\t\tconst isBackward = this.effectiveDir === \"rtl\" ? isRight(e) : isLeft(e);\n\t\tconst isHomeKey = isHome(e);\n\t\tconst isEndKey = isEnd(e);\n\t\tif (!isForward && !isBackward && !isHomeKey && !isEndKey) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { items, currentIndex } = this._getCurrentNavigationState();\n\t\tif (currentIndex === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Home/End jump to the first/last child within the group.\n\t\tlet nextIndex: number;\n\t\tif (isHomeKey) {\n\t\t\tnextIndex = 0;\n\t\t} else if (isEndKey) {\n\t\t\tnextIndex = items.length - 1;\n\t\t} else {\n\t\t\tnextIndex = isForward ? currentIndex + 1 : currentIndex - 1;\n\t\t}\n\n\t\tif (nextIndex === currentIndex || nextIndex < 0 || nextIndex >= items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis._handleNavigationTarget(items[nextIndex]);\n\t}\n\n\tgetArrowNavState(): ToolbarArrowNavState | undefined {\n\t\tconst child = this.item[0] as IToolbarItemContent | undefined;\n\t\tif (!child) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Priority 1: ItemNavigation-based components (e.g. Breadcrumbs, SegmentedButton)\n\t\tconst itemNavOwner = child as IItemNavigationOwner;\n\t\tif (typeof itemNavOwner._itemNavigation?._getCurrentItem === \"function\"\n\t\t\t&& typeof itemNavOwner._getFocusableItems === \"function\") {\n\t\t\tconst items = itemNavOwner._getFocusableItems();\n\t\t\tconst current = itemNavOwner._itemNavigation._getCurrentItem();\n\t\t\tconst currentIndex = current\n\t\t\t\t? items.findIndex(item => (item.getFocusDomRef ? item.getFocusDomRef() : item) === current)\n\t\t\t\t: -1;\n\t\t\tif (currentIndex !== -1) {\n\t\t\t\treturn {\n\t\t\t\t\tatLeftEnd: currentIndex === 0,\n\t\t\t\t\tatRightEnd: currentIndex === items.length - 1,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Priority 2: IToolbarArrowNavProvider interface (e.g. Input)\n\t\tif (isToolbarArrowNavProvider(child)) {\n\t\t\treturn child.getArrowNavState();\n\t\t}\n\n\t\t// Priority 3: proprietary multi-child fallback (e.g. bare checkbox group)\n\t\tif (this.item.length <= 1) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst { items, currentIndex } = this._getCurrentNavigationState();\n\t\tif (currentIndex === -1) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tatLeftEnd: currentIndex === 0,\n\t\t\tatRightEnd: currentIndex === items.length - 1,\n\t\t};\n\t}\n\n\tfocusForToolbarNavigation(isForward: boolean) {\n\t\tconst target = this.getFocusDomRefForNavigation(isForward);\n\t\ttarget?.focus();\n\t}\n}\n\nexport type {\n\tIToolbarItemContent,\n};\nToolbarItem.define();\n\nexport default ToolbarItem;\n"]}
@@ -1,5 +1,6 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import type ToolbarItemOverflowBehavior from "./types/ToolbarItemOverflowBehavior.js";
3
+ import type { ToolbarArrowNavState } from "./IToolbarArrowNavProvider.js";
3
4
  type ToolbarItemEventDetail = {
4
5
  targetRef: HTMLElement;
5
6
  };
@@ -21,6 +22,14 @@ declare class ToolbarItemBase extends UI5Element {
21
22
  * @public
22
23
  */
23
24
  preventOverflowClosing: boolean;
25
+ _getNavigationTargets(): HTMLElement[];
26
+ /**
27
+ * Focus entry point when toolbar navigates into this item.
28
+ * Override in complex items (e.g., Breadcrumbs) to handle direction-aware entry.
29
+ * @private
30
+ */
31
+ focusForToolbarNavigation(isForward: boolean): void;
32
+ getArrowNavState(): ToolbarArrowNavState | undefined;
24
33
  _isOverflowed: boolean;
25
34
  get isOverflowed(): boolean;
26
35
  /**
@@ -51,6 +60,7 @@ declare class ToolbarItemBase extends UI5Element {
51
60
  * @protected
52
61
  */
53
62
  get isInteractive(): boolean;
63
+ get isToolbarNavigatable(): boolean;
54
64
  get hasOverflow(): boolean;
55
65
  /**
56
66
  * Returns if the item is separator.
@@ -43,6 +43,22 @@ class ToolbarItemBase extends UI5Element {
43
43
  this._maxWidth = 0;
44
44
  this._isRendering = true;
45
45
  }
46
+ _getNavigationTargets() {
47
+ const ref = this.getFocusDomRef();
48
+ return ref ? [ref] : [];
49
+ }
50
+ /**
51
+ * Focus entry point when toolbar navigates into this item.
52
+ * Override in complex items (e.g., Breadcrumbs) to handle direction-aware entry.
53
+ * @private
54
+ */
55
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
56
+ focusForToolbarNavigation(isForward) {
57
+ this.getFocusDomRef()?.focus();
58
+ }
59
+ getArrowNavState() {
60
+ return undefined;
61
+ }
46
62
  get isOverflowed() {
47
63
  return this._isOverflowed;
48
64
  }
@@ -88,6 +104,9 @@ class ToolbarItemBase extends UI5Element {
88
104
  get isInteractive() {
89
105
  return true;
90
106
  }
107
+ get isToolbarNavigatable() {
108
+ return this.isInteractive && !this.hidden && !("disabled" in this && !!this.disabled);
109
+ }
91
110
  get hasOverflow() {
92
111
  return false;
93
112
  }