@fundamental-ngx/core 0.35.2-rc.1 → 0.35.2-rc.10
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/action-bar/package.json +1 -1
- package/action-sheet/package.json +1 -1
- package/alert/package.json +1 -1
- package/avatar/package.json +1 -1
- package/avatar-group/package.json +1 -1
- package/bar/esm2020/bar.component.mjs +2 -2
- package/bar/fesm2015/fundamental-ngx-core-bar.mjs +2 -2
- package/bar/fesm2020/fundamental-ngx-core-bar.mjs +2 -2
- package/bar/package.json +1 -1
- package/breadcrumb/package.json +1 -1
- package/busy-indicator/package.json +1 -1
- package/button/package.json +1 -1
- package/calendar/package.json +1 -1
- package/card/package.json +1 -1
- package/carousel/package.json +1 -1
- package/checkbox/package.json +1 -1
- package/combobox/package.json +1 -1
- package/date-picker/package.json +1 -1
- package/datetime/package.json +1 -1
- package/datetime-picker/package.json +1 -1
- package/dialog/package.json +1 -1
- package/dynamic-page/package.json +1 -1
- package/dynamic-side-content/package.json +1 -1
- package/esm2020/bar/bar.component.mjs +2 -2
- package/esm2020/info-label/info-label.component.mjs +12 -4
- package/esm2020/info-label/info-label.module.mjs +5 -4
- package/esm2020/input-group/input-group.component.mjs +3 -3
- package/esm2020/select/select.component.mjs +1 -2
- package/esm2020/tabs/tab-panel/tab-panel.component.mjs +8 -3
- package/esm2020/theming/theming.service.mjs +1 -1
- package/esm2020/wizard/wizard.component.mjs +4 -3
- package/esm2020/wizard/wizard.module.mjs +5 -4
- package/facets/package.json +1 -1
- package/feed-input/package.json +1 -1
- package/feed-list-item/package.json +1 -1
- package/fesm2015/fundamental-ngx-core-bar.mjs +2 -2
- package/fesm2015/fundamental-ngx-core-info-label.mjs +15 -6
- package/fesm2015/fundamental-ngx-core-info-label.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
- package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-select.mjs +0 -1
- package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-tabs.mjs +7 -2
- package/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-theming.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-wizard.mjs +7 -5
- package/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-bar.mjs +2 -2
- package/fesm2020/fundamental-ngx-core-info-label.mjs +15 -6
- package/fesm2020/fundamental-ngx-core-info-label.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
- package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-select.mjs +0 -1
- package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-tabs.mjs +7 -2
- package/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-theming.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-wizard.mjs +7 -5
- package/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/file-uploader/package.json +1 -1
- package/fixed-card-layout/package.json +1 -1
- package/flexible-column-layout/package.json +1 -1
- package/form/package.json +1 -1
- package/formatted-text/package.json +1 -1
- package/grid-list/package.json +1 -1
- package/icon/package.json +1 -1
- package/illustrated-message/package.json +1 -1
- package/infinite-scroll/package.json +1 -1
- package/info-label/esm2020/info-label.component.mjs +12 -4
- package/info-label/esm2020/info-label.module.mjs +5 -4
- package/info-label/fesm2015/fundamental-ngx-core-info-label.mjs +15 -6
- package/info-label/fesm2015/fundamental-ngx-core-info-label.mjs.map +1 -1
- package/info-label/fesm2020/fundamental-ngx-core-info-label.mjs +15 -6
- package/info-label/fesm2020/fundamental-ngx-core-info-label.mjs.map +1 -1
- package/info-label/info-label.component.d.ts +11 -3
- package/info-label/info-label.module.d.ts +2 -1
- package/info-label/package.json +1 -1
- package/inline-help/package.json +1 -1
- package/input-group/esm2020/input-group.component.mjs +3 -3
- package/input-group/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
- package/input-group/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/input-group/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
- package/input-group/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/input-group/package.json +1 -1
- package/layout-grid/package.json +1 -1
- package/layout-panel/package.json +1 -1
- package/link/package.json +1 -1
- package/list/package.json +1 -1
- package/menu/package.json +1 -1
- package/message-box/package.json +1 -1
- package/message-strip/package.json +1 -1
- package/message-toast/package.json +1 -1
- package/micro-process-flow/package.json +1 -1
- package/mobile-mode/package.json +1 -1
- package/multi-input/package.json +1 -1
- package/nested-list/package.json +1 -1
- package/notification/package.json +1 -1
- package/object-identifier/package.json +1 -1
- package/object-marker/package.json +1 -1
- package/object-number/package.json +1 -1
- package/object-status/package.json +1 -1
- package/overflow-layout/package.json +12 -12
- package/package.json +1 -1
- package/pagination/package.json +1 -1
- package/panel/package.json +1 -1
- package/popover/package.json +1 -1
- package/product-switch/package.json +1 -1
- package/progress-indicator/package.json +1 -1
- package/quick-view/package.json +1 -1
- package/radio/package.json +1 -1
- package/rating-indicator/package.json +1 -1
- package/resizable-card-layout/package.json +1 -1
- package/scroll-spy/package.json +1 -1
- package/scrollbar/package.json +1 -1
- package/segmented-button/package.json +1 -1
- package/select/esm2020/select.component.mjs +1 -2
- package/select/fesm2015/fundamental-ngx-core-select.mjs +0 -1
- package/select/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
- package/select/fesm2020/fundamental-ngx-core-select.mjs +0 -1
- package/select/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
- package/select/package.json +1 -1
- package/shared/package.json +1 -1
- package/shellbar/package.json +1 -1
- package/side-navigation/package.json +1 -1
- package/slider/package.json +1 -1
- package/split-button/package.json +1 -1
- package/splitter/package.json +1 -1
- package/status-indicator/package.json +1 -1
- package/step-input/package.json +1 -1
- package/switch/package.json +1 -1
- package/table/package.json +1 -1
- package/tabs/esm2020/tab-panel/tab-panel.component.mjs +8 -3
- package/tabs/fesm2015/fundamental-ngx-core-tabs.mjs +7 -2
- package/tabs/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/tabs/fesm2020/fundamental-ngx-core-tabs.mjs +7 -2
- package/tabs/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/tabs/package.json +1 -1
- package/text/package.json +1 -1
- package/theming/esm2020/theming.service.mjs +1 -1
- package/theming/fesm2015/fundamental-ngx-core-theming.mjs.map +1 -1
- package/theming/fesm2020/fundamental-ngx-core-theming.mjs.map +1 -1
- package/theming/package.json +1 -1
- package/tile/package.json +1 -1
- package/time/package.json +1 -1
- package/time-picker/package.json +1 -1
- package/timeline/package.json +1 -1
- package/title/package.json +1 -1
- package/token/package.json +1 -1
- package/toolbar/package.json +1 -1
- package/tree/package.json +1 -1
- package/upload-collection/package.json +1 -1
- package/utils/package.json +1 -1
- package/vertical-navigation/package.json +1 -1
- package/wizard/esm2020/wizard.component.mjs +4 -3
- package/wizard/esm2020/wizard.module.mjs +5 -4
- package/wizard/fesm2015/fundamental-ngx-core-wizard.mjs +7 -5
- package/wizard/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/wizard/fesm2020/fundamental-ngx-core-wizard.mjs +7 -5
- package/wizard/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/wizard/package.json +1 -1
- package/wizard/wizard.module.d.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-tabs.mjs","sources":["../../../../libs/core/src/lib/tabs/tab-utils/tab-directives.ts","../../../../libs/core/src/lib/tabs/tabs.service.ts","../../../../libs/core/src/lib/tabs/tab-panel/tab-panel.component.ts","../../../../libs/core/src/lib/tabs/tab-panel/tab-panel.component.html","../../../../libs/core/src/lib/tabs/tab-item-expand/tab-item-expand.component.ts","../../../../libs/core/src/lib/tabs/tab-item-expand/tab-item-expand.component.html","../../../../libs/core/src/lib/tabs/tab-link/tab-link.directive.ts","../../../../libs/core/src/lib/tabs/tab-item/tab-item.directive.ts","../../../../libs/core/src/lib/tabs/tab-utils/tab-info.class.ts","../../../../libs/core/src/lib/tabs/tab-list.component.ts","../../../../libs/core/src/lib/tabs/tab-list.component.html","../../../../libs/core/src/lib/tabs/tab-nav/tab-nav.component.ts","../../../../libs/core/src/lib/tabs/tabs.module.ts","../../../../libs/core/src/lib/tabs/fundamental-ngx-core-tabs.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive used to identify the template which will populate the tab header.\n * Used to achieve complex headers that require more than a string.\n *\n * ```html\n * <fd-tab>\n * <ng-template fd-tab-title>\n * <fd-icon [glyph]=\"'delete'\"></fd-icon>\n * <span>Tab Label</span>\n * </ng-template>\n * </fd-tab>\n * ```\n */\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-title-template]'\n})\nexport class TabTitleDirective {}\n\n/**\n * Directive for counter element, available in most of modes on `tab` component\n */\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-count]'\n})\nexport class TabCountDirective {\n /** @hidden */\n @HostBinding('class.fd-tabs__count')\n fdTabsCountClass = true;\n}\n\n/**\n * Directive for icon element, available in most of modes on `tab` component\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/directive-selector, @angular-eslint/component-selector\n selector: '[fd-tab-icon]',\n template: `\n <fd-icon role=\"presentation\" *ngIf=\"icon\" [glyph]=\"icon\"></fd-icon>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TabIconComponent implements CssClassBuilder, OnChanges {\n /** Apply user custom styles */\n @Input()\n class: string;\n\n /**\n * The icon to include inside the element\n * See the icon page for the list of icons.\n */\n @Input()\n icon: string;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden\n * Function runs when component is initialized\n * function should build component css class\n * function should build css style\n */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return ['fd-tabs__icon', this.class];\n }\n\n /** HasElementRef interface implementation\n * function used by applyCssClass and applyCssStyle decorators\n */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-tag]',\n host: {\n class: 'fd-tabs__tag'\n }\n})\nexport class TabTagDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-label]',\n host: {\n class: 'fd-tabs__label'\n }\n})\nexport class TabLabelDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-process]',\n host: {\n class: 'fd-tabs__process'\n }\n})\nexport class TabProcessDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-header]',\n host: {\n class: 'fd-tabs__header'\n }\n})\nexport class TabHeaderDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-counter-header]',\n host: {\n class: 'fd-tabs__counter-header'\n }\n})\nexport class TabCounterHeaderDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-process-icon]',\n host: {\n class: 'fd-tabs__process-icon'\n }\n})\nexport class TabProcessIconDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-separator]',\n host: {\n class: 'fd-tabs__separator'\n }\n})\nexport class TabSeparatorDirective {}\n","import { Injectable, Optional } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RtlService } from '@fundamental-ngx/core/utils';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\n\n/**\n * Service that is responsible for providing keyboard actions support\n * */\n@Injectable()\nexport class TabsService {\n /** Event is thrown always when tab is selected by keyboard actions */\n readonly tabSelected: Subject<number> = new Subject<number>();\n\n /** Event is thrown always, when some property is changed */\n readonly tabPanelPropertyChanged: Subject<void> = new Subject<void>();\n\n constructor(@Optional() private _rtlService: RtlService) {}\n\n /** @hidden */\n tabHeaderKeyHandler(index: number, event: any, elements: HTMLElement[]): void {\n const rtlDirection: boolean = this._rtlService && this._rtlService.rtl.getValue();\n\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n if (!rtlDirection) {\n this._focusPrevious(index, elements);\n } else {\n this._focusNext(index, elements);\n }\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n if (!rtlDirection) {\n this._focusNext(index, elements);\n } else {\n this._focusPrevious(index, elements);\n }\n } else if (KeyUtil.isKeyCode(event, [SPACE, ENTER])) {\n event.preventDefault();\n this.tabSelected.next(index);\n }\n }\n\n /** @hidden */\n private _focusNext(index: number, elements: HTMLElement[]): void {\n if (index + 1 < elements.length) {\n elements[index + 1].focus();\n } else {\n elements[0].focus();\n }\n }\n\n /** @hidden */\n private _focusPrevious(index: number, elements: HTMLElement[]): void {\n if (index - 1 >= 0) {\n elements[index - 1].focus();\n } else {\n elements[elements.length - 1].focus();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Optional,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { TabTitleDirective } from '../tab-utils/tab-directives';\nimport { TabItemState } from '../tab-item/tab-item.directive';\nimport { TabsService } from '../tabs.service';\nimport { Subject } from 'rxjs';\nimport { Nullable } from '@fundamental-ngx/core/shared';\n\nlet tabPanelUniqueId = 0;\n\nexport class TabPanelStateChange {\n constructor(public target: TabPanelComponent, public state: boolean) {}\n}\n\n/**\n * Represents the body of a tab element. It also contains elements pertaining to the associated tab header.\n */\n@Component({\n selector: 'fd-tab',\n templateUrl: './tab-panel.component.html',\n host: {\n role: 'tabpanel',\n class: 'fd-tabs__panel',\n '[attr.id]': 'id',\n '[class.is-expanded]': 'expanded',\n '[attr.aria-expanded]': 'expanded ? true : null'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TabPanelComponent implements OnChanges {\n /** Id of the tab. If none is provided, one will be generated. */\n @Input()\n id: string = 'fd-tab-panel' + tabPanelUniqueId++;\n\n /** Aria-label of the tab. Also applied to the tab header. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Id of the element that labels the tab. Also applied to the tab header. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** The title of tab, depending on mode used, it will be placed in different position */\n @Input()\n title: Nullable<string>;\n\n /** The count of tab, depending on mode used, it will be placed in different position */\n @Input()\n count: Nullable<string>;\n\n /** Glyph icon, it can be used only on */\n @Input()\n glyph: string;\n\n /** Glyph icon, it can be used only on */\n @Input()\n header = false;\n\n /** Disabled state for tab item */\n @Input()\n disabled = false;\n\n /** Semantic type of the tab item */\n @Input()\n tabState: Nullable<TabItemState>;\n\n /** Event that is emitted when the tab panel has been opened. */\n @Output()\n opened = new EventEmitter<void>();\n\n /** Event that is emitted when the tab panel has been closed. */\n @Output()\n closed = new EventEmitter<void>();\n\n /** @hidden */\n @ContentChild(TabTitleDirective, { read: TemplateRef })\n titleTemplate: TemplateRef<any>;\n\n /** @hidden Event that is emitted when the tab panel . */\n _expandedStateChange = new Subject<TabPanelStateChange>();\n\n /** @hidden Whether to display tab panel content */\n private _expanded = false;\n\n /** @hidden */\n constructor(\n public elementRef: ElementRef,\n private _changeDetRef: ChangeDetectorRef,\n @Optional() private _tabsService: TabsService\n ) {}\n\n /** @hidden\n * Thanks to OnPush change strategy detection on tab-list parent component,\n * every change of any property should be reported. */\n public ngOnChanges(): void {\n if (this._tabsService) {\n this._tabsService.tabPanelPropertyChanged.next();\n }\n }\n\n /** Whether tab panel content is expanded */\n get expanded(): boolean {\n return this._expanded;\n }\n\n /** Whether to expand tab panel content */\n open(open: boolean): void {\n this._expandedStateChange.next(new TabPanelStateChange(this, open));\n }\n\n /** @hidden Set new expand state */\n _expand(expanded: boolean): void {\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n expanded ? this.opened.emit() : this.closed.emit();\n this._changeDetRef.markForCheck();\n }\n }\n}\n","<ng-container *ngIf=\"expanded\">\n <ng-content></ng-content>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Represents a list of tab-panels.\n */\n@Component({\n selector: 'fd-item-expand',\n templateUrl: './tab-item-expand.component.html',\n styleUrls: ['./tab-item-expand.component.scss'],\n host: {\n role: 'tab',\n class: 'fd-tabs__item fd-tabs__item--overflow'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TabItemExpandComponent {\n /** @hidden Text visible in the trigger */\n @Input()\n label = 'More';\n}\n","<a class=\"fd-tabs__link\" role=\"tab\" [attr.tabindex]=\"0\">\n <span *ngIf=\"label\" fd-tab-tag>{{ label }}</span>\n <fd-icon glyph=\"slim-arrow-down\" aria-label=\"See More\"></fd-icon>\n</a>\n","import { Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\nimport { AbstractFdNgxClass } from '@fundamental-ngx/core/utils';\n\n/**\n * Tab link for nav mode\n *\n * ```html\n * <a fd-tab-link>\n * link\n * </a>\n * ```\n */\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-link]',\n host: {\n role: 'tab',\n tabindex: '-1'\n }\n})\nexport class TabLinkDirective extends AbstractFdNgxClass {\n /** Whether the link is active */\n @Input()\n @HostBinding('attr.aria-selected')\n active: boolean;\n\n /**\n * Only visual / accessibility thing on tab-nav mode\n * RouterLink does not respect preventDefault/stopPropagation\n */\n @Input()\n @HostBinding('attr.aria-disabled')\n @HostBinding('class.is-disabled')\n disabled: boolean;\n\n /** Event Emitted always when, any keyboard event is dispatched on this element */\n @Output()\n readonly keyDown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n\n /** @hidden */\n _setProperties(): void {\n this._addClassToElement('fd-tabs__link');\n if (this.active) {\n this._addClassToElement('is-selected');\n }\n }\n\n /** @hidden */\n constructor(public elementRef: ElementRef) {\n super(elementRef);\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n onKeyDown(e: KeyboardEvent): void {\n this.keyDown.emit(e);\n }\n}\n","import { ContentChild, Directive, ElementRef, HostBinding, Input, OnChanges, OnInit } from '@angular/core';\nimport { applyCssClass, CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { Nullable } from '@fundamental-ngx/core/shared';\nimport { TabLinkDirective } from '../tab-link/tab-link.directive';\n\nexport type TabItemState = 'success' | 'error' | 'warning' | 'information' | 'neutral';\n\n/**\n * Tab Item is optional wrapper for Tab link\n *\n * ```html\n * <div fd-tab-item>\n * <a fd-tab-link>\n * link\n * </a>\n * </div>\n * ```\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-item]'\n})\nexport class TabItemDirective implements CssClassBuilder, OnChanges, OnInit {\n /** Apply user custom styles */\n @Input()\n class = '';\n\n /** Semantic type of the tab item */\n @Input()\n tabItemState: Nullable<TabItemState>;\n\n /** This should be used only on `filterMode`. Flag should be enable for first item */\n @Input()\n header: boolean;\n\n /** Disabled state for tab item */\n @Input()\n @HostBinding('attr.aria-disabled')\n @HostBinding('class.is-disabled')\n disabled = false;\n\n /** Defines if there will be added fd-tabs__item class. Enabled by default. */\n @Input()\n fdTabItemClass = true;\n\n /** @hidden */\n @ContentChild(TabLinkDirective)\n linkItem: TabLinkDirective;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n @applyCssClass\n /** @hidden */\n buildComponentCssClass(): string[] {\n return [\n this.fdTabItemClass ? 'fd-tabs__item' : '',\n this.header ? 'fd-tabs__item--header' : '',\n this.tabItemState ? `fd-tabs__item--${this.tabItemState}` : '',\n this.class\n ];\n }\n\n /** @hidden */\n elementRef(): ElementRef {\n return this._elementRef;\n }\n}\n","import { TemplateRef } from '@angular/core';\n\nimport { TabPanelComponent } from '../tab-panel/tab-panel.component';\nimport { TabItemState } from '../tab-item/tab-item.directive';\nimport { Nullable } from '@fundamental-ngx/core/shared';\n\n/** @hidden */\nexport class TabInfo {\n /** Whether the tab is active */\n active: boolean;\n\n /** @hidden Width of the tab header */\n headerWidth: number;\n\n /** Corresponding tab panel */\n panel: TabPanelComponent;\n\n /** @hidden */\n constructor(tabPanel: TabPanelComponent) {\n this.panel = tabPanel;\n this.active = tabPanel.expanded;\n }\n\n /** Tab header title */\n get title(): Nullable<string> {\n return this.panel.title;\n }\n\n /** Whether the tab is disabled */\n get disabled(): boolean {\n return this.panel.disabled;\n }\n\n /** Whether the tab is tab header */\n get isHeader(): boolean {\n return this.panel.header;\n }\n\n /** @hidden */\n get id(): Nullable<string> {\n return this.panel.id;\n }\n\n /** @hidden */\n get ariaLabel(): Nullable<string> {\n return this.panel.ariaLabel;\n }\n\n /** @hidden */\n get ariaLabelledBy(): Nullable<string> {\n return this.panel.ariaLabelledBy;\n }\n\n /** @hidden */\n get tabState(): Nullable<TabItemState> {\n return this.panel.tabState;\n }\n\n /** @hidden */\n get titleTemplate(): TemplateRef<any> {\n return this.panel.titleTemplate;\n }\n\n /** @hidden */\n get count(): Nullable<string> {\n return this.panel.count;\n }\n\n /** @hidden */\n get glyph(): string {\n return this.panel.glyph;\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { fromEvent, merge, Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, delay, filter, first, map, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n getElementCapacity,\n getElementWidth,\n KeyUtil,\n resizeObservable,\n scrollTop,\n ContentDensityService\n} from '@fundamental-ngx/core/utils';\nimport { TabItemExpandComponent } from './tab-item-expand/tab-item-expand.component';\nimport { TabLinkDirective } from './tab-link/tab-link.directive';\nimport { TabItemDirective } from './tab-item/tab-item.directive';\nimport { TabPanelComponent } from './tab-panel/tab-panel.component';\nimport { TabInfo } from './tab-utils/tab-info.class';\nimport { TabsService } from './tabs.service';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { Nullable } from '@fundamental-ngx/core/shared';\n\nexport type TabModes = 'icon-only' | 'process' | 'filter';\n\nexport type TabSizes = 's' | 'm' | 'l' | 'xl' | 'xxl';\n\n/**\n * Represents a list of tab-panels.\n */\n@Component({\n selector: 'fd-tab-list',\n templateUrl: './tab-list.component.html',\n styleUrls: ['./tab-list.component.scss'],\n host: {\n class: 'fd-tabs-custom'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TabsService]\n})\nexport class TabListComponent implements AfterContentInit, AfterViewInit, OnDestroy, OnInit {\n /** Whether user wants to use tab component in compact mode */\n @Input()\n compact?: boolean;\n\n /** Size of tab, it's mostly about adding spacing on tab container, available sizes 's' | 'm' | 'l' | 'xl' | 'xxl' */\n @Input()\n size: TabSizes = 'm';\n\n /**\n * Whether user wants to use tab component in certain mode. Modes available:\n * 'icon-only' | 'process' | 'filter'\n */\n @Input()\n mode: TabModes;\n\n /** Whether to move tabs overflowing in the tab bar to the dropdown */\n @Input()\n collapseOverflow = true;\n\n /** Limits the maximum number of tabs visible in the tab bar in collapseOverflow mode.\n * Other tabs will be moved to the collapsed tabs dropdown */\n @Input()\n maxVisibleTabs: Nullable<number> = null;\n\n /** Whether to open tab content one under another without collapsing */\n @Input()\n stackContent = false;\n\n /** Maximum height of the content */\n @Input()\n maxContentHeight = '100%';\n\n /** Whether to enable collapsing expanded tab on expanded tab click */\n @Input()\n collapsibleTabs = false;\n\n /** Text visible in expand overflow trigger */\n @Input()\n expandOverflowText = 'More';\n\n /** Event emitted when the selected panel changes. */\n @Output()\n selectedTabChange = new EventEmitter<TabPanelComponent>();\n\n /** @hidden */\n @ContentChildren(TabPanelComponent)\n tabPanels: QueryList<TabPanelComponent>;\n\n /** @hidden */\n @ViewChildren(TabLinkDirective)\n tabHeaderLinks: QueryList<TabLinkDirective>;\n\n /** @hidden */\n @ViewChildren(TabItemDirective)\n tabHeaders: QueryList<TabItemDirective>;\n\n /** @hidden */\n @ViewChild(TabItemExpandComponent, { read: ElementRef })\n overflowTrigger: ElementRef;\n\n /** @hidden */\n @ViewChild('headerContainer', { read: ElementRef })\n headerContainer: ElementRef;\n\n /** @hidden */\n @ViewChild('contentContainer', { read: ElementRef, static: true })\n contentContainer: ElementRef;\n\n /** @hidden Tabs divided into tabs visible in the tab-bar and collapsed */\n _visualOrder: { [key in 'visible' | 'overflowing']: TabInfo[] } = { visible: [], overflowing: [] };\n\n /** @hidden Width of the expand overflowing tabs trigger */\n _overflowTriggerWidth: number;\n\n /** @hidden Whether the tabs header is collapsed */\n _isCollapsed = true;\n\n /** @hidden Collection of tabs in original order */\n _tabArray: TabInfo[];\n\n /** @hidden Whether to disable scroll spy */\n _disableScrollSpy = false;\n\n /** @hidden */\n _init = true;\n\n /** @hidden */\n private _numbOfVisibleTabs: number;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n constructor(\n private _tabsService: TabsService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _elRef: ElementRef,\n @Optional() private _contentDensityService: ContentDensityService\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this._changeDetectorRef.markForCheck();\n })\n );\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._setupTabPanelsChangeListeners();\n }\n\n ngAfterViewInit(): void {\n this._setupCollapsingOverflowedTabs();\n this._listenOnKeyboardTabSelect();\n this._listenOnPropertiesChange();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** Fits tabs in the tab bar and moves overflowing elements into a dropdown */\n refreshOverflow(): void {\n this._hideOverflowingItems();\n this._keepActiveTabVisible();\n }\n\n /** @hidden */\n _tabHeaderClickHandler(tabPanel: TabPanelComponent): void {\n this._expandTab(tabPanel, !tabPanel.expanded);\n }\n\n /** @hidden */\n _overflowingTabHeaderClickHandler(tabPanel: TabPanelComponent): void {\n this._expandTab(tabPanel, true, false);\n this._resetVisualOrder();\n this._keepActiveTabVisible();\n this._detectChanges();\n }\n\n /** @hidden */\n _tabHeaderKeyHandler(index: number, event: any): void {\n this._tabsService.tabHeaderKeyHandler(\n index,\n event,\n this.tabHeaderLinks.map((tab) => tab.elementRef.nativeElement)\n );\n }\n\n /** @hidden */\n _highlightActiveTab({ id }: HTMLElement): void {\n const tab = this._tabArray.find((_tab) => _tab.id === id);\n if (tab) {\n this._activateStackedTab(tab.panel, false);\n this.selectedTabChange.emit(tab.panel);\n }\n }\n\n /** @hidden */\n _onTriggerKeydown(event: KeyboardEvent, menuRef: MenuComponent): void {\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n event.preventDefault();\n menuRef.toggle();\n }\n }\n\n /** @hidden */\n private get _tabPanelsChange$(): Observable<TabPanelComponent[]> {\n return this.tabPanels.changes.pipe(\n startWith(this.tabPanels),\n map((tabPanels) => tabPanels.toArray(), takeUntil(this._onDestroy$))\n );\n }\n\n /** @hidden */\n private _detectChanges(): void {\n if (this._changeDetectorRef && !this._changeDetectorRef['destroyed']) {\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /** @hidden */\n private _setupTabPanelsChangeListeners(): void {\n this._listenOnTabPanelsAndUpdateStorageStructures();\n this._listenOnTabPanelsAndSetupStackedContent();\n this._listenOnTabPanelsExpandedChange();\n this._listenOnTabPanelsAndInitiallyExpandTabPanel();\n }\n\n /** @hidden Setup mechanisms required for handling the overflowing tabs behavior */\n private _setupCollapsingOverflowedTabs(): void {\n if (this.collapseOverflow) {\n this._cacheTabsDimensions(this.tabHeaders.toArray());\n this._listenOnTabPanelsChangeAndCollapse();\n this._listenOnResizeAndHideItems();\n this.refreshOverflow();\n } else {\n this._isCollapsed = false;\n }\n }\n\n /** @hidden Setup mechanisms required for handling the stacked content behavior */\n private _listenOnTabPanelsAndSetupStackedContent(): void {\n if (this.stackContent) {\n this._tabPanelsChange$\n .pipe(delay(0), takeUntil(this._onDestroy$))\n .subscribe(() =>\n this._tabArray.filter((tab) => !tab.panel.disabled).forEach((tab) => tab.panel._expand(true))\n );\n }\n }\n\n /** @hidden */\n private _listenOnTabPanelsAndUpdateStorageStructures(): void {\n this._tabPanelsChange$\n .pipe(\n map((tabPanels) => tabPanels.map((el) => new TabInfo(el))),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tabs) => {\n this._tabArray = tabs;\n this._numbOfVisibleTabs = tabs.length;\n this._resetVisualOrder();\n });\n }\n\n /** @hidden */\n private _listenOnTabPanelsExpandedChange(): void {\n this._tabPanelsChange$\n .pipe(\n map((tabPanels) => tabPanels.map((el) => el._expandedStateChange.asObservable())),\n switchMap((tabPanels) => merge(...tabPanels)),\n takeUntil(this._onDestroy$)\n )\n .subscribe((event) => this._expandTab(event.target, event.state));\n }\n\n /** @hidden */\n private _listenOnTabPanelsAndInitiallyExpandTabPanel(): void {\n this._tabPanelsChange$\n .pipe(\n filter(() => !this._tabArray.some((tab) => tab.active)),\n map(() => this._tabArray.find((tab) => !tab.disabled)),\n filter((tab) => !!tab),\n delay(0),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tab) => tab && this._expandTab(tab.panel, true));\n }\n\n /** @hidden */\n private _listenOnPropertiesChange(): void {\n merge(this._tabsService.tabPanelPropertyChanged, this.tabPanels.changes)\n .pipe(takeUntil(this._onDestroy$))\n .subscribe(() => this._detectChanges());\n }\n\n /** @hidden */\n private _listenOnKeyboardTabSelect(): void {\n this._tabsService.tabSelected\n .pipe(\n map((index) => this._visualOrder.visible[index].panel),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tabPanel) => this._expandTab(tabPanel, !tabPanel.expanded));\n }\n\n /** @hidden */\n private _listenOnResizeAndHideItems(): void {\n resizeObservable(this._elRef.nativeElement)\n .pipe(debounceTime(20), takeUntil(this._onDestroy$))\n .subscribe(() => {\n this.refreshOverflow();\n this._detectChanges();\n });\n }\n\n /** @hidden */\n private _listenOnTabPanelsChangeAndCollapse(): void {\n const $tabHeadersSource = this.tabHeaders.changes.pipe(\n map((tabHeaders) => tabHeaders.toArray()),\n first(),\n takeUntil(this._onDestroy$)\n );\n\n this.tabPanels.changes\n .pipe(\n switchMap(() => $tabHeadersSource),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tabHeaders) => {\n this._cacheTabsWidth(tabHeaders);\n this.refreshOverflow();\n this._detectChanges();\n });\n }\n\n /** @hidden */\n private _activateStackedTab(tabPanel: TabPanelComponent, scroll = true): void {\n if (scroll) {\n this._scrollToPanel(tabPanel);\n }\n this._tabArray.forEach((tab) => (tab.active = tab.panel === tabPanel));\n }\n\n /** @hidden */\n private _activateExpandableTab(tabPanel: TabPanelComponent, expand: boolean): void {\n const collapse = this.collapsibleTabs && !expand;\n this._tabArray.forEach((tab) => {\n const isActive = tab.panel === tabPanel && !collapse;\n tab.panel._expand(isActive);\n tab.active = isActive;\n });\n }\n\n /** @hidden */\n private _expandTab(tabPanel: TabPanelComponent, expand: boolean, detectChanges = true): void {\n if (this.stackContent) {\n this._activateStackedTab(tabPanel);\n } else {\n if (!this._canChangeExpandState(tabPanel, expand)) {\n return;\n }\n\n this._activateExpandableTab(tabPanel, expand);\n }\n\n if (detectChanges) {\n this._detectChanges();\n }\n this.selectedTabChange.emit(tabPanel);\n }\n\n /** @hidden Divides tabs into tabs visible in the header and moved tabs to the dropdown */\n private _hideOverflowingItems(): void {\n const extraFreeSpace = 1;\n const capacity = getElementCapacity(this.headerContainer);\n const tabsLimit = this.maxVisibleTabs || Number.MAX_SAFE_INTEGER;\n const totalRequiredWidth = this._tabArray.reduce((total, tab) => total + tab.headerWidth, 0);\n\n this._isCollapsed = totalRequiredWidth > capacity - extraFreeSpace || tabsLimit < this._tabArray.length;\n\n const requiredFreeSpace = this._isCollapsed ? this._overflowTriggerWidth : 0;\n this._numbOfVisibleTabs = 0;\n let capacityLeft = capacity;\n\n for (let i = 0; capacityLeft > requiredFreeSpace && this._tabArray.length > i && tabsLimit > i; i++) {\n const width = this._tabArray[i].headerWidth;\n\n if (capacityLeft - width >= requiredFreeSpace + extraFreeSpace) {\n this._numbOfVisibleTabs++;\n }\n capacityLeft -= width;\n }\n this._resetVisualOrder();\n }\n\n /** @hidden Check whether the active tab is visible */\n private _keepActiveTabVisible(): void {\n const activeTab = this._visualOrder.overflowing.find((tab) => tab.active);\n\n if (activeTab) {\n this._moveToVisible(activeTab);\n }\n }\n\n /** @hidden Make given tab visible in the tab bar*/\n private _moveToVisible(tabToMove: TabInfo): void {\n const activeTabWidth = tabToMove.headerWidth;\n const numOfVisibleTabs = this._numbOfVisibleTabs;\n const capacity = getElementCapacity(this.headerContainer);\n const tabsLimit = this.maxVisibleTabs || Number.MAX_SAFE_INTEGER;\n const visibleTabsWidth = this._visualOrder.visible.reduce((total, tab) => total + tab.headerWidth, 0);\n\n let widthRequired = activeTabWidth - (capacity - visibleTabsWidth - this._overflowTriggerWidth);\n let numOfTabsToMove = 0;\n\n /** As long as:\n * - There is not enough space for tab to move\n * - There are other tabs to move from visible to overflow\n * - Number of visible tabs is larger than the limit */\n for (\n let i = numOfVisibleTabs - 1;\n (widthRequired > 0 && i >= 0) || tabsLimit < numOfVisibleTabs + 1 - numOfTabsToMove;\n i--\n ) {\n widthRequired -= this._tabArray[i].headerWidth;\n numOfTabsToMove++;\n }\n\n const tabToMoveIndex = this._visualOrder.overflowing.indexOf(tabToMove);\n const [selectedTab] = this._visualOrder.overflowing.splice(tabToMoveIndex, 1);\n const tabsToMove = this._visualOrder.visible.splice(-numOfTabsToMove, numOfTabsToMove, selectedTab);\n this._visualOrder.overflowing.unshift(...tabsToMove);\n this._numbOfVisibleTabs = this._visualOrder.visible.length;\n }\n\n /** @hidden Caches width dimension of the elements in the tabs header */\n private _cacheTabsDimensions(tabHeaders: TabItemDirective[]): void {\n this._overflowTriggerWidth = Math.ceil(getElementWidth(this.overflowTrigger));\n this._cacheTabsWidth(tabHeaders);\n }\n\n /** @hidden Caches the width of the tabs */\n private _cacheTabsWidth(tabHeaders: TabItemDirective[]): void {\n tabHeaders.forEach((item, i) => {\n this._tabArray[i].headerWidth = Math.ceil(getElementWidth(item.elementRef(), true));\n });\n }\n\n /** @hidden */\n private _resetVisualOrder(): void {\n this._visualOrder = {\n visible: this._tabArray.slice(0, this._numbOfVisibleTabs),\n overflowing: this._tabArray.slice(this._numbOfVisibleTabs)\n };\n }\n\n /** @hidden */\n private _scrollToPanel(tabPanel: TabPanelComponent): void {\n const panelElement = tabPanel.elementRef.nativeElement;\n const containerElement = this.contentContainer.nativeElement;\n const distanceToScroll = panelElement.offsetTop - containerElement.offsetTop;\n const maximumScrollTop = containerElement.scrollHeight - containerElement.clientHeight;\n const currentScrollPosition = Math.ceil(containerElement.scrollTop);\n\n if (!(currentScrollPosition === maximumScrollTop && distanceToScroll > maximumScrollTop)) {\n !this._init ? (this._disableScrollSpy = true) : (this._init = false);\n fromEvent(containerElement, 'scroll')\n .pipe(debounceTime(100), first(), takeUntil(this._onDestroy$))\n .subscribe(() => (this._disableScrollSpy = false));\n scrollTop(containerElement, distanceToScroll);\n }\n }\n\n /** @hidden Whether tab can be expanded/collapsed */\n private _canChangeExpandState(tabPanel: TabPanelComponent, expand: boolean): boolean {\n return !tabPanel.disabled && expand !== tabPanel.expanded && expand === false ? this.collapsibleTabs : true;\n }\n}\n","<div\n #headerContainer\n role=\"tablist\"\n class=\"fd-tabs\"\n [class]=\"(mode ? 'fd-tabs--' + mode : '') + (' fd-tabs--' + size)\"\n [class.fd-tabs--compact]=\"compact\"\n>\n <div class=\"fd-tabs__wrapper\" [class.fd-tabs__wrapper--collapsible]=\"_isCollapsed\">\n <ng-container *ngFor=\"let tab of _visualOrder.visible; let i = index; let last = last\">\n <div fd-tab-item [header]=\"tab.isHeader\" [tabItemState]=\"tab.tabState\" [attr.aria-selected]=\"tab.active\">\n <a\n fd-tab-link\n [attr.tabindex]=\"tab.active ? '0' : '-1'\"\n [attr.aria-controls]=\"tab.id\"\n [attr.aria-label]=\"tab.ariaLabel || null\"\n [attr.aria-labelledby]=\"!tab.ariaLabel && tab.ariaLabelledBy ? tab.ariaLabelledBy : null\"\n [active]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n (keydown)=\"_tabHeaderKeyHandler(i, $event)\"\n (click)=\"_tabHeaderClickHandler(tab.panel)\"\n >\n <ng-container *ngTemplateOutlet=\"tab.titleTemplate || null\"></ng-container>\n\n <ng-container *ngIf=\"!tab.titleTemplate\" [ngSwitch]=\"mode\">\n <ng-container *ngSwitchCase=\"'filter'\">\n <span fd-tab-header *ngIf=\"tab.isHeader\">\n <span fd-tab-counter-header *ngIf=\"tab.count\">{{ tab.count }}</span>\n <span fd-tab-label *ngIf=\"tab.title\">{{ tab.title }}</span>\n </span>\n <ng-container *ngIf=\"!tab.isHeader\">\n <span fd-tab-icon [icon]=\"tab.glyph\">\n <p fd-tab-count>{{ tab.count }}</p>\n </span>\n <span fd-tab-label>{{ tab.title }}</span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon-only'\">\n <span fd-tab-icon [icon]=\"tab.glyph\">\n <p fd-tab-count>{{ tab.count }}</p>\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'process'\">\n <span fd-tab-icon *ngIf=\"tab.glyph\" [icon]=\"tab.glyph\"></span>\n <div fd-tab-process>\n <span fd-tab-label *ngIf=\"tab.count\">{{ tab.count }}</span>\n <span fd-tab-label *ngIf=\"tab.title\">{{ tab.title }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <p fd-tab-count *ngIf=\"tab.count\">{{ tab.count }}</p>\n <span fd-tab-tag>{{ tab.title }}</span>\n </ng-container>\n </ng-container>\n </a>\n <div fd-tab-process-icon *ngIf=\"mode === 'process' && !last\"></div>\n </div>\n\n <div *ngIf=\"tab.isHeader\" fd-tab-separator></div>\n </ng-container>\n </div>\n\n <fd-item-expand\n *ngIf=\"_isCollapsed\"\n [fdMenuTrigger]=\"menu\"\n [label]=\"expandOverflowText\"\n (keydown)=\"_onTriggerKeydown($event, menu)\"\n >\n </fd-item-expand>\n</div>\n\n<div\n #contentContainer\n class=\"fd-tabs__content\"\n [style.maxHeight]=\"maxContentHeight\"\n fdScrollSpy\n [trackedTags]=\"['fd-tab']\"\n [scrollSpyDisabled]=\"_disableScrollSpy\"\n (spyChange)=\"_highlightActiveTab($event)\"\n>\n <ng-content></ng-content>\n</div>\n\n<fd-menu #menu>\n <li\n fd-menu-item\n *ngFor=\"let tab of _visualOrder.overflowing\"\n (onSelect)=\"_overflowingTabHeaderClickHandler(tab.panel)\"\n >\n <div fd-menu-interactive>\n <ng-container\n *ngTemplateOutlet=\"\n !tab.titleTemplate && mode === 'icon-only' ? iconOnlyTemplate : tab.titleTemplate || textTitle;\n context: { $implicit: tab }\n \"\n ></ng-container>\n </div>\n </li>\n</fd-menu>\n\n<ng-template #textTitle let-tab>\n <span fd-menu-title>{{ tab.title }}</span>\n</ng-template>\n\n<ng-template #iconOnlyTemplate let-tab>\n <span fd-tab-icon [icon]=\"tab.glyph\">\n <p fd-tab-count>{{ tab.count }}</p>\n </span>\n</ng-template>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n QueryList,\n ViewEncapsulation,\n OnChanges,\n OnInit,\n Optional\n} from '@angular/core';\nimport { TabLinkDirective } from '../tab-link/tab-link.directive';\nimport { TabItemDirective } from '../tab-item/tab-item.directive';\nimport { TabsService } from '../tabs.service';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { TabModes, TabSizes } from '../tab-list.component';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-tab-nav]',\n template: `<ng-content></ng-content>`,\n providers: [TabsService],\n styleUrls: ['./tab-nav.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TabNavComponent implements AfterContentInit, OnChanges, OnInit, OnDestroy, CssClassBuilder {\n /** Apply user custom styles */\n @Input()\n class: string;\n\n /**\n * Whether user wants to use tab component in certain mode. Modes available:\n * 'icon-only' | 'process' | 'filter'\n */\n @Input()\n mode: TabModes;\n\n /** Size of tab, it's mostly about adding spacing on tab container, available sizes 's' | 'm' | 'l' | 'xl' | 'xxl' */\n @Input()\n size: TabSizes = 'm';\n\n /** Whether user wants to use tab component in compact mode */\n @Input()\n compact?: boolean;\n\n /** @hidden */\n @ContentChildren(TabLinkDirective)\n links: QueryList<TabLinkDirective>;\n\n /** @hidden */\n @ContentChildren(TabItemDirective)\n items: QueryList<TabItemDirective>;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** An RxJS Subject that will kill the data stream upon queryList changes (for unsubscribing) */\n private readonly _onRefresh$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n constructor(\n private _tabsService: TabsService,\n private _elementRef: ElementRef,\n @Optional() private _contentDensityService: ContentDensityService\n ) {}\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._refreshSubscription();\n this._listenOnTabSelect();\n this._listenOnContentQueryListChange();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this.buildComponentCssClass();\n })\n );\n }\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [\n `fd-tabs`,\n this.mode ? 'fd-tabs--' + this.mode : '',\n this.compact ? 'fd-tabs--compact' : '',\n `fd-tabs--${this.size}`,\n this.class\n ];\n }\n\n /** HasElementRef interface implementation\n * function used by applyCssClass and applyCssStyle decorators\n */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n\n /** Function that gives possibility to get all the link directives, with and without nav__item wrapper */\n get tabLinks(): TabLinkDirective[] {\n let tabLinks: TabLinkDirective[] = [];\n if (this.links) {\n tabLinks = tabLinks.concat(this.links.map((link) => link));\n }\n if (this.items) {\n tabLinks = tabLinks.concat(this.items.filter((item) => !!item.linkItem).map((item) => item.linkItem));\n }\n return tabLinks;\n }\n\n /**\n * Function to select a new tab from an index.\n * @param tabIndex Index of the tab to select.\n */\n selectTab(tabIndex: number): void {\n this.tabLinks[tabIndex].elementRef.nativeElement.click();\n }\n\n /** @hidden */\n private _listenOnTabSelect(): void {\n this._tabsService.tabSelected\n .pipe(\n takeUntil(this._onDestroy$),\n filter((index) => !this.tabLinks[index].disabled)\n )\n .subscribe((index) => this.selectTab(index));\n }\n\n /**\n * @hidden\n * Every time any of query is changed, ex. tab is removed or added\n * reference to keydown subscriptions handler is renewed\n */\n private _listenOnContentQueryListChange(): void {\n merge(this.links.changes, this.items.changes)\n .pipe(takeUntil(this._onDestroy$))\n .subscribe(() => this._refreshSubscription());\n }\n\n /** Whether any QueryList detects any changes */\n private _refreshSubscription(): void {\n /** Finish all of the streams, form before */\n this._onRefresh$.next();\n\n /** Merge refresh/destroy observables */\n const refreshObs = merge(this._onRefresh$, this._onDestroy$);\n\n this.tabLinks.forEach((tab: TabLinkDirective, index: number) => {\n tab.keyDown.pipe(takeUntil(refreshObs)).subscribe((event) =>\n this._tabsService.tabHeaderKeyHandler(\n index,\n event,\n this.tabLinks.map((link) => link.elementRef.nativeElement)\n )\n );\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TabPanelComponent } from './tab-panel/tab-panel.component';\nimport { TabListComponent } from './tab-list.component';\n\nimport {\n TabCountDirective,\n TabCounterHeaderDirective,\n TabHeaderDirective,\n TabIconComponent,\n TabLabelDirective,\n TabProcessDirective,\n TabProcessIconDirective,\n TabSeparatorDirective,\n TabTagDirective,\n TabTitleDirective\n} from './tab-utils/tab-directives';\nimport { TabNavComponent } from './tab-nav/tab-nav.component';\nimport { TabLinkDirective } from './tab-link/tab-link.directive';\nimport { TabItemDirective } from './tab-item/tab-item.directive';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { ScrollSpyModule } from '@fundamental-ngx/core/scroll-spy';\nimport { TabItemExpandComponent } from './tab-item-expand/tab-item-expand.component';\n\n@NgModule({\n declarations: [\n TabListComponent,\n TabPanelComponent,\n TabTitleDirective,\n TabNavComponent,\n TabLinkDirective,\n TabItemDirective,\n TabTagDirective,\n TabIconComponent,\n TabCountDirective,\n TabLabelDirective,\n TabProcessDirective,\n TabHeaderDirective,\n TabItemExpandComponent,\n TabCounterHeaderDirective,\n TabProcessIconDirective,\n TabSeparatorDirective\n ],\n imports: [CommonModule, IconModule, PopoverModule, ListModule, ButtonModule, MenuModule, ScrollSpyModule],\n exports: [\n TabListComponent,\n TabPanelComponent,\n TabTitleDirective,\n TabNavComponent,\n TabItemDirective,\n TabLinkDirective,\n TabTagDirective,\n TabIconComponent,\n TabCountDirective,\n TabLabelDirective,\n TabProcessDirective,\n TabHeaderDirective,\n TabCounterHeaderDirective,\n TabProcessIconDirective,\n TabSeparatorDirective\n ]\n})\nexport class TabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-tabs.mjs","sources":["../../../../libs/core/src/lib/tabs/tab-utils/tab-directives.ts","../../../../libs/core/src/lib/tabs/tabs.service.ts","../../../../libs/core/src/lib/tabs/tab-panel/tab-panel.component.ts","../../../../libs/core/src/lib/tabs/tab-panel/tab-panel.component.html","../../../../libs/core/src/lib/tabs/tab-item-expand/tab-item-expand.component.ts","../../../../libs/core/src/lib/tabs/tab-item-expand/tab-item-expand.component.html","../../../../libs/core/src/lib/tabs/tab-link/tab-link.directive.ts","../../../../libs/core/src/lib/tabs/tab-item/tab-item.directive.ts","../../../../libs/core/src/lib/tabs/tab-utils/tab-info.class.ts","../../../../libs/core/src/lib/tabs/tab-list.component.ts","../../../../libs/core/src/lib/tabs/tab-list.component.html","../../../../libs/core/src/lib/tabs/tab-nav/tab-nav.component.ts","../../../../libs/core/src/lib/tabs/tabs.module.ts","../../../../libs/core/src/lib/tabs/fundamental-ngx-core-tabs.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive used to identify the template which will populate the tab header.\n * Used to achieve complex headers that require more than a string.\n *\n * ```html\n * <fd-tab>\n * <ng-template fd-tab-title>\n * <fd-icon [glyph]=\"'delete'\"></fd-icon>\n * <span>Tab Label</span>\n * </ng-template>\n * </fd-tab>\n * ```\n */\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-title-template]'\n})\nexport class TabTitleDirective {}\n\n/**\n * Directive for counter element, available in most of modes on `tab` component\n */\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-count]'\n})\nexport class TabCountDirective {\n /** @hidden */\n @HostBinding('class.fd-tabs__count')\n fdTabsCountClass = true;\n}\n\n/**\n * Directive for icon element, available in most of modes on `tab` component\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/directive-selector, @angular-eslint/component-selector\n selector: '[fd-tab-icon]',\n template: `\n <fd-icon role=\"presentation\" *ngIf=\"icon\" [glyph]=\"icon\"></fd-icon>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TabIconComponent implements CssClassBuilder, OnChanges {\n /** Apply user custom styles */\n @Input()\n class: string;\n\n /**\n * The icon to include inside the element\n * See the icon page for the list of icons.\n */\n @Input()\n icon: string;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden\n * Function runs when component is initialized\n * function should build component css class\n * function should build css style\n */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return ['fd-tabs__icon', this.class];\n }\n\n /** HasElementRef interface implementation\n * function used by applyCssClass and applyCssStyle decorators\n */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-tag]',\n host: {\n class: 'fd-tabs__tag'\n }\n})\nexport class TabTagDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-label]',\n host: {\n class: 'fd-tabs__label'\n }\n})\nexport class TabLabelDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-process]',\n host: {\n class: 'fd-tabs__process'\n }\n})\nexport class TabProcessDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-header]',\n host: {\n class: 'fd-tabs__header'\n }\n})\nexport class TabHeaderDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-counter-header]',\n host: {\n class: 'fd-tabs__counter-header'\n }\n})\nexport class TabCounterHeaderDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-process-icon]',\n host: {\n class: 'fd-tabs__process-icon'\n }\n})\nexport class TabProcessIconDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-separator]',\n host: {\n class: 'fd-tabs__separator'\n }\n})\nexport class TabSeparatorDirective {}\n","import { Injectable, Optional } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RtlService } from '@fundamental-ngx/core/utils';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\n\n/**\n * Service that is responsible for providing keyboard actions support\n * */\n@Injectable()\nexport class TabsService {\n /** Event is thrown always when tab is selected by keyboard actions */\n readonly tabSelected: Subject<number> = new Subject<number>();\n\n /** Event is thrown always, when some property is changed */\n readonly tabPanelPropertyChanged: Subject<void> = new Subject<void>();\n\n constructor(@Optional() private _rtlService: RtlService) {}\n\n /** @hidden */\n tabHeaderKeyHandler(index: number, event: any, elements: HTMLElement[]): void {\n const rtlDirection: boolean = this._rtlService && this._rtlService.rtl.getValue();\n\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n if (!rtlDirection) {\n this._focusPrevious(index, elements);\n } else {\n this._focusNext(index, elements);\n }\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n if (!rtlDirection) {\n this._focusNext(index, elements);\n } else {\n this._focusPrevious(index, elements);\n }\n } else if (KeyUtil.isKeyCode(event, [SPACE, ENTER])) {\n event.preventDefault();\n this.tabSelected.next(index);\n }\n }\n\n /** @hidden */\n private _focusNext(index: number, elements: HTMLElement[]): void {\n if (index + 1 < elements.length) {\n elements[index + 1].focus();\n } else {\n elements[0].focus();\n }\n }\n\n /** @hidden */\n private _focusPrevious(index: number, elements: HTMLElement[]): void {\n if (index - 1 >= 0) {\n elements[index - 1].focus();\n } else {\n elements[elements.length - 1].focus();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Optional,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { TabTitleDirective } from '../tab-utils/tab-directives';\nimport { TabItemState } from '../tab-item/tab-item.directive';\nimport { TabsService } from '../tabs.service';\nimport { Subject } from 'rxjs';\nimport { Nullable } from '@fundamental-ngx/core/shared';\n\nlet tabPanelUniqueId = 0;\n\nexport class TabPanelStateChange {\n constructor(public target: TabPanelComponent, public state: boolean) {}\n}\n\n/**\n * Represents the body of a tab element. It also contains elements pertaining to the associated tab header.\n */\n@Component({\n selector: 'fd-tab',\n templateUrl: './tab-panel.component.html',\n host: {\n role: 'tabpanel',\n class: 'fd-tabs__panel',\n '[attr.id]': 'id',\n '[class.is-expanded]': 'expanded',\n '[attr.aria-expanded]': 'expanded ? true : null'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TabPanelComponent implements OnChanges {\n /** Id of the tab. If none is provided, one will be generated. */\n @Input()\n id: string = 'fd-tab-panel' + tabPanelUniqueId++;\n\n /** Aria-label of the tab. Also applied to the tab header. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Id of the element that labels the tab. Also applied to the tab header. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** The title of tab, depending on mode used, it will be placed in different position */\n @Input()\n title: Nullable<string>;\n\n /** The count of tab, depending on mode used, it will be placed in different position */\n @Input()\n count: Nullable<string>;\n\n /** Glyph icon, it can be used only on */\n @Input()\n glyph: string;\n\n /** Glyph icon, it can be used only on */\n @Input()\n header = false;\n\n /** Disabled state for tab item */\n @Input()\n disabled = false;\n\n /** Semantic type of the tab item */\n @Input()\n tabState: Nullable<TabItemState>;\n\n /** Event that is emitted when the tab panel has been opened. */\n @Output()\n opened = new EventEmitter<void>();\n\n /** Event that is emitted when the tab panel has been closed. */\n @Output()\n closed = new EventEmitter<void>();\n\n /** @hidden */\n @ContentChild(TabTitleDirective, { read: TemplateRef })\n titleTemplate: TemplateRef<any>;\n\n /** @hidden Event that is emitted when the tab panel . */\n _expandedStateChange = new Subject<TabPanelStateChange>();\n\n /** @hidden Whether to display tab panel content */\n private _expanded = false;\n\n /** @hidden */\n constructor(\n public elementRef: ElementRef,\n private _changeDetRef: ChangeDetectorRef,\n @Optional() private _tabsService: TabsService\n ) {}\n\n /** @hidden\n * Thanks to OnPush change strategy detection on tab-list parent component,\n * every change of any property should be reported. */\n public ngOnChanges(): void {\n if (this._tabsService) {\n this._tabsService.tabPanelPropertyChanged.next();\n }\n }\n\n /** Whether tab panel content is expanded */\n get expanded(): boolean {\n return this._expanded;\n }\n\n /** Whether to expand tab panel content */\n open(open: boolean): void {\n this._expandedStateChange.next(new TabPanelStateChange(this, open));\n }\n\n /** @hidden Set new expand state */\n _expand(expanded: boolean): void {\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n\n if (expanded) {\n this.opened.emit();\n } else {\n this.closed.emit();\n }\n\n this._changeDetRef.detectChanges();\n }\n }\n}\n","<ng-container *ngIf=\"expanded\">\n <ng-content></ng-content>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Represents a list of tab-panels.\n */\n@Component({\n selector: 'fd-item-expand',\n templateUrl: './tab-item-expand.component.html',\n styleUrls: ['./tab-item-expand.component.scss'],\n host: {\n role: 'tab',\n class: 'fd-tabs__item fd-tabs__item--overflow'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TabItemExpandComponent {\n /** @hidden Text visible in the trigger */\n @Input()\n label = 'More';\n}\n","<a class=\"fd-tabs__link\" role=\"tab\" [attr.tabindex]=\"0\">\n <span *ngIf=\"label\" fd-tab-tag>{{ label }}</span>\n <fd-icon glyph=\"slim-arrow-down\" aria-label=\"See More\"></fd-icon>\n</a>\n","import { Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\nimport { AbstractFdNgxClass } from '@fundamental-ngx/core/utils';\n\n/**\n * Tab link for nav mode\n *\n * ```html\n * <a fd-tab-link>\n * link\n * </a>\n * ```\n */\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-link]',\n host: {\n role: 'tab',\n tabindex: '-1'\n }\n})\nexport class TabLinkDirective extends AbstractFdNgxClass {\n /** Whether the link is active */\n @Input()\n @HostBinding('attr.aria-selected')\n active: boolean;\n\n /**\n * Only visual / accessibility thing on tab-nav mode\n * RouterLink does not respect preventDefault/stopPropagation\n */\n @Input()\n @HostBinding('attr.aria-disabled')\n @HostBinding('class.is-disabled')\n disabled: boolean;\n\n /** Event Emitted always when, any keyboard event is dispatched on this element */\n @Output()\n readonly keyDown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n\n /** @hidden */\n _setProperties(): void {\n this._addClassToElement('fd-tabs__link');\n if (this.active) {\n this._addClassToElement('is-selected');\n }\n }\n\n /** @hidden */\n constructor(public elementRef: ElementRef) {\n super(elementRef);\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n onKeyDown(e: KeyboardEvent): void {\n this.keyDown.emit(e);\n }\n}\n","import { ContentChild, Directive, ElementRef, HostBinding, Input, OnChanges, OnInit } from '@angular/core';\nimport { applyCssClass, CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { Nullable } from '@fundamental-ngx/core/shared';\nimport { TabLinkDirective } from '../tab-link/tab-link.directive';\n\nexport type TabItemState = 'success' | 'error' | 'warning' | 'information' | 'neutral';\n\n/**\n * Tab Item is optional wrapper for Tab link\n *\n * ```html\n * <div fd-tab-item>\n * <a fd-tab-link>\n * link\n * </a>\n * </div>\n * ```\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tab-item]'\n})\nexport class TabItemDirective implements CssClassBuilder, OnChanges, OnInit {\n /** Apply user custom styles */\n @Input()\n class = '';\n\n /** Semantic type of the tab item */\n @Input()\n tabItemState: Nullable<TabItemState>;\n\n /** This should be used only on `filterMode`. Flag should be enable for first item */\n @Input()\n header: boolean;\n\n /** Disabled state for tab item */\n @Input()\n @HostBinding('attr.aria-disabled')\n @HostBinding('class.is-disabled')\n disabled = false;\n\n /** Defines if there will be added fd-tabs__item class. Enabled by default. */\n @Input()\n fdTabItemClass = true;\n\n /** @hidden */\n @ContentChild(TabLinkDirective)\n linkItem: TabLinkDirective;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n @applyCssClass\n /** @hidden */\n buildComponentCssClass(): string[] {\n return [\n this.fdTabItemClass ? 'fd-tabs__item' : '',\n this.header ? 'fd-tabs__item--header' : '',\n this.tabItemState ? `fd-tabs__item--${this.tabItemState}` : '',\n this.class\n ];\n }\n\n /** @hidden */\n elementRef(): ElementRef {\n return this._elementRef;\n }\n}\n","import { TemplateRef } from '@angular/core';\n\nimport { TabPanelComponent } from '../tab-panel/tab-panel.component';\nimport { TabItemState } from '../tab-item/tab-item.directive';\nimport { Nullable } from '@fundamental-ngx/core/shared';\n\n/** @hidden */\nexport class TabInfo {\n /** Whether the tab is active */\n active: boolean;\n\n /** @hidden Width of the tab header */\n headerWidth: number;\n\n /** Corresponding tab panel */\n panel: TabPanelComponent;\n\n /** @hidden */\n constructor(tabPanel: TabPanelComponent) {\n this.panel = tabPanel;\n this.active = tabPanel.expanded;\n }\n\n /** Tab header title */\n get title(): Nullable<string> {\n return this.panel.title;\n }\n\n /** Whether the tab is disabled */\n get disabled(): boolean {\n return this.panel.disabled;\n }\n\n /** Whether the tab is tab header */\n get isHeader(): boolean {\n return this.panel.header;\n }\n\n /** @hidden */\n get id(): Nullable<string> {\n return this.panel.id;\n }\n\n /** @hidden */\n get ariaLabel(): Nullable<string> {\n return this.panel.ariaLabel;\n }\n\n /** @hidden */\n get ariaLabelledBy(): Nullable<string> {\n return this.panel.ariaLabelledBy;\n }\n\n /** @hidden */\n get tabState(): Nullable<TabItemState> {\n return this.panel.tabState;\n }\n\n /** @hidden */\n get titleTemplate(): TemplateRef<any> {\n return this.panel.titleTemplate;\n }\n\n /** @hidden */\n get count(): Nullable<string> {\n return this.panel.count;\n }\n\n /** @hidden */\n get glyph(): string {\n return this.panel.glyph;\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { fromEvent, merge, Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, delay, filter, first, map, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n getElementCapacity,\n getElementWidth,\n KeyUtil,\n resizeObservable,\n scrollTop,\n ContentDensityService\n} from '@fundamental-ngx/core/utils';\nimport { TabItemExpandComponent } from './tab-item-expand/tab-item-expand.component';\nimport { TabLinkDirective } from './tab-link/tab-link.directive';\nimport { TabItemDirective } from './tab-item/tab-item.directive';\nimport { TabPanelComponent } from './tab-panel/tab-panel.component';\nimport { TabInfo } from './tab-utils/tab-info.class';\nimport { TabsService } from './tabs.service';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { Nullable } from '@fundamental-ngx/core/shared';\n\nexport type TabModes = 'icon-only' | 'process' | 'filter';\n\nexport type TabSizes = 's' | 'm' | 'l' | 'xl' | 'xxl';\n\n/**\n * Represents a list of tab-panels.\n */\n@Component({\n selector: 'fd-tab-list',\n templateUrl: './tab-list.component.html',\n styleUrls: ['./tab-list.component.scss'],\n host: {\n class: 'fd-tabs-custom'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TabsService]\n})\nexport class TabListComponent implements AfterContentInit, AfterViewInit, OnDestroy, OnInit {\n /** Whether user wants to use tab component in compact mode */\n @Input()\n compact?: boolean;\n\n /** Size of tab, it's mostly about adding spacing on tab container, available sizes 's' | 'm' | 'l' | 'xl' | 'xxl' */\n @Input()\n size: TabSizes = 'm';\n\n /**\n * Whether user wants to use tab component in certain mode. Modes available:\n * 'icon-only' | 'process' | 'filter'\n */\n @Input()\n mode: TabModes;\n\n /** Whether to move tabs overflowing in the tab bar to the dropdown */\n @Input()\n collapseOverflow = true;\n\n /** Limits the maximum number of tabs visible in the tab bar in collapseOverflow mode.\n * Other tabs will be moved to the collapsed tabs dropdown */\n @Input()\n maxVisibleTabs: Nullable<number> = null;\n\n /** Whether to open tab content one under another without collapsing */\n @Input()\n stackContent = false;\n\n /** Maximum height of the content */\n @Input()\n maxContentHeight = '100%';\n\n /** Whether to enable collapsing expanded tab on expanded tab click */\n @Input()\n collapsibleTabs = false;\n\n /** Text visible in expand overflow trigger */\n @Input()\n expandOverflowText = 'More';\n\n /** Event emitted when the selected panel changes. */\n @Output()\n selectedTabChange = new EventEmitter<TabPanelComponent>();\n\n /** @hidden */\n @ContentChildren(TabPanelComponent)\n tabPanels: QueryList<TabPanelComponent>;\n\n /** @hidden */\n @ViewChildren(TabLinkDirective)\n tabHeaderLinks: QueryList<TabLinkDirective>;\n\n /** @hidden */\n @ViewChildren(TabItemDirective)\n tabHeaders: QueryList<TabItemDirective>;\n\n /** @hidden */\n @ViewChild(TabItemExpandComponent, { read: ElementRef })\n overflowTrigger: ElementRef;\n\n /** @hidden */\n @ViewChild('headerContainer', { read: ElementRef })\n headerContainer: ElementRef;\n\n /** @hidden */\n @ViewChild('contentContainer', { read: ElementRef, static: true })\n contentContainer: ElementRef;\n\n /** @hidden Tabs divided into tabs visible in the tab-bar and collapsed */\n _visualOrder: { [key in 'visible' | 'overflowing']: TabInfo[] } = { visible: [], overflowing: [] };\n\n /** @hidden Width of the expand overflowing tabs trigger */\n _overflowTriggerWidth: number;\n\n /** @hidden Whether the tabs header is collapsed */\n _isCollapsed = true;\n\n /** @hidden Collection of tabs in original order */\n _tabArray: TabInfo[];\n\n /** @hidden Whether to disable scroll spy */\n _disableScrollSpy = false;\n\n /** @hidden */\n _init = true;\n\n /** @hidden */\n private _numbOfVisibleTabs: number;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n constructor(\n private _tabsService: TabsService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _elRef: ElementRef,\n @Optional() private _contentDensityService: ContentDensityService\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this._changeDetectorRef.markForCheck();\n })\n );\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._setupTabPanelsChangeListeners();\n }\n\n ngAfterViewInit(): void {\n this._setupCollapsingOverflowedTabs();\n this._listenOnKeyboardTabSelect();\n this._listenOnPropertiesChange();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** Fits tabs in the tab bar and moves overflowing elements into a dropdown */\n refreshOverflow(): void {\n this._hideOverflowingItems();\n this._keepActiveTabVisible();\n }\n\n /** @hidden */\n _tabHeaderClickHandler(tabPanel: TabPanelComponent): void {\n this._expandTab(tabPanel, !tabPanel.expanded);\n }\n\n /** @hidden */\n _overflowingTabHeaderClickHandler(tabPanel: TabPanelComponent): void {\n this._expandTab(tabPanel, true, false);\n this._resetVisualOrder();\n this._keepActiveTabVisible();\n this._detectChanges();\n }\n\n /** @hidden */\n _tabHeaderKeyHandler(index: number, event: any): void {\n this._tabsService.tabHeaderKeyHandler(\n index,\n event,\n this.tabHeaderLinks.map((tab) => tab.elementRef.nativeElement)\n );\n }\n\n /** @hidden */\n _highlightActiveTab({ id }: HTMLElement): void {\n const tab = this._tabArray.find((_tab) => _tab.id === id);\n if (tab) {\n this._activateStackedTab(tab.panel, false);\n this.selectedTabChange.emit(tab.panel);\n }\n }\n\n /** @hidden */\n _onTriggerKeydown(event: KeyboardEvent, menuRef: MenuComponent): void {\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n event.preventDefault();\n menuRef.toggle();\n }\n }\n\n /** @hidden */\n private get _tabPanelsChange$(): Observable<TabPanelComponent[]> {\n return this.tabPanels.changes.pipe(\n startWith(this.tabPanels),\n map((tabPanels) => tabPanels.toArray(), takeUntil(this._onDestroy$))\n );\n }\n\n /** @hidden */\n private _detectChanges(): void {\n if (this._changeDetectorRef && !this._changeDetectorRef['destroyed']) {\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /** @hidden */\n private _setupTabPanelsChangeListeners(): void {\n this._listenOnTabPanelsAndUpdateStorageStructures();\n this._listenOnTabPanelsAndSetupStackedContent();\n this._listenOnTabPanelsExpandedChange();\n this._listenOnTabPanelsAndInitiallyExpandTabPanel();\n }\n\n /** @hidden Setup mechanisms required for handling the overflowing tabs behavior */\n private _setupCollapsingOverflowedTabs(): void {\n if (this.collapseOverflow) {\n this._cacheTabsDimensions(this.tabHeaders.toArray());\n this._listenOnTabPanelsChangeAndCollapse();\n this._listenOnResizeAndHideItems();\n this.refreshOverflow();\n } else {\n this._isCollapsed = false;\n }\n }\n\n /** @hidden Setup mechanisms required for handling the stacked content behavior */\n private _listenOnTabPanelsAndSetupStackedContent(): void {\n if (this.stackContent) {\n this._tabPanelsChange$\n .pipe(delay(0), takeUntil(this._onDestroy$))\n .subscribe(() =>\n this._tabArray.filter((tab) => !tab.panel.disabled).forEach((tab) => tab.panel._expand(true))\n );\n }\n }\n\n /** @hidden */\n private _listenOnTabPanelsAndUpdateStorageStructures(): void {\n this._tabPanelsChange$\n .pipe(\n map((tabPanels) => tabPanels.map((el) => new TabInfo(el))),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tabs) => {\n this._tabArray = tabs;\n this._numbOfVisibleTabs = tabs.length;\n this._resetVisualOrder();\n });\n }\n\n /** @hidden */\n private _listenOnTabPanelsExpandedChange(): void {\n this._tabPanelsChange$\n .pipe(\n map((tabPanels) => tabPanels.map((el) => el._expandedStateChange.asObservable())),\n switchMap((tabPanels) => merge(...tabPanels)),\n takeUntil(this._onDestroy$)\n )\n .subscribe((event) => this._expandTab(event.target, event.state));\n }\n\n /** @hidden */\n private _listenOnTabPanelsAndInitiallyExpandTabPanel(): void {\n this._tabPanelsChange$\n .pipe(\n filter(() => !this._tabArray.some((tab) => tab.active)),\n map(() => this._tabArray.find((tab) => !tab.disabled)),\n filter((tab) => !!tab),\n delay(0),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tab) => tab && this._expandTab(tab.panel, true));\n }\n\n /** @hidden */\n private _listenOnPropertiesChange(): void {\n merge(this._tabsService.tabPanelPropertyChanged, this.tabPanels.changes)\n .pipe(takeUntil(this._onDestroy$))\n .subscribe(() => this._detectChanges());\n }\n\n /** @hidden */\n private _listenOnKeyboardTabSelect(): void {\n this._tabsService.tabSelected\n .pipe(\n map((index) => this._visualOrder.visible[index].panel),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tabPanel) => this._expandTab(tabPanel, !tabPanel.expanded));\n }\n\n /** @hidden */\n private _listenOnResizeAndHideItems(): void {\n resizeObservable(this._elRef.nativeElement)\n .pipe(debounceTime(20), takeUntil(this._onDestroy$))\n .subscribe(() => {\n this.refreshOverflow();\n this._detectChanges();\n });\n }\n\n /** @hidden */\n private _listenOnTabPanelsChangeAndCollapse(): void {\n const $tabHeadersSource = this.tabHeaders.changes.pipe(\n map((tabHeaders) => tabHeaders.toArray()),\n first(),\n takeUntil(this._onDestroy$)\n );\n\n this.tabPanels.changes\n .pipe(\n switchMap(() => $tabHeadersSource),\n takeUntil(this._onDestroy$)\n )\n .subscribe((tabHeaders) => {\n this._cacheTabsWidth(tabHeaders);\n this.refreshOverflow();\n this._detectChanges();\n });\n }\n\n /** @hidden */\n private _activateStackedTab(tabPanel: TabPanelComponent, scroll = true): void {\n if (scroll) {\n this._scrollToPanel(tabPanel);\n }\n this._tabArray.forEach((tab) => (tab.active = tab.panel === tabPanel));\n }\n\n /** @hidden */\n private _activateExpandableTab(tabPanel: TabPanelComponent, expand: boolean): void {\n const collapse = this.collapsibleTabs && !expand;\n this._tabArray.forEach((tab) => {\n const isActive = tab.panel === tabPanel && !collapse;\n tab.panel._expand(isActive);\n tab.active = isActive;\n });\n }\n\n /** @hidden */\n private _expandTab(tabPanel: TabPanelComponent, expand: boolean, detectChanges = true): void {\n if (this.stackContent) {\n this._activateStackedTab(tabPanel);\n } else {\n if (!this._canChangeExpandState(tabPanel, expand)) {\n return;\n }\n\n this._activateExpandableTab(tabPanel, expand);\n }\n\n if (detectChanges) {\n this._detectChanges();\n }\n this.selectedTabChange.emit(tabPanel);\n }\n\n /** @hidden Divides tabs into tabs visible in the header and moved tabs to the dropdown */\n private _hideOverflowingItems(): void {\n const extraFreeSpace = 1;\n const capacity = getElementCapacity(this.headerContainer);\n const tabsLimit = this.maxVisibleTabs || Number.MAX_SAFE_INTEGER;\n const totalRequiredWidth = this._tabArray.reduce((total, tab) => total + tab.headerWidth, 0);\n\n this._isCollapsed = totalRequiredWidth > capacity - extraFreeSpace || tabsLimit < this._tabArray.length;\n\n const requiredFreeSpace = this._isCollapsed ? this._overflowTriggerWidth : 0;\n this._numbOfVisibleTabs = 0;\n let capacityLeft = capacity;\n\n for (let i = 0; capacityLeft > requiredFreeSpace && this._tabArray.length > i && tabsLimit > i; i++) {\n const width = this._tabArray[i].headerWidth;\n\n if (capacityLeft - width >= requiredFreeSpace + extraFreeSpace) {\n this._numbOfVisibleTabs++;\n }\n capacityLeft -= width;\n }\n this._resetVisualOrder();\n }\n\n /** @hidden Check whether the active tab is visible */\n private _keepActiveTabVisible(): void {\n const activeTab = this._visualOrder.overflowing.find((tab) => tab.active);\n\n if (activeTab) {\n this._moveToVisible(activeTab);\n }\n }\n\n /** @hidden Make given tab visible in the tab bar*/\n private _moveToVisible(tabToMove: TabInfo): void {\n const activeTabWidth = tabToMove.headerWidth;\n const numOfVisibleTabs = this._numbOfVisibleTabs;\n const capacity = getElementCapacity(this.headerContainer);\n const tabsLimit = this.maxVisibleTabs || Number.MAX_SAFE_INTEGER;\n const visibleTabsWidth = this._visualOrder.visible.reduce((total, tab) => total + tab.headerWidth, 0);\n\n let widthRequired = activeTabWidth - (capacity - visibleTabsWidth - this._overflowTriggerWidth);\n let numOfTabsToMove = 0;\n\n /** As long as:\n * - There is not enough space for tab to move\n * - There are other tabs to move from visible to overflow\n * - Number of visible tabs is larger than the limit */\n for (\n let i = numOfVisibleTabs - 1;\n (widthRequired > 0 && i >= 0) || tabsLimit < numOfVisibleTabs + 1 - numOfTabsToMove;\n i--\n ) {\n widthRequired -= this._tabArray[i].headerWidth;\n numOfTabsToMove++;\n }\n\n const tabToMoveIndex = this._visualOrder.overflowing.indexOf(tabToMove);\n const [selectedTab] = this._visualOrder.overflowing.splice(tabToMoveIndex, 1);\n const tabsToMove = this._visualOrder.visible.splice(-numOfTabsToMove, numOfTabsToMove, selectedTab);\n this._visualOrder.overflowing.unshift(...tabsToMove);\n this._numbOfVisibleTabs = this._visualOrder.visible.length;\n }\n\n /** @hidden Caches width dimension of the elements in the tabs header */\n private _cacheTabsDimensions(tabHeaders: TabItemDirective[]): void {\n this._overflowTriggerWidth = Math.ceil(getElementWidth(this.overflowTrigger));\n this._cacheTabsWidth(tabHeaders);\n }\n\n /** @hidden Caches the width of the tabs */\n private _cacheTabsWidth(tabHeaders: TabItemDirective[]): void {\n tabHeaders.forEach((item, i) => {\n this._tabArray[i].headerWidth = Math.ceil(getElementWidth(item.elementRef(), true));\n });\n }\n\n /** @hidden */\n private _resetVisualOrder(): void {\n this._visualOrder = {\n visible: this._tabArray.slice(0, this._numbOfVisibleTabs),\n overflowing: this._tabArray.slice(this._numbOfVisibleTabs)\n };\n }\n\n /** @hidden */\n private _scrollToPanel(tabPanel: TabPanelComponent): void {\n const panelElement = tabPanel.elementRef.nativeElement;\n const containerElement = this.contentContainer.nativeElement;\n const distanceToScroll = panelElement.offsetTop - containerElement.offsetTop;\n const maximumScrollTop = containerElement.scrollHeight - containerElement.clientHeight;\n const currentScrollPosition = Math.ceil(containerElement.scrollTop);\n\n if (!(currentScrollPosition === maximumScrollTop && distanceToScroll > maximumScrollTop)) {\n !this._init ? (this._disableScrollSpy = true) : (this._init = false);\n fromEvent(containerElement, 'scroll')\n .pipe(debounceTime(100), first(), takeUntil(this._onDestroy$))\n .subscribe(() => (this._disableScrollSpy = false));\n scrollTop(containerElement, distanceToScroll);\n }\n }\n\n /** @hidden Whether tab can be expanded/collapsed */\n private _canChangeExpandState(tabPanel: TabPanelComponent, expand: boolean): boolean {\n return !tabPanel.disabled && expand !== tabPanel.expanded && expand === false ? this.collapsibleTabs : true;\n }\n}\n","<div\n #headerContainer\n role=\"tablist\"\n class=\"fd-tabs\"\n [class]=\"(mode ? 'fd-tabs--' + mode : '') + (' fd-tabs--' + size)\"\n [class.fd-tabs--compact]=\"compact\"\n>\n <div class=\"fd-tabs__wrapper\" [class.fd-tabs__wrapper--collapsible]=\"_isCollapsed\">\n <ng-container *ngFor=\"let tab of _visualOrder.visible; let i = index; let last = last\">\n <div fd-tab-item [header]=\"tab.isHeader\" [tabItemState]=\"tab.tabState\" [attr.aria-selected]=\"tab.active\">\n <a\n fd-tab-link\n [attr.tabindex]=\"tab.active ? '0' : '-1'\"\n [attr.aria-controls]=\"tab.id\"\n [attr.aria-label]=\"tab.ariaLabel || null\"\n [attr.aria-labelledby]=\"!tab.ariaLabel && tab.ariaLabelledBy ? tab.ariaLabelledBy : null\"\n [active]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n (keydown)=\"_tabHeaderKeyHandler(i, $event)\"\n (click)=\"_tabHeaderClickHandler(tab.panel)\"\n >\n <ng-container *ngTemplateOutlet=\"tab.titleTemplate || null\"></ng-container>\n\n <ng-container *ngIf=\"!tab.titleTemplate\" [ngSwitch]=\"mode\">\n <ng-container *ngSwitchCase=\"'filter'\">\n <span fd-tab-header *ngIf=\"tab.isHeader\">\n <span fd-tab-counter-header *ngIf=\"tab.count\">{{ tab.count }}</span>\n <span fd-tab-label *ngIf=\"tab.title\">{{ tab.title }}</span>\n </span>\n <ng-container *ngIf=\"!tab.isHeader\">\n <span fd-tab-icon [icon]=\"tab.glyph\">\n <p fd-tab-count>{{ tab.count }}</p>\n </span>\n <span fd-tab-label>{{ tab.title }}</span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon-only'\">\n <span fd-tab-icon [icon]=\"tab.glyph\">\n <p fd-tab-count>{{ tab.count }}</p>\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'process'\">\n <span fd-tab-icon *ngIf=\"tab.glyph\" [icon]=\"tab.glyph\"></span>\n <div fd-tab-process>\n <span fd-tab-label *ngIf=\"tab.count\">{{ tab.count }}</span>\n <span fd-tab-label *ngIf=\"tab.title\">{{ tab.title }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <p fd-tab-count *ngIf=\"tab.count\">{{ tab.count }}</p>\n <span fd-tab-tag>{{ tab.title }}</span>\n </ng-container>\n </ng-container>\n </a>\n <div fd-tab-process-icon *ngIf=\"mode === 'process' && !last\"></div>\n </div>\n\n <div *ngIf=\"tab.isHeader\" fd-tab-separator></div>\n </ng-container>\n </div>\n\n <fd-item-expand\n *ngIf=\"_isCollapsed\"\n [fdMenuTrigger]=\"menu\"\n [label]=\"expandOverflowText\"\n (keydown)=\"_onTriggerKeydown($event, menu)\"\n >\n </fd-item-expand>\n</div>\n\n<div\n #contentContainer\n class=\"fd-tabs__content\"\n [style.maxHeight]=\"maxContentHeight\"\n fdScrollSpy\n [trackedTags]=\"['fd-tab']\"\n [scrollSpyDisabled]=\"_disableScrollSpy\"\n (spyChange)=\"_highlightActiveTab($event)\"\n>\n <ng-content></ng-content>\n</div>\n\n<fd-menu #menu>\n <li\n fd-menu-item\n *ngFor=\"let tab of _visualOrder.overflowing\"\n (onSelect)=\"_overflowingTabHeaderClickHandler(tab.panel)\"\n >\n <div fd-menu-interactive>\n <ng-container\n *ngTemplateOutlet=\"\n !tab.titleTemplate && mode === 'icon-only' ? iconOnlyTemplate : tab.titleTemplate || textTitle;\n context: { $implicit: tab }\n \"\n ></ng-container>\n </div>\n </li>\n</fd-menu>\n\n<ng-template #textTitle let-tab>\n <span fd-menu-title>{{ tab.title }}</span>\n</ng-template>\n\n<ng-template #iconOnlyTemplate let-tab>\n <span fd-tab-icon [icon]=\"tab.glyph\">\n <p fd-tab-count>{{ tab.count }}</p>\n </span>\n</ng-template>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n QueryList,\n ViewEncapsulation,\n OnChanges,\n OnInit,\n Optional\n} from '@angular/core';\nimport { TabLinkDirective } from '../tab-link/tab-link.directive';\nimport { TabItemDirective } from '../tab-item/tab-item.directive';\nimport { TabsService } from '../tabs.service';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { TabModes, TabSizes } from '../tab-list.component';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-tab-nav]',\n template: `<ng-content></ng-content>`,\n providers: [TabsService],\n styleUrls: ['./tab-nav.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TabNavComponent implements AfterContentInit, OnChanges, OnInit, OnDestroy, CssClassBuilder {\n /** Apply user custom styles */\n @Input()\n class: string;\n\n /**\n * Whether user wants to use tab component in certain mode. Modes available:\n * 'icon-only' | 'process' | 'filter'\n */\n @Input()\n mode: TabModes;\n\n /** Size of tab, it's mostly about adding spacing on tab container, available sizes 's' | 'm' | 'l' | 'xl' | 'xxl' */\n @Input()\n size: TabSizes = 'm';\n\n /** Whether user wants to use tab component in compact mode */\n @Input()\n compact?: boolean;\n\n /** @hidden */\n @ContentChildren(TabLinkDirective)\n links: QueryList<TabLinkDirective>;\n\n /** @hidden */\n @ContentChildren(TabItemDirective)\n items: QueryList<TabItemDirective>;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** An RxJS Subject that will kill the data stream upon queryList changes (for unsubscribing) */\n private readonly _onRefresh$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n constructor(\n private _tabsService: TabsService,\n private _elementRef: ElementRef,\n @Optional() private _contentDensityService: ContentDensityService\n ) {}\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._refreshSubscription();\n this._listenOnTabSelect();\n this._listenOnContentQueryListChange();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this.buildComponentCssClass();\n })\n );\n }\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [\n `fd-tabs`,\n this.mode ? 'fd-tabs--' + this.mode : '',\n this.compact ? 'fd-tabs--compact' : '',\n `fd-tabs--${this.size}`,\n this.class\n ];\n }\n\n /** HasElementRef interface implementation\n * function used by applyCssClass and applyCssStyle decorators\n */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n\n /** Function that gives possibility to get all the link directives, with and without nav__item wrapper */\n get tabLinks(): TabLinkDirective[] {\n let tabLinks: TabLinkDirective[] = [];\n if (this.links) {\n tabLinks = tabLinks.concat(this.links.map((link) => link));\n }\n if (this.items) {\n tabLinks = tabLinks.concat(this.items.filter((item) => !!item.linkItem).map((item) => item.linkItem));\n }\n return tabLinks;\n }\n\n /**\n * Function to select a new tab from an index.\n * @param tabIndex Index of the tab to select.\n */\n selectTab(tabIndex: number): void {\n this.tabLinks[tabIndex].elementRef.nativeElement.click();\n }\n\n /** @hidden */\n private _listenOnTabSelect(): void {\n this._tabsService.tabSelected\n .pipe(\n takeUntil(this._onDestroy$),\n filter((index) => !this.tabLinks[index].disabled)\n )\n .subscribe((index) => this.selectTab(index));\n }\n\n /**\n * @hidden\n * Every time any of query is changed, ex. tab is removed or added\n * reference to keydown subscriptions handler is renewed\n */\n private _listenOnContentQueryListChange(): void {\n merge(this.links.changes, this.items.changes)\n .pipe(takeUntil(this._onDestroy$))\n .subscribe(() => this._refreshSubscription());\n }\n\n /** Whether any QueryList detects any changes */\n private _refreshSubscription(): void {\n /** Finish all of the streams, form before */\n this._onRefresh$.next();\n\n /** Merge refresh/destroy observables */\n const refreshObs = merge(this._onRefresh$, this._onDestroy$);\n\n this.tabLinks.forEach((tab: TabLinkDirective, index: number) => {\n tab.keyDown.pipe(takeUntil(refreshObs)).subscribe((event) =>\n this._tabsService.tabHeaderKeyHandler(\n index,\n event,\n this.tabLinks.map((link) => link.elementRef.nativeElement)\n )\n );\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TabPanelComponent } from './tab-panel/tab-panel.component';\nimport { TabListComponent } from './tab-list.component';\n\nimport {\n TabCountDirective,\n TabCounterHeaderDirective,\n TabHeaderDirective,\n TabIconComponent,\n TabLabelDirective,\n TabProcessDirective,\n TabProcessIconDirective,\n TabSeparatorDirective,\n TabTagDirective,\n TabTitleDirective\n} from './tab-utils/tab-directives';\nimport { TabNavComponent } from './tab-nav/tab-nav.component';\nimport { TabLinkDirective } from './tab-link/tab-link.directive';\nimport { TabItemDirective } from './tab-item/tab-item.directive';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { ScrollSpyModule } from '@fundamental-ngx/core/scroll-spy';\nimport { TabItemExpandComponent } from './tab-item-expand/tab-item-expand.component';\n\n@NgModule({\n declarations: [\n TabListComponent,\n TabPanelComponent,\n TabTitleDirective,\n TabNavComponent,\n TabLinkDirective,\n TabItemDirective,\n TabTagDirective,\n TabIconComponent,\n TabCountDirective,\n TabLabelDirective,\n TabProcessDirective,\n TabHeaderDirective,\n TabItemExpandComponent,\n TabCounterHeaderDirective,\n TabProcessIconDirective,\n TabSeparatorDirective\n ],\n imports: [CommonModule, IconModule, PopoverModule, ListModule, ButtonModule, MenuModule, ScrollSpyModule],\n exports: [\n TabListComponent,\n TabPanelComponent,\n TabTitleDirective,\n TabNavComponent,\n TabItemDirective,\n TabLinkDirective,\n TabTagDirective,\n TabIconComponent,\n TabCountDirective,\n TabLabelDirective,\n TabProcessDirective,\n TabHeaderDirective,\n TabCounterHeaderDirective,\n TabProcessIconDirective,\n TabSeparatorDirective\n ]\n})\nexport class TabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-theming.mjs","sources":["../../../../libs/core/src/lib/theming/config.ts","../../../../libs/core/src/lib/theming/standard-themes.ts","../../../../libs/core/src/lib/theming/tokens.ts","../../../../libs/core/src/lib/theming/theming.service.ts","../../../../libs/core/src/lib/theming/theming.module.ts","../../../../libs/core/src/lib/theming/fundamental-ngx-core-theming.ts"],"sourcesContent":["import { ThemeDefinition, ThemeStyleLink } from './interfaces/theme.interface';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\n/**\n * Theming Configuration.\n */\nexport class BaseThemingConfig implements ThemingConfig {\n /**\n * Array of user-defined themes.\n */\n customThemes: ThemeDefinition[] = [];\n /**\n * Default theme.\n */\n defaultTheme = 'sap_fiori_3';\n /**\n * Default theme font file. Used as a fallback for themes which do not have own font file.\n */\n defaultFontFile = 'sap_fiori_3';\n /**\n * Whether to exclude default themes from the list of available options. By default, false.\n */\n excludeDefaultThemes = false;\n /**\n * Whether to exclude theme font file from inserting it onto the page. By default, false.\n */\n excludeThemingFonts = false;\n /**\n * URL Query parameter flag to change theme based on the provided parameter.\n */\n themeQueryParam = 'theme';\n /**\n * Whether to change theme if URL Query parameter flag has been found or changed. Default is true.\n */\n changeThemeOnQueryParamChange = true;\n /**\n * Identifiers of theme style links.\n */\n themeStyleLinkIdentifiers: Record<ThemeStyleLink, string> = {\n 'base-theme': 'base-theme-styles',\n 'custom-theme': 'custom-theme-styles',\n fonts: 'theme-font-styles'\n };\n}\n","import { ThemeDefinition } from './interfaces/theme.interface';\n\nexport const STANDARD_THEMES: ThemeDefinition[] = [\n {\n id: 'sap_fiori_3',\n name: 'Fiori 3',\n description: 'Use in regular office environment'\n },\n {\n id: 'sap_fiori_3_dark',\n name: 'Fiori 3 Dark',\n description: 'Use in dimmed environments'\n },\n {\n id: 'sap_fiori_3_hcb',\n name: 'High Contrast Black',\n description: 'Optimized contrast and accessibility for extremely bright environments'\n },\n {\n id: 'sap_fiori_3_hcw',\n name: 'High Contrast White',\n description: 'Optimized contrast and accessibility for extremely dark environments'\n },\n {\n id: 'sap_fiori_3_light_dark',\n name: 'Light Dark'\n },\n {\n id: 'sap_horizon',\n name: 'Morning Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_dark',\n name: 'Evening Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcb',\n name: 'High Contrast Black Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcw',\n name: 'High Contrast White Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\nexport const THEMING_CONFIG_TOKEN = new InjectionToken<Partial<ThemingConfig>>('FdThemingConfig');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { THEME_SWITCHER_ROUTER_MISSING_ERROR } from '@fundamental-ngx/core/utils';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { STANDARD_THEMES } from './standard-themes';\nimport {\n CompleteThemeDefinition,\n CompleteThemingResource,\n ThemeDefinition,\n ThemeStyleLink\n} from './interfaces/theme.interface';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@Injectable()\nexport class ThemingService implements OnDestroy {\n /** @hidden */\n private readonly config = new BaseThemingConfig();\n\n /**\n * Current theme applied to the application.\n */\n get currentTheme(): Observable<CompleteThemeDefinition | null> {\n return this._currentThemeSubject.asObservable();\n }\n\n /** @hidden */\n private readonly _renderer: Renderer2;\n\n /** @hidden */\n private readonly _availableThemes: Map<string, CompleteThemeDefinition>;\n\n /** @hidden */\n private readonly _standardThemes: ThemeDefinition[] = [];\n\n /** @hidden **/\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _currentTheme: CompleteThemeDefinition;\n\n /** @hidden */\n private readonly _currentThemeSubject: BehaviorSubject<CompleteThemeDefinition | null> =\n new BehaviorSubject<CompleteThemeDefinition | null>(null);\n\n /**\n * @hidden\n */\n constructor(\n private _rendererFactory: RendererFactory2,\n @Inject(DOCUMENT) private _document: Document,\n @Optional() private _activatedRoute: ActivatedRoute,\n @Optional()\n @Inject(THEMING_CONFIG_TOKEN)\n private readonly _providedConfig: Partial<ThemingConfig>\n ) {\n this.config = merge(cloneDeep(this.config), cloneDeep(this._providedConfig));\n\n this._renderer = this._rendererFactory.createRenderer(this._document, null);\n\n if (!this.config.excludeDefaultThemes) {\n this._standardThemes = STANDARD_THEMES;\n }\n\n const mergedThemes = this._formatProvidedThemes(this.config.customThemes);\n this._availableThemes = new Map<string, CompleteThemeDefinition>(\n mergedThemes.map((theme) => [theme.id, theme])\n );\n }\n\n /**\n * Initiates theme change based on query parameter or provided default theme in config.\n */\n init(): void {\n if (this.config.changeThemeOnQueryParamChange) {\n this._setThemeByRoute();\n } else {\n this.setTheme(this.config.defaultTheme);\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /**\n * Sets defined theme.\n * @param themeId ID of theme that needs to be used by the application.\n */\n setTheme(themeId: string): boolean {\n const theme = this._availableThemes.get(themeId);\n\n if (!theme) {\n console.warn(\n `Theme with ID '${themeId}' is not found. Please check if ID is correct or provide custom theme for ThemingModule.`\n );\n return false;\n }\n\n this._setThemeResource('base-theme', theme.theming.themingBasePath);\n this._setThemeResource('custom-theme', theme.theming.themePath);\n\n if (!this.config.excludeThemingFonts) {\n this._setThemeResource('fonts', theme.theming.themeFontPath);\n }\n this._currentTheme = theme;\n this._currentThemeSubject.next(theme);\n\n return true;\n }\n\n /**\n * Returns array of available themes.\n */\n getThemes(): CompleteThemeDefinition[] {\n return [...this._availableThemes].map((entry) => entry[1]);\n }\n\n /**\n * @hidden\n * @param type\n * @param resourceUrl\n * @private\n */\n private _setThemeResource(type: ThemeStyleLink, resourceUrl: string): void {\n const linkElm = this._getStyleLinkElement(type);\n\n if (linkElm.getAttribute('href') === resourceUrl) {\n return;\n }\n\n this._renderer.setAttribute(linkElm, 'href', resourceUrl);\n }\n\n /**\n * @hidden\n * @param type\n * @private\n */\n private _getStyleLinkElement(type: ThemeStyleLink): HTMLLinkElement {\n const existingLinkElement = this._document.getElementById(this.config.themeStyleLinkIdentifiers[type]);\n\n if (existingLinkElement) {\n return existingLinkElement as HTMLLinkElement;\n }\n\n const newLinkElement = this._renderer.createElement('link');\n this._renderer.setAttribute(newLinkElement, 'rel', 'stylesheet');\n this._renderer.setAttribute(newLinkElement, 'id', this.config.themeStyleLinkIdentifiers[type]);\n this._renderer.appendChild(this._document.head, newLinkElement);\n\n return newLinkElement;\n }\n\n /**\n * @hidden\n * @param themes\n * @private\n */\n private _formatProvidedThemes(themes?: ThemeDefinition[]): CompleteThemeDefinition[] {\n themes = themes || [];\n const mergedThemes = [...this._standardThemes, ...themes];\n\n if (mergedThemes.length === 0 && isDevMode()) {\n console.error('Error. No themes were provided. Please check your configuration.');\n }\n\n return mergedThemes.map((theme) => {\n theme.theming = this._getThemingResourceConfig(theme);\n return theme;\n }) as CompleteThemeDefinition[];\n }\n\n /** @hidden */\n private _getThemingResourceConfig(theme: ThemeDefinition): CompleteThemingResource {\n const existingConfig = theme.theming || {};\n const defaultConfig: CompleteThemingResource = {\n themingBasePath: `assets/theming-base/${theme.id}/css_variables.css`,\n themePath: `assets/fundamental-styles-theming/${theme.id}.css`,\n themeFontPath: `${this.config.defaultFontFile}_fonts.css`\n };\n\n return Object.assign(defaultConfig, existingConfig);\n }\n\n /** @hidden */\n private _getNativeParameterByName(paramName: string): string {\n paramName = paramName.replace(/[[\\\\\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + paramName + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(window.location.href);\n if (!results || !results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n\n /**\n * @hidden\n * Set theme according to additional URL parameter.\n * This parameter can be changed in function argument.\n **/\n private _setThemeByRoute(): void {\n const paramName = this.config.themeQueryParam;\n\n if (!this._activatedRoute) {\n throw new Error(THEME_SWITCHER_ROUTER_MISSING_ERROR);\n }\n\n this._activatedRoute.queryParams\n .pipe(\n takeUntil(this._onDestroy$),\n filter((param) => param && param[paramName])\n )\n .subscribe((param) => this.setTheme(param[paramName]));\n\n const nativeTheme = this._getNativeParameterByName(paramName) || this.config.defaultTheme;\n this.setTheme(nativeTheme);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { ThemingService } from './theming.service';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@NgModule({\n imports: [CommonModule],\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: new BaseThemingConfig()\n },\n ThemingService\n ]\n})\nexport class ThemingModule {\n static withConfig(config: Partial<ThemingConfig>): ModuleWithProviders<ThemingModule> {\n return {\n ngModule: ThemingModule,\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\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-theming.mjs","sources":["../../../../libs/core/src/lib/theming/config.ts","../../../../libs/core/src/lib/theming/standard-themes.ts","../../../../libs/core/src/lib/theming/tokens.ts","../../../../libs/core/src/lib/theming/theming.service.ts","../../../../libs/core/src/lib/theming/theming.module.ts","../../../../libs/core/src/lib/theming/fundamental-ngx-core-theming.ts"],"sourcesContent":["import { ThemeDefinition, ThemeStyleLink } from './interfaces/theme.interface';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\n/**\n * Theming Configuration.\n */\nexport class BaseThemingConfig implements ThemingConfig {\n /**\n * Array of user-defined themes.\n */\n customThemes: ThemeDefinition[] = [];\n /**\n * Default theme.\n */\n defaultTheme = 'sap_fiori_3';\n /**\n * Default theme font file. Used as a fallback for themes which do not have own font file.\n */\n defaultFontFile = 'sap_fiori_3';\n /**\n * Whether to exclude default themes from the list of available options. By default, false.\n */\n excludeDefaultThemes = false;\n /**\n * Whether to exclude theme font file from inserting it onto the page. By default, false.\n */\n excludeThemingFonts = false;\n /**\n * URL Query parameter flag to change theme based on the provided parameter.\n */\n themeQueryParam = 'theme';\n /**\n * Whether to change theme if URL Query parameter flag has been found or changed. Default is true.\n */\n changeThemeOnQueryParamChange = true;\n /**\n * Identifiers of theme style links.\n */\n themeStyleLinkIdentifiers: Record<ThemeStyleLink, string> = {\n 'base-theme': 'base-theme-styles',\n 'custom-theme': 'custom-theme-styles',\n fonts: 'theme-font-styles'\n };\n}\n","import { ThemeDefinition } from './interfaces/theme.interface';\n\nexport const STANDARD_THEMES: ThemeDefinition[] = [\n {\n id: 'sap_fiori_3',\n name: 'Fiori 3',\n description: 'Use in regular office environment'\n },\n {\n id: 'sap_fiori_3_dark',\n name: 'Fiori 3 Dark',\n description: 'Use in dimmed environments'\n },\n {\n id: 'sap_fiori_3_hcb',\n name: 'High Contrast Black',\n description: 'Optimized contrast and accessibility for extremely bright environments'\n },\n {\n id: 'sap_fiori_3_hcw',\n name: 'High Contrast White',\n description: 'Optimized contrast and accessibility for extremely dark environments'\n },\n {\n id: 'sap_fiori_3_light_dark',\n name: 'Light Dark'\n },\n {\n id: 'sap_horizon',\n name: 'Morning Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_dark',\n name: 'Evening Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcb',\n name: 'High Contrast Black Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcw',\n name: 'High Contrast White Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\nexport const THEMING_CONFIG_TOKEN = new InjectionToken<Partial<ThemingConfig>>('FdThemingConfig');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { THEME_SWITCHER_ROUTER_MISSING_ERROR } from '@fundamental-ngx/core/utils';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { STANDARD_THEMES } from './standard-themes';\nimport {\n CompleteThemeDefinition,\n CompleteThemingResource,\n ThemeDefinition,\n ThemeStyleLink\n} from './interfaces/theme.interface';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@Injectable()\nexport class ThemingService implements OnDestroy {\n /** @hidden */\n private readonly config = new BaseThemingConfig();\n\n /**\n * Current theme applied to the application.\n */\n get currentTheme(): Observable<CompleteThemeDefinition | null> {\n return this._currentThemeSubject.asObservable();\n }\n\n /** @hidden */\n private readonly _renderer: Renderer2;\n\n /** @hidden */\n private readonly _availableThemes: Map<string, CompleteThemeDefinition>;\n\n /** @hidden */\n private readonly _standardThemes: ThemeDefinition[] = [];\n\n /** @hidden **/\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _currentTheme: CompleteThemeDefinition;\n\n /** @hidden */\n private readonly _currentThemeSubject: BehaviorSubject<CompleteThemeDefinition | null> =\n new BehaviorSubject<CompleteThemeDefinition | null>(null);\n\n /**\n * @hidden\n */\n constructor(\n private _rendererFactory: RendererFactory2,\n @Inject(DOCUMENT) private _document: Document,\n @Optional() private _activatedRoute: ActivatedRoute,\n @Optional()\n @Inject(THEMING_CONFIG_TOKEN)\n private readonly _providedConfig: Partial<ThemingConfig>\n ) {\n this.config = merge(cloneDeep(this.config), cloneDeep(this._providedConfig));\n\n this._renderer = this._rendererFactory.createRenderer(this._document, null);\n\n if (!this.config.excludeDefaultThemes) {\n this._standardThemes = STANDARD_THEMES;\n }\n\n const mergedThemes = this._formatProvidedThemes(this.config.customThemes);\n this._availableThemes = new Map<string, CompleteThemeDefinition>(\n mergedThemes.map((theme) => [theme.id, theme])\n );\n }\n\n /**\n * Initiates theme change based on query parameter or provided default theme in config.\n */\n init(): void {\n if (this.config.changeThemeOnQueryParamChange) {\n this._setThemeByRoute();\n } else {\n this.setTheme(this.config.defaultTheme);\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /**\n * Sets defined theme.\n * @param themeId ID of theme that needs to be used by the application.\n */\n setTheme(themeId: string): boolean {\n const theme = this._availableThemes.get(themeId);\n\n if (!theme) {\n console.warn(\n `Theme with ID '${themeId}' is not found. Please check if ID is correct or provide custom theme for ThemingModule.`\n );\n return false;\n }\n\n this._setThemeResource('base-theme', theme.theming.themingBasePath);\n this._setThemeResource('custom-theme', theme.theming.themePath);\n\n if (!this.config.excludeThemingFonts) {\n this._setThemeResource('fonts', theme.theming.themeFontPath);\n }\n\n this._currentTheme = theme;\n this._currentThemeSubject.next(theme);\n\n return true;\n }\n\n /**\n * Returns array of available themes.\n */\n getThemes(): CompleteThemeDefinition[] {\n return [...this._availableThemes].map((entry) => entry[1]);\n }\n\n /**\n * @hidden\n * @param type\n * @param resourceUrl\n * @private\n */\n private _setThemeResource(type: ThemeStyleLink, resourceUrl: string): void {\n const linkElm = this._getStyleLinkElement(type);\n\n if (linkElm.getAttribute('href') === resourceUrl) {\n return;\n }\n\n this._renderer.setAttribute(linkElm, 'href', resourceUrl);\n }\n\n /**\n * @hidden\n * @param type\n * @private\n */\n private _getStyleLinkElement(type: ThemeStyleLink): HTMLLinkElement {\n const existingLinkElement = this._document.getElementById(this.config.themeStyleLinkIdentifiers[type]);\n\n if (existingLinkElement) {\n return existingLinkElement as HTMLLinkElement;\n }\n\n const newLinkElement = this._renderer.createElement('link');\n this._renderer.setAttribute(newLinkElement, 'rel', 'stylesheet');\n this._renderer.setAttribute(newLinkElement, 'id', this.config.themeStyleLinkIdentifiers[type]);\n this._renderer.appendChild(this._document.head, newLinkElement);\n\n return newLinkElement;\n }\n\n /**\n * @hidden\n * @param themes\n * @private\n */\n private _formatProvidedThemes(themes?: ThemeDefinition[]): CompleteThemeDefinition[] {\n themes = themes || [];\n const mergedThemes = [...this._standardThemes, ...themes];\n\n if (mergedThemes.length === 0 && isDevMode()) {\n console.error('Error. No themes were provided. Please check your configuration.');\n }\n\n return mergedThemes.map((theme) => {\n theme.theming = this._getThemingResourceConfig(theme);\n return theme;\n }) as CompleteThemeDefinition[];\n }\n\n /** @hidden */\n private _getThemingResourceConfig(theme: ThemeDefinition): CompleteThemingResource {\n const existingConfig = theme.theming || {};\n const defaultConfig: CompleteThemingResource = {\n themingBasePath: `assets/theming-base/${theme.id}/css_variables.css`,\n themePath: `assets/fundamental-styles-theming/${theme.id}.css`,\n themeFontPath: `${this.config.defaultFontFile}_fonts.css`\n };\n\n return Object.assign(defaultConfig, existingConfig);\n }\n\n /** @hidden */\n private _getNativeParameterByName(paramName: string): string {\n paramName = paramName.replace(/[[\\\\\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + paramName + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(window.location.href);\n if (!results || !results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n\n /**\n * @hidden\n * Set theme according to additional URL parameter.\n * This parameter can be changed in function argument.\n **/\n private _setThemeByRoute(): void {\n const paramName = this.config.themeQueryParam;\n\n if (!this._activatedRoute) {\n throw new Error(THEME_SWITCHER_ROUTER_MISSING_ERROR);\n }\n\n this._activatedRoute.queryParams\n .pipe(\n takeUntil(this._onDestroy$),\n filter((param) => param && param[paramName])\n )\n .subscribe((param) => this.setTheme(param[paramName]));\n\n const nativeTheme = this._getNativeParameterByName(paramName) || this.config.defaultTheme;\n this.setTheme(nativeTheme);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { ThemingService } from './theming.service';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@NgModule({\n imports: [CommonModule],\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: new BaseThemingConfig()\n },\n ThemingService\n ]\n})\nexport class ThemingModule {\n static withConfig(config: Partial<ThemingConfig>): ModuleWithProviders<ThemingModule> {\n return {\n ngModule: ThemingModule,\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|