@fundamental-ngx/core 0.62.0-rc.83 → 0.62.0-rc.84
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.
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +124 -13
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-link.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
- package/package.json +3 -3
- package/types/fundamental-ngx-core-breadcrumb.d.ts +34 -2
- package/types/fundamental-ngx-core-link.d.ts +4 -4
|
@@ -3,7 +3,8 @@ import { DomPortal, PortalModule } from '@angular/cdk/portal';
|
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, ContentChild, ChangeDetectionStrategy, ViewEncapsulation, Component, EventEmitter, input, signal, inject, ElementRef, computed, DestroyRef, effect, ViewChild, ContentChildren, Output, Input, NgModule } from '@angular/core';
|
|
5
5
|
import { FD_LINK_COMPONENT, LinkComponent } from '@fundamental-ngx/core/link';
|
|
6
|
-
import {
|
|
6
|
+
import { LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';
|
|
7
|
+
import { RtlService, KeyUtil } from '@fundamental-ngx/cdk/utils';
|
|
7
8
|
import { IconComponent } from '@fundamental-ngx/core/icon';
|
|
8
9
|
import { MenuComponent, MenuItemComponent, MenuInteractiveComponent, MenuAddonDirective, MenuTitleDirective, MenuTriggerDirective, GlyphMenuAddonDirective } from '@fundamental-ngx/core/menu';
|
|
9
10
|
import { OverflowLayoutComponent, OverflowItemRefDirective, OverflowLayoutItemDirective, OverflowExpandDirective } from '@fundamental-ngx/core/overflow-layout';
|
|
@@ -89,8 +90,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
|
|
|
89
90
|
}
|
|
90
91
|
],
|
|
91
92
|
encapsulation: ViewEncapsulation.None,
|
|
92
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
93
|
-
standalone: true
|
|
93
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
94
94
|
}]
|
|
95
95
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { breadcrumbLink: [{
|
|
96
96
|
type: ContentChild,
|
|
@@ -176,15 +176,18 @@ class BreadcrumbComponent {
|
|
|
176
176
|
/** @hidden */
|
|
177
177
|
ngAfterViewInit() {
|
|
178
178
|
this._setItems();
|
|
179
|
-
this._contentItems.changes.subscribe(() =>
|
|
179
|
+
this._contentItems.changes.subscribe(() => {
|
|
180
|
+
this._setItems();
|
|
181
|
+
this._updateAriaLabels();
|
|
182
|
+
});
|
|
180
183
|
// Set menu roles for breadcrumb context
|
|
181
184
|
this._menuComponent._navContainerRole = 'dialog';
|
|
182
185
|
this._menuComponent._menuListContainerRole = 'menu';
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
/**
|
|
187
|
+
* Set initial aria-labels
|
|
188
|
+
* Roving tabindex is applied in _onVisibleItemsCountChange once overflow layout resolves
|
|
189
|
+
*/
|
|
190
|
+
this._updateAriaLabels();
|
|
188
191
|
}
|
|
189
192
|
/** @hidden */
|
|
190
193
|
_onHiddenChange(isHidden, breadcrumb) {
|
|
@@ -198,30 +201,138 @@ class BreadcrumbComponent {
|
|
|
198
201
|
/** @hidden */
|
|
199
202
|
_onVisibleItemsCountChange(visibleItemsCount) {
|
|
200
203
|
this.visibleItemsCount.emit(visibleItemsCount);
|
|
204
|
+
/**
|
|
205
|
+
* Defer tabindex update: the overflow layout emits this event before detectChanges(),
|
|
206
|
+
* so soft-hidden CSS classes haven't been applied yet.
|
|
207
|
+
* A microtask ensures the DOM is up to date.
|
|
208
|
+
*/
|
|
209
|
+
Promise.resolve().then(() => this._updateTabIndexes());
|
|
201
210
|
}
|
|
202
211
|
/** @hidden */
|
|
203
212
|
_onHiddenItemsCountChange(hiddenItemsCount) {
|
|
204
213
|
this.hiddenItemsCount.emit(hiddenItemsCount);
|
|
205
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* @hidden
|
|
217
|
+
* Opens the overflow menu on keyboard activation.
|
|
218
|
+
* Bound to keyup (not keydown) so that by the time the menu opens and captures focus,
|
|
219
|
+
* the key has been fully released and no stale key events reach the first menu item.
|
|
220
|
+
*/
|
|
221
|
+
openOverflowMenu(event) {
|
|
222
|
+
event.preventDefault();
|
|
223
|
+
if (!this._menuComponent.isOpen()) {
|
|
224
|
+
this._menuComponent.open();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/** @hidden */
|
|
228
|
+
onKeydown(event) {
|
|
229
|
+
if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW])) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const links = this._getVisibleLinks();
|
|
233
|
+
if (links.length === 0) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const activeEl = document.activeElement;
|
|
237
|
+
const currentIndex = links.indexOf(activeEl);
|
|
238
|
+
if (currentIndex === -1) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const isRtl = this._rtlService?.rtl();
|
|
242
|
+
const isNext = KeyUtil.isKeyCode(event, DOWN_ARROW) || KeyUtil.isKeyCode(event, isRtl ? LEFT_ARROW : RIGHT_ARROW);
|
|
243
|
+
const nextIndex = isNext ? Math.min(currentIndex + 1, links.length - 1) : Math.max(currentIndex - 1, 0);
|
|
244
|
+
if (nextIndex !== currentIndex) {
|
|
245
|
+
// Update roving tabindex: old item becomes unfocusable, new item becomes the tab stop
|
|
246
|
+
links[currentIndex].setAttribute('tabindex', '-1');
|
|
247
|
+
links[nextIndex].setAttribute('tabindex', '0');
|
|
248
|
+
links[nextIndex].focus();
|
|
249
|
+
event.preventDefault();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* @hidden
|
|
254
|
+
* Returns all focusable breadcrumb elements in DOM order: visible link items,
|
|
255
|
+
* the overflow "..." collapse button, and the aria-current page span.
|
|
256
|
+
* Excludes items hidden by the overflow layout (soft-hidden).
|
|
257
|
+
*
|
|
258
|
+
* Uses querySelectorAll rather than Angular queries because:
|
|
259
|
+
* - The overflow "..." button is rendered in the component template, not projected
|
|
260
|
+
* as a content child, so it cannot be captured via @ContentChildren.
|
|
261
|
+
* - The aria-current span is user-provided content inside fd-breadcrumb-item and
|
|
262
|
+
* is not an Angular component/directive — there's no token to query it.
|
|
263
|
+
* - querySelectorAll naturally returns elements in DOM (visual) order, which is
|
|
264
|
+
* exactly what arrow key navigation needs, without manual sorting.
|
|
265
|
+
*/
|
|
266
|
+
_getVisibleLinks() {
|
|
267
|
+
const el = this.elementRef.nativeElement;
|
|
268
|
+
return Array.from(el.querySelectorAll('.fd-overflow-layout__item:not(.fd-overflow-layout__item--soft-hidden) a.fd-link, .fd-overflow-layout__item:not(.fd-overflow-layout__item--soft-hidden) [aria-current], .fd-breadcrumb__collapsed'));
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* @hidden
|
|
272
|
+
* Applies roving tabindex: sets all focusable breadcrumb elements to tabindex="-1",
|
|
273
|
+
* then promotes the first visible one to tabindex="0".
|
|
274
|
+
* This ensures Tab enters/exits the breadcrumb as a single stop,
|
|
275
|
+
* and non-href elements (click-only links, aria-current spans) are programmatically focusable.
|
|
276
|
+
*/
|
|
277
|
+
_updateTabIndexes() {
|
|
278
|
+
const el = this.elementRef.nativeElement;
|
|
279
|
+
// Set ALL focusable breadcrumb elements to -1 (including hidden ones)
|
|
280
|
+
const allLinks = el.querySelectorAll('a.fd-link, [aria-current], .fd-breadcrumb__collapsed');
|
|
281
|
+
allLinks.forEach((link) => link.setAttribute('tabindex', '-1'));
|
|
282
|
+
// Promote the first visible one to 0
|
|
283
|
+
const visibleLinks = this._getVisibleLinks();
|
|
284
|
+
if (visibleLinks.length > 0) {
|
|
285
|
+
visibleLinks[0].setAttribute('tabindex', '0');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
206
288
|
/** @hidden */
|
|
207
289
|
_setItems() {
|
|
208
290
|
this._contentItems.forEach((item) => item.setPortal());
|
|
209
291
|
this._items$.set(this._contentItems.toArray());
|
|
210
292
|
}
|
|
293
|
+
/** @hidden */
|
|
294
|
+
_updateAriaLabels() {
|
|
295
|
+
const items = this._contentItems.toArray();
|
|
296
|
+
const totalCount = items.length;
|
|
297
|
+
const lang = this._langSignal();
|
|
298
|
+
items.forEach((item, index) => {
|
|
299
|
+
const position = index + 1;
|
|
300
|
+
const positionLabel = this._translationResolver.resolve(lang, 'coreBreadcrumb.positionLabel', {
|
|
301
|
+
current: position,
|
|
302
|
+
total: totalCount
|
|
303
|
+
});
|
|
304
|
+
// Set aria-label on link if present
|
|
305
|
+
if (item.breadcrumbLink) {
|
|
306
|
+
const linkEl = item.breadcrumbLink.elementRef.nativeElement;
|
|
307
|
+
const linkText = linkEl.textContent?.trim() || '';
|
|
308
|
+
linkEl.setAttribute('aria-label', `${linkText}, ${positionLabel}`);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
// Set aria-label on direct child span with aria-current if present
|
|
312
|
+
const itemElement = item.elementRef.nativeElement;
|
|
313
|
+
const directChildSpan = Array.from(itemElement.children).find((child) => child.tagName === 'SPAN' && child.hasAttribute('aria-current'));
|
|
314
|
+
if (directChildSpan) {
|
|
315
|
+
const spanText = directChildSpan.textContent?.trim() || '';
|
|
316
|
+
directChildSpan.setAttribute('aria-label', `${spanText}, ${positionLabel}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
}
|
|
211
321
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
212
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: BreadcrumbComponent, isStandalone: true, selector: "fd-breadcrumb", inputs: { reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: false, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: false, isRequired: false, transformFunction: null }, separatorStyle: { classPropertyName: "separatorStyle", publicName: "separatorStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleItemsCount: "visibleItemsCount", hiddenItemsCount: "hiddenItemsCount" }, host: { attributes: { "role": "navigation" }, properties: { "class": "_cssClass()", "attr.aria-label": "_ariaLabel" } }, providers: [
|
|
322
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: BreadcrumbComponent, isStandalone: true, selector: "fd-breadcrumb", inputs: { reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: false, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: false, isRequired: false, transformFunction: null }, separatorStyle: { classPropertyName: "separatorStyle", publicName: "separatorStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleItemsCount: "visibleItemsCount", hiddenItemsCount: "hiddenItemsCount" }, host: { attributes: { "role": "navigation" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "_cssClass()", "attr.aria-label": "_ariaLabel" } }, providers: [
|
|
213
323
|
{
|
|
214
324
|
provide: FD_BREADCRUMB_COMPONENT,
|
|
215
325
|
useExisting: BreadcrumbComponent
|
|
216
326
|
}
|
|
217
|
-
], queries: [{ propertyName: "_contentItems", predicate: FD_BREADCRUMB_ITEM_COMPONENT }], viewQueries: [{ propertyName: "_menuComponent", first: true, predicate: MenuComponent, descendants: true }, { propertyName: "_overflowLayout", first: true, predicate: OverflowLayoutComponent, descendants: true }], ngImport: i0, template: "<fd-overflow-layout\n [reverseHiddenItems]=\"!reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n ariaRole=\"list\"\n>\n @for (breadcrumb of _items$(); track breadcrumb) {\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n }\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items$()\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"placement()\">\n @for (breadcrumbItem of breadcrumbs; track breadcrumbItem) {\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled() : false\n \"\n >\n <a fd-menu-interactive (click)=\"itemClicked(breadcrumbItem.item, $event)\">\n @if (breadcrumbItem?.item.breadcrumbLink) {\n @if (breadcrumbItem.item.breadcrumbLink.
|
|
327
|
+
], queries: [{ propertyName: "_contentItems", predicate: FD_BREADCRUMB_ITEM_COMPONENT }], viewQueries: [{ propertyName: "_menuComponent", first: true, predicate: MenuComponent, descendants: true }, { propertyName: "_overflowLayout", first: true, predicate: OverflowLayoutComponent, descendants: true }], ngImport: i0, template: "<fd-overflow-layout\n [reverseHiddenItems]=\"!reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n ariaRole=\"list\"\n>\n @for (breadcrumb of _items$(); track breadcrumb) {\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n }\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items$()\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"placement()\">\n @for (breadcrumbItem of breadcrumbs; track breadcrumbItem) {\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled() : false\n \"\n >\n <a fd-menu-interactive (click)=\"itemClicked(breadcrumbItem.item, $event)\">\n @if (breadcrumbItem?.item.breadcrumbLink) {\n @if (breadcrumbItem.item.breadcrumbLink.prefixIconName()) {\n <fd-menu-addon\n position=\"before\"\n [glyph]=\"breadcrumbItem.item.breadcrumbLink.prefixIconName()\"\n ></fd-menu-addon>\n }\n <span fd-menu-title>\n <ng-container [cdkPortalOutlet]=\"breadcrumbItem.item.linkContentPortal\"></ng-container>\n </span>\n @if (breadcrumbItem.item.breadcrumbLink.postfixIconName()) {\n <fd-menu-addon\n [glyph]=\"breadcrumbItem.item.breadcrumbLink.postfixIconName()\"\n ></fd-menu-addon>\n }\n } @else {\n <span fd-menu-title>\n <ng-container\n [cdkPortalOutlet]=\"breadcrumbItem.item.breadcrumbItemPortal\"\n ></ng-container>\n </span>\n }\n </a>\n </li>\n }\n </fd-menu>\n @if (breadcrumbs.length > 0) {\n <span class=\"fd-breadcrumb__item\" [fdMenuTrigger]=\"menu\" #menuTriggerSpan>\n <a\n fd-link\n [attr.aria-label]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n aria-haspopup=\"menu\"\n tabindex=\"-1\"\n class=\"fd-breadcrumb__collapsed\"\n (keyup.enter)=\"openOverflowMenu($event)\"\n (keyup.space)=\"openOverflowMenu($event)\"\n (keydown.enter)=\"$event.preventDefault()\"\n (keydown.space)=\"$event.preventDefault()\"\n >\n <fd-icon\n glyph=\"overflow\"\n [title]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n [ariaLabel]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n ></fd-icon>\n <fd-icon glyph=\"slim-arrow-down\"></fd-icon>\n </a>\n <span class=\"fd-breadcrumb__separator\" aria-hidden=\"true\"></span>\n </span>\n }\n </ng-container>\n</fd-overflow-layout>\n<ng-content></ng-content>\n", styles: [".fd-breadcrumb{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;--fdLink_Line_Height:1.5rem;list-style:none;-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-breadcrumb:after,.fd-breadcrumb:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-breadcrumb__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapContent_LabelColor);padding-block:.0625rem}.fd-breadcrumb__item:after,.fd-breadcrumb__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-breadcrumb__item:last-child:not(:has(a)){--fdBreadcrumb_Separator:none}.fd-breadcrumb__item .fd-breadcrumb__popover-body{border:none;border-top-left-radius:.125rem;border-top-right-radius:.125rem}.fd-breadcrumb__separator{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-breadcrumb__separator:after,.fd-breadcrumb__separator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-breadcrumb__separator:after{color:var(--sapTextColor);content:var(--fdBreadcrumb_Separator,\"/\");margin-inline:.25rem}.fd-breadcrumb--backslash{--fdBreadcrumb_Separator:\"\\\\\"}.fd-breadcrumb--double-slash{--fdBreadcrumb_Separator:\"//\"}.fd-breadcrumb--double-backslash{--fdBreadcrumb_Separator:\"\\\\\\\\\"}.fd-breadcrumb--greater-than{--fdBreadcrumb_Separator:\">\"}.fd-breadcrumb--double-greater-than{--fdBreadcrumb_Separator:\">>\"}.fd-breadcrumb .fd-overflow-layout{justify-content:flex-start}.fd-breadcrumb .fd-breadcrumb__item,.fd-breadcrumb .fd-link{white-space:nowrap;text-wrap:nowrap}\n/*! Bundled license information:\n\nfundamental-styles/dist/breadcrumb.css:\n (*!\n * Fundamental Library Styles v0.41.4\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "component", type: OverflowLayoutComponent, selector: "fd-overflow-layout", inputs: ["maxVisibleItems", "navigationTrigger", "showMorePosition", "renderShowMoreButton", "reverseHiddenItems", "enableKeyboardNavigation", "ariaRole", "moreItemsButtonText"], outputs: ["visibleItemsCount", "hiddenItemsCount", "hiddenItemsChange"] }, { kind: "directive", type: OverflowItemRefDirective, selector: "[fdOverflowItemRef]", inputs: ["fdOverflowItemRef"] }, { kind: "directive", type: OverflowLayoutItemDirective, selector: "[fdOverflowLayoutItem]", inputs: ["forceVisibility"], outputs: ["hiddenChange"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: OverflowExpandDirective, selector: "[fdOverflowExpand]", inputs: ["fdOverflowExpandItems"] }, { kind: "component", type: MenuComponent, selector: "fd-menu", inputs: ["openOnHoverTime", "ariaLabel", "ariaLabelledby", "id", "config", "mobile", "mobileConfig", "placement", "closeOnEscapeKey", "focusAutoCapture", "disabled", "disableScrollbar", "triggers", "fillControlMode", "closeOnOutsideClick", "noArrow", "focusTrapped", "additionalBodyClass", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "isOpen"], outputs: ["isOpenChange", "activePath", "beforeOpen"] }, { kind: "component", type: MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "component", type: MenuAddonDirective, selector: "fd-menu-addon", inputs: ["position", "submenuIndicator", "ariaHidden"] }, { kind: "directive", type: MenuTitleDirective, selector: "[fd-menu-title]", inputs: ["truncate"] }, { kind: "directive", type: MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["emphasized", "disabled", "inverted", "subtle", "undecorated", "touchTarget"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"], outputs: ["ariaHiddenChange"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
218
328
|
}
|
|
219
329
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
220
330
|
type: Component,
|
|
221
331
|
args: [{ selector: 'fd-breadcrumb', host: {
|
|
222
332
|
role: 'navigation',
|
|
223
333
|
'[class]': '_cssClass()',
|
|
224
|
-
'[attr.aria-label]': '_ariaLabel'
|
|
334
|
+
'[attr.aria-label]': '_ariaLabel',
|
|
335
|
+
'(keydown)': 'onKeydown($event)'
|
|
225
336
|
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
226
337
|
{
|
|
227
338
|
provide: FD_BREADCRUMB_COMPONENT,
|
|
@@ -243,7 +354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
|
|
|
243
354
|
LinkComponent,
|
|
244
355
|
IconComponent,
|
|
245
356
|
FdTranslatePipe
|
|
246
|
-
], template: "<fd-overflow-layout\n [reverseHiddenItems]=\"!reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n ariaRole=\"list\"\n>\n @for (breadcrumb of _items$(); track breadcrumb) {\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n }\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items$()\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"placement()\">\n @for (breadcrumbItem of breadcrumbs; track breadcrumbItem) {\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled() : false\n \"\n >\n <a fd-menu-interactive (click)=\"itemClicked(breadcrumbItem.item, $event)\">\n @if (breadcrumbItem?.item.breadcrumbLink) {\n @if (breadcrumbItem.item.breadcrumbLink.
|
|
357
|
+
], template: "<fd-overflow-layout\n [reverseHiddenItems]=\"!reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n ariaRole=\"list\"\n>\n @for (breadcrumb of _items$(); track breadcrumb) {\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n }\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items$()\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"placement()\">\n @for (breadcrumbItem of breadcrumbs; track breadcrumbItem) {\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled() : false\n \"\n >\n <a fd-menu-interactive (click)=\"itemClicked(breadcrumbItem.item, $event)\">\n @if (breadcrumbItem?.item.breadcrumbLink) {\n @if (breadcrumbItem.item.breadcrumbLink.prefixIconName()) {\n <fd-menu-addon\n position=\"before\"\n [glyph]=\"breadcrumbItem.item.breadcrumbLink.prefixIconName()\"\n ></fd-menu-addon>\n }\n <span fd-menu-title>\n <ng-container [cdkPortalOutlet]=\"breadcrumbItem.item.linkContentPortal\"></ng-container>\n </span>\n @if (breadcrumbItem.item.breadcrumbLink.postfixIconName()) {\n <fd-menu-addon\n [glyph]=\"breadcrumbItem.item.breadcrumbLink.postfixIconName()\"\n ></fd-menu-addon>\n }\n } @else {\n <span fd-menu-title>\n <ng-container\n [cdkPortalOutlet]=\"breadcrumbItem.item.breadcrumbItemPortal\"\n ></ng-container>\n </span>\n }\n </a>\n </li>\n }\n </fd-menu>\n @if (breadcrumbs.length > 0) {\n <span class=\"fd-breadcrumb__item\" [fdMenuTrigger]=\"menu\" #menuTriggerSpan>\n <a\n fd-link\n [attr.aria-label]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n aria-haspopup=\"menu\"\n tabindex=\"-1\"\n class=\"fd-breadcrumb__collapsed\"\n (keyup.enter)=\"openOverflowMenu($event)\"\n (keyup.space)=\"openOverflowMenu($event)\"\n (keydown.enter)=\"$event.preventDefault()\"\n (keydown.space)=\"$event.preventDefault()\"\n >\n <fd-icon\n glyph=\"overflow\"\n [title]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n [ariaLabel]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n ></fd-icon>\n <fd-icon glyph=\"slim-arrow-down\"></fd-icon>\n </a>\n <span class=\"fd-breadcrumb__separator\" aria-hidden=\"true\"></span>\n </span>\n }\n </ng-container>\n</fd-overflow-layout>\n<ng-content></ng-content>\n", styles: [".fd-breadcrumb{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;--fdLink_Line_Height:1.5rem;list-style:none;-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-breadcrumb:after,.fd-breadcrumb:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-breadcrumb__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapContent_LabelColor);padding-block:.0625rem}.fd-breadcrumb__item:after,.fd-breadcrumb__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-breadcrumb__item:last-child:not(:has(a)){--fdBreadcrumb_Separator:none}.fd-breadcrumb__item .fd-breadcrumb__popover-body{border:none;border-top-left-radius:.125rem;border-top-right-radius:.125rem}.fd-breadcrumb__separator{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-breadcrumb__separator:after,.fd-breadcrumb__separator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-breadcrumb__separator:after{color:var(--sapTextColor);content:var(--fdBreadcrumb_Separator,\"/\");margin-inline:.25rem}.fd-breadcrumb--backslash{--fdBreadcrumb_Separator:\"\\\\\"}.fd-breadcrumb--double-slash{--fdBreadcrumb_Separator:\"//\"}.fd-breadcrumb--double-backslash{--fdBreadcrumb_Separator:\"\\\\\\\\\"}.fd-breadcrumb--greater-than{--fdBreadcrumb_Separator:\">\"}.fd-breadcrumb--double-greater-than{--fdBreadcrumb_Separator:\">>\"}.fd-breadcrumb .fd-overflow-layout{justify-content:flex-start}.fd-breadcrumb .fd-breadcrumb__item,.fd-breadcrumb .fd-link{white-space:nowrap;text-wrap:nowrap}\n/*! Bundled license information:\n\nfundamental-styles/dist/breadcrumb.css:\n (*!\n * Fundamental Library Styles v0.41.4\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
|
|
247
358
|
}], ctorParameters: () => [], propDecorators: { reverse: [{
|
|
248
359
|
type: Input
|
|
249
360
|
}], tabIndex: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-breadcrumb.mjs","sources":["../../../../libs/core/breadcrumb/tokens.ts","../../../../libs/core/breadcrumb/breadcrumb-item.component.ts","../../../../libs/core/breadcrumb/breadcrumb.component.ts","../../../../libs/core/breadcrumb/breadcrumb.component.html","../../../../libs/core/breadcrumb/breadcrumb.module.ts","../../../../libs/core/breadcrumb/fundamental-ngx-core-breadcrumb.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const FD_BREADCRUMB_ITEM_COMPONENT = new InjectionToken('FdBreadcrumbItemComponent');\nexport const FD_BREADCRUMB_COMPONENT = new InjectionToken('FdBreadcrumbComponent');\n","import { DomPortal } from '@angular/cdk/portal';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FD_LINK_COMPONENT, LinkComponent } from '@fundamental-ngx/core/link';\nimport { FD_BREADCRUMB_ITEM_COMPONENT } from './tokens';\n\n/**\n * Breadcrumb item directive. Must have child breadcrumb link directives.\n *\n * ```html\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb-item',\n template: `<ng-content></ng-content> <span class=\"fd-breadcrumb__separator\" aria-hidden=\"true\"></span>`,\n host: {\n class: 'fd-breadcrumb__item'\n },\n providers: [\n {\n provide: FD_BREADCRUMB_ITEM_COMPONENT,\n useExisting: BreadcrumbItemComponent\n }\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class BreadcrumbItemComponent implements AfterViewInit {\n /** @hidden */\n @ContentChild(FD_LINK_COMPONENT)\n breadcrumbLink: LinkComponent;\n\n /** In case there is no link in Item and breadcrumb item is non-interactive, we move whole item content to menu item title */\n breadcrumbItemPortal: DomPortal<Element>;\n\n /** When breadcrumb item has link in it, we are moving link content to menu item title */\n linkContentPortal: DomPortal;\n\n /**\n * Breadcrumb item dom portal.\n */\n portal: DomPortal;\n\n /** @hidden */\n private _attached = false;\n\n /** @hidden */\n constructor(public readonly elementRef: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._attach();\n }\n\n /**\n * Sets breadcrumb item dom portal.\n */\n setPortal(): void {\n if (!this.portal) {\n this.portal = new DomPortal(this.elementRef);\n }\n }\n\n /** @hidden */\n _detach(): void {\n if (!this._attached) {\n return;\n }\n\n if (this.linkContentPortal?.isAttached) {\n this.linkContentPortal?.detach();\n }\n\n if (this.breadcrumbItemPortal?.isAttached) {\n this.breadcrumbItemPortal?.detach();\n }\n\n this._attached = false;\n }\n\n /** @hidden */\n _attach(): void {\n if (this._attached) {\n return;\n }\n\n const contentSpan = this.breadcrumbLink?.contentSpan();\n if (this.breadcrumbLink && contentSpan) {\n this.linkContentPortal = new DomPortal<HTMLElement>(contentSpan.nativeElement);\n }\n\n this.breadcrumbItemPortal = new DomPortal(this.elementRef.nativeElement.firstElementChild as Element);\n this._attached = true;\n }\n}\n","import { PortalModule } from '@angular/cdk/portal';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { HasElementRef, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n GlyphMenuAddonDirective,\n MenuAddonDirective,\n MenuComponent,\n MenuInteractiveComponent,\n MenuItemComponent,\n MenuTitleDirective,\n MenuTriggerDirective\n} from '@fundamental-ngx/core/menu';\nimport {\n OverflowExpandDirective,\n OverflowItemRefDirective,\n OverflowLayoutComponent,\n OverflowLayoutItemDirective\n} from '@fundamental-ngx/core/overflow-layout';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FD_LANGUAGE_SIGNAL, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { FD_BREADCRUMB_COMPONENT, FD_BREADCRUMB_ITEM_COMPONENT } from './tokens';\n\nexport type BreadcrumbSeparatorStyle =\n | ''\n | 'backslash'\n | 'double-slash'\n | 'double-backslash'\n | 'greater-than'\n | 'double-greater-than';\n\n/**\n * Breadcrumb parent wrapper directive. Must have breadcrumb item child directives.\n *\n * ```html\n * <fd-breadcrumb>\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * </fd-breadcrumb>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb',\n host: {\n role: 'navigation',\n '[class]': '_cssClass()',\n '[attr.aria-label]': '_ariaLabel'\n },\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_BREADCRUMB_COMPONENT,\n useExisting: BreadcrumbComponent\n }\n ],\n imports: [\n OverflowLayoutComponent,\n OverflowItemRefDirective,\n OverflowLayoutItemDirective,\n PortalModule,\n OverflowExpandDirective,\n MenuComponent,\n MenuItemComponent,\n MenuInteractiveComponent,\n GlyphMenuAddonDirective,\n MenuAddonDirective,\n MenuTitleDirective,\n MenuTriggerDirective,\n LinkComponent,\n IconComponent,\n FdTranslatePipe\n ]\n})\nexport class BreadcrumbComponent implements AfterViewInit, HasElementRef {\n /** Whether to append items to the overflow dropdown in reverse order. Default is true. */\n @Input()\n reverse = false;\n\n /** Tabindex of the breadcrumb. */\n @Input()\n tabIndex = '0';\n\n /**\n * Event emitted when visible items count is changed.\n */\n @Output()\n visibleItemsCount = new EventEmitter<number>();\n\n /**\n * Event emitted when hidden items count is changed.\n */\n @Output()\n hiddenItemsCount = new EventEmitter<number>();\n\n /** @hidden */\n @ContentChildren(FD_BREADCRUMB_ITEM_COMPONENT)\n private readonly _contentItems: QueryList<BreadcrumbItemComponent>;\n\n /** @hidden */\n @ViewChild(MenuComponent)\n private readonly _menuComponent: MenuComponent;\n\n /** @hidden */\n @ViewChild(OverflowLayoutComponent)\n private readonly _overflowLayout: OverflowLayoutComponent;\n\n /**\n * Separator style for the breadcrumb items.\n * Can be 'backslash' | 'double-slash' | 'double-backslash' | 'greater-than' | 'double-greater-than'\n * Omit for default (slash)\n */\n separatorStyle = input<BreadcrumbSeparatorStyle>('');\n\n /** @hidden */\n _ariaLabel: string;\n\n /**\n * @hidden\n * Array of breadcrumb items.\n */\n _items$ = signal<BreadcrumbItemComponent[]>([]);\n\n /** @hidden */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** @hidden */\n protected readonly placement = computed<Placement>(() => (this._rtlService?.rtl() ? 'bottom-end' : 'bottom-start'));\n\n /** @hidden */\n protected readonly _cssClass = computed(() => {\n const classes = ['fd-breadcrumb'];\n const style = this.separatorStyle();\n if (style) {\n classes.push(`fd-breadcrumb--${style}`);\n }\n return classes.join(' ');\n });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n /** @hidden */\n private readonly _translationResolver = new TranslationResolver();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor() {\n effect(() => {\n const lang = this._langSignal();\n this._ariaLabel = this._translationResolver.resolve(lang, 'coreBreadcrumb.breadcrumbTrailLabel');\n });\n }\n\n /** @hidden */\n onResize(): void {\n this._overflowLayout.triggerRecalculation();\n }\n\n /**\n * Function that handles click, touch, enter and space events.\n */\n itemClicked(breadcrumbItem: BreadcrumbItemComponent, $event: Event): void {\n $event.preventDefault();\n breadcrumbItem.breadcrumbLink.elementRef.nativeElement.click();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._setItems();\n\n this._contentItems.changes.subscribe(() => this._setItems());\n\n // Set menu roles for breadcrumb context\n (this._menuComponent as any)._navContainerRole = 'dialog';\n (this._menuComponent as any)._menuListContainerRole = 'menu';\n }\n\n /** @hidden */\n _keyDownHandle(event: Event): void {\n this._menuComponent.toggle();\n event.preventDefault();\n }\n\n /** @hidden */\n _onHiddenChange(isHidden: boolean, breadcrumb: BreadcrumbItemComponent): void {\n if (!isHidden) {\n breadcrumb._detach();\n } else {\n breadcrumb._attach();\n }\n }\n\n /** @hidden */\n _onVisibleItemsCountChange(visibleItemsCount: number): void {\n this.visibleItemsCount.emit(visibleItemsCount);\n }\n\n /** @hidden */\n _onHiddenItemsCountChange(hiddenItemsCount: number): void {\n this.hiddenItemsCount.emit(hiddenItemsCount);\n }\n\n /** @hidden */\n private _setItems(): void {\n this._contentItems.forEach((item) => item.setPortal());\n this._items$.set(this._contentItems.toArray());\n }\n}\n","<fd-overflow-layout\n [reverseHiddenItems]=\"!reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n ariaRole=\"list\"\n>\n @for (breadcrumb of _items$(); track breadcrumb) {\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n }\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items$()\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"placement()\">\n @for (breadcrumbItem of breadcrumbs; track breadcrumbItem) {\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled() : false\n \"\n >\n <a fd-menu-interactive (click)=\"itemClicked(breadcrumbItem.item, $event)\">\n @if (breadcrumbItem?.item.breadcrumbLink) {\n @if (breadcrumbItem.item.breadcrumbLink._prefixIconName) {\n <fd-menu-addon\n position=\"before\"\n [glyph]=\"breadcrumbItem.item.breadcrumbLink._prefixIconName\"\n ></fd-menu-addon>\n }\n <span fd-menu-title>\n <ng-container [cdkPortalOutlet]=\"breadcrumbItem.item.linkContentPortal\"></ng-container>\n </span>\n @if (breadcrumbItem.item.breadcrumbLink._postfixIconName) {\n <fd-menu-addon\n [glyph]=\"breadcrumbItem.item.breadcrumbLink._postfixIconName\"\n ></fd-menu-addon>\n }\n } @else {\n <span fd-menu-title>\n <ng-container\n [cdkPortalOutlet]=\"breadcrumbItem.item.breadcrumbItemPortal\"\n ></ng-container>\n </span>\n }\n </a>\n </li>\n }\n </fd-menu>\n @if (breadcrumbs.length > 0) {\n <span class=\"fd-breadcrumb__item\" [fdMenuTrigger]=\"menu\">\n <a\n fd-link\n [attr.aria-label]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n aria-haspopup=\"menu\"\n tabindex=\"0\"\n class=\"fd-breadcrumb__collapsed\"\n (keydown.enter)=\"_keyDownHandle($event)\"\n (keydown.space)=\"_keyDownHandle($event)\"\n >\n <fd-icon\n glyph=\"overflow\"\n [title]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n [ariaLabel]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n ></fd-icon>\n <fd-icon glyph=\"slim-arrow-down\"></fd-icon>\n </a>\n <span class=\"fd-breadcrumb__separator\" aria-hidden=\"true\"></span>\n </span>\n }\n </ng-container>\n</fd-overflow-layout>\n<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\n\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\nconst components = [BreadcrumbComponent, BreadcrumbItemComponent, LinkComponent, ContentDensityModule];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...components],\n exports: [...components]\n})\nexport class BreadcrumbModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-breadcrumb.mjs","sources":["../../../../libs/core/breadcrumb/tokens.ts","../../../../libs/core/breadcrumb/breadcrumb-item.component.ts","../../../../libs/core/breadcrumb/breadcrumb.component.ts","../../../../libs/core/breadcrumb/breadcrumb.component.html","../../../../libs/core/breadcrumb/breadcrumb.module.ts","../../../../libs/core/breadcrumb/fundamental-ngx-core-breadcrumb.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const FD_BREADCRUMB_ITEM_COMPONENT = new InjectionToken('FdBreadcrumbItemComponent');\nexport const FD_BREADCRUMB_COMPONENT = new InjectionToken('FdBreadcrumbComponent');\n","import { DomPortal } from '@angular/cdk/portal';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FD_LINK_COMPONENT, LinkComponent } from '@fundamental-ngx/core/link';\nimport { FD_BREADCRUMB_ITEM_COMPONENT } from './tokens';\n\n/**\n * Breadcrumb item directive. Must have child breadcrumb link directives.\n *\n * ```html\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb-item',\n template: `<ng-content></ng-content> <span class=\"fd-breadcrumb__separator\" aria-hidden=\"true\"></span>`,\n host: {\n class: 'fd-breadcrumb__item'\n },\n providers: [\n {\n provide: FD_BREADCRUMB_ITEM_COMPONENT,\n useExisting: BreadcrumbItemComponent\n }\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BreadcrumbItemComponent implements AfterViewInit {\n /** @hidden */\n @ContentChild(FD_LINK_COMPONENT)\n breadcrumbLink: LinkComponent;\n\n /** In case there is no link in Item and breadcrumb item is non-interactive, we move whole item content to menu item title */\n breadcrumbItemPortal: DomPortal<Element>;\n\n /** When breadcrumb item has link in it, we are moving link content to menu item title */\n linkContentPortal: DomPortal;\n\n /**\n * Breadcrumb item dom portal.\n */\n portal: DomPortal;\n\n /** @hidden */\n private _attached = false;\n\n /** @hidden */\n constructor(public readonly elementRef: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._attach();\n }\n\n /**\n * Sets breadcrumb item dom portal.\n */\n setPortal(): void {\n if (!this.portal) {\n this.portal = new DomPortal(this.elementRef);\n }\n }\n\n /** @hidden */\n _detach(): void {\n if (!this._attached) {\n return;\n }\n\n if (this.linkContentPortal?.isAttached) {\n this.linkContentPortal?.detach();\n }\n\n if (this.breadcrumbItemPortal?.isAttached) {\n this.breadcrumbItemPortal?.detach();\n }\n\n this._attached = false;\n }\n\n /** @hidden */\n _attach(): void {\n if (this._attached) {\n return;\n }\n\n const contentSpan = this.breadcrumbLink?.contentSpan();\n if (this.breadcrumbLink && contentSpan) {\n this.linkContentPortal = new DomPortal<HTMLElement>(contentSpan.nativeElement);\n }\n\n this.breadcrumbItemPortal = new DomPortal(this.elementRef.nativeElement.firstElementChild as Element);\n this._attached = true;\n }\n}\n","import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { PortalModule } from '@angular/cdk/portal';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { HasElementRef, KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport {\n GlyphMenuAddonDirective,\n MenuAddonDirective,\n MenuComponent,\n MenuInteractiveComponent,\n MenuItemComponent,\n MenuTitleDirective,\n MenuTriggerDirective\n} from '@fundamental-ngx/core/menu';\nimport {\n OverflowExpandDirective,\n OverflowItemRefDirective,\n OverflowLayoutComponent,\n OverflowLayoutItemDirective\n} from '@fundamental-ngx/core/overflow-layout';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FD_LANGUAGE_SIGNAL, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { FD_BREADCRUMB_COMPONENT, FD_BREADCRUMB_ITEM_COMPONENT } from './tokens';\n\nexport type BreadcrumbSeparatorStyle =\n | ''\n | 'backslash'\n | 'double-slash'\n | 'double-backslash'\n | 'greater-than'\n | 'double-greater-than';\n\n/**\n * Breadcrumb parent wrapper directive. Must have breadcrumb item child directives.\n *\n * ```html\n * <fd-breadcrumb>\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * </fd-breadcrumb>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb',\n host: {\n role: 'navigation',\n '[class]': '_cssClass()',\n '[attr.aria-label]': '_ariaLabel',\n '(keydown)': 'onKeydown($event)'\n },\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_BREADCRUMB_COMPONENT,\n useExisting: BreadcrumbComponent\n }\n ],\n imports: [\n OverflowLayoutComponent,\n OverflowItemRefDirective,\n OverflowLayoutItemDirective,\n PortalModule,\n OverflowExpandDirective,\n MenuComponent,\n MenuItemComponent,\n MenuInteractiveComponent,\n GlyphMenuAddonDirective,\n MenuAddonDirective,\n MenuTitleDirective,\n MenuTriggerDirective,\n LinkComponent,\n IconComponent,\n FdTranslatePipe\n ]\n})\nexport class BreadcrumbComponent implements AfterViewInit, HasElementRef {\n /** Whether to append items to the overflow dropdown in reverse order. Default is true. */\n @Input()\n reverse = false;\n\n /** Tabindex of the breadcrumb. */\n @Input()\n tabIndex = '0';\n\n /**\n * Event emitted when visible items count is changed.\n */\n @Output()\n visibleItemsCount = new EventEmitter<number>();\n\n /**\n * Event emitted when hidden items count is changed.\n */\n @Output()\n hiddenItemsCount = new EventEmitter<number>();\n\n /** @hidden */\n @ContentChildren(FD_BREADCRUMB_ITEM_COMPONENT)\n private readonly _contentItems: QueryList<BreadcrumbItemComponent>;\n\n /** @hidden */\n @ViewChild(MenuComponent)\n private readonly _menuComponent: MenuComponent;\n\n /** @hidden */\n @ViewChild(OverflowLayoutComponent)\n private readonly _overflowLayout: OverflowLayoutComponent;\n\n /**\n * Separator style for the breadcrumb items.\n * Can be 'backslash' | 'double-slash' | 'double-backslash' | 'greater-than' | 'double-greater-than'\n * Omit for default (slash)\n */\n separatorStyle = input<BreadcrumbSeparatorStyle>('');\n\n /** @hidden */\n _ariaLabel: string;\n\n /**\n * @hidden\n * Array of breadcrumb items.\n */\n _items$ = signal<BreadcrumbItemComponent[]>([]);\n\n /** @hidden */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** @hidden */\n protected readonly placement = computed<Placement>(() => (this._rtlService?.rtl() ? 'bottom-end' : 'bottom-start'));\n\n /** @hidden */\n protected readonly _cssClass = computed(() => {\n const classes = ['fd-breadcrumb'];\n const style = this.separatorStyle();\n if (style) {\n classes.push(`fd-breadcrumb--${style}`);\n }\n return classes.join(' ');\n });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n /** @hidden */\n private readonly _translationResolver = new TranslationResolver();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor() {\n effect(() => {\n const lang = this._langSignal();\n this._ariaLabel = this._translationResolver.resolve(lang, 'coreBreadcrumb.breadcrumbTrailLabel');\n });\n }\n\n /** @hidden */\n onResize(): void {\n this._overflowLayout.triggerRecalculation();\n }\n\n /**\n * Function that handles click, touch, enter and space events.\n */\n itemClicked(breadcrumbItem: BreadcrumbItemComponent, $event: Event): void {\n $event.preventDefault();\n breadcrumbItem.breadcrumbLink.elementRef.nativeElement.click();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._setItems();\n\n this._contentItems.changes.subscribe(() => {\n this._setItems();\n this._updateAriaLabels();\n });\n\n // Set menu roles for breadcrumb context\n (this._menuComponent as any)._navContainerRole = 'dialog';\n (this._menuComponent as any)._menuListContainerRole = 'menu';\n\n /**\n * Set initial aria-labels\n * Roving tabindex is applied in _onVisibleItemsCountChange once overflow layout resolves\n */\n this._updateAriaLabels();\n }\n\n /** @hidden */\n _onHiddenChange(isHidden: boolean, breadcrumb: BreadcrumbItemComponent): void {\n if (!isHidden) {\n breadcrumb._detach();\n } else {\n breadcrumb._attach();\n }\n }\n\n /** @hidden */\n _onVisibleItemsCountChange(visibleItemsCount: number): void {\n this.visibleItemsCount.emit(visibleItemsCount);\n\n /**\n * Defer tabindex update: the overflow layout emits this event before detectChanges(),\n * so soft-hidden CSS classes haven't been applied yet.\n * A microtask ensures the DOM is up to date.\n */\n Promise.resolve().then(() => this._updateTabIndexes());\n }\n\n /** @hidden */\n _onHiddenItemsCountChange(hiddenItemsCount: number): void {\n this.hiddenItemsCount.emit(hiddenItemsCount);\n }\n\n /**\n * @hidden\n * Opens the overflow menu on keyboard activation.\n * Bound to keyup (not keydown) so that by the time the menu opens and captures focus,\n * the key has been fully released and no stale key events reach the first menu item.\n */\n protected openOverflowMenu(event: Event): void {\n event.preventDefault();\n if (!this._menuComponent.isOpen()) {\n this._menuComponent.open();\n }\n }\n\n /** @hidden */\n protected onKeydown(event: KeyboardEvent): void {\n if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW])) {\n return;\n }\n\n const links = this._getVisibleLinks();\n if (links.length === 0) {\n return;\n }\n\n const activeEl = document.activeElement as HTMLElement;\n const currentIndex = links.indexOf(activeEl);\n if (currentIndex === -1) {\n return;\n }\n\n const isRtl = this._rtlService?.rtl();\n const isNext =\n KeyUtil.isKeyCode(event, DOWN_ARROW) || KeyUtil.isKeyCode(event, isRtl ? LEFT_ARROW : RIGHT_ARROW);\n const nextIndex = isNext ? Math.min(currentIndex + 1, links.length - 1) : Math.max(currentIndex - 1, 0);\n\n if (nextIndex !== currentIndex) {\n // Update roving tabindex: old item becomes unfocusable, new item becomes the tab stop\n links[currentIndex].setAttribute('tabindex', '-1');\n links[nextIndex].setAttribute('tabindex', '0');\n links[nextIndex].focus();\n event.preventDefault();\n }\n }\n\n /**\n * @hidden\n * Returns all focusable breadcrumb elements in DOM order: visible link items,\n * the overflow \"...\" collapse button, and the aria-current page span.\n * Excludes items hidden by the overflow layout (soft-hidden).\n *\n * Uses querySelectorAll rather than Angular queries because:\n * - The overflow \"...\" button is rendered in the component template, not projected\n * as a content child, so it cannot be captured via @ContentChildren.\n * - The aria-current span is user-provided content inside fd-breadcrumb-item and\n * is not an Angular component/directive — there's no token to query it.\n * - querySelectorAll naturally returns elements in DOM (visual) order, which is\n * exactly what arrow key navigation needs, without manual sorting.\n */\n private _getVisibleLinks(): HTMLElement[] {\n const el = this.elementRef.nativeElement;\n return Array.from(\n el.querySelectorAll<HTMLElement>(\n '.fd-overflow-layout__item:not(.fd-overflow-layout__item--soft-hidden) a.fd-link, .fd-overflow-layout__item:not(.fd-overflow-layout__item--soft-hidden) [aria-current], .fd-breadcrumb__collapsed'\n )\n );\n }\n\n /**\n * @hidden\n * Applies roving tabindex: sets all focusable breadcrumb elements to tabindex=\"-1\",\n * then promotes the first visible one to tabindex=\"0\".\n * This ensures Tab enters/exits the breadcrumb as a single stop,\n * and non-href elements (click-only links, aria-current spans) are programmatically focusable.\n */\n private _updateTabIndexes(): void {\n const el = this.elementRef.nativeElement;\n // Set ALL focusable breadcrumb elements to -1 (including hidden ones)\n const allLinks = el.querySelectorAll<HTMLElement>('a.fd-link, [aria-current], .fd-breadcrumb__collapsed');\n allLinks.forEach((link) => link.setAttribute('tabindex', '-1'));\n\n // Promote the first visible one to 0\n const visibleLinks = this._getVisibleLinks();\n if (visibleLinks.length > 0) {\n visibleLinks[0].setAttribute('tabindex', '0');\n }\n }\n\n /** @hidden */\n private _setItems(): void {\n this._contentItems.forEach((item) => item.setPortal());\n this._items$.set(this._contentItems.toArray());\n }\n\n /** @hidden */\n private _updateAriaLabels(): void {\n const items = this._contentItems.toArray();\n const totalCount = items.length;\n const lang = this._langSignal();\n\n items.forEach((item, index) => {\n const position = index + 1;\n const positionLabel = this._translationResolver.resolve(lang, 'coreBreadcrumb.positionLabel', {\n current: position,\n total: totalCount\n });\n\n // Set aria-label on link if present\n if (item.breadcrumbLink) {\n const linkEl = item.breadcrumbLink.elementRef.nativeElement;\n const linkText = linkEl.textContent?.trim() || '';\n linkEl.setAttribute('aria-label', `${linkText}, ${positionLabel}`);\n } else {\n // Set aria-label on direct child span with aria-current if present\n const itemElement = item.elementRef.nativeElement;\n const directChildSpan = Array.from(itemElement.children).find(\n (child) => child.tagName === 'SPAN' && child.hasAttribute('aria-current')\n ) as HTMLElement;\n if (directChildSpan) {\n const spanText = directChildSpan.textContent?.trim() || '';\n directChildSpan.setAttribute('aria-label', `${spanText}, ${positionLabel}`);\n }\n }\n });\n }\n}\n","<fd-overflow-layout\n [reverseHiddenItems]=\"!reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n ariaRole=\"list\"\n>\n @for (breadcrumb of _items$(); track breadcrumb) {\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n }\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items$()\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"placement()\">\n @for (breadcrumbItem of breadcrumbs; track breadcrumbItem) {\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled() : false\n \"\n >\n <a fd-menu-interactive (click)=\"itemClicked(breadcrumbItem.item, $event)\">\n @if (breadcrumbItem?.item.breadcrumbLink) {\n @if (breadcrumbItem.item.breadcrumbLink.prefixIconName()) {\n <fd-menu-addon\n position=\"before\"\n [glyph]=\"breadcrumbItem.item.breadcrumbLink.prefixIconName()\"\n ></fd-menu-addon>\n }\n <span fd-menu-title>\n <ng-container [cdkPortalOutlet]=\"breadcrumbItem.item.linkContentPortal\"></ng-container>\n </span>\n @if (breadcrumbItem.item.breadcrumbLink.postfixIconName()) {\n <fd-menu-addon\n [glyph]=\"breadcrumbItem.item.breadcrumbLink.postfixIconName()\"\n ></fd-menu-addon>\n }\n } @else {\n <span fd-menu-title>\n <ng-container\n [cdkPortalOutlet]=\"breadcrumbItem.item.breadcrumbItemPortal\"\n ></ng-container>\n </span>\n }\n </a>\n </li>\n }\n </fd-menu>\n @if (breadcrumbs.length > 0) {\n <span class=\"fd-breadcrumb__item\" [fdMenuTrigger]=\"menu\" #menuTriggerSpan>\n <a\n fd-link\n [attr.aria-label]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n aria-haspopup=\"menu\"\n tabindex=\"-1\"\n class=\"fd-breadcrumb__collapsed\"\n (keyup.enter)=\"openOverflowMenu($event)\"\n (keyup.space)=\"openOverflowMenu($event)\"\n (keydown.enter)=\"$event.preventDefault()\"\n (keydown.space)=\"$event.preventDefault()\"\n >\n <fd-icon\n glyph=\"overflow\"\n [title]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n [ariaLabel]=\"('coreBreadcrumb.overflowTitleMore' | fdTranslate)()\"\n ></fd-icon>\n <fd-icon glyph=\"slim-arrow-down\"></fd-icon>\n </a>\n <span class=\"fd-breadcrumb__separator\" aria-hidden=\"true\"></span>\n </span>\n }\n </ng-container>\n</fd-overflow-layout>\n<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\n\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\nconst components = [BreadcrumbComponent, BreadcrumbItemComponent, LinkComponent, ContentDensityModule];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...components],\n exports: [...components]\n})\nexport class BreadcrumbModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -36,14 +36,14 @@ class LinkComponent {
|
|
|
36
36
|
/** @hidden */
|
|
37
37
|
this.routerLink = inject(LINK_ROUTER_TARGET);
|
|
38
38
|
/** @hidden */
|
|
39
|
-
this.prefixPortal = signal(null, ...(ngDevMode ? [{ debugName: "prefixPortal" }] : []));
|
|
40
|
-
/** @hidden */
|
|
41
|
-
this.postfixPortal = signal(null, ...(ngDevMode ? [{ debugName: "postfixPortal" }] : []));
|
|
42
|
-
/** @hidden */
|
|
43
39
|
this.prefixIconName = signal('', ...(ngDevMode ? [{ debugName: "prefixIconName" }] : []));
|
|
44
40
|
/** @hidden */
|
|
45
41
|
this.postfixIconName = signal('', ...(ngDevMode ? [{ debugName: "postfixIconName" }] : []));
|
|
46
42
|
/** @hidden */
|
|
43
|
+
this.prefixPortal = signal(null, ...(ngDevMode ? [{ debugName: "prefixPortal" }] : []));
|
|
44
|
+
/** @hidden */
|
|
45
|
+
this.postfixPortal = signal(null, ...(ngDevMode ? [{ debugName: "postfixPortal" }] : []));
|
|
46
|
+
/** @hidden */
|
|
47
47
|
this._injector = inject(Injector);
|
|
48
48
|
// Effect that runs when icons or content changes
|
|
49
49
|
effect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-link.mjs","sources":["../../../../libs/core/link/constants.ts","../../../../libs/core/link/tokens.ts","../../../../libs/core/link/link.component.ts","../../../../libs/core/link/link.component.html","../../../../libs/core/link/link.module.ts","../../../../libs/core/link/fundamental-ngx-core-link.ts"],"sourcesContent":["export const LINK_CLASS_NAME = {\n linkContent: 'fd-link__content'\n} as const;\n","import { InjectionToken } from '@angular/core';\n\nexport const FD_LINK_COMPONENT = new InjectionToken('FdLinkComponent');\n","import { DomPortal, Portal, PortalModule } from '@angular/cdk/portal';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n input,\n Optional,\n Self,\n signal,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { HasElementRef } from '@fundamental-ngx/cdk';\nimport { FD_ICON_COMPONENT, IconComponent } from '@fundamental-ngx/core/icon';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FD_LINK_COMPONENT } from './tokens';\n\nconst LINK_ROUTER_TARGET = new InjectionToken<RouterLink | undefined>('linkRouterTarget');\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdLink], [fd-link]',\n templateUrl: './link.component.html',\n styleUrl: './link.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'disabled() ? true : false',\n class: 'fd-link',\n '[class.fd-link--emphasized]': 'emphasized()',\n '[class.is-disabled]': 'disabled()',\n '[class.fd-link--inverted]': 'inverted()',\n '[class.fd-link--subtle]': 'subtle()',\n '[class.fd-link--undecorated]': 'undecorated()',\n '[class.fd-link--touch-target]': 'touchTarget()'\n },\n providers: [\n {\n provide: FD_LINK_COMPONENT,\n useExisting: LinkComponent\n },\n {\n provide: LINK_ROUTER_TARGET,\n useFactory: (withHref?: RouterLink, routerLink?: RouterLink): RouterLink | undefined =>\n withHref || routerLink,\n deps: [\n [new Optional(), new Self(), RouterLink],\n [new Optional(), new Self(), RouterLink]\n ]\n }\n ],\n imports: [PortalModule, FdTranslatePipe]\n})\nexport class LinkComponent implements HasElementRef {\n /** @hidden */\n readonly iconComponents = contentChildren<IconComponent>(FD_ICON_COMPONENT, { descendants: false });\n\n /** @hidden */\n readonly contentSpan = viewChild<ElementRef<HTMLSpanElement>>('content');\n\n /** Whether user wants to use emphasized mode */\n readonly emphasized = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to put disabled mode */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to use inverted mode */\n readonly inverted = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to use subtle mode */\n readonly subtle = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to have a link without underline decoration */\n readonly undecorated = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to have a larger touch target */\n readonly touchTarget = input(false, { transform: booleanAttribute });\n\n /** @hidden */\n readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** @hidden */\n readonly routerLink = inject<RouterLink>(LINK_ROUTER_TARGET);\n\n /** @hidden */\n protected readonly prefixPortal = signal<Portal<any> | null>(null);\n\n /** @hidden */\n protected readonly postfixPortal = signal<Portal<any> | null>(null);\n\n /** @hidden */\n protected readonly prefixIconName = signal<string>('');\n\n /** @hidden */\n protected readonly postfixIconName = signal<string>('');\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n constructor() {\n // Effect that runs when icons or content changes\n effect(() => {\n const icons = this.iconComponents();\n const contentEl = this.contentSpan()?.nativeElement;\n\n if (!contentEl || icons.length === 0) {\n afterNextRender(\n () => {\n this._clearPortals();\n },\n { injector: this._injector }\n );\n return;\n }\n\n afterNextRender(\n () => {\n this._updatePortals(icons, contentEl);\n },\n { injector: this._injector }\n );\n });\n }\n\n /** @hidden */\n private _clearPortals(): void {\n this._detachPortals();\n this.prefixPortal.set(null);\n this.postfixPortal.set(null);\n this.prefixIconName.set('');\n this.postfixIconName.set('');\n }\n\n /** @hidden */\n private _updatePortals(icons: readonly IconComponent[], contentEl: HTMLElement): void {\n // Determine prefix and postfix icons\n const firstIcon = icons[0];\n const lastIcon = icons[icons.length - 1];\n\n const prefix =\n firstIcon.elementRef.nativeElement === contentEl.childNodes[0] ? firstIcon.elementRef.nativeElement : null;\n const postfix =\n lastIcon.elementRef.nativeElement === contentEl.childNodes[contentEl.childNodes.length - 1]\n ? lastIcon.elementRef.nativeElement\n : null;\n\n // Update icon names\n this.prefixIconName.set(prefix ? firstIcon.glyph() : '');\n this.postfixIconName.set(postfix ? lastIcon.glyph() : '');\n\n // Update portals\n this._detachPortals();\n this.prefixPortal.set(prefix ? new DomPortal(prefix) : null);\n this.postfixPortal.set(postfix ? new DomPortal(postfix) : null);\n }\n\n /** @hidden */\n private _detachPortals(): void {\n const prefix = this.prefixPortal();\n const postfix = this.postfixPortal();\n\n if (prefix?.isAttached) {\n prefix.detach();\n }\n if (postfix?.isAttached) {\n postfix.detach();\n }\n }\n}\n","@if (prefixPortal()) {\n <span class=\"fd-link__icon-container\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *cdkPortalOutlet=\"prefixPortal()\"></ng-container>\n </span>\n}\n<span class=\"fd-link__content\" #content [class.fd-link__content--icon-line-height]=\"postfixPortal() || prefixPortal()\">\n <ng-content></ng-content>\n</span>\n@if (postfixPortal()) {\n <span class=\"fd-link__icon-container\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *cdkPortalOutlet=\"postfixPortal()\"></ng-container>\n </span>\n}\n@if (emphasized()) {\n <span class=\"fd-link__sr-only\">{{ ('coreLink.emphasized' | fdTranslate)() }}</span>\n}\n@if (subtle()) {\n <span class=\"fd-link__sr-only\">{{ ('coreLink.subtle' | fdTranslate)() }}</span>\n}\n","import { NgModule } from '@angular/core';\n\nimport { LinkComponent } from './link.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [LinkComponent],\n exports: [LinkComponent]\n})\nexport class LinkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-link.mjs","sources":["../../../../libs/core/link/constants.ts","../../../../libs/core/link/tokens.ts","../../../../libs/core/link/link.component.ts","../../../../libs/core/link/link.component.html","../../../../libs/core/link/link.module.ts","../../../../libs/core/link/fundamental-ngx-core-link.ts"],"sourcesContent":["export const LINK_CLASS_NAME = {\n linkContent: 'fd-link__content'\n} as const;\n","import { InjectionToken } from '@angular/core';\n\nexport const FD_LINK_COMPONENT = new InjectionToken('FdLinkComponent');\n","import { DomPortal, Portal, PortalModule } from '@angular/cdk/portal';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n input,\n Optional,\n Self,\n signal,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { HasElementRef } from '@fundamental-ngx/cdk';\nimport { FD_ICON_COMPONENT, IconComponent } from '@fundamental-ngx/core/icon';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FD_LINK_COMPONENT } from './tokens';\n\nconst LINK_ROUTER_TARGET = new InjectionToken<RouterLink | undefined>('linkRouterTarget');\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fdLink], [fd-link]',\n templateUrl: './link.component.html',\n styleUrl: './link.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'disabled() ? true : false',\n class: 'fd-link',\n '[class.fd-link--emphasized]': 'emphasized()',\n '[class.is-disabled]': 'disabled()',\n '[class.fd-link--inverted]': 'inverted()',\n '[class.fd-link--subtle]': 'subtle()',\n '[class.fd-link--undecorated]': 'undecorated()',\n '[class.fd-link--touch-target]': 'touchTarget()'\n },\n providers: [\n {\n provide: FD_LINK_COMPONENT,\n useExisting: LinkComponent\n },\n {\n provide: LINK_ROUTER_TARGET,\n useFactory: (withHref?: RouterLink, routerLink?: RouterLink): RouterLink | undefined =>\n withHref || routerLink,\n deps: [\n [new Optional(), new Self(), RouterLink],\n [new Optional(), new Self(), RouterLink]\n ]\n }\n ],\n imports: [PortalModule, FdTranslatePipe]\n})\nexport class LinkComponent implements HasElementRef {\n /** @hidden */\n readonly iconComponents = contentChildren<IconComponent>(FD_ICON_COMPONENT, { descendants: false });\n\n /** @hidden */\n readonly contentSpan = viewChild<ElementRef<HTMLSpanElement>>('content');\n\n /** Whether user wants to use emphasized mode */\n readonly emphasized = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to put disabled mode */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to use inverted mode */\n readonly inverted = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to use subtle mode */\n readonly subtle = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to have a link without underline decoration */\n readonly undecorated = input(false, { transform: booleanAttribute });\n\n /** Whether user wants to have a larger touch target */\n readonly touchTarget = input(false, { transform: booleanAttribute });\n\n /** @hidden */\n readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** @hidden */\n readonly routerLink = inject<RouterLink>(LINK_ROUTER_TARGET);\n\n /** @hidden */\n readonly prefixIconName = signal<string>('');\n\n /** @hidden */\n readonly postfixIconName = signal<string>('');\n\n /** @hidden */\n protected readonly prefixPortal = signal<Portal<any> | null>(null);\n\n /** @hidden */\n protected readonly postfixPortal = signal<Portal<any> | null>(null);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n constructor() {\n // Effect that runs when icons or content changes\n effect(() => {\n const icons = this.iconComponents();\n const contentEl = this.contentSpan()?.nativeElement;\n\n if (!contentEl || icons.length === 0) {\n afterNextRender(\n () => {\n this._clearPortals();\n },\n { injector: this._injector }\n );\n return;\n }\n\n afterNextRender(\n () => {\n this._updatePortals(icons, contentEl);\n },\n { injector: this._injector }\n );\n });\n }\n\n /** @hidden */\n private _clearPortals(): void {\n this._detachPortals();\n this.prefixPortal.set(null);\n this.postfixPortal.set(null);\n this.prefixIconName.set('');\n this.postfixIconName.set('');\n }\n\n /** @hidden */\n private _updatePortals(icons: readonly IconComponent[], contentEl: HTMLElement): void {\n // Determine prefix and postfix icons\n const firstIcon = icons[0];\n const lastIcon = icons[icons.length - 1];\n\n const prefix =\n firstIcon.elementRef.nativeElement === contentEl.childNodes[0] ? firstIcon.elementRef.nativeElement : null;\n const postfix =\n lastIcon.elementRef.nativeElement === contentEl.childNodes[contentEl.childNodes.length - 1]\n ? lastIcon.elementRef.nativeElement\n : null;\n\n // Update icon names\n this.prefixIconName.set(prefix ? firstIcon.glyph() : '');\n this.postfixIconName.set(postfix ? lastIcon.glyph() : '');\n\n // Update portals\n this._detachPortals();\n this.prefixPortal.set(prefix ? new DomPortal(prefix) : null);\n this.postfixPortal.set(postfix ? new DomPortal(postfix) : null);\n }\n\n /** @hidden */\n private _detachPortals(): void {\n const prefix = this.prefixPortal();\n const postfix = this.postfixPortal();\n\n if (prefix?.isAttached) {\n prefix.detach();\n }\n if (postfix?.isAttached) {\n postfix.detach();\n }\n }\n}\n","@if (prefixPortal()) {\n <span class=\"fd-link__icon-container\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *cdkPortalOutlet=\"prefixPortal()\"></ng-container>\n </span>\n}\n<span class=\"fd-link__content\" #content [class.fd-link__content--icon-line-height]=\"postfixPortal() || prefixPortal()\">\n <ng-content></ng-content>\n</span>\n@if (postfixPortal()) {\n <span class=\"fd-link__icon-container\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *cdkPortalOutlet=\"postfixPortal()\"></ng-container>\n </span>\n}\n@if (emphasized()) {\n <span class=\"fd-link__sr-only\">{{ ('coreLink.emphasized' | fdTranslate)() }}</span>\n}\n@if (subtle()) {\n <span class=\"fd-link__sr-only\">{{ ('coreLink.subtle' | fdTranslate)() }}</span>\n}\n","import { NgModule } from '@angular/core';\n\nimport { LinkComponent } from './link.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [LinkComponent],\n exports: [LinkComponent]\n})\nexport class LinkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundamental-ngx/core",
|
|
3
|
-
"version": "0.62.0-rc.
|
|
3
|
+
"version": "0.62.0-rc.84",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"migrations": "./schematics/migrations.json"
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"@angular/forms": "^21.0.0",
|
|
23
23
|
"@angular/platform-browser": "^21.0.0",
|
|
24
24
|
"@angular/router": "^21.0.0",
|
|
25
|
-
"@fundamental-ngx/cdk": "0.62.0-rc.
|
|
26
|
-
"@fundamental-ngx/i18n": "0.62.0-rc.
|
|
25
|
+
"@fundamental-ngx/cdk": "0.62.0-rc.84",
|
|
26
|
+
"@fundamental-ngx/i18n": "0.62.0-rc.84",
|
|
27
27
|
"@sap-theming/theming-base-content": "^11.35.0",
|
|
28
28
|
"fundamental-styles": "0.41.4",
|
|
29
29
|
"rxjs": "^7.8.0"
|
|
@@ -115,15 +115,47 @@ declare class BreadcrumbComponent implements AfterViewInit, HasElementRef {
|
|
|
115
115
|
/** @hidden */
|
|
116
116
|
ngAfterViewInit(): void;
|
|
117
117
|
/** @hidden */
|
|
118
|
-
_keyDownHandle(event: Event): void;
|
|
119
|
-
/** @hidden */
|
|
120
118
|
_onHiddenChange(isHidden: boolean, breadcrumb: BreadcrumbItemComponent): void;
|
|
121
119
|
/** @hidden */
|
|
122
120
|
_onVisibleItemsCountChange(visibleItemsCount: number): void;
|
|
123
121
|
/** @hidden */
|
|
124
122
|
_onHiddenItemsCountChange(hiddenItemsCount: number): void;
|
|
123
|
+
/**
|
|
124
|
+
* @hidden
|
|
125
|
+
* Opens the overflow menu on keyboard activation.
|
|
126
|
+
* Bound to keyup (not keydown) so that by the time the menu opens and captures focus,
|
|
127
|
+
* the key has been fully released and no stale key events reach the first menu item.
|
|
128
|
+
*/
|
|
129
|
+
protected openOverflowMenu(event: Event): void;
|
|
130
|
+
/** @hidden */
|
|
131
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
132
|
+
/**
|
|
133
|
+
* @hidden
|
|
134
|
+
* Returns all focusable breadcrumb elements in DOM order: visible link items,
|
|
135
|
+
* the overflow "..." collapse button, and the aria-current page span.
|
|
136
|
+
* Excludes items hidden by the overflow layout (soft-hidden).
|
|
137
|
+
*
|
|
138
|
+
* Uses querySelectorAll rather than Angular queries because:
|
|
139
|
+
* - The overflow "..." button is rendered in the component template, not projected
|
|
140
|
+
* as a content child, so it cannot be captured via @ContentChildren.
|
|
141
|
+
* - The aria-current span is user-provided content inside fd-breadcrumb-item and
|
|
142
|
+
* is not an Angular component/directive — there's no token to query it.
|
|
143
|
+
* - querySelectorAll naturally returns elements in DOM (visual) order, which is
|
|
144
|
+
* exactly what arrow key navigation needs, without manual sorting.
|
|
145
|
+
*/
|
|
146
|
+
private _getVisibleLinks;
|
|
147
|
+
/**
|
|
148
|
+
* @hidden
|
|
149
|
+
* Applies roving tabindex: sets all focusable breadcrumb elements to tabindex="-1",
|
|
150
|
+
* then promotes the first visible one to tabindex="0".
|
|
151
|
+
* This ensures Tab enters/exits the breadcrumb as a single stop,
|
|
152
|
+
* and non-href elements (click-only links, aria-current spans) are programmatically focusable.
|
|
153
|
+
*/
|
|
154
|
+
private _updateTabIndexes;
|
|
125
155
|
/** @hidden */
|
|
126
156
|
private _setItems;
|
|
157
|
+
/** @hidden */
|
|
158
|
+
private _updateAriaLabels;
|
|
127
159
|
static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbComponent, never>;
|
|
128
160
|
static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbComponent, "fd-breadcrumb", never, { "reverse": { "alias": "reverse"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "separatorStyle": { "alias": "separatorStyle"; "required": false; "isSignal": true; }; }, { "visibleItemsCount": "visibleItemsCount"; "hiddenItemsCount": "hiddenItemsCount"; }, ["_contentItems"], ["*"], true, never>;
|
|
129
161
|
}
|
|
@@ -31,13 +31,13 @@ declare class LinkComponent implements HasElementRef {
|
|
|
31
31
|
/** @hidden */
|
|
32
32
|
readonly routerLink: RouterLink;
|
|
33
33
|
/** @hidden */
|
|
34
|
-
|
|
34
|
+
readonly prefixIconName: _angular_core.WritableSignal<string>;
|
|
35
35
|
/** @hidden */
|
|
36
|
-
|
|
36
|
+
readonly postfixIconName: _angular_core.WritableSignal<string>;
|
|
37
37
|
/** @hidden */
|
|
38
|
-
protected readonly
|
|
38
|
+
protected readonly prefixPortal: _angular_core.WritableSignal<Portal<any> | null>;
|
|
39
39
|
/** @hidden */
|
|
40
|
-
protected readonly
|
|
40
|
+
protected readonly postfixPortal: _angular_core.WritableSignal<Portal<any> | null>;
|
|
41
41
|
/** @hidden */
|
|
42
42
|
private readonly _injector;
|
|
43
43
|
constructor();
|