@eui/components 19.2.2-snapshot-1746624054534 → 19.2.2-snapshot-1746687278530
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/docs/components/EuiAppComponent.html +2 -1
- package/docs/components/EuiMenuItemComponent.html +2 -1
- package/docs/components/EuiNotificationsComponent.html +1 -0
- package/docs/components/EuiNotificationsV2Component.html +1 -0
- package/docs/components/EuiToolbarComponent.html +1 -1
- package/docs/components/EuiToolbarMenuComponent.html +1 -1
- package/docs/components/EuiUserProfileComponent.html +24 -0
- package/docs/dependencies.html +2 -2
- package/docs/js/menu-wc.js +9 -9
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/variables.html +1 -0
- package/eui-menu/eui-menu-item.component.d.ts.map +1 -1
- package/eui-user-profile/user-profile.component.d.ts +3 -1
- package/eui-user-profile/user-profile.component.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-accordion.mjs +2 -2
- package/fesm2022/eui-components-eui-accordion.mjs.map +1 -1
- package/fesm2022/eui-components-eui-alert.mjs +2 -2
- package/fesm2022/eui-components-eui-alert.mjs.map +1 -1
- package/fesm2022/eui-components-eui-autocomplete.mjs +2 -2
- package/fesm2022/eui-components-eui-autocomplete.mjs.map +1 -1
- package/fesm2022/eui-components-eui-avatar.mjs +2 -2
- package/fesm2022/eui-components-eui-avatar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-card.mjs +6 -6
- package/fesm2022/eui-components-eui-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dashboard-card.mjs +2 -2
- package/fesm2022/eui-components-eui-dashboard-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-date-range-selector.mjs +4 -4
- package/fesm2022/eui-components-eui-date-range-selector.mjs.map +1 -1
- package/fesm2022/eui-components-eui-discussion-thread.mjs +4 -4
- package/fesm2022/eui-components-eui-discussion-thread.mjs.map +1 -1
- package/fesm2022/eui-components-eui-fieldset.mjs +2 -2
- package/fesm2022/eui-components-eui-fieldset.mjs.map +1 -1
- package/fesm2022/eui-components-eui-menu.mjs +11 -8
- package/fesm2022/eui-components-eui-menu.mjs.map +1 -1
- package/fesm2022/eui-components-eui-overlay.mjs +2 -2
- package/fesm2022/eui-components-eui-overlay.mjs.map +1 -1
- package/fesm2022/eui-components-eui-page.mjs +2 -2
- package/fesm2022/eui-components-eui-page.mjs.map +1 -1
- package/fesm2022/eui-components-eui-popover.mjs +2 -2
- package/fesm2022/eui-components-eui-popover.mjs.map +1 -1
- package/fesm2022/eui-components-eui-slide-toggle.mjs +2 -2
- package/fesm2022/eui-components-eui-slide-toggle.mjs.map +1 -1
- package/fesm2022/eui-components-eui-split-button.mjs +2 -2
- package/fesm2022/eui-components-eui-split-button.mjs.map +1 -1
- package/fesm2022/eui-components-eui-table.mjs +2 -2
- package/fesm2022/eui-components-eui-table.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tabs-v2.mjs +2 -2
- package/fesm2022/eui-components-eui-tabs-v2.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tabs.mjs +4 -4
- package/fesm2022/eui-components-eui-tabs.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timebar.mjs +2 -2
- package/fesm2022/eui-components-eui-timebar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timeline.mjs +2 -2
- package/fesm2022/eui-components-eui-timeline.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree-list.mjs +2 -2
- package/fesm2022/eui-components-eui-tree-list.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree.mjs +2 -2
- package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
- package/fesm2022/eui-components-eui-user-profile.mjs +9 -2
- package/fesm2022/eui-components-eui-user-profile.mjs.map +1 -1
- package/fesm2022/eui-components-eui-wizard.mjs +4 -4
- package/fesm2022/eui-components-eui-wizard.mjs.map +1 -1
- package/fesm2022/eui-components-externals-eui-editor.mjs +2 -2
- package/fesm2022/eui-components-externals-eui-editor.mjs.map +1 -1
- package/fesm2022/eui-components-layout.mjs +32 -25
- package/fesm2022/eui-components-layout.mjs.map +1 -1
- package/layout/eui-app/eui-app-sidebar/sidebar-menu/sidebar-menu.component.d.ts.map +1 -1
- package/layout/eui-app/eui-app.component.d.ts +1 -1
- package/layout/eui-app/eui-app.component.d.ts.map +1 -1
- package/layout/eui-app/eui-app.module.d.ts +3 -2
- package/layout/eui-app/eui-app.module.d.ts.map +1 -1
- package/layout/eui-notifications/eui-notifications.component.d.ts.map +1 -1
- package/layout/eui-notifications-v2/eui-notifications.component.d.ts.map +1 -1
- package/package.json +7 -7
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eui-components-eui-tabs.mjs","sources":["../../eui-tabs/eui-tab-content/eui-tab-content.component.ts","../../eui-tabs/eui-tab-content/eui-tab-content.component.html","../../eui-tabs/eui-tab-label/eui-tab-label.component.ts","../../eui-tabs/eui-tab-label/eui-tab-label.component.html","../../eui-tabs/eui-tab/eui-tab.component.ts","../../eui-tabs/eui-tabs.component.ts","../../eui-tabs/eui-tabs.component.html","../../eui-tabs/eui-tabs.module.ts","../../eui-tabs/index.ts","../../eui-tabs/eui-components-eui-tabs.ts"],"sourcesContent":["import { Component, Input, TemplateRef, ViewChild, ViewContainerRef, AfterViewInit, booleanAttribute } from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\n/**\n * @description\n * Component used to display the content of the tab.\n */\n@Component({\n selector: 'eui-tab-content, euiTabContent',\n templateUrl: './eui-tab-content.component.html',\n})\nexport class EuiTabContentComponent implements AfterViewInit {\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @ViewChild('euiTabContent') templateRef: TemplateRef<any>;\n\n public templatePortal: TemplatePortal;\n\n @Input({ transform: booleanAttribute }) hasNoContentPadding = false;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngAfterViewInit(): void {\n this.templatePortal = new TemplatePortal(this.templateRef, this.viewContainerRef);\n }\n}\n","<ng-template #euiTabContent>\n <div tabindex=\"0\" class=\"eui-tab-content\" [class.eui-tab-content--no-padding]=\"this.hasNoContentPadding\">\n <ng-content></ng-content>\n </div>\n</ng-template>","import { Component, TemplateRef, ViewChild, ViewContainerRef, AfterViewInit, Directive } from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\n/**\n * @description\n * Component used to display the label of the header tab.\n */\n@Component({\n selector: 'eui-tab-label, euiTabLabel',\n templateUrl: './eui-tab-label.component.html',\n})\nexport class EuiTabLabelComponent implements AfterViewInit {\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @ViewChild('euiTabLabel') templateRef: TemplateRef<any>;\n\n public templatePortal: TemplatePortal | null;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngAfterViewInit(): void {\n this.templatePortal = new TemplatePortal(this.templateRef, this.viewContainerRef);\n }\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'euiTabSubLabel' })\nexport class EuiTabSubLabelDirective {}\n","<ng-template #euiTabLabel>\n <div class=\"eui-u-flex eui-u-flex-column\">\n <div class=\"eui-u-flex eui-u-flex-justify-content-center\">\n <div class=\"eui-u-inline-flex eui-tab-item__label-text\">\n <ng-content/>\n </div>\n <ng-content select=\"eui-chip\"/>\n <ng-content select=\"eui-badge\"/>\n </div>\n\n <div class=\"eui-tab-item__sublabel\"><ng-content select=\"euiTabSubLabel\"></ng-content></div>\n </div>\n</ng-template>\n","import { Component, ContentChild, Input, booleanAttribute } from '@angular/core';\n\nimport { BaseStatesDirective } from '@eui/components/shared';\n\nimport { EuiTabContentComponent } from '../eui-tab-content/eui-tab-content.component';\nimport { EuiTabLabelComponent } from '../eui-tab-label/eui-tab-label.component';\n\n/**\n * @description\n * Component used to display a tab item.\n */\n@Component({\n selector: 'eui-tab',\n template: '<ng-content/>',\n styleUrls: ['../styles/_index.scss'],\n hostDirectives: [\n {\n directive: BaseStatesDirective,\n inputs: [\n 'euiDisabled',\n 'euiPrimary',\n 'euiSecondary',\n 'euiInfo',\n 'euiSuccess',\n 'euiWarning',\n 'euiDanger',\n 'euiAccent',\n 'euiVariant',\n ],\n },\n ],\n})\nexport class EuiTabComponent {\n /**\n * URL of the tab if used with the router. Click on the tab header will navigate to this value.\n */\n @Input() url: string;\n /**\n * e2e attribute.\n *\n * @default 'eui-tab'\n */\n @Input() e2eAttr = 'eui-tab';\n /**\n * Tooltip to display when the tab header is hovered.\n */\n @Input() tooltip: string;\n /**\n * Wheter the tab can be closed.\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isClosable = false;\n /**\n * Wheter the tab is visible.\n *\n * @default true\n */\n @Input({ transform: booleanAttribute }) isVisible = true;\n /**\n * Wheter the tab is active.\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isActive = false;\n /**\n * Wheter the tab is disabled.\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isDisabled = false;\n /**\n * Wheter the close is handled on application side.\n *\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isHandleCloseOnClose = false;\n\n @ContentChild(EuiTabLabelComponent)\n get templateLabel(): EuiTabLabelComponent {\n return this._templateLabel;\n }\n set templateLabel(value: EuiTabLabelComponent) {\n this.setTemplateLabelInput(value);\n }\n protected _templateLabel: EuiTabLabelComponent;\n\n @ContentChild(EuiTabContentComponent)\n get templateContent(): EuiTabContentComponent {\n return this._templateContent;\n }\n set templateContent(value: EuiTabContentComponent) {\n this.setTemplateContentInput(value);\n }\n protected _templateContent: EuiTabContentComponent;\n\n constructor(public baseStatesDirective: BaseStatesDirective) {\n }\n\n protected setTemplateLabelInput(value: EuiTabLabelComponent): void {\n if (value) {\n this._templateLabel = value;\n }\n }\n\n protected setTemplateContentInput(value: EuiTabContentComponent): void {\n if (value) {\n this._templateContent = value;\n }\n }\n}\n","import {\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewEncapsulation,\n forwardRef,\n OnChanges,\n AfterViewInit,\n ViewChildren,\n ViewContainerRef,\n ViewChild,\n ElementRef,\n ChangeDetectorRef,\n SimpleChanges,\n HostBinding,\n booleanAttribute,\n ContentChild,\n OnInit,\n} from '@angular/core';\nimport { animate, AnimationBuilder, AnimationFactory, AnimationPlayer, style } from '@angular/animations';\nimport { Subject, Subscription, filter, startWith, takeUntil } from 'rxjs';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { EuiAppShellService } from '@eui/core';\n\nimport { EuiTabComponent } from './eui-tab/eui-tab.component';\nimport { AsyncPipe } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_BUTTON } from '@eui/components/eui-button';\nimport { EUI_ICON_BUTTON } from '@eui/components/eui-icon-button';\nimport { EuiTooltipDirective } from '@eui/components/directives';\n\n/**\n * @description\n * eUI Tabs component helps to organize content into separate views where only one view can be visible at a time.\n * Each tab's label is shown in the tab header and the active tab is designated with a primary ink bar visual.\n * The active tab may be set using the `activeTabIndex` input option or when the user selects one of the tab labels in the header.\n * When the list of tab labels exceeds the width of the header or its container, pagination controls appear to let the user scroll left and right across the tabs.\n */\n@Component({\n selector: 'eui-tabs',\n templateUrl: './eui-tabs.component.html',\n styleUrls: ['./styles/_index.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n PortalModule,\n EuiTooltipDirective,\n ...EUI_ICON,\n ...EUI_BUTTON,\n ...EUI_ICON_BUTTON,\n ],\n})\nexport class EuiTabsComponent implements OnDestroy, AfterViewInit, OnChanges, OnInit {\n /**\n * @description\n * Computes and returns the CSS classes for the component based on its current state.\n *\n * @returns {string} Space-separated string of CSS class names\n */\n @HostBinding('class')\n get elementClass(): string {\n return [\n 'eui-tabs',\n this.isMainNavigation ? 'eui-tabs--main-navigation': '',\n this.isVerticalTabs ? 'eui-tabs--vertical': '',\n ].join(' ').trim();\n }\n /**\n * Tabs in data approach\n *\n * @type {EuiTabComponent[]}\n */\n @Input() tabs: EuiTabComponent[] = [];\n /**\n * Index of the active tab\n *\n * @default 0\n */\n @Input() activeTabIndex = null;\n /**\n * Sets the `data-e2e` attribute for the host element.\n *\n * @default 'eui-tabs'\n */\n @HostBinding('attr.data-e2e')\n @Input() e2eAttr = 'eui-tabs';\n /**\n * The way the router will consider the url when used on tabs. 'prefix' | 'full'.\n *\n * @default 'prefix'\n */\n @Input() pathMatch: 'prefix' | 'full' = 'prefix';\n\n /**\n * Event emitted when a tab is closed.\n */\n @Output() tabClose = new EventEmitter<{ tab: EuiTabComponent; index: number }>();\n /**\n * Event emitted when a tab is selected.\n */\n @Output() tabSelect = new EventEmitter<{ tab: EuiTabComponent; index: number }>();\n\n @ContentChildren(forwardRef(() => EuiTabComponent), { descendants: false }) _tabs: QueryList<EuiTabComponent>;\n @ContentChild(forwardRef(() => EuiTabsRightContentTagDirective)) euiTabsRightContentTagDirective: EuiTabsRightContentTagDirective;\n @ViewChildren('euiTabLabelItem', { read: ViewContainerRef }) euiTabLabelItems: QueryList<ViewContainerRef>;\n @ViewChild('euiTabsItems') euiTabsItems: ElementRef;\n @ViewChild('euiTabsItemsWrapper') euiTabsItemsWrapper: ElementRef;\n\n public scrolling = false;\n public navigationLeftButtonDisabled = true;\n public navigationRightButtonDisabled = false;\n public currentOffset = 0;\n\n @Input({ transform: booleanAttribute }) isMainNavigation = false;\n @Input({ transform: booleanAttribute }) isHandleChangeTab = false;\n @Input({ transform: booleanAttribute }) isSubTabs = false;\n @Input({ transform: booleanAttribute }) isVerticalTabs = false;\n\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private routerSubscription: Subscription;\n private player: AnimationPlayer;\n private stepMove = 400;\n private scrollOffset = 50;\n /**\n * For race condition reason, the wrapper width is not correctly calculated when the component passes from no-scroll state to scroll\n * state. To fix this issue, we count the number of times the getScrollingStatus method is called.\n *\n * Scenario 1: The number of tabs does not require any scroll:\n * - Without any fix the scroll will have a delta of 64 at the first activation, then on the first no-scroll to scroll state,\n * - we had 64 to the move\n *\n * Scenario 2: The number of tabs requires a scroll:\n * - In this case the wrapper width is correctly calculated, so we don't need to add the delta\n */\n private scrollingCount = 0;\n\n constructor(\n private cd: ChangeDetectorRef,\n private router: Router,\n private builder: AnimationBuilder,\n private elementRef: ElementRef,\n private euiAppShellService: EuiAppShellService,\n ) {}\n\n ngOnChanges(c: SimpleChanges): void {\n if (c.activeTabIndex) {\n setTimeout(\n () => {\n const activeTab = this.euiTabsItemsWrapper.nativeElement.children.item(c.activeTabIndex.currentValue);\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n if (activeTab && !this.isActiveTabFullyVisible(activeTab)) {\n let scrollTo = 0;\n let subsetWidth = 0;\n for (let i = 0; i <= c.activeTabIndex.currentValue; i++) {\n subsetWidth += this.euiTabsItemsWrapper.nativeElement.children.item(i).clientWidth;\n }\n\n scrollTo = containerWidth / 2 - subsetWidth;\n\n if (Math.abs(scrollTo) > wrapperWidth - containerWidth + this.scrollOffset) {\n scrollTo = -(wrapperWidth - containerWidth + this.scrollOffset);\n }\n\n if (scrollTo > 0) {\n scrollTo = 0;\n }\n\n if (c.activeTabIndex.isFirstChange() && c.activeTabIndex.currentValue > 0) {\n this.setScrollTo(scrollTo, false);\n } else {\n this.setScrollTo(scrollTo);\n }\n }\n },\n c.activeTabIndex.isFirstChange() && c.activeTabIndex.currentValue > 0 ? 500 : 0,\n );\n }\n }\n\n ngOnInit(): void {\n this.euiAppShellService.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {\n this.getScrollingStatus();\n });\n }\n\n ngAfterViewInit(): void {\n this._tabs.changes.pipe(startWith(true), takeUntil(this.destroy$)).subscribe(() => {\n this.tabs = this._tabs.toArray();\n\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n }\n\n // TODO v18 check navigationEnd (deprecation)\n this.routerSubscription = this.router.events\n .pipe(\n filter((e) => e instanceof NavigationEnd),\n takeUntil(this.destroy$),\n startWith({ url: this.router.url }),\n )\n .subscribe((e: NavigationEnd) => {\n const tabsWithUrl = this.tabs.filter((t) => t.url && typeof t.url === 'string');\n if (tabsWithUrl.length === this.tabs.length) {\n let tabIndex = -1;\n if (this.pathMatch === 'full') {\n tabIndex = tabsWithUrl.findIndex((t) => e.url === t.url);\n } else {\n tabIndex = tabsWithUrl.findIndex((t) => {\n const regex = new RegExp(t.url + '(/?)');\n return regex.test(e.url);\n });\n }\n\n this.tabs = this.tabs.map((t, i) =>\n tabIndex === i ? Object.assign(t, { isActive: true }) : Object.assign(t, { isActive: false }),\n );\n\n if (this.tabs.findIndex((t) => t.isActive) !== -1) {\n this.activeTabIndex = this.tabs.findIndex((t) => t.isActive);\n }\n\n this.cd.detectChanges();\n }\n });\n\n if (!this.activeTabIndex) {\n this.activeTabIndex = this.tabs.findIndex((t) => t.isActive) !== -1 ? this.tabs.findIndex((t) => t.isActive) : 0;\n }\n\n this.cd.detectChanges();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * Listens to the content to be changed to recalculate the scrolling position and status.\n */\n public onContentChanges(): void {\n this.getScrollingStatus();\n }\n\n /**\n * Scroll to left handler\n */\n public goToLeft(): void {\n let scrollTo = this.currentOffset + this.stepMove;\n if (scrollTo > 0) {\n scrollTo = 0;\n }\n\n this.setScrollTo(scrollTo);\n }\n\n /**\n * Scroll to right handler\n */\n public goToRight(): void {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n let scrollTo = this.currentOffset - this.stepMove;\n\n if (Math.abs(scrollTo) > wrapperWidth - containerWidth) {\n scrollTo = -(wrapperWidth - containerWidth) - this.scrollOffset;\n }\n\n this.setScrollTo(scrollTo);\n }\n\n /**\n * Click handler for tab item\n *\n * @param index Index of the tab clicked\n */\n public changeTab(index: number): void {\n if (this.isHandleChangeTab) {\n this.tabSelect.emit({ tab: this.tabs[index], index });\n } else {\n if (this.tabs[index] && !this.tabs[index].isDisabled) {\n if (this.tabs[this.activeTabIndex]) {\n this.tabs[this.activeTabIndex].isActive = false;\n }\n this.tabs[index].isActive = true;\n\n const activeTab = this.euiTabsItemsWrapper.nativeElement.children.item(index);\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n if (activeTab && !this.isActiveTabFullyVisible(activeTab) && !this.isVerticalTabs && !this.isMainNavigation) {\n let scrollTo = 0;\n let subsetWidth = 0;\n for (let i = 0; i <= index; i++) {\n subsetWidth += this.euiTabsItemsWrapper.nativeElement.children.item(i).clientWidth;\n }\n\n scrollTo = containerWidth / 2 - subsetWidth;\n\n if (Math.abs(scrollTo) > wrapperWidth - containerWidth + this.scrollOffset) {\n scrollTo = -(wrapperWidth - containerWidth + this.scrollOffset);\n }\n\n if (scrollTo > 0) {\n scrollTo = 0;\n }\n\n this.setScrollTo(scrollTo);\n }\n\n if (!this.tabs[index].url) {\n this.activeTabIndex = index;\n this.tabSelect.emit({ tab: this.tabs[index], index });\n } else {\n this.activeTabIndex = index;\n this.router.navigateByUrl(this.tabs[index].url);\n }\n }\n }\n }\n\n /**\n * Handles the `keyup` event for a tab element at the specified index.\n *\n * When the user presses the \"Enter\" or \"Space\" key, this method checks if the tab at the given index\n * is enabled (not disabled). If so, it activates that tab and deactivates all others.\n *\n * @param e The keyboard event triggered by the keyup action.\n * @param index The index of the tab associated with the key event.\n */\n public onKeyUp(e: KeyboardEvent, index: number): void {\n if (e.code === 'Enter' || e.code === 'Space') {\n if (this.tabs[index] && !this.tabs[index].isDisabled) {\n this.tabs.map((t, i) => (i === index ? Object.assign(t, { isActive: true }) : Object.assign(t, { isActive: false })));\n\n if (!this.tabs[index].url) {\n this.activeTabIndex = index;\n this.tabSelect.emit({ tab: this.tabs[index], index });\n } else {\n this.activeTabIndex = index;\n this.router.navigateByUrl(this.tabs[index].url);\n }\n }\n }\n }\n\n /**\n * Closes the tab specified by `index` parameter\n *\n * @param index Index of the tab to close\n * @param e Event of the click\n */\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public closeTab(index: number, e: any): void {\n const tab = this.tabs[index];\n if (!this.tabs[index].isHandleCloseOnClose) {\n this.close(e.index);\n this.tabs = this.tabs.filter((t, i) => i !== index);\n }\n\n this.tabClose.emit({ tab, index });\n e.stopPropagation();\n }\n\n /**\n * Close a tab pass in parameter.\n *\n * @param index Index of the tab to close\n */\n public close(index: number): void {\n if (index === this.activeTabIndex) {\n const previousVisibleIndex = this.tabs.indexOf(this.tabs[index - 1]);\n\n if (previousVisibleIndex < 0) {\n this.changeTab(0);\n } else {\n this.changeTab(previousVisibleIndex);\n }\n } else {\n if (index < this.activeTabIndex) {\n this.activeTabIndex = this.activeTabIndex - 1;\n }\n }\n\n this.tabs = this.tabs.filter((t, i) => i !== index);\n }\n\n /**\n * Checks if the active tab is fully visible\n *\n * @param activeTab Tab element to check\n * @returns true if fully visible, false otherwise\n */\n private isActiveTabFullyVisible(activeTab: HTMLDivElement): boolean {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n return activeTab.offsetLeft - 48 >= 0 && activeTab.offsetLeft + activeTab.clientWidth < containerWidth - 48;\n }\n\n /**\n * Sets the scroll position of the tabs headers\n *\n * @param scrollTo Number to set on the margin-left style property\n * @param isAnimated Whether the tab activation should be animated\n */\n private setScrollTo(scrollTo: number, isAnimated = true): void {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n const timings = isAnimated ? '500ms cubic-bezier(0.35, 0, 0.25, 1)' : 0;\n const animation: AnimationFactory = this.builder.build([animate(timings, style({ 'margin-left': +scrollTo + 'px' }))]);\n\n this.player = animation.create(this.euiTabsItemsWrapper.nativeElement);\n this.player.play();\n\n this.currentOffset = scrollTo;\n\n if (scrollTo === 0) {\n this.navigationLeftButtonDisabled = true;\n }\n if (Math.abs(this.currentOffset) < wrapperWidth - containerWidth + this.scrollOffset) {\n this.navigationRightButtonDisabled = false;\n }\n if (this.currentOffset < 0) {\n this.navigationLeftButtonDisabled = false;\n }\n if (Math.abs(scrollTo) === wrapperWidth - containerWidth + this.scrollOffset) {\n this.navigationRightButtonDisabled = true;\n }\n\n this.cd.detectChanges();\n }\n\n /**\n * Checks if the tabs headers are scrolling and calculates the scrolling position\n */\n private getScrollingStatus(): void {\n if (this.euiTabsItems && this.euiTabsItemsWrapper) {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n this.scrolling = containerWidth < wrapperWidth;\n\n if (!this.scrolling) {\n this.scrollingCount = 0;\n this.setScrollTo(0);\n } else {\n if (wrapperWidth - containerWidth <= Math.abs(this.currentOffset) + this.scrollOffset) {\n const deltaFix = this.scrollingCount === 0 ? this.scrollOffset * 2 : 0;\n const scrollTo = -(wrapperWidth - containerWidth) - this.scrollOffset - deltaFix;\n\n this.setScrollTo(scrollTo);\n\n this.currentOffset = scrollTo;\n } else {\n if (Math.abs(this.currentOffset) < wrapperWidth - containerWidth + this.scrollOffset) {\n this.navigationRightButtonDisabled = false;\n }\n if (this.currentOffset < 0) {\n this.navigationLeftButtonDisabled = false;\n }\n }\n\n this.scrollingCount++;\n }\n\n this.cd.detectChanges();\n }\n }\n}\n\n/* eslint-disable */\n@Directive({ selector: 'euiTabsRightContent' })\nexport class EuiTabsRightContentTagDirective {\n @HostBinding('class') elementClass = 'eui-tabs__right-content-wrapper';\n}\n/* eslint-enable */\n","<div class=\"eui-u-flex\" [class.eui-tabs__wrapper--horizontal]=\"!isVerticalTabs\" [class.eui-tabs__wrapper--vertical]=\"isVerticalTabs\">\n <div\n #euiTabsItems\n class=\"eui-tabs__items\"\n [class.eui-tabs__items--horizontal]=\"!isVerticalTabs\"\n [class.eui-tabs__items--scrolling]=\"scrolling\"\n (cdkObserveContent)=\"onContentChanges()\">\n <div #euiTabsItemsWrapper class=\"eui-tabs__items-wrapper\" [attr.data-offset]=\"currentOffset\" role=\"tablist\">\n @for (tab of tabs; let i = $index; track tab) {\n @if (tab.isVisible) {\n <div\n tabindex=\"0\"\n role=\"tab\"\n class=\"eui-tab-item eui-tab-item--{{ tab.baseStatesDirective.euiVariant }}\"\n [class.eui-tab-item--closable]=\"tab.isClosable\"\n [class.eui-tab-item--active]=\"activeTabIndex === i\"\n [class.eui-tab-item--disabled]=\"tab.isDisabled\"\n [attr.aria-disabled]=\"tab.isDisabled\"\n (click)=\"changeTab(i)\"\n [euiTooltip]=\"tab.tooltip\"\n (keyup)=\"onKeyUp($event, i)\">\n <div class=\"eui-tab-item__label\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel.templatePortal\"></ng-template>\n </div>\n @if (tab.isClosable) {\n <eui-icon-button\n class=\"eui-tab-item__close-button\"\n icon=\"close:outline\"\n ariaLabel=\"close tab\"\n (buttonClick)=\"closeTab(i, $event)\"\n euiRounded>\n </eui-icon-button>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"eui-tabs__navigation\">\n <div class=\"eui-tabs__navigation__left-item\">\n <button\n (click)=\"goToLeft()\"\n euiButton\n euiIconButton\n euiBasicButton\n type=\"button\"\n [euiDisabled]=\"navigationLeftButtonDisabled\"\n aria-label=\"Scroll left\">\n <eui-icon-svg icon=\"chevron-back:sharp\"></eui-icon-svg>\n </button>\n </div>\n <div class=\"eui-tabs__navigation__right-item\">\n <button\n (click)=\"goToRight()\"\n euiButton\n euiIconButton\n euiBasicButton\n type=\"button\"\n [euiDisabled]=\"navigationRightButtonDisabled\"\n aria-label=\"Scroll right\">\n <eui-icon-svg icon=\"chevron-forward:sharp\"></eui-icon-svg>\n </button>\n </div>\n </div>\n </div>\n\n @if (euiTabsRightContentTagDirective) {\n <div class=\"eui-tabs__right-content\">\n <ng-content select=\"euiTabsRightContent\"></ng-content>\n </div>\n }\n</div>\n\n@for (tab of tabs; let i = $index; track tab) {\n @if (i === activeTabIndex && tab.templateContent) {\n <div class=\"eui-tab-content-wrapper\" tabindex=\"0\">\n <ng-template [cdkPortalOutlet]=\"tab.templateContent.templatePortal\"></ng-template>\n </div>\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { EuiTabComponent } from './eui-tab/eui-tab.component';\nimport { EuiTabsComponent, EuiTabsRightContentTagDirective } from './eui-tabs.component';\nimport { EuiTabLabelComponent, EuiTabSubLabelDirective } from './eui-tab-label/eui-tab-label.component';\nimport { EuiTabContentComponent } from './eui-tab-content/eui-tab-content.component';\n\n/**\n * @description\n * Module that provides the EuiTabs component and its dependencies\n * \n * @deprecated Use {@link EUI_TABS} instead.\n */\n@NgModule({\n imports: [\n EuiTabsComponent,\n EuiTabComponent,\n EuiTabsRightContentTagDirective,\n EuiTabLabelComponent,\n EuiTabSubLabelDirective,\n EuiTabContentComponent,\n ],\n exports: [\n EuiTabsComponent,\n EuiTabComponent,\n EuiTabsRightContentTagDirective,\n EuiTabLabelComponent,\n EuiTabSubLabelDirective,\n EuiTabContentComponent,\n ],\n})\nexport class EuiTabsModule {}\n","import { EuiTabContentComponent } from './eui-tab-content/eui-tab-content.component';\nimport { EuiTabLabelComponent, EuiTabSubLabelDirective } from './eui-tab-label/eui-tab-label.component';\nimport { EuiTabComponent } from './eui-tab/eui-tab.component';\nimport { EuiTabsComponent, EuiTabsRightContentTagDirective } from './eui-tabs.component';\n\nexport * from './eui-tabs.module';\nexport * from './eui-tabs.component';\nexport * from './eui-tab/eui-tab.component';\nexport * from './eui-tab-label/eui-tab-label.component';\nexport * from './eui-tab-content/eui-tab-content.component';\n\nexport const EUI_TABS = [\n EuiTabsComponent,\n EuiTabComponent,\n EuiTabsRightContentTagDirective,\n EuiTabLabelComponent,\n EuiTabSubLabelDirective,\n EuiTabContentComponent,\n] as const;","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"eui-components-eui-tabs.mjs","sources":["../../eui-tabs/eui-tab-content/eui-tab-content.component.ts","../../eui-tabs/eui-tab-content/eui-tab-content.component.html","../../eui-tabs/eui-tab-label/eui-tab-label.component.ts","../../eui-tabs/eui-tab-label/eui-tab-label.component.html","../../eui-tabs/eui-tab/eui-tab.component.ts","../../eui-tabs/eui-tabs.component.ts","../../eui-tabs/eui-tabs.component.html","../../eui-tabs/eui-tabs.module.ts","../../eui-tabs/index.ts","../../eui-tabs/eui-components-eui-tabs.ts"],"sourcesContent":["import { Component, Input, TemplateRef, ViewChild, ViewContainerRef, AfterViewInit, booleanAttribute } from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\n/**\n * @description\n * Component used to display the content of the tab.\n */\n@Component({\n selector: 'eui-tab-content, euiTabContent',\n templateUrl: './eui-tab-content.component.html',\n})\nexport class EuiTabContentComponent implements AfterViewInit {\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @ViewChild('euiTabContent') templateRef: TemplateRef<any>;\n\n public templatePortal: TemplatePortal;\n\n @Input({ transform: booleanAttribute }) hasNoContentPadding = false;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngAfterViewInit(): void {\n this.templatePortal = new TemplatePortal(this.templateRef, this.viewContainerRef);\n }\n}\n","<ng-template #euiTabContent>\n <div tabindex=\"0\" class=\"eui-tab-content\" [class.eui-tab-content--no-padding]=\"this.hasNoContentPadding\">\n <ng-content></ng-content>\n </div>\n</ng-template>","import { Component, TemplateRef, ViewChild, ViewContainerRef, AfterViewInit, Directive } from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\n\n/**\n * @description\n * Component used to display the label of the header tab.\n */\n@Component({\n selector: 'eui-tab-label, euiTabLabel',\n templateUrl: './eui-tab-label.component.html',\n})\nexport class EuiTabLabelComponent implements AfterViewInit {\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @ViewChild('euiTabLabel') templateRef: TemplateRef<any>;\n\n public templatePortal: TemplatePortal | null;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngAfterViewInit(): void {\n this.templatePortal = new TemplatePortal(this.templateRef, this.viewContainerRef);\n }\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'euiTabSubLabel' })\nexport class EuiTabSubLabelDirective {}\n","<ng-template #euiTabLabel>\n <div class=\"eui-u-flex eui-u-flex-column\">\n <div class=\"eui-u-flex eui-u-flex-justify-content-center\">\n <div class=\"eui-u-inline-flex eui-tab-item__label-text\">\n <ng-content/>\n </div>\n <ng-content select=\"eui-chip\"/>\n <ng-content select=\"eui-badge\"/>\n </div>\n\n <div class=\"eui-tab-item__sublabel\"><ng-content select=\"euiTabSubLabel\"></ng-content></div>\n </div>\n</ng-template>\n","import { Component, ContentChild, Input, booleanAttribute } from '@angular/core';\n\nimport { BaseStatesDirective } from '@eui/components/shared';\n\nimport { EuiTabContentComponent } from '../eui-tab-content/eui-tab-content.component';\nimport { EuiTabLabelComponent } from '../eui-tab-label/eui-tab-label.component';\n\n/**\n * @description\n * Component used to display a tab item.\n */\n@Component({\n selector: 'eui-tab',\n template: '<ng-content/>',\n styleUrls: ['../styles/_index.scss'],\n hostDirectives: [\n {\n directive: BaseStatesDirective,\n inputs: [\n 'euiDisabled',\n 'euiPrimary',\n 'euiSecondary',\n 'euiInfo',\n 'euiSuccess',\n 'euiWarning',\n 'euiDanger',\n 'euiAccent',\n 'euiVariant',\n ],\n },\n ],\n})\nexport class EuiTabComponent {\n /**\n * URL of the tab if used with the router. Click on the tab header will navigate to this value.\n */\n @Input() url: string;\n /**\n * e2e attribute.\n *\n * @default 'eui-tab'\n */\n @Input() e2eAttr = 'eui-tab';\n /**\n * Tooltip to display when the tab header is hovered.\n */\n @Input() tooltip: string;\n /**\n * Wheter the tab can be closed.\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isClosable = false;\n /**\n * Wheter the tab is visible.\n *\n * @default true\n */\n @Input({ transform: booleanAttribute }) isVisible = true;\n /**\n * Wheter the tab is active.\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isActive = false;\n /**\n * Wheter the tab is disabled.\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isDisabled = false;\n /**\n * Wheter the close is handled on application side.\n *\n *\n * @default false\n */\n @Input({ transform: booleanAttribute }) isHandleCloseOnClose = false;\n\n @ContentChild(EuiTabLabelComponent)\n get templateLabel(): EuiTabLabelComponent {\n return this._templateLabel;\n }\n set templateLabel(value: EuiTabLabelComponent) {\n this.setTemplateLabelInput(value);\n }\n protected _templateLabel: EuiTabLabelComponent;\n\n @ContentChild(EuiTabContentComponent)\n get templateContent(): EuiTabContentComponent {\n return this._templateContent;\n }\n set templateContent(value: EuiTabContentComponent) {\n this.setTemplateContentInput(value);\n }\n protected _templateContent: EuiTabContentComponent;\n\n constructor(public baseStatesDirective: BaseStatesDirective) {\n }\n\n protected setTemplateLabelInput(value: EuiTabLabelComponent): void {\n if (value) {\n this._templateLabel = value;\n }\n }\n\n protected setTemplateContentInput(value: EuiTabContentComponent): void {\n if (value) {\n this._templateContent = value;\n }\n }\n}\n","import {\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewEncapsulation,\n forwardRef,\n OnChanges,\n AfterViewInit,\n ViewChildren,\n ViewContainerRef,\n ViewChild,\n ElementRef,\n ChangeDetectorRef,\n SimpleChanges,\n HostBinding,\n booleanAttribute,\n ContentChild,\n OnInit,\n} from '@angular/core';\nimport { animate, AnimationBuilder, AnimationFactory, AnimationPlayer, style } from '@angular/animations';\nimport { Subject, Subscription, filter, startWith, takeUntil } from 'rxjs';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { EuiAppShellService } from '@eui/core';\n\nimport { EuiTabComponent } from './eui-tab/eui-tab.component';\nimport { AsyncPipe } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_BUTTON } from '@eui/components/eui-button';\nimport { EUI_ICON_BUTTON } from '@eui/components/eui-icon-button';\nimport { EuiTooltipDirective } from '@eui/components/directives';\n\n/**\n * @description\n * eUI Tabs component helps to organize content into separate views where only one view can be visible at a time.\n * Each tab's label is shown in the tab header and the active tab is designated with a primary ink bar visual.\n * The active tab may be set using the `activeTabIndex` input option or when the user selects one of the tab labels in the header.\n * When the list of tab labels exceeds the width of the header or its container, pagination controls appear to let the user scroll left and right across the tabs.\n */\n@Component({\n selector: 'eui-tabs',\n templateUrl: './eui-tabs.component.html',\n styleUrls: ['./styles/_index.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n PortalModule,\n EuiTooltipDirective,\n ...EUI_ICON,\n ...EUI_BUTTON,\n ...EUI_ICON_BUTTON,\n ],\n})\nexport class EuiTabsComponent implements OnDestroy, AfterViewInit, OnChanges, OnInit {\n /**\n * @description\n * Computes and returns the CSS classes for the component based on its current state.\n *\n * @returns {string} Space-separated string of CSS class names\n */\n @HostBinding('class')\n get elementClass(): string {\n return [\n 'eui-tabs',\n this.isMainNavigation ? 'eui-tabs--main-navigation': '',\n this.isVerticalTabs ? 'eui-tabs--vertical': '',\n ].join(' ').trim();\n }\n /**\n * Tabs in data approach\n *\n * @type {EuiTabComponent[]}\n */\n @Input() tabs: EuiTabComponent[] = [];\n /**\n * Index of the active tab\n *\n * @default 0\n */\n @Input() activeTabIndex = null;\n /**\n * Sets the `data-e2e` attribute for the host element.\n *\n * @default 'eui-tabs'\n */\n @HostBinding('attr.data-e2e')\n @Input() e2eAttr = 'eui-tabs';\n /**\n * The way the router will consider the url when used on tabs. 'prefix' | 'full'.\n *\n * @default 'prefix'\n */\n @Input() pathMatch: 'prefix' | 'full' = 'prefix';\n\n /**\n * Event emitted when a tab is closed.\n */\n @Output() tabClose = new EventEmitter<{ tab: EuiTabComponent; index: number }>();\n /**\n * Event emitted when a tab is selected.\n */\n @Output() tabSelect = new EventEmitter<{ tab: EuiTabComponent; index: number }>();\n\n @ContentChildren(forwardRef(() => EuiTabComponent), { descendants: false }) _tabs: QueryList<EuiTabComponent>;\n @ContentChild(forwardRef(() => EuiTabsRightContentTagDirective)) euiTabsRightContentTagDirective: EuiTabsRightContentTagDirective;\n @ViewChildren('euiTabLabelItem', { read: ViewContainerRef }) euiTabLabelItems: QueryList<ViewContainerRef>;\n @ViewChild('euiTabsItems') euiTabsItems: ElementRef;\n @ViewChild('euiTabsItemsWrapper') euiTabsItemsWrapper: ElementRef;\n\n public scrolling = false;\n public navigationLeftButtonDisabled = true;\n public navigationRightButtonDisabled = false;\n public currentOffset = 0;\n\n @Input({ transform: booleanAttribute }) isMainNavigation = false;\n @Input({ transform: booleanAttribute }) isHandleChangeTab = false;\n @Input({ transform: booleanAttribute }) isSubTabs = false;\n @Input({ transform: booleanAttribute }) isVerticalTabs = false;\n\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private routerSubscription: Subscription;\n private player: AnimationPlayer;\n private stepMove = 400;\n private scrollOffset = 50;\n /**\n * For race condition reason, the wrapper width is not correctly calculated when the component passes from no-scroll state to scroll\n * state. To fix this issue, we count the number of times the getScrollingStatus method is called.\n *\n * Scenario 1: The number of tabs does not require any scroll:\n * - Without any fix the scroll will have a delta of 64 at the first activation, then on the first no-scroll to scroll state,\n * - we had 64 to the move\n *\n * Scenario 2: The number of tabs requires a scroll:\n * - In this case the wrapper width is correctly calculated, so we don't need to add the delta\n */\n private scrollingCount = 0;\n\n constructor(\n private cd: ChangeDetectorRef,\n private router: Router,\n private builder: AnimationBuilder,\n private elementRef: ElementRef,\n private euiAppShellService: EuiAppShellService,\n ) {}\n\n ngOnChanges(c: SimpleChanges): void {\n if (c.activeTabIndex) {\n setTimeout(\n () => {\n const activeTab = this.euiTabsItemsWrapper.nativeElement.children.item(c.activeTabIndex.currentValue);\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n if (activeTab && !this.isActiveTabFullyVisible(activeTab)) {\n let scrollTo = 0;\n let subsetWidth = 0;\n for (let i = 0; i <= c.activeTabIndex.currentValue; i++) {\n subsetWidth += this.euiTabsItemsWrapper.nativeElement.children.item(i).clientWidth;\n }\n\n scrollTo = containerWidth / 2 - subsetWidth;\n\n if (Math.abs(scrollTo) > wrapperWidth - containerWidth + this.scrollOffset) {\n scrollTo = -(wrapperWidth - containerWidth + this.scrollOffset);\n }\n\n if (scrollTo > 0) {\n scrollTo = 0;\n }\n\n if (c.activeTabIndex.isFirstChange() && c.activeTabIndex.currentValue > 0) {\n this.setScrollTo(scrollTo, false);\n } else {\n this.setScrollTo(scrollTo);\n }\n }\n },\n c.activeTabIndex.isFirstChange() && c.activeTabIndex.currentValue > 0 ? 500 : 0,\n );\n }\n }\n\n ngOnInit(): void {\n this.euiAppShellService.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {\n this.getScrollingStatus();\n });\n }\n\n ngAfterViewInit(): void {\n this._tabs.changes.pipe(startWith(true), takeUntil(this.destroy$)).subscribe(() => {\n this.tabs = this._tabs.toArray();\n\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n }\n\n // TODO v18 check navigationEnd (deprecation)\n this.routerSubscription = this.router.events\n .pipe(\n filter((e) => e instanceof NavigationEnd),\n takeUntil(this.destroy$),\n startWith({ url: this.router.url }),\n )\n .subscribe((e: NavigationEnd) => {\n const tabsWithUrl = this.tabs.filter((t) => t.url && typeof t.url === 'string');\n if (tabsWithUrl.length === this.tabs.length) {\n let tabIndex = -1;\n if (this.pathMatch === 'full') {\n tabIndex = tabsWithUrl.findIndex((t) => e.url === t.url);\n } else {\n tabIndex = tabsWithUrl.findIndex((t) => {\n const regex = new RegExp(t.url + '(/?)');\n return regex.test(e.url);\n });\n }\n\n this.tabs = this.tabs.map((t, i) =>\n tabIndex === i ? Object.assign(t, { isActive: true }) : Object.assign(t, { isActive: false }),\n );\n\n if (this.tabs.findIndex((t) => t.isActive) !== -1) {\n this.activeTabIndex = this.tabs.findIndex((t) => t.isActive);\n }\n\n this.cd.detectChanges();\n }\n });\n\n if (!this.activeTabIndex) {\n this.activeTabIndex = this.tabs.findIndex((t) => t.isActive) !== -1 ? this.tabs.findIndex((t) => t.isActive) : 0;\n }\n\n this.cd.detectChanges();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * Listens to the content to be changed to recalculate the scrolling position and status.\n */\n public onContentChanges(): void {\n this.getScrollingStatus();\n }\n\n /**\n * Scroll to left handler\n */\n public goToLeft(): void {\n let scrollTo = this.currentOffset + this.stepMove;\n if (scrollTo > 0) {\n scrollTo = 0;\n }\n\n this.setScrollTo(scrollTo);\n }\n\n /**\n * Scroll to right handler\n */\n public goToRight(): void {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n let scrollTo = this.currentOffset - this.stepMove;\n\n if (Math.abs(scrollTo) > wrapperWidth - containerWidth) {\n scrollTo = -(wrapperWidth - containerWidth) - this.scrollOffset;\n }\n\n this.setScrollTo(scrollTo);\n }\n\n /**\n * Click handler for tab item\n *\n * @param index Index of the tab clicked\n */\n public changeTab(index: number): void {\n if (this.isHandleChangeTab) {\n this.tabSelect.emit({ tab: this.tabs[index], index });\n } else {\n if (this.tabs[index] && !this.tabs[index].isDisabled) {\n if (this.tabs[this.activeTabIndex]) {\n this.tabs[this.activeTabIndex].isActive = false;\n }\n this.tabs[index].isActive = true;\n\n const activeTab = this.euiTabsItemsWrapper.nativeElement.children.item(index);\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n if (activeTab && !this.isActiveTabFullyVisible(activeTab) && !this.isVerticalTabs && !this.isMainNavigation) {\n let scrollTo = 0;\n let subsetWidth = 0;\n for (let i = 0; i <= index; i++) {\n subsetWidth += this.euiTabsItemsWrapper.nativeElement.children.item(i).clientWidth;\n }\n\n scrollTo = containerWidth / 2 - subsetWidth;\n\n if (Math.abs(scrollTo) > wrapperWidth - containerWidth + this.scrollOffset) {\n scrollTo = -(wrapperWidth - containerWidth + this.scrollOffset);\n }\n\n if (scrollTo > 0) {\n scrollTo = 0;\n }\n\n this.setScrollTo(scrollTo);\n }\n\n if (!this.tabs[index].url) {\n this.activeTabIndex = index;\n this.tabSelect.emit({ tab: this.tabs[index], index });\n } else {\n this.activeTabIndex = index;\n this.router.navigateByUrl(this.tabs[index].url);\n }\n }\n }\n }\n\n /**\n * Handles the `keyup` event for a tab element at the specified index.\n *\n * When the user presses the \"Enter\" or \"Space\" key, this method checks if the tab at the given index\n * is enabled (not disabled). If so, it activates that tab and deactivates all others.\n *\n * @param e The keyboard event triggered by the keyup action.\n * @param index The index of the tab associated with the key event.\n */\n public onKeyUp(e: KeyboardEvent, index: number): void {\n if (e.code === 'Enter' || e.code === 'Space') {\n if (this.tabs[index] && !this.tabs[index].isDisabled) {\n this.tabs.map((t, i) => (i === index ? Object.assign(t, { isActive: true }) : Object.assign(t, { isActive: false })));\n\n if (!this.tabs[index].url) {\n this.activeTabIndex = index;\n this.tabSelect.emit({ tab: this.tabs[index], index });\n } else {\n this.activeTabIndex = index;\n this.router.navigateByUrl(this.tabs[index].url);\n }\n }\n }\n }\n\n /**\n * Closes the tab specified by `index` parameter\n *\n * @param index Index of the tab to close\n * @param e Event of the click\n */\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public closeTab(index: number, e: any): void {\n const tab = this.tabs[index];\n if (!this.tabs[index].isHandleCloseOnClose) {\n this.close(e.index);\n this.tabs = this.tabs.filter((t, i) => i !== index);\n }\n\n this.tabClose.emit({ tab, index });\n e.stopPropagation();\n }\n\n /**\n * Close a tab pass in parameter.\n *\n * @param index Index of the tab to close\n */\n public close(index: number): void {\n if (index === this.activeTabIndex) {\n const previousVisibleIndex = this.tabs.indexOf(this.tabs[index - 1]);\n\n if (previousVisibleIndex < 0) {\n this.changeTab(0);\n } else {\n this.changeTab(previousVisibleIndex);\n }\n } else {\n if (index < this.activeTabIndex) {\n this.activeTabIndex = this.activeTabIndex - 1;\n }\n }\n\n this.tabs = this.tabs.filter((t, i) => i !== index);\n }\n\n /**\n * Checks if the active tab is fully visible\n *\n * @param activeTab Tab element to check\n * @returns true if fully visible, false otherwise\n */\n private isActiveTabFullyVisible(activeTab: HTMLDivElement): boolean {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n return activeTab.offsetLeft - 48 >= 0 && activeTab.offsetLeft + activeTab.clientWidth < containerWidth - 48;\n }\n\n /**\n * Sets the scroll position of the tabs headers\n *\n * @param scrollTo Number to set on the margin-left style property\n * @param isAnimated Whether the tab activation should be animated\n */\n private setScrollTo(scrollTo: number, isAnimated = true): void {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n const timings = isAnimated ? '500ms cubic-bezier(0.35, 0, 0.25, 1)' : 0;\n const animation: AnimationFactory = this.builder.build([animate(timings, style({ 'margin-left': +scrollTo + 'px' }))]);\n\n this.player = animation.create(this.euiTabsItemsWrapper.nativeElement);\n this.player.play();\n\n this.currentOffset = scrollTo;\n\n if (scrollTo === 0) {\n this.navigationLeftButtonDisabled = true;\n }\n if (Math.abs(this.currentOffset) < wrapperWidth - containerWidth + this.scrollOffset) {\n this.navigationRightButtonDisabled = false;\n }\n if (this.currentOffset < 0) {\n this.navigationLeftButtonDisabled = false;\n }\n if (Math.abs(scrollTo) === wrapperWidth - containerWidth + this.scrollOffset) {\n this.navigationRightButtonDisabled = true;\n }\n\n this.cd.detectChanges();\n }\n\n /**\n * Checks if the tabs headers are scrolling and calculates the scrolling position\n */\n private getScrollingStatus(): void {\n if (this.euiTabsItems && this.euiTabsItemsWrapper) {\n const containerWidth = this.euiTabsItems.nativeElement.clientWidth;\n const wrapperWidth = this.euiTabsItemsWrapper.nativeElement.clientWidth;\n\n this.scrolling = containerWidth < wrapperWidth;\n\n if (!this.scrolling) {\n this.scrollingCount = 0;\n this.setScrollTo(0);\n } else {\n if (wrapperWidth - containerWidth <= Math.abs(this.currentOffset) + this.scrollOffset) {\n const deltaFix = this.scrollingCount === 0 ? this.scrollOffset * 2 : 0;\n const scrollTo = -(wrapperWidth - containerWidth) - this.scrollOffset - deltaFix;\n\n this.setScrollTo(scrollTo);\n\n this.currentOffset = scrollTo;\n } else {\n if (Math.abs(this.currentOffset) < wrapperWidth - containerWidth + this.scrollOffset) {\n this.navigationRightButtonDisabled = false;\n }\n if (this.currentOffset < 0) {\n this.navigationLeftButtonDisabled = false;\n }\n }\n\n this.scrollingCount++;\n }\n\n this.cd.detectChanges();\n }\n }\n}\n\n/* eslint-disable */\n@Directive({ selector: 'euiTabsRightContent' })\nexport class EuiTabsRightContentTagDirective {\n @HostBinding('class') elementClass = 'eui-tabs__right-content-wrapper';\n}\n/* eslint-enable */\n","<div class=\"eui-u-flex\" [class.eui-tabs__wrapper--horizontal]=\"!isVerticalTabs\" [class.eui-tabs__wrapper--vertical]=\"isVerticalTabs\">\n <div\n #euiTabsItems\n class=\"eui-tabs__items\"\n [class.eui-tabs__items--horizontal]=\"!isVerticalTabs\"\n [class.eui-tabs__items--scrolling]=\"scrolling\"\n (cdkObserveContent)=\"onContentChanges()\">\n <div #euiTabsItemsWrapper class=\"eui-tabs__items-wrapper\" [attr.data-offset]=\"currentOffset\" role=\"tablist\">\n @for (tab of tabs; let i = $index; track tab) {\n @if (tab.isVisible) {\n <div\n tabindex=\"0\"\n role=\"tab\"\n class=\"eui-tab-item eui-tab-item--{{ tab.baseStatesDirective.euiVariant }}\"\n [class.eui-tab-item--closable]=\"tab.isClosable\"\n [class.eui-tab-item--active]=\"activeTabIndex === i\"\n [class.eui-tab-item--disabled]=\"tab.isDisabled\"\n [attr.aria-disabled]=\"tab.isDisabled\"\n (click)=\"changeTab(i)\"\n [euiTooltip]=\"tab.tooltip\"\n (keyup)=\"onKeyUp($event, i)\">\n <div class=\"eui-tab-item__label\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel.templatePortal\"></ng-template>\n </div>\n @if (tab.isClosable) {\n <eui-icon-button\n class=\"eui-tab-item__close-button\"\n icon=\"close:outline\"\n ariaLabel=\"close tab\"\n (buttonClick)=\"closeTab(i, $event)\"\n euiRounded>\n </eui-icon-button>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"eui-tabs__navigation\">\n <div class=\"eui-tabs__navigation__left-item\">\n <button\n (click)=\"goToLeft()\"\n euiButton\n euiIconButton\n euiBasicButton\n type=\"button\"\n [euiDisabled]=\"navigationLeftButtonDisabled\"\n aria-label=\"Scroll left\">\n <eui-icon-svg icon=\"chevron-back:sharp\"></eui-icon-svg>\n </button>\n </div>\n <div class=\"eui-tabs__navigation__right-item\">\n <button\n (click)=\"goToRight()\"\n euiButton\n euiIconButton\n euiBasicButton\n type=\"button\"\n [euiDisabled]=\"navigationRightButtonDisabled\"\n aria-label=\"Scroll right\">\n <eui-icon-svg icon=\"chevron-forward:sharp\"></eui-icon-svg>\n </button>\n </div>\n </div>\n </div>\n\n @if (euiTabsRightContentTagDirective) {\n <div class=\"eui-tabs__right-content\">\n <ng-content select=\"euiTabsRightContent\"></ng-content>\n </div>\n }\n</div>\n\n@for (tab of tabs; let i = $index; track tab) {\n @if (i === activeTabIndex && tab.templateContent) {\n <div class=\"eui-tab-content-wrapper\" tabindex=\"0\">\n <ng-template [cdkPortalOutlet]=\"tab.templateContent.templatePortal\"></ng-template>\n </div>\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { EuiTabComponent } from './eui-tab/eui-tab.component';\nimport { EuiTabsComponent, EuiTabsRightContentTagDirective } from './eui-tabs.component';\nimport { EuiTabLabelComponent, EuiTabSubLabelDirective } from './eui-tab-label/eui-tab-label.component';\nimport { EuiTabContentComponent } from './eui-tab-content/eui-tab-content.component';\n\n/**\n * @description\n * Module that provides the EuiTabs component and its dependencies\n * \n * @deprecated Use {@link EUI_TABS} instead.\n */\n@NgModule({\n imports: [\n EuiTabsComponent,\n EuiTabComponent,\n EuiTabsRightContentTagDirective,\n EuiTabLabelComponent,\n EuiTabSubLabelDirective,\n EuiTabContentComponent,\n ],\n exports: [\n EuiTabsComponent,\n EuiTabComponent,\n EuiTabsRightContentTagDirective,\n EuiTabLabelComponent,\n EuiTabSubLabelDirective,\n EuiTabContentComponent,\n ],\n})\nexport class EuiTabsModule {}\n","import { EuiTabContentComponent } from './eui-tab-content/eui-tab-content.component';\nimport { EuiTabLabelComponent, EuiTabSubLabelDirective } from './eui-tab-label/eui-tab-label.component';\nimport { EuiTabComponent } from './eui-tab/eui-tab.component';\nimport { EuiTabsComponent, EuiTabsRightContentTagDirective } from './eui-tabs.component';\n\nexport * from './eui-tabs.module';\nexport * from './eui-tabs.component';\nexport * from './eui-tab/eui-tab.component';\nexport * from './eui-tab-label/eui-tab-label.component';\nexport * from './eui-tab-content/eui-tab-content.component';\n\nexport const EUI_TABS = [\n EuiTabsComponent,\n EuiTabComponent,\n EuiTabsRightContentTagDirective,\n EuiTabLabelComponent,\n EuiTabSubLabelDirective,\n EuiTabContentComponent,\n] as const;","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
@@ -331,7 +331,7 @@ class EuiTimebarComponent {
|
|
331
331
|
return firstItem.date.getTime() - secondItem.date.getTime();
|
332
332
|
}
|
333
333
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: EuiTimebarComponent, deps: [{ token: i1.EuiAppShellService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
334
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: EuiTimebarComponent, isStandalone: true, selector: "eui-timebar", inputs: { e2eAttr: "e2eAttr", markedDate: "markedDate", items: "items", startLabel: "startLabel", endLabel: "endLabel", dateFormat: "dateFormat", isShowLegend: ["isShowLegend", "isShowLegend", booleanAttribute], isShowLegendAsIndex: ["isShowLegendAsIndex", "isShowLegendAsIndex", booleanAttribute], isShowCurrentDateMarker: ["isShowCurrentDateMarker", "isShowCurrentDateMarker", booleanAttribute], isCurrentDateMarkerAlwaysInRange: ["isCurrentDateMarkerAlwaysInRange", "isCurrentDateMarkerAlwaysInRange", booleanAttribute], isGroupOverlappingLabels: ["isGroupOverlappingLabels", "isGroupOverlappingLabels", booleanAttribute] }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row eui-u-flex\" #container>\n @if(startLabel) {\n <div class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n }\n <div class=\"{{timebarColumnClass}} {{ 'col-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n }\n @if(markedDate) {\n <div class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n }\n\n @for (item of itemsUI; let i = $index; track i) {\n @if(!item.isGrouped) {\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n @if(!isMobile) {\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n @if(item.groupEndDate) {\n <span\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''}}\">\n {{ item.groupEndDate | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n }\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n </div>\n }\n @if(!isShowLegendGenerated) {\n <div [style.left.%]=\"!isMobile ? item.perc : null\" class=\"eui-timebar__step-label\">\n @if(!item.groupLabel) {\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n }\n @if(item.groupLabel) {\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n }\n </div>\n }\n @if(isShowLegendGenerated && isShowLegendAsIndexGenerated) {\n <div\n [style.left.%]=\"!isMobile ? item.perc : null\"\n class=\"eui-timebar__step-label\">\n {{ !item.groupLabel ? i + 1 : item.groupLabel }}\n </div>\n }\n </div>\n }\n }\n\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n @if(markedDate) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n </div>\n </div>\n @if(endLabel) {\n <div class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n }\n</div>\n<div class=\"row eui-u-flex-justify-content-center\">\n <div class=\"{{timebarColumnClass}} {{ 'col-md-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n @if (isShowLegendGenerated || isSomeStepsAreGrouped) {\n <div class=\"eui-timebar__legend\">\n @for (item of itemsUI; let i = $index; track i){\n @if(isShowLegendGenerated) {\n <div class=\"eui-timebar__legend-item\">\n @if(!isShowLegendAsIndexGenerated) {\n <div class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n } @else {\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ i + 1 }}</eui-badge>\n </div>\n }\n <div class=\"eui-timebar__legend-item-label\">\n @if(isMobile) {\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> -\n }\n {{ item.item.label }}\n </div>\n </div>\n }\n @if(!isShowLegendGenerated && (item.groupLabel || item.isGrouped)) {\n <div class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ item.groupIndex }}</eui-badge>\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> - {{ item.item.label }}\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</div>\n", styles: [".eui-19 .eui-timebar{border-bottom:2px solid var(--eui-c-neutral-lightest);margin:6rem 3rem;padding:5px;position:relative}.eui-19 .eui-timebar__step{border:7px solid var(--eui-c-s-secondary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-19 .eui-timebar__step-date-item{background-color:var(--eui-c-s-secondary-surface-light);color:var(--eui-c-s-secondary-on-surface-light);border:1px solid var(--eui-c-s-secondary-border);border-radius:var(--eui-br-max);max-width:8rem;min-width:6rem;padding:var(--eui-s-2xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-19 .eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:before,.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-19 .eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-s-primary-base);padding-top:5px;position:absolute}.eui-19 .eui-timebar__current-date-marker{color:var(--eui-c-s-danger-base);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-19 .eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-s-danger-base);position:absolute}.eui-19 .eui-timebar__start-label,.eui-19 .eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-19 .eui-timebar__start-label{text-align:right}.eui-19 .eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-19 .eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-19 .eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-19 .eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-19 .eui-timebar__legend-item-label{flex:1}.eui-19 .eui-timebar__legend-item-index-wrapper{padding:var(--eui-s-xs) var(--eui-s-s)}.eui-19 .eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-s-info-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-s-success-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-s-warning-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-s-danger-surface-light)}.eui-19 .eui-timebar__step--info{border-color:var(--eui-c-s-info-base)}.eui-19 .eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-s-info-surface-light);color:var(--eui-c-s-info-on-surface-light);border:1px solid var(--eui-c-s-info-border)}.eui-19 .eui-timebar__step--success{border-color:var(--eui-c-s-success-base)}.eui-19 .eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-s-success-surface-light);color:var(--eui-c-s-success-on-surface-light);border:1px solid var(--eui-c-s-success-border)}.eui-19 .eui-timebar__step--warning{border-color:var(--eui-c-s-warning-base)}.eui-19 .eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-s-warning-surface-light);color:var(--eui-c-s-warning-on-surface-light);border:1px solid var(--eui-c-s-warning-border)}.eui-19 .eui-timebar__step--danger{border-color:var(--eui-c-s-danger-base)}.eui-19 .eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-s-danger-surface-light);color:var(--eui-c-s-danger-on-surface-light);border:1px solid var(--eui-c-s-danger-border)}.eui-19 .eui-timebar__legend-item-icon{color:var(--eui-c-s-primary);fill:var(--eui-c-s-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-19 .eui-timebar__legend-item-icon--info{color:var(--eui-c-s-info)}.eui-19 .eui-timebar__legend-item-icon--success{color:var(--eui-c-s-success)}.eui-19 .eui-timebar__legend-item-icon--warning{color:var(--eui-c-s-warning)}.eui-19 .eui-timebar__legend-item-icon--danger{color:var(--eui-c-s-danger)}@media screen and (max-width: 767px){.eui-19 .eui-timebar{margin:5rem var(--eui-s-m)}.eui-19 .eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: i2.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i3.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["e2eAttr", "aria-label", "maxCharCount", "charReplacement", "euiIconBadge", "euiDottedBadge"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
334
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: EuiTimebarComponent, isStandalone: true, selector: "eui-timebar", inputs: { e2eAttr: "e2eAttr", markedDate: "markedDate", items: "items", startLabel: "startLabel", endLabel: "endLabel", dateFormat: "dateFormat", isShowLegend: ["isShowLegend", "isShowLegend", booleanAttribute], isShowLegendAsIndex: ["isShowLegendAsIndex", "isShowLegendAsIndex", booleanAttribute], isShowCurrentDateMarker: ["isShowCurrentDateMarker", "isShowCurrentDateMarker", booleanAttribute], isCurrentDateMarkerAlwaysInRange: ["isCurrentDateMarkerAlwaysInRange", "isCurrentDateMarkerAlwaysInRange", booleanAttribute], isGroupOverlappingLabels: ["isGroupOverlappingLabels", "isGroupOverlappingLabels", booleanAttribute] }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row eui-u-flex\" #container>\n @if(startLabel) {\n <div class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n }\n <div class=\"{{timebarColumnClass}} {{ 'col-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n }\n @if(markedDate) {\n <div class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n }\n\n @for (item of itemsUI; let i = $index; track i) {\n @if(!item.isGrouped) {\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n @if(!isMobile) {\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n @if(item.groupEndDate) {\n <span\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''}}\">\n {{ item.groupEndDate | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n }\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n </div>\n }\n @if(!isShowLegendGenerated) {\n <div [style.left.%]=\"!isMobile ? item.perc : null\" class=\"eui-timebar__step-label\">\n @if(!item.groupLabel) {\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n }\n @if(item.groupLabel) {\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n }\n </div>\n }\n @if(isShowLegendGenerated && isShowLegendAsIndexGenerated) {\n <div\n [style.left.%]=\"!isMobile ? item.perc : null\"\n class=\"eui-timebar__step-label\">\n {{ !item.groupLabel ? i + 1 : item.groupLabel }}\n </div>\n }\n </div>\n }\n }\n\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n @if(markedDate) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n </div>\n </div>\n @if(endLabel) {\n <div class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n }\n</div>\n<div class=\"row eui-u-flex-justify-content-center\">\n <div class=\"{{timebarColumnClass}} {{ 'col-md-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n @if (isShowLegendGenerated || isSomeStepsAreGrouped) {\n <div class=\"eui-timebar__legend\">\n @for (item of itemsUI; let i = $index; track i){\n @if(isShowLegendGenerated) {\n <div class=\"eui-timebar__legend-item\">\n @if(!isShowLegendAsIndexGenerated) {\n <div class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n } @else {\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ i + 1 }}</eui-badge>\n </div>\n }\n <div class=\"eui-timebar__legend-item-label\">\n @if(isMobile) {\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> -\n }\n {{ item.item.label }}\n </div>\n </div>\n }\n @if(!isShowLegendGenerated && (item.groupLabel || item.isGrouped)) {\n <div class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ item.groupIndex }}</eui-badge>\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> - {{ item.item.label }}\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</div>\n", styles: [".eui-19 .eui-timebar{border-bottom:2px solid var(--eui-c-divider);margin:6rem 3rem;padding:5px;position:relative}.eui-19 .eui-timebar__step{border:7px solid var(--eui-c-s-secondary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-19 .eui-timebar__step-date-item{background-color:var(--eui-c-s-secondary-surface-light);color:var(--eui-c-s-secondary-on-surface-light);border:1px solid var(--eui-c-s-secondary-border);border-radius:var(--eui-br-max);max-width:8rem;min-width:6rem;padding:var(--eui-s-2xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-19 .eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:before,.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-19 .eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-s-primary-base);padding-top:5px;position:absolute}.eui-19 .eui-timebar__current-date-marker{color:var(--eui-c-s-danger-base);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-19 .eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-s-danger-base);position:absolute}.eui-19 .eui-timebar__start-label,.eui-19 .eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-19 .eui-timebar__start-label{text-align:right}.eui-19 .eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-19 .eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-19 .eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-19 .eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-19 .eui-timebar__legend-item-label{flex:1}.eui-19 .eui-timebar__legend-item-index-wrapper{padding:var(--eui-s-xs) var(--eui-s-s)}.eui-19 .eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-s-info-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-s-success-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-s-warning-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-s-danger-surface-light)}.eui-19 .eui-timebar__step--info{border-color:var(--eui-c-s-info-base)}.eui-19 .eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-s-info-surface-light);color:var(--eui-c-s-info-on-surface-light);border:1px solid var(--eui-c-s-info-border)}.eui-19 .eui-timebar__step--success{border-color:var(--eui-c-s-success-base)}.eui-19 .eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-s-success-surface-light);color:var(--eui-c-s-success-on-surface-light);border:1px solid var(--eui-c-s-success-border)}.eui-19 .eui-timebar__step--warning{border-color:var(--eui-c-s-warning-base)}.eui-19 .eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-s-warning-surface-light);color:var(--eui-c-s-warning-on-surface-light);border:1px solid var(--eui-c-s-warning-border)}.eui-19 .eui-timebar__step--danger{border-color:var(--eui-c-s-danger-base)}.eui-19 .eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-s-danger-surface-light);color:var(--eui-c-s-danger-on-surface-light);border:1px solid var(--eui-c-s-danger-border)}.eui-19 .eui-timebar__legend-item-icon{color:var(--eui-c-s-primary);fill:var(--eui-c-s-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-19 .eui-timebar__legend-item-icon--info{color:var(--eui-c-s-info)}.eui-19 .eui-timebar__legend-item-icon--success{color:var(--eui-c-s-success)}.eui-19 .eui-timebar__legend-item-icon--warning{color:var(--eui-c-s-warning)}.eui-19 .eui-timebar__legend-item-icon--danger{color:var(--eui-c-s-danger)}@media screen and (max-width: 767px){.eui-19 .eui-timebar{margin:5rem var(--eui-s-m)}.eui-19 .eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: i2.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i3.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["e2eAttr", "aria-label", "maxCharCount", "charReplacement", "euiIconBadge", "euiDottedBadge"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
335
335
|
}
|
336
336
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: EuiTimebarComponent, decorators: [{
|
337
337
|
type: Component,
|
@@ -341,7 +341,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImpor
|
|
341
341
|
DatePipe,
|
342
342
|
...EUI_ICON,
|
343
343
|
...EUI_BADGE,
|
344
|
-
], template: "<div class=\"row eui-u-flex\" #container>\n @if(startLabel) {\n <div class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n }\n <div class=\"{{timebarColumnClass}} {{ 'col-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n }\n @if(markedDate) {\n <div class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n }\n\n @for (item of itemsUI; let i = $index; track i) {\n @if(!item.isGrouped) {\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n @if(!isMobile) {\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n @if(item.groupEndDate) {\n <span\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''}}\">\n {{ item.groupEndDate | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n }\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n </div>\n }\n @if(!isShowLegendGenerated) {\n <div [style.left.%]=\"!isMobile ? item.perc : null\" class=\"eui-timebar__step-label\">\n @if(!item.groupLabel) {\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n }\n @if(item.groupLabel) {\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n }\n </div>\n }\n @if(isShowLegendGenerated && isShowLegendAsIndexGenerated) {\n <div\n [style.left.%]=\"!isMobile ? item.perc : null\"\n class=\"eui-timebar__step-label\">\n {{ !item.groupLabel ? i + 1 : item.groupLabel }}\n </div>\n }\n </div>\n }\n }\n\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n @if(markedDate) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n </div>\n </div>\n @if(endLabel) {\n <div class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n }\n</div>\n<div class=\"row eui-u-flex-justify-content-center\">\n <div class=\"{{timebarColumnClass}} {{ 'col-md-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n @if (isShowLegendGenerated || isSomeStepsAreGrouped) {\n <div class=\"eui-timebar__legend\">\n @for (item of itemsUI; let i = $index; track i){\n @if(isShowLegendGenerated) {\n <div class=\"eui-timebar__legend-item\">\n @if(!isShowLegendAsIndexGenerated) {\n <div class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n } @else {\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ i + 1 }}</eui-badge>\n </div>\n }\n <div class=\"eui-timebar__legend-item-label\">\n @if(isMobile) {\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> -\n }\n {{ item.item.label }}\n </div>\n </div>\n }\n @if(!isShowLegendGenerated && (item.groupLabel || item.isGrouped)) {\n <div class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ item.groupIndex }}</eui-badge>\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> - {{ item.item.label }}\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</div>\n", styles: [".eui-19 .eui-timebar{border-bottom:2px solid var(--eui-c-neutral-lightest);margin:6rem 3rem;padding:5px;position:relative}.eui-19 .eui-timebar__step{border:7px solid var(--eui-c-s-secondary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-19 .eui-timebar__step-date-item{background-color:var(--eui-c-s-secondary-surface-light);color:var(--eui-c-s-secondary-on-surface-light);border:1px solid var(--eui-c-s-secondary-border);border-radius:var(--eui-br-max);max-width:8rem;min-width:6rem;padding:var(--eui-s-2xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-19 .eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:before,.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-19 .eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-s-primary-base);padding-top:5px;position:absolute}.eui-19 .eui-timebar__current-date-marker{color:var(--eui-c-s-danger-base);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-19 .eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-s-danger-base);position:absolute}.eui-19 .eui-timebar__start-label,.eui-19 .eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-19 .eui-timebar__start-label{text-align:right}.eui-19 .eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-19 .eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-19 .eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-19 .eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-19 .eui-timebar__legend-item-label{flex:1}.eui-19 .eui-timebar__legend-item-index-wrapper{padding:var(--eui-s-xs) var(--eui-s-s)}.eui-19 .eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-s-info-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-s-success-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-s-warning-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-s-danger-surface-light)}.eui-19 .eui-timebar__step--info{border-color:var(--eui-c-s-info-base)}.eui-19 .eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-s-info-surface-light);color:var(--eui-c-s-info-on-surface-light);border:1px solid var(--eui-c-s-info-border)}.eui-19 .eui-timebar__step--success{border-color:var(--eui-c-s-success-base)}.eui-19 .eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-s-success-surface-light);color:var(--eui-c-s-success-on-surface-light);border:1px solid var(--eui-c-s-success-border)}.eui-19 .eui-timebar__step--warning{border-color:var(--eui-c-s-warning-base)}.eui-19 .eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-s-warning-surface-light);color:var(--eui-c-s-warning-on-surface-light);border:1px solid var(--eui-c-s-warning-border)}.eui-19 .eui-timebar__step--danger{border-color:var(--eui-c-s-danger-base)}.eui-19 .eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-s-danger-surface-light);color:var(--eui-c-s-danger-on-surface-light);border:1px solid var(--eui-c-s-danger-border)}.eui-19 .eui-timebar__legend-item-icon{color:var(--eui-c-s-primary);fill:var(--eui-c-s-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-19 .eui-timebar__legend-item-icon--info{color:var(--eui-c-s-info)}.eui-19 .eui-timebar__legend-item-icon--success{color:var(--eui-c-s-success)}.eui-19 .eui-timebar__legend-item-icon--warning{color:var(--eui-c-s-warning)}.eui-19 .eui-timebar__legend-item-icon--danger{color:var(--eui-c-s-danger)}@media screen and (max-width: 767px){.eui-19 .eui-timebar{margin:5rem var(--eui-s-m)}.eui-19 .eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"] }]
|
344
|
+
], template: "<div class=\"row eui-u-flex\" #container>\n @if(startLabel) {\n <div class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n }\n <div class=\"{{timebarColumnClass}} {{ 'col-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n }\n @if(markedDate) {\n <div class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n }\n\n @for (item of itemsUI; let i = $index; track i) {\n @if(!item.isGrouped) {\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n @if(!isMobile) {\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n @if(item.groupEndDate) {\n <span\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''}}\">\n {{ item.groupEndDate | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n }\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n </div>\n }\n @if(!isShowLegendGenerated) {\n <div [style.left.%]=\"!isMobile ? item.perc : null\" class=\"eui-timebar__step-label\">\n @if(!item.groupLabel) {\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n }\n @if(item.groupLabel) {\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n }\n </div>\n }\n @if(isShowLegendGenerated && isShowLegendAsIndexGenerated) {\n <div\n [style.left.%]=\"!isMobile ? item.perc : null\"\n class=\"eui-timebar__step-label\">\n {{ !item.groupLabel ? i + 1 : item.groupLabel }}\n </div>\n }\n </div>\n }\n }\n\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n @if(markedDate) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n </div>\n </div>\n @if(endLabel) {\n <div class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n }\n</div>\n<div class=\"row eui-u-flex-justify-content-center\">\n <div class=\"{{timebarColumnClass}} {{ 'col-md-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n @if (isShowLegendGenerated || isSomeStepsAreGrouped) {\n <div class=\"eui-timebar__legend\">\n @for (item of itemsUI; let i = $index; track i){\n @if(isShowLegendGenerated) {\n <div class=\"eui-timebar__legend-item\">\n @if(!isShowLegendAsIndexGenerated) {\n <div class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n } @else {\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ i + 1 }}</eui-badge>\n </div>\n }\n <div class=\"eui-timebar__legend-item-label\">\n @if(isMobile) {\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> -\n }\n {{ item.item.label }}\n </div>\n </div>\n }\n @if(!isShowLegendGenerated && (item.groupLabel || item.isGrouped)) {\n <div class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ item.groupIndex }}</eui-badge>\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> - {{ item.item.label }}\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</div>\n", styles: [".eui-19 .eui-timebar{border-bottom:2px solid var(--eui-c-divider);margin:6rem 3rem;padding:5px;position:relative}.eui-19 .eui-timebar__step{border:7px solid var(--eui-c-s-secondary);border-radius:var(--eui-br-max);height:14px;position:absolute;width:14px}.eui-19 .eui-timebar__step-date-item{background-color:var(--eui-c-s-secondary-surface-light);color:var(--eui-c-s-secondary-on-surface-light);border:1px solid var(--eui-c-s-secondary-border);border-radius:var(--eui-br-max);max-width:8rem;min-width:6rem;padding:var(--eui-s-2xs);position:absolute;text-align:center;top:-2.5rem;transform:rotate(65deg);transform-origin:50% -175%;white-space:normal;font:var(--eui-f-s)}.eui-19 .eui-timebar__step-date-item--with-end-date{left:2.5rem;top:-1.75rem}.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:before,.eui-19 .eui-timebar__step--with-current-date-marker.hint--top:after{bottom:25px}.eui-19 .eui-timebar__current-progress{border-bottom:3px solid var(--eui-c-s-primary-base);padding-top:5px;position:absolute}.eui-19 .eui-timebar__current-date-marker{color:var(--eui-c-s-danger-base);margin-left:-2px;position:absolute;top:calc(-1 * var(--eui-s-m) - var(--eui-s-2xs))}.eui-19 .eui-timebar__current-date-marker-step{bottom:calc(-1 * var(--eui-s-m) - 2px);color:var(--eui-c-s-danger-base);position:absolute}.eui-19 .eui-timebar__start-label,.eui-19 .eui-timebar__end-label{margin-top:6.5rem;font:var(--eui-f-s-bold)}.eui-19 .eui-timebar__start-label{text-align:right}.eui-19 .eui-timebar__step-date-item--with-end-date{margin:0;padding:0}.eui-19 .eui-timebar__step-label{margin-left:-4rem;margin-top:.7rem;overflow:hidden;position:absolute;text-align:center;width:8rem}.eui-19 .eui-timebar__legend{margin-left:var(--eui-s-s);margin-top:3rem}.eui-19 .eui-timebar__legend-item{align-items:center;display:flex;padding:var(--eui-s-xs) var(--eui-s-xs) var(--eui-s-xs) 0;width:100%}.eui-19 .eui-timebar__legend-item-label{flex:1}.eui-19 .eui-timebar__legend-item-index-wrapper{padding:var(--eui-s-xs) var(--eui-s-s)}.eui-19 .eui-timebar__grouped__step{border-radius:var(--eui-br-m);display:block;padding:3px 8px}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--info{background-color:var(--eui-c-s-info-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--success{background-color:var(--eui-c-s-success-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--warning{background-color:var(--eui-c-s-warning-surface-light)}.eui-19 .eui-timebar__grouped__step.eui-timebar__step--danger{background-color:var(--eui-c-s-danger-surface-light)}.eui-19 .eui-timebar__step--info{border-color:var(--eui-c-s-info-base)}.eui-19 .eui-timebar__step--info .eui-timebar__step-date-item{background-color:var(--eui-c-s-info-surface-light);color:var(--eui-c-s-info-on-surface-light);border:1px solid var(--eui-c-s-info-border)}.eui-19 .eui-timebar__step--success{border-color:var(--eui-c-s-success-base)}.eui-19 .eui-timebar__step--success .eui-timebar__step-date-item{background-color:var(--eui-c-s-success-surface-light);color:var(--eui-c-s-success-on-surface-light);border:1px solid var(--eui-c-s-success-border)}.eui-19 .eui-timebar__step--warning{border-color:var(--eui-c-s-warning-base)}.eui-19 .eui-timebar__step--warning .eui-timebar__step-date-item{background-color:var(--eui-c-s-warning-surface-light);color:var(--eui-c-s-warning-on-surface-light);border:1px solid var(--eui-c-s-warning-border)}.eui-19 .eui-timebar__step--danger{border-color:var(--eui-c-s-danger-base)}.eui-19 .eui-timebar__step--danger .eui-timebar__step-date-item{background-color:var(--eui-c-s-danger-surface-light);color:var(--eui-c-s-danger-on-surface-light);border:1px solid var(--eui-c-s-danger-border)}.eui-19 .eui-timebar__legend-item-icon{color:var(--eui-c-s-primary);fill:var(--eui-c-s-primary);width:var(--eui-s-3xl);height:var(--eui-s-3xl)}.eui-19 .eui-timebar__legend-item-icon--info{color:var(--eui-c-s-info)}.eui-19 .eui-timebar__legend-item-icon--success{color:var(--eui-c-s-success)}.eui-19 .eui-timebar__legend-item-icon--warning{color:var(--eui-c-s-warning)}.eui-19 .eui-timebar__legend-item-icon--danger{color:var(--eui-c-s-danger)}@media screen and (max-width: 767px){.eui-19 .eui-timebar{margin:5rem var(--eui-s-m)}.eui-19 .eui-timebar__legend{margin-bottom:var(--eui-s-l);margin-left:18px}}\n"] }]
|
345
345
|
}], ctorParameters: () => [{ type: i1.EuiAppShellService }, { type: i0.ChangeDetectorRef }], propDecorators: { container: [{
|
346
346
|
type: ViewChild,
|
347
347
|
args: ['container']
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eui-components-eui-timebar.mjs","sources":["../../eui-timebar/eui-timebar.component.ts","../../eui-timebar/eui-timebar.component.html","../../eui-timebar/eui-timebar-item.model.ts","../../eui-timebar/index.ts","../../eui-timebar/eui-components-eui-timebar.ts"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n NgModule,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChange,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { EuiAppShellService, formatNumber, LocaleService, LocaleState } from '@eui/core';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_BADGE } from '@eui/components/eui-badge';\nimport { EuiTimebarItem } from './eui-timebar-item.model';\nimport { AsyncPipe, DatePipe, NgClass } from '@angular/common';\n\nexport class EuiTimebarItemUI {\n perc: number;\n /**\n * info success warning danger\n */\n stepTypeClass: 'info'|'success'|'warning'|'danger'|string;\n tooltipColor: string;\n isGrouped?: boolean;\n groupIndex?: number;\n groupLabel?: string;\n groupEndDate?: Date;\n item: EuiTimebarItem;\n}\n\n/**\n * @description\n * A component for displaying chronological events or milestones on a horizontal timeline.\n *\n * The EuiTimebarComponent renders a horizontal timeline with customizable items, labels,\n * markers, and optional grouping for overlapping items. It supports responsive behavior,\n * current date indication, and multiple display options.\n *\n */\n@Component({\n selector: 'eui-timebar',\n templateUrl: './eui-timebar.component.html',\n styleUrls: ['./styles/_index.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgClass,\n AsyncPipe,\n DatePipe,\n ...EUI_ICON,\n ...EUI_BADGE,\n ],\n})\nexport class EuiTimebarComponent implements OnInit, AfterContentInit, AfterViewChecked, OnChanges, OnDestroy {\n itemsUI: EuiTimebarItemUI[] = [];\n currentDate = new Date();\n currentPerc: number;\n markedPerc: number;\n /**\n * The class to be applied to the timebar column.\n *\n * @deprecated Calculation of it happens internally and will be removed in the future\n */\n timebarColumnClass = '';\n subscription: Subscription;\n isShowLegendGenerated: boolean;\n isShowLegendAsIndexGenerated: boolean;\n isGroupOverlappingLabelsGenerated: boolean;\n isMobile = false;\n isSomeStepsAreGrouped = false;\n extraTimelineLabelSpace = 21;\n\n @ViewChild('container') container: ElementRef<HTMLDivElement>;\n @Input() e2eAttr = 'eui-timebar';\n /**\n * Date to be highlighted on the timeline.\n * Separate from currentDateMarker, which shows today's date.\n */\n @Input() markedDate: Date;\n /**\n * Collection of items to be displayed on the timeline.\n */\n @Input() items: EuiTimebarItem[];\n /**\n * Label displayed at the beginning of the timeline.\n */\n @Input() startLabel: string;\n\n /**\n * Label displayed at the end of the timeline.\n */\n @Input() endLabel: string;\n\n /**\n * Format for displaying dates in the timeline.\n * @default 'yyyy-MM-dd'\n */\n @Input() dateFormat: 'short'|'medium'|'long'|'full'|'shortDate'|'mediumDate'|'longDate'|'fullDate'|'shortTime'|'mediumTime'|'longTime'|'fullTime'|string = 'yyyy-MM-dd';\n\n /**\n * Whether to show a legend with timeline item labels.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isShowLegend = false;\n\n /**\n * Whether to display indices instead of colors in the legend.\n * @default true\n */\n @Input({ transform: booleanAttribute }) isShowLegendAsIndex = true;\n\n /**\n * Whether to display a marker for the current date on the timeline.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isShowCurrentDateMarker = false;\n\n /**\n * When true, keeps the current date marker visible even if the current date\n * is outside the timeline range by placing it at the edge of the timeline.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isCurrentDateMarkerAlwaysInRange = false;\n\n /**\n * Whether to group timeline items with overlapping labels to improve readability.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isGroupOverlappingLabels = false;\n\n protected maxStepWidth = 112; // 112px = 8rem = 2 x 4rem margin around starting and ending bullet.\n protected locale: LocaleService<LocaleState> = inject(LocaleService);\n\n constructor(\n private asService: EuiAppShellService,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.subscription = this.asService.breakpoints$.subscribe((bkps) => {\n this.onBreakpointChange(bkps);\n });\n }\n\n ngAfterContentInit(): void {\n this.removeNullItems();\n this.sortItems();\n\n const startDate: Date = this.items[0].date;\n const endDate: Date = this.items[this.items.length - 1].date;\n this.items.forEach((item) => {\n let stepTypeClass = '';\n let tooltipColor = 'none';\n\n if (item.stepType) {\n stepTypeClass = 'eui-timebar__step--' + item.stepType;\n tooltipColor = item.stepType;\n }\n\n const isNumber = /^\\d+\\.\\d+$/.test(item.label) || /^\\d+$/.test(item.label);\n\n if (isNumber) {\n item.label = formatNumber(item.label, 2);\n }\n\n this.itemsUI.push({\n perc: this.calculatePercentage(item.date, startDate, endDate),\n item,\n stepTypeClass,\n tooltipColor,\n });\n });\n\n this.currentPerc = this.calculatePercentage(this.currentDate, startDate, endDate, true);\n this.markedPerc = this.calculatePercentage(this.markedDate, startDate, endDate, true);\n\n // initialize attributes\n this.isShowLegendGenerated = this.isShowLegend;\n this.isShowLegendAsIndexGenerated = this.isShowLegendAsIndex;\n this.isGroupOverlappingLabelsGenerated = this.isGroupOverlappingLabels;\n this.isMobile = false;\n }\n\n ngAfterViewChecked(): void {\n this.groupOverlappingLabels();\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['markedDate']) {\n const change: SimpleChange = changes['markedDate'];\n const startDate: Date = this.items[0].date;\n const endDate: Date = this.items[this.items.length - 1].date;\n this.markedPerc = this.calculatePercentage(change.currentValue as Date, startDate, endDate);\n }\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onBreakpointChange(bkps: any): void {\n if (bkps.isMobile) {\n this.isShowLegendGenerated = this.isShowLegendAsIndexGenerated = this.isMobile = true;\n } else {\n this.isShowLegendGenerated = this.isShowLegend;\n this.isShowLegendAsIndexGenerated = this.isShowLegendAsIndex;\n this.isMobile = false;\n }\n }\n\n trackByFn(index: number, item: EuiTimebarItemUI): string {\n return item.item.label;\n }\n\n /**\n * Removes null and undefined items from the timeline collection.\n */\n protected removeNullItems(): void {\n if (this.items) {\n for (let i = 0; i < this.items.length; i++) {\n if (!this.items[i]) {\n this.items.splice(i, 1);\n i--;\n }\n }\n }\n }\n\n /**\n * Sorts the timeline items chronologically by their dates in ascending order.\n * Items with invalid or missing dates are treated as equal during comparison.\n */\n protected sortItems(): void {\n if (!this.items?.length) {\n return;\n }\n\n this.items = this.items\n .filter(a => this.areValidDates(a?.date))\n .sort(this.compareTimebarDates);\n }\n\n protected groupOverlappingLabels(): void {\n if (!this.isGroupOverlappingLabelsGenerated || !this.container || !this.itemsUI) {\n return;\n }\n\n this.clearGrouping();\n\n const containerWidth = this.container.nativeElement.clientWidth;\n const groupingThreshold = (this.maxStepWidth * 100) / containerWidth;\n\n let currentGroup = {\n startIndex: 0,\n items: [] as EuiTimebarItemUI[],\n };\n\n for (let i = 0; i < this.itemsUI.length; i++) {\n const currentItem = this.itemsUI[i];\n const previousItem = i > 0 ? this.itemsUI[i - 1] : null;\n\n if (!previousItem) {\n currentGroup.items.push(currentItem);\n continue;\n }\n\n const distance = Math.abs(currentItem.perc - previousItem.perc);\n\n if (distance <= groupingThreshold) {\n currentGroup.items.push(currentItem);\n } else {\n this.processGroup(currentGroup);\n currentGroup = {\n startIndex: i,\n items: [currentItem],\n };\n }\n }\n\n // Process the last group\n if (currentGroup.items.length > 0) {\n this.processGroup(currentGroup);\n }\n\n this.isSomeStepsAreGrouped = this.itemsUI.some(item => item.isGrouped);\n this.cd.detectChanges();\n }\n\n protected clearGrouping(): void {\n this.isSomeStepsAreGrouped = false;\n if (this.itemsUI) {\n for (const item of this.itemsUI) {\n delete item.isGrouped;\n delete item.groupIndex;\n delete item.groupLabel;\n delete item.groupEndDate;\n }\n }\n this.extraTimelineLabelSpace = 21;\n }\n\n /**\n * @deprecated it's not used anymore\n */\n protected calculateExtraTimelineLabelSpace(): void {\n if (this.itemsUI) {\n let maxLabelLength = 0;\n this.itemsUI\n .filter(i => i.item?.label)\n .forEach((i) => {\n maxLabelLength = Math.max(maxLabelLength, i.item.label.length);\n });\n\n if (maxLabelLength > 56) {\n // 56px = 4rem margin of the timeline itself.\n this.extraTimelineLabelSpace = maxLabelLength + 28; // 28px = 2rem = 1 line of text in height + margins\n }\n }\n }\n\n /**\n * Calculates the percentage position of a date within a given date range.\n *\n * @param date - The target date to calculate the position for\n * @param startDate - The beginning of the date range\n * @param endDate - The end of the date range\n * @param compensateForRange - When true, adjusts out-of-range values to maintain visualization constraints\n * @param alwaysInRange - When true, clamps the percentage to the 0-100 range\n * @returns The calculated percentage (0-100), or adjusted values (-3 or 103) if compensating for out-of-range dates\n *\n * @example\n * // Basic usage within range\n * calculatePercentage(new Date('2024-02-15'), new Date('2024-01-01'), new Date('2024-12-31'))\n *\n * // With range compensation\n * calculatePercentage(new Date('2025-01-01'), new Date('2024-01-01'), new Date('2024-12-31'), true)\n */\n protected calculatePercentage(date: Date, startDate: Date, endDate: Date, compensateForRange = false, alwaysInRange = this.isCurrentDateMarkerAlwaysInRange): number {\n if (!this.areValidDates(date, startDate, endDate)) {\n return 0;\n }\n const percentage = this.calculateBasePercentage(date, startDate, endDate);\n\n return compensateForRange\n ? this.adjustPercentageForRange(percentage, alwaysInRange)\n : percentage;\n }\n\n private processGroup(group: { startIndex: number; items: EuiTimebarItemUI[] }): void {\n if (group.items.length <= 1) {\n return;\n }\n\n const firstItem = group.items[0];\n const lastItem = group.items[group.items.length - 1];\n\n // Update the first item in the group\n firstItem.groupEndDate = lastItem.item.date;\n firstItem.stepTypeClass = lastItem.item.stepType;\n\n const groupLabels = this.generateGroupLabels(group);\n firstItem.groupLabel = groupLabels.join(', ');\n firstItem.groupIndex = group.startIndex + 1;\n\n // Mark remaining items as grouped\n for (let i = 1; i < group.items.length; i++) {\n const item = group.items[i];\n item.isGrouped = true;\n item.groupIndex = group.startIndex + i + 1;\n }\n }\n\n private generateGroupLabels(group: { startIndex: number; items: EuiTimebarItemUI[] }): string[] {\n return group.items.map((_, index) =>\n (group.startIndex + index + 1).toString(),\n );\n }\n\n /**\n * Verifies that all required dates are valid Date objects.\n *\n * @param dates - The dates to validate\n * @returns True if all dates are valid, otherwise false\n */\n private areValidDates(...dates: Date[]): boolean {\n return dates.every(date => date instanceof Date);\n }\n\n /**\n * Calculates the raw percentage position of a date within the range.\n *\n * @param date - The target date to calculate the position for\n * @param startDate - The beginning of the date range\n * @param endDate - The end of the date range\n *\n * @returns The calculated percentage (0-100) position on the range\n */\n private calculateBasePercentage(date: Date, startDate: Date, endDate: Date): number {\n const timespan = endDate.getTime() - startDate.getTime();\n const position = date.getTime() - startDate.getTime();\n return (position / timespan) * 100;\n }\n\n /**\n * Handles date positions that fall outside the specified range by applying boundary adjustments.\n *\n * For dates beyond the range boundaries, this method adjusts their position values\n * to maintain consistent TimeBar visualization. When isCurrentDateMarkerAlwaysInRange\n * is enabled, positions are clamped to the boundaries (0-100). Otherwise, they extend\n * slightly beyond (-3 or 103) to indicate out-of-range status.\n *\n * @param percentage - The calculated percentage position\n * @param alwaysInRange - When true, clamps the percentage to the 0-100 range\n *\n * @returns The adjusted percentage value\n */\n private adjustPercentageForRange(percentage: number, alwaysInRange: boolean): number {\n if (percentage > 100) {\n return alwaysInRange ? 100 : 103;\n }\n\n if (percentage <= 0) {\n return alwaysInRange ? 0 : -3;\n }\n\n return percentage;\n }\n\n /**\n * Compares two timeline items by their dates for sorting.\n *\n * @param firstItem - The first item to compare\n * @param secondItem - The second item to compare\n * @returns Negative if first date is earlier, positive if later, zero if equal\n */\n private compareTimebarDates(firstItem: EuiTimebarItem, secondItem: EuiTimebarItem): number {\n return firstItem.date.getTime() - secondItem.date.getTime();\n }\n}\n\n/**\n * @description\n * Angular module that provides the EuiTimebarComponent.\n *\n * @deprecated Use {@link EUI_TIMEBAR} instead\n */\n@NgModule({\n imports: [EuiTimebarComponent],\n exports: [EuiTimebarComponent],\n})\nexport class EuiTimebarModule {}\n","<div class=\"row eui-u-flex\" #container>\n @if(startLabel) {\n <div class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n }\n <div class=\"{{timebarColumnClass}} {{ 'col-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n }\n @if(markedDate) {\n <div class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n }\n\n @for (item of itemsUI; let i = $index; track i) {\n @if(!item.isGrouped) {\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n @if(!isMobile) {\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n @if(item.groupEndDate) {\n <span\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''}}\">\n {{ item.groupEndDate | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n }\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n </div>\n }\n @if(!isShowLegendGenerated) {\n <div [style.left.%]=\"!isMobile ? item.perc : null\" class=\"eui-timebar__step-label\">\n @if(!item.groupLabel) {\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n }\n @if(item.groupLabel) {\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n }\n </div>\n }\n @if(isShowLegendGenerated && isShowLegendAsIndexGenerated) {\n <div\n [style.left.%]=\"!isMobile ? item.perc : null\"\n class=\"eui-timebar__step-label\">\n {{ !item.groupLabel ? i + 1 : item.groupLabel }}\n </div>\n }\n </div>\n }\n }\n\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n @if(markedDate) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n </div>\n </div>\n @if(endLabel) {\n <div class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n }\n</div>\n<div class=\"row eui-u-flex-justify-content-center\">\n <div class=\"{{timebarColumnClass}} {{ 'col-md-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n @if (isShowLegendGenerated || isSomeStepsAreGrouped) {\n <div class=\"eui-timebar__legend\">\n @for (item of itemsUI; let i = $index; track i){\n @if(isShowLegendGenerated) {\n <div class=\"eui-timebar__legend-item\">\n @if(!isShowLegendAsIndexGenerated) {\n <div class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n } @else {\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ i + 1 }}</eui-badge>\n </div>\n }\n <div class=\"eui-timebar__legend-item-label\">\n @if(isMobile) {\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> -\n }\n {{ item.item.label }}\n </div>\n </div>\n }\n @if(!isShowLegendGenerated && (item.groupLabel || item.isGrouped)) {\n <div class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ item.groupIndex }}</eui-badge>\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> - {{ item.item.label }}\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</div>\n","/**\n * Represents a single item in the TimeBar component.\n * Used to define the data points that will be displayed on the timeline.\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface EuiTimebarItem {\n /**\n * The date to be displayed on the timeline.\n * Used to calculate the item's position in chronological order.\n */\n date: Date;\n\n /**\n * The text label that appears below the timeline marker.\n * Can be a string, a Date or a formatted number value.\n */\n label: string;\n\n /**\n * Optional visual style indicator for the timeline marker.\n * Supported values: 'info', 'success', 'warning', 'danger'\n */\n stepType?: 'info' | 'success' | 'warning' | 'danger' | string;\n}\n\n/**\n * @deprecated use the {@link EuiTimebarItem} interface instead.\n */\n// TODO: v17 remove this class - unnecessary\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class EuiTimebarItem implements EuiTimebarItem {\n date: Date;\n label: string;\n stepType?: string;\n\n constructor(values = {}) {\n Object.assign(this, values);\n }\n}\n","import { EuiTimebarComponent } from './eui-timebar.component';\n\nexport * from './eui-timebar.component';\nexport * from './eui-timebar-item.model';\n\nexport const EUI_TIMEBAR = [\n EuiTimebarComponent,\n] as const;\n\n// export { EuiTimebarComponent as EuiTimebar } from './eui-timebar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"eui-components-eui-timebar.mjs","sources":["../../eui-timebar/eui-timebar.component.ts","../../eui-timebar/eui-timebar.component.html","../../eui-timebar/eui-timebar-item.model.ts","../../eui-timebar/index.ts","../../eui-timebar/eui-components-eui-timebar.ts"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n NgModule,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChange,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { EuiAppShellService, formatNumber, LocaleService, LocaleState } from '@eui/core';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_BADGE } from '@eui/components/eui-badge';\nimport { EuiTimebarItem } from './eui-timebar-item.model';\nimport { AsyncPipe, DatePipe, NgClass } from '@angular/common';\n\nexport class EuiTimebarItemUI {\n perc: number;\n /**\n * info success warning danger\n */\n stepTypeClass: 'info'|'success'|'warning'|'danger'|string;\n tooltipColor: string;\n isGrouped?: boolean;\n groupIndex?: number;\n groupLabel?: string;\n groupEndDate?: Date;\n item: EuiTimebarItem;\n}\n\n/**\n * @description\n * A component for displaying chronological events or milestones on a horizontal timeline.\n *\n * The EuiTimebarComponent renders a horizontal timeline with customizable items, labels,\n * markers, and optional grouping for overlapping items. It supports responsive behavior,\n * current date indication, and multiple display options.\n *\n */\n@Component({\n selector: 'eui-timebar',\n templateUrl: './eui-timebar.component.html',\n styleUrls: ['./styles/_index.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgClass,\n AsyncPipe,\n DatePipe,\n ...EUI_ICON,\n ...EUI_BADGE,\n ],\n})\nexport class EuiTimebarComponent implements OnInit, AfterContentInit, AfterViewChecked, OnChanges, OnDestroy {\n itemsUI: EuiTimebarItemUI[] = [];\n currentDate = new Date();\n currentPerc: number;\n markedPerc: number;\n /**\n * The class to be applied to the timebar column.\n *\n * @deprecated Calculation of it happens internally and will be removed in the future\n */\n timebarColumnClass = '';\n subscription: Subscription;\n isShowLegendGenerated: boolean;\n isShowLegendAsIndexGenerated: boolean;\n isGroupOverlappingLabelsGenerated: boolean;\n isMobile = false;\n isSomeStepsAreGrouped = false;\n extraTimelineLabelSpace = 21;\n\n @ViewChild('container') container: ElementRef<HTMLDivElement>;\n @Input() e2eAttr = 'eui-timebar';\n /**\n * Date to be highlighted on the timeline.\n * Separate from currentDateMarker, which shows today's date.\n */\n @Input() markedDate: Date;\n /**\n * Collection of items to be displayed on the timeline.\n */\n @Input() items: EuiTimebarItem[];\n /**\n * Label displayed at the beginning of the timeline.\n */\n @Input() startLabel: string;\n\n /**\n * Label displayed at the end of the timeline.\n */\n @Input() endLabel: string;\n\n /**\n * Format for displaying dates in the timeline.\n * @default 'yyyy-MM-dd'\n */\n @Input() dateFormat: 'short'|'medium'|'long'|'full'|'shortDate'|'mediumDate'|'longDate'|'fullDate'|'shortTime'|'mediumTime'|'longTime'|'fullTime'|string = 'yyyy-MM-dd';\n\n /**\n * Whether to show a legend with timeline item labels.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isShowLegend = false;\n\n /**\n * Whether to display indices instead of colors in the legend.\n * @default true\n */\n @Input({ transform: booleanAttribute }) isShowLegendAsIndex = true;\n\n /**\n * Whether to display a marker for the current date on the timeline.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isShowCurrentDateMarker = false;\n\n /**\n * When true, keeps the current date marker visible even if the current date\n * is outside the timeline range by placing it at the edge of the timeline.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isCurrentDateMarkerAlwaysInRange = false;\n\n /**\n * Whether to group timeline items with overlapping labels to improve readability.\n * @default false\n */\n @Input({ transform: booleanAttribute }) isGroupOverlappingLabels = false;\n\n protected maxStepWidth = 112; // 112px = 8rem = 2 x 4rem margin around starting and ending bullet.\n protected locale: LocaleService<LocaleState> = inject(LocaleService);\n\n constructor(\n private asService: EuiAppShellService,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.subscription = this.asService.breakpoints$.subscribe((bkps) => {\n this.onBreakpointChange(bkps);\n });\n }\n\n ngAfterContentInit(): void {\n this.removeNullItems();\n this.sortItems();\n\n const startDate: Date = this.items[0].date;\n const endDate: Date = this.items[this.items.length - 1].date;\n this.items.forEach((item) => {\n let stepTypeClass = '';\n let tooltipColor = 'none';\n\n if (item.stepType) {\n stepTypeClass = 'eui-timebar__step--' + item.stepType;\n tooltipColor = item.stepType;\n }\n\n const isNumber = /^\\d+\\.\\d+$/.test(item.label) || /^\\d+$/.test(item.label);\n\n if (isNumber) {\n item.label = formatNumber(item.label, 2);\n }\n\n this.itemsUI.push({\n perc: this.calculatePercentage(item.date, startDate, endDate),\n item,\n stepTypeClass,\n tooltipColor,\n });\n });\n\n this.currentPerc = this.calculatePercentage(this.currentDate, startDate, endDate, true);\n this.markedPerc = this.calculatePercentage(this.markedDate, startDate, endDate, true);\n\n // initialize attributes\n this.isShowLegendGenerated = this.isShowLegend;\n this.isShowLegendAsIndexGenerated = this.isShowLegendAsIndex;\n this.isGroupOverlappingLabelsGenerated = this.isGroupOverlappingLabels;\n this.isMobile = false;\n }\n\n ngAfterViewChecked(): void {\n this.groupOverlappingLabels();\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['markedDate']) {\n const change: SimpleChange = changes['markedDate'];\n const startDate: Date = this.items[0].date;\n const endDate: Date = this.items[this.items.length - 1].date;\n this.markedPerc = this.calculatePercentage(change.currentValue as Date, startDate, endDate);\n }\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onBreakpointChange(bkps: any): void {\n if (bkps.isMobile) {\n this.isShowLegendGenerated = this.isShowLegendAsIndexGenerated = this.isMobile = true;\n } else {\n this.isShowLegendGenerated = this.isShowLegend;\n this.isShowLegendAsIndexGenerated = this.isShowLegendAsIndex;\n this.isMobile = false;\n }\n }\n\n trackByFn(index: number, item: EuiTimebarItemUI): string {\n return item.item.label;\n }\n\n /**\n * Removes null and undefined items from the timeline collection.\n */\n protected removeNullItems(): void {\n if (this.items) {\n for (let i = 0; i < this.items.length; i++) {\n if (!this.items[i]) {\n this.items.splice(i, 1);\n i--;\n }\n }\n }\n }\n\n /**\n * Sorts the timeline items chronologically by their dates in ascending order.\n * Items with invalid or missing dates are treated as equal during comparison.\n */\n protected sortItems(): void {\n if (!this.items?.length) {\n return;\n }\n\n this.items = this.items\n .filter(a => this.areValidDates(a?.date))\n .sort(this.compareTimebarDates);\n }\n\n protected groupOverlappingLabels(): void {\n if (!this.isGroupOverlappingLabelsGenerated || !this.container || !this.itemsUI) {\n return;\n }\n\n this.clearGrouping();\n\n const containerWidth = this.container.nativeElement.clientWidth;\n const groupingThreshold = (this.maxStepWidth * 100) / containerWidth;\n\n let currentGroup = {\n startIndex: 0,\n items: [] as EuiTimebarItemUI[],\n };\n\n for (let i = 0; i < this.itemsUI.length; i++) {\n const currentItem = this.itemsUI[i];\n const previousItem = i > 0 ? this.itemsUI[i - 1] : null;\n\n if (!previousItem) {\n currentGroup.items.push(currentItem);\n continue;\n }\n\n const distance = Math.abs(currentItem.perc - previousItem.perc);\n\n if (distance <= groupingThreshold) {\n currentGroup.items.push(currentItem);\n } else {\n this.processGroup(currentGroup);\n currentGroup = {\n startIndex: i,\n items: [currentItem],\n };\n }\n }\n\n // Process the last group\n if (currentGroup.items.length > 0) {\n this.processGroup(currentGroup);\n }\n\n this.isSomeStepsAreGrouped = this.itemsUI.some(item => item.isGrouped);\n this.cd.detectChanges();\n }\n\n protected clearGrouping(): void {\n this.isSomeStepsAreGrouped = false;\n if (this.itemsUI) {\n for (const item of this.itemsUI) {\n delete item.isGrouped;\n delete item.groupIndex;\n delete item.groupLabel;\n delete item.groupEndDate;\n }\n }\n this.extraTimelineLabelSpace = 21;\n }\n\n /**\n * @deprecated it's not used anymore\n */\n protected calculateExtraTimelineLabelSpace(): void {\n if (this.itemsUI) {\n let maxLabelLength = 0;\n this.itemsUI\n .filter(i => i.item?.label)\n .forEach((i) => {\n maxLabelLength = Math.max(maxLabelLength, i.item.label.length);\n });\n\n if (maxLabelLength > 56) {\n // 56px = 4rem margin of the timeline itself.\n this.extraTimelineLabelSpace = maxLabelLength + 28; // 28px = 2rem = 1 line of text in height + margins\n }\n }\n }\n\n /**\n * Calculates the percentage position of a date within a given date range.\n *\n * @param date - The target date to calculate the position for\n * @param startDate - The beginning of the date range\n * @param endDate - The end of the date range\n * @param compensateForRange - When true, adjusts out-of-range values to maintain visualization constraints\n * @param alwaysInRange - When true, clamps the percentage to the 0-100 range\n * @returns The calculated percentage (0-100), or adjusted values (-3 or 103) if compensating for out-of-range dates\n *\n * @example\n * // Basic usage within range\n * calculatePercentage(new Date('2024-02-15'), new Date('2024-01-01'), new Date('2024-12-31'))\n *\n * // With range compensation\n * calculatePercentage(new Date('2025-01-01'), new Date('2024-01-01'), new Date('2024-12-31'), true)\n */\n protected calculatePercentage(date: Date, startDate: Date, endDate: Date, compensateForRange = false, alwaysInRange = this.isCurrentDateMarkerAlwaysInRange): number {\n if (!this.areValidDates(date, startDate, endDate)) {\n return 0;\n }\n const percentage = this.calculateBasePercentage(date, startDate, endDate);\n\n return compensateForRange\n ? this.adjustPercentageForRange(percentage, alwaysInRange)\n : percentage;\n }\n\n private processGroup(group: { startIndex: number; items: EuiTimebarItemUI[] }): void {\n if (group.items.length <= 1) {\n return;\n }\n\n const firstItem = group.items[0];\n const lastItem = group.items[group.items.length - 1];\n\n // Update the first item in the group\n firstItem.groupEndDate = lastItem.item.date;\n firstItem.stepTypeClass = lastItem.item.stepType;\n\n const groupLabels = this.generateGroupLabels(group);\n firstItem.groupLabel = groupLabels.join(', ');\n firstItem.groupIndex = group.startIndex + 1;\n\n // Mark remaining items as grouped\n for (let i = 1; i < group.items.length; i++) {\n const item = group.items[i];\n item.isGrouped = true;\n item.groupIndex = group.startIndex + i + 1;\n }\n }\n\n private generateGroupLabels(group: { startIndex: number; items: EuiTimebarItemUI[] }): string[] {\n return group.items.map((_, index) =>\n (group.startIndex + index + 1).toString(),\n );\n }\n\n /**\n * Verifies that all required dates are valid Date objects.\n *\n * @param dates - The dates to validate\n * @returns True if all dates are valid, otherwise false\n */\n private areValidDates(...dates: Date[]): boolean {\n return dates.every(date => date instanceof Date);\n }\n\n /**\n * Calculates the raw percentage position of a date within the range.\n *\n * @param date - The target date to calculate the position for\n * @param startDate - The beginning of the date range\n * @param endDate - The end of the date range\n *\n * @returns The calculated percentage (0-100) position on the range\n */\n private calculateBasePercentage(date: Date, startDate: Date, endDate: Date): number {\n const timespan = endDate.getTime() - startDate.getTime();\n const position = date.getTime() - startDate.getTime();\n return (position / timespan) * 100;\n }\n\n /**\n * Handles date positions that fall outside the specified range by applying boundary adjustments.\n *\n * For dates beyond the range boundaries, this method adjusts their position values\n * to maintain consistent TimeBar visualization. When isCurrentDateMarkerAlwaysInRange\n * is enabled, positions are clamped to the boundaries (0-100). Otherwise, they extend\n * slightly beyond (-3 or 103) to indicate out-of-range status.\n *\n * @param percentage - The calculated percentage position\n * @param alwaysInRange - When true, clamps the percentage to the 0-100 range\n *\n * @returns The adjusted percentage value\n */\n private adjustPercentageForRange(percentage: number, alwaysInRange: boolean): number {\n if (percentage > 100) {\n return alwaysInRange ? 100 : 103;\n }\n\n if (percentage <= 0) {\n return alwaysInRange ? 0 : -3;\n }\n\n return percentage;\n }\n\n /**\n * Compares two timeline items by their dates for sorting.\n *\n * @param firstItem - The first item to compare\n * @param secondItem - The second item to compare\n * @returns Negative if first date is earlier, positive if later, zero if equal\n */\n private compareTimebarDates(firstItem: EuiTimebarItem, secondItem: EuiTimebarItem): number {\n return firstItem.date.getTime() - secondItem.date.getTime();\n }\n}\n\n/**\n * @description\n * Angular module that provides the EuiTimebarComponent.\n *\n * @deprecated Use {@link EUI_TIMEBAR} instead\n */\n@NgModule({\n imports: [EuiTimebarComponent],\n exports: [EuiTimebarComponent],\n})\nexport class EuiTimebarModule {}\n","<div class=\"row eui-u-flex\" #container>\n @if(startLabel) {\n <div class=\"col-2 eui-timebar__start-label\">\n {{ startLabel }}\n </div>\n }\n <div class=\"{{timebarColumnClass}} {{ 'col-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n <div class=\"eui-timebar\" [style.marginBottom.px]=\"extraTimelineLabelSpace\" attr.data-e2e=\"{{ e2eAttr }}\">\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-progress\"\n [style.width.%]=\"currentPerc >= 100 ? 100 : currentPerc\"></div>\n }\n @if(markedDate) {\n <div class=\"eui-timebar__current-progress\" [style.width.%]=\"markedPerc >= 100 ? 100 : markedPerc\"></div>\n }\n\n @for (item of itemsUI; let i = $index; track i) {\n @if(!item.isGrouped) {\n <div\n class=\"eui-timebar__step\"\n [ngClass]=\"item.stepTypeClass\"\n [style.left.%]=\"item.perc\"\n [class.eui-timebar__step--with-current-date-marker]=\"isShowCurrentDateMarker || markedDate\">\n @if(!isMobile) {\n <div class=\"eui-timebar__step-date-item\" [class.eui-timebar__step-date-item--with-end-date]=\"item.groupEndDate\">\n @if(item.groupEndDate) {\n <span\n class=\"eui-timebar__grouped__step {{\n item.stepTypeClass ? 'eui-timebar__step--' + item.stepTypeClass : ''}}\">\n {{ item.groupEndDate | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n }\n <span\n class=\"{{ item.tooltipColor ? 'eui-timebar__step--' + item.tooltipColor : '' }}\"\n [class.eui-timebar__grouped__step]=\"item.groupEndDate\">\n {{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}\n </span>\n </div>\n }\n @if(!isShowLegendGenerated) {\n <div [style.left.%]=\"!isMobile ? item.perc : null\" class=\"eui-timebar__step-label\">\n @if(!item.groupLabel) {\n <span title=\"{{ item.item.label }}\">{{ item.item.label }}</span>\n }\n @if(item.groupLabel) {\n <span title=\"{{ item.groupLabel }}\">{{ item.groupLabel }}</span>\n }\n </div>\n }\n @if(isShowLegendGenerated && isShowLegendAsIndexGenerated) {\n <div\n [style.left.%]=\"!isMobile ? item.perc : null\"\n class=\"eui-timebar__step-label\">\n {{ !item.groupLabel ? i + 1 : item.groupLabel }}\n </div>\n }\n </div>\n }\n }\n\n @if(isShowCurrentDateMarker) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"currentPerc\"\n title=\"{{ currentDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"currentPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n @if(markedDate) {\n <div\n class=\"eui-timebar__current-date-marker\"\n [style.left.%]=\"markedPerc\"\n title=\"{{ markedDate | date: dateFormat: null: (locale.getState() | async).id }}\">\n <eui-icon-svg icon=\"location\" set=\"sharp\" size=\"m\"></eui-icon-svg>\n </div>\n <div class=\"eui-timebar__current-date-marker-step\" [style.left.%]=\"markedPerc\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\"></eui-icon-svg>\n </div>\n }\n </div>\n </div>\n @if(endLabel) {\n <div class=\"col-2 eui-timebar__end-label\">\n {{ endLabel }}\n </div>\n }\n</div>\n<div class=\"row eui-u-flex-justify-content-center\">\n <div class=\"{{timebarColumnClass}} {{ 'col-md-' + ((startLabel ? -2 : 0) + (endLabel ? -2 : 0) + 12) }}\">\n @if (isShowLegendGenerated || isSomeStepsAreGrouped) {\n <div class=\"eui-timebar__legend\">\n @for (item of itemsUI; let i = $index; track i){\n @if(isShowLegendGenerated) {\n <div class=\"eui-timebar__legend-item\">\n @if(!isShowLegendAsIndexGenerated) {\n <div class=\"eui-timebar__legend-item-icon\">\n <eui-icon-svg icon=\"ellipse:sharp\" size=\"s\" fillColor=\"{{ item.item.stepType }}\"></eui-icon-svg>\n </div>\n } @else {\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ i + 1 }}</eui-badge>\n </div>\n }\n <div class=\"eui-timebar__legend-item-label\">\n @if(isMobile) {\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> -\n }\n {{ item.item.label }}\n </div>\n </div>\n }\n @if(!isShowLegendGenerated && (item.groupLabel || item.isGrouped)) {\n <div class=\"eui-timebar__legend-item\">\n <div class=\"eui-timebar__legend-item-index-wrapper\">\n <eui-badge euiSizeL euiPrimary>{{ item.groupIndex }}</eui-badge>\n </div>\n <div class=\"eui-timebar__legend-item-label\">\n <strong>{{ item.item.date | date: dateFormat: null: (locale.getState() | async).id }}</strong> - {{ item.item.label }}\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</div>\n","/**\n * Represents a single item in the TimeBar component.\n * Used to define the data points that will be displayed on the timeline.\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface EuiTimebarItem {\n /**\n * The date to be displayed on the timeline.\n * Used to calculate the item's position in chronological order.\n */\n date: Date;\n\n /**\n * The text label that appears below the timeline marker.\n * Can be a string, a Date or a formatted number value.\n */\n label: string;\n\n /**\n * Optional visual style indicator for the timeline marker.\n * Supported values: 'info', 'success', 'warning', 'danger'\n */\n stepType?: 'info' | 'success' | 'warning' | 'danger' | string;\n}\n\n/**\n * @deprecated use the {@link EuiTimebarItem} interface instead.\n */\n// TODO: v17 remove this class - unnecessary\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class EuiTimebarItem implements EuiTimebarItem {\n date: Date;\n label: string;\n stepType?: string;\n\n constructor(values = {}) {\n Object.assign(this, values);\n }\n}\n","import { EuiTimebarComponent } from './eui-timebar.component';\n\nexport * from './eui-timebar.component';\nexport * from './eui-timebar-item.model';\n\nexport const EUI_TIMEBAR = [\n EuiTimebarComponent,\n] as const;\n\n// export { EuiTimebarComponent as EuiTimebar } from './eui-timebar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|