@clr/angular
Version:
Angular components for Clarity
1 lines • 136 kB
Source Map (JSON)
{"version":3,"file":"clr-angular-utils.mjs","sources":["../../../projects/angular/utils/forms/validation.ts","../../../projects/angular/utils/dom-adapter/dom-adapter.ts","../../../projects/angular/utils/dom-adapter/dom-adapter.mock.ts","../../../projects/angular/utils/outside-click/outside-click.ts","../../../projects/angular/utils/outside-click/outside-click.module.ts","../../../projects/angular/utils/outside-click/index.ts","../../../projects/angular/utils/template-ref/template-ref-container.ts","../../../projects/angular/utils/template-ref/template-ref.module.ts","../../../projects/angular/utils/template-ref/index.ts","../../../projects/angular/utils/breakpoints/breakpoints.ts","../../../projects/angular/utils/host-wrapping/empty-anchor.ts","../../../projects/angular/utils/host-wrapping/host-wrapper.ts","../../../projects/angular/utils/host-wrapping/host-wrapping.module.ts","../../../projects/angular/utils/host-wrapping/index.ts","../../../projects/angular/utils/assert/assert.helpers.ts","../../../projects/angular/utils/component/is-boolean-attribute-set.ts","../../../projects/angular/utils/animations/constants.ts","../../../projects/angular/utils/animations/collapse/collapse.ts","../../../projects/angular/utils/animations/collapse/index.ts","../../../projects/angular/utils/animations/expandable-animation/base-expandable-animation.ts","../../../projects/angular/utils/animations/expandable-animation/expandable-animation.ts","../../../projects/angular/utils/animations/expandable-animation/expandable-animation.directive.ts","../../../projects/angular/utils/animations/expandable-animation/expandable-animation.module.ts","../../../projects/angular/utils/animations/expandable-animation/index.ts","../../../projects/angular/utils/animations/fade/fade.ts","../../../projects/angular/utils/animations/fade/index.ts","../../../projects/angular/utils/animations/fade-slide/fade-slide.ts","../../../projects/angular/utils/animations/fade-slide/index.ts","../../../projects/angular/utils/animations/slide/slide.ts","../../../projects/angular/utils/animations/slide/index.ts","../../../projects/angular/utils/animations/index.ts","../../../projects/angular/utils/i18n/common-strings.default.ts","../../../projects/angular/utils/i18n/common-strings.service.ts","../../../projects/angular/utils/i18n/common-strings.interface.ts","../../../projects/angular/utils/i18n/index.ts","../../../projects/angular/utils/focus/focus-on-view-init/focus-on-view-init.provider.ts","../../../projects/angular/utils/focus/focus-on-view-init/focus-on-view-init.ts","../../../projects/angular/utils/focus/focus-on-view-init/focus-on-view-init.module.ts","../../../projects/angular/utils/focus/focus-on-view-init/index.ts","../../../projects/angular/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.ts","../../../projects/angular/utils/focus/focus-trap/index.ts","../../../projects/angular/utils/focus/key-focus/enums/focus-direction.enum.ts","../../../projects/angular/utils/focus/key-focus/key-focus-item.ts","../../../projects/angular/utils/enums/keys.enum.ts","../../../projects/angular/utils/focus/key-focus/util.ts","../../../projects/angular/utils/focus/key-focus/key-focus.ts","../../../projects/angular/utils/focus/key-focus/roving-tabindex.ts","../../../projects/angular/utils/focus/key-focus/key-focus.module.ts","../../../projects/angular/utils/focus/key-focus/index.ts","../../../projects/angular/utils/focus/focusable-item/focusable-item.ts","../../../projects/angular/utils/focus/focusable-item/focusable-item.mock.ts","../../../projects/angular/utils/id-generator/id-generator.service.ts","../../../projects/angular/utils/focus/focusable-item/basic-focusable-item.service.ts","../../../projects/angular/utils/focus/focusable-item/custom-focusable-item-provider.ts","../../../projects/angular/utils/focus/focusable-item/linkers.ts","../../../projects/angular/utils/focus/wrap-observable.ts","../../../projects/angular/utils/focus/arrow-key-direction.enum.ts","../../../projects/angular/utils/focus/focus.service.ts","../../../projects/angular/utils/scrolling/scrolling-service.ts","../../../projects/angular/utils/cdk/cdk-drag.module.ts","../../../projects/angular/utils/cdk/cdk-trap-focus.module.ts","../../../projects/angular/utils/destroy/destroy.service.ts","../../../projects/angular/utils/destroy/index.ts","../../../projects/angular/utils/types/heading-level.ts","../../../projects/angular/utils/enums/position.enum.ts","../../../projects/angular/utils/chocolate/willy-wonka.ts","../../../projects/angular/utils/chocolate/oompa-loompa.ts","../../../projects/angular/utils/index.ts","../../../projects/angular/utils/clr-angular-utils.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { FormControl, FormGroup } from '@angular/forms';\n\nexport function triggerAllFormControlValidation(formGroup: FormGroup) {\n Object.keys(formGroup.controls).forEach(field => {\n const control = formGroup.get(field);\n if (control instanceof FormControl) {\n control.markAsTouched();\n control.markAsDirty();\n control.updateValueAndValidity();\n } else if (control instanceof FormGroup) {\n triggerAllFormControlValidation(control);\n }\n });\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/*\n * If we someday want to be able to render the datagrid in a webworker,\n * this is where we would test if we're in headless mode. Right now it's not testing anything, but any access\n * to native DOM elements' methods and properties in the Datagrid happens here.\n */\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DomAdapter {\n /* \n We clone the element and take its measurements from outside the grid\n so we don't trigger reflow for the whole datagrid.\n */\n userDefinedWidth(element: HTMLElement): number {\n const clonedElement = element.cloneNode(true) as HTMLElement;\n if (clonedElement.id) {\n clonedElement.id = clonedElement.id + '-clone';\n }\n clonedElement.classList.add('datagrid-cell-width-zero');\n document.body.appendChild(clonedElement);\n const userDefinedWidth = this.clientRect(clonedElement).width;\n clonedElement.remove();\n return userDefinedWidth;\n }\n\n scrollBarWidth(element: any) {\n return element.offsetWidth - element.clientWidth;\n }\n\n scrollWidth(element: any) {\n return element.scrollWidth || 0;\n }\n\n computedHeight(element: any): number {\n return parseInt(getComputedStyle(element).getPropertyValue('height'), 10);\n }\n\n clientRect(element: any): DOMRect {\n const elementClientRect = element.getBoundingClientRect();\n return {\n top: parseInt(elementClientRect.top, 10),\n bottom: parseInt(elementClientRect.bottom, 10),\n left: parseInt(elementClientRect.left, 10),\n right: parseInt(elementClientRect.right, 10),\n width: parseInt(elementClientRect.width, 10),\n height: parseInt(elementClientRect.height, 10),\n } as DOMRect;\n }\n\n minWidth(element: any): number {\n return parseInt(getComputedStyle(element).getPropertyValue('min-width'), 10);\n }\n\n focus(element: any): void {\n element.focus();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\n\nimport { DomAdapter } from './dom-adapter';\n\n@Injectable()\nexport class MockDomAdapter extends DomAdapter {\n _userDefinedWidth = 0;\n _scrollBarWidth = 0;\n _scrollWidth = 0;\n _computedHeight = 0;\n\n override userDefinedWidth(_element: any): number {\n return this._userDefinedWidth;\n }\n\n override scrollBarWidth(_element: any) {\n return this._scrollBarWidth;\n }\n\n override scrollWidth(_element: any) {\n return this._scrollWidth;\n }\n\n override computedHeight(_element: any) {\n return this._computedHeight;\n }\n}\n\nexport const MOCK_DOM_ADAPTER_PROVIDER = {\n provide: DomAdapter,\n useClass: MockDomAdapter,\n};\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, Output, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[clrOutsideClick]',\n standalone: false,\n})\nexport class OutsideClick implements OnDestroy {\n @Input('clrStrict') strict = false;\n\n @Output('clrOutsideClick') outsideClick = new EventEmitter<any>(false);\n\n private documentClickListener: VoidFunction;\n\n constructor(host: ElementRef<HTMLElement>, renderer: Renderer2, ngZone: NgZone) {\n ngZone.runOutsideAngular(() => {\n this.documentClickListener = renderer.listen('document', 'click', (event: MouseEvent) => {\n // Compare the element in the DOM on which the mouse was clicked\n // with the current actionMenu native HTML element.\n if (host.nativeElement === event.target) {\n return;\n }\n\n if (!this.strict && host.nativeElement.contains(event.target as HTMLElement)) {\n return;\n }\n\n // We'll run change detection only if the click event actually happened outside of\n // the host element.\n ngZone.run(() => {\n this.outsideClick.emit(event);\n });\n });\n });\n }\n\n ngOnDestroy(): void {\n this.documentClickListener();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\n\nimport { OutsideClick } from './outside-click';\n\nexport const OUSTIDE_CLICK_DIRECTIVES: Type<any>[] = [OutsideClick];\n@NgModule({\n imports: [CommonModule],\n declarations: [OUSTIDE_CLICK_DIRECTIVES],\n exports: [OUSTIDE_CLICK_DIRECTIVES],\n})\nexport class ClrOutsideClickModule {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './outside-click';\nexport * from './outside-click.module';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n template: `\n <ng-template>\n <ng-content></ng-content>\n </ng-template>\n `,\n standalone: false,\n})\nexport class TemplateRefContainer {\n @ViewChild(TemplateRef) template: TemplateRef<any>;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { TemplateRefContainer } from './template-ref-container';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [TemplateRefContainer],\n exports: [TemplateRefContainer],\n})\nexport class ClrTemplateRefModule {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './template-ref-container';\nexport * from './template-ref.module';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * TODO:\n * Using core functions like:\n * - pluckPixelValue\n * - getCssPropertyValue\n *\n * to get the value of the design token.\n *\n * Note: Memoization/Cache usage possible.\n */\n\n// iPad mini screen width\n// http://stephen.io/mediaqueries/#iPadMini\nexport const DATEPICKER_ENABLE_BREAKPOINT = 768;\nexport const SMALL_BREAKPOINT = 576;\nexport const MEDIUM_BREAKPOINT = 768;\nexport const LARGE_BREAKPOINT = 992;\nexport const EXTRA_LARGE_BREAKPOINT = 1200;\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n template: '',\n standalone: false,\n})\nexport class EmptyAnchor {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ElementRef, InjectionToken, Injector, Type, ViewContainerRef } from '@angular/core';\n\nimport { EmptyAnchor } from './empty-anchor';\n\n/**\n * HostWrapper must be called in OnInit to ensure that the Views are ready. If its called in a constructor the view is\n * still undefined.\n */\nexport class HostWrapper<W> implements Injector {\n private injector: Injector;\n\n constructor(containerType: Type<W>, vcr: ViewContainerRef, index = 0) {\n this.injector = vcr.injector;\n // If the host is already wrapped, we don't do anything\n if (!this.injector.get(containerType, null)) {\n const el = this.injector.get(ElementRef);\n\n // We need a new anchor, since we're projecting the current one.\n vcr.createComponent(EmptyAnchor);\n // Craft the element array based on what slot to use. Angular only uses the index to determine\n // which ng-content to project into, so if you have more than one ng-content you'll need to set\n // the index in the constructor appropriately\n const element = [];\n element[index] = [el.nativeElement];\n // We're assuming only one projection slot, but in more complex cases we might want to provide\n // a different array of projected elements.\n const containerRef = vcr.createComponent(containerType, {\n projectableNodes: element,\n });\n // We can now remove the useless anchor\n vcr.remove(0);\n\n // We keep the wrapper's injector to access the dependencies that weren't available before.\n this.injector = containerRef.injector;\n }\n }\n\n get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T): T {\n return this.injector.get(token, notFoundValue);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { EmptyAnchor } from './empty-anchor';\n\n/**\n * Internal module, please do not export!\n */\n@NgModule({\n declarations: [EmptyAnchor],\n exports: [EmptyAnchor],\n})\nexport class ClrHostWrappingModule {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './empty-anchor';\nexport * from './host-wrapper';\nexport * from './host-wrapping.module';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport function assertNever(value: never) {\n throw new Error(`Unhandled value: ${value}`);\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport function isBooleanAttributeSet(value: string | boolean): boolean {\n // for null just return false no need to check anything\n if (value === null) {\n return false;\n }\n if (typeof value === 'string') {\n // Empty string is valid, 'true' as string is also valid\n return value.length >= 0;\n }\n // Boolean value will be read as it is, everything else is false\n return typeof value === 'boolean' ? value : false;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, animation, style } from '@angular/animations';\n\nexport const defaultAnimationTiming = '0.2s ease-in-out';\nexport const defaultExpandAnimation = animation(\n [style({ height: '{{ startHeight }}px' }), animate(defaultAnimationTiming, style({ height: '*' }))],\n {\n params: {\n startHeight: 0, // default\n },\n }\n);\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, AnimationMetadata, state, style, transition } from '@angular/animations';\n\nimport { defaultAnimationTiming } from '../constants';\n\nexport function collapse(): AnimationMetadata[] {\n 'use strict';\n return [\n state('true', style({ height: 0, 'overflow-y': 'hidden' })),\n transition('true => false', [animate(defaultAnimationTiming, style({ height: '*', 'overflow-y': 'hidden' }))]),\n transition('false => true', [style({ height: '*', 'overflow-y': 'hidden' }), animate(defaultAnimationTiming)]),\n ];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './collapse';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, Renderer2 } from '@angular/core';\n\nimport { DomAdapter } from '../../dom-adapter/dom-adapter';\n\n@Directive()\nexport class BaseExpandableAnimation {\n startHeight = 0;\n\n constructor(\n protected element: ElementRef<HTMLElement>,\n protected domAdapter: DomAdapter,\n protected renderer: Renderer2\n ) {}\n\n updateStartHeight() {\n this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;\n }\n\n initAnimationEffects() {\n this.renderer.setStyle(this.element.nativeElement, 'overflow', 'hidden');\n }\n\n cleanupAnimationEffects(cancelAnimations = false) {\n this.renderer.removeStyle(this.element.nativeElement, 'overflow');\n\n // A \"safe\" auto-update of the height ensuring basic OOTB user experience .\n // Prone to small jumps in initial animation height if data was changed in the meantime, the window was resized, etc.\n // For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.\n this.updateStartHeight();\n if (cancelAnimations) {\n this.cancelElementAnimations();\n }\n }\n\n private cancelElementAnimations() {\n this.element.nativeElement.getAnimations().forEach(animation => {\n if (animation.playState === 'finished') {\n animation.cancel(); // clears animation-style set on the element\n }\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AnimationEvent, transition, trigger, useAnimation } from '@angular/animations';\nimport { Component, HostBinding, HostListener, Input } from '@angular/core';\n\nimport { DomAdapter } from '../../dom-adapter/dom-adapter';\nimport { defaultExpandAnimation } from '../constants';\nimport { BaseExpandableAnimation } from './base-expandable-animation';\n\n@Component({\n selector: 'clr-expandable-animation',\n template: `<ng-content></ng-content>`,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n animations: [trigger('expandAnimation', [transition('true <=> false', [useAnimation(defaultExpandAnimation)])])],\n providers: [DomAdapter],\n standalone: false,\n})\nexport class ClrExpandableAnimation extends BaseExpandableAnimation {\n @Input() clrExpandTrigger = false;\n\n @HostBinding('@expandAnimation')\n get expandAnimation() {\n return { value: this.clrExpandTrigger, params: { startHeight: this.startHeight } };\n }\n\n @HostListener('@expandAnimation.start', ['$event'])\n animationStart(event: AnimationEvent) {\n if (event.fromState !== 'void') {\n this.initAnimationEffects();\n }\n }\n @HostListener('@expandAnimation.done', ['$event'])\n animationDone(event: AnimationEvent) {\n if (event.fromState !== 'void') {\n this.cleanupAnimationEffects();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AnimationBuilder, AnimationPlayer, useAnimation } from '@angular/animations';\nimport { Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';\n\nimport { DomAdapter } from '../../dom-adapter/dom-adapter';\nimport { defaultExpandAnimation } from '../constants';\nimport { BaseExpandableAnimation } from './base-expandable-animation';\n\n@Directive({\n selector: '[clrExpandableAnimation]',\n providers: [DomAdapter],\n host: {\n '[class.clr-expandable-animation]': 'true',\n },\n standalone: false,\n})\nexport class ClrExpandableAnimationDirective extends BaseExpandableAnimation implements OnChanges, OnDestroy {\n @Input('clrExpandableAnimation') expanded = false;\n\n private player: AnimationPlayer;\n\n constructor(\n element: ElementRef<HTMLElement>,\n domAdapter: DomAdapter,\n renderer: Renderer2,\n private builder: AnimationBuilder\n ) {\n super(element, domAdapter, renderer);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['expanded'] && !changes['expanded'].firstChange) {\n Promise.resolve().then(() => this.playAnimation());\n }\n }\n\n ngOnDestroy() {\n this.player?.destroy();\n }\n\n playAnimation() {\n if (this.player) {\n this.player.destroy();\n }\n\n this.player = this.builder\n .build([useAnimation(defaultExpandAnimation, { params: { startHeight: this.startHeight } })])\n .create(this.element.nativeElement);\n\n this.player.onStart(() => this.initAnimationEffects());\n\n this.player.onDone(() => this.cleanupAnimationEffects(true));\n\n this.player.play();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\n\nimport { ClrExpandableAnimation } from './expandable-animation';\nimport { ClrExpandableAnimationDirective } from './expandable-animation.directive';\n\nexport const EXPANDABLE_ANIMATION_DIRECTIVES: Type<any>[] = [ClrExpandableAnimation, ClrExpandableAnimationDirective];\n\n@NgModule({\n imports: [CommonModule],\n declarations: [EXPANDABLE_ANIMATION_DIRECTIVES],\n exports: [EXPANDABLE_ANIMATION_DIRECTIVES],\n})\nexport class ClrExpandableAnimationModule {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './base-expandable-animation';\nexport * from './expandable-animation';\nexport * from './expandable-animation.directive';\nexport * from './expandable-animation.module';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, AnimationMetadata, style, transition } from '@angular/animations';\n\nimport { defaultAnimationTiming } from '../constants';\n\nexport function fade(opacity = 1): AnimationMetadata[] {\n return [\n transition('void => *', [style({ opacity: 0 }), animate(defaultAnimationTiming, style({ opacity: opacity }))]),\n transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0 }))]),\n ];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './fade';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, AnimationMetadata, style, transition } from '@angular/animations';\n\nimport { defaultAnimationTiming } from '../constants';\n\nexport function fadeSlide(direction: string): AnimationMetadata[] {\n let transform: string = null;\n if (direction === 'up') {\n transform = 'translate(0, 25%)';\n } else if (direction === 'down') {\n transform = 'translate(0, -25%)';\n } else if (direction === 'left') {\n transform = 'translate(25%, 0)';\n } else if (direction === 'right') {\n transform = 'translate(-25%, 0)';\n } else {\n throw new Error('Unknown direction ' + direction + ' for slide animation.');\n }\n return [\n transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),\n transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),\n ];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './fade-slide';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, AnimationMetadata, style, transition } from '@angular/animations';\n\nimport { defaultAnimationTiming } from '../constants';\n\nexport function slide(direction: string): AnimationMetadata[] {\n let transform: string = null;\n if (direction === 'up') {\n transform = 'translate(0, 25%)';\n } else if (direction === 'down') {\n transform = 'translate(0, -25%)';\n } else if (direction === 'left') {\n transform = 'translate(25%, 0)';\n } else if (direction === 'right') {\n transform = 'translate(-25%, 0)';\n } else {\n throw new Error('Unknown direction ' + direction + ' for slide animation.');\n }\n return [\n transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),\n transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),\n ];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './slide';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './constants';\nexport * from './collapse/index';\nexport * from './expandable-animation/index';\nexport * from './fade/index';\nexport * from './fade-slide/index';\nexport * from './slide/index';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrCommonStrings } from './common-strings.interface';\n\nexport const commonStringsDefault: ClrCommonStrings = {\n open: 'Open',\n close: 'Close',\n show: 'Show',\n hide: 'Hide',\n apply: 'Apply',\n cancel: 'Cancel',\n expand: 'Expand',\n collapse: 'Collapse',\n more: 'More',\n select: 'Select',\n selectAll: 'Select All',\n previous: 'Previous',\n next: 'Next',\n current: 'Jump to current',\n info: 'Info',\n success: 'Success',\n warning: 'Warning',\n danger: 'Error',\n neutral: 'Neutral',\n unknown: 'Unknown',\n rowActions: 'Available actions',\n pickColumns: 'Manage Columns',\n showColumns: 'Show Columns',\n sortColumn: 'Sort Column',\n firstPage: 'First Page',\n lastPage: 'Last Page',\n nextPage: 'Next Page',\n previousPage: 'Previous Page',\n currentPage: 'Current Page',\n totalPages: 'Total Pages',\n filterItems: 'Filter items',\n minValue: 'Min value',\n maxValue: 'Max value',\n modalContentStart: 'Beginning of Modal Content',\n modalContentEnd: 'End of Modal Content',\n sidePanelPin: 'Pin Side Panel',\n showColumnsMenuDescription: 'Show or hide columns menu',\n allColumnsSelected: 'All columns selected',\n signpostToggle: 'Signpost Toggle',\n signpostClose: 'Close',\n loading: 'Loading',\n // Datagrid\n detailPaneStart: 'Start of row details',\n detailPaneEnd: 'End of row details',\n singleSelectionAriaLabel: 'Single selection header',\n singleActionableAriaLabel: 'Single actionable header',\n detailExpandableAriaLabel: 'Toggle more row content',\n datagridFilterAriaLabel: '{COLUMN} filter',\n datagridFilterLabel: '{COLUMN} filter',\n datagridFilterDialogAriaLabel: 'Filter dialog',\n columnSeparatorAriaLabel: 'Column resize handle',\n columnSeparatorDescription: 'Use left or right key to resize the column',\n fromLabel: 'From',\n toLabel: 'To',\n // Alert\n alertCloseButtonAriaLabel: 'Close alert',\n alertNextAlertAriaLabel: 'Next alert message, {CURRENT} of {COUNT}',\n alertPreviousAlertAriaLabel: 'Previous alert message, {CURRENT} of {COUNT}',\n // Date Picker\n datepickerDialogLabel: 'Choose date',\n datepickerToggleChooseDateLabel: 'Choose date',\n datepickerToggleChangeDateLabel: 'Change date, {SELECTED_DATE}',\n datepickerPreviousMonth: 'Previous month',\n datepickerCurrentMonth: 'Current month',\n datepickerNextMonth: 'Next month',\n datepickerPreviousDecade: 'Previous decade',\n datepickerNextDecade: 'Next decade',\n datepickerCurrentDecade: 'Current decade',\n datepickerSelectMonthText: 'Select month, the current month is {CALENDAR_MONTH}',\n datepickerSelectYearText: 'Select year, the current year is {CALENDAR_YEAR}',\n datepickerSelectedLabel: '{FULL_DATE} - Selected',\n // Stack View\n stackViewChanged: 'Value changed.',\n // Responsive Nav\n responsiveNavToggleOpen: 'Open navigation menu',\n responsiveNavToggleClose: 'Close navigation menu',\n responsiveNavOverflowOpen: 'Open navigation overflow menu',\n responsiveNavOverflowClose: 'Close navigation overflow menu',\n //Vertical Nav\n verticalNavToggle: 'Toggle vertical navigation',\n // Timeline steps\n timelineStepNotStarted: 'Not started',\n timelineStepCurrent: 'Current',\n timelineStepSuccess: 'Completed',\n timelineStepError: 'Error',\n timelineStepProcessing: 'In progress',\n // Combobox\n comboboxDelete: 'Delete selected option',\n comboboxSearching: 'Searching for matches for \"{INPUT}\"',\n comboboxSelection: 'Selection',\n comboboxSelected: 'Selected',\n comboboxNoResults: 'No results',\n comboboxOpen: 'Show options',\n comboboxSelectAll: 'Select All',\n comboboxUnselectAll: 'Unselect All',\n comboboxShowAll: 'Show all {ITEMS} selected',\n comboboxAllSelected: 'All {ITEMS} selected',\n comboboxShowLess: 'Show less',\n // Datagrid expandable rows\n datagridExpandableBeginningOf: 'Beginning of',\n datagridExpandableEndOf: 'End of',\n datagridExpandableRowContent: 'Expandable row content',\n datagridExpandableRowsHelperText: `Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button`,\n // Wizard\n wizardStep: 'Step',\n wizardStepCurrent: 'Current',\n wizardStepSuccess: 'Completed',\n wizardStepError: 'Error',\n wizardStepnavAriaLabel: 'Wizard steps',\n\n /**\n * Password Input\n * Screen-reader text for the hide/show password field button\n */\n passwordHide: 'Hide password for {LABEL}',\n passwordShow: 'Show password for {LABEL}',\n\n /**\n * Datagrid footer; sr-only text after the number of selected rows.\n */\n selectedRows: 'Selected rows',\n\n // Accordion/Stepper\n stepComplete: 'Step {STEP} complete',\n stepError: 'Error in step {STEP}',\n\n // File input\n browse: 'Browse',\n fileCount: '{COUNT} files',\n clearFile: 'Clear {FILE}',\n clearFiles: 'Clear {COUNT} files',\n\n // Tree\n selectedTreeNode: 'selected',\n unselectedTreeNode: 'unselected',\n\n // Breadcrumbs\n breadcrumbsLabel: 'breadcrumbs',\n expandBreadcrumbsLabel: 'Expand breadcrumbs',\n};\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\n\nimport { commonStringsDefault } from './common-strings.default';\nimport { ClrCommonStrings } from './common-strings.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClrCommonStringsService {\n private _strings = commonStringsDefault;\n\n /**\n * Access to all of the keys as strings\n */\n get keys(): Readonly<ClrCommonStrings> {\n return this._strings;\n }\n\n /**\n * Allows you to pass in new overrides for localization\n */\n localize(overrides: Partial<ClrCommonStrings>) {\n this._strings = { ...this._strings, ...overrides };\n }\n\n /**\n * Parse a string with a set of tokens to replace\n */\n parse(source: string, tokens: { [key: string]: string } = {}) {\n const names = Object.keys(tokens);\n let output = source;\n if (names.length) {\n names.forEach(name => {\n output = output.replace(`{${name}}`, tokens[name]);\n });\n }\n return output;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrCommonStrings {\n /**\n * Open button\n */\n open: string;\n /**\n * Close button\n */\n close: string;\n /**\n * Show button\n */\n show: string;\n /**\n * Hide button\n */\n hide: string;\n /**\n * Apply button\n */\n apply: string;\n /**\n * Cancel button\n */\n cancel: string;\n /**\n * Expandable components: expand caret\n */\n expand: string;\n /**\n * Expandable components: collapse caret\n */\n collapse: string;\n /**\n * Overflow menus: ellipsis button\n */\n more: string;\n /**\n * Selectable components: checkbox or radio\n */\n select: string;\n /**\n * Selectable components: checkbox to select all\n */\n selectAll: string;\n /**\n * Pagination: previous button\n */\n previous: string;\n /**\n * Pagination: next button\n */\n next: string;\n /**\n * Pagination: go to current\n */\n current: string;\n /**\n * Alert levels: info\n */\n info: string;\n /**\n * Alert levels: success\n */\n success: string;\n /**\n * Alert levels: warning\n */\n warning: string;\n /**\n * Alert levels: danger\n */\n danger: string;\n /**\n * Alert levels: neutral\n */\n neutral: string;\n /**\n * Alert levels: unknown\n */\n unknown: string;\n /**\n * Datagrid: row actions\n */\n rowActions: string;\n /**\n * Datagrid: pick columns\n */\n pickColumns: string;\n /**\n * Datagrid: show columns\n */\n showColumns: string;\n /**\n * Datagrid: sort of columns\n */\n sortColumn: string;\n /**\n * Datagrid: first page\n */\n firstPage: string;\n /**\n * Datagrid: last page\n */\n lastPage: string;\n /**\n * Datagrid: next page\n */\n nextPage: string;\n /**\n * Datagrid: previous page\n */\n previousPage: string;\n /**\n * Datagrid: previous page\n */\n currentPage: string;\n /**\n * Datagird: total pages\n */\n totalPages: string;\n /**\n * Datagrid string filter: filter items\n */\n filterItems: string;\n /**\n * Datagrid numeric filter: min\n */\n minValue: string;\n /**\n * Datagrid numeric filter: max\n */\n maxValue: string;\n /**\n * Datagrid filter toggle button\n */\n datagridFilterAriaLabel: string;\n /**\n * Datagrid filter label\n */\n datagridFilterLabel: string;\n /**\n * Datagrid filter dialog\n */\n datagridFilterDialogAriaLabel: string;\n /**\n * Datagrid column handler string\n */\n columnSeparatorAriaLabel: string;\n /**\n * Datagrid column resize handler string\n */\n columnSeparatorDescription: string;\n /**\n * Numeric filter from label string\n */\n fromLabel: string;\n /**\n * Numeric filter to label string\n */\n toLabel: string;\n /**\n * Modal start of content\n */\n modalContentStart: string;\n /**\n * Modal end of content\n */\n modalContentEnd: string;\n\n /**\n * Side Panel pin dialog\n */\n sidePanelPin: string;\n\n /**\n * Datagrid Show columns menu description\n */\n showColumnsMenuDescription: string;\n /**\n * Datagrid Show columns / All columns selected confirmation\n */\n allColumnsSelected: string;\n /**\n * Signpost Toggle Button\n */\n signpostToggle: string;\n /**\n * Signpost Close Button\n * (used inside signpost content components)\n */\n signpostClose: string;\n /*\n * Loaders/Spinners\n */\n loading: string;\n /**\n * Datagrid: detail pane start content for screen reader\n */\n detailPaneStart: string;\n /**\n * Datagrid: detail pane end content for screen reader\n */\n detailPaneEnd: string;\n /**\n * Datagrid: Single selection header\n */\n singleSelectionAriaLabel: string;\n\n /**\n * Datagrid: Single actionable header\n */\n singleActionableAriaLabel: string;\n\n /**\n * Datagrid: Expandable row\n */\n detailExpandableAriaLabel: string;\n\n /**\n * Alert: Close alert button\n */\n alertCloseButtonAriaLabel: string;\n\n /**\n * Alert: Next Alert button\n */\n alertNextAlertAriaLabel: string;\n\n /**\n * Alert: Previous Alert button\n */\n alertPreviousAlertAriaLabel: string;\n\n /**\n * Datepicker UI labels\n */\n datepickerDialogLabel: string;\n datepickerToggleChooseDateLabel: string;\n datepickerToggleChangeDateLabel: string;\n datepickerPreviousMonth: string;\n datepickerCurrentMonth: string;\n datepickerNextMonth: string;\n datepickerPreviousDecade: string;\n datepickerNextDecade: string;\n datepickerCurrentDecade: string;\n datepickerSelectMonthText: string;\n datepickerSelectYearText: string;\n datepickerSelectedLabel: string;\n /**\n * Stack View: Record has changed\n */\n stackViewChanged: string;\n // Responsive Nav\n responsiveNavToggleOpen: string;\n responsiveNavToggleClose: string;\n responsiveNavOverflowOpen: string;\n responsiveNavOverflowClose: string;\n // Vertical Nav\n verticalNavToggle: string;\n /**\n * Timeline Steps\n */\n timelineStepNotStarted: string;\n timelineStepCurrent: string;\n timelineStepSuccess: string;\n timelineStepError: string;\n timelineStepProcessing: string;\n\n // Datagrid Helper text for expandable rows\n datagridExpandableBeginningOf: string;\n datagridExpandableEndOf: string;\n datagridExpandableRowContent: string;\n datagridExpandableRowsHelperText: string;\n\n /**\n * Combobox Searching Text\n */\n comboboxSearching: string;\n comboboxDelete: string;\n comboboxSelection: string;\n comboboxSelected: string;\n comboboxNoResults: string;\n comboboxOpen: string;\n comboboxSelectAll: string;\n comboboxUnselectAll: string;\n comboboxAllSelected: string;\n comboboxShowAll: string;\n comboboxShowLess: string;\n /**\n * Wizard: Screen-reader text for \"step\" (read before step number).\n */\n wizardStep: string;\n\n /**\n * Wizard: Screen-reader text for current step.\n */\n wizardStepCurrent: string;\n\n /**\n * Wizard: Screen-reader text for completed step.\n */\n wizardStepSuccess: string;\n\n /**\n * Wizard: Screen-reader text for step with error.\n */\n wizardStepError: string;\n\n /**\n * Wizard: Aria-label for the stepnav section.\n */\n wizardStepnavAriaLabel: string;\n\n /**\n * Password Input\n * Screen-reader text for the hide/show password field button.\n */\n passwordHide: string;\n passwordShow: string;\n\n /**\n * Datagrid footer; sr-only text after the number of selected rows.\n */\n selectedRows: string;\n\n //Stepper: Screen-reader text for completed/failed step\n stepComplete: string;\n stepError: string;\n\n // File input\n browse: string;\n fileCount: string;\n clearFile: string;\n clearFiles: string;\n\n // Tree\n selectedTreeNode: string;\n unselectedTreeNode: string;\n\n // Breadcrumbs\n breadcrumbsLabel: string;\n expandBreadcrumbsLabel: string;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './common-strings.service';\nexport * from './common-strings.interface';\nexport * from './common-strings.default';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport const FOCUS_ON_VIEW_INIT = new InjectionToken<boolean>('FOCUS_ON_VIEW_INIT');\n\n// This provider holds the default value for clrFocusOnViewInit directive's isEnabled property.\n// So users can interject this provider and set their own value for this provider.\nexport const FOCUS_ON_VIEW_INIT_PROVIDER = {\n provide: FOCUS_ON_VIEW_INIT,\n useValue: true,\n};\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n Directive,\n DOCUMENT,\n ElementRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n Renderer2,\n} from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { FOCUS_ON_VIEW_INIT } from './focus-on-view-init.provider';\n\n/* This directive is for guiding the document focus to the newly added content when its view is initialized\n so that assistive technologies can read its content. */\n@Directive({\n selector: '[clrFocusOnViewInit]',\n standalone: false,\n})\nexport class ClrFocusOnViewInit implements AfterViewInit, OnDestroy {\n private document: Document;\n private directFocus = true; // true if the element gets focused without need to set tabindex;\n private destroy$ = new Subject<void>();\n private _isEnabled: boolean;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n @Inject(PLATFORM_ID) private platformId: any,\n @Inject(FOCUS_ON_VIEW_INIT) private focusOnViewInit: boolean,\n @Inject(DOCUMENT) document: any,\n private renderer: Renderer2,\n ngZone: NgZone\n ) {\n this._isEnabled = focusOnViewInit;\n\n // Angular compiler doesn't understand the type Document\n // when working out the metadata for injectable parameters,\n // even though it understands the injection token DOCUMENT\n // https://github.com/angular/angular/issues/20351\n this.document = document;\n\n ngZone.runOutsideAngular(() =>\n fromEvent(el.nativeElement, 'focusout')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (!this.directFocus) {\n // manually set attributes and styles should be removed\n renderer.removeAttribute(el.nativeElement, 'tabindex');\n renderer.setStyle(el.nativeElement, 'outline', null);\n }\n })\n );\n }\n\n @Input('clrFocusOnViewInit')\n set isEnabled(value: boolean | string) {\n if (this.focusOnViewInit && typeof value === 'boolean') {\n this._isEnabled = value;\n }\n }\n\n ngAfterViewInit() {\n this.focus();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private focus() {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (!this._isEnabled) {\n return;\n }\n if (this.document && this.document.activeElement !== this.el.nativeElement) {\n this.el.nativeElement.focus();\n if (this.document.activeElement !== this.el.nativeElement) {\n // if it's not directly focused now, it means it was a non-interactive element\n // so we need to give it a tabindex.\n this.directFocus = false;\n this.renderer.setAttribute(this.el.nativeElement, 'tabindex', '-1');\n this.renderer.setStyle(this.el.nativeElement, 'outline', 'none');\n this.el.nativeElement.focus();\n }\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\n\nimport { ClrFocusOnViewInit } from './focus-on-view-init';\nimport { FOCUS_ON_VIEW_INIT_PROVIDER } from './focus-on-view-init.provider';\n\nexport const FOCUS_ON_VIEW_INIT_DIRECTIVES: Type<any>[] = [ClrFocusOnViewInit];\n\n@NgModule({\n imports: [CommonModule],\n declarations: [FOCUS_ON_VIEW_INIT_DIRECTIVES],\n providers: