@ui5/webcomponents 2.21.0 → 2.22.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/Breadcrumbs.js +25 -0
  4. package/dist/Breadcrumbs.js.map +1 -1
  5. package/dist/BreadcrumbsItem.d.ts +10 -0
  6. package/dist/BreadcrumbsItem.js +18 -0
  7. package/dist/BreadcrumbsItem.js.map +1 -1
  8. package/dist/Calendar.d.ts +41 -2
  9. package/dist/Calendar.js +109 -3
  10. package/dist/Calendar.js.map +1 -1
  11. package/dist/CalendarHeaderTemplate.d.ts +13 -1
  12. package/dist/CalendarHeaderTemplate.js +48 -12
  13. package/dist/CalendarHeaderTemplate.js.map +1 -1
  14. package/dist/CalendarTemplate.js +58 -2
  15. package/dist/CalendarTemplate.js.map +1 -1
  16. package/dist/Carousel.js +1 -1
  17. package/dist/Carousel.js.map +1 -1
  18. package/dist/ColorPaletteItem.d.ts +10 -1
  19. package/dist/ColorPaletteItem.js +7 -1
  20. package/dist/ColorPaletteItem.js.map +1 -1
  21. package/dist/ColorPaletteItemTemplate.js +1 -1
  22. package/dist/ColorPaletteItemTemplate.js.map +1 -1
  23. package/dist/DateComponentBase.d.ts +3 -3
  24. package/dist/DateRangePicker.d.ts +27 -0
  25. package/dist/DateRangePicker.js +57 -3
  26. package/dist/DateRangePicker.js.map +1 -1
  27. package/dist/DateRangePickerTemplate.js +7 -3
  28. package/dist/DateRangePickerTemplate.js.map +1 -1
  29. package/dist/DateTimePicker.js +0 -3
  30. package/dist/DateTimePicker.js.map +1 -1
  31. package/dist/DayPicker.js.map +1 -1
  32. package/dist/MessageStrip.js +1 -0
  33. package/dist/MessageStrip.js.map +1 -1
  34. package/dist/MonthPicker.d.ts +3 -3
  35. package/dist/MonthPicker.js +1 -1
  36. package/dist/MonthPicker.js.map +1 -1
  37. package/dist/Popup.js +4 -0
  38. package/dist/Popup.js.map +1 -1
  39. package/dist/SliderHandle.d.ts +0 -8
  40. package/dist/SliderHandle.js +0 -11
  41. package/dist/SliderHandle.js.map +1 -1
  42. package/dist/SliderTemplate.js +1 -1
  43. package/dist/SliderTemplate.js.map +1 -1
  44. package/dist/TimePicker.d.ts +2 -2
  45. package/dist/YearPicker.js +2 -4
  46. package/dist/YearPicker.js.map +1 -1
  47. package/dist/YearRangePicker.js +2 -3
  48. package/dist/YearRangePicker.js.map +1 -1
  49. package/dist/css/themes/Calendar.css +1 -1
  50. package/dist/css/themes/DatePickerPopover.css +1 -1
  51. package/dist/css/themes/Popup.css +1 -1
  52. package/dist/css/themes/ResponsivePopoverCommon.css +1 -1
  53. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  54. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  55. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  56. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  57. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  58. package/dist/css/themes/sap_horizon_auto/parameters-bundle.css +8 -0
  59. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  60. package/dist/css/themes/sap_horizon_hc_auto/parameters-bundle.css +9 -1
  61. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  62. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  63. package/dist/custom-elements-internal.json +95 -20
  64. package/dist/custom-elements.json +54 -19
  65. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  66. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  67. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  68. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  69. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  70. package/dist/generated/assets/themes/sap_horizon_auto/parameters-bundle.css.json +1 -1
  71. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  72. package/dist/generated/assets/themes/sap_horizon_hc_auto/parameters-bundle.css.json +1 -1
  73. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  74. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  75. package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
  76. package/dist/generated/i18n/i18n-defaults.js +3 -1
  77. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  78. package/dist/generated/themes/Calendar.css.d.ts +1 -1
  79. package/dist/generated/themes/Calendar.css.js +1 -1
  80. package/dist/generated/themes/Calendar.css.js.map +1 -1
  81. package/dist/generated/themes/DatePickerPopover.css.d.ts +1 -1
  82. package/dist/generated/themes/DatePickerPopover.css.js +1 -1
  83. package/dist/generated/themes/DatePickerPopover.css.js.map +1 -1
  84. package/dist/generated/themes/Popup.css.d.ts +1 -1
  85. package/dist/generated/themes/Popup.css.js +1 -1
  86. package/dist/generated/themes/Popup.css.js.map +1 -1
  87. package/dist/generated/themes/ResponsivePopoverCommon.css.d.ts +1 -1
  88. package/dist/generated/themes/ResponsivePopoverCommon.css.js +1 -1
  89. package/dist/generated/themes/ResponsivePopoverCommon.css.js.map +1 -1
  90. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.d.ts +1 -1
  91. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  92. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
  93. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.d.ts +1 -1
  94. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  95. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js.map +1 -1
  96. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.d.ts +1 -1
  97. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  98. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js.map +1 -1
  99. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.d.ts +1 -1
  100. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  101. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js.map +1 -1
  102. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
  103. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  104. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  105. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.d.ts +1 -1
  106. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.js +8 -0
  107. package/dist/generated/themes/sap_horizon_auto/parameters-bundle.css.js.map +1 -1
  108. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
  109. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  110. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  111. package/dist/generated/themes/sap_horizon_hc_auto/parameters-bundle.css.d.ts +1 -1
  112. package/dist/generated/themes/sap_horizon_hc_auto/parameters-bundle.css.js +9 -1
  113. package/dist/generated/themes/sap_horizon_hc_auto/parameters-bundle.css.js.map +1 -1
  114. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +1 -1
  115. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  116. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  117. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +1 -1
  118. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  119. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  120. package/dist/vscode.html-custom-data.json +11 -6
  121. package/dist/web-types.json +34 -14
  122. package/package.json +9 -9
  123. package/src/CalendarHeaderTemplate.tsx +148 -77
  124. package/src/CalendarTemplate.tsx +203 -66
  125. package/src/ColorPaletteItemTemplate.tsx +2 -2
  126. package/src/DateRangePickerTemplate.tsx +29 -1
  127. package/src/SliderTemplate.tsx +0 -1
  128. package/src/i18n/messagebundle.properties +6 -0
  129. package/src/themes/Calendar.css +144 -0
  130. package/src/themes/DatePickerPopover.css +3 -2
  131. package/src/themes/Popup.css +4 -0
  132. package/src/themes/ResponsivePopoverCommon.css +6 -1
  133. package/src/themes/base/CalendarHeader-parameters.css +9 -0
  134. package/src/themes/base/TextArea-parameters.css +1 -1
  135. package/src/themes/base/sizes-parameters.css +12 -0
  136. package/src/themes/sap_horizon/TextArea-parameters.css +0 -1
  137. package/src/themes/sap_horizon_dark/TextArea-parameters.css +0 -1
@@ -247,6 +247,15 @@ let Breadcrumbs = Breadcrumbs_1 = class Breadcrumbs extends UI5Element {
247
247
  }
248
248
  _onLinkPress(e) {
249
249
  const link = e.target, items = this._getItems(), item = items.find(x => `${x._id}-link` === link.id), { altKey, ctrlKey, metaKey, shiftKey, } = e.detail;
250
+ if (!item.fireDecoratorEvent("click", {
251
+ altKey,
252
+ ctrlKey,
253
+ metaKey,
254
+ shiftKey,
255
+ })) {
256
+ e.preventDefault();
257
+ return;
258
+ }
250
259
  if (!this.fireDecoratorEvent("item-click", {
251
260
  item,
252
261
  altKey,
@@ -259,6 +268,14 @@ let Breadcrumbs = Breadcrumbs_1 = class Breadcrumbs extends UI5Element {
259
268
  }
260
269
  _onLabelPress(e) {
261
270
  const items = this._getItems(), item = items[items.length - 1], { altKey, ctrlKey, metaKey, shiftKey, } = e;
271
+ if (!item.fireDecoratorEvent("click", {
272
+ altKey,
273
+ ctrlKey,
274
+ metaKey,
275
+ shiftKey,
276
+ })) {
277
+ return;
278
+ }
262
279
  this.fireDecoratorEvent("item-click", {
263
280
  item,
264
281
  altKey,
@@ -269,6 +286,14 @@ let Breadcrumbs = Breadcrumbs_1 = class Breadcrumbs extends UI5Element {
269
286
  }
270
287
  _onOverflowListItemSelect(e) {
271
288
  const listItem = e.detail.selectedItems[0], items = this._getItems(), item = items.find(x => `${x._id}-li` === listItem.id);
289
+ if (!item.fireDecoratorEvent("click", {
290
+ altKey: false,
291
+ ctrlKey: false,
292
+ metaKey: false,
293
+ shiftKey: false,
294
+ })) {
295
+ return;
296
+ }
272
297
  if (this.fireDecoratorEvent("item-click", { item })) {
273
298
  locationOpen(item.href, item.target || "_self", "noopener,noreferrer");
274
299
  this.responsivePopover.open = false;
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.js","sourceRoot":"","sources":["../src/Breadcrumbs.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 customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport ItemNavigation from \"@ui5/webcomponents-base/dist/delegate/ItemNavigation.js\";\nimport type { ITabbable } from \"@ui5/webcomponents-base/dist/delegate/ItemNavigation.js\";\nimport { locationOpen } from \"@ui5/webcomponents-base/dist/Location.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport type { AccessibilityAttributes } from \"@ui5/webcomponents-base/dist/types.js\";\nimport {\n\tisSpace,\n\tisShow,\n\tisEnter,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport NavigationMode from \"@ui5/webcomponents-base/dist/types/NavigationMode.js\";\nimport BreadcrumbsDesign from \"./types/BreadcrumbsDesign.js\";\nimport \"./BreadcrumbsItem.js\";\nimport type BreadcrumbsItem from \"./BreadcrumbsItem.js\";\nimport type BreadcrumbsSeparator from \"./types/BreadcrumbsSeparator.js\";\nimport type { IToolbarItemContent } from \"./ToolbarItem.js\";\n\nimport {\n\tBREADCRUMB_ITEM_POS,\n\tBREADCRUMBS_ARIA_LABEL,\n\tBREADCRUMBS_OVERFLOW_ARIA_LABEL,\n\tBREADCRUMBS_CANCEL_BUTTON,\n\tFORM_SELECTABLE_AVALIABLE_VALUES,\n} from \"./generated/i18n/i18n-defaults.js\";\nimport type Link from \"./Link.js\";\nimport type { LinkClickEventDetail } from \"./Link.js\";\nimport type Label from \"./Label.js\";\nimport type ResponsivePopover from \"./ResponsivePopover.js\";\nimport type { ListSelectionChangeEventDetail } from \"./List.js\";\n\n// Templates\nimport BreadcrumbsTemplate from \"./BreadcrumbsTemplate.js\";\n\n// Styles\nimport breadcrumbsCss from \"./generated/themes/Breadcrumbs.css.js\";\nimport breadcrumbsPopoverCss from \"./generated/themes/BreadcrumbsPopover.css.js\";\n\ntype BreadcrumbsItemClickEventDetail = {\n\titem: BreadcrumbsItem;\n\taltKey?: boolean;\n\tctrlKey?: boolean;\n\tmetaKey?: boolean;\n\tshiftKey?: boolean;\n}\n\ntype FocusAdaptor = ITabbable & {\n\tgetlabelWrapper: () => Element | null;\n\tforcedTabIndex: string;\n}\n\n/**\n * @class\n *\n * ### Overview\n * Enables users to navigate between items by providing a list of links to previous steps in the user's navigation path.\n * It helps the user to be aware of their location within the application and allows faster navigation.\n *\n * The last three steps can be accessed as links directly, while the remaining links prior to them are available\n * in a drop-down menu.\n *\n * You can choose the type of separator to be used from a number of predefined options.\n *\n * ### Keyboard Handling\n * The `ui5-breadcrumbs` provides advanced keyboard handling.\n *\n * - [F4], [Alt] + [Up], [Alt] + [Down], [Space], or [Enter] - If the dropdown arrow is focused - opens/closes the drop-down.\n * - [Space],[Enter] - Activates the focused item and triggers the `item-click` event.\n * - [Escape] - Closes the drop-down.\n * - [Left] - If the drop-down is closed - navigates one item to the left.\n * - [Right] - If the drop-down is closed - navigates one item to the right.\n * - [Up] - If the drop-down is open - moves focus to the next item.\n * - [Down] - If the drop-down is open - moves focus to the previous item.\n * - [Home] - Navigates to the first item.\n * - [End] - Navigates to the last item.\n * @constructor\n * @extends UI5Element\n * @implements {IToolbarItemContent}\n * @public\n * @since 1.0.0-rc.15\n */\n@customElement({\n\ttag: \"ui5-breadcrumbs\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: BreadcrumbsTemplate,\n\tstyles: [breadcrumbsCss, breadcrumbsPopoverCss],\n})\n/**\n * Fires when a `BreadcrumbsItem` is clicked.\n *\n * **Note:** You can prevent browser location change by calling `event.preventDefault()`.\n * @param {HTMLElement} item The clicked item.\n * @param {Boolean} altKey Returns whether the \"ALT\" key was pressed when the event was triggered.\n * @param {Boolean} ctrlKey Returns whether the \"CTRL\" key was pressed when the event was triggered.\n * @param {Boolean} metaKey Returns whether the \"META\" key was pressed when the event was triggered.\n * @param {Boolean} shiftKey Returns whether the \"SHIFT\" key was pressed when the event was triggered.\n * @public\n */\n@event(\"item-click\", {\n\tbubbles: true,\n\tcancelable: true,\n})\nclass Breadcrumbs extends UI5Element implements IToolbarItemContent {\n\teventDetails!: {\n\t\t\"item-click\": BreadcrumbsItemClickEventDetail,\n\t}\n\t/**\n\t * Defines the visual appearance of the last BreadcrumbsItem.\n\t *\n\t * The Breadcrumbs supports two visual appearances for the last BreadcrumbsItem:\n\t * - \"Standard\" - displaying the last item as \"current page\" (bold and without separator)\n\t * - \"NoCurrentPage\" - displaying the last item as a regular BreadcrumbsItem, followed by separator\n\t * @default \"Standard\"\n\t * @public\n\t*/\n\t@property()\n\tdesign: `${BreadcrumbsDesign}` = \"Standard\";\n\n\t/**\n\t * Determines the visual style of the separator between the breadcrumb items.\n\t * @default \"Slash\"\n\t * @public\n\t */\n\t@property()\n\tseparators: `${BreadcrumbsSeparator}` = \"Slash\";\n\n\t/**\n\t * Holds the number of items in the overflow.\n\t * @default 0\n\t * @private\n\t */\n\t@property({ type: Number, noAttribute: true })\n\t_overflowSize = 0;\n\n\t/**\n\t * Defines the component items.\n\t *\n\t * **Note:** Use the `ui5-breadcrumbs-item` component to define the desired items.\n\t * @public\n\t */\n\t@slot({ type: HTMLElement, invalidateOnChildChange: true, \"default\": true })\n\titems!: DefaultSlot<BreadcrumbsItem>;\n\n\t_itemNavigation: ItemNavigation\n\t_onResizeHandler: ResizeObserverCallback;\n\n\t// maps items to their widths\n\t_breadcrumbItemWidths = new WeakMap<BreadcrumbsItem, number>();\n\t// the width of the interactive element that opens the overflow\n\t_dropdownArrowLinkWidth = 0;\n\t_labelFocusAdaptor: FocusAdaptor;\n\tresponsivePopover?: ResponsivePopover;\n\t@i18n(\"@ui5/webcomponents\")\n\tstatic i18nBundle: I18nBundle;\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._itemNavigation = new ItemNavigation(this, {\n\t\t\tnavigationMode: NavigationMode.Auto,\n\t\t\tgetItemsCallback: () => this._getFocusableItems(),\n\t\t});\n\n\t\tthis._onResizeHandler = this._updateOverflow.bind(this);\n\n\t\tthis._labelFocusAdaptor = {\n\t\t\tid: `${this._id}-labelWrapper`,\n\t\t\tgetlabelWrapper: this.getCurrentLocationLabelWrapper.bind(this),\n\t\t\tset forcedTabIndex(value: string) {\n\t\t\t\tconst wrapper = this.getlabelWrapper();\n\t\t\t\twrapper && wrapper.setAttribute(\"tabindex\", value);\n\t\t\t},\n\t\t\tget forcedTabIndex() {\n\t\t\t\tconst wrapper = this.getlabelWrapper();\n\t\t\t\treturn wrapper?.getAttribute(\"tabindex\") || \"\";\n\t\t\t},\n\t\t};\n\t}\n\n\tonInvalidation(changeInfo: ChangeInfo) {\n\t\tif (changeInfo.reason === \"childchange\") {\n\t\t\tconst itemIndex = this._getItems().indexOf(changeInfo.child as BreadcrumbsItem),\n\t\t\t\tisInOverflow = itemIndex < this._overflowSize;\n\t\t\tif (isInOverflow) {\n\t\t\t\t// the content of an overflowing item has changed\n\t\t\t\t// => need to render the item outside the overflow to obtain its new width\n\t\t\t\t// => lower-down the `_overfowSize` to exclude that item from the overflow\n\t\t\t\tthis._overflowSize = itemIndex;\n\t\t\t}\n\t\t}\n\t}\n\n\t_getItems() {\n\t\treturn this.getSlottedNodes<BreadcrumbsItem>(\"items\");\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._preprocessItems();\n\t}\n\n\tasync onAfterRendering() {\n\t\tawait renderFinished();\n\n\t\tthis._cacheWidths();\n\t\tthis._updateOverflow();\n\t}\n\n\tonEnterDOM() {\n\t\tResizeHandler.register(this, this._onResizeHandler);\n\t}\n\n\tonExitDOM() {\n\t\tResizeHandler.deregister(this, this._onResizeHandler);\n\t}\n\n\t_initItemNavigation() {\n\t\tif (!this._itemNavigation) {\n\t\t\tthis._itemNavigation = new ItemNavigation(this, {\n\t\t\t\tnavigationMode: NavigationMode.Auto,\n\t\t\t\tgetItemsCallback: () => this._getFocusableItems(),\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Obtains the items for navigation via keyboard\n\t * @private\n\t */\n\t_getFocusableItems() {\n\t\tconst items: Array<ITabbable> = this._links;\n\n\t\tif (!this._isOverflowEmpty) {\n\t\t\titems.unshift(this._dropdownArrowLink);\n\t\t}\n\n\t\tif (this._endsWithCurrentLocation && !this._endsWithCurrentLinkItem) {\n\t\t\titems.push(this._labelFocusAdaptor);\n\t\t}\n\n\t\treturn items;\n\t}\n\n\tgetFocusDomRef() {\n\t\treturn this._itemNavigation._getCurrentItem();\n\t}\n\n\t/**\n\t * Returns the translatable accessible name for the popover\n\t * @private\n\t */\n\tget _accessibleNamePopover() {\n\t\treturn Breadcrumbs.i18nBundle.getText(FORM_SELECTABLE_AVALIABLE_VALUES);\n\t}\n\n\t_onfocusin(e: FocusEvent) {\n\t\tconst target = e.target,\n\t\t\tlabelWrapper = this.getCurrentLocationLabelWrapper(),\n\t\t\tcurrentItem = (target === labelWrapper) ? this._labelFocusAdaptor : target as Link;\n\n\t\tthis._itemNavigation.setCurrentItem(currentItem);\n\t}\n\n\t_onkeydown(e: KeyboardEvent) {\n\t\tconst isDropdownArrowFocused = this._isDropdownArrowFocused;\n\n\t\tif (isShow(e) && isDropdownArrowFocused && !this._isOverflowEmpty) {\n\t\t\te.preventDefault();\n\t\t\tthis._toggleRespPopover();\n\t\t\treturn;\n\t\t}\n\t\tif (isSpace(e) && isDropdownArrowFocused && !this._isOverflowEmpty && !this._isPickerOpen) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif ((isEnter(e) || isSpace(e)) && this._isCurrentLocationLabelFocused) {\n\t\t\tthis._onLabelPress(e);\n\t\t}\n\t}\n\n\t_onkeyup(e: KeyboardEvent) {\n\t\tif (this._isDropdownArrowFocused && isSpace(e) && !this._isOverflowEmpty && !this._isPickerOpen) {\n\t\t\tthis._openRespPopover();\n\t\t}\n\t}\n\n\t/**\n\t * Caches the space required to render the content\n\t * @private\n\t */\n\t_cacheWidths() {\n\t\tconst map = this._breadcrumbItemWidths,\n\t\t\t items = this._getItems(),\n\t\t\t label = this._currentLocationLabel;\n\n\t\tfor (let i = this._overflowSize; i < items.length; i++) {\n\t\t\tconst item = items[i],\n\t\t\t\tlink = this.shadowRoot!.querySelector<HTMLElement>(`#${item._id}-link-wrapper`)!;\n\t\t\tmap.set(item, this._getElementWidth(link));\n\t\t}\n\n\t\tif (items.length && this._endsWithCurrentLocation && label) {\n\t\t\tconst item = items[items.length - 1];\n\n\t\t\tmap.set(item, this._getElementWidth(label));\n\t\t}\n\n\t\tif (!this._isOverflowEmpty) {\n\t\t\tconst arrow = this.shadowRoot!.querySelector<HTMLElement>(\".ui5-breadcrumbs-dropdown-arrow-link-wrapper\")!;\n\t\t\tthis._dropdownArrowLinkWidth = this._getElementWidth(arrow);\n\t\t}\n\t}\n\n\t_updateOverflow() {\n\t\tconst items = this._getItems(),\n\t\t\tavailableWidth = this.shadowRoot!.querySelector<HTMLElement>(\".ui5-breadcrumbs-root\")!.offsetWidth;\n\t\tlet requiredWidth = this._getTotalContentWidth(),\n\t\t\toverflowSize = 0;\n\n\t\tif (requiredWidth > availableWidth) {\n\t\t\t// need to show the component that opens the overflow\n\t\t\trequiredWidth += this._dropdownArrowLinkWidth;\n\t\t}\n\n\t\twhile ((requiredWidth >= availableWidth) && (overflowSize < this._maxAllowedOverflowSize)) {\n\t\t\tconst itemToOverflow = items[overflowSize];\n\t\t\tlet itemWidth = 0;\n\n\t\t\tif (this._isItemVisible(itemToOverflow)) {\n\t\t\t\titemWidth = this._breadcrumbItemWidths.get(itemToOverflow) || 0;\n\t\t\t}\n\n\t\t\t// move the item to the overflow\n\t\t\trequiredWidth -= itemWidth;\n\t\t\toverflowSize++;\n\t\t}\n\n\t\tthis._overflowSize = overflowSize;\n\n\t\t// if overflow was emptied while picker was open => close redundant popup\n\t\tif (this._isOverflowEmpty && this._isPickerOpen) {\n\t\t\tthis.responsivePopover!.open = false;\n\t\t}\n\n\t\t// if the last focused link has done into the overflow =>\n\t\t// ensure the first visible link is focusable\n\t\tconst focusableItems = this._getFocusableItems();\n\t\tif (!focusableItems.some(x => x.forcedTabIndex === \"0\")) {\n\t\t\tthis._itemNavigation.setCurrentItem(focusableItems[0]);\n\t\t}\n\t}\n\n\t_getElementWidth(element: HTMLElement) {\n\t\tif (element) {\n\t\t\treturn Math.ceil(element.getBoundingClientRect().width);\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\t_getTotalContentWidth() {\n\t\tconst items = this._getItems(),\n\t\t\twidthsMap = this._breadcrumbItemWidths,\n\t\t\ttotalLinksWidth = items.reduce((sum, link) => sum + widthsMap.get(link)!, 0);\n\n\t\treturn totalLinksWidth;\n\t}\n\n\t_onLinkPress(e: CustomEvent<LinkClickEventDetail>) {\n\t\tconst link = e.target as Link,\n\t\t\titems = this._getItems(),\n\t\t\titem = items.find(x => `${x._id}-link` === link.id)!,\n\t\t\t{\n\t\t\t\taltKey,\n\t\t\t\tctrlKey,\n\t\t\t\tmetaKey,\n\t\t\t\tshiftKey,\n\t\t\t} = e.detail;\n\n\t\tif (!this.fireDecoratorEvent(\"item-click\", {\n\t\t\titem,\n\t\t\taltKey,\n\t\t\tctrlKey,\n\t\t\tmetaKey,\n\t\t\tshiftKey,\n\t\t})) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\t_onLabelPress(e: MouseEvent | KeyboardEvent) {\n\t\tconst items = this._getItems(),\n\t\t\titem = items[items.length - 1],\n\t\t\t{\n\t\t\t\taltKey,\n\t\t\t\tctrlKey,\n\t\t\t\tmetaKey,\n\t\t\t\tshiftKey,\n\t\t\t} = e;\n\n\t\tthis.fireDecoratorEvent(\"item-click\", {\n\t\t\titem,\n\t\t\taltKey,\n\t\t\tctrlKey,\n\t\t\tmetaKey,\n\t\t\tshiftKey,\n\t\t});\n\t}\n\n\t_onOverflowListItemSelect(e: CustomEvent<ListSelectionChangeEventDetail>) {\n\t\tconst listItem = e.detail.selectedItems[0],\n\t\t\titems = this._getItems(),\n\t\t\titem = items.find(x => `${x._id}-li` === listItem.id)!;\n\n\t\tif (this.fireDecoratorEvent(\"item-click\", { item })) {\n\t\t\tlocationOpen(item.href, item.target || \"_self\", \"noopener,noreferrer\");\n\t\t\tthis.responsivePopover!.open = false;\n\t\t}\n\t}\n\n\t_respPopover() {\n\t\treturn this.shadowRoot!.querySelector<ResponsivePopover>(\"[ui5-responsive-popover]\")!;\n\t}\n\n\t_toggleRespPopover() {\n\t\tthis.responsivePopover = this._respPopover();\n\n\t\tif (this._isPickerOpen) {\n\t\t\tthis._closeRespPopover();\n\t\t} else {\n\t\t\tthis._openRespPopover();\n\t\t}\n\t}\n\n\t_closeRespPopover() {\n\t\tif (this.responsivePopover) {\n\t\t\tthis.responsivePopover.open = false;\n\t\t}\n\t}\n\n\t_openRespPopover() {\n\t\tthis.responsivePopover = this._respPopover();\n\t\tthis.responsivePopover.opener = this._dropdownArrowLink;\n\t\tthis.responsivePopover.open = true;\n\t}\n\n\t_isItemVisible(item: BreadcrumbsItem) {\n\t\treturn !item.hidden && this._hasVisibleContent(item);\n\t}\n\n\t_hasVisibleContent(item: BreadcrumbsItem) {\n\t\t// the check is not complete but may be extended in the future if needed to cover\n\t\t// cases besides the standard (UX-recommended) ones\n\t\treturn item.innerText || Array.from(item.children).some(child => !(child as HTMLElement).hidden);\n\t}\n\n\t_preprocessItems() {\n\t\tthis.items.forEach(item => {\n\t\t\titem._getRealDomRef = () => this.getDomRef()!.querySelector(`[data-ui5-stable*=${item.stableDomRef}]`)!;\n\t\t});\n\t}\n\n\t_getItemPositionText(position: number, size: number) {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMB_ITEM_POS, position, size);\n\t}\n\n\t_getItemAccessibleName(item: BreadcrumbsItem, position: number, size: number) {\n\t\tconst positionText = this._getItemPositionText(position, size);\n\t\tconst itemsText = item.textContent || \"\";\n\n\t\t// innerText is needed as it is no longer read out when label is set\n\t\tlet text = \"\";\n\t\tif (item.accessibleName) {\n\t\t\ttext = `${itemsText.trim()} ${item.accessibleName} ${positionText}`;\n\t\t} else {\n\t\t\ttext = `${itemsText.trim()} ${positionText}`;\n\t\t}\n\n\t\treturn text;\n\t}\n\n\tgetCurrentLocationLabelWrapper() {\n\t\treturn this.shadowRoot!.querySelector<HTMLElement>(\".ui5-breadcrumbs-current-location > span\");\n\t}\n\n\tget _visibleItems() {\n\t\treturn this._getItems()\n\t\t\t.slice(this._overflowSize)\n\t\t\t.filter(i => this._isItemVisible(i));\n\t}\n\n\tget _endsWithCurrentLinkItem() {\n\t\tconst items = this._getItems();\n\t\treturn (items.length && items[items.length - 1].href);\n\t}\n\n\tget _endsWithCurrentLocation() {\n\t\treturn this.design === BreadcrumbsDesign.Standard;\n\t}\n\n\tget _currentLocationText() {\n\t\tconst items = this._getItems();\n\t\tif (this._endsWithCurrentLocation && items.length) {\n\t\t\tconst item = items[items.length - 1];\n\t\t\tif (this._isItemVisible(item)) {\n\t\t\t\treturn item.innerText;\n\t\t\t}\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tget _currentLocationLabel() {\n\t\treturn this.shadowRoot!.querySelector<Label>(\".ui5-breadcrumbs-current-location [ui5-label]\");\n\t}\n\n\tget _isDropdownArrowFocused() {\n\t\treturn this._dropdownArrowLink.forcedTabIndex === \"0\";\n\t}\n\n\tget _isCurrentLocationLabelFocused() {\n\t\tconst label = this.getCurrentLocationLabelWrapper();\n\t\treturn label && label.tabIndex === 0;\n\t}\n\n\t/**\n\t * Returns the maximum allowed count of items in the overflow\n\t * with respect to the UX requirement to never overflow the last visible item\n\t */\n\tget _maxAllowedOverflowSize() {\n\t\tconst items = this._getItems().filter(item => this._isItemVisible(item));\n\t\t// all items except tha last visible one are allowed to overflow by UX requirement\n\t\treturn items.length - 1;\n\t}\n\n\t/**\n\t * Getter for the interactive element that opens the overflow\n\t * @private\n\t */\n\tget _dropdownArrowLink() {\n\t\treturn this.shadowRoot!.querySelector<Link>(\".ui5-breadcrumbs-dropdown-arrow-link-wrapper [ui5-link]\")!;\n\t}\n\n\t/**\n\t * Getter for the list of abstract breadcrumb items to be rendered as list-items inside the overflow\n\t */\n\tget _overflowItemsData() {\n\t\treturn this._getItems()\n\t\t\t.slice(0, this._overflowSize)\n\t\t\t.filter(item => this._isItemVisible(item))\n\t\t\t.reverse();\n\t}\n\n\t/**\n\t * Returns all items that should be displayed in the popover on mobile devices\n\t * @private\n\t */\n\tget _mobilePopoverItems() {\n\t\treturn this._getItems()\n\t\t\t.filter(item => this._isItemVisible(item))\n\t\t\t.reverse();\n\t}\n\n\t/**\n\t * Getter for the list of abstract breadcrumb items to be rendered as links outside the overflow\n\t */\n\tget _linksData() {\n\t\tconst items = this._visibleItems;\n\t\tconst itemsCount = items.length; // get size before removing of current location\n\n\t\tif (this._endsWithCurrentLocation && !this._endsWithCurrentLinkItem) {\n\t\t\titems.pop();\n\t\t}\n\n\t\treturn items\n\t\t\t.map((item, index) => {\n\t\t\t\titem._accessibleNameText = this._getItemAccessibleName(item, index + 1, itemsCount);\n\t\t\t\titem._isCurrentPageItem = index === (itemsCount - 1) && this._endsWithCurrentLocation;\n\t\t\t\titem._needsSeparator = !item._isCurrentPageItem;\n\t\t\t\treturn item;\n\t\t\t});\n\t}\n\n\t/**\n\t * Getter for accessible name of the current location. Includes the position of the current location and the size of the breadcrumbs\n\t */\n\tget _currentLocationAccName() {\n\t\tconst items = this._visibleItems;\n\n\t\tconst positionText = this._getItemPositionText(items.length, items.length);\n\t\tconst lastItem = items[items.length - 1];\n\n\t\tif (!lastItem) {\n\t\t\treturn positionText;\n\t\t}\n\n\t\tconst lastItemText = lastItem.textContent || \"\";\n\n\t\tif (lastItem.accessibleName) {\n\t\t\treturn `${lastItemText.trim()} ${lastItem.accessibleName} ${positionText}`;\n\t\t}\n\n\t\treturn `${lastItemText.trim()} ${positionText}`;\n\t}\n\n\t/**\n\t * Getter for the list of links corresponding to the abstract breadcrumb items\n\t */\n\tget _links() {\n\t\treturn Array.from(this.shadowRoot!.querySelectorAll<Link>(\".ui5-breadcrumbs-link-wrapper [ui5-link]\"));\n\t}\n\n\tget _isOverflowEmpty() {\n\t\treturn this._overflowItemsData.length === 0;\n\t}\n\n\tget linkAccessibilityAttributes(): Pick<AccessibilityAttributes, \"hasPopup\"> {\n\t\treturn {\n\t\t\thasPopup: this._isOverflowEmpty ? undefined : \"listbox\",\n\t\t};\n\t}\n\n\tget _isPickerOpen() {\n\t\treturn !!this.responsivePopover && this.responsivePopover.open;\n\t}\n\n\tget _accessibleNameText() {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMBS_ARIA_LABEL);\n\t}\n\n\tget _dropdownArrowAccessibleNameText() {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMBS_OVERFLOW_ARIA_LABEL);\n\t}\n\n\tget _cancelButtonText() {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMBS_CANCEL_BUTTON);\n\t}\n\tget hasOverflow() {\n\t\treturn true;\n\t}\n}\n\nBreadcrumbs.define();\n\nexport default Breadcrumbs;\nexport type {\n\tBreadcrumbsItemClickEventDetail,\n};\n"]}
1
+ {"version":3,"file":"Breadcrumbs.js","sourceRoot":"","sources":["../src/Breadcrumbs.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 customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport ItemNavigation from \"@ui5/webcomponents-base/dist/delegate/ItemNavigation.js\";\nimport type { ITabbable } from \"@ui5/webcomponents-base/dist/delegate/ItemNavigation.js\";\nimport { locationOpen } from \"@ui5/webcomponents-base/dist/Location.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport type { AccessibilityAttributes } from \"@ui5/webcomponents-base/dist/types.js\";\nimport {\n\tisSpace,\n\tisShow,\n\tisEnter,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport NavigationMode from \"@ui5/webcomponents-base/dist/types/NavigationMode.js\";\nimport BreadcrumbsDesign from \"./types/BreadcrumbsDesign.js\";\nimport \"./BreadcrumbsItem.js\";\nimport type BreadcrumbsItem from \"./BreadcrumbsItem.js\";\nimport type BreadcrumbsSeparator from \"./types/BreadcrumbsSeparator.js\";\nimport type { IToolbarItemContent } from \"./ToolbarItem.js\";\n\nimport {\n\tBREADCRUMB_ITEM_POS,\n\tBREADCRUMBS_ARIA_LABEL,\n\tBREADCRUMBS_OVERFLOW_ARIA_LABEL,\n\tBREADCRUMBS_CANCEL_BUTTON,\n\tFORM_SELECTABLE_AVALIABLE_VALUES,\n} from \"./generated/i18n/i18n-defaults.js\";\nimport type Link from \"./Link.js\";\nimport type { LinkClickEventDetail } from \"./Link.js\";\nimport type Label from \"./Label.js\";\nimport type ResponsivePopover from \"./ResponsivePopover.js\";\nimport type { ListSelectionChangeEventDetail } from \"./List.js\";\n\n// Templates\nimport BreadcrumbsTemplate from \"./BreadcrumbsTemplate.js\";\n\n// Styles\nimport breadcrumbsCss from \"./generated/themes/Breadcrumbs.css.js\";\nimport breadcrumbsPopoverCss from \"./generated/themes/BreadcrumbsPopover.css.js\";\n\ntype BreadcrumbsItemClickEventDetail = {\n\titem: BreadcrumbsItem;\n\taltKey?: boolean;\n\tctrlKey?: boolean;\n\tmetaKey?: boolean;\n\tshiftKey?: boolean;\n}\n\ntype FocusAdaptor = ITabbable & {\n\tgetlabelWrapper: () => Element | null;\n\tforcedTabIndex: string;\n}\n\n/**\n * @class\n *\n * ### Overview\n * Enables users to navigate between items by providing a list of links to previous steps in the user's navigation path.\n * It helps the user to be aware of their location within the application and allows faster navigation.\n *\n * The last three steps can be accessed as links directly, while the remaining links prior to them are available\n * in a drop-down menu.\n *\n * You can choose the type of separator to be used from a number of predefined options.\n *\n * ### Keyboard Handling\n * The `ui5-breadcrumbs` provides advanced keyboard handling.\n *\n * - [F4], [Alt] + [Up], [Alt] + [Down], [Space], or [Enter] - If the dropdown arrow is focused - opens/closes the drop-down.\n * - [Space],[Enter] - Activates the focused item and triggers the `item-click` event.\n * - [Escape] - Closes the drop-down.\n * - [Left] - If the drop-down is closed - navigates one item to the left.\n * - [Right] - If the drop-down is closed - navigates one item to the right.\n * - [Up] - If the drop-down is open - moves focus to the next item.\n * - [Down] - If the drop-down is open - moves focus to the previous item.\n * - [Home] - Navigates to the first item.\n * - [End] - Navigates to the last item.\n * @constructor\n * @extends UI5Element\n * @implements {IToolbarItemContent}\n * @public\n * @since 1.0.0-rc.15\n */\n@customElement({\n\ttag: \"ui5-breadcrumbs\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: BreadcrumbsTemplate,\n\tstyles: [breadcrumbsCss, breadcrumbsPopoverCss],\n})\n/**\n * Fires when a `BreadcrumbsItem` is clicked.\n *\n * **Note:** You can prevent browser location change by calling `event.preventDefault()`.\n * @param {HTMLElement} item The clicked item.\n * @param {Boolean} altKey Returns whether the \"ALT\" key was pressed when the event was triggered.\n * @param {Boolean} ctrlKey Returns whether the \"CTRL\" key was pressed when the event was triggered.\n * @param {Boolean} metaKey Returns whether the \"META\" key was pressed when the event was triggered.\n * @param {Boolean} shiftKey Returns whether the \"SHIFT\" key was pressed when the event was triggered.\n * @public\n */\n@event(\"item-click\", {\n\tbubbles: true,\n\tcancelable: true,\n})\nclass Breadcrumbs extends UI5Element implements IToolbarItemContent {\n\teventDetails!: {\n\t\t\"item-click\": BreadcrumbsItemClickEventDetail,\n\t}\n\t/**\n\t * Defines the visual appearance of the last BreadcrumbsItem.\n\t *\n\t * The Breadcrumbs supports two visual appearances for the last BreadcrumbsItem:\n\t * - \"Standard\" - displaying the last item as \"current page\" (bold and without separator)\n\t * - \"NoCurrentPage\" - displaying the last item as a regular BreadcrumbsItem, followed by separator\n\t * @default \"Standard\"\n\t * @public\n\t*/\n\t@property()\n\tdesign: `${BreadcrumbsDesign}` = \"Standard\";\n\n\t/**\n\t * Determines the visual style of the separator between the breadcrumb items.\n\t * @default \"Slash\"\n\t * @public\n\t */\n\t@property()\n\tseparators: `${BreadcrumbsSeparator}` = \"Slash\";\n\n\t/**\n\t * Holds the number of items in the overflow.\n\t * @default 0\n\t * @private\n\t */\n\t@property({ type: Number, noAttribute: true })\n\t_overflowSize = 0;\n\n\t/**\n\t * Defines the component items.\n\t *\n\t * **Note:** Use the `ui5-breadcrumbs-item` component to define the desired items.\n\t * @public\n\t */\n\t@slot({ type: HTMLElement, invalidateOnChildChange: true, \"default\": true })\n\titems!: DefaultSlot<BreadcrumbsItem>;\n\n\t_itemNavigation: ItemNavigation\n\t_onResizeHandler: ResizeObserverCallback;\n\n\t// maps items to their widths\n\t_breadcrumbItemWidths = new WeakMap<BreadcrumbsItem, number>();\n\t// the width of the interactive element that opens the overflow\n\t_dropdownArrowLinkWidth = 0;\n\t_labelFocusAdaptor: FocusAdaptor;\n\tresponsivePopover?: ResponsivePopover;\n\t@i18n(\"@ui5/webcomponents\")\n\tstatic i18nBundle: I18nBundle;\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._itemNavigation = new ItemNavigation(this, {\n\t\t\tnavigationMode: NavigationMode.Auto,\n\t\t\tgetItemsCallback: () => this._getFocusableItems(),\n\t\t});\n\n\t\tthis._onResizeHandler = this._updateOverflow.bind(this);\n\n\t\tthis._labelFocusAdaptor = {\n\t\t\tid: `${this._id}-labelWrapper`,\n\t\t\tgetlabelWrapper: this.getCurrentLocationLabelWrapper.bind(this),\n\t\t\tset forcedTabIndex(value: string) {\n\t\t\t\tconst wrapper = this.getlabelWrapper();\n\t\t\t\twrapper && wrapper.setAttribute(\"tabindex\", value);\n\t\t\t},\n\t\t\tget forcedTabIndex() {\n\t\t\t\tconst wrapper = this.getlabelWrapper();\n\t\t\t\treturn wrapper?.getAttribute(\"tabindex\") || \"\";\n\t\t\t},\n\t\t};\n\t}\n\n\tonInvalidation(changeInfo: ChangeInfo) {\n\t\tif (changeInfo.reason === \"childchange\") {\n\t\t\tconst itemIndex = this._getItems().indexOf(changeInfo.child as BreadcrumbsItem),\n\t\t\t\tisInOverflow = itemIndex < this._overflowSize;\n\t\t\tif (isInOverflow) {\n\t\t\t\t// the content of an overflowing item has changed\n\t\t\t\t// => need to render the item outside the overflow to obtain its new width\n\t\t\t\t// => lower-down the `_overfowSize` to exclude that item from the overflow\n\t\t\t\tthis._overflowSize = itemIndex;\n\t\t\t}\n\t\t}\n\t}\n\n\t_getItems() {\n\t\treturn this.getSlottedNodes<BreadcrumbsItem>(\"items\");\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._preprocessItems();\n\t}\n\n\tasync onAfterRendering() {\n\t\tawait renderFinished();\n\n\t\tthis._cacheWidths();\n\t\tthis._updateOverflow();\n\t}\n\n\tonEnterDOM() {\n\t\tResizeHandler.register(this, this._onResizeHandler);\n\t}\n\n\tonExitDOM() {\n\t\tResizeHandler.deregister(this, this._onResizeHandler);\n\t}\n\n\t_initItemNavigation() {\n\t\tif (!this._itemNavigation) {\n\t\t\tthis._itemNavigation = new ItemNavigation(this, {\n\t\t\t\tnavigationMode: NavigationMode.Auto,\n\t\t\t\tgetItemsCallback: () => this._getFocusableItems(),\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Obtains the items for navigation via keyboard\n\t * @private\n\t */\n\t_getFocusableItems() {\n\t\tconst items: Array<ITabbable> = this._links;\n\n\t\tif (!this._isOverflowEmpty) {\n\t\t\titems.unshift(this._dropdownArrowLink);\n\t\t}\n\n\t\tif (this._endsWithCurrentLocation && !this._endsWithCurrentLinkItem) {\n\t\t\titems.push(this._labelFocusAdaptor);\n\t\t}\n\n\t\treturn items;\n\t}\n\n\tgetFocusDomRef() {\n\t\treturn this._itemNavigation._getCurrentItem();\n\t}\n\n\t/**\n\t * Returns the translatable accessible name for the popover\n\t * @private\n\t */\n\tget _accessibleNamePopover() {\n\t\treturn Breadcrumbs.i18nBundle.getText(FORM_SELECTABLE_AVALIABLE_VALUES);\n\t}\n\n\t_onfocusin(e: FocusEvent) {\n\t\tconst target = e.target,\n\t\t\tlabelWrapper = this.getCurrentLocationLabelWrapper(),\n\t\t\tcurrentItem = (target === labelWrapper) ? this._labelFocusAdaptor : target as Link;\n\n\t\tthis._itemNavigation.setCurrentItem(currentItem);\n\t}\n\n\t_onkeydown(e: KeyboardEvent) {\n\t\tconst isDropdownArrowFocused = this._isDropdownArrowFocused;\n\n\t\tif (isShow(e) && isDropdownArrowFocused && !this._isOverflowEmpty) {\n\t\t\te.preventDefault();\n\t\t\tthis._toggleRespPopover();\n\t\t\treturn;\n\t\t}\n\t\tif (isSpace(e) && isDropdownArrowFocused && !this._isOverflowEmpty && !this._isPickerOpen) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif ((isEnter(e) || isSpace(e)) && this._isCurrentLocationLabelFocused) {\n\t\t\tthis._onLabelPress(e);\n\t\t}\n\t}\n\n\t_onkeyup(e: KeyboardEvent) {\n\t\tif (this._isDropdownArrowFocused && isSpace(e) && !this._isOverflowEmpty && !this._isPickerOpen) {\n\t\t\tthis._openRespPopover();\n\t\t}\n\t}\n\n\t/**\n\t * Caches the space required to render the content\n\t * @private\n\t */\n\t_cacheWidths() {\n\t\tconst map = this._breadcrumbItemWidths,\n\t\t\t items = this._getItems(),\n\t\t\t label = this._currentLocationLabel;\n\n\t\tfor (let i = this._overflowSize; i < items.length; i++) {\n\t\t\tconst item = items[i],\n\t\t\t\tlink = this.shadowRoot!.querySelector<HTMLElement>(`#${item._id}-link-wrapper`)!;\n\t\t\tmap.set(item, this._getElementWidth(link));\n\t\t}\n\n\t\tif (items.length && this._endsWithCurrentLocation && label) {\n\t\t\tconst item = items[items.length - 1];\n\n\t\t\tmap.set(item, this._getElementWidth(label));\n\t\t}\n\n\t\tif (!this._isOverflowEmpty) {\n\t\t\tconst arrow = this.shadowRoot!.querySelector<HTMLElement>(\".ui5-breadcrumbs-dropdown-arrow-link-wrapper\")!;\n\t\t\tthis._dropdownArrowLinkWidth = this._getElementWidth(arrow);\n\t\t}\n\t}\n\n\t_updateOverflow() {\n\t\tconst items = this._getItems(),\n\t\t\tavailableWidth = this.shadowRoot!.querySelector<HTMLElement>(\".ui5-breadcrumbs-root\")!.offsetWidth;\n\t\tlet requiredWidth = this._getTotalContentWidth(),\n\t\t\toverflowSize = 0;\n\n\t\tif (requiredWidth > availableWidth) {\n\t\t\t// need to show the component that opens the overflow\n\t\t\trequiredWidth += this._dropdownArrowLinkWidth;\n\t\t}\n\n\t\twhile ((requiredWidth >= availableWidth) && (overflowSize < this._maxAllowedOverflowSize)) {\n\t\t\tconst itemToOverflow = items[overflowSize];\n\t\t\tlet itemWidth = 0;\n\n\t\t\tif (this._isItemVisible(itemToOverflow)) {\n\t\t\t\titemWidth = this._breadcrumbItemWidths.get(itemToOverflow) || 0;\n\t\t\t}\n\n\t\t\t// move the item to the overflow\n\t\t\trequiredWidth -= itemWidth;\n\t\t\toverflowSize++;\n\t\t}\n\n\t\tthis._overflowSize = overflowSize;\n\n\t\t// if overflow was emptied while picker was open => close redundant popup\n\t\tif (this._isOverflowEmpty && this._isPickerOpen) {\n\t\t\tthis.responsivePopover!.open = false;\n\t\t}\n\n\t\t// if the last focused link has done into the overflow =>\n\t\t// ensure the first visible link is focusable\n\t\tconst focusableItems = this._getFocusableItems();\n\t\tif (!focusableItems.some(x => x.forcedTabIndex === \"0\")) {\n\t\t\tthis._itemNavigation.setCurrentItem(focusableItems[0]);\n\t\t}\n\t}\n\n\t_getElementWidth(element: HTMLElement) {\n\t\tif (element) {\n\t\t\treturn Math.ceil(element.getBoundingClientRect().width);\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\t_getTotalContentWidth() {\n\t\tconst items = this._getItems(),\n\t\t\twidthsMap = this._breadcrumbItemWidths,\n\t\t\ttotalLinksWidth = items.reduce((sum, link) => sum + widthsMap.get(link)!, 0);\n\n\t\treturn totalLinksWidth;\n\t}\n\n\t_onLinkPress(e: CustomEvent<LinkClickEventDetail>) {\n\t\tconst link = e.target as Link,\n\t\t\titems = this._getItems(),\n\t\t\titem = items.find(x => `${x._id}-link` === link.id)!,\n\t\t\t{\n\t\t\t\taltKey,\n\t\t\t\tctrlKey,\n\t\t\t\tmetaKey,\n\t\t\t\tshiftKey,\n\t\t\t} = e.detail;\n\n\t\tif (!item.fireDecoratorEvent(\"click\", {\n\t\t\taltKey,\n\t\t\tctrlKey,\n\t\t\tmetaKey,\n\t\t\tshiftKey,\n\t\t})) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.fireDecoratorEvent(\"item-click\", {\n\t\t\titem,\n\t\t\taltKey,\n\t\t\tctrlKey,\n\t\t\tmetaKey,\n\t\t\tshiftKey,\n\t\t})) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\t_onLabelPress(e: MouseEvent | KeyboardEvent) {\n\t\tconst items = this._getItems(),\n\t\t\titem = items[items.length - 1],\n\t\t\t{\n\t\t\t\taltKey,\n\t\t\t\tctrlKey,\n\t\t\t\tmetaKey,\n\t\t\t\tshiftKey,\n\t\t\t} = e;\n\n\t\tif (!item.fireDecoratorEvent(\"click\", {\n\t\t\taltKey,\n\t\t\tctrlKey,\n\t\t\tmetaKey,\n\t\t\tshiftKey,\n\t\t})) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.fireDecoratorEvent(\"item-click\", {\n\t\t\titem,\n\t\t\taltKey,\n\t\t\tctrlKey,\n\t\t\tmetaKey,\n\t\t\tshiftKey,\n\t\t});\n\t}\n\n\t_onOverflowListItemSelect(e: CustomEvent<ListSelectionChangeEventDetail>) {\n\t\tconst listItem = e.detail.selectedItems[0],\n\t\t\titems = this._getItems(),\n\t\t\titem = items.find(x => `${x._id}-li` === listItem.id)!;\n\n\t\tif (!item.fireDecoratorEvent(\"click\", {\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false,\n\t\t\tshiftKey: false,\n\t\t})) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.fireDecoratorEvent(\"item-click\", { item })) {\n\t\t\tlocationOpen(item.href, item.target || \"_self\", \"noopener,noreferrer\");\n\t\t\tthis.responsivePopover!.open = false;\n\t\t}\n\t}\n\n\t_respPopover() {\n\t\treturn this.shadowRoot!.querySelector<ResponsivePopover>(\"[ui5-responsive-popover]\")!;\n\t}\n\n\t_toggleRespPopover() {\n\t\tthis.responsivePopover = this._respPopover();\n\n\t\tif (this._isPickerOpen) {\n\t\t\tthis._closeRespPopover();\n\t\t} else {\n\t\t\tthis._openRespPopover();\n\t\t}\n\t}\n\n\t_closeRespPopover() {\n\t\tif (this.responsivePopover) {\n\t\t\tthis.responsivePopover.open = false;\n\t\t}\n\t}\n\n\t_openRespPopover() {\n\t\tthis.responsivePopover = this._respPopover();\n\t\tthis.responsivePopover.opener = this._dropdownArrowLink;\n\t\tthis.responsivePopover.open = true;\n\t}\n\n\t_isItemVisible(item: BreadcrumbsItem) {\n\t\treturn !item.hidden && this._hasVisibleContent(item);\n\t}\n\n\t_hasVisibleContent(item: BreadcrumbsItem) {\n\t\t// the check is not complete but may be extended in the future if needed to cover\n\t\t// cases besides the standard (UX-recommended) ones\n\t\treturn item.innerText || Array.from(item.children).some(child => !(child as HTMLElement).hidden);\n\t}\n\n\t_preprocessItems() {\n\t\tthis.items.forEach(item => {\n\t\t\titem._getRealDomRef = () => this.getDomRef()!.querySelector(`[data-ui5-stable*=${item.stableDomRef}]`)!;\n\t\t});\n\t}\n\n\t_getItemPositionText(position: number, size: number) {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMB_ITEM_POS, position, size);\n\t}\n\n\t_getItemAccessibleName(item: BreadcrumbsItem, position: number, size: number) {\n\t\tconst positionText = this._getItemPositionText(position, size);\n\t\tconst itemsText = item.textContent || \"\";\n\n\t\t// innerText is needed as it is no longer read out when label is set\n\t\tlet text = \"\";\n\t\tif (item.accessibleName) {\n\t\t\ttext = `${itemsText.trim()} ${item.accessibleName} ${positionText}`;\n\t\t} else {\n\t\t\ttext = `${itemsText.trim()} ${positionText}`;\n\t\t}\n\n\t\treturn text;\n\t}\n\n\tgetCurrentLocationLabelWrapper() {\n\t\treturn this.shadowRoot!.querySelector<HTMLElement>(\".ui5-breadcrumbs-current-location > span\");\n\t}\n\n\tget _visibleItems() {\n\t\treturn this._getItems()\n\t\t\t.slice(this._overflowSize)\n\t\t\t.filter(i => this._isItemVisible(i));\n\t}\n\n\tget _endsWithCurrentLinkItem() {\n\t\tconst items = this._getItems();\n\t\treturn (items.length && items[items.length - 1].href);\n\t}\n\n\tget _endsWithCurrentLocation() {\n\t\treturn this.design === BreadcrumbsDesign.Standard;\n\t}\n\n\tget _currentLocationText() {\n\t\tconst items = this._getItems();\n\t\tif (this._endsWithCurrentLocation && items.length) {\n\t\t\tconst item = items[items.length - 1];\n\t\t\tif (this._isItemVisible(item)) {\n\t\t\t\treturn item.innerText;\n\t\t\t}\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tget _currentLocationLabel() {\n\t\treturn this.shadowRoot!.querySelector<Label>(\".ui5-breadcrumbs-current-location [ui5-label]\");\n\t}\n\n\tget _isDropdownArrowFocused() {\n\t\treturn this._dropdownArrowLink.forcedTabIndex === \"0\";\n\t}\n\n\tget _isCurrentLocationLabelFocused() {\n\t\tconst label = this.getCurrentLocationLabelWrapper();\n\t\treturn label && label.tabIndex === 0;\n\t}\n\n\t/**\n\t * Returns the maximum allowed count of items in the overflow\n\t * with respect to the UX requirement to never overflow the last visible item\n\t */\n\tget _maxAllowedOverflowSize() {\n\t\tconst items = this._getItems().filter(item => this._isItemVisible(item));\n\t\t// all items except tha last visible one are allowed to overflow by UX requirement\n\t\treturn items.length - 1;\n\t}\n\n\t/**\n\t * Getter for the interactive element that opens the overflow\n\t * @private\n\t */\n\tget _dropdownArrowLink() {\n\t\treturn this.shadowRoot!.querySelector<Link>(\".ui5-breadcrumbs-dropdown-arrow-link-wrapper [ui5-link]\")!;\n\t}\n\n\t/**\n\t * Getter for the list of abstract breadcrumb items to be rendered as list-items inside the overflow\n\t */\n\tget _overflowItemsData() {\n\t\treturn this._getItems()\n\t\t\t.slice(0, this._overflowSize)\n\t\t\t.filter(item => this._isItemVisible(item))\n\t\t\t.reverse();\n\t}\n\n\t/**\n\t * Returns all items that should be displayed in the popover on mobile devices\n\t * @private\n\t */\n\tget _mobilePopoverItems() {\n\t\treturn this._getItems()\n\t\t\t.filter(item => this._isItemVisible(item))\n\t\t\t.reverse();\n\t}\n\n\t/**\n\t * Getter for the list of abstract breadcrumb items to be rendered as links outside the overflow\n\t */\n\tget _linksData() {\n\t\tconst items = this._visibleItems;\n\t\tconst itemsCount = items.length; // get size before removing of current location\n\n\t\tif (this._endsWithCurrentLocation && !this._endsWithCurrentLinkItem) {\n\t\t\titems.pop();\n\t\t}\n\n\t\treturn items\n\t\t\t.map((item, index) => {\n\t\t\t\titem._accessibleNameText = this._getItemAccessibleName(item, index + 1, itemsCount);\n\t\t\t\titem._isCurrentPageItem = index === (itemsCount - 1) && this._endsWithCurrentLocation;\n\t\t\t\titem._needsSeparator = !item._isCurrentPageItem;\n\t\t\t\treturn item;\n\t\t\t});\n\t}\n\n\t/**\n\t * Getter for accessible name of the current location. Includes the position of the current location and the size of the breadcrumbs\n\t */\n\tget _currentLocationAccName() {\n\t\tconst items = this._visibleItems;\n\n\t\tconst positionText = this._getItemPositionText(items.length, items.length);\n\t\tconst lastItem = items[items.length - 1];\n\n\t\tif (!lastItem) {\n\t\t\treturn positionText;\n\t\t}\n\n\t\tconst lastItemText = lastItem.textContent || \"\";\n\n\t\tif (lastItem.accessibleName) {\n\t\t\treturn `${lastItemText.trim()} ${lastItem.accessibleName} ${positionText}`;\n\t\t}\n\n\t\treturn `${lastItemText.trim()} ${positionText}`;\n\t}\n\n\t/**\n\t * Getter for the list of links corresponding to the abstract breadcrumb items\n\t */\n\tget _links() {\n\t\treturn Array.from(this.shadowRoot!.querySelectorAll<Link>(\".ui5-breadcrumbs-link-wrapper [ui5-link]\"));\n\t}\n\n\tget _isOverflowEmpty() {\n\t\treturn this._overflowItemsData.length === 0;\n\t}\n\n\tget linkAccessibilityAttributes(): Pick<AccessibilityAttributes, \"hasPopup\"> {\n\t\treturn {\n\t\t\thasPopup: this._isOverflowEmpty ? undefined : \"listbox\",\n\t\t};\n\t}\n\n\tget _isPickerOpen() {\n\t\treturn !!this.responsivePopover && this.responsivePopover.open;\n\t}\n\n\tget _accessibleNameText() {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMBS_ARIA_LABEL);\n\t}\n\n\tget _dropdownArrowAccessibleNameText() {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMBS_OVERFLOW_ARIA_LABEL);\n\t}\n\n\tget _cancelButtonText() {\n\t\treturn Breadcrumbs.i18nBundle.getText(BREADCRUMBS_CANCEL_BUTTON);\n\t}\n\tget hasOverflow() {\n\t\treturn true;\n\t}\n}\n\nBreadcrumbs.define();\n\nexport default Breadcrumbs;\nexport type {\n\tBreadcrumbsItemClickEventDetail,\n};\n"]}
@@ -2,6 +2,12 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
3
3
  import type { AccessibilityAttributes } from "@ui5/webcomponents-base/dist/types.js";
4
4
  import LinkDesign from "./types/LinkDesign.js";
5
+ type BreadcrumbsItemClickEventDetail = {
6
+ altKey: boolean;
7
+ ctrlKey: boolean;
8
+ metaKey: boolean;
9
+ shiftKey: boolean;
10
+ };
5
11
  /**
6
12
  * @class
7
13
  *
@@ -15,6 +21,9 @@ import LinkDesign from "./types/LinkDesign.js";
15
21
  * @abstract
16
22
  */
17
23
  declare class BreadcrumbsItem extends UI5Element {
24
+ eventDetails: {
25
+ "click": BreadcrumbsItemClickEventDetail;
26
+ };
18
27
  /**
19
28
  * Defines the link href.
20
29
  *
@@ -60,3 +69,4 @@ declare class BreadcrumbsItem extends UI5Element {
60
69
  get accessibilityAttributes(): Pick<AccessibilityAttributes, "current">;
61
70
  }
62
71
  export default BreadcrumbsItem;
72
+ export type { BreadcrumbsItemClickEventDetail };
@@ -8,6 +8,7 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
8
8
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
9
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
10
10
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
11
+ import eventStrict from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
11
12
  import LinkDesign from "./types/LinkDesign.js";
12
13
  /**
13
14
  * @class
@@ -48,6 +49,23 @@ __decorate([
48
49
  ], BreadcrumbsItem.prototype, "text", void 0);
49
50
  BreadcrumbsItem = __decorate([
50
51
  customElement("ui5-breadcrumbs-item")
52
+ /**
53
+ * Fired when the component is activated either with a mouse/tap or by using the Enter or Space key.
54
+ *
55
+ * **Note:** The event is also fired for the current page location item (the last item), which is not a link by design.
56
+ *
57
+ * @param {boolean} altKey Returns whether the "ALT" key was pressed when the event was triggered.
58
+ * @param {boolean} ctrlKey Returns whether the "CTRL" key was pressed when the event was triggered.
59
+ * @param {boolean} metaKey Returns whether the "META" key was pressed when the event was triggered.
60
+ * @param {boolean} shiftKey Returns whether the "SHIFT" key was pressed when the event was triggered.
61
+ * @public
62
+ * @since 2.22.0
63
+ */
64
+ ,
65
+ eventStrict("click", {
66
+ bubbles: true,
67
+ cancelable: true,
68
+ })
51
69
  ], BreadcrumbsItem);
52
70
  BreadcrumbsItem.define();
53
71
  export default BreadcrumbsItem;
@@ -1 +1 @@
1
- {"version":3,"file":"BreadcrumbsItem.js","sourceRoot":"","sources":["../src/BreadcrumbsItem.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AAEpE,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,IAAI,MAAM,wDAAwD,CAAC;AAE1E,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAE/C;;;;;;;;;;;GAWG;AAEH,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAkDvC,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,iBAAiB,CAAC;IAC5E,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IAC7E,CAAC;IAED,IAAI,uBAAuB;QAC1B,OAAO;YACN,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;SACjD,CAAC;IACH,CAAC;CACD,CAAA;AAtDA;IADC,QAAQ,EAAE;6CACG;AAkBd;IADC,QAAQ,EAAE;+CACK;AAQhB;IADC,QAAQ,EAAE;uDACY;AASvB;IADC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;6CACb;AA5CpB,eAAe;IADpB,aAAa,CAAC,sBAAsB,CAAC;GAChC,eAAe,CA+DpB;AAED,eAAe,CAAC,MAAM,EAAE,CAAC;AAEzB,eAAe,eAAe,CAAC","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { DefaultSlot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport type { AccessibilityAttributes } from \"@ui5/webcomponents-base/dist/types.js\";\nimport LinkDesign from \"./types/LinkDesign.js\";\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-breadcrumbs-item` component defines the content of an item in `ui5-breadcrumbs`.\n * @constructor\n * @extends UI5Element\n * @public\n * @since 1.0.0-rc.15\n * @abstract\n */\n@customElement(\"ui5-breadcrumbs-item\")\nclass BreadcrumbsItem extends UI5Element {\n\t/**\n\t * Defines the link href.\n\t *\n\t * **Note:** Standard hyperlink behavior is supported.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\thref?: string;\n\n\t/**\n\t * Defines the link target.\n\t *\n\t * Available options are:\n\t *\n\t * - `_self`\n\t * - `_top`\n\t * - `_blank`\n\t * - `_parent`\n\t * - `_search`\n\t *\n\t * **Note:** This property must only be used when the `href` property is set.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\ttarget?: string;\n\n\t/**\n\t * Defines the accessible ARIA name of the item.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\taccessibleName?: string\n\n\t/**\n\t * Defines the text of the component.\n\t *\n\t * **Note:** Although this slot accepts HTML Elements, it is strongly recommended that you only use text in order to preserve the intended design.\n\t * @public\n\t */\n\t@slot({ type: Node, \"default\": true })\n\ttext!: DefaultSlot<Node>;\n\n\t_accessibleNameText?: string;\n\t_isCurrentPageItem?: boolean;\n\t_needsSeparator?: boolean;\n\n\tget stableDomRef() {\n\t\treturn this.getAttribute(\"stable-dom-ref\") || `${this._id}-stable-dom-ref`;\n\t}\n\n\tget _linkDesign() {\n\t\treturn this._isCurrentPageItem ? LinkDesign.Emphasized : LinkDesign.Default;\n\t}\n\n\tget accessibilityAttributes(): Pick<AccessibilityAttributes, \"current\"> {\n\t\treturn {\n\t\t\tcurrent: this._isCurrentPageItem ? \"page\" : false,\n\t\t};\n\t}\n}\n\nBreadcrumbsItem.define();\n\nexport default BreadcrumbsItem;\n"]}
1
+ {"version":3,"file":"BreadcrumbsItem.js","sourceRoot":"","sources":["../src/BreadcrumbsItem.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AAEpE,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,IAAI,MAAM,wDAAwD,CAAC;AAC1E,OAAO,WAAW,MAAM,yDAAyD,CAAC;AAElF,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAS/C;;;;;;;;;;;GAWG;AAkBH,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAqDvC,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,iBAAiB,CAAC;IAC5E,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IAC7E,CAAC;IAED,IAAI,uBAAuB;QAC1B,OAAO;YACN,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;SACjD,CAAC;IACH,CAAC;CACD,CAAA;AAtDA;IADC,QAAQ,EAAE;6CACG;AAkBd;IADC,QAAQ,EAAE;+CACK;AAQhB;IADC,QAAQ,EAAE;uDACY;AASvB;IADC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;6CACb;AA/CpB,eAAe;IAjBpB,aAAa,CAAC,sBAAsB,CAAC;IACtC;;;;;;;;;;;OAWG;;IACF,WAAW,CAAC,OAAO,EAAE;QACrB,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,IAAI;KAChB,CAAC;GACI,eAAe,CAkEpB;AAED,eAAe,CAAC,MAAM,EAAE,CAAC;AAEzB,eAAe,eAAe,CAAC","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { DefaultSlot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport eventStrict from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport type { AccessibilityAttributes } from \"@ui5/webcomponents-base/dist/types.js\";\nimport LinkDesign from \"./types/LinkDesign.js\";\n\ntype BreadcrumbsItemClickEventDetail = {\n\taltKey: boolean;\n\tctrlKey: boolean;\n\tmetaKey: boolean;\n\tshiftKey: boolean;\n};\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-breadcrumbs-item` component defines the content of an item in `ui5-breadcrumbs`.\n * @constructor\n * @extends UI5Element\n * @public\n * @since 1.0.0-rc.15\n * @abstract\n */\n@customElement(\"ui5-breadcrumbs-item\")\n/**\n * Fired when the component is activated either with a mouse/tap or by using the Enter or Space key.\n *\n * **Note:** The event is also fired for the current page location item (the last item), which is not a link by design.\n *\n * @param {boolean} altKey Returns whether the \"ALT\" key was pressed when the event was triggered.\n * @param {boolean} ctrlKey Returns whether the \"CTRL\" key was pressed when the event was triggered.\n * @param {boolean} metaKey Returns whether the \"META\" key was pressed when the event was triggered.\n * @param {boolean} shiftKey Returns whether the \"SHIFT\" key was pressed when the event was triggered.\n * @public\n * @since 2.22.0\n */\n@eventStrict(\"click\", {\n\tbubbles: true,\n\tcancelable: true,\n})\nclass BreadcrumbsItem extends UI5Element {\n\teventDetails!: {\n\t\t\"click\": BreadcrumbsItemClickEventDetail,\n\t}\n\t/**\n\t * Defines the link href.\n\t *\n\t * **Note:** Standard hyperlink behavior is supported.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\thref?: string;\n\n\t/**\n\t * Defines the link target.\n\t *\n\t * Available options are:\n\t *\n\t * - `_self`\n\t * - `_top`\n\t * - `_blank`\n\t * - `_parent`\n\t * - `_search`\n\t *\n\t * **Note:** This property must only be used when the `href` property is set.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\ttarget?: string;\n\n\t/**\n\t * Defines the accessible ARIA name of the item.\n\t * @default undefined\n\t * @public\n\t */\n\t@property()\n\taccessibleName?: string\n\n\t/**\n\t * Defines the text of the component.\n\t *\n\t * **Note:** Although this slot accepts HTML Elements, it is strongly recommended that you only use text in order to preserve the intended design.\n\t * @public\n\t */\n\t@slot({ type: Node, \"default\": true })\n\ttext!: DefaultSlot<Node>;\n\n\t_accessibleNameText?: string;\n\t_isCurrentPageItem?: boolean;\n\t_needsSeparator?: boolean;\n\n\tget stableDomRef() {\n\t\treturn this.getAttribute(\"stable-dom-ref\") || `${this._id}-stable-dom-ref`;\n\t}\n\n\tget _linkDesign() {\n\t\treturn this._isCurrentPageItem ? LinkDesign.Emphasized : LinkDesign.Default;\n\t}\n\n\tget accessibilityAttributes(): Pick<AccessibilityAttributes, \"current\"> {\n\t\treturn {\n\t\t\tcurrent: this._isCurrentPageItem ? \"page\" : false,\n\t\t};\n\t}\n}\n\nBreadcrumbsItem.define();\n\nexport default BreadcrumbsItem;\nexport type { BreadcrumbsItemClickEventDetail };\n"]}
@@ -16,6 +16,7 @@ import type CalendarLegend from "./CalendarLegend.js";
16
16
  import type { CalendarLegendItemSelectionChangeEventDetail } from "./CalendarLegend.js";
17
17
  import type SpecialCalendarDate from "./SpecialCalendarDate.js";
18
18
  import type CalendarLegendItemType from "./types/CalendarLegendItemType.js";
19
+ import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
19
20
  import "@ui5/webcomponents-localization/dist/features/calendar/Gregorian.js";
20
21
  import type { YearRangePickerChangeEventDetail } from "./YearRangePicker.js";
21
22
  interface ICalendarPicker extends HTMLElement {
@@ -195,6 +196,13 @@ declare class Calendar extends CalendarPart {
195
196
  * @public
196
197
  */
197
198
  hideWeekNumbers: boolean;
199
+ /**
200
+ * Defines whether the component displays two months side by side in the picker popup.
201
+ * @default false
202
+ * @private
203
+ * @since 2.22.0
204
+ */
205
+ _showTwoMonths: boolean;
198
206
  /**
199
207
  * Which picker is currently visible to the user: day/month/year/yearRange
200
208
  * @private
@@ -242,8 +250,34 @@ declare class Calendar extends CalendarPart {
242
250
  * @private
243
251
  */
244
252
  _selectedItemType: `${CalendarLegendItemType}`;
253
+ _phoneMode: boolean;
254
+ _handleResizeBound: ResizeObserverCallback;
245
255
  static i18nBundle: I18nBundle;
246
256
  constructor();
257
+ onEnterDOM(): void;
258
+ get _phoneView(): boolean;
259
+ get _portraitView(): boolean;
260
+ /**
261
+ * Handles document resize to switch between `phoneMode` and `portraitMode`.
262
+ * - `_phoneMode`: When resolution is under PHONE_MODE_BREAKPOINT (regardless of device type)
263
+ */
264
+ _handleResize(): void;
265
+ onExitDOM(): void;
266
+ /**
267
+ * Returns the timestamp for a specific month index when displaying multiple months
268
+ * @private
269
+ */
270
+ _getMonthTimestamp(monthIndex: number): number;
271
+ /**
272
+ * Generates header button text (month and year) for a specific month timestamp
273
+ * @private
274
+ */
275
+ _getHeaderTextForMonth(monthTimestamp: number): {
276
+ monthText: string;
277
+ yearText: string;
278
+ secondMonthText?: string;
279
+ secondYearText?: string;
280
+ };
247
281
  /**
248
282
  * @private
249
283
  */
@@ -299,9 +333,11 @@ declare class Calendar extends CalendarPart {
299
333
  _setSecondaryCalendarTypeButtonText(): void;
300
334
  get secondaryCalendarTypeButtonText(): {
301
335
  yearButtonText: string;
302
- monthButtonText: any;
303
- monthButtonInfo: any;
336
+ monthButtonText: string;
337
+ monthButtonInfo: string;
304
338
  } | undefined;
339
+ get _isCompactMode(): boolean;
340
+ get _monthsToShow(): 1 | 2;
305
341
  /**
306
342
  * The month button is hidden when the month picker or year picker is shown
307
343
  * @private
@@ -321,6 +357,9 @@ declare class Calendar extends CalendarPart {
321
357
  get _isMonthPickerHidden(): boolean;
322
358
  get _isYearPickerHidden(): boolean;
323
359
  get _isYearRangePickerHidden(): boolean;
360
+ get _isDefaultHeaderModeInMultipleMonths(): boolean;
361
+ get _shouldShowOnePickerHeaderButtonInMultipleMonths(): boolean;
362
+ get _inert(): boolean;
324
363
  get _currentYearRange(): CalendarYearRangeT;
325
364
  _fireEventAndUpdateSelectedDates(selectedDates: Array<number>): void;
326
365
  onSelectedDatesChange(e: CustomEvent<DayPickerChangeEventDetail>): void;
package/dist/Calendar.js CHANGED
@@ -28,6 +28,8 @@ import "./SpecialCalendarDate.js";
28
28
  import CalendarPart from "./CalendarPart.js";
29
29
  import CalendarSelectionMode from "./types/CalendarSelectionMode.js";
30
30
  import CalendarPickersMode from "./types/CalendarPickersMode.js";
31
+ import { isPhone } from "@ui5/webcomponents-base/dist/Device.js";
32
+ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
31
33
  // Default calendar for bundling
32
34
  import "@ui5/webcomponents-localization/dist/features/calendar/Gregorian.js";
33
35
  // Template
@@ -36,6 +38,9 @@ import CalendarTemplate from "./CalendarTemplate.js";
36
38
  import calendarCSS from "./generated/themes/Calendar.css.js";
37
39
  import CalendarHeaderCss from "./generated/themes/CalendarHeader.css.js";
38
40
  import { CALENDAR_HEADER_MONTH_BUTTON, CALENDAR_HEADER_MONTH_BUTTON_SHORTCUT, CALENDAR_HEADER_YEAR_BUTTON, CALENDAR_HEADER_YEAR_BUTTON_SHORTCUT, CALENDAR_HEADER_YEAR_RANGE_BUTTON, CALENDAR_HEADER_YEAR_RANGE_BUTTON_SHORTCUT, CALENDAR_HEADER_MONTH_NEXT_BUTTON_TITLE, CALENDAR_HEADER_MONTH_NEXT_BUTTON_SHORTCUT, CALENDAR_HEADER_MONTH_PREVIOUS_BUTTON_TITLE, CALENDAR_HEADER_MONTH_PREVIOUS_BUTTON_SHORTCUT, CALENDAR_HEADER_YEAR_NEXT_BUTTON_TITLE, CALENDAR_HEADER_YEAR_PREVIOUS_BUTTON_TITLE, CALENDAR_HEADER_YEAR_RANGE_NEXT_BUTTON_TITLE, CALENDAR_HEADER_YEAR_RANGE_PREVIOUS_BUTTON_TITLE, } from "./generated/i18n/i18n-defaults.js";
41
+ import getEffectiveContentDensity from "@ui5/webcomponents-base/dist/util/getEffectiveContentDensity.js";
42
+ import modifyDateBy from "@ui5/webcomponents-localization/dist/dates/modifyDateBy.js";
43
+ const PHONE_MODE_BREAKPOINT = 640; // px
39
44
  /**
40
45
  * @class
41
46
  *
@@ -173,6 +178,13 @@ let Calendar = Calendar_1 = class Calendar extends CalendarPart {
173
178
  * @public
174
179
  */
175
180
  this.hideWeekNumbers = false;
181
+ /**
182
+ * Defines whether the component displays two months side by side in the picker popup.
183
+ * @default false
184
+ * @private
185
+ * @since 2.22.0
186
+ */
187
+ this._showTwoMonths = false;
176
188
  /**
177
189
  * Which picker is currently visible to the user: day/month/year/yearRange
178
190
  * @private
@@ -187,7 +199,75 @@ let Calendar = Calendar_1 = class Calendar extends CalendarPart {
187
199
  * @private
188
200
  */
189
201
  this._selectedItemType = "None";
202
+ this._phoneMode = false;
190
203
  this._valueIsProcessed = false;
204
+ this._handleResizeBound = this._handleResize.bind(this);
205
+ }
206
+ onEnterDOM() {
207
+ ResizeHandler.register(document.body, this._handleResizeBound);
208
+ this._handleResize();
209
+ }
210
+ get _phoneView() {
211
+ return isPhone() || this._phoneMode;
212
+ }
213
+ get _portraitView() {
214
+ return this._phoneMode;
215
+ }
216
+ /**
217
+ * Handles document resize to switch between `phoneMode` and `portraitMode`.
218
+ * - `_phoneMode`: When resolution is under PHONE_MODE_BREAKPOINT (regardless of device type)
219
+ */
220
+ _handleResize() {
221
+ if (!this._showTwoMonths) {
222
+ return;
223
+ }
224
+ const documentWidth = document.body.offsetWidth;
225
+ const underBreakpoint = documentWidth <= PHONE_MODE_BREAKPOINT;
226
+ // Phone mode: only when it's an actual phone device
227
+ const phoneModeChange = (underBreakpoint && !this._phoneMode) || (!underBreakpoint && this._phoneMode);
228
+ if (phoneModeChange) {
229
+ this._phoneMode = underBreakpoint;
230
+ }
231
+ }
232
+ onExitDOM() {
233
+ ResizeHandler.deregister(document.body, this._handleResizeBound);
234
+ }
235
+ /**
236
+ * Returns the timestamp for a specific month index when displaying multiple months
237
+ * @private
238
+ */
239
+ _getMonthTimestamp(monthIndex) {
240
+ if (monthIndex === 0) {
241
+ return this._timestamp;
242
+ }
243
+ const calendarDate = CalendarDateComponent.fromTimestamp(this._timestamp * 1000, this._primaryCalendarType);
244
+ const modifiedDate = modifyDateBy(calendarDate, monthIndex, "month", false);
245
+ return modifiedDate.valueOf() / 1000;
246
+ }
247
+ /**
248
+ * Generates header button text (month and year) for a specific month timestamp
249
+ * @private
250
+ */
251
+ _getHeaderTextForMonth(monthTimestamp) {
252
+ const calendarDate = CalendarDateComponent.fromTimestamp(monthTimestamp * 1000, this._primaryCalendarType);
253
+ const localeData = getCachedLocaleDataInstance(getLocale());
254
+ const yearFormat = DateFormat.getDateInstance({ format: "y", calendarType: this._primaryCalendarType });
255
+ const monthText = localeData.getMonthsStandAlone("wide", this._primaryCalendarType)[calendarDate.getMonth()];
256
+ const localDate = calendarDate.toLocalJSDate();
257
+ const yearText = String(yearFormat.format(localDate, true));
258
+ const result = {
259
+ monthText,
260
+ yearText,
261
+ };
262
+ if (this.hasSecondaryCalendarType) {
263
+ const secondaryDate = transformDateToSecondaryType(this._primaryCalendarType, this._secondaryCalendarType, monthTimestamp, true);
264
+ const secondaryCalendarDate = secondaryDate.firstDate || secondaryDate.lastDate;
265
+ const secondaryLocaleData = getCachedLocaleDataInstance(getLocale());
266
+ result.secondMonthText = secondaryLocaleData.getMonthsStandAlone("wide", this._secondaryCalendarType)[secondaryCalendarDate.getMonth()];
267
+ const secondaryYearFormat = DateFormat.getDateInstance({ format: "y", calendarType: this._secondaryCalendarType });
268
+ result.secondYearText = String(secondaryYearFormat.format(secondaryCalendarDate.toLocalJSDate(), true));
269
+ }
270
+ return result;
191
271
  }
192
272
  /**
193
273
  * @private
@@ -432,9 +512,9 @@ let Calendar = Calendar_1 = class Calendar extends CalendarPart {
432
512
  this._headerYearButtonTextSecType = String(yearFormatSecType.format(this._localDate, true));
433
513
  const currentYearRange = this._currentYearRange;
434
514
  const { rangeStart, rangeEnd } = this._createYearRangeDates(currentYearRange);
435
- const rangeStartSecType = transformDateToSecondaryType(this.primaryCalendarType, this._secondaryCalendarType, rangeStart.valueOf() / 1000, true)
515
+ const rangeStartSecType = transformDateToSecondaryType(this._primaryCalendarType, this._secondaryCalendarType, rangeStart.valueOf() / 1000, true)
436
516
  .firstDate;
437
- const rangeEndSecType = transformDateToSecondaryType(this.primaryCalendarType, this._secondaryCalendarType, rangeEnd.valueOf() / 1000, true)
517
+ const rangeEndSecType = transformDateToSecondaryType(this._primaryCalendarType, this._secondaryCalendarType, rangeEnd.valueOf() / 1000, true)
438
518
  .lastDate;
439
519
  this._headerYearRangeButtonTextSecType = `${yearFormatSecType.format(rangeStartSecType.toLocalJSDate())} - ${yearFormatSecType.format(rangeEndSecType.toLocalJSDate())}`;
440
520
  }
@@ -453,12 +533,19 @@ let Calendar = Calendar_1 = class Calendar extends CalendarPart {
453
533
  monthButtonInfo: secondMonthInfo.textInfo,
454
534
  };
455
535
  }
536
+ get _isCompactMode() {
537
+ return getEffectiveContentDensity(this) === "compact";
538
+ }
539
+ get _monthsToShow() {
540
+ const monthsToShow = this._showTwoMonths && !isPhone() ? 2 : 1;
541
+ return monthsToShow;
542
+ }
456
543
  /**
457
544
  * The month button is hidden when the month picker or year picker is shown
458
545
  * @private
459
546
  */
460
547
  get _isHeaderMonthButtonHidden() {
461
- return this._currentPicker !== "day";
548
+ return this._showTwoMonths ? this._currentPicker === "yearrange" || this._currentPicker === "year" : this._currentPicker !== "day";
462
549
  }
463
550
  /**
464
551
  * The year range picker button is shown only in the year picker
@@ -475,6 +562,10 @@ let Calendar = Calendar_1 = class Calendar extends CalendarPart {
475
562
  return !(this._currentPicker === "day" || this._currentPicker === "month");
476
563
  }
477
564
  get _isDayPickerHidden() {
565
+ // In multi-month mode (monthsToShow > 1), keep day pickers visible even when other pickers are shown
566
+ if (this._showTwoMonths) {
567
+ return false;
568
+ }
478
569
  return this._currentPicker !== "day";
479
570
  }
480
571
  get _isMonthPickerHidden() {
@@ -486,6 +577,15 @@ let Calendar = Calendar_1 = class Calendar extends CalendarPart {
486
577
  get _isYearRangePickerHidden() {
487
578
  return this._currentPicker !== "yearrange";
488
579
  }
580
+ get _isDefaultHeaderModeInMultipleMonths() {
581
+ return !this._isDayPickerHidden && this._isYearPickerHidden;
582
+ }
583
+ get _shouldShowOnePickerHeaderButtonInMultipleMonths() {
584
+ return !this._isDayPickerHidden && !this._isYearPickerHidden;
585
+ }
586
+ get _inert() {
587
+ return this._showTwoMonths && (!this._isMonthPickerHidden || !this._isYearPickerHidden || !this._isYearRangePickerHidden);
588
+ }
489
589
  get _currentYearRange() {
490
590
  const rangeSize = this.hasSecondaryCalendarType ? 8 : 20;
491
591
  const yearsOffset = this.hasSecondaryCalendarType ? 2 : 9;
@@ -747,6 +847,9 @@ __decorate([
747
847
  __decorate([
748
848
  property({ type: Boolean })
749
849
  ], Calendar.prototype, "hideWeekNumbers", void 0);
850
+ __decorate([
851
+ property({ type: Boolean })
852
+ ], Calendar.prototype, "_showTwoMonths", void 0);
750
853
  __decorate([
751
854
  property()
752
855
  ], Calendar.prototype, "_currentPicker", void 0);
@@ -789,6 +892,9 @@ __decorate([
789
892
  __decorate([
790
893
  property()
791
894
  ], Calendar.prototype, "_selectedItemType", void 0);
895
+ __decorate([
896
+ property({ type: Boolean, noAttribute: true })
897
+ ], Calendar.prototype, "_phoneMode", void 0);
792
898
  __decorate([
793
899
  i18n("@ui5/webcomponents")
794
900
  ], Calendar, "i18nBundle", void 0);