@fundamental-ngx/core 0.64.4-rc.2 → 0.64.4
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-popover.mjs +142 -55
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +31 -42
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/package.json +3 -3
- package/schematics/package.json +1 -1
- package/types/fundamental-ngx-core-popover.d.ts +50 -15
- package/types/fundamental-ngx-core-product-switch.d.ts +10 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-product-switch.mjs","sources":["../../../../libs/core/product-switch/product-switch-body/product-switch-body.component.ts","../../../../libs/core/product-switch/product-switch-body/product-switch-body.component.html","../../../../libs/core/product-switch/product-switch-button.directive.ts","../../../../libs/core/product-switch/tokens.ts","../../../../libs/core/product-switch/product-switch/product-switch.component.ts","../../../../libs/core/product-switch/product-switch/product-switch.component.html","../../../../libs/core/product-switch/product-switch.module.ts","../../../../libs/core/product-switch/fundamental-ngx-core-product-switch.ts"],"sourcesContent":["import { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n input,\n model,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { FdDropEvent, KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DndItemDirective, DndListDirective } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent } from '@fundamental-ngx/core/icon';\nimport { resolveTranslationSignalFn } from '@fundamental-ngx/i18n';\nimport { ProductSwitchItem } from './product-switch.item';\n\nconst containerWidthPxSmallMode = 588;\nconst containerWidthPx = 776;\n\n@Component({\n selector: 'fd-product-switch-body',\n templateUrl: './product-switch-body.component.html',\n styleUrls: ['./product-switch-body.component.scss', '../../../cdk/utils/drag-and-drop/drag-and-drop.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DndItemDirective,\n DndListDirective,\n IconComponent,\n AvatarComponent,\n NgTemplateOutlet,\n BusyIndicatorComponent\n ]\n})\nexport class ProductSwitchBodyComponent implements OnInit, OnDestroy {\n /** Defines if drag and drop functionality should be included in product switch*/\n @Input()\n dragAndDropEnabled = true;\n\n /**\n * The product switch's product items.\n *\n * The first item in this array receives focus when the panel opens and should always be the\n * SAP Start product. The component does not enforce this ordering — it is the consumer's\n * responsibility to place SAP Start at index 0.\n */\n @Input()\n products: ProductSwitchItem[];\n\n /** Defines if the product switcher should be displayed in list mode, no matter what is the size of window */\n @Input()\n forceListMode = false;\n\n /** Event thrown on products array change */\n @Output()\n readonly productsChange: EventEmitter<any[]> = new EventEmitter<any[]>();\n\n /** Event emitted on product click */\n @Output()\n readonly itemClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** Whether the product switch body is in a loading/busy state. */\n readonly busy = input(false, { transform: booleanAttribute });\n\n /** Whether the product switch body is open. When set to true, focuses the first item. */\n readonly isOpen = model(false);\n\n /** @hidden */\n protected readonly FD_DEFAULT_ICON_FONT_FAMILY = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** @hidden Returns the accessible label for a product item. */\n protected readonly _itemAriaLabel = computed(() => {\n const targetLabels = this._targetLabels();\n return (item: ProductSwitchItem) => {\n const parts = [item.title];\n if (item.subtitle) {\n parts.push(item.subtitle);\n }\n if (item.url) {\n const effectiveTarget = item.target ?? '_blank';\n if (effectiveTarget !== '_self') {\n const label = targetLabels[effectiveTarget];\n if (label) {\n parts.push(label);\n }\n }\n }\n return parts.join(' ');\n };\n });\n\n /** @hidden Resolves all target i18n strings once per change detection cycle. */\n private readonly _targetLabels = computed(() => ({\n _blank: this._targetBlank(),\n _parent: this._targetParent(),\n _top: this._targetTop()\n }));\n\n /** @hidden */\n private readonly _translate = resolveTranslationSignalFn();\n private readonly _targetBlank = this._translate('coreProductSwitch.targetBlank');\n private readonly _targetParent = this._translate('coreProductSwitch.targetParent');\n private readonly _targetTop = this._translate('coreProductSwitch.targetTop');\n\n /** @hidden */\n private _listMode: boolean;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n /** @hidden */\n private _triggerElement: HTMLElement | null = null;\n\n private _wasDragged = false;\n\n /** @hidden */\n constructor(\n private _viewportRuler: ViewportRuler,\n private readonly _cdr: ChangeDetectorRef\n ) {\n effect(() => this._syncFocusWithOpenState());\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._subscriptions.add(\n this._viewportRuler.change().subscribe((event) => {\n const { innerWidth } = <Window>event.target;\n this._checkSize(innerWidth);\n })\n );\n\n const { width } = this._viewportRuler.getViewportSize();\n this._checkSize(width);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n _onDragStart(): void {\n this._wasDragged = true;\n }\n\n /** @hidden */\n _itemClick(item: ProductSwitchItem, event: MouseEvent): void {\n if (this._wasDragged) {\n this._wasDragged = false;\n return;\n }\n\n this.itemClicked.emit();\n if (item.callback) {\n item.callback(event);\n }\n\n if (item.url && !item.callback) {\n window.open(item.url, item.target ?? '_blank');\n }\n }\n\n /** Method called on products change */\n _productSwitchItemsChangeHandle(dropEvent: FdDropEvent<ProductSwitchItem>): void {\n this.productsChange.emit(dropEvent.items);\n this.products = dropEvent.items;\n }\n\n /** @hidden */\n _keyDownHandle(event: KeyboardEvent): void {\n const target = <HTMLElement>event.target;\n\n if (!KeyUtil.isKeyCode(event, TAB)) {\n event.preventDefault();\n }\n\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n // Click the inner <a> when one exists to trigger browser navigation (including target handling),\n // while also bubbling up to the <li>'s (click) handler to fire itemClicked.\n const anchor = target.querySelector<HTMLAnchorElement>('a.fd-product-switch__link');\n (anchor ?? target).click();\n } else if (!this._isListMode()) {\n const i = Array.from(target.parentElement?.children ?? []).indexOf(target);\n this._handleNoListKeydown(event, target, i);\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n this._handleListArrowUpDown(event, target);\n }\n }\n\n /** @hidden */\n _isSmallMode(): boolean {\n return this.products?.length >= 3 && this.products?.length < 7;\n }\n\n /** @hidden */\n _isTwoColumnMode(): boolean {\n return this.products?.length < 3;\n }\n\n /** @hidden */\n _isListMode(): boolean {\n return this._listMode || this.forceListMode;\n }\n\n /** @hidden Focuses the first item on open, or returns focus to the trigger on close. */\n private _syncFocusWithOpenState(): void {\n if (this.isOpen()) {\n this._triggerElement = document.activeElement as HTMLElement;\n this._focusItemAtIndex(0);\n } else if (this._triggerElement) {\n this._triggerElement.focus();\n this._triggerElement = null;\n }\n }\n\n /** @hidden Focuses the item at the given index within the list. */\n private _focusItemAtIndex(index: number): void {\n const items = this._elementRef.nativeElement.querySelectorAll<HTMLElement>('.fd-product-switch__item');\n items[index]?.focus();\n }\n\n /** @hidden */\n private _checkSize(width: number): void {\n if (this._isTwoColumnMode() || this._isSmallMode()) {\n this._listMode = width < containerWidthPxSmallMode;\n } else {\n this._listMode = width < containerWidthPx;\n }\n\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _handleNoListKeydown(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const previousElementSibling = <HTMLElement>target.previousElementSibling;\n const nextElementSibling = <HTMLElement>target.nextElementSibling;\n\n if (\n i === this.products.length - 1 &&\n (KeyUtil.isKeyCode(event, RIGHT_ARROW) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && this._rtlService?.rtl()))\n ) {\n while (<HTMLElement>target.previousElementSibling) {\n target = <HTMLElement>target.previousElementSibling;\n }\n target.focus();\n }\n\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this._rtlService?.rtl() ? nextElementSibling?.focus() : previousElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this._rtlService?.rtl() ? previousElementSibling?.focus() : nextElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n if (this.products.length >= 7) {\n this._handleNoListMoreThanSeven(event, target, i);\n } else if (this.products.length < 7) {\n this._handleNoListLessThanSeven(event, target, i);\n }\n }\n }\n\n /** @hidden */\n private _handleNoListMoreThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 4;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleNoListLessThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 3;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleListArrowUpDown(event: KeyboardEvent, target: HTMLElement): void {\n const targetIndex = Array.from(target.parentElement?.children ?? []).indexOf(target);\n const previousElementSibling =\n targetIndex === 0\n ? <HTMLElement>target.parentElement?.children[this.products.length - 1]\n : <HTMLElement>target.previousElementSibling;\n const nextElementSibling =\n targetIndex === this.products.length - 1\n ? <HTMLElement>target.parentElement?.children[0]\n : <HTMLElement>target.nextElementSibling;\n\n if (this._isListMode() && KeyUtil.isKeyCode(event, DOWN_ARROW) && nextElementSibling) {\n nextElementSibling.focus();\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, UP_ARROW) && previousElementSibling) {\n previousElementSibling.focus();\n }\n }\n}\n","<fd-busy-indicator [loading]=\"busy()\">\n <div\n class=\"fd-product-switch__body\"\n [class.fd-product-switch__body--col-2]=\"_isTwoColumnMode() && !_isListMode()\"\n [class.fd-product-switch__body--col-3]=\"_isSmallMode() && !_isListMode()\"\n [class.fd-product-switch__body--mobile]=\"_isListMode()\"\n >\n <ul\n fd-dnd-list\n role=\"menu\"\n class=\"fd-product-switch__list\"\n [items]=\"products\"\n [gridMode]=\"!_isListMode()\"\n (itemDropped)=\"_productSwitchItemsChangeHandle($event)\"\n >\n @for (product of products; track product; let i = $index) {\n <li\n fd-dnd-item\n tabindex=\"0\"\n role=\"menuitem\"\n class=\"fd-product-switch__item\"\n [attr.aria-label]=\"_itemAriaLabel()(product)\"\n [attr.aria-posinset]=\"i + 1\"\n [attr.aria-setsize]=\"products.length\"\n (keydown)=\"_keyDownHandle($event)\"\n (click)=\"_itemClick(product, $event)\"\n [draggable]=\"!product.disabledDragAndDrop && dragAndDropEnabled\"\n [stickInPlace]=\"!!product.stickToPosition\"\n (started)=\"_onDragStart()\"\n >\n @if (product.url) {\n <a\n class=\"fd-product-switch__link\"\n [href]=\"product.url\"\n [target]=\"product.target ?? '_blank'\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"$event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"itemContent; context: { $implicit: product }\"\n ></ng-container>\n </a>\n } @else {\n <ng-container *ngTemplateOutlet=\"itemContent; context: { $implicit: product }\"></ng-container>\n }\n </li>\n }\n </ul>\n </div>\n</fd-busy-indicator>\n\n<ng-template #itemContent let-product>\n @if (product.avatar) {\n <fd-avatar\n size=\"s\"\n [glyph]=\"product.avatar.glyph ?? null\"\n [label]=\"product.avatar.label ?? null\"\n [circle]=\"!!product.avatar.circle\"\n [image]=\"product.avatar.image ?? null\"\n [contain]=\"!!product.avatar.contain\"\n [transparent]=\"!!product.avatar.transparent\"\n [placeholder]=\"!!product.avatar.placeholder\"\n [tile]=\"!!product.avatar.tile\"\n [colorAccent]=\"product.avatar.colorAccent\"\n [colorIndication]=\"product.avatar.colorIndication\"\n [border]=\"!!product.avatar.border\"\n [alterIcon]=\"product.avatar.alterIcon ?? null\"\n [backupImage]=\"product.avatar.backupImage ?? null\"\n [ariaLabel]=\"product.avatar.ariaLabel ?? null\"\n >\n </fd-avatar>\n } @else {\n <fd-icon\n [font]=\"product.font || FD_DEFAULT_ICON_FONT_FAMILY\"\n role=\"presentation\"\n class=\"fd-product-switch__icon\"\n [glyph]=\"product.icon\"\n ></fd-icon>\n }\n\n <div class=\"fd-product-switch__text\">\n <div class=\"fd-product-switch__title\">{{ product.title }}</div>\n @if (product.subtitle) {\n <div class=\"fd-product-switch__subtitle\">{{ product.subtitle }}</div>\n }\n </div>\n</ng-template>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[fdProductSwitchButton]',\n standalone: true\n})\nexport class ProductSwitchButtonDirective {\n /** @hidden */\n constructor(readonly templateRef: TemplateRef<any>) {}\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FD_PRODUCT_SWITCH_COMPONENT = new InjectionToken('FdProductSwitchComponent');\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n effect,\n input,\n model,\n output,\n signal\n} from '@angular/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective, ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport {\n PopoverBodyComponent,\n PopoverComponent,\n PopoverControlComponent,\n TriggerConfig\n} from '@fundamental-ngx/core/popover';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subject } from 'rxjs';\nimport { ProductSwitchBodyComponent } from '../product-switch-body/product-switch-body.component';\nimport { ProductSwitchButtonDirective } from '../product-switch-button.directive';\nimport { FD_PRODUCT_SWITCH_COMPONENT } from '../tokens';\n\n@Component({\n selector: 'fd-product-switch',\n templateUrl: './product-switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_PRODUCT_SWITCH_COMPONENT,\n useExisting: ProductSwitchComponent\n }\n ],\n imports: [\n PopoverComponent,\n PopoverControlComponent,\n ButtonComponent,\n PopoverBodyComponent,\n FdTranslatePipe,\n NgTemplateOutlet,\n ContentDensityDirective\n ],\n host: {\n '[class.fd-popover-custom--disabled]': 'disabled()'\n }\n})\nexport class ProductSwitchComponent {\n /** Placement of the product switch dropdown. */\n readonly placement = input<Placement>('bottom-end');\n\n /** Whether the product switch is disabled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Whether the product switch should close when the escape key is pressed. */\n readonly closeOnEscapeKey = input(true, { transform: booleanAttribute });\n\n /** Whether the product switch should close when a click is made outside its boundaries. */\n readonly closeOnOutsideClick = input(true, { transform: booleanAttribute });\n\n /** Whether the product switch dropdown should have an arrow. */\n readonly noArrow = input(true, { transform: booleanAttribute });\n\n /** Whether to wrap content with fd-scrollbar directive. */\n readonly disableScrollbar = input(false, { transform: booleanAttribute });\n\n /** The trigger events that will open/close the product switch. */\n readonly triggers = input<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the product switch should trap focus within its boundaries. */\n readonly focusTrapped = input(false, { transform: booleanAttribute });\n\n /** Whether the product switch should automatically move focus into the trapped region. */\n readonly focusAutoCapture = input(false, { transform: booleanAttribute });\n\n /** Two-way binding for product switch open state. */\n readonly isOpen = model(false);\n\n /** Event emitted right before the product switch is being opened. */\n readonly beforeOpen = output<void>();\n\n /** Emits when product switch open state changes - for backwards compatibility with programmatic subscribers. */\n readonly isOpenChange = new Subject<boolean>();\n\n /** @hidden */\n contentDensity = signal<ContentDensityMode>(ContentDensityMode.COZY);\n\n /** @hidden */\n protected readonly customProductSwitchButton = contentChild(ProductSwitchButtonDirective);\n\n /** @hidden */\n private readonly _productSwitchBody = contentChild(ProductSwitchBodyComponent);\n\n /** @hidden */\n constructor() {\n let previousIsOpen = false;\n effect(() => {\n const openState = this.isOpen();\n\n if (openState !== previousIsOpen) {\n this._productSwitchBody()?.isOpen.set(openState);\n this.isOpenChange.next(openState);\n }\n\n previousIsOpen = openState;\n });\n }\n}\n","<div class=\"fd-product-switch\">\n <fd-popover\n [placement]=\"placement()\"\n [closeOnEscapeKey]=\"closeOnEscapeKey()\"\n [closeOnOutsideClick]=\"closeOnOutsideClick()\"\n [(isOpen)]=\"isOpen\"\n [disabled]=\"disabled()\"\n [triggers]=\"triggers()\"\n [focusTrapped]=\"focusTrapped()\"\n [focusAutoCapture]=\"focusAutoCapture()\"\n [noArrow]=\"noArrow()\"\n [disableScrollbar]=\"disableScrollbar()\"\n (beforeOpen)=\"beforeOpen.emit()\"\n >\n <fd-popover-control>\n @if (!customProductSwitchButton()) {\n <button\n fd-button\n [attr.aria-label]=\"('coreProductSwitch.ariaLabel' | fdTranslate)()\"\n [attr.title]=\"('coreProductSwitch.ariaLabel' | fdTranslate)()\"\n aria-haspopup=\"menu\"\n class=\"fd-shellbar__button\"\n glyph=\"grid\"\n fdType=\"transparent\"\n [fdContentDensity]=\"contentDensity()\"\n ></button>\n } @else {\n <ng-template [ngTemplateOutlet]=\"customProductSwitchButton()!.templateRef\"></ng-template>\n }\n </fd-popover-control>\n <fd-popover-body [ariaModal]=\"false\">\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ProductSwitchBodyComponent } from './product-switch-body/product-switch-body.component';\nimport { ProductSwitchComponent } from './product-switch/product-switch.component';\n\n/**\n * @deprecated\n * Use direct imports of `ProductSwitchComponent`, `ProductSwitchBodyComponent`\n */\n@NgModule({\n imports: [ProductSwitchComponent, ProductSwitchBodyComponent],\n exports: [ProductSwitchComponent, ProductSwitchBodyComponent]\n})\nexport class ProductSwitchModule {}\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-product-switch.mjs","sources":["../../../../libs/core/product-switch/product-switch-body/product-switch-body.component.ts","../../../../libs/core/product-switch/product-switch-body/product-switch-body.component.html","../../../../libs/core/product-switch/product-switch-button.directive.ts","../../../../libs/core/product-switch/tokens.ts","../../../../libs/core/product-switch/product-switch/product-switch.component.ts","../../../../libs/core/product-switch/product-switch/product-switch.component.html","../../../../libs/core/product-switch/product-switch.module.ts","../../../../libs/core/product-switch/fundamental-ngx-core-product-switch.ts"],"sourcesContent":["import { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n model,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { FdDropEvent, KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DndItemDirective, DndListDirective } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent } from '@fundamental-ngx/core/icon';\nimport { resolveTranslationSignalFn } from '@fundamental-ngx/i18n';\nimport { ProductSwitchItem } from './product-switch.item';\n\nconst containerWidthPxSmallMode = 588;\nconst containerWidthPx = 776;\n\n@Component({\n selector: 'fd-product-switch-body',\n templateUrl: './product-switch-body.component.html',\n styleUrls: ['./product-switch-body.component.scss', '../../../cdk/utils/drag-and-drop/drag-and-drop.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DndItemDirective, DndListDirective, IconComponent, AvatarComponent, NgTemplateOutlet]\n})\nexport class ProductSwitchBodyComponent implements OnInit, OnDestroy {\n /** Defines if drag and drop functionality should be included in product switch*/\n @Input()\n dragAndDropEnabled = true;\n\n /** The product switch's product items. */\n @Input()\n products: ProductSwitchItem[];\n\n /** Defines if the product switcher should be displayed in list mode, no matter what is the size of window */\n @Input()\n forceListMode = false;\n\n /** Event thrown on products array change */\n @Output()\n readonly productsChange: EventEmitter<any[]> = new EventEmitter<any[]>();\n\n /** Event emitted on product click */\n @Output()\n readonly itemClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** Whether the product switch body is open. When set to true, focuses the first item. */\n readonly isOpen = model(false);\n\n /** @hidden */\n protected readonly FD_DEFAULT_ICON_FONT_FAMILY = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** @hidden Returns the accessible label for a product item. */\n protected readonly _itemAriaLabel = computed(() => {\n const targetLabels = this._targetLabels();\n return (item: ProductSwitchItem) => {\n const parts = [item.title];\n if (item.subtitle) {\n parts.push(item.subtitle);\n }\n if (item.target && item.target !== '_self') {\n const label = targetLabels[item.target];\n if (label) {\n parts.push(label);\n }\n }\n return parts.join(' ');\n };\n });\n\n /** @hidden Resolves all target i18n strings once per change detection cycle. */\n private readonly _targetLabels = computed(() => ({\n _blank: this._targetBlank(),\n _parent: this._targetParent(),\n _top: this._targetTop()\n }));\n\n /** @hidden */\n private readonly _translate = resolveTranslationSignalFn();\n private readonly _targetBlank = this._translate('coreProductSwitch.targetBlank');\n private readonly _targetParent = this._translate('coreProductSwitch.targetParent');\n private readonly _targetTop = this._translate('coreProductSwitch.targetTop');\n\n /** @hidden */\n private _listMode: boolean;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _triggerElement: HTMLElement | null = null;\n\n /** @hidden */\n private _lastFocusedIndex = -1;\n\n /** @hidden */\n constructor(\n private _viewportRuler: ViewportRuler,\n private readonly _cdr: ChangeDetectorRef\n ) {\n effect(() => this._syncFocusWithOpenState());\n\n const el = this._elementRef.nativeElement;\n const onFocusIn = (event: FocusEvent): void => this._trackFocusedItem(event);\n el.addEventListener('focusin', onFocusIn);\n this._destroyRef.onDestroy(() => el.removeEventListener('focusin', onFocusIn));\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._subscriptions.add(\n this._viewportRuler.change().subscribe((event) => {\n const { innerWidth } = <Window>event.target;\n this._checkSize(innerWidth);\n })\n );\n\n const { width } = this._viewportRuler.getViewportSize();\n this._checkSize(width);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _itemClick(item: ProductSwitchItem, event: MouseEvent): void {\n this.products.forEach((product) => (product.selected = product === item));\n\n this.itemClicked.emit();\n if (item.callback) {\n item.callback(event);\n }\n }\n\n /** Method called on products change */\n _productSwitchItemsChangeHandle(dropEvent: FdDropEvent<ProductSwitchItem>): void {\n this.productsChange.emit(dropEvent.items);\n this.products = dropEvent.items;\n }\n\n /** @hidden */\n _keyDownHandle(event: KeyboardEvent): void {\n const target = <HTMLElement>event.target;\n\n if (!KeyUtil.isKeyCode(event, TAB)) {\n event.preventDefault();\n }\n\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n // Click the inner <a> when one exists to triggers browser navigation (including target handling),\n // while also bubbling up to the <li>'s (click) handler to update selected state and fire itemClicked.\n const anchor = target.querySelector<HTMLAnchorElement>('a.fd-product-switch__link');\n (anchor ?? target).click();\n } else if (!this._isListMode()) {\n const i = Array.from(target.parentElement?.children ?? []).indexOf(target);\n this._handleNoListKeydown(event, target, i);\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n this._handleListArrowUpDown(event, target);\n }\n }\n\n /** @hidden */\n _isSmallMode(): boolean {\n return this.products?.length < 7;\n }\n\n /** @hidden */\n _isListMode(): boolean {\n return this._listMode || this.forceListMode;\n }\n\n /** @hidden Focuses the appropriate item on open, or returns focus to the trigger on close. */\n private _syncFocusWithOpenState(): void {\n if (this.isOpen()) {\n this._triggerElement = document.activeElement as HTMLElement;\n this._focusItemAtIndex(this._lastFocusedIndex >= 0 ? this._lastFocusedIndex : 0);\n } else if (this._triggerElement) {\n this._triggerElement.focus();\n this._triggerElement = null;\n }\n }\n\n /** @hidden Focuses the item at the given index within the list. */\n private _focusItemAtIndex(index: number): void {\n const items = this._elementRef.nativeElement.querySelectorAll<HTMLElement>('.fd-product-switch__item');\n items[index]?.focus();\n }\n\n /** @hidden Records the index of the last focused product item so it can be restored on reopen. */\n private _trackFocusedItem(event: FocusEvent): void {\n const items = Array.from(\n this._elementRef.nativeElement.querySelectorAll<HTMLElement>('.fd-product-switch__item')\n );\n const index = items.indexOf(event.target as HTMLElement);\n if (index !== -1) {\n this._lastFocusedIndex = index;\n }\n }\n\n /** @hidden */\n private _checkSize(width: number): void {\n if (this._isSmallMode()) {\n this._listMode = width < containerWidthPxSmallMode;\n } else {\n this._listMode = width < containerWidthPx;\n }\n\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _handleNoListKeydown(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const previousElementSibling = <HTMLElement>target.previousElementSibling;\n const nextElementSibling = <HTMLElement>target.nextElementSibling;\n\n if (\n i === this.products.length - 1 &&\n (KeyUtil.isKeyCode(event, RIGHT_ARROW) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && this._rtlService?.rtl()))\n ) {\n while (<HTMLElement>target.previousElementSibling) {\n target = <HTMLElement>target.previousElementSibling;\n }\n target.focus();\n }\n\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this._rtlService?.rtl() ? nextElementSibling?.focus() : previousElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this._rtlService?.rtl() ? previousElementSibling?.focus() : nextElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n if (this.products.length >= 7) {\n this._handleNoListMoreThanSeven(event, target, i);\n } else if (this.products.length < 7) {\n this._handleNoListLessThanSeven(event, target, i);\n }\n }\n }\n\n /** @hidden */\n private _handleNoListMoreThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 4;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleNoListLessThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 3;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleListArrowUpDown(event: KeyboardEvent, target: HTMLElement): void {\n const targetIndex = Array.from(target.parentElement?.children ?? []).indexOf(target);\n const previousElementSibling =\n targetIndex === 0\n ? <HTMLElement>target.parentElement?.children[this.products.length - 1]\n : <HTMLElement>target.previousElementSibling;\n const nextElementSibling =\n targetIndex === this.products.length - 1\n ? <HTMLElement>target.parentElement?.children[0]\n : <HTMLElement>target.nextElementSibling;\n\n if (this._isListMode() && KeyUtil.isKeyCode(event, DOWN_ARROW) && nextElementSibling) {\n nextElementSibling.focus();\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, UP_ARROW) && previousElementSibling) {\n previousElementSibling.focus();\n }\n }\n}\n","<div\n class=\"fd-product-switch__body\"\n [class.fd-product-switch__body--col-3]=\"_isSmallMode() && !_isListMode()\"\n [class.fd-product-switch__body--mobile]=\"_isListMode()\"\n>\n <ul\n fd-dnd-list\n role=\"menu\"\n class=\"fd-product-switch__list\"\n [items]=\"products\"\n [gridMode]=\"!_isListMode()\"\n (itemDropped)=\"_productSwitchItemsChangeHandle($event)\"\n >\n @for (product of products; track product; let i = $index) {\n <li\n fd-dnd-item\n tabindex=\"0\"\n role=\"menuitem\"\n class=\"fd-product-switch__item\"\n [class.selected]=\"product.selected\"\n [attr.aria-label]=\"_itemAriaLabel()(product)\"\n [attr.aria-posinset]=\"i + 1\"\n [attr.aria-setsize]=\"products.length\"\n (keydown)=\"_keyDownHandle($event)\"\n (click)=\"_itemClick(product, $event)\"\n [draggable]=\"!product.disabledDragAndDrop && dragAndDropEnabled\"\n [stickInPlace]=\"!!product.stickToPosition\"\n >\n @if (product.url) {\n <a\n class=\"fd-product-switch__link\"\n [href]=\"product.url\"\n [target]=\"product.target || '_self'\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"itemContent; context: { $implicit: product }\"></ng-container>\n </a>\n } @else {\n <ng-container *ngTemplateOutlet=\"itemContent; context: { $implicit: product }\"></ng-container>\n }\n </li>\n }\n </ul>\n</div>\n\n<ng-template #itemContent let-product>\n @if (product.avatar) {\n <fd-avatar\n size=\"s\"\n [glyph]=\"product.avatar.glyph ?? null\"\n [label]=\"product.avatar.label ?? null\"\n [circle]=\"!!product.avatar.circle\"\n [image]=\"product.avatar.image ?? null\"\n [contain]=\"!!product.avatar.contain\"\n [transparent]=\"!!product.avatar.transparent\"\n [placeholder]=\"!!product.avatar.placeholder\"\n [tile]=\"!!product.avatar.tile\"\n [colorAccent]=\"product.avatar.colorAccent\"\n [colorIndication]=\"product.avatar.colorIndication\"\n [border]=\"!!product.avatar.border\"\n [alterIcon]=\"product.avatar.alterIcon ?? null\"\n [backupImage]=\"product.avatar.backupImage ?? null\"\n [ariaLabel]=\"product.avatar.ariaLabel ?? null\"\n >\n </fd-avatar>\n } @else {\n <fd-icon\n [font]=\"product.font || FD_DEFAULT_ICON_FONT_FAMILY\"\n role=\"presentation\"\n class=\"fd-product-switch__icon\"\n [glyph]=\"product.icon\"\n ></fd-icon>\n }\n\n <div class=\"fd-product-switch__text\">\n <div class=\"fd-product-switch__title\">{{ product.title }}</div>\n @if (product.subtitle) {\n <div class=\"fd-product-switch__subtitle\">{{ product.subtitle }}</div>\n }\n </div>\n</ng-template>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[fdProductSwitchButton]',\n standalone: true\n})\nexport class ProductSwitchButtonDirective {\n /** @hidden */\n constructor(readonly templateRef: TemplateRef<any>) {}\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FD_PRODUCT_SWITCH_COMPONENT = new InjectionToken('FdProductSwitchComponent');\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n effect,\n input,\n model,\n output,\n signal\n} from '@angular/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective, ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport {\n PopoverBodyComponent,\n PopoverComponent,\n PopoverControlComponent,\n TriggerConfig\n} from '@fundamental-ngx/core/popover';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subject } from 'rxjs';\nimport { ProductSwitchBodyComponent } from '../product-switch-body/product-switch-body.component';\nimport { ProductSwitchButtonDirective } from '../product-switch-button.directive';\nimport { FD_PRODUCT_SWITCH_COMPONENT } from '../tokens';\n\n@Component({\n selector: 'fd-product-switch',\n templateUrl: './product-switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_PRODUCT_SWITCH_COMPONENT,\n useExisting: ProductSwitchComponent\n }\n ],\n imports: [\n PopoverComponent,\n PopoverControlComponent,\n ButtonComponent,\n PopoverBodyComponent,\n FdTranslatePipe,\n NgTemplateOutlet,\n ContentDensityDirective\n ],\n host: {\n '[class.fd-popover-custom--disabled]': 'disabled()'\n }\n})\nexport class ProductSwitchComponent {\n /** Placement of the product switch dropdown. */\n readonly placement = input<Placement>('bottom-end');\n\n /** Whether the product switch is disabled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Whether the product switch should close when the escape key is pressed. */\n readonly closeOnEscapeKey = input(true, { transform: booleanAttribute });\n\n /** Whether the product switch should close when a click is made outside its boundaries. */\n readonly closeOnOutsideClick = input(true, { transform: booleanAttribute });\n\n /** Whether the product switch dropdown should have an arrow. */\n readonly noArrow = input(true, { transform: booleanAttribute });\n\n /** Whether to wrap content with fd-scrollbar directive. */\n readonly disableScrollbar = input(false, { transform: booleanAttribute });\n\n /** The trigger events that will open/close the product switch. */\n readonly triggers = input<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the product switch should trap focus within its boundaries. */\n readonly focusTrapped = input(false, { transform: booleanAttribute });\n\n /** Whether the product switch should automatically move focus into the trapped region. */\n readonly focusAutoCapture = input(false, { transform: booleanAttribute });\n\n /** Two-way binding for product switch open state. */\n readonly isOpen = model(false);\n\n /** Event emitted right before the product switch is being opened. */\n readonly beforeOpen = output<void>();\n\n /** Emits when product switch open state changes - for backwards compatibility with programmatic subscribers. */\n readonly isOpenChange = new Subject<boolean>();\n\n /** @hidden */\n contentDensity = signal<ContentDensityMode>(ContentDensityMode.COZY);\n\n /** @hidden */\n protected readonly customProductSwitchButton = contentChild(ProductSwitchButtonDirective);\n\n /** @hidden */\n private readonly _productSwitchBody = contentChild(ProductSwitchBodyComponent);\n\n /** @hidden */\n constructor() {\n let previousIsOpen = false;\n effect(() => {\n const openState = this.isOpen();\n\n if (openState !== previousIsOpen) {\n this._productSwitchBody()?.isOpen.set(openState);\n this.isOpenChange.next(openState);\n }\n\n previousIsOpen = openState;\n });\n }\n}\n","<div class=\"fd-product-switch\">\n <fd-popover\n [placement]=\"placement()\"\n [closeOnEscapeKey]=\"closeOnEscapeKey()\"\n [closeOnOutsideClick]=\"closeOnOutsideClick()\"\n [(isOpen)]=\"isOpen\"\n [disabled]=\"disabled()\"\n [triggers]=\"triggers()\"\n [focusTrapped]=\"focusTrapped()\"\n [focusAutoCapture]=\"focusAutoCapture()\"\n [noArrow]=\"noArrow()\"\n [disableScrollbar]=\"disableScrollbar()\"\n (beforeOpen)=\"beforeOpen.emit()\"\n >\n <fd-popover-control>\n @if (!customProductSwitchButton()) {\n <button\n fd-button\n [attr.aria-label]=\"('coreProductSwitch.ariaLabel' | fdTranslate)()\"\n [attr.title]=\"('coreProductSwitch.ariaLabel' | fdTranslate)()\"\n aria-haspopup=\"menu\"\n class=\"fd-shellbar__button\"\n glyph=\"grid\"\n fdType=\"transparent\"\n [fdContentDensity]=\"contentDensity()\"\n ></button>\n } @else {\n <ng-template [ngTemplateOutlet]=\"customProductSwitchButton()!.templateRef\"></ng-template>\n }\n </fd-popover-control>\n <fd-popover-body [ariaModal]=\"false\">\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ProductSwitchBodyComponent } from './product-switch-body/product-switch-body.component';\nimport { ProductSwitchComponent } from './product-switch/product-switch.component';\n\n/**\n * @deprecated\n * Use direct imports of `ProductSwitchComponent`, `ProductSwitchBodyComponent`\n */\n@NgModule({\n imports: [ProductSwitchComponent, ProductSwitchBodyComponent],\n exports: [ProductSwitchComponent, ProductSwitchBodyComponent]\n})\nexport class ProductSwitchModule {}\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.64.4
|
|
3
|
+
"version": "0.64.4",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"packageGroupName": "@fundamental-ngx/core",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@angular/forms": "^22.0.0",
|
|
38
38
|
"@angular/platform-browser": "^22.0.0",
|
|
39
39
|
"@angular/router": "^22.0.0",
|
|
40
|
-
"@fundamental-ngx/cdk": "0.64.4
|
|
41
|
-
"@fundamental-ngx/i18n": "0.64.4
|
|
40
|
+
"@fundamental-ngx/cdk": "0.64.4",
|
|
41
|
+
"@fundamental-ngx/i18n": "0.64.4",
|
|
42
42
|
"@sap-theming/theming-base-content": "^11.36.0",
|
|
43
43
|
"fundamental-styles": "0.41.8",
|
|
44
44
|
"rxjs": "^7.8.0"
|
package/schematics/package.json
CHANGED
|
@@ -800,8 +800,16 @@ declare class PopoverService {
|
|
|
800
800
|
private readonly _viewportRuler;
|
|
801
801
|
/** @hidden */
|
|
802
802
|
private readonly _injector;
|
|
803
|
-
/** @hidden Watches
|
|
803
|
+
/** @hidden Watches document.body while open for mutations that may affect the overlay's position. */
|
|
804
804
|
private _ancestorMutationObserver;
|
|
805
|
+
/** @hidden Pending layout measurement frame, cancelled when its open session ends. */
|
|
806
|
+
private _layoutShiftAnimationFrame;
|
|
807
|
+
/** @hidden Session identity used to reject callbacks retained after close, deactivate or reopen. */
|
|
808
|
+
private _layoutShiftObserverSession;
|
|
809
|
+
/** @hidden Geometry captured after positioning, used to suppress updates for unchanged layout. */
|
|
810
|
+
private _layoutShiftGeometry;
|
|
811
|
+
/** @hidden */
|
|
812
|
+
private readonly _ngZone;
|
|
805
813
|
/** @hidden */
|
|
806
814
|
private get _triggerHtmlElement();
|
|
807
815
|
/** @hidden Flag to prevent infinite loop when programmatically opening/closing */
|
|
@@ -923,23 +931,50 @@ declare class PopoverService {
|
|
|
923
931
|
private _focusLastActiveElementBeforeOpen;
|
|
924
932
|
/**
|
|
925
933
|
* @hidden
|
|
926
|
-
* Starts a MutationObserver on
|
|
927
|
-
*
|
|
928
|
-
*
|
|
929
|
-
*
|
|
930
|
-
*
|
|
931
|
-
* - `
|
|
932
|
-
*
|
|
933
|
-
*
|
|
934
|
-
*
|
|
935
|
-
*
|
|
936
|
-
|
|
937
|
-
|
|
934
|
+
* Starts a MutationObserver on document.body for DOM changes that may invalidate the
|
|
935
|
+
* overlay position — including mutations in elements outside the trigger's
|
|
936
|
+
* nearest scroll container (e.g. a collapsible header above a table pushing the trigger down).
|
|
937
|
+
*
|
|
938
|
+
* Observed mutation types:
|
|
939
|
+
* - `childList`: elements added/removed from the DOM (Angular `@if`, ngIf, toast dismissed).
|
|
940
|
+
* - `attributes` with `attributeFilter: ['style', 'class']`: visibility toggled via CSS.
|
|
941
|
+
*
|
|
942
|
+
* Starts after attachment and initial positioning to capture the initial geometry baseline.
|
|
943
|
+
* The observer and its requestAnimationFrame pipeline are registered outside Angular so
|
|
944
|
+
* their work does not schedule zone-driven change detection. Own-host mutations are ignored;
|
|
945
|
+
* other mutations are coalesced into at most one geometry measurement per frame.
|
|
946
|
+
*
|
|
947
|
+
* Calls updatePosition() only when the captured origin, overlay size, viewport or fill-mode
|
|
948
|
+
* trigger size changes, then captures the resulting geometry as the next baseline. This
|
|
949
|
+
* lets unchanged-layout mutation feedback settle while preserving later genuine shifts.
|
|
950
|
+
* There is no fixed update limit: a layout that keeps changing remains eligible for one
|
|
951
|
+
* reposition per frame. Session and overlay identity checks reject stale callbacks.
|
|
952
|
+
*/
|
|
953
|
+
private _startLayoutShiftObserver;
|
|
954
|
+
/**
|
|
955
|
+
* @hidden
|
|
956
|
+
* Ends the current observer session, disconnects observation and cancels its pending frame.
|
|
957
|
+
* Invalidates session identity before clearing geometry so a retained callback cannot
|
|
958
|
+
* reposition a replacement overlay or clear its pending frame.
|
|
959
|
+
*/
|
|
960
|
+
private _stopLayoutShiftObserver;
|
|
961
|
+
/**
|
|
962
|
+
* @hidden
|
|
963
|
+
* Captures the attached overlay's geometry after refreshPosition() or applyNewPosition().
|
|
964
|
+
* Subsequent mutations are compared against that updated baseline, avoiding a redundant
|
|
965
|
+
* observer-driven reposition for layout already handled by the explicit operation.
|
|
966
|
+
*/
|
|
967
|
+
private _resetLayoutShiftGeometry;
|
|
938
968
|
/**
|
|
939
969
|
* @hidden
|
|
940
|
-
*
|
|
970
|
+
* Captures the effective origin (appendTo or trigger), overlay size and viewport geometry.
|
|
971
|
+
* Includes the trigger's size in fill mode, where it can differ from the positioning origin.
|
|
972
|
+
* Overlay x/y are positioning outputs and are excluded to avoid treating position writes
|
|
973
|
+
* as new layout inputs. The snapshot does not track placement-container geometry.
|
|
941
974
|
*/
|
|
942
|
-
private
|
|
975
|
+
private _getLayoutShiftGeometry;
|
|
976
|
+
/** @hidden Compares captured geometry; a missing previous snapshot requires positioning. */
|
|
977
|
+
private _sameLayoutShiftGeometry;
|
|
943
978
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverService, never>;
|
|
944
979
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PopoverService>;
|
|
945
980
|
}
|
|
@@ -39,10 +39,7 @@ interface ProductSwitchItem {
|
|
|
39
39
|
};
|
|
40
40
|
/** Font of product item */
|
|
41
41
|
font?: IconFont;
|
|
42
|
-
/**
|
|
43
|
-
* Whether to mark this item as selected.
|
|
44
|
-
* @deprecated Product Switch has no persistent selected state per design spec. This property has no effect.
|
|
45
|
-
*/
|
|
42
|
+
/** Whether user wants to mark this element ass selected */
|
|
46
43
|
selected?: boolean;
|
|
47
44
|
/** Whether user wants to disable drag and drop functionality from single element */
|
|
48
45
|
disabledDragAndDrop?: boolean;
|
|
@@ -57,13 +54,7 @@ declare class ProductSwitchBodyComponent implements OnInit, OnDestroy {
|
|
|
57
54
|
private readonly _cdr;
|
|
58
55
|
/** Defines if drag and drop functionality should be included in product switch*/
|
|
59
56
|
dragAndDropEnabled: boolean;
|
|
60
|
-
/**
|
|
61
|
-
* The product switch's product items.
|
|
62
|
-
*
|
|
63
|
-
* The first item in this array receives focus when the panel opens and should always be the
|
|
64
|
-
* SAP Start product. The component does not enforce this ordering — it is the consumer's
|
|
65
|
-
* responsibility to place SAP Start at index 0.
|
|
66
|
-
*/
|
|
57
|
+
/** The product switch's product items. */
|
|
67
58
|
products: ProductSwitchItem[];
|
|
68
59
|
/** Defines if the product switcher should be displayed in list mode, no matter what is the size of window */
|
|
69
60
|
forceListMode: boolean;
|
|
@@ -71,8 +62,6 @@ declare class ProductSwitchBodyComponent implements OnInit, OnDestroy {
|
|
|
71
62
|
readonly productsChange: EventEmitter<any[]>;
|
|
72
63
|
/** Event emitted on product click */
|
|
73
64
|
readonly itemClicked: EventEmitter<void>;
|
|
74
|
-
/** Whether the product switch body is in a loading/busy state. */
|
|
75
|
-
readonly busy: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
76
65
|
/** Whether the product switch body is open. When set to true, focuses the first item. */
|
|
77
66
|
readonly isOpen: _angular_core.ModelSignal<boolean>;
|
|
78
67
|
/** @hidden */
|
|
@@ -95,15 +84,17 @@ declare class ProductSwitchBodyComponent implements OnInit, OnDestroy {
|
|
|
95
84
|
/** @hidden */
|
|
96
85
|
private readonly _elementRef;
|
|
97
86
|
/** @hidden */
|
|
87
|
+
private readonly _destroyRef;
|
|
88
|
+
/** @hidden */
|
|
98
89
|
private _triggerElement;
|
|
99
|
-
|
|
90
|
+
/** @hidden */
|
|
91
|
+
private _lastFocusedIndex;
|
|
100
92
|
/** @hidden */
|
|
101
93
|
constructor(_viewportRuler: ViewportRuler, _cdr: ChangeDetectorRef);
|
|
102
94
|
/** @hidden */
|
|
103
95
|
ngOnInit(): void;
|
|
104
96
|
/** @hidden */
|
|
105
97
|
ngOnDestroy(): void;
|
|
106
|
-
_onDragStart(): void;
|
|
107
98
|
/** @hidden */
|
|
108
99
|
_itemClick(item: ProductSwitchItem, event: MouseEvent): void;
|
|
109
100
|
/** Method called on products change */
|
|
@@ -113,13 +104,13 @@ declare class ProductSwitchBodyComponent implements OnInit, OnDestroy {
|
|
|
113
104
|
/** @hidden */
|
|
114
105
|
_isSmallMode(): boolean;
|
|
115
106
|
/** @hidden */
|
|
116
|
-
_isTwoColumnMode(): boolean;
|
|
117
|
-
/** @hidden */
|
|
118
107
|
_isListMode(): boolean;
|
|
119
|
-
/** @hidden Focuses the
|
|
108
|
+
/** @hidden Focuses the appropriate item on open, or returns focus to the trigger on close. */
|
|
120
109
|
private _syncFocusWithOpenState;
|
|
121
110
|
/** @hidden Focuses the item at the given index within the list. */
|
|
122
111
|
private _focusItemAtIndex;
|
|
112
|
+
/** @hidden Records the index of the last focused product item so it can be restored on reopen. */
|
|
113
|
+
private _trackFocusedItem;
|
|
123
114
|
/** @hidden */
|
|
124
115
|
private _checkSize;
|
|
125
116
|
/** @hidden */
|
|
@@ -131,7 +122,7 @@ declare class ProductSwitchBodyComponent implements OnInit, OnDestroy {
|
|
|
131
122
|
/** @hidden */
|
|
132
123
|
private _handleListArrowUpDown;
|
|
133
124
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProductSwitchBodyComponent, never>;
|
|
134
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProductSwitchBodyComponent, "fd-product-switch-body", never, { "dragAndDropEnabled": { "alias": "dragAndDropEnabled"; "required": false; }; "products": { "alias": "products"; "required": false; }; "forceListMode": { "alias": "forceListMode"; "required": false; }; "
|
|
125
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProductSwitchBodyComponent, "fd-product-switch-body", never, { "dragAndDropEnabled": { "alias": "dragAndDropEnabled"; "required": false; }; "products": { "alias": "products"; "required": false; }; "forceListMode": { "alias": "forceListMode"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "productsChange": "productsChange"; "itemClicked": "itemClicked"; "isOpen": "isOpenChange"; }, never, never, true, never>;
|
|
135
126
|
}
|
|
136
127
|
|
|
137
128
|
declare class ProductSwitchButtonDirective {
|