{"version":3,"file":"vcd-ui-components.mjs","sources":["../../../../libs/ui-components/src/lib/common/interfaces/select-option.ts","../../../../libs/ui-components/src/lib/common/interfaces/action-item.interface.ts","../../../../libs/ui-components/src/lib/common/interfaces/index.ts","../../../../libs/ui-components/src/lib/constants.ts","../../../../libs/ui-components/src/lib/utils/id-generator/id-generator.ts","../../../../libs/ui-components/src/lib/utils/test/widget-object.ts","../../../../libs/ui-components/src/lib/utils/test/activity-reporter/banner-activity-reporter.wo.ts","../../../../libs/ui-components/src/lib/utils/test/activity-reporter/spinner-activity-reporter.wo.ts","../../../../libs/ui-components/src/lib/utils/test/index.ts","../../../../libs/ui-components/src/lib/utils/common-util.ts","../../../../libs/ui-components/src/lib/utils/unit/unit.ts","../../../../libs/ui-components/src/lib/utils/unit/unit-formatter.ts","../../../../libs/ui-components/src/lib/utils/filter-builder.ts","../../../../libs/ui-components/src/lib/utils/index.ts","../../../../libs/ui-components/src/lib/lib/directives/alternative-text/alternative-text.directive.ts","../../../../libs/ui-components/src/lib/lib/directives/alternative-text/alternative-text.module.ts","../../../../libs/ui-components/src/lib/lib/directives/responsive-input/responsive-input.directive.ts","../../../../libs/ui-components/src/lib/lib/directives/responsive-input/responsive-input.module.ts","../../../../libs/ui-components/src/lib/common/subscription/subscription-tracker.ts","../../../../libs/ui-components/src/lib/common/subscription/index.ts","../../../../libs/ui-components/src/lib/lib/directives/show-clipped-text.directive.ts","../../../../libs/ui-components/src/lib/lib/directives/show-clipped-text.directive.module.ts","../../../../libs/ui-components/src/lib/lib/directives/aria-activedescendant/aria-active-descendant.service.ts","../../../../libs/ui-components/src/lib/lib/directives/aria-activedescendant/aria-active-descendant.directive.ts","../../../../libs/ui-components/src/lib/lib/directives/aria-activedescendant/aria-activedescendant.module.ts","../../../../libs/ui-components/src/lib/lib/directives/aria-activedescendant/index.ts","../../../../libs/ui-components/src/lib/lib/directives/index.ts","../../../../libs/ui-components/src/lib/dropdown/dropdown-focus-handler.service.ts","../../../../libs/ui-components/src/lib/dropdown/dynamic-dropdown-position.directive.ts","../../../../libs/ui-components/src/lib/dropdown/dropdown.component.ts","../../../../libs/ui-components/src/lib/dropdown/dropdown.component.html","../../../../libs/ui-components/src/lib/action-menu/action-menu.component.ts","../../../../libs/ui-components/src/lib/action-menu/action-menu.component.html","../../../../libs/ui-components/src/lib/lib/icons/icons.module.ts","../../../../libs/ui-components/src/lib/lib/icons/index.ts","../../../../libs/ui-components/src/lib/dropdown/dropdown.module.ts","../../../../libs/ui-components/src/lib/action-menu/action-menu.module.ts","../../../../libs/ui-components/src/lib/action-menu/index.ts","../../../../libs/ui-components/src/lib/quick-search/drawer/drawer.component.ts","../../../../libs/ui-components/src/lib/quick-search/drawer/drawer.component.html","../../../../libs/ui-components/src/lib/utils/dom-util.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search.service.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search.dataui.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search.component.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search.component.html","../../../../libs/ui-components/src/lib/quick-search/quick-search.module.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search-result.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search.provider.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search-registrar.service.ts","../../../../libs/ui-components/src/lib/quick-search/quick-search.wo.ts","../../../../libs/ui-components/src/lib/quick-search/index.ts","../../../../libs/ui-components/src/lib/action-search-provider/action-search.provider.ts","../../../../libs/ui-components/src/lib/action-search-provider/index.ts","../../../../libs/ui-components/src/lib/common/error/error-banner.component.ts","../../../../libs/ui-components/src/lib/common/error/error-banner.component.html","../../../../libs/ui-components/src/lib/common/error/error-banner.module.ts","../../../../libs/ui-components/src/lib/common/loading/loading-indicator.component.ts","../../../../libs/ui-components/src/lib/common/loading/loading-indicator.component.html","../../../../libs/ui-components/src/lib/common/loading/loading-indicator.module.ts","../../../../libs/ui-components/src/lib/common/activity-reporter/activity-promise-resolver.ts","../../../../libs/ui-components/src/lib/common/activity-reporter/activity-reporter.ts","../../../../libs/ui-components/src/lib/common/activity-reporter/banner-activity-reporter.component.ts","../../../../libs/ui-components/src/lib/common/activity-reporter/banner-activity-reporter.component.html","../../../../libs/ui-components/src/lib/common/activity-reporter/spinner-activity-reporter.component.ts","../../../../libs/ui-components/src/lib/common/activity-reporter/spinner-activity-reporter.component.html","../../../../libs/ui-components/src/lib/common/activity-reporter/activity-reporter.module.ts","../../../../libs/ui-components/src/lib/common/activity-reporter/index.ts","../../../../libs/ui-components/src/lib/common/error/index.ts","../../../../libs/ui-components/src/lib/common/loading/index.ts","../../../../libs/ui-components/src/lib/data-exporter/csv-exporter.service.ts","../../../../libs/ui-components/src/lib/data-exporter/data-exporter.component.ts","../../../../libs/ui-components/src/lib/data-exporter/data-exporter.component.html","../../../../libs/ui-components/src/lib/data-exporter/data-exporter.module.ts","../../../../libs/ui-components/src/lib/common/pipes/nested-property.pipe.ts","../../../../libs/ui-components/src/lib/common/pipes/pipes.module.ts","../../../../libs/ui-components/src/lib/form/base-form-control.ts","../../../../libs/ui-components/src/lib/form/form-checkbox/form-checkbox.component.ts","../../../../libs/ui-components/src/lib/form/form-checkbox/form-checkbox.component.html","../../../../libs/ui-components/src/lib/form/form-input/form-input.component.ts","../../../../libs/ui-components/src/lib/form/form-input/form-input.component.html","../../../../libs/ui-components/src/lib/form/form-select/form-select.component.ts","../../../../libs/ui-components/src/lib/form/form-select/form-select.component.html","../../../../libs/ui-components/src/lib/form/validators.ts","../../../../libs/ui-components/src/lib/form/number-with-unit-input/number-with-unit-form-input.component.ts","../../../../libs/ui-components/src/lib/form/number-with-unit-input/number-with-unit-form-input.component.html","../../../../libs/ui-components/src/lib/form/form.module.ts","../../../../libs/ui-components/src/lib/datagrid/interfaces/datagrid-action-display.interface.ts","../../../../libs/ui-components/src/lib/datagrid/interfaces/datagrid-column.interface.ts","../../../../libs/ui-components/src/lib/datagrid/directives/component-renderer-outlet.directive.ts","../../../../libs/ui-components/src/lib/datagrid/pipes/function-renderer.pipe.ts","../../../../libs/ui-components/src/lib/datagrid/datagrid.component.ts","../../../../libs/ui-components/src/lib/datagrid/datagrid.component.html","../../../../libs/ui-components/src/lib/datagrid/directives/component-renderer-outlet.module.ts","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-filter.ts","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-multiselect-filter.component.ts","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-multiselect-filter.component.html","../../../../libs/ui-components/src/lib/form/interfaces/can-be-read-only.interface.ts","../../../../libs/ui-components/src/lib/form/index.ts","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-numeric-filter.component.ts","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-numeric-filter.component.html","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-select-filter.component.ts","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-select-filter.component.html","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-string-filter.component.ts","../../../../libs/ui-components/src/lib/datagrid/filters/datagrid-string-filter.component.html","../../../../libs/ui-components/src/lib/datagrid/renderers/bold-text-renderer.component.ts","../../../../libs/ui-components/src/lib/datagrid/datagrid.module.ts","../../../../libs/ui-components/src/lib/ui-components.module.ts","../../../../libs/ui-components/src/lib/data-exporter/data-exporter.wo.ts","../../../../libs/ui-components/src/lib/data-exporter/index.ts","../../../../libs/ui-components/src/lib/datagrid/interfaces/component-renderer.interface.ts","../../../../libs/ui-components/src/lib/datagrid/renderers/index.ts","../../../../libs/ui-components/src/lib/datagrid/index.ts","../../../../libs/ui-components/src/lib/dropdown/index.ts","../../../../libs/ui-components/src/lib/formly/vcd/inputs/input/formly-input.component.ts","../../../../libs/ui-components/src/lib/formly/vcd/inputs/number-with-unit-input/formly-number-with-unit-input.component.ts","../../../../libs/ui-components/src/lib/formly/vcd/inputs/select/formly-select.component.ts","../../../../libs/ui-components/src/lib/formly/vcd/vcd-formly.config.ts","../../../../libs/ui-components/src/lib/formly/vcd/vcd-formly.module.ts","../../../../libs/ui-components/src/lib/formly/vcd/index.ts","../../../../libs/ui-components/src/lib/public-api.ts","../../../../libs/ui-components/src/index.ts","../../../../libs/ui-components/src/vcd-ui-components.ts"],"sourcesContent":["/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport interface SelectOption {\n    /**\n     * Value of a option\n     */\n    value: string | number;\n    /**\n     * Text to be shown for the option\n     */\n    display: string;\n    /**\n     * Used for translation of the {@link SelectOption.display} text\n     */\n    isTranslatable?: boolean;\n    /**\n     * Wheather the option is disabled\n     */\n    disabled?: boolean;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Observable } from \"rxjs\";\n\nexport enum ActionType {\n    /**\n     * Global actions that are displayed always irrespective of the context. These display as the first set of actions\n     */\n    STATIC_FEATURED = \"STATIC_FEATURED\",\n    /**\n     * Actions that are visible when an entity is selected. These display in the main menu section\n     */\n    CONTEXTUAL_FEATURED = \"CONTEXTUAL_FEATURED\",\n    /**\n     * Actions that are visible when an entity is selected. These display in a sub menu\n     */\n    CONTEXTUAL = \"CONTEXTUAL\",\n    /**\n     * Actions that are not context dependent. These display after the above 3 buckets of actions\n     */\n    STATIC = \"STATIC\",\n}\n\n/**\n * Type of {@link ActionItem.handler} function\n */\nexport type ActionHandlerType<R, T> = (selectedEntities?: R[], handlerData?: T) => Promise<string | undefined> | void;\n\n/**\n * Data required for displaying an action item in a menu. Additional data like the type of action and visibility is part of separate\n * interfaces {@link StaticActionItem} and {@link ContextualActionItem}\n * T is the type of custom data passed to action handler\n * R is the type of selected entity on which the action will be performed\n */\nexport interface BaseActionItem<R, T> {\n    /**\n     * The i18n key or a translated string for contents of a action button. This is also added as the data-ui attribute on a action button\n     * HTML element so that it can be used as a CSS selector\n     */\n    textKey?: string;\n    /**\n     * The css class the button should have.\n     *\n     * Must be unique among all added actions within an action list\n     */\n    class?: string;\n    /**\n     * Indicates if an action that is available should be disabled. If true, a non available action is disabled.\n     * If false, a non-available action is hidden\n     */\n    disabled?: ((records?: R[]) => boolean) | boolean;\n    /**\n     * The key that will be fired with the action.\n     */\n    action?: string;\n    /**\n     * The function to be executed when the button is clicked.\n     *\n     * Actions that require additional user input can collect it using handlerData which will be passed as an argument\n     * to the handler call\n     */\n    handler?: ActionHandlerType<R, T>;\n    /**\n     * Custom data that will be passed when handler is called\n     */\n    handlerData?: any;\n    /**\n     * The Clarity icon of the contextual button that is displayed if the button is featured.\n     */\n    icon?: string;\n    /**\n     * List of actions that will be grouped under this action\n     */\n    children?: ActionItem<R, T>[];\n    /**\n     * To mark if the {@link #ActionItem.textKey} has to be translated or not\n     */\n    isTranslatable?: boolean;\n    /**\n     * To add separators between groups of actions\n     */\n    isSeparator?: boolean;\n    /**\n     * Busy state for the menu item. Used by extension actions of plugins\n     */\n    busy?: boolean;\n}\n\n/**\n * Created this separate type to enforce the type of Static actions availability to not be a call back method. This is because, call back\n * with selected entities is only supported for Contextual actions as the call backs receive selected entities and static actions visibility\n * is not dependent on selected entities\n */\ninterface StaticActionItem<R, T> extends BaseActionItem<R, T> {\n    /**\n     * Used for determining where in the action menu this action gets displayed\n     */\n    actionType: ActionType.STATIC_FEATURED | ActionType.STATIC;\n    /**\n     * Condition whether or not the action is available. It is an observable if it relies on response from asynchronous requests\n     */\n    availability?: Observable<boolean>;\n}\n\n/**\n * Created this separate type for contextual actions because, we want to enforce the type of Static actions availability to not be a call back method.\n * Refer to {@link #StaticActionItem}\n */\ninterface ContextualActionItem<R, T> extends BaseActionItem<R, T> {\n    /**\n     * Used for determining where in the action menu this action gets displayed\n     */\n    actionType?: ActionType.CONTEXTUAL_FEATURED | ActionType.CONTEXTUAL;\n    /**\n     * Condition whether or not the action is available. Call back with selected entities when visibility depends on entities selected.\n     * It is an observable if it relies on some other condition like a response from asynchronous requests\n     */\n    availability?: Observable<boolean> | ((selectedEntities: R[]) => boolean);\n}\n\n/**\n * Lets the caller pass both static and contextual actions as part of a single array\n */\nexport type ActionItem<R, T> = StaticActionItem<R, T> | ContextualActionItem<R, T>;\n\n/**\n * Display options for action menu\n */\nexport enum ActionStyling {\n    INLINE = \"INLINE\",\n    DROPDOWN = \"DROPDOWN\",\n}\n\n/**\n * An enum that describes the possible ways to display the button title.\n */\nexport enum TextIcon {\n    ICON = 1 << 0,\n    TEXT = 1 << 1,\n    ICON_AND_TEXT = TextIcon.ICON | TextIcon.TEXT,\n}\n\n/**\n * This is created separately from {@link ContextualActionInlineDisplayConfig} because, featured count is only required\n * when contextual actions are displayed as a dropdown\n */\nexport interface ContextualActionDropdownDisplayConfig {\n    /**\n     * To display actions in a dropdown\n     */\n    styling: ActionStyling.DROPDOWN;\n    /**\n     * If the title should be the button label, icon, or both\n     * Defaults to {@link TextIcon.TEXT} when unset\n     */\n    buttonContents?: TextIcon;\n}\n\n/**\n * This along with {@link ContextualActionDropdownDisplayConfig} is one of the types of\n * {@link ActionDisplayConfig.contextual}\n */\nexport interface ContextualActionInlineDisplayConfig {\n    /**\n     * How many buttons should display on the featured section.\n     *\n     * Used when you want to set a limit on the number of featured buttons shown.\n     *\n     * If featuredCount is not set, it will default to all featured actions.\n     */\n    featuredCount?: number;\n    /**\n     * To display actions in a inline horizontal ribbon\n     */\n    styling: ActionStyling.INLINE;\n    /**\n     * If the title should be the button label, icon, or both\n     * Defaults to {@link TextIcon.TEXT} when unset\n     */\n    buttonContents?: TextIcon;\n}\n\n/**\n * Display configuration of actions that are displayed in a action menu\n */\nexport interface ActionDisplayConfig {\n    /**\n     * How the contextual actions list shows up on the screen\n     * If this is not specified, this defaults to { featuredCount: 0, styling: ActionStyling.INLINE, buttonContents: TextIcon.TEXT}\n     */\n    contextual?: ContextualActionDropdownDisplayConfig | ContextualActionInlineDisplayConfig;\n\n    /**\n     * How the static actions list shows up on the screen\n     * This defaults to ActionStyling.INLINE\n     */\n    staticActionStyling?: ActionStyling;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./select-option\";\nexport * from \"./action-item.interface\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport type HasId<T> = T & {\n    /**\n     * The unique ID of this entity.\n     */\n    id: string;\n};\n\nexport type NonEmptyArray<T> = T[] & { 0: T };\n\n/**\n * Key of an action item object that is intended to be used only by the {@link ActionMenuComponent} and the {@link DropdownComponent}.\n * This property is used to store the last emitted value from availability observable of an action item.\n */\nexport const lastAvailabilityValue = Symbol();\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport class IdGenerator {\n    private static idCounter = 0;\n\n    /**\n     * Getter that returns the a unique ID\n     */\n    generate(): string {\n        return `${this.prefix}-${IdGenerator.idCounter++}`;\n    }\n\n    /**\n     * The string to be prefixed for {@link IdGenerator#id} returned\n     */\n    constructor(private prefix: string) {}\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { DebugElement, Type } from \"@angular/core\";\nimport { ComponentFixture, TestBed } from \"@angular/core/testing\";\nimport { By } from \"@angular/platform-browser\";\n\n/**\n * An implementation of the page object pattern, but applied to widgets, since they can be reused on multiple pages.\n *\n * The main purpose for the wrapper are providing access to the internals of a widget avoiding duplication of code that\n * queries the internals of a component from a test.\n *\n * ## Subclass Rules\n *\n * - Methods exposed by subclasses should not expose HTMLElements or DebugElements directly. That would encourage\n * callers to query it from the outside creating potential duplicate querying code and abstraction leaks.\n *  - Subclasses also should not have testing assertions. They should only provide the state and the calling test can\n * assert code on its own.\n *\n * `T` is the type of the JS/TS object being wrapped\n *\n * It is recommended that files for implementations be named with a `.wo.ts` extension\n *\n * @deprecated\n */\nexport abstract class WidgetObject<T> {\n    /**\n     *\n     * Constructor should only be called directly if you are directly instantiating the widget being wrapped (T). If you\n     * need to find a widget within the tree, you should use {@link find}.\n     *\n     * @param component The component instance being managed. Whenever possible, we should access the component's API.\n     * @param root The root element (host) for the component instance. We typically prefer to interact with the\n     * component but there are times when we must check the DOM.\n     * @param fixture The test fixture, so we can call {@link ComponentFixture#detectChanges} after something that\n     * requires re-rendering of the DOM.\n     */\n    constructor(\n        protected fixture: ComponentFixture<any>,\n        protected root: DebugElement = fixture.debugElement,\n        public component: T = fixture.componentInstance\n    ) {}\n\n    detectChanges(): void {\n        this.fixture.detectChanges();\n    }\n\n    /**\n     * Finds first element within this widget matching the given selector\n     * @param selector What to search for\n     * @param parent Where to start the search; defaults to the root of this component\n     */\n    protected findElement(selector: string | Type<unknown>, parent: DebugElement = this.root): DebugElement {\n        const query = typeof selector === \"string\" ? By.css(selector) : By.directive(selector);\n        return parent.query(query);\n    }\n\n    /**\n     * Same as {@link findElement} but returns all elements\n     */\n    protected findElements(selector: string | Type<unknown>, parent: DebugElement = this.root): DebugElement[] {\n        const query = typeof selector === \"string\" ? By.css(selector) : By.directive(selector);\n        return parent.queryAll(query);\n    }\n\n    /**\n     * Clicks an element and detects changes so the DOM is immediately updated\n     * @param cssSelector Pass this in if you want to click a specific element. If not passed in, the entire node will\n     * receive the click event\n     * @param parent the parent element for which to search for the {@param cssSelector} within. Defaults to root if not provided.\n     */\n    protected click(cssSelector?: string, parent: DebugElement = this.root): void {\n        const nativeElement: HTMLBaseElement = parent.query(By.css(cssSelector)).nativeElement;\n        nativeElement.click();\n        this.detectChanges();\n    }\n\n    /**\n     * Send a keyboard event of type {@param eventType} with properties {@param eventProperties} on an element\n     * found by the {@param cssSelector} within the provided {@param parent} or the current root element.\n     * Setting the event properties is done with `Object.defineProperty` on the created event. This allows setting\n     * properties like `which` that is deprecated and cannot be set with the native approach of creating keyboard event.\n     * @param eventType The keyboard event type like 'keyup', 'keydown', 'keypress'\n     * @param eventProperties properties of the event like `code`, `key` etc.\n     * @param cssSelector Pass this in if you want trigger the event on a specific element.\n     *        If not passed in, the event will be triggered on the entire node\n     * @param parent the parent element for which to search for the {@param cssSelector} within. Defaults to root if not provided.\n     */\n    protected sendKeyboardEvent(\n        eventType,\n        eventProperties: { [name: string]: unknown },\n        cssSelector?: string,\n        parent: DebugElement = this.root\n    ): void {\n        const nativeElement: HTMLBaseElement = parent.query(By.css(cssSelector)).nativeElement;\n        // Create keyboard event that bubbles up the chain\n        const event = new KeyboardEvent(eventType, { bubbles: true });\n        // Use `Object.defineProperty` in order to be able to set even deprecated, readonly properties like `which`\n        Object.keys(eventProperties).forEach((key) => {\n            Object.defineProperty(event, key, { value: eventProperties[key] });\n        });\n        nativeElement.dispatchEvent(event);\n        this.detectChanges();\n    }\n\n    /**\n     * Sets the value of an input element or textarea element\n     * @param value the value that the element should display\n     * @param cssSelector Pass this in if you want trigger the event on a specific element.\n     *        If not passed in, the event will be triggered on the entire node\n     * @param parent the parent element for which to search for the {@param cssSelector} within. Defaults to root if not provided.\n     */\n    protected setInputValue(value: string | number, cssSelector?: string, parent: DebugElement = this.root): void {\n        const nativeElement: HTMLInputElement | HTMLTextAreaElement = parent.query(By.css(cssSelector)).nativeElement;\n        nativeElement.value = String(value);\n        nativeElement.dispatchEvent(new Event(\"input\"));\n        this.detectChanges();\n    }\n\n    /**\n     * Returns text content of this widget\n     * If the element cannot be found, gives empty string.\n     * @param cssSelector Pass this in if you want to retrieve text for a specific element within this widget.\n     * @param parent Where to start the search; defaults to the root of this component\n     */\n\n    protected getText(cssSelector: string, parent: DebugElement = this.root): string {\n        const element = this.findElement(cssSelector, parent);\n        return element ? this.getNodeText(element) : \"\";\n    }\n\n    /**\n     * Same as {@link getText} but return the text for all matching nodes\n     */\n    protected getTexts(cssSelector: string): string[] {\n        return this.findElements(cssSelector).map((el) => this.getNodeText(el));\n    }\n\n    protected getNodeText(el: DebugElement): string {\n        // The || '' is because textContent could technically be null when passed in the document\n        // element object. We know that cannot be pased in here, so we ignore it for coverage\n        // but we still need the line there to make strictNullChecks work\n        return el.nativeElement.textContent.trim() || /* istanbul ignore next */ \"\";\n    }\n}\n\n/**\n * Subclasses should implement the FindableWidget interface so they can be found with {@link WidgetFinder}\n *\n * ## Note\n * This is done by creating a static property `tagName`on your subclass, not a regular instance, since this\n * interface represents a constructor for a {@link WidgetObject}, not an instance.\n */\nexport interface FindableWidget<T> extends Type<T> {\n    tagName: string;\n}\n\n/**\n * Arguments for {@link WidgetFinder#findWidgets} and {@link WidgetFinder#find}\n */\nexport interface FindParams<T> {\n    /**\n     * The constructor of the widget to be found\n     */\n    woConstructor: T;\n    /**\n     * If provided, search starts from this container. It defaults to the fixture's root debugElement\n     */\n    ancestor?: DebugElement;\n    /**\n     * Optional CSS class name that can be used when there could be multiple instances of the object within the\n     * fixture tree\n     */\n    className?: string;\n}\n\n/**\n * @deprecated Finds instances that implement {@link FindableWidget}\n * H is the host component's type. This finder is only for old unit tests.\n * Please use AngularWidgetObjectFinder instead.\n */\nexport class WidgetFinder<H = unknown> {\n    /**\n     * We don't care or could possibly know the type of fixture\n     */\n    private fixture: ComponentFixture<H>;\n\n    /**\n     * If you need direct access to manipulate the host\n     */\n    public hostComponent: H;\n\n    /**\n     * @param componentConstructor The host component to be created as the root of the tests's fixture\n     */\n    constructor(componentConstructor: Type<H>) {\n        this.fixture = TestBed.createComponent(componentConstructor);\n        this.hostComponent = this.fixture.componentInstance;\n    }\n\n    /**\n     * Finds widgets within a fixture\n     * @return A Potentially empty list of widgets matching the given specs\n     */\n    public findWidgets<C, T extends FindableWidget<C>>(\n        params: FindParams<T> | T,\n        parent?: DebugElement\n    ): InstanceType<T>[] {\n        const defaults = { ancestor: this.fixture.debugElement, className: \"\" };\n        const { woConstructor, ancestor, className } = isFindParamsObject(params)\n            ? { ...defaults, ...params }\n            : { ...defaults, woConstructor: params };\n\n        let query = woConstructor.tagName;\n        if (className) {\n            query += `.${className}`;\n        }\n        const componentRoots = (parent ? parent : ancestor).queryAll(By.css(query));\n        const widgets = componentRoots.map(\n            // Typescript is not able to infer it correctly as the subclass but we know for sure\n            (root) => new woConstructor(this.fixture, root, root.componentInstance) as InstanceType<T>\n        );\n        return widgets;\n    }\n\n    /**\n     * Finds a single widget object\n     * @throws An error if the widget is not found or if there are multiple instances\n     */\n    public find<C, T extends FindableWidget<C>>(params: FindParams<T> | T): InstanceType<T> {\n        const widgets = this.findWidgets(params);\n        const tagName = isFindParamsObject(params) ? params.woConstructor.tagName : params.tagName;\n        if (widgets.length === 0) {\n            throw Error(`Did not find a <${tagName}>`);\n        }\n        if (widgets.length > 1) {\n            throw Error(`Expected to find a single <${tagName}> but found ${widgets.length}`);\n        }\n        return widgets[0] as InstanceType<T>;\n    }\n\n    public detectChanges(): void {\n        this.fixture.detectChanges();\n    }\n}\n\nexport function isFindParamsObject<T>(params: FindParams<T> | T): params is FindParams<T> {\n    return !!(params as FindParams<T>).woConstructor;\n}\n/**\n * Can be used in tests that use `this` to share a finder with before/AfterEach instead of leaky closures\n */\nexport interface HasFinder<T = unknown> {\n    finder: WidgetFinder<T>;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { BannerActivityReporterComponent } from \"../../../common/activity-reporter\";\nimport { WidgetObject } from \"../widget-object\";\n\nexport class BannerActivityReporterWidgetObject extends WidgetObject<BannerActivityReporterComponent> {\n    static tagName = \"vcd-banner-activity-reporter\";\n\n    get running(): boolean {\n        return this.component.running;\n    }\n\n    get errorText(): string {\n        return this.component.errorText;\n    }\n\n    get sucessText(): string {\n        return this.component.successMessage;\n    }\n\n    get loadingText(): string {\n        return this.findElement(\"clr-alert\").nativeElement.textContent;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { DebugElement } from \"@angular/core\";\nimport { SpinnerActivityReporterComponent } from \"../../../common/activity-reporter\";\nimport { WidgetObject } from \"../widget-object\";\n\nexport class SpinnerActivityReporterWidgetObject extends WidgetObject<SpinnerActivityReporterComponent> {\n    static tagName = \"vcd-spinner-activity-reporter\";\n\n    get running(): boolean {\n        return this.component.running;\n    }\n\n    get errorText(): string {\n        return this.component.errorText;\n    }\n\n    /**\n     * Gives the spinner for this element\n     */\n    private getSpinner(): DebugElement {\n        const element = this.findElement(\".spinner\");\n\n        if (!element) {\n            throw new Error(\"Could not find the spinner element.\");\n        }\n        return element;\n    }\n\n    public isSpinnerSpinning(): boolean {\n        try {\n            return !!this.getSpinner();\n        } catch (error) {\n            return false;\n        }\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./activity-reporter/banner-activity-reporter.wo\";\nexport * from \"./activity-reporter/spinner-activity-reporter.wo\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport class CommonUtil {\n    /**\n     * Rounds number to given floating point, 2 by default.\n     * @param value number from float data type\n     * @param digits how many numbers will be shown after decimal point\n     */\n    static roundTo(value: number, digits: number = 2): number {\n        if (!value) {\n            value = 0;\n        }\n        return Number(Math.round(Number(value + \"e\" + digits)) + \"e-\" + digits);\n    }\n\n    /**\n     * Verifies if the passed value is of type Function\n     */\n    static isFunction(value: any): value is (...args: unknown[]) => unknown {\n        return typeof value === \"function\";\n    }\n\n    /**\n     * Creates a function that when called, actually calls the function parameter `fn` after a certain amount of time,\n     * which is the value of `buffer` parameter. The created function then resolves the promise it returned and the same\n     * promise is reused for all the calls that get buffered\n     *\n     * @param fn - Function to be debounced\n     * @param scope - The function scope of the parameter `fn`\n     * @param buffer - How long since the last call to the debounced function to wait before calling `fn`\n     * @return A function that when called, will delay the calls to the `fn` that was passed in. That function will return\n     * the same promise each time a call is made and buffered. This means that callers need to be sure to ignore previous\n     * calls. This is not\n     */\n    static createBufferedPromise<T extends (...p: any) => any>(\n        fn: T,\n        scope: unknown,\n        buffer = 300\n    ): (...args: Parameters<T>) => Promise<ReturnType<T>> {\n        let timerId: any;\n        let pendingPromise: Promise<ReturnType<T>> = null;\n        // eslint-disable-next-line @typescript-eslint/ban-types\n        let resolver: Function;\n        return function (...args): Promise<any> {\n            if (!pendingPromise) {\n                pendingPromise = new Promise((resolve) => {\n                    resolver = resolve;\n                });\n            }\n            const callArgs = args;\n            if (timerId) {\n                clearTimeout(timerId);\n                timerId = null;\n            }\n\n            timerId = setTimeout(() => {\n                const retValue = fn.apply(scope, callArgs);\n                resolver(retValue);\n                pendingPromise = null;\n                timerId = null;\n            }, buffer);\n            return pendingPromise;\n        };\n    }\n\n    /**\n     * Returns true if the provided value is the string representation of an int or float.\n     *\n     * We determine that by converting to a number and checking if the result is finite.\n     *\n     * Notable javascript number types which will return false are: Infinity, -Infinity and NaN.\n     */\n    static isNumericString(value: string): boolean {\n        return (\n            typeof value === \"string\" &&\n            value !== \"\" && // \"\" is a special case because Number(\"\") results in 0 instead of NaN\n            Number.isFinite(Number(value))\n        );\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonUtil } from \"../common-util\";\n\n/**\n * Allows you to define different types of units with unitName and\n * multiplier that converts to baseUnit.\n */\nexport abstract class Unit {\n    private readonly _multiplier: number;\n    private readonly _unitName: string;\n\n    /**\n     * @param multiplier - Value that is used to convert this to base unit\n     * @param unitName - Name of the Unit. Also used to construct translation\n     * keys for each type of Unit.\n     */\n    constructor(\n        private multiplier: number,\n        private unitName: string\n    ) {\n        this._multiplier = multiplier;\n        this._unitName = unitName;\n    }\n\n    public getMultiplier(): number {\n        return this._multiplier;\n    }\n\n    public getUnitName(): string {\n        return this._unitName;\n    }\n\n    /**\n     * Returns the value in outputUnit for this unit\n     * @param value - Value of this unit\n     * @param outputUnit - Unit to which value is converted\n     */\n    public getOutputValue(value, outputUnit: Unit): number {\n        return this.getBaseValue(value) / outputUnit.multiplier;\n    }\n\n    /**\n     * Returns the value in base unit for this unit\n     * @param value - Value of this unit\n     */\n    public getBaseValue(value: number): number {\n        return value * this.multiplier;\n    }\n\n    /**\n     * Translation key to be used when displaying value with unit\n     *\n     * Ex: 25 MB, 100 %, 2 GHz\n     */\n    abstract getValueWithUnitTranslationKey(): string;\n\n    /**\n     * Translation key to be used when displaying unitName\n     *\n     * Ex: MB, B, GHz, MHz, %\n     */\n    abstract getUnitNameTranslationKey(): string;\n\n    /**\n     * Returns the best unit out of available units for given value of current unit\n     *\n     * Best unit is a Unit whose converted value is less than 1000\n     *\n     * @param value - Value of this unit\n     * @param availableUnits - List of available Units out of which best unit is calculated\n     */\n    abstract findBestUnit(value: number, availableUnits: Unit[]): Unit;\n}\n\n/**\n * Finds the bestUnit by trying groups of the comparison number\n */\nabstract class NumberUnit extends Unit {\n    /**\n     * Calculates the best unit out of available units to display in UI cell for a given input Unit\n     * and value\n     *\n     * Best unit is a Unit whose converted value is less than the comparison number\n     *\n     * @param value - Value of input Unit\n     * @param availableUnits - Array of available Units to display in UI cell\n     * availableUnits array should be pre-sorted ascending by multiplier\n     *\n     */\n    findBestUnit(value: number, availableUnits: NumberUnit[] = this.getAllUnitTypes()): Unit {\n        if (value >= this.getUnitMultiplier()) {\n            const baseValue = this.getBaseValue(value);\n            let outputNumber = baseValue;\n            const unitTypes = availableUnits;\n            let i = 0;\n            while (outputNumber >= this.getUnitMultiplier() && i < unitTypes.length) {\n                outputNumber = baseValue / unitTypes[i].getMultiplier();\n                i++;\n            }\n            return unitTypes[i - 1];\n        } else {\n            return this;\n        }\n    }\n\n    abstract getAllUnitTypes(): NumberUnit[];\n\n    /**\n     * Returns the number that you multiply by to get the next order unit.\n     *\n     * @example 1024 would be the multiplier for Byte.\n     */\n    protected abstract getUnitMultiplier(): number;\n}\n\n/**\n * Finds the bestUnit by trying groups of 1000\n */\nexport abstract class ThousandsUnit extends NumberUnit {\n    getUnitMultiplier(): number {\n        return 1000;\n    }\n}\n\n/**\n * Finds the bestUnit by trying groups of 1024\n */\nexport abstract class PowerTwoUnit extends NumberUnit {\n    getUnitMultiplier(): number {\n        return 1024;\n    }\n}\n\nexport class Hertz extends ThousandsUnit {\n    static valueWithUnitTranslationKeyPrefix = \"vcd.cc.cpu.speed.unit.\";\n    static unitNameTranslationKeyPrefix = \"vcd.cc.units.hertz.\";\n    static Hz = new Hertz(1, \"Hz\");\n    static Khz = new Hertz(1e3, \"KHz\");\n    static Mhz = new Hertz(1e6, \"MHz\");\n    static Ghz = new Hertz(1e9, \"GHz\");\n    static Thz = new Hertz(1e12, \"THz\");\n    static types = [Hertz.Hz, Hertz.Khz, Hertz.Mhz, Hertz.Ghz];\n\n    getAllUnitTypes(): Hertz[] {\n        return Hertz.types;\n    }\n\n    getValueWithUnitTranslationKey(): string {\n        return Hertz.valueWithUnitTranslationKeyPrefix + this.getUnitName();\n    }\n\n    getUnitNameTranslationKey(): string {\n        return Hertz.unitNameTranslationKeyPrefix + this.getUnitName();\n    }\n}\n\nexport class Bytes extends PowerTwoUnit {\n    static valueWithUnitTranslationKeyPrefix = \"vcd.cc.filesize.unit.\";\n    static unitNameTranslationKeyPrefix = \"vcd.cc.units.bytes.\";\n    static B = new Bytes(1, \"B\");\n    static KB = new Bytes(1024, \"KB\");\n    static MB = new Bytes(1024 ** 2, \"MB\");\n    static GB = new Bytes(1024 ** 3, \"GB\");\n    static TB = new Bytes(1024 ** 4, \"TB\");\n    static types = [Bytes.B, Bytes.KB, Bytes.MB, Bytes.GB];\n\n    getAllUnitTypes(): Bytes[] {\n        return Bytes.types;\n    }\n\n    getValueWithUnitTranslationKey(): string {\n        return Bytes.valueWithUnitTranslationKeyPrefix + this.getUnitName();\n    }\n\n    getUnitNameTranslationKey(): string {\n        return Bytes.unitNameTranslationKeyPrefix + this.getUnitName();\n    }\n}\n\n/**\n * Percent is handled differently compared to other Units.\n * Can be represented in two different formats -\n * {@link ZERO_TO_100} - ex: 50 %\n * {@link ZERO_TO_1} - ex: 0.5 %\n * In both formats single unitName - \"%\" is used represent the value\n */\nexport class Percent extends Unit {\n    static valueWithUnitTranslationKey = \"vcd.cc.display.percent\";\n    static unitTranslationKey = \"vcd.cc.units.percent\";\n    static ZERO_TO_1 = new Percent(1);\n    static ZERO_TO_100 = new Percent(0.01);\n\n    /**\n     * Percent always has unitName as \"%\"\n     */\n    constructor(multiplier: number) {\n        super(multiplier, \"%\");\n    }\n\n    getValueWithUnitTranslationKey(): string {\n        return Percent.valueWithUnitTranslationKey;\n    }\n\n    getUnitNameTranslationKey(): string {\n        return Percent.unitTranslationKey;\n    }\n\n    /**\n     * Percent is always best represented in ZERO_TO_100 format\n     * and so returns {@link ZERO_TO_100}\n     *\n     * Ex: 50 % is the display format for ZERO_TO_100 for value - 50\n     */\n    findBestUnit(value: number, unitList: Unit[]): Unit {\n        return Percent.ZERO_TO_100;\n    }\n}\n\nconst SECONDS_IN_MINUTE = 60;\nconst MINUTES_IN_HOUR = 60;\nconst SECONDS_IN_HOUR: number = MINUTES_IN_HOUR * SECONDS_IN_MINUTE;\nconst HOURS_IN_DAY = 24;\nconst SECONDS_IN_DAY = HOURS_IN_DAY * SECONDS_IN_HOUR;\nconst DAYS_IN_WEEK = 7;\nconst DAYS_IN_MONTH_ROUNDED = 30;\nconst DAYS_IN_YEAR_ROUNDED = 365;\nconst WEEKS_IN_MONTH_ROUNDED = 4;\nconst MONTHS_IN_YEAR = 12;\nconst YEARS_IN_CENTURY = 100;\n\n/**\n * Represents a period of time.\n * The base value is in seconds.\n */\nexport class TimePeriod extends Unit {\n    // The base unit is seconds\n    static SECONDS = new TimePeriod(1, \"SECONDS\", SECONDS_IN_MINUTE);\n    static MINUTES = new TimePeriod(SECONDS_IN_MINUTE, \"MINUTES\", MINUTES_IN_HOUR);\n    static HOURS = new TimePeriod(SECONDS_IN_HOUR, \"HOURS\", HOURS_IN_DAY);\n    static DAYS = new TimePeriod(SECONDS_IN_DAY, \"DAYS\", DAYS_IN_WEEK);\n    // NOTE: rough calculation is used for the units below.\n    static WEEKS = new TimePeriod(SECONDS_IN_DAY * DAYS_IN_WEEK, \"WEEKS\", WEEKS_IN_MONTH_ROUNDED);\n    static MONTHS = new TimePeriod(SECONDS_IN_DAY * DAYS_IN_MONTH_ROUNDED, \"MONTHS\", MONTHS_IN_YEAR);\n    static YEARS = new TimePeriod(SECONDS_IN_DAY * DAYS_IN_YEAR_ROUNDED, \"YEARS\", YEARS_IN_CENTURY);\n\n    static types = [\n        TimePeriod.SECONDS,\n        TimePeriod.MINUTES,\n        TimePeriod.HOURS,\n        TimePeriod.DAYS,\n        TimePeriod.WEEKS,\n        TimePeriod.MONTHS,\n        TimePeriod.YEARS,\n    ];\n\n    static unitNameTranslationKeyPrefix = \"vcd.cc.units.timePeriod.\";\n    static valueWithUnitTranslationKeyPrefix = \"vcd.cc.display.timePeriod.\";\n\n    /**\n     * The threshold value above which the next unit in the list is a better match to be used.\n     */\n    threshold: number;\n\n    constructor(multiplier: number, unitName: string, threshold: number) {\n        super(multiplier, unitName);\n\n        this.threshold = threshold;\n    }\n\n    getAllUnitTypes(): TimePeriod[] {\n        return TimePeriod.types;\n    }\n\n    override getOutputValue(value: number, outputUnit: Unit): number {\n        const outputValue = super.getOutputValue(value, outputUnit);\n\n        return CommonUtil.roundTo(outputValue, 0);\n    }\n\n    getValueWithUnitTranslationKey(): string {\n        return TimePeriod.valueWithUnitTranslationKeyPrefix + this.getUnitName();\n    }\n\n    findBestUnit(value: number, availableUnits: TimePeriod[] = this.getAllUnitTypes()): Unit {\n        const baseValue = this.getBaseValue(value);\n\n        const bestMatchPeriod = availableUnits.find(\n            (unit: TimePeriod, index: number) =>\n                baseValue / unit.getMultiplier() < unit.threshold || index === availableUnits.length - 1\n        );\n\n        return bestMatchPeriod;\n    }\n\n    getUnitNameTranslationKey(): string {\n        return TimePeriod.unitNameTranslationKeyPrefix + this.getUnitName();\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Injectable } from \"@angular/core\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { CommonUtil } from \"../common-util\";\nimport { Unit } from \"./unit\";\n\n/**\n * UnitFormatter represents provided value and unit into a localized string.\n */\n@Injectable()\nexport class UnitFormatter {\n    constructor(private translationService: TranslationService) {}\n\n    /**\n     * Converts the provided value in input units to a value in the output units.\n     * Example: format(1000, Unit.MB, Unit.GB, 2) = \"1 GB\"\n     *\n     * @param value - value of inputUnit\n     * @param inputUnit - unit of value\n     * @param outputUnit - unit to which value is converted\n     * @param precision - how many digits are shown after decimal\n     *\n     * @returns localized string in format `${value} ${outputUnit.unitName}`\n     */\n    format(value: number, inputUnit: Unit, outputUnit: Unit, precision?: number): string {\n        // TODO response from getOutputValue() needs to be formatted to a localized number\n        const outputValue = inputUnit.getOutputValue(value, outputUnit);\n\n        return this.translationService.translate(outputUnit.getValueWithUnitTranslationKey(), [\n            CommonUtil.roundTo(outputValue, precision),\n        ]);\n    }\n\n    /**\n     * Converts the value of inputUnit to the best unit out of the provided available units.\n     * Example: bestFormat(1000000, Unit.KB, [Unit.KB, Unit.MB, Unit.GB]) = \"1 GB\"\n     *\n     * @param value = value of inputUnit\n     * @param inputUnit - unit of value\n     * @param availableUnits - list of units from which best unit is calculated\n     *\n     * @returns localized string in format `${value} ${outputUnit.unitName}`\n     */\n    bestFormat(value: number, inputUnit: Unit, availableUnits: Unit[]): string {\n        return this.format(value, inputUnit, inputUnit.findBestUnit(value, availableUnits));\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport const Operators = {\n    OR: \",\",\n    AND: \";\",\n    GT: \"=gt=\",\n    GE: \"=ge=\",\n    LT: \"=lt=\",\n    LE: \"=le=\",\n    EQ: \"==\",\n    NEQ: \"!=\",\n} satisfies { [key: string]: string };\n\nexport type Primitives = boolean | string | number;\n\n/**\n * Utility to reduce the verbosity required when creating complex query filter expressions.\n *\n * Usage:\n * const builder = new FilterBuilder();\n * const filter = builder\n *          .is(\"isVappTemplate\").equalTo(true)\n *          .and()\n *          .is(\"vcd\").equalTo(vcdId)\n *          .and().or(\n *              builder.is(\"created\").before(userInputDate),\n *              builder.is(\"uptime\").greaterThan(user)\n *          );\n *\n * Will produce:\n * isVappTemplate==true;vcd==some-urn-here;(created=lt=DATETIME,uptime=gt=3600000)\n */\nexport class FilterBuilder {\n    private result = \"\";\n    private parent: FilterBuilder;\n    private currentOperator: string;\n\n    constructor(parent: FilterBuilder = null) {\n        this.parent = parent;\n    }\n\n    /**\n     * Initialize a filter expression\n     *  property\n     * @returns The created FilterBuilder instance\n     */\n    public is(property: string): FilterBuilder {\n        const fb = new FilterBuilder(this);\n        fb.result = property;\n        return fb;\n    }\n\n    /**\n     * Create a string representing the filter parameter to be used in a query\n     * @returns the filter expression\n     */\n    public getString(): string {\n        const query = this.buildPartial();\n        return query;\n    }\n\n    /**\n     * Conjunct expressions\n     *  conditions\n     * @returns The FilterBuilder instance\n     */\n    public and(...conditions: FilterBuilder[]): FilterBuilder {\n        if (!conditions.length) {\n            if (\n                this.currentOperator === Operators.OR ||\n                (this.parent && this.parent.currentOperator === Operators.OR)\n            ) {\n                if (this.parent) {\n                    this.parent.result = \"(\" + this.parent.result;\n                    this.result += \")\";\n                } else {\n                    this.wrap();\n                }\n                this.currentOperator = Operators.AND;\n            }\n            this.result += Operators.AND;\n        } else {\n            this.result += \"(\";\n            const first = conditions.shift();\n            let partial = first.buildPartial();\n\n            conditions.forEach((condition) => {\n                partial += Operators.AND + condition.buildPartial();\n            });\n\n            this.result += partial + \")\";\n        }\n        return this;\n    }\n\n    /**\n     * Top level AND operator\n     *  conditions\n     * @returns The FilterBuilder instance\n     */\n    public all(...conditions: FilterBuilder[]): FilterBuilder {\n        if (conditions.length) {\n            const first = conditions.shift();\n            let partial = first.buildPartial();\n\n            conditions.forEach((condition) => {\n                partial += Operators.AND + condition.buildPartial();\n            });\n\n            this.result += partial;\n        }\n\n        return this;\n    }\n\n    /**\n     * Disjunct expressions\n     *  conditions\n     * @returns The FilterBuilder instance\n     */\n    public or(...conditions: FilterBuilder[]): FilterBuilder {\n        if (!conditions.length) {\n            if (\n                this.currentOperator === Operators.AND ||\n                (this.parent && this.parent.currentOperator === Operators.AND)\n            ) {\n                if (this.parent) {\n                    this.parent.result = \"(\" + this.parent.result;\n                    this.result += \")\";\n                } else {\n                    this.wrap();\n                }\n                this.currentOperator = Operators.OR;\n            }\n            this.result += Operators.OR;\n        } else {\n            this.result += \"(\";\n            const first = conditions.shift();\n            let partial = first.buildPartial();\n\n            conditions.forEach((condition) => {\n                partial += Operators.OR + condition.buildPartial();\n            });\n\n            this.result += partial + \")\";\n        }\n        return this;\n    }\n\n    /**\n     * Top level OR operator\n     * conditions\n     * @returns The FilterBuilder instance\n     */\n    public any(...conditions: FilterBuilder[]): FilterBuilder {\n        if (conditions.length) {\n            const first = conditions.shift();\n            let partial = first.buildPartial();\n            first.clear();\n\n            conditions.forEach((condition) => {\n                partial += Operators.OR + condition.buildPartial();\n                condition.clear();\n            });\n            this.result += partial;\n        }\n\n        return this;\n    }\n\n    /**\n     * Wrap the current expression in ()\n     * @returns The FilterBuilder instance\n     */\n    public wrap(): FilterBuilder {\n        this.result = \"(\" + this.result + \")\";\n        this.currentOperator = null;\n        return this;\n    }\n\n    /**\n     * Match a filter expression to be equal to a value\n     * @returns The FilterBuilder instance\n     */\n    public equalTo(value: Primitives, ...moreValues: Primitives[]): FilterBuilder {\n        return this.condition(Operators.EQ, value, ...moreValues);\n    }\n\n    /**\n     * Match a filter expression to be different to a value\n     * @returns The FilterBuilder instance\n     */\n    public notEqualTo(value: Primitives, ...moreValues: Primitives[]): FilterBuilder {\n        return this.condition(Operators.NEQ, value, ...moreValues);\n    }\n\n    /**\n     * Match a filter expression to be less than a value\n     * @returns The FilterBuilder instance\n     */\n    public lessThan(value: number): FilterBuilder {\n        return this.condition(Operators.LT, value);\n    }\n\n    /**\n     * Match a filter expression to be less than or equal to a value\n     * @returns The FilterBuilder instance\n     */\n    public lessThanOrEqualTo(value: number): FilterBuilder {\n        return this.condition(Operators.LE, value);\n    }\n\n    /**\n     * Match a filter expression to be greater than a value\n     * @returns The FilterBuilder instance\n     */\n    public greaterThan(value: number): FilterBuilder {\n        return this.condition(Operators.GT, value);\n    }\n\n    /**\n     * Match a filter expression to be greater than or equal to a value\n     * @returns The FilterBuilder instance\n     */\n    public greaterThanOrEqualTo(value: number): FilterBuilder {\n        return this.condition(Operators.GE, value);\n    }\n\n    /**\n     * Match a filter expression to be before a date\n     * @returns The FilterBuilder instance\n     */\n    public before(date: Date): FilterBuilder {\n        return this.condition(Operators.LT, date.toISOString());\n    }\n\n    /**\n     * Match a filter expression to be after a date\n     * @returns The FilterBuilder instance\n     */\n    public after(date: Date): FilterBuilder {\n        return this.condition(Operators.GT, date.toISOString());\n    }\n\n    /**\n     * Match a filter expression to be between two numbers.\n     * Lower limit is greater or equal and upper limit is less or equal.\n     * If for either of the limit is not provided value, the limit is not included in the filter expression.\n     * @returns The FilterBuilder instance\n     */\n    public betweenNumbers(values: number[]): FilterBuilder {\n        const builders: FilterBuilder[] = [];\n\n        if (typeof values[0] === \"number\") {\n            builders.push(new FilterBuilder().is(this.result).condition(Operators.GE, values[0]));\n        }\n\n        if (typeof values[1] === \"number\") {\n            builders.push(new FilterBuilder().is(this.result).condition(Operators.LE, values[1]));\n        }\n\n        return new FilterBuilder().is(\"\").and(...builders);\n    }\n\n    private condition(operator: string, value: Primitives, ...moreValues: Primitives[]): FilterBuilder {\n        const name = this.result;\n        this.result += (operator + value) as string;\n        if (moreValues.length) {\n            moreValues.forEach((val) => {\n                this.result += (\",\" + name + operator + val) as string;\n            });\n            this.currentOperator = Operators.OR;\n        }\n        return this;\n    }\n\n    private clear(): void {\n        this.result = \"\";\n        this.currentOperator = \"\";\n        if (this.parent) {\n            this.parent.clear();\n            this.parent = null;\n        }\n    }\n\n    private buildPartial(): string {\n        if (this.parent) {\n            return `${this.parent.buildPartial()}${this.result}`;\n        } else {\n            return this.result;\n        }\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./id-generator/id-generator\";\nexport * from \"./test/index\";\nexport * from \"./unit/unit\";\nexport * from \"./unit/unit-formatter\";\nexport * from \"./common-util\";\nexport * from \"./filter-builder\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { AfterViewInit, Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\nexport const ALTERNATIVE_TEXT = \"alt\";\n\n/**\n * Adds the 'alt' attribute to the injected svg in cds-icon elements.\n */\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: \"cds-icon\",\n})\nexport class AlternativeTextDirective implements AfterViewInit {\n    @Input() vcdAlternativeText = \"\";\n\n    constructor(\n        private el: ElementRef<HTMLElement>,\n        private renderer: Renderer2\n    ) {}\n\n    ngAfterViewInit(): void {\n        const svgElement = this.el.nativeElement.querySelector(\"svg\");\n        if (svgElement && !svgElement.getAttribute(ALTERNATIVE_TEXT)) {\n            this.renderer.setAttribute(svgElement, ALTERNATIVE_TEXT, this.vcdAlternativeText);\n        }\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { AlternativeTextDirective } from \"./alternative-text.directive\";\n\n@NgModule({\n    declarations: [AlternativeTextDirective],\n    exports: [AlternativeTextDirective],\n})\nexport class AlternativeTextModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { AfterViewChecked, Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\ntype ColSize = \"3\" | \"4\" | \"8\" | \"9\";\n\nexport interface ResponsiveInputOptions {\n    disabled: boolean;\n}\n\n/**\n * Adds Clarity grid classes to form controls based on the host's width so that labels and inputs are on separate\n * lines and to control the label width for large screens.\n *\n * Centralizes CSS classes to be used to enforce a common look and feel throughout the application\n */\n@Directive({\n    selector: \".clr-form-control[vcdResponsiveInput]\",\n})\nexport class ResponsiveInputDirective implements AfterViewChecked {\n    private elementWidth = 0;\n\n    private breakPoint = 768;\n\n    /**\n     * The directive will be a no-op if it's disabled. It does not support being changed after rendering.\n     */\n    @Input(\"vcdResponsiveInput\")\n    set options(value: ResponsiveInputOptions) {\n        this._disabled = value.disabled;\n        this.clrGridRow = !this.disabled;\n    }\n\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n\n    private _disabled = false;\n\n    @HostBinding(\"class.clr-row\") public clrGridRow = true;\n\n    constructor(private el: ElementRef<HTMLElement>) {}\n\n    ngAfterViewChecked(): void {\n        if (this._disabled) {\n            return;\n        }\n        if (this.elementWidth !== 0) {\n            return;\n        }\n        const newElementWidth = this.el.nativeElement.offsetWidth;\n        if (newElementWidth) {\n            this.elementWidth = newElementWidth;\n            const [labelWidth, containerWidth]: ColSize[] =\n                this.elementWidth < this.breakPoint ? [\"4\", \"8\"] : [\"3\", \"9\"];\n            this.applyClasses(\"label\", labelWidth);\n            this.applyClasses(\"container\", containerWidth);\n        }\n    }\n\n    private applyClasses(className: \"label\" | \"container\", mdSize: ColSize): void {\n        const el = this.el.nativeElement.querySelector(`:scope > .clr-control-${className}`);\n        if (el) {\n            el.classList.remove(\"clr-col-12\", \"clr-col-md-3\", \"clr-col-md-4\", \"clr-col-md-8\", \"clr-col-md-9\");\n            el.classList.add(\"clr-col-12\", `clr-col-md-${mdSize}`);\n        }\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { ResponsiveInputDirective } from \"./responsive-input.directive\";\n\n@NgModule({\n    declarations: [ResponsiveInputDirective],\n    exports: [ResponsiveInputDirective],\n})\nexport class ResponsiveInputDirectiveModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Injectable, OnDestroy } from \"@angular/core\";\nimport { Observable, PartialObserver, Subscription } from \"rxjs\";\n\n/**\n * An interface that knows how to subscribe and unsubscribe from observables.\n */\nexport interface ISubscriptionTracker {\n    /**\n     * Subscribes to the given {@param observable}. Passes along the given {@param observerOrNext}.\n     * Will call the {@param complete} when complete, and {@param error} when errors happen.\n     */\n    subscribe<T>(\n        observable: Observable<T>,\n        observerOrNext?: PartialObserver<T> | ((value: T) => void),\n        error?: (error: any) => void,\n        complete?: () => void\n    ): Subscription;\n\n    /**\n     * Unsubscribes from the given {@param subscription}.\n     */\n    unsubscribe(subscription: Subscription): Subscription;\n\n    /**\n     * Unsubscribes from all subscriptions on this {@link Subscribable}.\n     */\n    unsubscribeAll(): void;\n}\n\n/**\n * Components can use this to have subscriptions automatically removed when the component is destroyed\n */\n@Injectable()\nexport class SubscriptionTracker implements ISubscriptionTracker, OnDestroy {\n    private subscriptions: Subscription[] = [];\n\n    subscribe<T>(observable: Observable<T>, observerOrNext?: PartialObserver<T> | ((value: T) => void)): Subscription {\n        const subscription = observable.subscribe(observerOrNext);\n        this.subscriptions.push(subscription);\n        return subscription;\n    }\n\n    unsubscribe(subscription: Subscription): Subscription {\n        subscription.unsubscribe();\n        const indexOfSubscription = this.subscriptions.indexOf(subscription);\n        if (indexOfSubscription === -1) {\n            throw new Error(\"Unsubscribing to untracked subscription\");\n        }\n        this.subscriptions.splice(indexOfSubscription, 1);\n        return subscription;\n    }\n\n    unsubscribeAll(): void {\n        this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n        this.subscriptions = [];\n    }\n\n    ngOnDestroy(): void {\n        this.unsubscribeAll();\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./subscription-tracker\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Directive, ElementRef, Input, OnDestroy, OnInit, Self } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { SubscriptionTracker } from \"../../common/subscription\";\n\nexport enum TooltipPosition {\n    tl = \"tooltip-top-left\",\n    tr = \"tooltip-top-right\",\n    br = \"tooltip-bottom-right\",\n    bl = \"tooltip-bottom-left\",\n}\n\nexport enum TooltipSize {\n    sm = \"100px\",\n    md = \"200px\",\n    lg = \"400px\",\n}\n\n/**\n * The configuration information for the cliptext within the cells of the datagrid.\n */\nexport interface CliptextConfig {\n    /**\n     * The size of the tooltip to be displayed in the cell.\n     */\n    size?: TooltipSize;\n    /**\n     * The time delay from mouse off to hide the cliptext.\n     */\n    mouseoutDelay?: number;\n    /**\n     * If the cliptext should be disabled.\n     */\n    disabled?: boolean;\n}\n\n/**\n * Singleton tooltip created by directive\n */\nconst tip = {\n    /** A single DOM node structure for the popup is created and shared with all instances (the .tooltip)  */\n    container: null as HTMLElement,\n\n    /** The inner node (the .tooltip-content) */\n    content: null as HTMLElement,\n\n    /** Timer for setTimeout used when hiding */\n    hideTimeout: null as number,\n\n    /** The directive that last caused the tooltip to be displayed */\n    currentDirective: null as ShowClippedTextDirective,\n\n    /** Whether the mouse is currently over a host or the tooltip */\n    isMouseOver: false,\n\n    /**\n     * The host element that last caused the tooltip to be displayed\n     */\n    get currentHost(): HTMLElement {\n        return tip.currentDirective.hostElement;\n    },\n\n    /**\n     * The tooltip size requested for the last directive that caused the tooltip to be displayed\n     */\n    get tooltipSize(): TooltipSize {\n        return tip.currentDirective.tooltipSize;\n    },\n\n    /**\n     * How long to wait before hiding the tooltip after a mouseout. This gives the user a chance to hover over the\n     * tooltip so they can copy/paste its contents\n     */\n    get mouseoutDelay(): number {\n        return tip.currentDirective.mouseoutDelay;\n    },\n\n    create(): void {\n        if (tip.container) {\n            return;\n        }\n        tip.container = document.createElement(\"div\");\n        tip.container.classList.add(\"tooltip\", \"vcd-show-clipped-text\");\n        tip.content = document.createElement(\"div\");\n        tip.content.classList.add(\"tooltip-content\");\n        setStyle(tip.container, {\n            position: \"absolute\",\n            zIndex: \"1000\",\n            opacity: \"0\",\n            visibility: \"hidden\",\n        });\n        tip.container.appendChild(tip.content);\n        document.body.appendChild(tip.container);\n        watchEvents(tip.container, tip.onMouseEnter, tip.onMouseLeave);\n        tip.content.addEventListener(\"transitionend\", tip.onTransitionEnd);\n    },\n\n    destroy(): void {\n        document.body.removeChild(tip.container);\n        unwatchEvents(tip.container, tip.onMouseEnter, tip.onMouseLeave);\n        tip.clearHideTimeout();\n        tip.content.removeEventListener(\"transitionend\", this.onTransitionEnd);\n        tip.container = null;\n        tip.content = null;\n    },\n\n    onMouseEnter(): void {\n        tip.clearHideTimeout();\n    },\n\n    onMouseLeave(): void {\n        if (tip.currentDirective) {\n            tip.hideTooltip(tip.mouseoutDelay);\n        }\n    },\n\n    hideTooltip(delay: number): void {\n        tip.clearHideTimeout();\n        tip.hideTimeout = window.setTimeout(() => {\n            tip.isMouseOver = false;\n            if (tip.container !== null) {\n                tip.container.style.opacity = \"0\";\n            }\n            if (tip.content !== null) {\n                tip.content.style.opacity = \"0\";\n            }\n            tip.hideTimeout = null;\n            tip.currentDirective = null;\n        }, delay);\n    },\n\n    clearHideTimeout(): void {\n        if (tip.hideTimeout) {\n            clearTimeout(tip.hideTimeout);\n            tip.hideTimeout = null;\n        }\n    },\n\n    onTransitionEnd(e: Event): void {\n        if (tip.container.style.opacity === \"0\") {\n            tip.container.style.visibility = \"hidden\";\n            tip.content.style.visibility = \"hidden\";\n        }\n    },\n\n    /**\n     * Update the tooltip based on the content/dimensions of {@link tip.currentDirective}\n     */\n    update(): void {\n        const el = tip.currentHost;\n        const rect = el.getBoundingClientRect();\n        setStyle(tip.container, {\n            top: rect.top + \"px\",\n            left: rect.left + \"px\",\n            width: rect.width + \"px\",\n            height: rect.height + \"px\",\n            opacity: \"1\",\n            wordBreak: \"break-word\",\n        });\n        setStyle(tip.content, {\n            visibility: \"visible\",\n            opacity: \"1\",\n            width: this.tooltipSize,\n        });\n        const { tl, tr, bl, br } = TooltipPosition;\n        tip.content.classList.remove(tl, tr, bl, br);\n        tip.content.classList.add(tip.calculatePosition(rect));\n        tip.content.innerHTML = el.innerHTML;\n    },\n\n    /**\n     *  Tooltip direction should be the opposite quadrant of where the center of the clipped element is\n     *     TL -> BR        TR -> BL\n     *     BL -> TR        BR -> TL\n     * @param rect THe dimensions of the clipped element\n     */\n    calculatePosition(rect: ClientRect): TooltipPosition {\n        const { innerWidth, innerHeight } = window;\n        const rectCenter = { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };\n\n        // It's on the right\n        if (rectCenter.x > innerWidth / 2) {\n            if (rectCenter.y > innerHeight / 2) {\n                // Bottom right quad\n                return TooltipPosition.tl;\n            } else {\n                // Top right quad\n                return TooltipPosition.bl;\n            }\n        }\n\n        // It's on the left\n        if (rectCenter.y > innerHeight / 2) {\n            // Bottom left quad\n            return TooltipPosition.tr;\n        } else {\n            // Top left quad\n            return TooltipPosition.br;\n        }\n    },\n};\n\ntype EventHandler = (e: MouseEvent) => void;\n\nfunction watchEvents(el: HTMLElement, mouseIn: EventHandler, mouseOut: EventHandler): void {\n    el.addEventListener(\"mouseenter\", mouseIn);\n    el.addEventListener(\"mouseleave\", mouseOut);\n\n    el.addEventListener(\"focus\", mouseIn);\n    el.addEventListener(\"blur\", mouseOut);\n}\n\nfunction unwatchEvents(el: HTMLElement, mouseIn: EventHandler, mouseOut: EventHandler): void {\n    el.removeEventListener(\"mouseenter\", mouseIn);\n    el.removeEventListener(\"mouseleave\", mouseOut);\n\n    el.removeEventListener(\"focus\", mouseIn);\n    el.removeEventListener(\"blur\", mouseOut);\n}\n\nfunction setStyle(el: HTMLElement, style: Partial<CSSStyleDeclaration>): void {\n    Object.assign(el.style, style);\n}\n\n/**\n * Displays a clarity tooltip with the full contents of a host element on hover but only if\n * the elements is clipped.\n */\n@Directive({\n    selector: \"[vcdShowClippedText]\",\n    providers: [SubscriptionTracker],\n})\nexport class ShowClippedTextDirective implements OnDestroy, OnInit {\n    /** To destroy the tooltip when no longer needed */\n    static instanceCount = 0;\n\n    @Input(\"vcdShowClippedText\")\n    set config(config: CliptextConfig) {\n        if (config && config.mouseoutDelay) {\n            this.mouseoutDelay = config.mouseoutDelay;\n        }\n        if (config && config.size) {\n            this.tooltipSize = config.size;\n        }\n        const nextDisabled = config !== undefined && config.disabled;\n        if (this.disabled === nextDisabled) {\n            return;\n        }\n        this.disabled = nextDisabled;\n        if (this.disabled) {\n            this.deactivate();\n        } else {\n            this.activate();\n        }\n    }\n\n    mouseoutDelay = 500;\n    tooltipSize = TooltipSize.md;\n    disabled = false;\n    oldTabIndex: number | null;\n\n    /**\n     * The HTML element receiving the directive\n     */\n    public hostElement: HTMLElement = this.host.nativeElement;\n\n    private mutationObserver: MutationObserver;\n    private resizeObserver: ResizeObserver;\n    private hostElementMutation$ = new Subject<MutationRecord[] | ResizeObserverEntry[]>();\n\n    constructor(\n        private host: ElementRef,\n        @Self() private subTracker: SubscriptionTracker\n    ) {}\n\n    ngOnInit(): void {\n        if (!this.disabled) {\n            this.activate();\n        }\n    }\n\n    activate(): void {\n        ShowClippedTextDirective.instanceCount++;\n        tip.create();\n        watchEvents(this.hostElement, this.onMouseIn, this.onMouseOut);\n\n        // A host must have the following styles to show text ellipsis when overflowing\n        setStyle(this.hostElement, {\n            overflow: \"hidden\",\n            whiteSpace: \"nowrap\",\n            textOverflow: \"ellipsis\",\n        });\n\n        const tabIndex = this.hostElement.getAttribute(\"tabIndex\");\n        this.oldTabIndex = tabIndex === null ? null : +tabIndex;\n\n        this.subTracker.subscribe(\n            this.hostElementMutation$.asObservable().pipe(debounceTime(300)),\n            this.onHostElementMutation\n        );\n\n        this.mutationObserver = new MutationObserver((e) => this.hostElementMutation$.next(e));\n        this.mutationObserver.observe(this.hostElement, {\n            subtree: true,\n            characterData: true,\n        });\n\n        this.resizeObserver = new ResizeObserver((e) => this.hostElementMutation$.next(e));\n        this.resizeObserver.observe(this.hostElement);\n    }\n\n    ngOnDestroy(): void {\n        if (!this.disabled) {\n            this.deactivate();\n        }\n    }\n\n    deactivate(): void {\n        ShowClippedTextDirective.instanceCount--;\n        unwatchEvents(this.hostElement, this.onMouseIn, this.onMouseOut);\n        this.mutationObserver?.disconnect();\n        this.resizeObserver?.disconnect();\n\n        if (tip.currentDirective === this) {\n            tip.hideTooltip(0);\n        }\n        if (ShowClippedTextDirective.instanceCount === 0) {\n            tip.destroy();\n        }\n    }\n\n    private onMouseIn = (e: MouseEvent): void => {\n        tip.clearHideTimeout();\n        tip.isMouseOver = true;\n        if (this.isOverflowing()) {\n            tip.currentDirective = this;\n            tip.update();\n        } else {\n            tip.hideTooltip(this.mouseoutDelay);\n        }\n    };\n\n    private onMouseOut = (): void => {\n        tip.hideTooltip(this.mouseoutDelay);\n    };\n\n    private onHostElementMutation = (): void => {\n        const tabIndexIsNotPresetted = this.oldTabIndex < 0 || this.oldTabIndex === null;\n\n        if (this.isOverflowing() && tabIndexIsNotPresetted) {\n            this.hostElement.setAttribute(\"tabIndex\", String(0));\n        } else {\n            this.setTabIndexToOldValue();\n        }\n    };\n\n    private setTabIndexToOldValue(): void {\n        if (this.oldTabIndex === null) {\n            this.hostElement.removeAttribute(\"tabIndex\");\n            return;\n        }\n\n        this.hostElement.setAttribute(\"tabIndex\", String(this.oldTabIndex));\n    }\n\n    private isOverflowing(): boolean {\n        // Text overflows when the content element's width is less than its scrollWidth.\n        return Math.ceil(this.hostElement.getBoundingClientRect().width) < this.hostElement.scrollWidth;\n    }\n}\n\n/**\n * Used to call {@link tip.onTransitionEnd} from outside this file.\n * We need to expose {@link tip.onTransitionEnd} because when the window is not focused\n * (as in a headless chrome environment), the transitionend event is not fired.\n * As such, from the tests, you need to manually call this method.\n */\nexport const fireTipTransitionEndForTests = (event: Event): void => {\n    // Since we're at it, please remove the param from onTransitionEnd since we don't use it\n    tip.onTransitionEnd(event);\n};\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { ShowClippedTextDirective } from \"./show-clipped-text.directive\";\n\n@NgModule({\n    declarations: [ShowClippedTextDirective],\n    exports: [ShowClippedTextDirective],\n})\nexport class ShowClippedTextDirectiveModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Injectable } from \"@angular/core\";\nimport { BehaviorSubject, Observable, Subject } from \"rxjs\";\n\n/**\n * Communication service between {@link AriaActiveDescendantDirective} and observer of activeDescendantObservable\n */\n@Injectable()\nexport class AriaActiveDescendantService {\n    private activeDescendantSubject: Subject<string> = new BehaviorSubject<string>(\"\");\n\n    /**\n     * Observed by element which owns the section with possible active descendants\n     */\n    public activeDescendantObservable: Observable<string> = this.activeDescendantSubject.asObservable();\n\n    /**\n     * Marks element as active descendant\n     * @param id attribute of active descendant element\n     */\n    public selectDescendant(id: string): void {\n        this.activeDescendantSubject.next(id);\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Directive, ElementRef, Input, OnInit, Renderer2 } from \"@angular/core\";\nimport { IdGenerator } from \"../../../utils\";\nimport { AriaActiveDescendantService } from \"./aria-active-descendant.service\";\n\n/**\n * Sets a unique id attribute and marks the element as active descendant with {@link AriaActiveDescendantService}\n */\n@Directive({\n    selector: \"[vcdAriaActiveDescendant]\",\n})\nexport class AriaActiveDescendantDirective implements OnInit {\n    private readonly uniqueId: string = this.idGenerator.generate();\n\n    @Input(\"vcdAriaActiveDescendant\")\n    public set isActive(value: boolean) {\n        if (value) {\n            this.activedescendantService.selectDescendant(this.uniqueId);\n        }\n    }\n\n    constructor(\n        private elementRef: ElementRef,\n        private renderer: Renderer2,\n        private activedescendantService: AriaActiveDescendantService,\n        private idGenerator: IdGenerator\n    ) {}\n\n    ngOnInit(): void {\n        this.renderer.setAttribute(this.elementRef.nativeElement, \"id\", this.uniqueId);\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { AriaActiveDescendantDirective } from \"./aria-active-descendant.directive\";\n\n@NgModule({\n    declarations: [AriaActiveDescendantDirective],\n    exports: [AriaActiveDescendantDirective],\n})\nexport class AriaActivedescendantModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./aria-active-descendant.directive\";\nexport * from \"./aria-active-descendant.service\";\nexport * from \"./aria-activedescendant.module\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./alternative-text/alternative-text.module\";\nexport * from \"./alternative-text/alternative-text.directive\";\nexport * from \"./responsive-input/responsive-input.directive\";\nexport * from \"./responsive-input/responsive-input.module\";\nexport * from \"./show-clipped-text.directive\";\nexport * from \"./show-clipped-text.directive.module\";\nexport * from \"./aria-activedescendant\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Injectable, OnDestroy, Renderer2 } from \"@angular/core\";\nimport { Direction, MenuItem } from \"./dropdown.component\";\n\n/**\n * Provided at the injector level of root {@link DropdownComponent}. The same service object is used for all the nested menus along\n * with the root menu. This is responsible for listening to arrow key presses within the root dropdown menu container and updating the\n * focused item on the DOM across all the nested and root menus.\n */\n@Injectable()\nexport class DropdownFocusHandlerService implements OnDestroy {\n    currentFocusedItem: MenuItem;\n    unlistenFuncs: (() => void)[] = [];\n\n    constructor(private renderer: Renderer2) {}\n\n    ngOnDestroy(): void {\n        this.unlistenFuncs.forEach((unlisten) => unlisten());\n    }\n\n    /**\n     * Moves the focus to HTML element in the given direction and returns true if the focus is moved and false otherwise\n     */\n    moveFocus(direction: Direction): boolean {\n        let moved;\n        switch (direction) {\n            case Direction.DOWN:\n                moved = this.moveFocusTo(this.currentFocusedItem.down);\n                break;\n            case Direction.LEFT:\n                moved = this.moveFocusTo(this.currentFocusedItem.left);\n                break;\n            case Direction.UP:\n                moved = this.moveFocusTo(this.currentFocusedItem.up);\n                break;\n            case Direction.RIGHT:\n                moved = this.moveFocusTo(this.currentFocusedItem.right);\n                break;\n        }\n        return moved;\n    }\n\n    /**\n     * Calls the HTML focus method on the HTML element passed and removed focus on currently focused element.\n     * Returns true if the focus is moved and false otherwise.\n     */\n    moveFocusTo(item: MenuItem): boolean {\n        if (!item) {\n            return false;\n        }\n        if (this.currentFocusedItem) {\n            // Sometimes, when navigating to a nested menu using right arrow, the nested menu trigger gets focused multiple times\n            if (Object.is(this.currentFocusedItem.element, item.element)) {\n                return false;\n            }\n            this.currentFocusedItem.element.blur();\n        }\n        item.element.focus();\n        this.currentFocusedItem = item;\n        return true;\n    }\n\n    /**\n     * Attaches arrow key event listeners to the root menu container in all direction except right. This is because, when a right arrow is\n     * pressed, Clarity opens the nested dropdown menu and the logic inside {@link DropdownFocusHandlerDirective.ngAfterViewInit}\n     * automatically moves the focus to first item in the menu on the right side\n     */\n    listenToArrowKeys(menuContainer: HTMLElement): void {\n        // We call event.preventDefault below to prevent scrolling of page underneath the dropdown when arrow keys are pressed\n        this.unlistenFuncs.push(\n            this.renderer.listen(menuContainer, \"keydown.arrowdown\", (event: Event) => {\n                event.stopPropagation();\n                this.moveFocus(Direction.DOWN);\n                event.preventDefault();\n            })\n        );\n        this.unlistenFuncs.push(\n            this.renderer.listen(menuContainer, \"keydown.arrowup\", (event: Event) => {\n                event.stopPropagation();\n                this.moveFocus(Direction.UP);\n                event.preventDefault();\n            })\n        );\n        this.unlistenFuncs.push(\n            this.renderer.listen(menuContainer, \"keydown.arrowleft\", (event: Event) => {\n                if (!this.currentFocusedItem.left) {\n                    return;\n                }\n                // Close the nested menu before moving focus to left side\n                this.currentFocusedItem.left.closeMenu();\n                event.stopPropagation();\n                this.moveFocus(Direction.LEFT);\n                event.preventDefault();\n            })\n        );\n    }\n\n    /**\n     * Whenever escape is pressed on dropdown item, the menu has to be closed and the focus has to be moved to parent menu if any... Just\n     * like when left arrow key is pressed\n     */\n    escapePressed(): void {\n        if (!this.currentFocusedItem.left) {\n            return;\n        }\n        // Close the nested menu before moving focus to left side\n        this.currentFocusedItem.left.closeMenu();\n        this.moveFocus(Direction.LEFT);\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { DOCUMENT } from \"@angular/common\";\nimport {\n    ContentChild,\n    Directive,\n    ElementRef,\n    HostListener,\n    Inject,\n    Optional,\n    Renderer2,\n    SkipSelf,\n} from \"@angular/core\";\nimport { ClrDropdown, ClrDropdownMenu } from \"@clr/angular\";\n\nconst CONTENT_AREA_SELECTOR = \".content-area\";\nexport const NO_SCROLLING_CLASSNAME = \"no-scrolling\"; // Set by Clarity when a modal is opened\n// Extra space on the right and left of drop down menus to shift them left or right and prevent any clipping\nconst MENU_BUFFER_SPACE = 150;\n\n/**\n * Directive for ClrDropDown which repositions the drop-down menu dynamically based on the available space.\n *\n * If there is not enough space to show the whole drop-down menu, then leave the default position which is `bottom` and\n * users have to scroll down to access it.\n *\n * @example\n * ```\n * <clr-dropdown vcdDropdown>\n *     <button class=\"btn btn-link vm-power-link\" clrDropdownTrigger>\n *         {{ 'vm.actions' | translate }}\n *         <cds-icon shape=\"caret\" direction=\"down\"></cds-icon>\n *         </button>\n *     <clr-dropdown-menu *clrIfOpen>\n *         <label class=\"dropdown-header\">Dropdown header</label>\n *         <button type=\"button\" clrDropdownItem>Action 1</button>\n *         <button type=\"button\" clrDropdownItem>Action 2</button>\n *         <div class=\"dropdown-divider\"></div>\n *         <button type=\"button\" clrDropdownItem>Link 1</button>\n *         <button type=\"button\" clrDropdownItem>Link 2</button>\n *     </clr-dropdown-menu>\n * </clr-dropdown>\n * ```\n */\n/**\n * This component is marked as dynamic to suppress the '\"strictMetadataEmit\": true' error being reported on DI of Document\n */\n/** @dynamic */\n@Directive({\n    selector: \"clr-dropdown[vcdDynamicDropdown]\",\n})\nexport class DynamicDropdownPositionDirective {\n    private contentAreaElement: HTMLElement | null;\n    private dropdownTriggerElement: HTMLElement;\n    private dropdownMenuElement: HTMLElement;\n    private dropdownTriggerRect: DOMRect;\n    private dropdownMenuRect: DOMRect;\n    // Drop downs should be position absolutely to the window when they are in modal\n    private isInsideModal = false;\n\n    @ContentChild(ClrDropdownMenu, { static: false })\n    set dropdownMenu(dropdown: ClrDropdownMenu) {\n        if (dropdown) {\n            this.dropdownTriggerElement = this.elRef.nativeElement;\n            this.dropdownMenuElement = this.dropdownTriggerElement.querySelector(\"clr-dropdown-menu\");\n            if (this.dropdownMenuElement) {\n                // Recalculate the dropdown position on open\n                this.dropdownTriggerRect = this.dropdownTriggerElement.getBoundingClientRect();\n                this.dropdownMenuRect = this.dropdownMenuElement.getBoundingClientRect();\n                this.isInsideModal = this.document.body.classList.contains(NO_SCROLLING_CLASSNAME);\n                this.contentAreaElement = this.isInsideModal\n                    ? null\n                    : (this.document.body.querySelector(CONTENT_AREA_SELECTOR) as HTMLElement);\n                this.resetPosition(this.dropdownMenuElement, this.positionTop, this.positionLeft);\n            }\n            try {\n                // Internal API\n                (dropdown as any).popoverInstance.removeScrollEventListeners();\n            } catch (e) {\n                console.error(\"Clarity has changed ClrDropdownMenu internal API. Please fix me!\");\n                throw new Error(\"Clarity has changed ClrDropdownMenu internal API. Please fix me!\");\n            }\n        }\n    }\n\n    constructor(\n        private elRef: ElementRef,\n        private renderer: Renderer2,\n        @Inject(DOCUMENT) private document: Document,\n        private dropDownBtn: ClrDropdown,\n        @Optional() @SkipSelf() private parentDropdown: DynamicDropdownPositionDirective\n    ) {}\n\n    private get positionTop(): number {\n        const dropdownTriggerRect = this.dropdownTriggerRect;\n        const dropdownTriggerHeight = dropdownTriggerRect.bottom - dropdownTriggerRect.top;\n        const dropdownMenuRect = this.dropdownMenuRect;\n        const dropdownMenuHeight = dropdownMenuRect.bottom - dropdownMenuRect.top;\n\n        // When the dropdown is inside a modal and it's being clipped, its position is determined based on the window\n        if (this.isInsideModal && dropdownMenuRect.bottom > window.innerHeight) {\n            return -(dropdownMenuHeight + dropdownTriggerHeight + 1);\n        }\n        if (!this.contentAreaElement) {\n            return 0;\n        }\n        const contentAreaRect = this.contentAreaElement.getBoundingClientRect();\n        // When not in a modal, the position is relative to the `.content-area` element\n\n        const enoughSpaceAtTheBottom = dropdownMenuRect.height <= contentAreaRect.bottom - dropdownTriggerRect.bottom;\n        const enoughSpaceAtTheTop = dropdownMenuRect.height <= dropdownTriggerRect.top - contentAreaRect.top;\n\n        if (!enoughSpaceAtTheBottom && !enoughSpaceAtTheTop) {\n            /**\n             * If there is not enough space at the top and bottom, keep the dropdown at the middle of the screen,\n             * relative to the dropdown trigger.\n             *\n             * IMPORTANT: In some cases the menu might be cut off, becuase there is no space on the screen,\n             * based on the rules of this (positionTop) function.\n             */\n            return -dropdownMenuHeight / 2;\n        }\n\n        if (enoughSpaceAtTheBottom) {\n            // Don't shift to the top if it's not being clipped at the bottom\n            return 0;\n        }\n        if (dropdownTriggerRect.top - dropdownMenuRect.height >= contentAreaRect.top) {\n            // If the dropdown trigger is a dropdown item instead of a button, we shift it up by less number of pixels to avoid space\n            // between dropdown trigger and the dropdown menu\n            const isFirstDropdownTrigger = !!this.dropdownTriggerElement.querySelector(\"button.first-dropdown-toggle\");\n            return isFirstDropdownTrigger ? -(dropdownTriggerHeight + dropdownMenuHeight) : -dropdownMenuHeight;\n        }\n        if (enoughSpaceAtTheTop) {\n            // If the menu can get clipped by moving it to the top, push it down\n            return -(dropdownMenuRect.bottom - contentAreaRect.bottom);\n        }\n        // Don't shift by default\n        return 0;\n    }\n\n    private get positionLeft(): number {\n        const triggerBtn = this.elRef.nativeElement.querySelector(\"[clrdropdowntrigger]\");\n\n        let triggerComputedStyles = null;\n        if (triggerBtn) {\n            triggerComputedStyles = window.getComputedStyle(triggerBtn);\n        }\n        if (this.isInsideModal || !this.contentAreaElement) {\n            return 0;\n        }\n        const contentAreaRect = this.contentAreaElement.getBoundingClientRect();\n        const dropdownMenuRect = this.dropdownMenuRect;\n        const dropdownTriggerRect = this.dropdownTriggerRect;\n        // If the dropdown is getting clipped on the left and there is enough place on the right, shift the dropdown to right\n        if (\n            dropdownMenuRect.left + MENU_BUFFER_SPACE <= contentAreaRect.left &&\n            dropdownTriggerRect.right + dropdownMenuRect.width <= contentAreaRect.right\n        ) {\n            const marginRight = triggerComputedStyles ? parseInt(triggerComputedStyles.marginRight, 10) : 0;\n            return dropdownTriggerRect.width - marginRight;\n        }\n        // If the dropdown is getting clipped on the right and there is enough place on the left, shift the dropdown to left\n        if (\n            dropdownMenuRect.right + MENU_BUFFER_SPACE >= contentAreaRect.right &&\n            dropdownTriggerRect.left - dropdownMenuRect.width >= contentAreaRect.left\n        ) {\n            const marginLeft = triggerComputedStyles ? parseInt(triggerComputedStyles.marginLeft, 10) : 0;\n            // If the dropdown being clipped is at the 2nd level, we want to shift it furthur left such that it would\n            // not over lap and cover the 1st level of dropdown underneath it\n            if (this.parentDropdown) {\n                const parentDropdownMenuRect = this.parentDropdown.dropdownMenuElement.getBoundingClientRect();\n                const parentDropdownWidth = parentDropdownMenuRect.right - parentDropdownMenuRect.left;\n                return -(parentDropdownWidth + dropdownMenuRect.width + marginLeft);\n            }\n            return -(dropdownMenuRect.width + marginLeft);\n        }\n        // if the dropdown is clipped at the bottom and if it is also being clipped at the top and pushed down, shift it to right\n        if (\n            dropdownMenuRect.bottom > contentAreaRect.bottom &&\n            dropdownTriggerRect.top - dropdownMenuRect.height < contentAreaRect.top\n        ) {\n            const marginRight = triggerComputedStyles ? parseInt(triggerComputedStyles.marginRight, 10) : 0;\n            return dropdownTriggerRect.width - marginRight;\n        }\n        // Don't shift by default\n        return 0;\n    }\n\n    /**\n     * Reposition the dropdown element by setting top and left position.\n     *\n     * Note: The dropdown is position absolute by setting position, top and left properties AND then is position\n     * relatively to itself by setting transform: translateX/Y property.\n     */\n    private resetPosition(element: HTMLElement, top: number, left: number): void {\n        this.renderer.setStyle(element, \"top\", `${top}px`);\n        this.renderer.setStyle(element, \"left\", `${left}px`);\n    }\n\n    /**\n     * On window resize, close the dropdown when it is open, otherwise we need to recalculate again its position\n     * and reposition it, which may not be a good user experience.\n     */\n    @HostListener(\"window:resize\")\n    onWindowResize(): void {\n        this.dropDownBtn.toggleService.open = false;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport {\n    AfterViewInit,\n    Component,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Host,\n    HostListener,\n    Input,\n    OnDestroy,\n    Optional,\n    Output,\n    Provider,\n    QueryList,\n    Renderer2,\n    Self,\n    SkipSelf,\n    TrackByFunction,\n    ViewChild,\n    ViewChildren,\n} from \"@angular/core\";\nimport { ClrDropdown, ClrDropdownMenu, ClrDropdownTrigger } from \"@clr/angular\";\nimport { isObservable } from \"rxjs\";\nimport { ActionItem, TextIcon } from \"../common/interfaces\";\nimport { lastAvailabilityValue } from \"../constants\";\nimport { CliptextConfig, TooltipSize } from \"../lib/directives\";\nimport { CommonUtil } from \"../utils\";\nimport { SubscriptionTracker } from \"../common/subscription/subscription-tracker\";\nimport { DropdownFocusHandlerService } from \"./dropdown-focus-handler.service\";\n\nconst NESTED_DROPDOWN_TRIGGER_SELECTOR = \"clr-dropdown clr-dropdown > button\";\nconst DROPDOWN_ITEM_SELECTOR = \"clr-dropdown-menu > button\";\nexport const NESTED_MENU_HIDE_DELAY = 400;\n\nexport function dropdownFocusHandlerServiceFactory(\n    renderer: Renderer2,\n    existing: DropdownFocusHandlerService\n): DropdownFocusHandlerService {\n    return existing || new DropdownFocusHandlerService(renderer);\n}\n\nexport const DROPDOWN_FOCUS_HANDLER_PROVIDER: Provider = {\n    provide: DropdownFocusHandlerService,\n    useFactory: dropdownFocusHandlerServiceFactory,\n    deps: [Renderer2, [new Optional(), new SkipSelf(), DropdownFocusHandlerService]],\n};\n\n/**\n * To filter out the non-activatable separator item type when creating linked menu list {@link #linkMenuItems}. Because, we don't\n * want the focus to go to separator item type when navigating using the arrow keys\n */\nenum ActivatableMenuItemType {\n    /**\n     * Menu item that results in executing of an action when clicked\n     */\n    BUTTON = \"button\",\n    /**\n     * Activating this would open a nested menu\n     */\n    NESTED_VCD_DROPDOWN = \"vcd-dropdown\",\n}\n\nconst NESTED_DROPDOWN_TRIGGER = \"clr-dropdown > button\";\n\n/**\n * Arrow keys directions\n */\nexport enum Direction {\n    UP = \"up\",\n    DOWN = \"down\",\n    LEFT = \"left\",\n    RIGHT = \"right\",\n}\n\n/**\n * Object wrapping the focusable HTML elements of dropdown menu with the neighbors in 4 directions of each menu item.\n */\nexport interface MenuItem {\n    /**\n     * The HTML element of this dropdown menu item\n     */\n    element: HTMLElement;\n    /**\n     * Neighboring menu items in all the 4 directions\n     */\n    up?: MenuItem;\n    down?: MenuItem;\n    left?: MenuItem;\n    right?: MenuItem;\n    /**\n     * Call back to close the menu for which this menu item can be a trigger. called from {@link DropdownFocusHandlerService}\n     */\n    closeMenu?: () => void;\n}\n\n/**\n * Component used for displaying nested drop downs\n */\n@Component({\n    selector: \"vcd-dropdown\",\n    templateUrl: \"dropdown.component.html\",\n    styleUrls: [\"./dropdown.component.scss\"],\n    providers: [DROPDOWN_FOCUS_HANDLER_PROVIDER],\n})\nexport class DropdownComponent implements AfterViewInit {\n    private _dropdownItemContents: TextIcon = TextIcon.TEXT;\n\n    private _items: ActionItem<unknown, unknown>[];\n\n    /**\n     * To access the private key lastAvailabilityValue from the template\n     */\n    lastAvailabilityValue = lastAvailabilityValue;\n    /**\n     * Decides what goes into the action buttons\n     * @param textIcon An enum that describes the possible ways to display the button title\n     */\n    @Input() set dropdownItemContents(textIcon: TextIcon) {\n        this._dropdownItemContents = textIcon;\n        this.shouldShowIcon = (TextIcon.ICON & textIcon) === TextIcon.ICON;\n        this.shouldShowText = (TextIcon.TEXT & textIcon) === TextIcon.TEXT;\n        this.shouldShowTooltip = textIcon === TextIcon.ICON;\n    }\n    get dropdownItemContents(): TextIcon {\n        return this._dropdownItemContents;\n    }\n    /**\n     * Nested list of dropdown objects\n     */\n    @Input() set items(items: ActionItem<unknown, unknown>[]) {\n        this._items = items;\n    }\n    get items(): ActionItem<unknown, unknown>[] {\n        return this._items;\n    }\n\n    @Output() dropdownMenuUpdated = new EventEmitter<{ menu: HTMLElement }>();\n\n    constructor(\n        @Optional() @SkipSelf() private parentVcdDropdown: DropdownComponent,\n        private focusHandler: DropdownFocusHandlerService\n    ) {}\n\n    @ViewChild(ClrDropdownMenu)\n    set clrDropdownMenu(val: ClrDropdownMenu) {\n        this._clrDropdownMenu = val;\n        if (!val) {\n            return;\n        }\n        // Disable Claritys focus handling logic\n        this._clrDropdownMenu.items.reset([]);\n        this._clrDropdownMenu.items.notifyOnChanges();\n    }\n    private _clrDropdownMenu: ClrDropdownMenu;\n\n    @ViewChild(ClrDropdownTrigger, { read: ElementRef, static: true })\n    set dropdownTriggerEl(val: ElementRef<HTMLElement>) {\n        this._dropdownTriggerEl = val ? val.nativeElement : null;\n    }\n    _dropdownTriggerEl: HTMLElement;\n\n    @ViewChild(ClrDropdownMenu, { read: ElementRef, static: false })\n    set clrDropdownMenuEl(val: ElementRef<HTMLElement>) {\n        if (!val) {\n            this.dropdownMenuUpdated.emit(null);\n            return;\n        }\n        this._clrDropdownMenuEl = val.nativeElement;\n        this.dropdownMenuUpdated.emit({\n            menu: this._clrDropdownMenuEl,\n        });\n    }\n    _clrDropdownMenuEl: HTMLElement;\n    /**\n     * If a icon should be displayed inside contextual buttons\n     */\n    shouldShowIcon: boolean = (TextIcon.ICON & this.dropdownItemContents) === TextIcon.ICON;\n\n    /**\n     * If a text should be displayed inside contextual buttons\n     */\n    shouldShowText: boolean = (TextIcon.TEXT & this.dropdownItemContents) === TextIcon.TEXT;\n\n    /**\n     * If the contextual buttons with icons should have a tooltip\n     */\n    shouldShowTooltip: boolean = this.dropdownItemContents === TextIcon.ICON;\n\n    /**\n     * Default configuration for vcdShowClippedText directive\n     */\n    clipTextConfig: CliptextConfig = {\n        mouseoutDelay: 0,\n        size: TooltipSize.md,\n        disabled: false,\n    };\n\n    /**\n     * Text Content of the button that opens the root dropdown when clicked\n     */\n    @Input() dropdownTriggerBtnTxt = \"vcd.cc.action.menu.other.actions\";\n\n    /**\n     * Icon shown in the button that opens the root dropdown when clicked\n     */\n    @Input() dropdownTriggerBtnIcon = \"ellipsis-horizontal\";\n\n    /**\n     * The position the root dropdown with respect to root dropdown trigger button. Refer to {@link clrPosition} for it's values\n     */\n    @Input() dropdownPosition: string;\n\n    /**\n     * The position of all the nested dropdowns {@link clrPosition}. Default is 'bottom-left'\n     */\n    @Input() nestedDropdownPosition = \"right-top\";\n\n    /**\n     * Argument for {@link ActionItem.handler} and {@link ActionItem.disabled} methods. Please refer to\n     * {@link ActionMenuComponent.selectedEntities}\n     */\n    @Input() selectedEntities: unknown[];\n\n    /**\n     * Used for displaying different button contents in the root dropdown trigger button vs nested dropdown trigger button\n     */\n    @Input() isNestedDropdown = false;\n\n    @Input() isDropdownDisabled: boolean;\n\n    /**\n     * Css class name added to the dropdown trigger buttons\n     */\n    @Input() dropdownTriggerButtonClassName: string;\n\n    /**\n     * To toggle open and close states when hovered over\n     */\n    @ViewChild(ClrDropdown) clrDropdown: ClrDropdown;\n\n    /**\n     * The button that opens this dropdown when clicked. Used for preventing the clarity frameworks click handler logic\n     * from executing\n     */\n    @ViewChild(ClrDropdownTrigger) clrDropdownTrigger: ClrDropdownTrigger;\n\n    /**\n     * List of nested dropdown children that belong to this dropdown. Used to close when a different child in this menu list is\n     * hovered over\n     */\n    @ViewChildren(forwardRef(() => DropdownComponent)) vcdDropdownChildren: QueryList<DropdownComponent>;\n\n    /**\n     * Used for deciding if the availability has to be passed through an Async pipe in the template\n     */\n    isObservable = isObservable;\n\n    private hideTimeout: number;\n\n    /**\n     * The {@link ngForTrackBy} method used for rendering of a dropdown actions or for rendering nested drop downs\n     * NOTE: Without this, nested drop downs don't get rendered on the screen\n     */\n    @Input() trackByFunction: TrackByFunction<ActionItem<unknown, unknown>> = (index, item) => item.textKey;\n\n    /**\n     * Nested menus are toggled using the mouseover and mouseout events instead of mouse clicks. So the claritys\n     * click handler which conflicts with that is prevented from executing\n     */\n    ngAfterViewInit(): void {\n        if (this.parentVcdDropdown) {\n            this.clrDropdownTrigger.onDropdownTriggerClick = (event: Event) => {\n                event.stopPropagation();\n            };\n        }\n    }\n\n    /**\n     * To check in the HTML, if a dropdown item of separator type should be used to add a separator item in the dropdown\n     * This is required because,\n     * 1. As each item decides its own availability, some groups may become empty and we collapse separators before them\n     * 2. A separator is not required if it is the first item in the dropdown list\n     * @param index Position of the dropdown item in the dropdown list\n     * @param currentItem The current item in the list that is being iterated over\n     */\n    shouldRenderAsSeparator(index: number, currentItem: ActionItem<unknown, unknown>): boolean {\n        const nextItem = this.items[index + 1];\n        return index > 0 && currentItem.isSeparator && !!nextItem && !nextItem.isSeparator;\n    }\n\n    /**\n     * Handles the mouseover events on this dropdown's children that are of {@link #DROPDOWN_ITEM_SELECTOR} and\n     * {@link #NESTED_DROPDOWN_TRIGGER_SELECTOR} type. When mouse is hovered on a child of type...\n     * - DROPDOWN_ITEM_SELECTOR: Any open children of dropdown type have to be closed. This is because, user will always not mouse out of\n     * a nested dropdown host(<vcd-dropdown>) to trigger the close event. He can move the mouse from nested dropdown's item to this\n     * dropdown's item directly\n     * - NESTED_DROPDOWN_TRIGGER_SELECTOR: Any open children of parent dropdown have to be closed and this dropdown has to be opened. We ask\n     * the parent to close its children because, the mouse over events are not propagated upwards when hovered over a child of nested\n     * dropdown type\n     */\n    @HostListener(\"mouseover\", [\"$event\"])\n    onMouseOver(event: Event): void {\n        event.stopPropagation();\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n        }\n        const target = event.target as Element;\n        if (target.matches(DROPDOWN_ITEM_SELECTOR)) {\n            this.closeOpenVcdDropdownChildren();\n        }\n        if (target.matches(NESTED_DROPDOWN_TRIGGER_SELECTOR)) {\n            if (this.parentVcdDropdown) {\n                this.parentVcdDropdown.closeOpenVcdDropdownChildren();\n            }\n            this.clrDropdown.toggleService.open = true;\n        }\n    }\n\n    /**\n     * Handles the mouseout events on this dropdown's children that are of {@link #NESTED_DROPDOWN_TRIGGER_SELECTOR} type\n     */\n    @HostListener(\"mouseout\", [\"$event\"])\n    onMouseOut(event: Event): void {\n        event.stopPropagation();\n        const target = event.target as Element;\n        if (target.matches(NESTED_DROPDOWN_TRIGGER_SELECTOR)) {\n            this.hideTimeout = window.setTimeout(\n                () => (this.clrDropdown.toggleService.open = false),\n                NESTED_MENU_HIDE_DELAY\n            );\n        }\n    }\n\n    private closeOpenVcdDropdownChildren(): void {\n        this.vcdDropdownChildren\n            .filter((vcdDropdown) => vcdDropdown.clrDropdown.toggleService.open)\n            .forEach((vcdDropdown) => (vcdDropdown.clrDropdown.toggleService.open = false));\n    }\n\n    /**\n     * When space or enter key is pressed on the focused dropdown menu item, it has to be clicked\n     * @param event Space or Enter key press event\n     */\n    onDropdownItemActivated(event: Event): void {\n        event.stopPropagation();\n        // We need to dispatch a click event instead of just calling the click handler because, Clarity listens to a\n        // click event to close the menu after an item is activated\n        event.target.dispatchEvent(new Event(\"click\"));\n    }\n\n    /**\n     * When space or enter is pressed on a nested trigger, the nested menu has to be opened. So, we trigger a mouseover event which opens\n     * the nested menu\n     * @param event Space or Enter key press event\n     */\n    onDropdownTriggerActivated(event: Event): void {\n        // For the root dropdown, it is already being handled by Clarity\n        if (!this.parentVcdDropdown) {\n            return;\n        }\n        event.stopPropagation();\n        event.target.dispatchEvent(\n            new MouseEvent(\"mouseover\", {\n                view: window,\n                bubbles: true,\n                cancelable: true,\n            })\n        );\n    }\n\n    /**\n     * We use [clrDisabled] instead of [disabled] to show that a dropdown item is disabled. However, it doesn't prevent the item from\n     * getting activated when it is clicked. So, we make sure the action is not disabled before clicking it\n     */\n    onItemClicked(item: ActionItem<any, any>): void {\n        if (this.isItemDisabled(item)) {\n            return;\n        }\n        if (item.handler) {\n            item.handler(this.selectedEntities, item.handlerData);\n        }\n    }\n\n    /**\n     * To visually disable a displayed action\n     */\n    isItemDisabled(item: ActionItem<any, any>): boolean {\n        return (CommonUtil.isFunction(item.disabled) ? item.disabled(this.selectedEntities) : item.disabled) as boolean;\n    }\n\n    /**\n     * This function evaluates the item's availability and defaults to true.\n     *\n     * The action-menu.component.ts passes ActionItemInternal to this component,\n     * so the availability property can be a function, observable or boolean.\n     */\n    public isItemAvailable(item: ActionItem<any, any> | (ActionItem<any, any> & { available: boolean })): boolean {\n        if (isObservable(item.availability)) {\n            return item[lastAvailabilityValue];\n        }\n        if (typeof item.availability === \"boolean\") {\n            return item.availability;\n        }\n        if (CommonUtil.isFunction(item.availability)) {\n            return this.selectedEntities?.length > 0 && item.availability(this.selectedEntities);\n        }\n\n        return true;\n    }\n\n    /**\n     * When an esc key is pressed on a dropdown item, the behavior should be same as pressing left arrow key on the item. This is\n     * being handled here instead of inside the {@link DropdownFocusHandlerService} because, the escape event is being absorned by\n     * Claritys focus handling logic before it reaches the service.\n     */\n    onDropdownEscPressed(event: Event): void {\n        event.stopPropagation();\n        this.focusHandler.escapePressed();\n    }\n}\n\n/**\n * Added on to vcd-dropdown component to link menu items of the dropdown on which this directive is added. each item is linked to its\n * neighbors in the 4 directions. It then uses the {@link DropdownFocusHandlerService} to move the DOM focus between the menu items.\n */\n@Directive({\n    selector: \"vcd-dropdown[vcdDropdownFocusHandler]\",\n    providers: [SubscriptionTracker],\n})\nexport class DropdownFocusHandlerDirective implements AfterViewInit, OnDestroy {\n    constructor(\n        @Optional() @SkipSelf() private parentVcdDropdown: DropdownComponent,\n        @Optional() @SkipSelf() private parentFocusHandler: DropdownFocusHandlerDirective,\n        @Host() private hostVcdDropdown: DropdownComponent,\n        private focusHandlerService: DropdownFocusHandlerService,\n        private renderer: Renderer2,\n        @Self() private subscriptionTracker: SubscriptionTracker\n    ) {}\n\n    /**\n     * List of focusable menu items with their neighbors in 4 directions.\n     */\n    menuItems: MenuItem[];\n    /**\n     * The menu item which can toggle this menu. This can be the root dropdown trigger or nested menu trigger\n     */\n    private menuTrigger: MenuItem;\n    private dropdownTriggerEl: HTMLElement;\n    private clrDropdownMenuEl: HTMLElement;\n    private isRootDropdown = !this.parentVcdDropdown;\n    private timeoutId: number;\n    private unlistenRightArrowKeyPress: (...argArray: any[]) => any;\n\n    /**\n     * After a dropdown menu is opened, it creates {@link MenuItem} for each of the menu items along with their trigger menu item and links\n     * them. It also then moves the focus to first item in the opened menu list.\n     */\n    ngAfterViewInit(): void {\n        this.dropdownTriggerEl = this.hostVcdDropdown._dropdownTriggerEl;\n        this.listenToRightArrowKeyPressOnNestedTrigger();\n\n        this.subscriptionTracker.subscribe(this.hostVcdDropdown.dropdownMenuUpdated, (dropdown) => {\n            if (!dropdown) {\n                this.reset();\n                return;\n            }\n            this.clrDropdownMenuEl = dropdown.menu;\n            // We have to wait till the dropdown is opened for getting the menus trigger because, in case of a nested menu, the trigger is\n            // obtained from parent menus menuItems and they are not initialized even if we wait till the ngAfterViewInit hook\n            this.menuTrigger = this.isRootDropdown ? this.rootMenuTrigger : this.nestedMenuTrigger;\n            this.registerRootMenuContainer();\n            this.linkMenuItems();\n            this.moveFocusToFirstItem();\n        });\n    }\n\n    /**\n     * Sometimes when the right arrow key is pressed on a nested menu trigger, the event is propagating to sibling nested menu triggers and\n     * the event handlers attached to the menu triggers by clarity to toggle the menus are being invoked. Because of this, pressing right\n     * arrow on a nested menu is opening other sibling menus as well\n     */\n    private listenToRightArrowKeyPressOnNestedTrigger(): void {\n        if (this.isRootDropdown) {\n            return;\n        }\n        this.unlistenRightArrowKeyPress = this.renderer.listen(\n            this.dropdownTriggerEl,\n            \"keydown.arrowright\",\n            (event: Event) => event.stopPropagation()\n        );\n    }\n\n    private reset(): void {\n        if (this.isRootDropdown) {\n            this.focusHandlerService.unlistenFuncs.forEach((unlisten) => unlisten());\n        }\n        this.menuTrigger = null;\n        this.menuItems = null;\n    }\n\n    ngOnDestroy(): void {\n        if (this.unlistenRightArrowKeyPress) {\n            this.unlistenRightArrowKeyPress();\n        }\n    }\n\n    private registerRootMenuContainer(): void {\n        if (this.isRootDropdown) {\n            const rootMenuContainer = this.clrDropdownMenuEl;\n            this.focusHandlerService.listenToArrowKeys(rootMenuContainer);\n        }\n    }\n\n    private moveFocusToFirstItem(): void {\n        this.focusHandlerService.moveFocusTo(this.menuTrigger);\n        // After the menu is opened, the ClrDropdownMenu wouldn't be attached to the DOM until the next change detection cycle.\n        // So setTimeout is the only way to wait for the ClrDropdownMenu to be ready to move focus to first item.\n        this.timeoutId = window.setTimeout(() => {\n            if (this.parentVcdDropdown) {\n                this.focusHandlerService.moveFocus(Direction.RIGHT);\n            } else {\n                this.focusHandlerService.moveFocus(Direction.DOWN);\n            }\n            window.clearTimeout(this.timeoutId);\n        });\n    }\n\n    private getDropdownItemElement(item: Element): HTMLElement {\n        // We only need the underlying button that opens the nested dropdown as that is the activatable/focusable item\n        return (\n            item.matches(ActivatableMenuItemType.BUTTON) ? item : item.querySelector(NESTED_DROPDOWN_TRIGGER)\n        ) as HTMLElement;\n    }\n\n    private linkMenuItems(): void {\n        const menuChildren: Element[] = Array.from(this.clrDropdownMenuEl.children);\n        this.menuItems = menuChildren\n            .filter(\n                (child) =>\n                    child.matches(ActivatableMenuItemType.BUTTON) ||\n                    child.matches(ActivatableMenuItemType.NESTED_VCD_DROPDOWN)\n            )\n            .map((child) => ({\n                element: this.getDropdownItemElement(child),\n                left: this.menuTrigger,\n            }));\n        this.linkVertical();\n        // Lint to menu trigger\n        if (this.isRootDropdown) {\n            this.menuTrigger.down = this.menuItems[0];\n        } else {\n            // If there is a parent dropdown, We have to link these menu items to their trigger in the parent dropdown\n            this.menuTrigger.right = this.menuItems[0];\n        }\n    }\n\n    private closeVcdDropdown = (): void => {\n        this.hostVcdDropdown.clrDropdown.toggleService.open = false;\n    };\n\n    private get rootMenuTrigger(): MenuItem {\n        return {\n            element: this.dropdownTriggerEl,\n            closeMenu: this.closeVcdDropdown,\n        };\n    }\n\n    private get nestedMenuTrigger(): MenuItem {\n        const menuTrigger = this.parentFocusHandler.menuItems.find((item) => {\n            return Object.is(item.element.innerText, this.dropdownTriggerEl.innerText);\n        });\n        menuTrigger.closeMenu = this.closeVcdDropdown;\n        return menuTrigger;\n    }\n\n    private linkVertical(): void {\n        this.menuItems.forEach((menuItem: MenuItem, index: number) => {\n            if (index > 0) {\n                menuItem.up = this.menuItems[index - 1];\n            }\n            if (index < this.menuItems.length - 1) {\n                menuItem.down = this.menuItems[index + 1];\n            }\n        });\n        if (this.menuItems.length > 1) {\n            this.menuItems[0].up = this.menuItems[this.menuItems.length - 1];\n            this.menuItems[this.menuItems.length - 1].down = this.menuItems[0];\n        }\n    }\n}\n","<clr-dropdown vcdDynamicDropdown class=\"nested-dropdown\">\n    <button\n        [ngClass]=\"[\n            dropdownTriggerBtnTxt ? 'btn btn-link' : '',\n            !isNestedDropdown ? 'first-dropdown-toggle' : '',\n            dropdownTriggerButtonClassName ? dropdownTriggerButtonClassName : ''\n        ]\"\n        clrDropdownTrigger\n        [vcdShowClippedText]=\"clipTextConfig\"\n        [disabled]=\"isDropdownDisabled\"\n        (keydown.enter)=\"onDropdownTriggerActivated($event)\"\n        (keydown.space)=\"onDropdownTriggerActivated($event)\"\n        (keydown.escape)=\"onDropdownEscPressed($event)\"\n    >\n        <ng-container *ngIf=\"dropdownTriggerBtnTxt\">\n            {{ dropdownTriggerBtnTxt }}\n            <cds-icon *ngIf=\"!isNestedDropdown\" shape=\"caret\" direction=\"down\"></cds-icon>\n        </ng-container>\n        <cds-icon *ngIf=\"!dropdownTriggerBtnTxt\" [attr.shape]=\"dropdownTriggerBtnIcon\"></cds-icon>\n    </button>\n\n    <ng-container *ngIf=\"!isDropdownDisabled\">\n        <clr-dropdown-menu\n            class=\"nested-dropdown-menu\"\n            clrPosition=\"{{ isNestedDropdown ? nestedDropdownPosition : dropdownPosition }}\"\n            *clrIfOpen\n        >\n            <ng-container *ngFor=\"let item of items; let i = index; trackBy: trackByFunction\">\n                <div\n                    *ngIf=\"shouldRenderAsSeparator(i, item)\"\n                    class=\"dropdown-divider\"\n                    role=\"separator\"\n                    aria-hidden=\"true\"\n                ></div>\n\n                <ng-container *ngIf=\"!item.isSeparator && item.children && item.children.length\">\n                    <vcd-dropdown\n                        vcdDropdownFocusHandler\n                        [items]=\"item.children\"\n                        [selectedEntities]=\"selectedEntities\"\n                        [dropdownTriggerBtnTxt]=\"\n                            item.isTranslatable === false ? item.textKey : (item.textKey | translate)\n                        \"\n                        [dropdownTriggerButtonClassName]=\"item.class\"\n                        [nestedDropdownPosition]=\"nestedDropdownPosition\"\n                        [isNestedDropdown]=\"true\"\n                        [trackByFunction]=\"trackByFunction\"\n                        [dropdownItemContents]=\"dropdownItemContents\"\n                    ></vcd-dropdown>\n                </ng-container>\n\n                <ng-container *ngIf=\"!item.isSeparator && !item.children\">\n                    <ng-template\n                        *ngTemplateOutlet=\"\n                            isObservable(item.availability) ? obsTmpl : actionButtonTmpl;\n                            context: { $implicit: item }\n                        \"\n                    ></ng-template>\n                </ng-container>\n\n                <!--\n                TODO:\n                We use lastAvailabilityValue here but this component doesn't set this field on its items so\n                items with availability Observables probably won't be displayed.\n                We should refactor this component to handle those items similarly to how\n                action-menu.component.ts does.\n                -->\n                <ng-template #obsTmpl let-item>\n                    <ng-template\n                        *ngIf=\"item[lastAvailabilityValue]\"\n                        [ngTemplateOutlet]=\"actionButtonTmpl\"\n                        [ngTemplateOutletContext]=\"{ $implicit: item }\"\n                    ></ng-template>\n                </ng-template>\n\n                <ng-template #actionButtonTmpl let-item>\n                    <button\n                        *ngIf=\"isItemAvailable(item)\"\n                        [ngClass]=\"[item.class ? item.class : '', shouldShowIcon ? 'btn-icon' : '', 'btn', 'btn-link']\"\n                        clrDropdownItem\n                        (click)=\"onItemClicked(item)\"\n                        (keydown.enter)=\"onDropdownItemActivated($event)\"\n                        (keydown.space)=\"onDropdownItemActivated($event)\"\n                        (keydown.escape)=\"onDropdownEscPressed($event)\"\n                        [clrDisabled]=\"isItemDisabled(item)\"\n                        [attr.data-ui]=\"item.textKey\"\n                    >\n                        <ng-container *ngIf=\"shouldShowText\">{{\n                            item.isTranslatable === false ? item.textKey : (item.textKey | translate)\n                        }}</ng-container>\n\n                        <a *ngIf=\"shouldShowIcon\" role=\"tooltip\" aria-haspopup=\"true\" class=\"tooltip tooltip-sm\">\n                            <cds-icon size=\"md\" [attr.shape]=\"item.icon\"></cds-icon>\n                            <span class=\"tooltip-content\" *ngIf=\"shouldShowTooltip\">{{\n                                item.textKey | translate\n                            }}</span>\n                        </a>\n                    </button>\n                </ng-template>\n            </ng-container>\n        </clr-dropdown-menu>\n    </ng-container>\n</clr-dropdown>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, EventEmitter, Input, OnDestroy, Output, TrackByFunction } from \"@angular/core\";\nimport { isObservable, Observable, Subscription } from \"rxjs\";\nimport {\n    ActionDisplayConfig,\n    ActionItem,\n    ActionStyling,\n    ActionType,\n    BaseActionItem,\n    TextIcon,\n} from \"../common/interfaces\";\nimport { lastAvailabilityValue } from \"../constants\";\nimport { CommonUtil } from \"../utils\";\n\n/**\n * To add default values to configs if they are not provided by the caller in the input config\n */\nexport function getDefaultActionDisplayConfig(cfg: ActionDisplayConfig = {}): ActionDisplayConfig {\n    const defaults = {\n        contextual: {\n            styling: ActionStyling.INLINE,\n            buttonContents: TextIcon.TEXT,\n        },\n        staticActionStyling: ActionStyling.INLINE,\n    };\n    return {\n        contextual: { ...defaults.contextual, ...cfg.contextual },\n        staticActionStyling: cfg.staticActionStyling || defaults.staticActionStyling,\n    };\n}\n\n/**\n * We internally convert the callbacks to booleans to avoid calling the callbacks all the time from template. However, we don't want to\n * allow callers to assign boolean variables to availability as there is no way to know when those variables can get updated from outside.\n */\ninterface ActionItemInternal<R, T> extends BaseActionItem<R, T> {\n    /**\n     * Used for determining where in the action menu this action gets displayed\n     */\n    actionType?: ActionType;\n    /**\n     * Condition whether or not the action is available.\n     */\n    availability?: Observable<boolean> | boolean;\n    /**\n     * Stores the last emitted value from availability observable of an action item. Used to show or hide that action item.\n     */\n    [lastAvailabilityValue]?: boolean;\n}\n\n/**\n * Renders actions in screens containing grids, cards and details container screens\n * R is the type of selected entity on which the action will be performed\n * T is the type of custom data passed to action handler methods\n */\n@Component({\n    selector: \"vcd-action-menu\",\n    templateUrl: \"./action-menu.component.html\",\n    styleUrls: [\"./action-menu.component.scss\"],\n})\nexport class ActionMenuComponent<R, T> implements OnDestroy {\n    /**\n     * To access the private key lastAvailabilityValue from the template\n     */\n    lastAvailabilityValue = lastAvailabilityValue;\n    /**\n     * Stores all the subscriptions of availability observables. Used for un-subscribing from subscriptions that are not needed\n     */\n    lastAvailabilitySubscriptions: Subscription[] = [];\n    /**\n     * Emits when the actions have been updated.\n     * Then one can get the actual actions from {@link staticActions} and {@link contextualActions} property.\n     */\n    @Output() actionsUpdate: EventEmitter<void> = new EventEmitter();\n\n    /**\n     * List of actions containing both static and contextual that are given by the calling component\n     */\n    @Input() set actions(actions: ActionItem<R, T>[]) {\n        actions = actions || [];\n        // Shallow equal does the job for most of the cases and currently saves a lot of calculations\n        if (this.isShallowEqual(actions, this._originalActions)) {\n            return;\n        }\n        this._originalActions = actions;\n        this.refreshActions(actions);\n    }\n\n    /**\n     * Original actions as provided to this component without any modifications\n     */\n    private _originalActions: ActionItem<R, T>[] = [];\n\n    /**\n     * Access modifier is public in order to access this property in unit tests\n     */\n    _actions: ActionItemInternal<R, T>[] = [];\n\n    private _actionDisplayConfig: ActionDisplayConfig = getDefaultActionDisplayConfig();\n    /**\n     * Display configuration of both static and contextual actions\n     * If null or undefined is passed, default config {@link _actionDisplayConfig} is used\n     */\n    @Input() set actionDisplayConfig(config: ActionDisplayConfig) {\n        this._actionDisplayConfig = getDefaultActionDisplayConfig(config || {});\n        const buttonContents = this.actionDisplayConfig.contextual.buttonContents;\n        this.shouldShowIcon = (TextIcon.ICON & buttonContents) === TextIcon.ICON;\n        this.shouldShowText = (TextIcon.TEXT & buttonContents) === TextIcon.TEXT;\n        this.shouldShowTooltip = buttonContents === TextIcon.ICON;\n        this.updateActionListsAndDisplayFlags();\n    }\n    get actionDisplayConfig(): ActionDisplayConfig {\n        return this._actionDisplayConfig;\n    }\n\n    /**\n     * Copy of actions passed with their availability call backs. This is because, when the selected entities get updated, we need to use\n     * those CBs to calculate the availability again\n     */\n    private actionsWithAvailabilityCb: ActionItem<R, T>[] = [];\n\n    /**\n     * When there are no nested actions and if all of the contextual actions are marked to be featured, there is no need to show\n     * the contextual actions dropdown in the inline actions container\n     */\n    shouldDisplayContextualActionsDropdownInline = false;\n\n    /**\n     * Text Content of the action menu dropdown trigger button. Used when {@link #actionDisplayConfig} styling is\n     * {@link ActionStyling.DROPDOWN}\n     */\n    @Input() dropdownTriggerBtnText: string = null;\n\n    /**\n     * Text Content of the action menu dropdown trigger button inside the .inline-actions-container\n     */\n    inlineDropdownTriggerBtnText = \"vcd.cc.action.menu.actions\";\n\n    /**\n     * Icon of the action menu dropdown trigger button. Used when {@link #actionDisplayConfig} styling is\n     * {@link ActionStyling.DROPDOWN}\n     */\n    @Input() dropdownTriggerBtnIcon: string = null;\n\n    /**\n     * Used for disabling the menu bar or menu dropdown\n     */\n    @Input() disabled: boolean;\n\n    /**\n     * The direction with respect to the root dropdown trigger button in which the root drop down should open\n     * {@link DropdownComponent.dropdownPosition}\n     */\n    @Input() dropdownPosition: string;\n\n    /**\n     * The direction in which the nested drop downs open. {@link DropdownComponent.nestedDropdownPosition}\n     */\n    @Input() nestedDropdownPosition = \"right-top\";\n\n    /**\n     * If a icon should be displayed inside contextual buttons\n     */\n    shouldShowIcon: boolean = (TextIcon.ICON & this.actionDisplayConfig.contextual.buttonContents) === TextIcon.ICON;\n\n    /**\n     * If a text should be displayed inside contextual buttons\n     */\n    shouldShowText: boolean = (TextIcon.TEXT & this.actionDisplayConfig.contextual.buttonContents) === TextIcon.TEXT;\n\n    /**\n     * If the contextual buttons with icons should have a tooltip\n     */\n    shouldShowTooltip: boolean = this.actionDisplayConfig.contextual.buttonContents === TextIcon.ICON;\n\n    /**\n     * Used in the html template\n     */\n    actionStyling = ActionStyling;\n\n    /**\n     * List of actions that are marked as {@link ActionType.STATIC_FEATURED} only\n     */\n    staticFeaturedActions: ActionItemInternal<R, T>[];\n\n    /**\n     * Actions that depend on selected entities and belong to main menu list. The returned list length is less than or\n     * equal to the configured featured count in {@link actionDisplayConfig}\n     */\n    contextualFeaturedActions: ActionItemInternal<R, T>[] = [];\n\n    /**\n     * All the actions that depend on selected entities\n     */\n    contextualActions: ActionItemInternal<R, T>[] = [];\n\n    get contextualActionsExternal(): ActionItem<R, T>[] {\n        return this.contextualActions as unknown as ActionItem<R, T>[];\n    }\n\n    /**\n     * List containing all the static actions. It has static featured actions in the beginning of the list followed by\n     * non-featured static actions as children of grouped action called 'vcd.cc.action.menu.all.actions'\n     */\n    staticDropdownActions: ActionItemInternal<R, T>[] | object;\n\n    /**\n     * List of only the actions that are marked as {@link ActionType.STATIC}\n     */\n    staticActions: ActionItemInternal<R, T>[];\n\n    /**\n     * To show or hide the container elements containing inline and also dropdown actions\n     */\n    shouldDisplayActionsInline: boolean;\n\n    /**\n     * To show or hide {@link ActionType.CONTEXTUAL} and {@link ActionType.CONTEXTUAL_FEATURED} actions in inline\n     * action container\n     */\n    shouldDisplayContextualActionsInline: boolean;\n\n    /**\n     * To show or hide {@link ActionType.STATIC_FEATURED} actions in inline action container\n     */\n    shouldDisplayStaticFeaturedActionsInline: boolean;\n\n    /**\n     * To show or hide {@link ActionType.STATIC} actions in inline action container\n     */\n    shouldDisplayStaticActionsInline: boolean;\n\n    /**\n     * To show or hide {@link ActionType.STATIC_FEATURED} and {@link ActionType.STATIC} actions in a dropdown\n     */\n    shouldDisplayStaticAndStaticFeaturedActionsDropdown: boolean;\n\n    /**\n     * To show or hide {@link ActionType.CONTEXTUAL} and {@link ActionType.CONTEXTUAL_FEATURED} actions in a dropdown\n     */\n    shouldDisplayContextualActionsDropdown: boolean;\n\n    /**\n     * Used for deciding if the availability has to be passed through an Async pipe in the template\n     */\n    isObservable = isObservable;\n\n    /**\n     * The list of entities selected on which contextualActions are performed. As they are also used for calculating the\n     * availability of actions, action lists are updated when the input is updated\n     * @param val Is an array in case of batch selection and is a single item for example in the case of data grids with single selection\n     */\n    @Input() set selectedEntities(val: R[] | R) {\n        if (!Array.isArray(val)) {\n            val = val ? [val] : [];\n        }\n        // Shallow equal does the job for most of the cases and currently saves a lot of calculations\n        if (this.isShallowEqual(val, this._selectedEntities)) {\n            return;\n        }\n        this._selectedEntities = val;\n        this.updateDisplayedActions();\n    }\n    private _selectedEntities: R[] = [];\n\n    /**\n     * Returns the selected entities\n     * Note: This is not a getter because its matching setter can accept an array or a single item but this method always returns an array.\n     */\n    getSelectedEntities(): R[] {\n        return this._selectedEntities;\n    }\n\n    /**\n     * The visibility of actions is dependent on their availability call back responses and in VCD application, some of the actions\n     * availability call back response is dependent on closure variables. However, we don't call those call backs every time those closure\n     * variables are updated, for example by asynchronous requests. This has a side effect of actions visibility not getting updated when\n     * those closure variables are updated. So, this convenience method is to make it clear for the user that such side effect exists and\n     * this method will re-trigger the availability call backs of actions\n     */\n    updateDisplayedActions(): void {\n        this.clearLastAvailabilitySubs();\n        this._actions = this.changeAvailabilityCallbacks(\n            this.actionsWithAvailabilityCb\n        ) as unknown as ActionItemInternal<R, T>[];\n        this.updateActionListsAndDisplayFlags();\n    }\n\n    private refreshActions(actions: ActionItem<R, T>[]): void {\n        if (!actions) {\n            return;\n        }\n        const hasNestedActions = actions.some((action) => action.children?.length > 0);\n        const shouldMarkUnmarkedActionsAsContextual =\n            hasNestedActions ||\n            this.getFlattenedActionList(actions, ActionType.CONTEXTUAL_FEATURED).some(\n                (action) => action.actionType && action.actionType === ActionType.CONTEXTUAL_FEATURED\n            );\n        this.actionsWithAvailabilityCb = this.markUnmarkedActions(actions, shouldMarkUnmarkedActionsAsContextual);\n        this.shouldDisplayContextualActionsDropdownInline =\n            hasNestedActions ||\n            this.actionsWithAvailabilityCb.some((action) => action.actionType === ActionType.CONTEXTUAL);\n        this.updateDisplayedActions();\n    }\n\n    private markUnmarkedActions(\n        actions: ActionItem<R, T>[],\n        shouldMarkUnmarkedActionsAsContextual: boolean\n    ): ActionItem<R, T>[] {\n        return actions.map((action) => {\n            const actionCopy = { ...action };\n            if (!actionCopy.actionType) {\n                actionCopy.actionType = shouldMarkUnmarkedActionsAsContextual\n                    ? ActionType.CONTEXTUAL\n                    : ActionType.CONTEXTUAL_FEATURED;\n            }\n            if (action.children) {\n                action.children = this.markUnmarkedActions(action.children, shouldMarkUnmarkedActionsAsContextual);\n            }\n            return actionCopy;\n        });\n    }\n\n    /**\n     * Executes the availability call backs and updates them to booleans. Also, Subscribes to availability of actions that are observables\n     * and adds a magic property called {@link lastAvailabilityValue} that stores the last emitted value from those observables.\n     */\n    private changeAvailabilityCallbacks(actions: ActionItem<R, T>[]): ActionItem<R, T>[] {\n        return actions.map((action) => {\n            const actionCopy: ActionItemInternal<R, T> = { ...(action as ActionItemInternal<R, T>) };\n            if (isObservable(action.availability)) {\n                this.lastAvailabilitySubscriptions.push(\n                    action.availability.subscribe((value) => {\n                        actionCopy[lastAvailabilityValue] = value;\n                    })\n                );\n            } else {\n                actionCopy.availability = this.isActionAvailable(action);\n            }\n            if (actionCopy.children) {\n                actionCopy.children = this.changeAvailabilityCallbacks(action.children);\n            }\n            return actionCopy as ActionItem<R, T>;\n        });\n    }\n\n    private clearLastAvailabilitySubs(): void {\n        this.lastAvailabilitySubscriptions.forEach((sub) => sub.unsubscribe());\n        this.lastAvailabilitySubscriptions.length = 0;\n    }\n\n    private updateActionListsAndDisplayFlags(): void {\n        this.staticActions = this.getStaticActions();\n        this.staticFeaturedActions = this.getStaticFeaturedActions();\n        this.contextualFeaturedActions = this.getContextualFeaturedActions();\n        this.contextualActions = this.getContextualActions();\n        this.staticDropdownActions = this.getStaticDropdownActions();\n        this.updateActionDisplayFlags();\n        // Emit an update that actions have been changed\n        this.actionsUpdate.emit();\n    }\n\n    private updateActionDisplayFlags(): void {\n        this.shouldDisplayActionsInline = this.getShouldDisplayActionsInline();\n        this.shouldDisplayContextualActionsInline = this.shouldDisplayContextualActions(this.actionStyling.INLINE);\n        this.shouldDisplayStaticFeaturedActionsInline = this.shouldDisplayStaticFeaturedActions(\n            this.actionStyling.INLINE\n        );\n        this.shouldDisplayStaticActionsInline = this.shouldDisplayStaticActions(this.actionStyling.INLINE);\n        this.shouldDisplayStaticAndStaticFeaturedActionsDropdown =\n            this.shouldDisplayStaticActions(this.actionStyling.DROPDOWN) ||\n            this.shouldDisplayStaticFeaturedActions(this.actionStyling.DROPDOWN);\n        this.shouldDisplayContextualActionsDropdown = this.shouldDisplayContextualActions(this.actionStyling.DROPDOWN);\n    }\n\n    /**\n     * This function evaluates the item's availability and defaults to true.\n     *\n     * The action-menu.component.ts passes ActionItemInternal to this component,\n     * so the availability property can be a function, observable or boolean.\n     */\n    private isActionAvailable(action: ActionItem<R, T> | ActionItemInternal<R, T>): boolean {\n        if (isObservable(action.availability)) {\n            return action[lastAvailabilityValue];\n        }\n        if (CommonUtil.isFunction(action.availability)) {\n            return this.getSelectedEntities().length > 0 && action.availability(this.getSelectedEntities());\n        }\n\n        return true;\n    }\n\n    private getStaticFeaturedActions(): ActionItemInternal<R, T>[] {\n        return this._actions.filter((action) => action.actionType === ActionType.STATIC_FEATURED);\n    }\n\n    private getContextualFeaturedActions(): ActionItemInternal<R, T>[] {\n        if (!this.getSelectedEntities().length) {\n            return [];\n        }\n        const flattenedFeaturedActionList = this.getFlattenedActionList(this._actions, ActionType.CONTEXTUAL_FEATURED);\n        const availableFeaturedActions = flattenedFeaturedActionList.filter(\n            (action) => action[lastAvailabilityValue] || action.availability\n        );\n        const featuredCount =\n            this.actionDisplayConfig.contextual.styling === ActionStyling.INLINE &&\n            this.actionDisplayConfig.contextual.featuredCount;\n        return featuredCount ? availableFeaturedActions.slice(0, featuredCount) : availableFeaturedActions;\n    }\n\n    private getStaticActions(): ActionItemInternal<R, T>[] {\n        return this._actions.filter((action) => action.actionType === ActionType.STATIC);\n    }\n\n    private getStaticDropdownActions(): ActionItemInternal<R, T>[] | object {\n        return this.staticFeaturedActions.concat([\n            {\n                textKey: \"vcd.cc.action.menu.other.actions\",\n                children: this.staticActions as ActionItem<R, T>[],\n            },\n        ]);\n    }\n\n    private getContextualActions(): ActionItemInternal<R, T>[] {\n        if (!this.getSelectedEntities().length) {\n            return [];\n        }\n        return this._actions.filter(\n            (action) =>\n                !action.actionType ||\n                (action.actionType !== ActionType.STATIC_FEATURED && action.actionType !== ActionType.STATIC)\n        );\n    }\n\n    /**\n     * Extracts the nested actions that are marked as featured and returns them as part of a flat list\n     */\n    private getFlattenedActionList(\n        actions: ActionItemInternal<R, T>[] | ActionItem<R, T>[],\n        actionType: ActionType\n    ): ActionItemInternal<R, T>[] {\n        let featuredActions: ActionItemInternal<R, T>[] = [];\n        actions.forEach((action) => {\n            if (action.children && action.children.length) {\n                featuredActions = featuredActions.concat(this.getFlattenedActionList(action.children, actionType));\n            } else if (action.actionType === actionType) {\n                featuredActions.push(action);\n            }\n        });\n        return featuredActions;\n    }\n\n    /**\n     * Action click handler\n     */\n    runActionHandler(action: ActionItem<R, T>): void {\n        if (this.isActionDisabled(action)) {\n            return;\n        }\n        if (action.handler) {\n            action.handler(this.getSelectedEntities(), action.handlerData);\n        }\n    }\n\n    /**\n     * To disable a displayed action\n     */\n    isActionDisabled(action: ActionItem<R, T> | ActionItemInternal<R, T>): boolean {\n        if (action.disabled == null) {\n            return false;\n        }\n        if (CommonUtil.isFunction(action.disabled)) {\n            return action.disabled(this.getSelectedEntities());\n        }\n        return action.disabled;\n    }\n\n    /**\n     * Used as {@link ngForTrackBy} input value when iterating over action lists {@link DropdownComponent.trackByFunction}\n     * Without this method as input for ngForTrackBy, the dropdown gets rendered off screen\n     */\n    actionsTrackBy: TrackByFunction<ActionItem<R, T>> = (index: number, item: ActionItem<R, T>): string => {\n        return item.textKey;\n    };\n\n    private getShouldDisplayActionsInline(): boolean {\n        return (\n            this.shouldDisplayStaticFeaturedActions(ActionStyling.INLINE) ||\n            this.shouldDisplayStaticActions(ActionStyling.INLINE) ||\n            this.shouldDisplayContextualActions(ActionStyling.INLINE)\n        );\n    }\n\n    private shouldDisplayStaticFeaturedActions(style: ActionStyling): boolean {\n        return (\n            this.staticFeaturedActions &&\n            this.staticFeaturedActions.length &&\n            this.actionDisplayConfig.staticActionStyling === style\n        );\n    }\n\n    private shouldDisplayStaticActions(style: ActionStyling): boolean {\n        return (\n            this.staticActions && this.staticActions.length && this.actionDisplayConfig.staticActionStyling === style\n        );\n    }\n\n    private shouldDisplayContextualActions(style: ActionStyling): boolean {\n        return (\n            this.getSelectedEntities().length &&\n            this.contextualActions.length &&\n            this.actionDisplayConfig.contextual.styling === style\n        );\n    }\n\n    /**\n     * Performance optimization function to do shallow comparison of two arrays.\n     * @param arr1\n     * @param arr2\n     */\n    private isShallowEqual(arr1: unknown[], arr2: unknown[]): boolean {\n        if (arr1 === arr2) {\n            return true;\n        }\n        if ((!arr1 && arr2) || (arr1 && !arr2)) {\n            return false;\n        }\n        if (arr1.length !== arr2.length) {\n            return false;\n        }\n        if (arr1.length === 0 && arr2.length === 0) {\n            return true;\n        }\n        return arr1.every((item, index) => item === arr2[index]);\n    }\n\n    ngOnDestroy(): void {\n        this.clearLastAvailabilitySubs();\n    }\n}\n","<div class=\"inline-actions-container\" *ngIf=\"shouldDisplayActionsInline\">\n    <ng-container *ngIf=\"shouldDisplayStaticFeaturedActionsInline\">\n        <ng-container *ngFor=\"let action of staticFeaturedActions; trackBy: actionsTrackBy\">\n            <ng-template\n                *ngTemplateOutlet=\"\n                    isObservable(action.availability) ? obsTmpl : actionButtonTmpl;\n                    context: { $implicit: action }\n                \"\n            ></ng-template>\n        </ng-container>\n    </ng-container>\n\n    <ng-container *ngIf=\"shouldDisplayContextualActionsInline\">\n        <ng-container *ngFor=\"let action of contextualFeaturedActions; trackBy: actionsTrackBy\">\n            <ng-template\n                *ngTemplateOutlet=\"\n                    isObservable(action.availability) ? obsTmpl : actionButtonTmpl;\n                    context: { $implicit: action }\n                \"\n            ></ng-template>\n        </ng-container>\n\n        <vcd-dropdown\n            vcdDropdownFocusHandler\n            class=\"inline-action-dropdown\"\n            *ngIf=\"shouldDisplayContextualActionsDropdownInline\"\n            [items]=\"contextualActionsExternal\"\n            [trackByFunction]=\"actionsTrackBy\"\n            [dropdownPosition]=\"dropdownPosition\"\n            [nestedDropdownPosition]=\"nestedDropdownPosition\"\n            [selectedEntities]=\"getSelectedEntities()\"\n            [dropdownTriggerBtnTxt]=\"inlineDropdownTriggerBtnText | translate\"\n            [dropdownItemContents]=\"actionDisplayConfig.contextual.buttonContents\"\n            [isDropdownDisabled]=\"disabled\"\n        ></vcd-dropdown>\n    </ng-container>\n\n    <ng-container *ngIf=\"shouldDisplayStaticActionsInline\">\n        <div class=\"static-actions-separator\"></div>\n        <ng-container *ngFor=\"let action of staticActions; trackBy: actionsTrackBy\">\n            <ng-template\n                *ngTemplateOutlet=\"\n                    isObservable(action.availability) ? obsTmpl : actionButtonTmpl;\n                    context: { $implicit: action }\n                \"\n            ></ng-template>\n        </ng-container>\n    </ng-container>\n</div>\n\n<vcd-dropdown\n    vcdDropdownFocusHandler\n    *ngIf=\"shouldDisplayStaticAndStaticFeaturedActionsDropdown\"\n    [items]=\"staticDropdownActions\"\n    [trackByFunction]=\"actionsTrackBy\"\n    [dropdownPosition]=\"dropdownPosition\"\n    [nestedDropdownPosition]=\"nestedDropdownPosition\"\n    [selectedEntities]=\"getSelectedEntities()\"\n    [dropdownTriggerBtnTxt]=\"dropdownTriggerBtnText | translate\"\n    [dropdownTriggerBtnIcon]=\"dropdownTriggerBtnIcon\"\n    [dropdownItemContents]=\"actionDisplayConfig.contextual.buttonContents\"\n    [isDropdownDisabled]=\"disabled\"\n></vcd-dropdown>\n\n<vcd-dropdown\n    vcdDropdownFocusHandler\n    *ngIf=\"shouldDisplayContextualActionsDropdown\"\n    [items]=\"contextualActions\"\n    [trackByFunction]=\"actionsTrackBy\"\n    [dropdownPosition]=\"dropdownPosition\"\n    [nestedDropdownPosition]=\"nestedDropdownPosition\"\n    [selectedEntities]=\"getSelectedEntities()\"\n    [dropdownTriggerBtnTxt]=\"dropdownTriggerBtnText | translate\"\n    [dropdownTriggerBtnIcon]=\"dropdownTriggerBtnIcon\"\n    [dropdownItemContents]=\"actionDisplayConfig.contextual.buttonContents\"\n    [isDropdownDisabled]=\"disabled\"\n></vcd-dropdown>\n\n<ng-template #obsTmpl let-action>\n    <ng-template\n        *ngIf=\"action[lastAvailabilityValue]\"\n        [ngTemplateOutlet]=\"actionButtonTmpl\"\n        [ngTemplateOutletContext]=\"{ $implicit: action }\"\n    ></ng-template>\n</ng-template>\n\n<ng-template #actionButtonTmpl let-action>\n    <button\n        *ngIf=\"action.availability\"\n        class=\"btn btn-link\"\n        [ngClass]=\"action.class\"\n        (click)=\"runActionHandler(action)\"\n        [disabled]=\"isActionDisabled(action)\"\n        [attr.data-ui]=\"action.textKey\"\n    >\n        <ng-container *ngIf=\"shouldShowText\">{{\n            action.isTranslatable === false ? action.textKey : (action.textKey | translate)\n        }}</ng-container>\n\n        <a *ngIf=\"shouldShowIcon\" role=\"tooltip\" aria-haspopup=\"true\" class=\"tooltip tooltip-sm\">\n            <cds-icon size=\"md\" [attr.shape]=\"action.icon\"></cds-icon>\n            <span class=\"tooltip-content\" *ngIf=\"shouldShowTooltip\">{{\n                action.isTranslatable === false ? action.textKey : (action.textKey | translate)\n            }}</span>\n        </a>\n    </button>\n</ng-template>\n","/*\n * Copyright 2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { CdsIconModule } from \"@cds/angular\";\nimport {\n    ClarityIcons,\n    loadChartIconSet,\n    loadCommerceIconSet,\n    loadCoreIconSet,\n    loadEssentialIconSet,\n    loadMediaIconSet,\n    loadMiniIconSet,\n    loadSocialIconSet,\n    loadTechnologyIconSet,\n    loadTextEditIconSet,\n    loadTravelIconSet,\n} from \"@cds/core/icon\";\n\n@NgModule({\n    imports: [CdsIconModule],\n    exports: [CdsIconModule],\n})\nexport class IconsModule {\n    constructor() {\n        // Add all icons from Clarity\n        loadChartIconSet();\n        loadCommerceIconSet();\n        loadCoreIconSet();\n        loadEssentialIconSet();\n        loadMediaIconSet();\n        loadMiniIconSet();\n        loadTechnologyIconSet();\n        loadSocialIconSet();\n        loadTextEditIconSet();\n        loadTravelIconSet();\n    }\n}\n","/*\n * Copyright 2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./icons.module\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { ShowClippedTextDirectiveModule } from \"../lib/directives/show-clipped-text.directive.module\";\nimport { IconsModule } from \"../lib/icons\";\nimport { DropdownFocusHandlerDirective } from \"./dropdown.component\";\nimport { DropdownComponent } from \"./dropdown.component\";\nimport { DynamicDropdownPositionDirective } from \"./dynamic-dropdown-position.directive\";\n\n@NgModule({\n    declarations: [DropdownComponent, DynamicDropdownPositionDirective, DropdownFocusHandlerDirective],\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        ClarityModule,\n        I18nModule,\n        ShowClippedTextDirectiveModule,\n        IconsModule,\n    ],\n    exports: [DropdownComponent, DynamicDropdownPositionDirective, DropdownFocusHandlerDirective],\n})\nexport class DropdownModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { DropdownModule } from \"../dropdown/dropdown.module\";\nimport { ShowClippedTextDirectiveModule } from \"../lib/directives/show-clipped-text.directive.module\";\nimport { IconsModule } from \"../lib/icons\";\nimport { ActionMenuComponent } from \"./action-menu.component\";\n\n@NgModule({\n    imports: [ClarityModule, CommonModule, I18nModule, DropdownModule, ShowClippedTextDirectiveModule, IconsModule],\n    declarations: [ActionMenuComponent],\n    providers: [],\n    exports: [ActionMenuComponent],\n})\nexport class VcdActionMenuModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./action-menu.component\";\nexport * from \"./action-menu.module\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, Input } from \"@angular/core\";\n\nconst CLARITY_HEADER_HEIGHT = 60;\n\n@Component({\n    selector: \"vcd-drawer-component\",\n    templateUrl: \"./drawer.component.html\",\n    styleUrls: [\"./drawer.component.scss\"],\n})\nexport class DrawerComponent {\n    @Input() topOffset = 0;\n    @Input() headerHeight: number = CLARITY_HEADER_HEIGHT;\n\n    get containerHeight(): string {\n        return \"calc(100vh - \" + (this.topOffset + this.headerHeight) + \"px)\";\n    }\n}\n","<div class=\"drawer-container\" [style.top]=\"topOffset + headerHeight + 'px'\">\n    <div class=\"flex-container\" #rightDrawer [style.height]=\"containerHeight\">\n        <div class=\"drawer\">\n            <ng-content></ng-content>\n        </div>\n    </div>\n</div>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { ElementRef } from \"@angular/core\";\n\nexport class DomUtil {\n    /**\n     * Scrolls view to a element so that the element becomes visible in the viewport.\n     * If a css style selector is provided then the element to scroll is the html element\n     * described by the css selector which parent is the provided element.\n     * Id a css style selector is not provided then the element to scroll is the provided\n     * element itself.\n     *\n     * @param elRef the view's element.\n     * @param classSelector the css-style selector for the element to scroll to.\n     */\n    public static scrollToElement(elRef: ElementRef, classSelector?: string): void {\n        if (!elRef || !elRef.nativeElement) {\n            return;\n        }\n        const el: HTMLElement = elRef.nativeElement as HTMLElement;\n        const elementToScroll = classSelector ? el.querySelector(classSelector) : el;\n\n        if (elementToScroll) {\n            elementToScroll.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n        }\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Injectable } from \"@angular/core\";\nimport { ReplaySubject } from \"rxjs\";\nimport { QuickSearchNestedProvider, QuickSearchProvider } from \"./quick-search.provider\";\nimport { QuickSearchResults } from \".\";\n\n/**\n * A group of search sections.\n */\nexport interface GroupedSearchSections {\n    /**\n     * The i18n key for the header.\n     */\n    headerTitle: string;\n    /**\n     * All of the sections within this section.\n     */\n    subSections: SearchSection[];\n}\n\nexport interface SearchSection {\n    provider: QuickSearchProvider;\n    result: QuickSearchResults;\n    isLoading: boolean;\n    shouldShowText: boolean;\n    hasPartialResult: PartialResult;\n    icon?: string;\n}\n\n/**\n * A filter that can be applied to quick search to filter results.\n */\nexport interface QuickSearchFilter {\n    /**\n     * The unique ID of this filter.\n     */\n    id: string;\n    /**\n     * The options that are displayed in the dropdown.\n     */\n    options: QuickSearchFilterOption[];\n    /**\n     * The text displayed on the button to open the dropdown.\n     */\n    dropdownText: string;\n    /**\n     * The i18n key for the selection bubble of this filter. Is passed one parameter {display} which is the value selected.\n     */\n    bubbleI18nKey: string;\n    /**\n     * The order of the filter when displaying the filters. The lower the order, the closer to the beginning.\n     * undefined and -1 means append\n     */\n    order?: number;\n}\n\n/**\n * Represents a possible selection option for a filter.\n */\nexport interface QuickSearchFilterOption {\n    /**\n     * The displayed title of this option.\n     */\n    display: string;\n\n    /**\n     * The key of this quick search filter option.\n     */\n    key: string;\n    /**\n     * Any optional data that is associated with this option.\n     */\n    data?: any;\n}\n\n/**\n * A filter that has a value typed in.\n */\nexport interface ActiveQuickSearchFilter extends QuickSearchFilter {\n    /**\n     * The key value of the selected option.\n     */\n    value: string;\n    /**\n     * Any date assocated with this filter option.\n     */\n    data: any;\n}\n\n/**\n * This interface describes partial search result, i.e. result that do not contain all the items that match the\n * search criteria {@see QuickSearchComponent#hasPartialResult}\n */\nexport interface PartialResult {\n    /**\n     * The number of the last item of the result\n     */\n    lastItem: number;\n\n    /**\n     * Total number of items in the result\n     */\n    totalItems: number;\n}\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class QuickSearchService {\n    private registrations: QuickSearchProvider[] = [];\n    private nestedProviders: QuickSearchNestedProvider[] = [];\n\n    private searchId = 0;\n\n    private filterValues: Map<string, QuickSearchFilterOption[]> = new Map();\n\n    /**\n     * The filters the last search was run with.\n     */\n    private lastActiveFilters: ActiveQuickSearchFilter[] = [];\n    /**\n     * The term the last search was run with.\n     */\n    private lastSearchCriteria = \"\";\n\n    /**\n     * The search sections are provided by the {@link QuickSearchService} upon opening the Quick Search.\n     * This insures that new sections based on the current context of the application may appear.\n     *\n     * The groupedSearchSections are sections that come from Nested providers and are a double deep list of results with\n     * a parent section name, and sub section names.\n     *\n     * The ungroupedSearchSections are sections that come from Search providers and are a single list of results with a section name.\n     *\n     * These two events emit when anything about the search sections changes.\n     */\n    public groupedSearchSectionChanged: ReplaySubject<GroupedSearchSections[]> = new ReplaySubject<\n        GroupedSearchSections[]\n    >();\n    public ungroupedSearchSectionChanged: ReplaySubject<SearchSection[]> = new ReplaySubject<SearchSection[]>();\n\n    private _groupedSearchSections: GroupedSearchSections[] = [];\n    private _ungroupedSearchSections: SearchSection[] = [];\n\n    /**\n     * Emits a value when any information about the filter selection changes.\n     */\n    public filterValueChanges: ReplaySubject<Map<string, QuickSearchFilterOption[]>> = new ReplaySubject<\n        Map<string, QuickSearchFilterOption[]>\n    >();\n\n    /**\n     * The current set of registered filters.\n     */\n    public filters: QuickSearchFilter[] = [];\n\n    /**\n     * If the quick search modal is pinned.\n     */\n    public isPinned = false;\n\n    /**\n     * If any section is loading.\n     */\n    public isLoading = false;\n\n    /**\n     * If all sections return no results.\n     */\n    public hasNoResults = false;\n\n    /**\n     * The total number of results of a last search\n     */\n    public resultsCount = 0;\n\n    /**\n     * Register a search provider\n     * @param provider The search provider {@link QuickSearchProvider}\n     */\n    public registerProvider(provider: QuickSearchProvider): void {\n        insertInOrder(provider, this.registrations);\n        this.updateActiveSections(this.lastActiveFilters);\n    }\n\n    /**\n     * Unregister a search provider by providing the registration id.\n     * Returns true if un-registration was done.\n     * @param provider Provider to be unregistered\n     */\n    public unregisterProvider(provider: QuickSearchProvider): boolean {\n        const index = this.registrations.findIndex((regProvider) => regProvider === provider);\n        if (index > -1) {\n            this.registrations.splice(index, 1);\n        }\n        return index > -1;\n    }\n\n    /**\n     * Registers a nested provider to search for results in quick search.\n     */\n    public registerNestedProvider(nestedProvider: QuickSearchNestedProvider): void {\n        insertInOrder(nestedProvider, this.nestedProviders);\n        this.updateActiveSections(this.lastActiveFilters);\n    }\n\n    public unregisterNestedProvider(nestedProvider: QuickSearchNestedProvider): boolean {\n        const index = this.nestedProviders.findIndex((regProvider) => regProvider === nestedProvider);\n        if (index > -1) {\n            this.nestedProviders.splice(index, 1);\n        }\n        return index > -1;\n    }\n\n    /**\n     * Get a list of all the registered search providers.\n     */\n    public getRegisteredProviders(filters?: ActiveQuickSearchFilter[]): QuickSearchProvider[] {\n        if (!filters || !filters.length) {\n            return [...this.registrations];\n        }\n        return this.registrations.filter((searchProvider) => this.providerShouldBeActive(searchProvider, filters));\n    }\n\n    /**\n     * Gives the list of currently active providers given the set of filters.\n     */\n    public getRegisteredNestedProviders(filters?: ActiveQuickSearchFilter[]): QuickSearchNestedProvider[] {\n        if (!filters || !filters.length) {\n            return [...this.nestedProviders];\n        }\n        const newNestedProviders: QuickSearchNestedProvider[] = this.nestedProviders.map((nestedProvider) => {\n            return {\n                order: nestedProvider.order,\n                sectionName: nestedProvider.sectionName,\n                children: nestedProvider.children.filter((provider) => this.providerShouldBeActive(provider, filters)),\n            };\n        });\n        return newNestedProviders.filter((provider) => provider.children.length);\n    }\n\n    /**\n     * Adds a filter to the list of registered filters. A filter can be used to filter the list of providers and/or the results from a given provider.\n     *\n     * All filters have some ID that is displayed and a list of options for their value. These options can also have associated data.\n     *\n     * A provider then must know\n     * 1. If it can respond to a given filter</li>\n     * 2. How to filter the search results given the filter</li>\n     *\n     * This means that if Filter A is present, and Provider 1 cannot respond to it, Provider 1 will not be displayed. Provider 2 must\n     * then filter its results based on the filter.\n     *\n     * If two filters of different IDs are used in the search, the filters should act like and's. If two filters of the same ID\n     * are present in the search, the filter should act like an or.\n     */\n    public registerFilter(filter: QuickSearchFilter): void {\n        insertInOrder(filter, this.filters);\n    }\n\n    /**\n     * Removes the given filterId from the list of registered filters.\n     */\n    public unregisterFilter(filterId: string): void {\n        this.filters = this.filters.filter((filter) => filter.id !== filterId);\n    }\n\n    /**\n     * Selects the given filterValue on the filter represented by the given filterId.\n     *\n     * @param clear clears the selection before setting if set to true, and defaults to true.\n     *\n     * @example selectFilter('type', 'org') selects the Organization option in the \"Type\" filter.\n     */\n    public selectFilter(filterId: string, filterValues: string[], clear: boolean = true): void {\n        const foundFilter = this.filters.find((filter) => filter.id === filterId);\n        if (!foundFilter) {\n            return;\n        }\n\n        if (clear) {\n            this.filterValues.set(filterId, []);\n        }\n\n        for (const optionKey of filterValues.filter(Boolean)) {\n            const foundOption = foundFilter.options.find((option) => option.key === optionKey);\n\n            if (foundOption === undefined) {\n                continue;\n            }\n            const isActive = this.getFilterOptionValue(filterId, optionKey);\n            if (isActive) {\n                this.filterValues.set(\n                    filterId,\n                    this.getFilterValue(filterId).filter((option) => option.key !== optionKey)\n                );\n            } else {\n                this.getFilterValue(filterId).push(foundOption);\n            }\n        }\n\n        this.filterValueChanges.next(this.filterValues);\n        this.doSearch(this.lastSearchCriteria);\n    }\n\n    /**\n     * Searches all the providers given the search term and the active filters.\n     *\n     * @param force runs the search even if the active filters and search term has not changed.\n     */\n    public async doSearch(\n        searchCriteria: string,\n        force?: boolean,\n        afterSectionLoad?: () => void\n    ): Promise<SearchSection[]> | undefined {\n        const activeFilters = this.buildActiveFilters();\n\n        // If the active filters are the same as last time and the search term has not changed\n        // We should not run a search unless force is true.\n        if (\n            this.lastActiveFilters.length === activeFilters.length &&\n            searchCriteria === this.lastSearchCriteria &&\n            !force\n        ) {\n            return undefined;\n        }\n        this.lastActiveFilters = activeFilters;\n        this.lastSearchCriteria = searchCriteria;\n        this.updateActiveSections(activeFilters);\n        this.resultsCount = 0;\n\n        // Remember which is the current search. This will help us not to show results from an old search\n        const searchId = ++this.searchId;\n\n        // Mark each sections in loading state. This flag is needed when trying to select the first item\n        // while the search is still in progress\n        const flatSections = this.getFlattenedSearchSections();\n\n        if (flatSections.length === 0) {\n            return undefined;\n        }\n\n        this.isLoading = true;\n        flatSections.forEach((searchSection) => (searchSection.isLoading = true));\n\n        // Go through the available search sections, i.e. the registered search providers and request for results\n        return Promise.all(\n            flatSections.map(async (searchSection) => {\n                let searchResult: QuickSearchResults;\n                // Only request for data if the search is not empty\n                if (searchCriteria && searchCriteria.length > 0) {\n                    const result = searchSection.provider.search(searchCriteria, activeFilters);\n\n                    // Some of the results may be provided later, so mark the section as loading\n                    if (result instanceof Promise) {\n                        searchResult = await result;\n                    } else {\n                        searchResult = result;\n                    }\n                    // Use the closure to verify that the displayed data is going to be really from the latest search\n                    if (searchId !== this.searchId) {\n                        return undefined;\n                    }\n                }\n\n                // This code will get called for each of the key strokes that gets typed during the buffer time. This means if there were 10\n                // characters typed during the de-bouncing time, this code will be called 10 times after the promise is resolved from a provider\n                // search function. However, we don't currently see any problem with that because the following code just re assigns variables\n                // with same values\n                searchSection.result = searchResult;\n                this.resultsCount += searchResult?.items?.length || 0;\n\n                searchSection.hasPartialResult = this.hasPartialResult(searchSection);\n                searchSection.isLoading = false;\n                this.hasNoResults = this.checkHasNoResults();\n                searchSection.shouldShowText = this.showSectionTitle(searchSection);\n\n                if (afterSectionLoad) {\n                    afterSectionLoad();\n                }\n                this.groupedSearchSectionChanged.next([...this._groupedSearchSections]);\n                this.ungroupedSearchSectionChanged.next([...this._ungroupedSearchSections]);\n\n                return searchSection;\n            })\n        ).finally(() => {\n            if (searchId === this.searchId) {\n                this.isLoading = false;\n            }\n        });\n    }\n\n    /**\n     * Builds an array of the currently active quick search filters.\n     */\n    private buildActiveFilters(): ActiveQuickSearchFilter[] {\n        const activeFilters: ActiveQuickSearchFilter[] = [];\n        this.filterValues.forEach((valueList, id) => {\n            valueList.forEach((value) => {\n                activeFilters.push({\n                    id,\n                    value: value.key,\n                    data: value.data,\n                } as ActiveQuickSearchFilter);\n            });\n        });\n\n        return activeFilters;\n    }\n\n    /**\n     * Updates the active search providers based on the active filters.\n     */\n    private updateActiveSections(activeFilters: ActiveQuickSearchFilter[]): void {\n        this._ungroupedSearchSections = this.getRegisteredProviders(activeFilters).map((provider) => ({\n            provider,\n            result: null,\n            isLoading: true,\n            shouldShowText: false,\n            hasPartialResult: undefined,\n            icon: provider.icon,\n        }));\n        this._groupedSearchSections = this.getRegisteredNestedProviders(activeFilters).map((section) => {\n            return {\n                headerTitle: section.sectionName,\n                subSections: section.children.map((provider) => ({\n                    provider,\n                    result: null,\n                    isLoading: true,\n                    shouldShowText: false,\n                    hasPartialResult: undefined,\n                    icon: provider.icon,\n                })),\n            };\n        });\n\n        this.groupedSearchSectionChanged.next(this._groupedSearchSections);\n        this.ungroupedSearchSectionChanged.next(this._ungroupedSearchSections);\n    }\n\n    /**\n     * Gives whether the given option on the given filter is selected.\n     */\n    private getFilterOptionValue(filterId: string, optionKey: string): boolean {\n        return !!this.getFilterValue(filterId).find((option) => option.key === optionKey);\n    }\n\n    /**\n     * Gives all the options selected for the given filter.\n     */\n    private getFilterValue(filterId: string): QuickSearchFilterOption[] {\n        if (!this.filterValues.get(filterId)) {\n            this.filterValues.set(filterId, []);\n        }\n        return this.filterValues.get(filterId);\n    }\n\n    /**\n     * Gives the search sections as a single flat list.\n     */\n    private getFlattenedSearchSections(): SearchSection[] {\n        const allSections: SearchSection[] = [];\n        // Takes the nested providers, and turns them to a single deep list of sections.\n        this._groupedSearchSections.forEach((section) => allSections.push(...section.subSections));\n        return [...this._ungroupedSearchSections, ...allSections];\n    }\n\n    /**\n     * Says if the given provider should be active given the filters selected.\n     */\n    private providerShouldBeActive(provider: QuickSearchProvider, filters: ActiveQuickSearchFilter[]): boolean {\n        const filtersGrouped = new Map<string, ActiveQuickSearchFilter[]>();\n        filters.forEach((filter) => {\n            const current = filtersGrouped.get(filter.id);\n            if (current) {\n                current.push(filter);\n            } else {\n                filtersGrouped.set(filter.id, [filter]);\n            }\n        });\n\n        return Array.from(filtersGrouped.keys()).every((key) =>\n            filtersGrouped.get(key).some((filter) => provider.canHandleFilter && provider.canHandleFilter(filter))\n        );\n    }\n\n    /**\n     * Determines if the result in this section is partial (i.e. there are more items matching the criteria which are\n     * in the current list) or it is full (the current list contains all the items matching the criteria)\n     * If the result is partial then {@link PartialResult} object is returned. If the result contains all the items\n     * then null is returned\n     * @param searchSection the section which result items is to be checked\n     */\n    private hasPartialResult(searchSection: SearchSection): PartialResult {\n        if (\n            searchSection.result?.total &&\n            searchSection.result?.items?.length &&\n            searchSection.result.items.length < searchSection.result.total\n        ) {\n            return {\n                lastItem: searchSection.result.items.length,\n                totalItems: searchSection.result.total,\n            };\n        }\n        return null;\n    }\n\n    /**\n     * Says if the title of the given search section should be shown.\n     */\n    private showSectionTitle(searchSection: SearchSection): boolean {\n        // Do not show when there is no section name\n        if (!searchSection.provider.sectionName) {\n            return false;\n        }\n\n        // Don't show when it is loading\n        if (searchSection.isLoading) {\n            return false;\n        }\n\n        // Do not show when the provider has no results\n        if (!searchSection.result?.items?.length) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Says if all providers have returned no results.\n     */\n    private checkHasNoResults(): boolean {\n        return this.getFlattenedSearchSections().every((section) => section.result?.items?.length === 0);\n    }\n}\n\nconst insertInOrder = (item: { order?: number }, orderedArray: { order?: number }[]): void => {\n    const order = typeof item.order === \"undefined\" ? -1 : item.order;\n\n    let insertIndex = -1;\n    // Determine the position of the new registration\n    if (order > -1) {\n        insertIndex = orderedArray.findIndex((fltr) => {\n            // If an item has a negative index, this means no order had been provided for that item,\n            // this means we have found the insert index\n            if (fltr.order < 0 || typeof fltr.order === \"undefined\") {\n                return true;\n            }\n\n            // If an item has a bigger order than the new one,\n            // this means we have found the insert index\n            if (order < fltr.order) {\n                return true;\n            }\n            return false;\n        });\n    }\n\n    if (insertIndex > -1) {\n        orderedArray.splice(insertIndex, 0, item);\n    } else {\n        orderedArray.push(item);\n    }\n};\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport const DataUi = {\n    modalBody: \"modal-body\",\n    searchResultSectionTitles: \"search-result-section-titles\",\n    searchResultItems: \"search-result-items\",\n    spinner: \"spinner\",\n    noResults: \"no-results\",\n    searchInput: \"search-input,\",\n    searchResultAlerts: \"search-result-alerts\",\n    filterDropdownItem: \"filter-dropdown-item\",\n    filterButton(id: string) {\n        return `filter-btn:${id}`;\n    },\n};\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n    Self,\n    ViewChild,\n} from \"@angular/core\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { combineLatest } from \"rxjs\";\nimport { DomUtil } from \"../utils/dom-util\";\nimport { SubscriptionTracker } from \"../common/subscription/subscription-tracker\";\nimport { IdGenerator } from \"../utils\";\nimport { AriaActiveDescendantService } from \"../lib/directives\";\nimport { QuickSearchResultItem } from \"./quick-search-result\";\nimport {\n    GroupedSearchSections,\n    QuickSearchFilter,\n    QuickSearchFilterOption,\n    QuickSearchService,\n    SearchSection,\n} from \"./quick-search.service\";\nimport { DataUi } from \"./quick-search.dataui\";\n\n/**\n * This interface describes the event emitted when a result item is activated,\n * i.e. its event handler has been called.\n */\nexport interface ResultActivatedEvent {\n    itemDisplayText: string;\n    sectionTitle: string;\n    eventSource: \"MouseEvent\" | \"KeyboardEvent\";\n}\n\n/**\n * The Quick Search component is inspired by the Spotlight Search in Mac OSX (cmd+space)\n * and the Search Everywhere in IntelliJ (shift+shift)\n *\n * This VCD Quick Search does not provide any search by itself. It is not also a single component\n * but rather a group of objects that work together in order to allow the developer to build a might search experience\n * for the end user.\n *\n * Basically the VCD Quick Search consists of:\n * <ul>\n *     <li>QuickSearchComponent - the visual component that you should include in your template</li>\n *     <li>{@link QuickSearchService}<a href=\"/compodoc/injectables/QuickSearchService.html\">QuickSearchService</a>\n *     - the service that you should register your own providers with</li>\n *     <li>{@link QuickSearchProvider}<a href=\"/compodoc/interfaces/QuickSearchProvider.html\">QuickSearchProvider</a>\n *     - the interface your search provider should implement.\n *     It can return either an array of {@link QuickSearchResults} or a promise for lazy loading of results</li>\n * </ul>\n *\n * QuickSearchComponent:\n *\n *    <vcd-quick-search\n *        [(open)]=\"quickSearchOpen\"\n *        [placeholder]=\"'Search ...'\"\n *    ></vcd-quick-search>\n *\n *\n * {@link QuickSearchService}:\n *\n * This service works along with the component in order to provide search results displayed. Those results are grouped\n * in sections based on the registered provider {@link QuickSearchProvider}.\n *\n * You can provide order of the search providers, hence the order of the displayed sections\n *\n * If there is just one search provider no section title is displayed.\n *\n * In case of multiple search providers the Quick Search can be configured to hide the entire section if it contains no data.\n *\n *\n * For a complete end-to-end running example please take a look at the `Examples` tab of the live-docs\n */\n@Component({\n    selector: \"vcd-quick-search\",\n    templateUrl: \"./quick-search.component.html\",\n    styleUrls: [\"./quick-search.component.scss\"],\n    providers: [\n        SubscriptionTracker,\n        AriaActiveDescendantService,\n        {\n            provide: IdGenerator,\n            useValue: new IdGenerator(\"vcd-quick-search\"),\n        },\n    ],\n})\nexport class QuickSearchComponent implements OnInit {\n    /**\n     * Placeholder for the search input. Default is empty string;\n     */\n    @Input() public placeholder: string;\n\n    /**\n     * A helper text that will be placed below the search input.\n     */\n    @Input() public helper: string;\n\n    /**\n     * This property alongside with `openChange` provide two-way binding [(open)] for controlling the visibility state\n     * of the quick search component\n     */\n    @Input()\n    public set open(open: boolean) {\n        this.handleOpen(open);\n    }\n    public get open(): boolean {\n        return this._open;\n    }\n\n    /**\n     * Visually hidden title adds dialog label for screen readers.\n     */\n    @Input()\n    public accessibilityTitle: string;\n\n    /**\n     * This method along with `open` property provide two-way binding [(open)] for controlling the visibility state\n     * of the quick search component\n     */\n    @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>(false);\n\n    /**\n     * Event dispatched when item has been activated, i.e. its event handler is called.\n     * This happens when item is clicked or 'Enter' is pressed when there is a selection.\n     */\n    @Output() resultActivated: EventEmitter<ResultActivatedEvent> = new EventEmitter<ResultActivatedEvent>();\n\n    DataUi = DataUi;\n    activeDescendantId: string;\n    resultsGridId: string = this.idGenerator.generate();\n\n    constructor(\n        public searchService: QuickSearchService,\n        public translationService: TranslationService,\n        public ariaActivedescendantService: AriaActiveDescendantService,\n        private changeDetectorRef: ChangeDetectorRef,\n        private el: ElementRef,\n        @Self() private subscriptionTracker: SubscriptionTracker,\n        private idGenerator: IdGenerator\n    ) {}\n\n    private _searchCriteria = \"\";\n\n    get searchCriteria(): string {\n        return this._searchCriteria;\n    }\n\n    set searchCriteria(value: string) {\n        this._searchCriteria = value;\n        this.doSearch();\n    }\n\n    private _open = false;\n\n    _groupedSearchSections: GroupedSearchSections[] = [];\n    _ungroupedSearchSections: SearchSection[] = [];\n\n    _filterValues: Map<string, QuickSearchFilterOption[]> = new Map();\n\n    @ViewChild(\"searchInput\", { static: false, read: ElementRef }) searchInput: ElementRef;\n\n    /**\n     * The selected result in the results section.\n     */\n    selectedItem: QuickSearchResultItem;\n\n    ngOnInit(): void {\n        this.ariaActivedescendantService.activeDescendantObservable.subscribe((id: string) => {\n            this.activeDescendantId = id;\n            this.changeDetectorRef.detectChanges();\n        });\n\n        this.subscriptionTracker.subscribe(\n            combineLatest([\n                this.searchService.groupedSearchSectionChanged,\n                this.searchService.ungroupedSearchSectionChanged,\n            ]),\n            ([grouped, ungrouped]) => {\n                this._groupedSearchSections = grouped;\n                this._ungroupedSearchSections = ungrouped;\n            }\n        );\n\n        this.subscriptionTracker.subscribe(this.searchService.filterValueChanges, (filterValues) => {\n            this._filterValues = filterValues;\n        });\n    }\n\n    itemClicked(item: QuickSearchResultItem): void {\n        this.handleItem(item, true);\n    }\n\n    onArrowDown(event: KeyboardEvent): void {\n        event.preventDefault();\n        this.selectNext(true);\n    }\n\n    onArrowUp(event: KeyboardEvent): void {\n        event.preventDefault();\n        this.selectNext(false);\n    }\n\n    onEnterKey(event): void {\n        if (!this.selectedItem) {\n            return;\n        }\n        event.preventDefault();\n        this.handleItem(this.selectedItem, false);\n    }\n\n    togglePinned(): void {\n        this.searchService.isPinned = !this.searchService.isPinned;\n        // When the pinning of the component changes, the searchInput is re-rendered. Because of this, we need to wait for\n        // Angular to re-render the searchInput before focusing it.\n        setTimeout(() => {\n            this.searchInput.nativeElement.focus();\n        });\n    }\n\n    /**\n     * Searches all the providers given the search term and the active filters.\n     *\n     * @param force runs the search even if the active filters and search term has not changed.\n     */\n    private doSearch(force?: boolean): void {\n        if (!this.open && !force) {\n            return;\n        }\n\n        this.selectedItem = null;\n        this.searchService.doSearch(this.searchCriteria, force, () => {\n            if (!this.selectedItem) {\n                this.selectFirst(true);\n            }\n        });\n    }\n\n    /**\n     * Try to select the first item in the compound search result.\n     * @param ensureFirstSectionIsLoaded if true and if the topmost section is still loading then do not select an item\n     */\n    private selectFirst(ensureFirstSectionIsLoaded: boolean): void {\n        for (const section of this.getFlattenedSearchSections()) {\n            // The section is still loading. If it was requested to ensure the loading has completed than stop\n            // the attempt to select an item or just skip it and examine the next section.\n            if (section.isLoading) {\n                if (ensureFirstSectionIsLoaded) {\n                    return;\n                }\n                continue;\n            }\n            this.selectedItem = section.result?.items[0];\n            if (this.selectedItem) {\n                break;\n            }\n        }\n        this.changeDetectorRef.detectChanges();\n    }\n\n    private selectNext(down: boolean): void {\n        // If there is no selection then just select the first available item\n        if (!this.selectedItem) {\n            this.selectFirst(false);\n            return;\n        }\n        this.selectedItem = this.genericSelectNext(\n            down,\n            this.selectedItem,\n            this.getFlattenedSearchSections().reduce((acc, v) => [...acc, ...(v.result?.items || [])], [])\n        );\n\n        if (this.selectedItem === null) {\n            this.selectFirst(false);\n        }\n        // Call the change detector otherwise the selection on the screen may not refreshed quickly enough if the\n        // user just presses and holds down the arrow key\n        this.changeDetectorRef.detectChanges();\n    }\n\n    private genericSelectNext<T, R>(down: boolean, selected: T, allResults: T[]): T | null {\n        let selectedItemIndex = allResults.indexOf(selected);\n\n        // There is a selected item but it is not one of the available ones, so just select the first from the list\n        if (selectedItemIndex < 0) {\n            selected = null;\n            this.selectFirst(false);\n            return selected;\n        }\n\n        // Determine the index of the next selection\n        if (down) {\n            if (selectedItemIndex === allResults.length - 1) {\n                selectedItemIndex = 0;\n            } else {\n                selectedItemIndex++;\n            }\n        } else {\n            if (selectedItemIndex === 0) {\n                selectedItemIndex = allResults.length - 1;\n            } else {\n                selectedItemIndex--;\n            }\n        }\n\n        selected = allResults[selectedItemIndex];\n\n        // Ensure the selected element is visible\n        DomUtil.scrollToElement(this.el, \".selected\");\n        if (selectedItemIndex === 0) {\n            DomUtil.scrollToElement(this.el, \".section-index-0-0 .search-result-section-title\");\n        }\n\n        return selected;\n    }\n\n    /**\n     * Handle showing / hiding of the Quick Search.\n     * @param open true when opening, false when closing\n     */\n    private handleOpen(open: boolean): void {\n        // Don't do anything if the state has not been changed or if the developer has not explicitly specified the state.\n        // This may happen if the template is used with uninitialized variable.\n        if (open === this._open || typeof open !== \"boolean\") {\n            return;\n        }\n\n        if (open) {\n            setTimeout(() => {\n                this.searchInput.nativeElement.focus();\n                this.searchInput.nativeElement.select();\n            }, 0);\n            this.doSearch(true);\n        }\n\n        this._open = open;\n        this.openChange.emit(this._open);\n        this.changeDetectorRef.detectChanges();\n    }\n\n    private handleItem(item: QuickSearchResultItem, clicked: boolean): void {\n        const searchSection: SearchSection = this.getFlattenedSearchSections().find(\n            (section) =>\n                !section.isLoading &&\n                section.result?.items.some((resultItem) => resultItem.displayText === item.displayText)\n        );\n        const resultActivatedEvent: ResultActivatedEvent = {\n            itemDisplayText: item.displayText,\n            sectionTitle: searchSection.provider.sectionName,\n            eventSource: clicked ? \"MouseEvent\" : \"KeyboardEvent\",\n        };\n        item.handler();\n        this.resultActivated.emit(resultActivatedEvent);\n        if (!this.searchService.isPinned) {\n            this.open = false;\n        }\n    }\n\n    private getFlattenedSearchSections(): SearchSection[] {\n        const allSections: SearchSection[] = [];\n        // Takes the nested providers, and turns them to a single deep list of sections.\n        this._groupedSearchSections.forEach((section) => allSections.push(...section.subSections));\n        return [...this._ungroupedSearchSections, ...allSections];\n    }\n\n    getFilterOptionValue(filterId: string, optionKey: string): boolean {\n        return !!this._filterValues.get(filterId)?.find((option) => option.key === optionKey);\n    }\n\n    showParentSectionTitle(parentSection: GroupedSearchSections): boolean {\n        return parentSection.subSections.some((section) => section.shouldShowText && !section.isLoading);\n    }\n\n    groupSectionTrackBy(_index: number, groupedSection: GroupedSearchSections): string {\n        return groupedSection.headerTitle;\n    }\n\n    sectionTrackBy(_index: number, searchSection: SearchSection): string {\n        return searchSection.provider.sectionName;\n    }\n\n    filterOptionTrackBy(_index: number, filterOption: QuickSearchFilterOption): string {\n        return filterOption.key;\n    }\n\n    filterTrackBy(_index: number, filterOption: QuickSearchFilter): string {\n        return filterOption.id;\n    }\n}\n","<ng-template #sectionTitle let-searchSection>\n    <div class=\"section-title-wrapper\">\n        <cds-icon *ngIf=\"searchSection.icon\" [attr.shape]=\"searchSection.icon\" size=\"md\"> </cds-icon>\n        <div *ngIf=\"searchSection.hasPartialResult; let partial; else: partial\">\n            {{\n                \"vcd.cc.quickSearch.partialResultTitle\"\n                    | translate\n                        : {\n                              title: searchSection.provider.sectionName,\n                              lastItem: partial.lastItem,\n                              totalItems: partial.totalItems\n                          }\n            }}\n        </div>\n        <ng-template #partial>\n            {{ searchSection.provider.sectionName }}\n        </ng-template>\n    </div>\n</ng-template>\n\n<ng-template #filtersSection>\n    <div class=\"filter-container\" *ngIf=\"this.searchService.filters.length > 0\">\n        <p>{{ \"vcd.cc.search.filterBy\" | translate }}</p>\n        <ng-container *ngFor=\"let filter of this.searchService.filters; trackBy: filterTrackBy\">\n            <clr-dropdown\n                [clrCloseMenuOnItemClick]=\"false\"\n                *ngIf=\"filter.options.length > 1\"\n                (keydown.arrowup)=\"$event.stopPropagation()\"\n                (keydown.arrowdown)=\"$event.stopPropagation()\"\n                (keydown.enter)=\"$event.stopPropagation()\"\n            >\n                <button\n                    class=\"dropdown-toggle btn btn-link\"\n                    type=\"button\"\n                    clrDropdownTrigger\n                    [attr.data-ui]=\"DataUi.filterButton(filter.id)\"\n                    [attr.aria-label]=\"'vcd.cc.search.filterBy.btn.label' | translate: filter.dropdownText\"\n                >\n                    {{ filter.dropdownText }}\n                    <cds-icon shape=\"caret\" direction=\"down\"></cds-icon>\n                </button>\n                <clr-dropdown-menu clrPosition=\"bottom\" *clrIfOpen #dropdownMenu>\n                    <li\n                        clrDropdownItem\n                        *ngFor=\"let option of filter.options; trackBy: filterOptionTrackBy\"\n                        (click)=\"searchService.selectFilter(filter.id, [option.key], false)\"\n                    >\n                        <clr-checkbox-wrapper class=\"column-checkbox\">\n                            <!-- eslint-disable-next-line  @angular-eslint/template/label-has-associated-control -->\n                            <input\n                                type=\"checkbox\"\n                                clrCheckbox\n                                (click)=\"$event.stopPropagation()\"\n                                [ngModel]=\"getFilterOptionValue(filter.id, option.key)\"\n                                (ngModelChange)=\"searchService.selectFilter(filter.id, [option.key], false)\"\n                                [attr.data-ui]=\"DataUi.filterDropdownItem\"\n                            />\n                            <!-- eslint-disable-next-line  @angular-eslint/template/label-has-associated-control -->\n                            <label (click)=\"$event.stopPropagation()\">{{ option.display }}</label>\n                        </clr-checkbox-wrapper>\n                    </li>\n                </clr-dropdown-menu>\n            </clr-dropdown>\n        </ng-container>\n    </div>\n    <div>\n        <ng-container *ngFor=\"let filter of this.searchService.filters; trackBy: filterTrackBy\">\n            <span\n                class=\"filter-bubble label\"\n                *ngFor=\"let option of _filterValues.get(filter.id); trackBy: filterOptionTrackBy\"\n            >\n                <span [vcdShowClippedText]=\"{ disabled: !open }\">{{\n                    filter.bubbleI18nKey | translate: { option: option.display }\n                }}</span>\n                <button\n                    type=\"button\"\n                    class=\"btn btn-icon btn-link remove-col-button\"\n                    [attr.aria-label]=\"\n                        'vcd.cc.quickSearch.removeFilter'\n                            | translate\n                                : { selectedFilter: filter.bubbleI18nKey | translate: { option: option.display } }\n                    \"\n                    (click)=\"searchService.selectFilter(filter.id, [option.key], false)\"\n                >\n                    <cds-icon shape=\"close\"> </cds-icon>\n                </button>\n            </span>\n        </ng-container>\n    </div>\n</ng-template>\n\n<ng-template let-searchSection #searchSectionTemplate>\n    <ul class=\"list-unstyled compact\" role=\"none\">\n        <li\n            class=\"search-result-item\"\n            role=\"row\"\n            *ngFor=\"let item of searchSection.result?.items; let i = index\"\n            (click)=\"itemClicked(item)\"\n            [ngClass]=\"item === selectedItem ? 'selected' : ''\"\n            [attr.data-ui]=\"DataUi.searchResultItems\"\n        >\n            <span role=\"gridcell\">\n                <button [vcdAriaActiveDescendant]=\"item === selectedItem\">\n                    {{ item.displayText }}\n                </button>\n            </span>\n        </li>\n        <li>\n            <clr-alert\n                *ngIf=\"searchSection.hasPartialResult\"\n                [clrAlertType]=\"'warning'\"\n                [clrAlertSizeSmall]=\"true\"\n                [clrAlertClosable]=\"false\"\n            >\n                <clr-alert-item [attr.data-ui]=\"DataUi.searchResultAlerts\">\n                    {{ \"vcd.cc.quickSearch.refineQuery\" | translate: { max: searchSection.result.items.length } }}\n                </clr-alert-item>\n            </clr-alert>\n        </li>\n    </ul>\n</ng-template>\n\n<ng-template #quickSearchInterior>\n    <div class=\"search-input-container\" data-ui=\"search-input-container\">\n        <div class=\"search-icon-container\">\n            <cds-icon shape=\"search\" *ngIf=\"!searchService.isLoading\"></cds-icon>\n            <clr-spinner\n                [clrSmall]=\"true\"\n                [clrInline]=\"true\"\n                [attr.data-ui]=\"DataUi.spinner\"\n                *ngIf=\"searchService.isLoading\"\n            ></clr-spinner>\n        </div>\n        <input\n            #searchInput\n            type=\"search\"\n            role=\"searchbox\"\n            class=\"clr-input\"\n            [placeholder]=\"placeholder || ''\"\n            [(ngModel)]=\"searchCriteria\"\n            [attr.data-ui]=\"DataUi.searchInput\"\n            [attr.aria-owns]=\"resultsGridId\"\n            [attr.aria-controls]=\"resultsGridId\"\n            [attr.aria-activedescendant]=\"activeDescendantId\"\n        />\n        <button\n            class=\"btn btn-link pin-button\"\n            [attr.aria-label]=\"'vcd.cc.search.pin.btn.label' | translate: accessibilityTitle\"\n            [attr.aria-pressed]=\"searchService.isPinned\"\n            (click)=\"togglePinned()\"\n        >\n            <cds-icon shape=\"pin\" size=\"md\" [attr.solid]=\"this.searchService.isPinned\"> </cds-icon>\n        </button>\n    </div>\n    <clr-control-helper class=\"input-helper\">{{ helper }}</clr-control-helper>\n    <ng-container *ngTemplateOutlet=\"filtersSection\"> </ng-container>\n    <ng-content select=\".top-of-results\"></ng-content>\n    <div class=\"search-result-container\" role=\"grid\" [attr.id]=\"resultsGridId\" *ngIf=\"searchInput.value !== ''\">\n        <div\n            class=\"no-results\"\n            role=\"row\"\n            [attr.data-ui]=\"DataUi.noResults\"\n            *ngIf=\"searchService.hasNoResults && !searchService.isLoading\"\n        >\n            <span role=\"gridcell\">\n                {{ \"vcd.cc.quickSearch.noResults\" | translate }}\n            </span>\n        </div>\n        <div\n            *ngFor=\"let searchSection of _ungroupedSearchSections; let i = index; trackBy: sectionTrackBy\"\n            class=\"search-result-section section-index-0-{{ i + 1 }}\"\n            data-ui=\"search-result-section\"\n        >\n            <div *ngIf=\"!searchSection.isLoading\" role=\"rowgroup\" [attr.aria-labelledby]=\"'ungrouped-search-' + i\">\n                <h5\n                    *ngIf=\"searchSection.shouldShowText\"\n                    class=\"search-result-section-title\"\n                    role=\"presentation\"\n                    [attr.data-ui]=\"DataUi.searchResultSectionTitles\"\n                    [attr.id]=\"'ungrouped-search-' + i\"\n                >\n                    <ng-container *ngTemplateOutlet=\"sectionTitle; context: { $implicit: searchSection }\">\n                    </ng-container>\n                </h5>\n                <ng-container *ngTemplateOutlet=\"searchSectionTemplate; context: { $implicit: searchSection }\">\n                </ng-container>\n            </div>\n        </div>\n        <div *ngFor=\"let parentSearchSection of _groupedSearchSections; let n = index; trackBy: groupSectionTrackBy\">\n            <h5\n                *ngIf=\"showParentSectionTitle(parentSearchSection)\"\n                class=\"search-result-section-title\"\n                [attr.data-ui]=\"DataUi.searchResultSectionTitles\"\n                [attr.id]=\"'grouped-search-result-' + n\"\n                role=\"presentation\"\n            >\n                {{ parentSearchSection.headerTitle }}\n            </h5>\n            <div\n                *ngFor=\"let searchSection of parentSearchSection.subSections; let i = index; trackBy: sectionTrackBy\"\n                class=\"sub-section\"\n                role=\"rowgroup\"\n                [attr.aria-labelledby]=\"'grouped-search-result-' + n + ' ' + 'grouped-search-result-section' + i\"\n            >\n                <div *ngIf=\"!searchSection.isLoading\">\n                    <p\n                        *ngIf=\"searchSection.shouldShowText\"\n                        role=\"presentation\"\n                        class=\"p2 search-result-section-title search-result-section section-index-{{ n }}-{{ i }}\"\n                        [attr.data-ui]=\"DataUi.searchResultSectionTitles\"\n                        [attr.id]=\"'grouped-search-result-section' + i\"\n                    >\n                        <ng-container *ngTemplateOutlet=\"sectionTitle; context: { $implicit: searchSection }\">\n                        </ng-container>\n                    </p>\n                    <ng-container *ngTemplateOutlet=\"searchSectionTemplate; context: { $implicit: searchSection }\">\n                    </ng-container>\n                </div>\n            </div>\n        </div>\n    </div>\n    <ng-content select=\".bottom-of-results\"></ng-content>\n    <div aria-live=\"polite\" cds-layout=\"display:screen-reader-only\">\n        <ng-container *ngIf=\"!searchService.isLoading\">\n            <ng-container *ngIf=\"searchService.resultsCount > 0; else noResultsAmount\">\n                {{ \"vcd.cc.search.results.amount\" | translate: searchService.resultsCount }}\n            </ng-container>\n            <ng-template #noResultsAmount>\n                {{ \"vcd.cc.quickSearch.noResults\" | translate }}\n            </ng-template>\n        </ng-container>\n    </div>\n</ng-template>\n\n<ng-template #drawerComponent>\n    <vcd-drawer-component\n        (keydown.arrowup)=\"onArrowUp($event)\"\n        (keydown.arrowdown)=\"onArrowDown($event)\"\n        (keydown.enter)=\"onEnterKey($event)\"\n        class=\"modal-body\"\n    >\n        <ng-container *ngTemplateOutlet=\"quickSearchInterior\"> </ng-container>\n    </vcd-drawer-component>\n</ng-template>\n\n<clr-modal\n    [(clrModalOpen)]=\"open\"\n    [clrModalStaticBackdrop]=\"false\"\n    (keydown.arrowup)=\"onArrowUp($event)\"\n    (keydown.arrowdown)=\"onArrowDown($event)\"\n    (keydown.enter)=\"onEnterKey($event)\"\n    *ngIf=\"!searchService.isPinned; else drawerComponent\"\n>\n    <h1 class=\"modal-title\">{{ accessibilityTitle }}</h1>\n    <div class=\"modal-body\" [attr.data-ui]=\"DataUi.modalBody\">\n        <ng-container *ngTemplateOutlet=\"quickSearchInterior\"> </ng-container>\n    </div>\n</clr-modal>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { ShowClippedTextDirectiveModule } from \"../lib/directives/show-clipped-text.directive.module\";\nimport { AriaActivedescendantModule } from \"../lib/directives\";\nimport { IconsModule } from \"../lib/icons\";\nimport { DrawerComponent } from \"./drawer/drawer.component\";\nimport { QuickSearchComponent } from \"./quick-search.component\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ClarityModule,\n        FormsModule,\n        ReactiveFormsModule,\n        I18nModule,\n        ShowClippedTextDirectiveModule,\n        AriaActivedescendantModule,\n        IconsModule,\n    ],\n    declarations: [QuickSearchComponent, DrawerComponent],\n    exports: [QuickSearchComponent],\n})\nexport class QuickSearchModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport interface QuickSearchResults {\n    /**\n     * Item list returned by the search\n     */\n    items: QuickSearchResultItem[];\n\n    /**\n     * The current page returned by the search\n     */\n    page?: number;\n\n    /**\n     * The current page size returned by the search\n     */\n    pageSize?: number;\n\n    /**\n     * Total number of items\n     */\n    total?: number;\n}\n\n/**\n * The interface a quick search result item should implement\n */\nexport interface QuickSearchResultItem {\n    /**\n     * The text that will be displayed in the quick search component\n     */\n    displayText: string;\n\n    /**\n     * Function that is going to be called when this item is to be handled, i.e. when the\n     * user clicks on this item or  selects it and presses the Enter key.\n     */\n    handler: () => void;\n}\n\n/**\n * The type of the quick search result which can be a promise\n */\nexport type QuickSearchResultsType = QuickSearchResults | Promise<QuickSearchResults>;\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonUtil } from \"../utils\";\nimport { QuickSearchResults, QuickSearchResultsType } from \"./quick-search-result\";\nimport { ActiveQuickSearchFilter } from \"./quick-search.service\";\n\nexport const PROVIDER_SEARCH_DEBOUNCE_TIME = 300;\n\n/**\n * A provider that contains many children in it.\n *\n * Designed to be able to group providers easily.\n */\nexport interface QuickSearchNestedProvider {\n    /**\n     * Every search provider gets displayed in a separate section. This will be used as the section header.\n     */\n    sectionName: string;\n    /**\n     * The order of the section in the quick search results. The lower the order, the closer to the beginning of the list.\n     * -1 means append\n     */\n    order: number;\n    /**\n     * The providers that should be displayed within this nested provider.\n     */\n    children: QuickSearchProvider[];\n\n    /**\n     * A custom property available throughout all the providers. Not designed for any specific scenario.\n     * Use it according to the specific needs you may have.\n     */\n    data?: unknown;\n}\n\n/**\n * The interface a search providers should implement in order to register itself with the {@link QuickSearchService}\n */\nexport interface QuickSearchProvider {\n    /**\n     * The unique ID of this provider. This can be used for applying a filter that filters by ID.\n     */\n    id?: string;\n\n    /**\n     * Every search provider gets displayed in a separate section. This will be used as the section header.\n     */\n    sectionName: string;\n\n    /**\n     * The order of the section in the quick search results. The lower the order, the closer to the beginning of the list.\n     * -1 means append\n     */\n    order: number;\n\n    /**\n     * A custom property available throughout all the providers. Not designed for any specific scenario.\n     * Use it according to the specific needs you may have.\n     */\n    data: unknown;\n\n    /**\n     * Returns an array or a promise of array of items that comply with the search criteria.\n     * @param criteria The search string provided by the user when typing in the Quick Search Component\n     */\n    search(criteria: string, activeFilters?: ActiveQuickSearchFilter[]): QuickSearchResultsType;\n\n    /**\n     * Says whether this provider can return results with the given filter applied.\n     */\n    canHandleFilter?(filter: ActiveQuickSearchFilter): boolean;\n\n    /**\n     * The icon that is displayed next to the search section title. This is the shape property put into the cds-icon.\n     */\n    icon?: string;\n}\n\nexport abstract class QuickSearchProviderDefaults implements QuickSearchProvider {\n    /**\n     * @param shouldDebounceInput Indicates if a provider has to wait for {@link PROVIDER_SEARCH_DEBOUNCE_TIME} milliseconds\n     */\n    constructor(shouldDebounceInput: boolean) {\n        if (shouldDebounceInput) {\n            this.search = CommonUtil.createBufferedPromise(this.search, this, PROVIDER_SEARCH_DEBOUNCE_TIME) as (\n                str: string\n            ) => Promise<QuickSearchResults>;\n        }\n    }\n\n    sectionName = \"\";\n    order = -1;\n    data: unknown;\n    parentSectionName?: string;\n\n    abstract search(criteria: string, activeFilters?: ActiveQuickSearchFilter[]): QuickSearchResultsType;\n\n    canHandleFilter(filter: ActiveQuickSearchFilter): boolean {\n        return filter.id === \"type\" && (this as any).id && (this as any).id.includes(filter.value);\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Injectable, OnDestroy } from \"@angular/core\";\nimport { QuickSearchNestedProvider, QuickSearchProvider } from \"./quick-search.provider\";\nimport { QuickSearchService } from \"./quick-search.service\";\n\n/**\n * Allows components to register with {@link QuickSearchService} and automatically unregister when the component is destroyed.\n *\n * Must be provided by the component itself in its `providers: [QuickSearchRegistrarService]`\n */\n@Injectable()\nexport class QuickSearchRegistrarService implements OnDestroy {\n    constructor(private quickSearchService: QuickSearchService) {}\n\n    private providers: QuickSearchProvider[] = [];\n    private sections: QuickSearchNestedProvider[] = [];\n\n    register(provider: QuickSearchProvider | QuickSearchNestedProvider): void {\n        if (this.isNestedProvider(provider)) {\n            this.sections.push(provider);\n            this.quickSearchService.registerNestedProvider(provider);\n        } else {\n            this.providers.push(provider);\n            this.quickSearchService.registerProvider(provider);\n        }\n    }\n\n    ngOnDestroy(): void {\n        for (const provider of this.providers) {\n            this.quickSearchService.unregisterProvider(provider);\n        }\n        for (const section of this.sections) {\n            this.quickSearchService.unregisterNestedProvider(section);\n        }\n    }\n\n    private isNestedProvider(a: QuickSearchProvider | QuickSearchNestedProvider): a is QuickSearchNestedProvider {\n        return (a as QuickSearchNestedProvider).children !== undefined;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { BaseWidgetObject, FindElementOptions, WidgetObjectElement } from \"@vcd/widget-object\";\nimport { DataUi } from \"./quick-search.dataui\";\n\nconst QUICK_SEARCH_CURRENT_RESULT = \".selected\";\n\n/**\n * Widget Object for Quick-Search\n */\nexport class QuickSearchWo<T> extends BaseWidgetObject<T> {\n    static tagName = \"vcd-quick-search\";\n\n    /**\n     * Returns quick-search modal body\n     */\n    getModalBody = this.factory.dataUi(DataUi.modalBody);\n\n    /**\n     * Returns user search input\n     */\n    getInput = this.factory.dataUi(DataUi.searchInput);\n\n    /**\n     * Returns the titles of all sections appearing in the search results\n     */\n    getSearchResultSectionTitles = this.factory.dataUi(DataUi.searchResultSectionTitles);\n\n    /**\n     * Returns each search result item in each section\n     */\n    getSearchResultItems = this.factory.dataUi(DataUi.searchResultItems);\n\n    /**\n     * Returns the currently selected search result item\n     */\n    getSelectedSearchResultItem = this.factory.css(QUICK_SEARCH_CURRENT_RESULT);\n\n    /**\n     * Returns the elements that indicates if the search results are still loading\n     */\n    getSpinners = this.factory.dataUi(DataUi.spinner);\n\n    /**\n     * Returns the element that shows \"No results found\" if there are no results\n     */\n    getNoResults = this.factory.dataUi(DataUi.noResults);\n\n    /**\n     * Accesses the element behind the Quick Search modal\n     */\n    getModalBackdrop = this.factory.css(\".modal-backdrop\");\n\n    /**\n     * Returns the alerts to the user about their search input\n     */\n    getSearchResultAlerts = this.factory.dataUi(DataUi.searchResultAlerts);\n\n    /**\n     * Returns the element that represents the top of the search results\n     */\n    getTopOfResults = this.factory.css(\".top-of-results\");\n\n    /**\n     * Returns the element that represents the bottom of the search results\n     */\n    getBottomOfResults = this.factory.css(\".bottom-of-results\");\n\n    getFilterButton(id: string): WidgetObjectElement<T> {\n        return this.el.get({ dataUiSelector: DataUi.filterButton(id) });\n    }\n\n    getFilterDropdownOptions(index: number): WidgetObjectElement<T> {\n        return this.el.get({ dataUiSelector: DataUi.filterDropdownItem, index });\n    }\n\n    /**\n     * Gives the icon next to each section title.\n     */\n    getTitleIcons = (options?: FindElementOptions): WidgetObjectElement<T> =>\n        this.getSearchResultSectionTitles(options).get(\"cds-icon\");\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./quick-search.module\";\nexport * from \"./quick-search-result\";\nexport * from \"./quick-search.component\";\nexport * from \"./quick-search.service\";\nexport * from \"./quick-search.provider\";\nexport * from \"./quick-search-registrar.service\";\nexport * from \"./quick-search.wo\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { TranslationService } from \"@vcd/i18n\";\nimport { isObservable } from \"rxjs\";\nimport { last, take, takeLast } from \"rxjs/operators\";\nimport { ActionItem } from \"../common/interfaces\";\nimport {\n    QuickSearchProvider,\n    QuickSearchProviderDefaults,\n    QuickSearchResultItem,\n    QuickSearchResults,\n} from \"../quick-search\";\nimport { CommonUtil } from \"../utils\";\n\nexport const DEFAULT_ACTION_SEARCH_SECTION_HEADER_PREFIX = \"vcd.cc.action.provider.section.title\";\n\nexport class ActionSearchProvider<R, T> extends QuickSearchProviderDefaults implements QuickSearchProvider {\n    set actions(actions: ActionItem<R, T>[]) {\n        this._actions = actions;\n        this.flatListOfAvailableActions = null;\n    }\n    set selectedEntities(entities: R[]) {\n        this._selectedEntities = entities;\n        this.flatListOfAvailableActions = null;\n    }\n\n    constructor(\n        private ts: TranslationService,\n        shouldDebounceInput = false\n    ) {\n        super(shouldDebounceInput);\n    }\n\n    private flatListOfAvailableActions: ActionItem<R, T>[];\n\n    /**\n     * Initialized by the calling component and is used for searching of the search criteria entered in {@link QuickSearchComponent}\n     */\n    private _actions: ActionItem<R, T>[] = [];\n\n    /**\n     * Used in {@link isActionDisabled} to calculate disabled state of actions  and also in action handler\n     */\n    private _selectedEntities: R[] = [];\n\n    private resolveIsReadyToSearch: (value?: null) => void;\n    private isReadyToSearchPromise: Promise<null> = this.readyToSearchPromiseFactory();\n    private shouldWait = false;\n\n    /**\n     * Pause searching for actions. For example, Call this method when searching for actions has to be paused until\n     * some data has to be fetched asynchronously\n     */\n    pause(): void {\n        this.shouldWait = true;\n    }\n\n    /**\n     * Resume searching for actions. To unpause searching for actions functionality that might have been paused earlier\n     * using pause method above\n     */\n    unPause(): void {\n        this.shouldWait = false;\n        this.resolveIsReadyToSearch();\n        this.isReadyToSearchPromise = this.readyToSearchPromiseFactory();\n    }\n\n    override canHandleFilter(): boolean {\n        return true;\n    }\n\n    private readyToSearchPromiseFactory(): Promise<null> {\n        return new Promise<null>((resolve, reject) => {\n            this.resolveIsReadyToSearch = resolve;\n        });\n    }\n\n    /**\n     * Searches through nested actions and finds all the actions that match with entered search text on the\n     * {@link QuickSearchComponent}\n     */\n    async search(criteria: string): Promise<QuickSearchResults> {\n        if (this.shouldWait) {\n            await this.isReadyToSearchPromise;\n        }\n\n        if (!criteria) {\n            return { items: [] };\n        }\n\n        if (this.flatListOfAvailableActions == null) {\n            this.flatListOfAvailableActions = await this.getFlatListOfAvailableActions(this._actions);\n        }\n        return { items: this.getActions(criteria.toLowerCase()) };\n    }\n\n    private getActions(searchCriteria: string): QuickSearchResultItem[] {\n        return this.flatListOfAvailableActions\n            .filter((action) => action.textKey?.toLowerCase().includes(searchCriteria))\n            .map((action) => ({\n                displayText: action.textKey,\n                handler: () => action.handler(this._selectedEntities, action.handlerData),\n            }));\n    }\n\n    private async getFlatListOfAvailableActions(actions: ActionItem<R, T>[]): Promise<ActionItem<R, T>[]> {\n        let flatActionList = [];\n        for (const currentAction of actions) {\n            if (currentAction?.children) {\n                if (currentAction.children.length > 0) {\n                    flatActionList = flatActionList.concat(\n                        await this.getFlatListOfAvailableActions(currentAction.children)\n                    );\n                }\n                continue;\n            }\n            if (await this.isActionAvailable(currentAction)) {\n                const textKey =\n                    currentAction.isTranslatable === false\n                        ? currentAction.textKey\n                        : this.ts.translate(currentAction.textKey);\n                flatActionList.push({ ...currentAction, textKey });\n            }\n        }\n        return flatActionList;\n    }\n\n    private async isActionAvailable(action: ActionItem<R, T>): Promise<boolean> {\n        if (action.isSeparator) {\n            return false;\n        }\n        let actionAvailability;\n        if (action.availability == null) {\n            actionAvailability = true;\n        } else if (typeof action.availability === \"boolean\") {\n            actionAvailability = action.availability;\n        } else if (isObservable(action.availability)) {\n            actionAvailability = await action.availability.pipe(take(1)).toPromise();\n        } else {\n            actionAvailability = action.availability(this._selectedEntities);\n        }\n        return actionAvailability && !this.isActionDisabled(action);\n    }\n\n    private isActionDisabled(action: ActionItem<R, T>): boolean {\n        return CommonUtil.isFunction(action.disabled) ? action.disabled(this._selectedEntities) : action.disabled;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./action-search.provider\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nconst NO_ERROR_VALUE = null;\n\n/**\n * Component that displays the error message only if a non empty errorMessage is passed in\n */\n@Component({\n    selector: \"vcd-error-banner\",\n    templateUrl: \"./error-banner.component.html\",\n    styleUrls: [\"./error-banner.component.scss\"],\n})\nexport class ErrorBannerComponent {\n    private _errorMessage: string | null = NO_ERROR_VALUE;\n\n    closed = true;\n\n    /**\n     * Emits events when the error banner is dismissed.\n     */\n    @Output() dismissed = new EventEmitter<void>();\n\n    /**\n     * Two-way bound errorMessage, will be cleared when the user dismisses the alert\n     */\n    @Input() get errorMessage(): string | null {\n        return this._errorMessage;\n    }\n\n    /**\n     * Sets clr-alert type\n     */\n    @Input() alertType: \"danger\" | \"warning\" | \"info\" | \"success\" = \"danger\";\n\n    /**\n     * Marks clr-alert as closable or not\n     */\n    @Input() alertClosable = true;\n\n    /**\n     * Sets the error message displayed by this error banner.\n     */\n    set errorMessage(val: string | null) {\n        this._errorMessage = val || NO_ERROR_VALUE;\n        this.closed = !val;\n    }\n\n    /**\n     * Emits an event when the error message is changed.\n     */\n    @Output() errorMessageChange = new EventEmitter<string | null>();\n\n    /**\n     * Clears the error message when the alert is closed.\n     */\n    onAlertClosedChange(closed: boolean): void {\n        if (closed) {\n            if (this._errorMessage) {\n                this._errorMessage = NO_ERROR_VALUE;\n                this.errorMessageChange.emit(this._errorMessage);\n            }\n            this.dismissed.next();\n        }\n    }\n}\n","<clr-alert\n    [(clrAlertClosed)]=\"closed\"\n    [clrAlertType]=\"alertType\"\n    [clrAlertClosable]=\"alertClosable\"\n    (clrAlertClosedChange)=\"onAlertClosedChange($event)\"\n    [attr.role]=\"alertType === 'danger' ? 'alert' : 'status'\"\n>\n    <div class=\"alert-item\">\n        <span class=\"alert-text\">{{ errorMessage }}</span>\n    </div>\n</clr-alert>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { ErrorBannerComponent } from \"./error-banner.component\";\n\n@NgModule({\n    declarations: [ErrorBannerComponent],\n    imports: [CommonModule, ClarityModule, I18nModule],\n    exports: [ErrorBannerComponent],\n})\nexport class VcdErrorBannerModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, Input } from \"@angular/core\";\n\nexport enum SIZES {\n    sm = \"sm\",\n    md = \"md\",\n    lg = \"lg\",\n}\nexport type SpinnerSize = keyof typeof SIZES;\n\n/**\n * Loading indicator for blocking modal dialogs while loading.\n */\n@Component({\n    selector: \"vcd-loading-indicator\",\n    templateUrl: \"loading-indicator.component.html\",\n    styleUrls: [\"loading-indicator.component.scss\"],\n})\nexport class LoadingIndicatorComponent {\n    /**\n     * Default spinner size set to \"md\" - medium used within the modal dialogs\n     */\n    private readonly defaultSpinnerSize: SpinnerSize = SIZES.md;\n    /**\n     * Spinner size.\n     *\n     * Spinners can be displayed in three sizes:\n     *\n     *  - sm(Small): This is the required sizing for inline spinners (see above). It measures 18x18 pixels.\n     *  - md(Medium): Medium spinners measure 36x36 pixels. Default.\n     *  - lg(Large): This is the default size for page spinners (see above).\n     *\n     */\n    private _size: SpinnerSize = this.defaultSpinnerSize;\n    /**\n     * Show/hide the loading indicator.\n     */\n    @Input()\n    public isLoading: boolean;\n\n    /**\n     * Show/hide the spinner if only an overlay is required.\n     * @Deprecated\n     */\n    @Input()\n    public showSpinner = true;\n\n    /**\n     * Text to show next to the spinner.\n     */\n    @Input()\n    public loadingTextKey: string | null = null;\n\n    /**\n     * Spinner size setter.\n     * Sets default size if provided value is not from specified sized.\n     */\n    @Input()\n    set size(size: SpinnerSize) {\n        if (!size || Object.keys(SIZES).indexOf(size) === -1) {\n            this._size = this.defaultSpinnerSize;\n        } else {\n            this._size = size;\n        }\n    }\n\n    /**\n     * Gives the size of this loading indicator.\n     */\n    get size(): SpinnerSize {\n        return this._size;\n    }\n}\n","<div class=\"indicator-wrapper\">\n    <div class=\"projected-content\">\n        <ng-content></ng-content>\n    </div>\n    <div class=\"overlay-and-spinner\" *ngIf=\"isLoading\">\n        <div class=\"overlay\"></div>\n        <div *ngIf=\"showSpinner\" class=\"indicator-container\">\n            <div>\n                <span [ngClass]=\"['spinner', loadingTextKey ? 'spinner-inline' : 'spinner-' + size]\"> </span>\n                <span class=\"qa-loading-text\" *ngIf=\"loadingTextKey\">{{ loadingTextKey | translate }}</span>\n            </div>\n        </div>\n    </div>\n</div>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { LoadingIndicatorComponent } from \"./loading-indicator.component\";\n\n@NgModule({\n    declarations: [LoadingIndicatorComponent],\n    imports: [CommonModule, ClarityModule, I18nModule],\n    exports: [LoadingIndicatorComponent],\n})\nexport class VcdLoadingIndicatorModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport interface ActivityResponse {\n    /**\n     * The error message, if any, from the activity.\n     *\n     * A response without an error is assumed to have succeeded.\n     */\n    error?: string;\n    /**\n     * The response message, if any, from the activity.\n     */\n    success?: string;\n}\n\n/**\n * A combination of some object and the response that gave that object.\n */\nexport interface ObjectAndResponse<T> {\n    /**\n     * The data that was returned from a given activity, if any.\n     */\n    object?: T;\n    /**\n     * The response that an activity returned.\n     */\n    response: ActivityResponse;\n}\n\n/**\n * A class that understands how to take a promise and turn it into some response message for display.\n * A client of this library will override {@link ActivityPromiseResolver} to process their specific type of promise.\n * This override will know how to generate a {@link ObjectAndResponse} from the type of promise it processes.\n *\n * @param T The type that is returned from a promise that this resolver processes.\n */\nexport class ActivityPromiseResolver<T> {\n    /**\n     * Takes a Promise and turns it to some activity status\n     * @param activityResolutionPromise The activity that this resolver will generate a response from. It generates\n     * either a sucesss or a failure condition.\n     * @param successMessage The success message this method should return if the activity succeeds. If undefined is passed,\n     * a succeeded promise will return an empty response parameter which is assumed to mean success.\n     */\n    resolveActivity(activityResolutionPromise: Promise<T>, successMessage?: string): Promise<ObjectAndResponse<T>> {\n        return activityResolutionPromise\n            .then((result) => {\n                return {\n                    object: result,\n                    response: { ...result, success: successMessage || result } as ActivityResponse,\n                };\n            })\n            .catch((error) => {\n                return { response: { error } };\n            });\n    }\n\n    /**\n     * Takes a Promise of many items and turns it to some activity status\n     * @param activityResolutionPromise The activity that this resolver will generate a response from. It generates\n     * either a sucesss or a failure condition. There are many entities contained in this response.\n     * @param successMessage The success message this method should return if the activity succeeds. If undefined is passed,\n     * a succeeded promise will return an empty response parameter which is assumed to mean success.\n     */\n    resolveActivities(\n        activityResolutionPromises: Promise<T[]>,\n        successMessage?: string\n    ): Promise<ObjectAndResponse<T>[]> {\n        return activityResolutionPromises\n            .then((result) => {\n                return [\n                    {\n                        object: result[0],\n                        response: { ...result, success: successMessage },\n                    },\n                ];\n            })\n            .catch((error) => {\n                return [{ response: { error } }];\n            });\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { ActivityPromiseResolver } from \"./activity-promise-resolver\";\n\n/**\n * Expresses the contract between a activity status and the UI displaying a loading message, reporting\n * success or errors\n * Currently, only one concurrent activity is supported.\n */\nexport abstract class ActivityReporter {\n    /**\n     * Creates this reporter with the performer that it will use to monitor events.\n     */\n    constructor(private promiseResolver: ActivityPromiseResolver<unknown>) {}\n    /*\n     * Override this method to provide custom error activity starting behavior.\n     */\n    abstract startActivity(): void;\n    /**\n     * Override this method to provide custom error reporting behavior.\n     *\n     *  @param errorText The text to display in the error alert.\n     */\n    abstract reportError(errorText: string): void;\n    /**\n     * Override this method to provide custom success reporting behavior.\n     *\n     * @param successMessage A message to display to the user.\n     */\n    abstract reportSuccess(successMessage: string): void;\n\n    /**\n     * Monitors a promise that returns an entity using {@link ActivityPromiseResolver.monitorActivity}.\n     */\n    async monitorGet<T>(activityResolutionPromise: Promise<T>): Promise<T> {\n        this.startActivity();\n        const performer = this.promiseResolver as ActivityPromiseResolver<T>;\n        const response = await performer.resolveActivity(activityResolutionPromise);\n        if (response.response.error) {\n            this.reportError(response.response.error);\n        } else {\n            this.reportSuccess(response.response.success);\n        }\n        return response.object;\n    }\n\n    /**\n     * Monitors a promise that returns many entities using {@link ActivityPromiseResolver.monitorActivities}.\n     */\n    async monitorGetAll<T>(activityResolutionPromises: Promise<T[]>): Promise<T[]> {\n        this.startActivity();\n        const performer = this.promiseResolver as ActivityPromiseResolver<T>;\n        const response = await performer.resolveActivities(activityResolutionPromises);\n        const returnValue = response.map((item) => item.object);\n        if (response.length) {\n            for (const item of response) {\n                if (item.response.error) {\n                    this.reportError(item.response.error);\n                    return returnValue;\n                }\n            }\n            this.reportSuccess(response[0].response.success);\n        }\n        return returnValue;\n    }\n\n    /**\n     * Monitors a promise that returns an entity and posts a successMessage using {@link ActivityPromiseResolver.monitorActivity}.\n     */\n    async monitorEdit<T>(activityResolutionPromise: Promise<T>, successMessage?: string): Promise<T> {\n        this.startActivity();\n        const performer = this.promiseResolver as ActivityPromiseResolver<T>;\n        const response = await performer.resolveActivity(activityResolutionPromise, successMessage);\n        if (response.response.error) {\n            this.reportError(response.response.error);\n        } else {\n            this.reportSuccess(response.response.success);\n        }\n        return response.object;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, Inject, Input } from \"@angular/core\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { LazyString } from \"@vcd/i18n\";\nimport { ActivityPromiseResolver } from \"./activity-promise-resolver\";\nimport { ActivityReporter } from \"./activity-reporter\";\n\n/**\n * Shows a banner to the user to represent the state of an activity.\n */\n@Component({\n    selector: \"vcd-banner-activity-reporter\",\n    templateUrl: \"./banner-activity-reporter.component.html\",\n})\nexport class BannerActivityReporterComponent extends ActivityReporter {\n    running = false;\n    errorText: string | null = null;\n    successMessage: string | null = null;\n\n    /**\n     * The translated message that is displayed to the user while loading.\n     */\n    @Input()\n    loadingMessage: LazyString = this.translationService.translateAsync(\"vcd.cc.loading\");\n\n    constructor(\n        private translationService: TranslationService,\n        @Inject(ActivityPromiseResolver) promiseResolver: ActivityPromiseResolver<any>\n    ) {\n        super(promiseResolver);\n    }\n\n    /**\n     * Begins to show the banner with a loading indicator.\n     */\n    startActivity(): void {\n        this.running = true;\n        this.successMessage = null;\n        this.errorText = null;\n    }\n\n    /**\n     * Shows the given {@param errorText} to the user.\n     */\n    reportError(errorText: string): void {\n        this.errorText = errorText;\n        this.running = false;\n    }\n\n    /**\n     * Shows the given {@param successMessage} to the user.\n     */\n    reportSuccess(successMessage: string): void {\n        if (successMessage) {\n            this.successMessage = successMessage;\n        }\n        this.running = false;\n    }\n\n    /**\n     * Closes the error message if displayed.\n     */\n    onErrorClosed(): void {\n        this.errorText = null;\n    }\n\n    /**\n     * Closes the success message if displayed.\n     */\n    onSuccessClosed(): void {\n        this.successMessage = null;\n    }\n\n    /*\n     * Reset the banner activity state manually.\n     *\n     * Call it when banner should be reset to its default state.\n     */\n    reset(): void {\n        this.running = false;\n        this.errorText = null;\n        this.successMessage = null;\n    }\n}\n","<clr-alert *ngIf=\"running\" clrAlertType=\"alert-info\" [clrAlertClosable]=\"false\">\n    <div>{{ loadingMessage | lazyString }}</div>\n</clr-alert>\n\n<clr-alert *ngIf=\"errorText\" clrAlertType=\"danger\" (clrAlertClosed)=\"onErrorClosed()\">\n    <div clr-alert-item class=\"alert-item\">\n        <span class=\"alert-text\">\n            {{ errorText }}\n        </span>\n    </div>\n</clr-alert>\n\n<clr-alert *ngIf=\"successMessage\" clrAlertType=\"success\" (clrAlertClosed)=\"onSuccessClosed()\">\n    <div clr-alert-item class=\"alert-item\">\n        <span class=\"alert-text\">\n            {{ successMessage }}\n        </span>\n    </div>\n</clr-alert>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, Inject } from \"@angular/core\";\nimport { ActivityPromiseResolver } from \"./activity-promise-resolver\";\nimport { ActivityReporter } from \"./activity-reporter\";\n\n/**\n * Spinner activity reporter shows the spinner until an error or success message is returned.\n * An error message is displayed through the error banner.\n */\n@Component({\n    selector: \"vcd-spinner-activity-reporter\",\n    templateUrl: \"./spinner-activity-reporter.component.html\",\n})\nexport class SpinnerActivityReporterComponent extends ActivityReporter {\n    /**\n     * When true show the spinner\n     */\n    public running = false;\n\n    /**\n     * When set show the error text\n     */\n    public errorText: string = null;\n\n    constructor(@Inject(ActivityPromiseResolver) promiseResolver: ActivityPromiseResolver<any>) {\n        super(promiseResolver);\n    }\n\n    /**\n     * Begins to show the loading indicator to the user.\n     */\n    startActivity(): void {\n        this.running = true;\n        this.errorText = null;\n    }\n\n    /**\n     * Hides the loading indicator and shows an error message.\n     */\n    reportError(errorText: string): void {\n        this.errorText = errorText;\n        this.running = false;\n    }\n\n    /**\n     * Hides the loading indicator.\n     */\n    reportSuccess(): void {\n        this.running = false;\n    }\n}\n","<vcd-error-banner *ngIf=\"errorText\" [(errorMessage)]=\"errorText\"></vcd-error-banner>\n<vcd-loading-indicator [isLoading]=\"running\"></vcd-loading-indicator>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { VcdErrorBannerModule } from \"../error/error-banner.module\";\nimport { VcdLoadingIndicatorModule } from \"../loading/loading-indicator.module\";\nimport { BannerActivityReporterComponent } from \"./banner-activity-reporter.component\";\nimport { SpinnerActivityReporterComponent } from \"./spinner-activity-reporter.component\";\n\n@NgModule({\n    declarations: [BannerActivityReporterComponent, SpinnerActivityReporterComponent],\n    imports: [CommonModule, ClarityModule, I18nModule, VcdErrorBannerModule, VcdLoadingIndicatorModule],\n    exports: [BannerActivityReporterComponent, SpinnerActivityReporterComponent],\n})\nexport class VcdActivityReporterModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./activity-reporter.module\";\nexport * from \"./activity-reporter\";\nexport * from \"./activity-promise-resolver\";\nexport * from \"./banner-activity-reporter.component\";\nexport * from \"./spinner-activity-reporter.component\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./error-banner.component\";\nexport * from \"./error-banner.module\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./loading-indicator.component\";\nexport * from \"./loading-indicator.module\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Injectable } from \"@angular/core\";\n\n// From https://owasp.org/www-community/attacks/CSV_Injection\n// * Equals to (=)\n// * Plus (+)\n// * Minus (-)\n// * At (@)\n// * Tab (0x09), \\t\n// * Carriage return (0x0D), \\r\n//\n// If a cell starts with one of these, it should be sanitized with a single quote\n// be prepending it to the special character.\n//\n// This would break a script but it's better than causing a Formula to be executed\n// on a user's computer.\n\n// See https://stackoverflow.com/a/3561711/227299\nfunction escapeRegex(string: string): string {\n    return string.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\nconst LEADING_CHARS = escapeRegex([\"=\", \"+\", \"-\", \"@\", \"\\t\", \"\\r\"].join(\"\"));\n\nconst LEADING_CONTROL_CHAR = new RegExp(`^[${LEADING_CHARS}]`);\n\nconst SANITIZE_CHAR = `'`;\n\nconst CELL_SEPARATOR = \",\";\n\nconst LINE_SEPARATOR = \"\\n\";\n@Injectable({\n    providedIn: \"root\",\n})\n/**\n * Encodes a data set to be downloaded as a CSV\n */\nexport class CsvExporterService {\n    /**\n     * Creates a string that can be used to create a Blob for a CSV\n     * @param rows 2D array of data. First row is the names for the fields\n     * @param shouldSanitize If a cell starting with a control character should be edited to prevent\n     * possible code injection\n     */\n    public createCsv(rows: any[][], shouldSanitize = false): string {\n        // BOM Mark to help Excel open the CSV when it contains UTF-8 characters\n        return \"\\ufeff\" + rows.map((row) => processRow(row, shouldSanitize)).join(LINE_SEPARATOR);\n    }\n\n    /**\n     * Does a client side download\n     * @param csvFile The string contents of a CSV file to be downloaded\n     * @param filename The name of the file to be downloaded\n     */\n    public downloadCsvFile(csvFile: string, filename: string): void {\n        const mimeType = \"text/csv;charset=utf-8;\";\n        const blob = new Blob([csvFile], { type: mimeType });\n        const link = document.createElement(\"a\");\n        const url = URL.createObjectURL(blob);\n        link.setAttribute(\"href\", url);\n        link.setAttribute(\"download\", filename);\n        link.style.visibility = \"hidden\";\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n    }\n}\n\n/**\n * Returns a string\n * @param row A list of cells to be turned into a CSV string, separated by commas\n * @param shouldSanitize If a cell starting with a control character should be edited to prevent\n * possible code injection\n */\nfunction processRow(row: unknown[], shouldSanitize: boolean): string {\n    return row.map((cell) => encodeValue(cell, shouldSanitize)).join(CELL_SEPARATOR);\n}\n\n/**\n * Returns a cell's cellValue encoded against spaces, quotes, and CSV injection character\n * @param cellValue Cell cellValue to be encoded\n * @param shouldSanitize If this cellValue starts with a control should it be\n * prefixed with the tab character\n */\nfunction encodeValue(cellValue: unknown, shouldSanitize: boolean): string {\n    let innerValue = cellValue == null ? \"\" : cellValue.toString();\n    if (cellValue instanceof Date) {\n        innerValue = cellValue.toLocaleString();\n    } else if (cellValue && typeof cellValue === \"object\") {\n        innerValue = JSON.stringify(cellValue);\n    }\n    // Double quotes are doubled\n    let result = innerValue.replace(/\"/g, '\"\"');\n\n    if (shouldSanitize) {\n        result = sanitizeString(result);\n    }\n    // Add quotes around the whole thing if it contains special characters\n    if (result.search(/[\",\\n\\r]/g) >= 0) {\n        result = `\"${result}\"`;\n    }\n    return result;\n}\n\n/**\n * Prevents CSV injection by prefixing with a tab character if the string contains a\n * special character.\n */\nfunction sanitizeString(value: string): string {\n    // Trim the string since space before a control character is ignored by\n    // many CSV parsers, e.g., Numbers on a Mac\n    const trimmed = value.trim();\n    if (LEADING_CONTROL_CHAR.test(trimmed)) {\n        return SANITIZE_CHAR + trimmed;\n    }\n    return trimmed;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, EventEmitter, Input, OnInit, Output, Self, ViewChild } from \"@angular/core\";\nimport { AbstractControl, FormControl, FormGroup } from \"@angular/forms\";\nimport { ClrDropdown } from \"@clr/angular\";\nimport { LazyString, TranslationService } from \"@vcd/i18n\";\nimport { SubscriptionTracker } from \"../common/subscription/subscription-tracker\";\nimport { CsvExporterService } from \"./csv-exporter.service\";\n\n/**\n * Identifiers for each column that user is allowed to select\n */\nexport interface ExportColumn {\n    /**\n     * Displayed in the list of columns. If there is no displayName, the default value is fieldName\n     */\n    displayName?: string;\n    /**\n     * The name of the field in the JSON that is returned and converted to a viewable format\n     */\n    fieldName: string;\n}\n\n/**\n * Information passed to the caller so they can fetch the data\n */\nexport interface DataExportRequestEvent {\n    /**\n     * Call this to indicate a new value to be displayed in the progress indicator.\n     * @param progress A number from 0 to 1 indicating download progress. Passing -1 will make it an indeterminate\n     */\n    updateProgress: (progress: number) => void;\n\n    /**\n     * Call this when all records have been fetched to initiate the CSV creation.\n     * This should only be called once after all data fetching is finished\n     * @param records Records to be converted into a csv file\n     * @return a promise of the resulting CSV to indicate when this potentially lengthy process is over\n     */\n    exportData: (records: object[]) => Promise<string>;\n\n    /**\n     * Columns selected by the user.\n     */\n    selectedColumns: ExportColumn[];\n}\n\nexport const DataUi = {\n    /** The label for each check box in the column selection menu */\n    columnSelectionMenuOptions: \"col-selection-menu-option\",\n\n    /** Where the selected columns are displayed, if select all is disabled  */\n    columnSelectionBubbles: \"col-selection-bubble\",\n\n    cancelButton: \"cancel-btn\",\n\n    exportButton: \"export-btn\",\n\n    /** The label on the checkbox to select all columns */\n    selectAllToggleLabel: \"select-all-toggle-label\",\n\n    /** The label on the checkbox to enable friendly names */\n    friendlyNamesToggleLabel: \"friendly-names\",\n\n    /** The progress HTML element containing the value which can be queried for amount of progress     */\n    progressInput: \"progress-input\",\n\n    /** The arrow next to Select All columns that lets you collapse the dropdown without checking the box */\n    columnCheckboxArrow: \"column-checkbox-arrow\",\n\n    /** The x buttons to close the column bubbles */\n    columnBubblesX: \"column-bubbles-x\",\n};\n\n/**\n * A dialog to export data\n *\n *  - Allows the UI to select columns to be exported\n *  - Provides a progress indicator\n *  - Converts the data that is fetched by the caller into a CSV\n */\n@Component({\n    selector: \"vcd-data-exporter\",\n    templateUrl: \"data-exporter.component.html\",\n    styleUrls: [\"./data-exporter.component.scss\"],\n    providers: [SubscriptionTracker],\n})\nexport class DataExporterComponent implements OnInit {\n    DataUi = DataUi;\n\n    constructor(\n        private csvExporterService: CsvExporterService,\n        private translationService: TranslationService,\n        @Self() private subscriptionTracker: SubscriptionTracker\n    ) {}\n\n    @ViewChild(ClrDropdown) set columnDropdown(columnDropdown: ClrDropdown) {\n        if (!columnDropdown) {\n            return;\n        }\n        this._columnDropdown = columnDropdown;\n        this.subscriptionTracker.subscribe(columnDropdown.toggleService.openChange, (opened) => {\n            this.isDropdownOpen = opened;\n        });\n    }\n\n    private _columnDropdown: ClrDropdown;\n\n    _columns: ExportColumn[] = [];\n\n    /**\n     * List of columns that can be exported, user may deselect some before sending the download request.\n     * Display name defaults to field name if there is no displayName\n     */\n    @Input()\n    set columns(cols: ExportColumn[]) {\n        this._columns = cols;\n        this.updateFieldNameMap(cols);\n    }\n\n    get columns(): ExportColumn[] {\n        return this._columns;\n    }\n\n    /**\n     * The name of the file to be downloaded\n     */\n    @Input() fileName = \"data-export.csv\";\n\n    /**\n     * Text for the Dialog Header\n     */\n    @Input()\n    dialogHeader: LazyString = this.translationService.translateAsync(\"vcd.cc.data-exporter.title\");\n\n    /**\n     * Text for the cancel button.\n     */\n    @Input()\n    cancelText: LazyString = this.translationService.translateAsync(\"vcd.cc.cancel\");\n\n    /**\n     * Text for the export all button.\n     */\n    @Input()\n    exportAllText: LazyString = this.translationService.translateAsync(\"vcd.cc.export.all\");\n\n    /**\n     * Text for the select columns dropdown button.\n     */\n    @Input()\n    selectColumnsText: LazyString = this.translationService.translateAsync(\"vcd.cc.select.columns\");\n\n    /**\n     * Text for the export button.\n     */\n    @Input()\n    exportText: LazyString = this.translationService.translateAsync(\"vcd.cc.export\");\n\n    /**\n     * Text for the yes button.\n     */\n    @Input()\n    yesText: LazyString = this.translationService.translateAsync(\"vcd.cc.yes\");\n\n    /**\n     * Text for the yes button.\n     */\n    @Input()\n    noText: LazyString = this.translationService.translateAsync(\"vcd.cc.no\");\n\n    /**\n     * Text label that is next to the friendly field names checkbox.\n     */\n    @Input()\n    friendlyNamesCheckboxLabel: LazyString = this.translationService.translateAsync(\"vcd.cc.friendly.names.question\");\n\n    /**\n     * Text the info message next to the friendly field names checkbox.\n     */\n    @Input()\n    friendlyNamesInfoMessage: LazyString = this.translationService.translateAsync(\"vcd.cc.friendly.names.info\");\n\n    /**\n     * Text the hint message below the friendly field names checkbox.\n     */\n    @Input()\n    friendlyNamesHint: LazyString = this.translationService.translateAsync(\"vcd.cc.friendly.names.hint\");\n\n    /**\n     * Text label that is next to the sanitize checkbox.\n     */\n    @Input()\n    sanitizeCheckboxLabel: LazyString = this.translationService.translateAsync(\"vcd.cc.sanitize.question\");\n\n    /**\n     * Hint message that is below the sanitize checkbox.\n     */\n    @Input()\n    sanitizeCheckboxHint: LazyString = this.translationService.translateAsync(\"vcd.cc.sanitize.hint\");\n\n    /**\n     * Text the info message next to the sanitize checkbox.\n     */\n    @Input()\n    sanitizeInfoMessage: LazyString = this.translationService.translateAsync(\"vcd.cc.sanitize.info\");\n\n    /**\n     * The message that is displayed while the data is downloading.\n     */\n    @Input()\n    downloadingMessage: LazyString = this.translationService.translateAsync(\"vcd.cc.exporter.downloading\");\n\n    /**\n     * The message that is displayed while the data is writing to file.\n     */\n    @Input()\n    writingMessage: LazyString = this.translationService.translateAsync(\"vcd.cc.exporter.writing\");\n\n    /**\n     * Whether the dialog is open\n     */\n    @Input()\n    set open(value: boolean) {\n        this._open = value;\n        this.openChange.emit(value);\n    }\n    get open(): boolean {\n        return this._open;\n    }\n\n    private _open = false;\n    /**\n     * Fires when {@link _open} changes. Its parameter indicates the new state.\n     */\n    @Output() openChange = new EventEmitter<boolean>();\n\n    /**\n     * Called when the export is ready to be created\n     */\n    @Output() dataExportRequest = new EventEmitter<DataExportRequestEvent>();\n\n    /**\n     * True between the time {@link dataExportRequest} fires and {@link DataExportRequestEvent.exportData} is called\n     * or an error is thrown\n     */\n    get isRequestPending(): boolean {\n        return this._isRequestPending;\n    }\n    private _isRequestPending = false;\n\n    /**\n     * Number between 0-1, used for displaying the progress bar.\n     */\n    get progress(): number {\n        return this._progress;\n    }\n    private _progress = 0;\n\n    private fieldNameMap = new Map<string, ExportColumn>();\n\n    formGroup: FormGroup<{ [key: string]: AbstractControl<boolean> }>;\n\n    exportStage: LazyString;\n\n    optionsFormGroup = new FormGroup({\n        selectAll: new FormControl(true),\n        friendlyNames: new FormControl(true),\n        sanitize: new FormControl(true),\n    });\n\n    /**\n     * Says if the column selection dropdown is open.\n     */\n    isDropdownOpen = false;\n\n    onClickExport(): void {\n        this.exportStage = this.downloadingMessage;\n        this._isRequestPending = true;\n        this.dataExportRequest.emit({\n            exportData: this.exportData.bind(this),\n            updateProgress: this.updateProgress.bind(this),\n            selectedColumns: this.selectedColumns,\n        });\n    }\n\n    get selectAllControl(): FormControl {\n        return this.optionsFormGroup.controls.selectAll;\n    }\n\n    get sanitizeControl(): FormControl {\n        return this.optionsFormGroup.controls.sanitize;\n    }\n\n    get friendlyFieldsControl(): FormControl {\n        return this.optionsFormGroup.controls.friendlyNames;\n    }\n\n    get isExportEnabled(): boolean {\n        if (this.isRequestPending) {\n            return false;\n        }\n        for (const column of this.columns) {\n            if (this.formGroup.controls[column.fieldName].value) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    get shouldShowBubbles(): boolean {\n        return !this.selectAllControl.value && !this.isDropdownOpen;\n    }\n\n    /**\n     * Gives a list of all the columns that are selected.\n     */\n    get selectedColumns(): ExportColumn[] {\n        return this.columns.filter((col) => this.formGroup.controls[col.fieldName].value);\n    }\n\n    /**\n     * Sets the selected value of the given column.\n     */\n    selectColumn(column: ExportColumn, selected: boolean = !this.getColumnSelection(column)): void {\n        this.formGroup.controls[column.fieldName].setValue(selected);\n    }\n\n    /**\n     * Gives the selection status of the given column.\n     */\n    getColumnSelection(column: ExportColumn): boolean {\n        return this.formGroup.controls[column.fieldName].value;\n    }\n\n    ngOnInit(): void {\n        const controls = this.columns.reduce((previousValue, currentValue) => {\n            previousValue[currentValue.fieldName] = new FormControl(true);\n            return previousValue;\n        }, {});\n        this.formGroup = new FormGroup(controls);\n        this.subscriptionTracker.subscribe(this.selectAllControl.valueChanges, (change) => {\n            if (change) {\n                for (const column of this.columns) {\n                    this.formGroup.controls[column.fieldName].setValue(true);\n                }\n            } else {\n                this._columnDropdown.toggleService.toggleWithEvent(new Event(\"click\"));\n            }\n        });\n    }\n\n    private exportData(records: object[]): Promise<string> {\n        if (!this.open) {\n            return;\n        }\n\n        const rows = [\n            // First row is the display names\n            Object.keys(records[0]).map((fieldName) =>\n                this.friendlyFieldsControl.value ? this.getDisplayNameForField(fieldName) : fieldName\n            ),\n            // Then the data\n            ...records.map((rec) => Object.keys(rec).map((key) => rec[key])),\n        ];\n        return this.downloadData(rows, this.sanitizeControl.value);\n    }\n\n    downloadData(data: any[][], shouldSanitize: boolean = false): Promise<string> {\n        this.exportStage = this.writingMessage;\n        return new Promise((resolve) => {\n            // We need to setTimeout because we changed how the message should be displayed\n            // but we need to interrupt the current task to get the message to display\n            // We tried to use window.requestAnimationFrame, but this didn't work so we had to use\n            // setTimeout().\n            setTimeout(() => {\n                this._isRequestPending = false;\n                const csvFile = this.csvExporterService.createCsv(data, shouldSanitize);\n                this.csvExporterService.downloadCsvFile(csvFile, this.fileName);\n                this.open = false;\n                resolve(csvFile);\n            });\n        });\n    }\n\n    private updateProgress(progress: number): void {\n        this._progress = progress;\n    }\n\n    private getDisplayNameForField(fieldName: string): string {\n        if (this.fieldNameMap.has(fieldName)) {\n            const exportColumn = this.fieldNameMap.get(fieldName);\n            return this.getDisplayNameForColumn(exportColumn);\n        }\n        return fieldName;\n    }\n\n    getDisplayNameForColumn(col: ExportColumn): string {\n        return col.displayName || col.fieldName;\n    }\n\n    private updateFieldNameMap(cols: ExportColumn[]): void {\n        this.fieldNameMap = new Map(cols.map((col) => [col.fieldName, col]));\n    }\n}\n","<clr-modal [clrModalOpen]=\"open\" (clrModalOpenChange)=\"openChange.emit($event)\" [clrModalSize]=\"'md'\" #modal>\n    <h3 class=\"modal-title\">{{ dialogHeader | lazyString }}</h3>\n    <div class=\"modal-body\">\n        <div>\n            <div class=\"flex-row\">\n                <clr-checkbox-wrapper>\n                    <input\n                        class=\"friendly-names\"\n                        type=\"checkbox\"\n                        clrCheckbox\n                        [formControl]=\"this.friendlyFieldsControl\"\n                    />\n                    <!-- eslint-disable-next-line  @angular-eslint/template/label-has-associated-control -->\n                    <label [attr.data-ui]=\"DataUi.friendlyNamesToggleLabel\">{{\n                        friendlyNamesCheckboxLabel | lazyString\n                    }}</label>\n                </clr-checkbox-wrapper>\n                <div class=\"fill-space\"></div>\n                <clr-signpost>\n                    <clr-signpost-content *clrIfOpen>\n                        <span>{{ friendlyNamesInfoMessage | lazyString }}</span>\n                    </clr-signpost-content>\n                </clr-signpost>\n            </div>\n            <i>{{ friendlyNamesHint | lazyString }}</i>\n            <div class=\"flex-row\">\n                <clr-checkbox-wrapper>\n                    <input type=\"checkbox\" clrCheckbox [formControl]=\"this.sanitizeControl\" />\n                    <!-- eslint-disable-next-line  @angular-eslint/template/label-has-associated-control -->\n                    <label>{{ sanitizeCheckboxLabel | lazyString }}</label>\n                </clr-checkbox-wrapper>\n                <div class=\"fill-space\"></div>\n                <clr-signpost>\n                    <clr-signpost-content *clrIfOpen>\n                        <span>{{ sanitizeInfoMessage | lazyString }}</span>\n                    </clr-signpost-content>\n                </clr-signpost>\n            </div>\n            <i>{{ sanitizeCheckboxHint | lazyString }}</i>\n            <div class=\"flex-row\">\n                <clr-checkbox-wrapper>\n                    <input type=\"checkbox\" clrCheckbox [formControl]=\"this.selectAllControl\" />\n                    <!-- eslint-disable-next-line  @angular-eslint/template/label-has-associated-control -->\n                    <label [attr.data-ui]=\"DataUi.selectAllToggleLabel\">{{ exportAllText | lazyString }}</label>\n                </clr-checkbox-wrapper>\n                <clr-dropdown [clrCloseMenuOnItemClick]=\"false\">\n                    <cds-icon\n                        shape=\"caret\"\n                        size=\"md\"\n                        [attr.direction]=\"isDropdownOpen ? 'up' : 'down'\"\n                        clrDropdownTrigger\n                        class=\"dropdown-button\"\n                        [attr.data-ui]=\"DataUi.columnCheckboxArrow\"\n                        *ngIf=\"!this.selectAllControl.value\"\n                    ></cds-icon>\n                    <clr-dropdown-menu clrPosition=\"bottom\" [formGroup]=\"formGroup\" *clrIfOpen #dropdownMenu>\n                        <ul>\n                            <li\n                                clrDropdownItem\n                                *ngFor=\"let col of columns\"\n                                (click)=\"selectColumn(col)\"\n                                [attr.data-ui]=\"DataUi.columnSelectionMenuOptions\"\n                            >\n                                <clr-checkbox-wrapper class=\"column-checkbox\">\n                                    <input\n                                        type=\"checkbox\"\n                                        clrCheckbox\n                                        [formControlName]=\"col.fieldName\"\n                                        (click)=\"$event.stopPropagation()\"\n                                    />\n                                    <!-- eslint-disable-next-line  @angular-eslint/template/label-has-associated-control -->\\\n                                    <label (click)=\"$event.stopPropagation()\">{{\n                                        this.friendlyFieldsControl.value ? getDisplayNameForColumn(col) : col.fieldName\n                                    }}</label>\n                                </clr-checkbox-wrapper>\n                            </li>\n                        </ul>\n                    </clr-dropdown-menu>\n                </clr-dropdown>\n            </div>\n\n            <span\n                class=\"label\"\n                *ngFor=\"let column of selectedColumns\"\n                [attr.data-ui]=\"DataUi.columnSelectionBubbles\"\n                [ngStyle]=\"{ visibility: shouldShowBubbles ? 'visible' : 'hidden' }\"\n            >\n                {{ this.friendlyFieldsControl.value ? getDisplayNameForColumn(column) : column.fieldName }}\n                <button\n                    type=\"button\"\n                    class=\"btn btn-icon btn-link remove-col-button\"\n                    aria-label=\"home\"\n                    (click)=\"selectColumn(column, false)\"\n                    [attr.data-ui]=\"DataUi.columnBubblesX\"\n                >\n                    <cds-icon shape=\"close\" size=\"sm\"> </cds-icon>\n                </button>\n            </span>\n        </div>\n        <div class=\"progress-divider\"></div>\n        <ng-container *ngIf=\"isRequestPending\">{{ exportStage | lazyString }}</ng-container>\n        <div class=\"progress-divider\"></div>\n        <div class=\"progress\" [ngClass]=\"{ loop: progress === -1, pending: isRequestPending }\">\n            <progress max=\"100\" value=\"{{ progress * 100 }}\" [attr.data-ui]=\"DataUi.progressInput\"></progress>\n        </div>\n    </div>\n\n    <div class=\"modal-footer\">\n        <button type=\"button\" class=\"btn btn-outline\" (click)=\"open = false\" [attr.data-ui]=\"DataUi.cancelButton\">\n            {{ cancelText | lazyString }}\n        </button>\n        <button\n            type=\"button\"\n            class=\"btn btn-primary\"\n            [disabled]=\"!isExportEnabled\"\n            (click)=\"onClickExport()\"\n            [attr.data-ui]=\"DataUi.exportButton\"\n        >\n            {{ exportText | lazyString }}\n        </button>\n    </div>\n</clr-modal>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { IconsModule } from \"../lib/icons\";\nimport { DataExporterComponent } from \"./data-exporter.component\";\n\n@NgModule({\n    declarations: [DataExporterComponent],\n    imports: [CommonModule, ReactiveFormsModule, ClarityModule, I18nModule, IconsModule],\n    exports: [DataExporterComponent],\n})\nexport class VcdDataExporterModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { DatePipe, DecimalPipe } from \"@angular/common\";\nimport { Inject, LOCALE_ID, Pipe, PipeTransform } from \"@angular/core\";\n\nconst OBJECT_PROPERTY_SEPARATOR = \".\";\nconst DATE_OBJECT_CLASS = \"[object Date]\";\n\n/**\n * Used for extracting the value of nested property of an object.\n *\n * Example:\n * const obj = {\n *     a: {\n *         b: {\n *             c: 'c'\n *         }\n *     }\n * }\n *\n * Invoking `{{ obj | nestedProperty: 'a.b.c' }}` in a template produces c\n */\n@Pipe({\n    name: \"nestedProperty\",\n    pure: true,\n})\nexport class NestedPropertyPipe implements PipeTransform {\n    constructor(@Inject(LOCALE_ID) private localeId: string) {}\n    public transform<T>(item: any, property: string): string {\n        if (!item || !property) {\n            return null;\n        }\n        const splitProperty = property.split(OBJECT_PROPERTY_SEPARATOR);\n        let returnValue;\n        if (splitProperty.length > 1) {\n            let value = item;\n            for (const nestedProp of splitProperty) {\n                if (isNullOrUndefined(value) || isNullOrUndefined(value[nestedProp])) {\n                    return null;\n                }\n                value = value[nestedProp];\n            }\n            returnValue = value;\n        } else {\n            if (isNullOrUndefined(item[property])) {\n                return null;\n            }\n            returnValue = item[property];\n        }\n\n        if (typeof returnValue === \"number\") {\n            return new DecimalPipe(this.localeId).transform(returnValue);\n        }\n        return returnValue instanceof Date ? new DatePipe(this.localeId).transform(returnValue) : returnValue;\n    }\n}\n\n/**\n * Utility method for covering the 'null' and 'undefined' checks as 'value == null' is equivalent to 'value === null || value === undefined'\n */\nfunction isNullOrUndefined(value: unknown): boolean {\n    return value == null;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { NestedPropertyPipe } from \"./nested-property.pipe\";\n\nconst declarations = [NestedPropertyPipe];\n\n@NgModule({\n    declarations,\n    exports: [...declarations],\n})\nexport class PipesModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Directive, Input } from \"@angular/core\";\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl, ValidatorFn } from \"@angular/forms\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { IdGenerator } from \"../utils/id-generator/id-generator\";\nimport { CanBeReadOnly } from \"./interfaces/can-be-read-only.interface\";\n\nconst idGenerator = new IdGenerator(\"base-form-control-id\");\n\n/**\n * For a given control, apply the given validator and override its setValidators method so that this default validator will always\n * be applied\n * @param control - Control to receive a default validator\n * @param defaultValidator - Validator that will always be present for the form control\n */\nexport function defaultValidatorForControl(control: AbstractControl, defaultValidator: ValidatorFn): void {\n    // `control.validator` may be null, use filter to prevent passing in a null validator\n    control.setValidators([defaultValidator, control.validator].filter(Boolean));\n\n    const oldSetValidators = control.setValidators;\n    control.setValidators = (validators) => {\n        // Could be an array, single value or null\n        const validatorsArray = Array.isArray(validators) ? validators : [validators].filter(Boolean);\n        return oldSetValidators.call(control, [defaultValidator, ...validatorsArray]);\n    };\n}\n/**\n * Wrapper to enforce UX decisions like readonly-ness, label position and error displaying. And also to make\n * the form control backing a form control name directive available to subclasses.\n *\n * V is the type of the control's value\n */\n@Directive()\nexport class BaseFormControl<V> implements ControlValueAccessor, CanBeReadOnly {\n    /**\n     * Auto generated ID for the input field.\n     */\n    readonly id: string = idGenerator.generate();\n\n    /**\n     * Auto generated ID for the description field.\n     */\n    readonly descriptionId: string = `${this.id}-description`;\n\n    /**\n     * Auto generated ID for the error field.\n     */\n    readonly errorsId: string = `${this.id}-errors`;\n\n    /**\n     * Change callback.\n     */\n    onChange: (...args: unknown[]) => unknown;\n\n    /**\n     * Touch callback.\n     */\n    onTouch: (...args: unknown[]) => unknown;\n\n    /**\n     * Whether the control is disabled.\n     */\n    disabled = false;\n\n    /**\n     * Show the asterisk next to the control when true\n     */\n    @Input() showAsterisk = false;\n\n    /**\n     * The label that appears before the control\n     * To comply with accessibility requirements this input is required.\n     * For backward compatibility, label will be hidden if it is not passed,\n     * but preferred way for hiding it is by using the `hideLabel` input.\n     */\n    @Input() label: string;\n\n    /**\n     * Set to `true` to hide the label.\n     */\n    @Input() hideLabel = false;\n\n    /**\n     * The description that appears below the control\n     * \\u00A0 is &nbsp; (non-breaking space)\n     */\n    @Input() description = \"\\u00A0\";\n\n    /**\n     * Whether this component is in readonly mode\n     */\n    @Input() isReadOnly = false;\n\n    /**\n     * Error labels to be used instead of NgControl error keys\n     */\n    @Input() errorLabels: string[] = [];\n\n    /**\n     * If this is true, Clarity responsive classes will be added to the component's elements so that label and input\n     * elements are on separate lines when on small screens or inside small containers.\n     *\n     * Note that if a form control is being used inside a `.clr-form-vertical`, the controls should all have\n     * isResponsive set to false, since that will cause labels to always display on a separate line and adding\n     * the responsive styles would interfere with that\n     */\n    @Input() isResponsive = true;\n\n    /**\n     * FormControlName directive\n     */\n    formControlNameDirective: NgControl;\n\n    /**\n     * To store the initial value of the input form control.\n     */\n    protected initialValue: number | string | boolean;\n\n    constructor(\n        ngControl: NgControl,\n        protected translationService: TranslationService\n    ) {\n        if (ngControl) {\n            ngControl.valueAccessor = this;\n            this.formControlNameDirective = ngControl;\n        }\n    }\n\n    /**\n     * The FormControl associated with the FormControlName directive\n     *\n     * If one was not associated using [formControl] or [formControlName], we'll create one to keep things working.\n     * This is so that components can still be used without a form control\n     */\n    get formControl(): FormControl<V> {\n        return (\n            this.formControlNameDirective ? this.formControlNameDirective.control : new FormControl(null as V)\n        ) as FormControl<V>;\n    }\n\n    get showErrors(): boolean {\n        return this.formControl.enabled && !this.formControl.pristine && !this.formControl.valid;\n    }\n\n    /**\n     * Errors from the form control validation\n     */\n    get errorKeys(): string[] {\n        if (this.errorLabels.length) {\n            return this.errorLabels;\n        }\n        return Object.keys(this.formControl.errors || {});\n    }\n\n    /**\n     * Return the translated error strings.\n     */\n    get translatedErrors(): string[] {\n        return this.errorKeys.map((errorKey) => {\n            return this.translationService.translate(\n                errorKey,\n                this.getTranslationParams(this.formControl.errors[errorKey])\n            );\n        });\n    }\n\n    registerOnChange(onChange: (...args: unknown[]) => unknown): void {\n        this.onChange = onChange;\n    }\n\n    registerOnTouched(onTouched: (...args: unknown[]) => unknown): void {\n        this.onTouch = onTouched;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    writeValue(val: unknown): void {\n        // No default behavior but subclasses should update the\n    }\n\n    /**\n     * When errorObjectValue param is not an array we pass back the control's value to stay backward compatible.\n     */\n    private getTranslationParams(errorObjectValue: any): any {\n        if (Array.isArray(errorObjectValue)) {\n            return errorObjectValue;\n        }\n\n        return [this.formControl.value];\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, Input, OnInit, Optional, Self } from \"@angular/core\";\nimport { NgControl } from \"@angular/forms\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { BaseFormControl } from \"../base-form-control\";\n\nexport enum CheckBoxStyling {\n    CHECKBOX = \"checkbox\",\n    TOGGLESWITCH = \"toggle-switch\",\n}\n\n/**\n * {@link FormControl} wrapper around a input HTML element of checkbox type. The label input from\n * {@link BaseFormControl} is used for displaying a label on the left of a form field and the text input is used for\n * displaying label on the right of checkbox. Use the 'styling' property with a value of 'checkbox' or 'toggle-switch'\n * to display a checkbox or toggle switch on the UI.\n *\n * Example:\n *      <vcd-form-checkbox [formControlName]=\"Fields.port\" [label]=\"'enabled'|translate\"\n *                         [text]=\"'feature.enabled'|translate\">\n *      </vcd-form-checkbox>\n */\n@Component({\n    selector: \"vcd-form-checkbox\",\n    templateUrl: \"./form-checkbox.component.html\",\n    styleUrls: [\"../form.scss\", \"./form-checkbox.component.scss\"],\n})\nexport class FormCheckboxComponent extends BaseFormControl<boolean> {\n    /**\n     * The label that appears next to the control\n     */\n    @Input() text: string;\n\n    /**\n     * Styling for the checkbox.\n     */\n    @Input() styling: CheckBoxStyling = CheckBoxStyling.CHECKBOX;\n\n    /**\n     * Put the label text on the right.\n     */\n    @Input() rightLabel = false;\n\n    /**\n     * A shape for the icon that appears next to the checkbox.\n     */\n    @Input() iconShape: string;\n\n    /**\n     * The direction for displaying the hint\n     */\n    @Input() hintPosition = \"top-left\";\n\n    /**\n     * Hint to display in the content of a signpost\n     */\n    @Input() hint: string;\n\n    get isCheckbox(): boolean {\n        return this.styling === CheckBoxStyling.CHECKBOX;\n    }\n\n    constructor(\n        @Self() @Optional() controlDirective: NgControl,\n        protected translationService: TranslationService\n    ) {\n        super(controlDirective, translationService);\n    }\n}\n","<div class=\"form-group\">\n    <div\n        class=\"clr-form-control\"\n        [vcdResponsiveInput]=\"{ disabled: !isResponsive }\"\n        [ngClass]=\"{ 'clr-form-control-disabled': disabled }\"\n    >\n        <label class=\"clr-control-label\" [for]=\"id\" *ngIf=\"!hideLabel\">{{ label }}</label>\n        <div class=\"clr-control-container\" [ngClass]=\"{ 'clr-error': showErrors }\">\n            <div [ngClass]=\"{ 'clr-checkbox-wrapper': isCheckbox, 'clr-toggle-wrapper': !isCheckbox }\">\n                <input\n                    type=\"checkbox\"\n                    [id]=\"id\"\n                    [attr.aria-label]=\"!hideLabel ? null : label\"\n                    [attr.aria-describedby]=\"showErrors ? errorsId : descriptionId\"\n                    [ngClass]=\"{ 'clr-checkbox': isCheckbox, 'clr-toggle': !isCheckbox }\"\n                    [formControl]=\"formControl\"\n                />\n                <label class=\"clr-control-label\" [for]=\"id\">\n                    <cds-icon *ngIf=\"iconShape\" [attr.shape]=\"iconShape\"></cds-icon>\n                    {{ text }}\n                </label>\n                <clr-signpost *ngIf=\"hint\">\n                    <clr-signpost-content [clrPosition]=\"hintPosition\" *clrIfOpen>\n                        <p>{{ hint }}</p>\n                    </clr-signpost-content>\n                </clr-signpost>\n            </div>\n            <span class=\"clr-subtext\" *ngIf=\"showErrors\" [id]=\"errorsId\">\n                <div *ngFor=\"let key of errorKeys\">\n                    <div>{{ key | translate: formControl.value }}</div>\n                </div>\n            </span>\n            <span class=\"clr-subtext\" *ngIf=\"!showErrors && description\" [id]=\"descriptionId\">\n                {{ description }}\n            </span>\n        </div>\n    </div>\n    <span class=\"clr-subtext\">\n        <ng-content select=\"footer\"></ng-content>\n    </span>\n</div>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport {\n    AfterViewInit,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    Optional,\n    Output,\n    Self,\n    ViewChild,\n} from \"@angular/core\";\nimport { AbstractControl, FormControl, NgControl, ValidationErrors } from \"@angular/forms\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { BaseFormControl, defaultValidatorForControl } from \"../base-form-control\";\n\n/**\n * A {@link FormControl} that contains an input that supports string, number and datetime-local input types\n *\n * Example:\n *      <vcd-form-input\n *          type=\"number\"\n *          [formControlName]=\"Fields.port\"\n *          [placeholder]=\"'port'|translate\"\n *          [label]=\"'network.services.firewall.sourcePort'|translate\">\n *      </vcd-form-input>\n */\n@Component({\n    selector: \"vcd-form-input\",\n    templateUrl: \"./form-input.component.html\",\n    styleUrls: [\"../form.scss\", \"./form-input.component.scss\"],\n})\nexport class FormInputComponent extends BaseFormControl<string | number | Date> implements AfterViewInit {\n    /**\n     * Input 'placeholder' field.\n     */\n    @Input() placeholder: string = null;\n\n    /**\n     * Minimum value allowed.\n     * (This is an input specified in the component attribute.)\n     */\n    @Input() min: number = Number.MIN_SAFE_INTEGER;\n\n    /**\n     * Maximum value allowed.\n     * (This is an input specified in the component attribute.)\n     */\n    @Input() max: number = Number.MAX_SAFE_INTEGER;\n\n    /**\n     * Input 'type' field.\n     */\n    @Input() type = \"text\";\n\n    /**\n     * Input 'size' field.\n     */\n    @Input() size: number = null;\n\n    /**\n     * Maximum number of characters (in UTF-16 code units) that the user can enter.\n     */\n    @Input() maxlength: number = null;\n\n    /**\n     * The direction for displaying the hint\n     */\n    @Input() hintPosition = \"top-left\";\n\n    /**\n     * Hint to display in the content of a signpost\n     */\n    @Input() hint: string;\n\n    /**\n     * The input field element\n     */\n    @ViewChild(\"textInput\", { static: true }) textInput: ElementRef;\n\n    /**\n     * Emitted when enter key is released for callers to handle the event like... closing a filter widget\n     * {@link DatagridNumericFilterComponent.close}\n     */\n    @Output() enterClicked = new EventEmitter<boolean>(false);\n\n    /**\n     * Emitted when escape key is released for callers to handle the event\n     */\n    @Output() escapeClicked = new EventEmitter<boolean>(false);\n\n    constructor(\n        @Self() @Optional() controlDirective: NgControl,\n        protected translationService: TranslationService\n    ) {\n        super(controlDirective, translationService);\n    }\n\n    /**\n     * Input fields in the vcd-ui app does not support IME input on chrome browser. So in order to fix it, the value\n     * being assigned to the form control has to be given to the input HTML element's value using the 'viewChild' query\n     * selector inside writeValue function.\n     */\n    writeValue(value: any): void {\n        // The textInput view child element is undefined the first time. So, the initial value is stored in a variable\n        // to assign it later to the input field value.\n        this.initialValue = value;\n        if (!this.textInput) {\n            return;\n        }\n\n        if (typeof value === \"number\") {\n            value = value.toString(10);\n        }\n        if (this.type === \"datetime-local\") {\n            value = getFormattedDateValue(value);\n        }\n        this.textInput.nativeElement.value = value;\n    }\n\n    ngAfterViewInit(): void {\n        // The textInput view child element is only defined after this life cycle hook. So, the writeValue is called\n        // here.\n        this.writeValue(this.initialValue);\n        if (this.type === \"number\") {\n            defaultValidatorForControl(this.formControl, () => this.validateNumber());\n        }\n    }\n\n    inputChanged(): void {\n        const value = this.textInput.nativeElement.value;\n        this.initialValue = value;\n\n        if (this.type === \"number\") {\n            if (!value) {\n                this.onChange(value);\n            } else {\n                this.onChange(parseFloat(value));\n            }\n            return;\n        }\n        if (this.type === \"datetime-local\" && value !== \"\") {\n            const isoDateValue = new Date(getFormattedDateValue(value)).toISOString();\n            this.onChange(isoDateValue);\n            return;\n        }\n        this.onChange(value);\n    }\n\n    /**\n     * Move the focus to the input element.\n     * Its content is also selected for quick editing.\n     */\n    focus(): void {\n        if (!this.textInput) {\n            return;\n        }\n        this.textInput.nativeElement.focus();\n        this.textInput.nativeElement.select();\n    }\n\n    /**\n     * Default validator that looks at the input's [validity](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState)\n     */\n    validateNumber(): ValidationErrors {\n        return this.textInput?.nativeElement.validity.badInput ? { \"vcd.cc.bad.input\": true } : null;\n    }\n}\n\n/**\n * To format a date string into a value which can be given to the input html element\n */\nexport function getFormattedDateValue(value: string): string {\n    const date = new Date(value);\n    return (\n        date.getFullYear() +\n        \"-\" +\n        pad(date.getMonth() + 1) +\n        \"-\" +\n        pad(date.getDate()) +\n        \"T\" +\n        pad(date.getHours()) +\n        \":\" +\n        pad(date.getMinutes())\n    );\n}\n\nexport function pad(num: number): string | number {\n    if (num < 10) {\n        return \"0\" + num;\n    }\n    return num;\n}\n","<div class=\"form-group\">\n    <div\n        class=\"clr-form-control\"\n        [vcdResponsiveInput]=\"{ disabled: !isResponsive }\"\n        [ngClass]=\"{ 'clr-form-control-disabled': disabled }\"\n    >\n        <label *ngIf=\"!hideLabel\" class=\"clr-control-label\" [for]=\"id\" [ngClass]=\"{ 'required-field': showAsterisk }\">{{\n            label\n        }}</label>\n        <div class=\"clr-control-container\" [ngClass]=\"{ 'clr-error': showErrors }\">\n            <div class=\"clr-input-wrapper\">\n                <input\n                    [attr.type]=\"type\"\n                    [id]=\"id\"\n                    class=\"clr-input\"\n                    #textInput\n                    (input)=\"inputChanged()\"\n                    [disabled]=\"disabled || isReadOnly\"\n                    [attr.placeholder]=\"placeholder\"\n                    [attr.size]=\"size\"\n                    [min]=\"min\"\n                    [max]=\"max\"\n                    [attr.aria-label]=\"!hideLabel ? null : label\"\n                    [attr.maxlength]=\"maxlength\"\n                    [attr.aria-required]=\"showAsterisk\"\n                    [attr.aria-describedby]=\"showErrors ? errorsId : descriptionId\"\n                    (blur)=\"inputChanged()\"\n                    (keyup.enter)=\"enterClicked.emit(true)\"\n                    (keyup.escape)=\"escapeClicked.emit(true)\"\n                />\n                <cds-icon *ngIf=\"showErrors && !hint\" class=\"clr-validate-icon\" shape=\"exclamation-circle\"></cds-icon>\n                <ng-content select=\"aside\"></ng-content>\n                <clr-signpost *ngIf=\"hint\">\n                    <clr-signpost-content [clrPosition]=\"hintPosition\" *clrIfOpen>\n                        <p>{{ hint }}</p>\n                    </clr-signpost-content>\n                </clr-signpost>\n            </div>\n            <span class=\"clr-subtext\" *ngIf=\"showErrors\" [id]=\"errorsId\">\n                <div *ngFor=\"let key of errorKeys\">\n                    <div>{{ key | translate: formControl.value : min.toString() : max }}</div>\n                </div>\n            </span>\n            <span class=\"clr-subtext\" *ngIf=\"!showErrors && description\" [id]=\"descriptionId\">\n                {{ description }}\n            </span>\n        </div>\n    </div>\n</div>\n<div class=\"clr-subtext\">\n    <ng-content select=\"footer\"></ng-content>\n</div>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { trigger } from \"@angular/animations\";\nimport { Component, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl } from \"@angular/forms\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { SelectOption } from \"../../common/interfaces/select-option\";\nimport { BaseFormControl } from \"../base-form-control\";\n\n/**\n * {@link FormControl} wrapper around a select HTML element\n */\n@Component({\n    animations: [trigger(\"\", [])],\n    selector: \"vcd-form-select\",\n    templateUrl: \"form-select.component.html\",\n    styleUrls: [\"../form.scss\", \"./form-select.component.scss\"],\n})\nexport class FormSelectComponent extends BaseFormControl<string | number> {\n    /**\n     * The displayed options for the select element\n     */\n    @Input() options: SelectOption[] = [];\n\n    /**\n     * The direction for displaying the hint\n     */\n    @Input() hintPosition = \"top-left\";\n\n    /**\n     * Hint to display in the content of a signpost\n     */\n    @Input() hint: string;\n\n    constructor(\n        @Self() @Optional() ngControl: NgControl,\n        protected translationService: TranslationService\n    ) {\n        super(ngControl, translationService);\n    }\n\n    get selectedOption(): SelectOption {\n        if (!this.options || this.formControl.value === null || this.formControl.value === undefined) {\n            return undefined;\n        }\n        // option.value and formControl.value can be of type number or string\n        return this.options.find((option) => option.value.toString() === this.formControl.value.toString());\n    }\n}\n","<div class=\"form-group\">\n    <div\n        class=\"clr-form-control\"\n        [vcdResponsiveInput]=\"{ disabled: !isResponsive }\"\n        [ngClass]=\"{ 'clr-form-control-disabled': disabled }\"\n    >\n        <label *ngIf=\"!hideLabel\" [for]=\"id\" class=\"clr-control-label\" [ngClass]=\"{ 'required-field': showAsterisk }\">{{\n            label\n        }}</label>\n        <span *ngIf=\"isReadOnly && selectedOption\" class=\"readOnly\">\n            {{ selectedOption.isTranslatable ? (selectedOption.display | translate) : selectedOption.display }}\n        </span>\n        <div class=\"clr-control-container\" [ngClass]=\"{ 'clr-error': showErrors }\">\n            <div class=\"clr-select-wrapper\" [ngClass]=\"{ 'showing-hint': !!hint }\" *ngIf=\"!isReadOnly\">\n                <select\n                    class=\"clr-select\"\n                    [id]=\"id\"\n                    [attr.aria-label]=\"!hideLabel ? null : label\"\n                    [attr.aria-required]=\"showAsterisk\"\n                    [attr.aria-describedby]=\"showErrors ? errorsId : descriptionId\"\n                    [formControl]=\"formControl\"\n                >\n                    <option *ngFor=\"let option of options\" [value]=\"option.value\" [disabled]=\"option.disabled\">\n                        {{ option.isTranslatable ? (option.display | translate) : option.display }}\n                    </option>\n                </select>\n                <cds-icon *ngIf=\"showErrors\" class=\"clr-validate-icon\" shape=\"exclamation-circle\"></cds-icon>\n            </div>\n\n            <ng-content select=\"aside\"></ng-content>\n\n            <clr-signpost *ngIf=\"hint && !showErrors\">\n                <clr-signpost-content [clrPosition]=\"hintPosition\" *clrIfOpen>\n                    <p>{{ hint }}</p>\n                </clr-signpost-content>\n            </clr-signpost>\n\n            <span class=\"clr-subtext\" *ngIf=\"showErrors\" [id]=\"errorsId\">\n                <div *ngFor=\"let error of translatedErrors\">\n                    <div>{{ error }}</div>\n                </div>\n            </span>\n\n            <span class=\"clr-subtext\" *ngIf=\"!showErrors && description\" [id]=\"descriptionId\">\n                {{ description }}\n            </span>\n        </div>\n    </div>\n    <span class=\"clr-subtext\">\n        <ng-content select=\"footer\"></ng-content>\n    </span>\n</div>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { FormControl, ValidatorFn, Validators } from \"@angular/forms\";\n\n/**\n * validators used for form control validations.\n */\nexport class FormValidators {\n    /**\n     * A wrapper that validates that a control's value is defined before running the validator function.\n     *\n     * @param validator The validator function to run if the control's value is defined.\n     */\n    static createNullSafeValidator(validator: (...args: any[]) => unknown): ValidatorFn {\n        const res = (control: FormControl): unknown => {\n            if (Validators.required(control)) {\n                return null;\n            }\n            return validator(control);\n        };\n        return res;\n    }\n\n    /**\n     * Create a validator that requires a number to be within a range.\n     * Also checks that the value is numeric\n     * Accepts a translation key to display proper error messaging\n     */\n    static isNumberInRange(min: number, max: number, translationKey = \"vcd.cc.warning.numRange\"): ValidatorFn {\n        const res = FormValidators.createNullSafeValidator((control: any) => {\n            const isNumber = !isNaN(parseFloat(control.value)) && isFinite(control.value);\n            return control.value >= min && control.value <= max && isNumber ? null : { [translationKey]: true };\n        });\n        return res;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Injectable,\n    Input,\n    OnChanges,\n    OnInit,\n    Optional,\n    Self,\n    SimpleChanges,\n    ViewChild,\n} from \"@angular/core\";\nimport { NgControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { SelectOption } from \"../../common/interfaces\";\nimport { FormValidators } from \"../../form/validators\";\nimport { Unit } from \"../../utils/unit/unit\";\nimport { UnitFormatter } from \"../../utils/unit/unit-formatter\";\nimport { BaseFormControl, defaultValidatorForControl } from \"../base-form-control\";\nimport { LazyString } from \"../../utils/types\";\nimport { CommonUtil } from \"../../utils\";\n\n/**\n * -1 is the number to specify a value of unlimited.\n */\nexport const UNLIMITED = -1;\n\n/**\n * A numerical form input component with unit selection and unlimited checkbox.\n *\n * If a single element array is provided for the units, then there is no unit selection\n * but rather a string notation for the unit. If the array is empty then there are no units at all.\n *\n * The display of unlimited checkbox is configurable.\n */\n@Component({\n    selector: \"vcd-number-with-unit-form-input\",\n    templateUrl: \"./number-with-unit-form-input.component.html\",\n    styleUrls: [\"../form.scss\", \"./number-with-unit-form-input.component.scss\"],\n})\nexport class NumberWithUnitFormInputComponent extends BaseFormControl<number> implements OnChanges, OnInit {\n    /**\n     * List of available units. Consider the following options for the array:\n     * # array with more than one element\n     *    - a dropdown unit selection is shown. You must also provide {@link inputValueUnit}\n     * # single element array\n     *    - a string notation for no dropdown, {@link inputValueUnit} is derived from the element\n     * # empty array\n     *    - no units at all\n     */\n    @Input()\n    set unitOptions(unitOptions: Unit[]) {\n        this._unitOptions = unitOptions || [];\n\n        if (this._unitOptions.length === 1) {\n            this.inputValueUnit = this._unitOptions[0];\n        }\n\n        this.comboOptionUnitMap.clear();\n        this.comboOptions = [];\n        this._unitOptions.forEach((unitOption: Unit) => {\n            const comboOption: SelectOption = {\n                display: unitOption.getUnitNameTranslationKey(),\n                value: unitOption.getMultiplier(),\n                isTranslatable: true,\n            };\n            this.comboOptionUnitMap.set(comboOption, unitOption);\n            this.comboOptions.push(comboOption);\n        });\n    }\n\n    get unitOptions(): Unit[] {\n        return this._unitOptions;\n    }\n\n    /**\n     * The base unit of the component. The value of this FormControl is calculated based on this property.\n     * Required when a multi element array is provided for {@link unitOptions} and it should be one of those values.\n     */\n    @Input() inputValueUnit: Unit;\n\n    /**\n     * The initial display unit.\n     * This is useful if you want to prevent finding best match when displaying a value for the first time.\n     * For example if you provide 1024 MB and you want it to be displayed as 1024MB instead of 1GB\n     */\n    @Input() initialValueUnit: Unit;\n\n    /**\n     * Show the Unlimited checkbox. Can be set just once only at render time.\n     */\n    @Input() showUnlimitedOption = true;\n\n    /**\n     * The value when the component is set to unlimited. Default is -1.\n     */\n    @Input() unlimitedValue: number = UNLIMITED;\n\n    /**\n     * Text to be shown for the unlimited checkbox.\n     * Optional.\n     * Default is the translation of vcd.cc.unlimited key.\n     */\n    @Input() unlimitedText: LazyString = this.translationService.translateAsync(\"vcd.cc.unlimited\");\n\n    /**\n     * Minimum value allowed relevant to {@link inputValueUnit}. Default is 0.\n     */\n    @Input() min = 0;\n\n    /**\n     * Maximum value allowed relevant to {@link inputValueUnit}. Default is {@link Number.MAX_SAFE_INTEGER}.\n     */\n    @Input() max: number = Number.MAX_SAFE_INTEGER;\n\n    /**\n     * Input 'placeholder' field.\n     */\n    @Input() placeholder: string = null;\n\n    /**\n     * Input 'size' field.\n     */\n    @Input() size = 10;\n\n    /**\n     * Maximum number of characters (in UTF-16 code units) that the user can enter.\n     */\n    @Input() maxlength: number = null;\n\n    /**\n     * Hint to display in the content of a signpost\n     */\n    @Input() hint: string;\n\n    /**\n     * The direction for displaying the hint\n     */\n    @Input() hintPosition = \"top-left\";\n\n    private _unitOptions: Unit[] = [];\n\n    /**\n     * The input field element, where numbers are entered. Null if readonly.\n     */\n    @ViewChild(\"textInput\", { static: false }) textInput: ElementRef;\n\n    private get textInputEl(): HTMLInputElement {\n        return this.textInput?.nativeElement as HTMLInputElement;\n    }\n\n    /** ngModel for the number input */\n    textInputValue: string = null;\n\n    /** ngModel for the unit selector */\n    unitsControlValue: string = null;\n\n    /** ngModel for the unlimited checkbox */\n    unlimitedControlValue = false;\n\n    /**\n     * A drop down of available units\n     *\n     * This list is constructed from list of\n     * available units in {@link unitOptions}\n     */\n    comboOptions: SelectOption[] = [];\n\n    /**\n     * Map of SelectOption and Unit which is used to\n     * extract Unit for a given SelectOption.\n     */\n    private comboOptionUnitMap: Map<SelectOption, Unit> = new Map();\n\n    // Value set to the number input of the formGroup\n    private bestValue: number = null;\n\n    // Unit set to the selected dropdown select of the formGroup\n    private bestUnit: Unit;\n\n    /**\n     * The minimum value calculated from the {@link min} value converted to the currently selected unit\n     */\n    unitMin: number;\n\n    /**\n     * The maximum value calculated from the {@link max} value converted to the currently selected unit\n     */\n    unitMax: number;\n\n    /**\n     * This is the last text value for the input. Used in case when user toggles the unlimited checkbox twice in a row.\n     * When unlimited is checked the value of the input is cleared, then when toggled again, the input value should be\n     * set to the last value.\n     */\n    private lastTextValue = \"\";\n\n    /**\n     * Should this functionality be provided at the base class?\n     */\n    private ngOnInitCalled = false;\n\n    /**\n     * Set the unit in the dropdown.\n     * @param value Should be one of the value that you pass in {@link #unitOptions} to select the Unit.\n     */\n    set selectedUnit(value: number) {\n        this.unitsControlValue = value.toString();\n    }\n\n    constructor(\n        @Self() @Optional() controlDirective: NgControl,\n        protected translationService: TranslationService,\n        private unitFormatter: UnitFormatter,\n        private changeDetector: ChangeDetectorRef\n    ) {\n        super(controlDirective, translationService);\n    }\n\n    ngOnInit(): void {\n        this.ngOnInitCalled = true;\n\n        defaultValidatorForControl(this.formControl, () => this.validateNumber());\n\n        this.writeValue(this.initialValue as number);\n\n        this.recalculateUnitMinMax();\n    }\n\n    /**\n     * Fires a change event reading the value from the current state of the UI\n     */\n    fireUiChange(): void {\n        this.onChange(this.getValue());\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.recalculateUnitMinMax();\n    }\n\n    onUnlimitedCheckboxChange(unlimitedChecked: boolean): void {\n        this.unlimitedControlValue = unlimitedChecked;\n\n        // If there is no unit currently selected, we need to writeValue to recalculate everything.\n        if (!this.unitsControlValue && !unlimitedChecked) {\n            this.writeValue(this.getValue());\n        }\n\n        if (!unlimitedChecked) {\n            // Usability requirements imply the focus to be on the input element when 'unlimited checkbox' is\n            // deselected in order to be easier for the user to modify the value.\n            this.changeDetector.detectChanges();\n            this.textInputEl.focus();\n            this.textInputEl.select();\n            this.textInputValue = this.lastTextValue;\n        } else {\n            this.lastTextValue = this.textInputValue;\n            this.textInputValue = \"\";\n        }\n        this.fireUiChange();\n    }\n\n    /**\n     * Called when the unit dropdown changes\n     */\n    onUnitChange(value: string): void {\n        this.unitsControlValue = value;\n        this.recalculateUnitMinMax();\n        this.fireUiChange();\n    }\n\n    /**\n     * Called when user types into the textfield\n     */\n    onTextInputChange(value: string): void {\n        this.textInputValue = value == null ? value : String(value);\n        this.fireUiChange();\n    }\n\n    // Boolean attributes expect true to add an attribute and null to remove the attribute\n    // which is why the return type is a bit funky\n    get shouldDisableNumberAndUnitControls(): true | null {\n        const shouldDisable = this.disabled || this.unlimitedControlValue;\n        return shouldDisable || null;\n    }\n\n    /**\n     * Whether the current value is unlimited\n     */\n    private isUnlimitedValue(value = this.formControl.value): boolean {\n        return value === this.unlimitedValue;\n    }\n\n    /**\n     * Delegate the number parsing to the number input\n     */\n    private validateNumber(): ValidationErrors {\n        if (this.isUnlimitedValue()) {\n            return null;\n        }\n        return this.textInputEl?.validity.badInput ? { \"vcd.cc.bad.input\": true } : null;\n    }\n\n    writeValue(value: number): void {\n        // This gets called before ngOnInit. Store the value and we'll call it\n        // again from ngOnInit so that `@Input` parameters will be set\n        if (!this.ngOnInitCalled) {\n            this.initialValue = value;\n            return;\n        }\n\n        if (this.initialValueUnit) {\n            this.bestUnit = this.initialValueUnit;\n            this.bestValue = value ? this.inputValueUnit.getOutputValue(value, this.bestUnit) : null;\n            // So that defaulting the best unit only happens once\n            this.initialValueUnit = null;\n        } else {\n            this.computeBestUnitAndValue(value as number);\n        }\n\n        if (!this.isUnlimitedValue(value)) {\n            if (Number.isFinite(this.bestValue)) {\n                this.textInputValue = this.bestValue.toString();\n                this.lastTextValue = this.textInputValue;\n            } else {\n                this.textInputValue = \"\";\n            }\n\n            if (this.bestUnit) {\n                this.unitsControlValue = this.bestUnit.getMultiplier().toString();\n            }\n        } else {\n            this.textInputValue = \"\";\n        }\n\n        if (this.showUnlimitedOption) {\n            this.unlimitedControlValue = this.isUnlimitedValue(value);\n        }\n    }\n\n    /**\n     * Toggles the unlimited checkbox if the formValue is the unlimited value.\n     */\n    updateUnlimitedCheckbox(): void {\n        if (this.getValue() === this.unlimitedValue && !this.unlimitedControlValue && this.showUnlimitedOption) {\n            this.onUnlimitedCheckboxChange(true);\n        }\n    }\n\n    private computeBestUnitAndValue(value: number): void {\n        // Nothing to do when setting to unlimited\n        if (this.isUnlimitedValue(value)) {\n            return;\n        }\n        if (this.unitOptions.length === 0) {\n            this.bestValue = value;\n            this.bestUnit = NoUnit.INSTANCE;\n        } else if (value === null) {\n            this.bestValue = null;\n            this.bestUnit = this.unitOptions[0];\n        } else {\n            this.bestUnit = this.inputValueUnit.findBestUnit(value, this.unitOptions);\n            this.bestValue = this.inputValueUnit.getOutputValue(value, this.bestUnit);\n        }\n    }\n\n    /**\n     * Figures out the control value accessor's value based on the UI state\n     */\n    private getValue(): number {\n        if (this.unlimitedControlValue) {\n            return this.unlimitedValue;\n        }\n\n        const value = this.textInputValue;\n\n        if (value === \"\" || value === null) {\n            return null;\n        }\n\n        if (this.unitOptions.length) {\n            return this.getSelectedUnit().getOutputValue(value, this.inputValueUnit);\n        }\n        return Number(value);\n    }\n\n    /**\n     * Reads the selected unit from the UI\n     */\n    private getSelectedUnit(): Unit {\n        const value = Number(this.unitsControlValue);\n        const selectedComboUnit = this.getSelectedComboUnit(value);\n        return this.comboOptionUnitMap.get(selectedComboUnit);\n    }\n\n    /**\n     * Returns the SelectOption for the given value\n     * @param value The value which we're trying to match within the component's combo options\n     */\n    private getSelectedComboUnit(value: number): SelectOption {\n        return this.comboOptions.find((co) => Number(co.value) === value);\n    }\n\n    private recalculateUnitMinMax(): void {\n        const selectedUnit = this.getSelectedUnit();\n        if (!this.inputValueUnit || !selectedUnit) {\n            [this.unitMin, this.unitMax] = [this.min, this.max];\n            return;\n        }\n        this.unitMin = this.inputValueUnit.getOutputValue(this.min, selectedUnit);\n        this.unitMax = this.inputValueUnit.getOutputValue(this.max, selectedUnit);\n    }\n\n    /**\n     * Returns the display value for the selected number/unit\n     * Returns an empty string if the element is currently set to unlimited\n     */\n    get displayValue(): string {\n        // This was used in tests before to make sure we displayed a custom message\n        // However, since the word for unlimited can be translated, it must be a LazyString\n        // which is returned from `TranslationService.translateAsync()`\n        // However, tests can't really use a LazyString, they are only intended to be used from\n        // templates with the lazyString pipe\n        if (this.unlimitedControlValue) {\n            return \"\";\n        }\n\n        if (!CommonUtil.isNumericString(this.textInputValue)) {\n            return \"\";\n        }\n\n        const value = Number(this.textInputValue);\n\n        if (this.unitOptions.length > 1) {\n            // Return the value and the selected unit.\n            const unitValue = Number(this.unitsControlValue);\n\n            const displayComboUnit = this.comboOptions.find(\n                // eslint-disable-next-line eqeqeq\n                (co) => co.value == unitValue\n            );\n            const inputUnit: Unit = this.comboOptionUnitMap.get(displayComboUnit);\n            return this.unitFormatter.bestFormat(value, inputUnit, this.unitOptions);\n        }\n\n        if (this.unitOptions.length === 1) {\n            // Return the value and the predefined unit. For example, 100 %.\n            return this.unitFormatter.bestFormat(value, this.unitOptions[0], this.unitOptions);\n        }\n\n        // Return only the value when unitOptions was not set.\n        return value.toString();\n    }\n\n    /**\n     * @returns errors in format `{ [key]: any }` where the key value of any can be either\n     * an array for positional based message format or `{msgKey: string}` for a named message format.\n     * @see ValidationErrors.\n     */\n    get errors(): ValidationErrors {\n        if (this.errorLabels.length) {\n            return this.errorLabels.reduce((acc, cur) => ({ ...acc, [cur]: true }), {});\n        }\n        return this.formControl.errors;\n    }\n\n    getErrorTranslationParams(errorObjectValue: any): any {\n        // `errorObjectValue === true` is the 'old' case see comments for `errors`\n        if (!errorObjectValue || errorObjectValue === true) {\n            return [this.getValue(), this.min.toString(), this.max.toString()];\n        }\n        return errorObjectValue;\n    }\n}\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class NumberWithUnitsFormValidatorsFactory {\n    constructor(private unitFormatter: UnitFormatter) {}\n\n    public isInRange(\n        min: number,\n        max: number,\n        inputUnit: Unit,\n        availableUnits: Unit[],\n        unlimited: number = -1\n    ): ValidatorFn {\n        return FormValidators.createNullSafeValidator((control: any) => {\n            const value = control.value;\n\n            const isNumber = !isNaN(Number(control.value)) && isFinite(control.value);\n            if (isNumber) {\n                if (value >= min && value <= max) {\n                    return null;\n                }\n                if (unlimited !== null && value === unlimited) {\n                    return null;\n                }\n            }\n\n            if (inputUnit && availableUnits && availableUnits.length) {\n                const minString = this.unitFormatter.bestFormat(min, inputUnit, availableUnits);\n                const maxString = this.unitFormatter.bestFormat(max, inputUnit, availableUnits);\n\n                return { \"vcd.cc.warning.numRange\": [value, minString, maxString] };\n            }\n\n            return { \"vcd.cc.warning.numRange\": [value, min, max] };\n        });\n    }\n}\n\nclass NoUnit extends Unit {\n    public static readonly INSTANCE = new NoUnit(1, \"\");\n    findBestUnit(value: number, availableUnits: Unit[]): Unit {\n        return NoUnit.INSTANCE;\n    }\n\n    getUnitNameTranslationKey(): string {\n        return \"\";\n    }\n\n    getValueWithUnitTranslationKey(): string {\n        return \"{0}\";\n    }\n}\n","<div class=\"clr-form-control\" [vcdResponsiveInput]=\"{ disabled: !isResponsive }\" *ngIf=\"isReadOnly\">\n    <!-- eslint-disable-next-line  @angular-eslint/template/label-has-associated-control -->\n    <label *ngIf=\"label\" class=\"clr-control-label\">{{ label }}</label>\n    <span class=\"clr-control-container readonly-text\">{{ displayValue || (unlimitedText | lazyString) }}</span>\n</div>\n\n<div *ngIf=\"!isReadOnly\">\n    <div\n        class=\"clr-form-control\"\n        [ngClass]=\"{ 'clr-form-control-disabled': disabled }\"\n        [vcdResponsiveInput]=\"{ disabled: !isResponsive }\"\n    >\n        <label *ngIf=\"label\" class=\"clr-control-label\" [for]=\"id\" [ngClass]=\"{ 'required-field': showAsterisk }\">{{\n            label\n        }}</label>\n        <div class=\"clr-control-container\" [ngClass]=\"{ 'clr-error': showErrors }\">\n            <div class=\"clr-input-wrapper\">\n                <input\n                    [id]=\"id\"\n                    class=\"clr-input\"\n                    type=\"number\"\n                    [min]=\"unitMin\"\n                    [max]=\"unitMax\"\n                    #textInput\n                    (ngModelChange)=\"onTextInputChange($event)\"\n                    [ngModel]=\"textInputValue\"\n                    [attr.disabled]=\"shouldDisableNumberAndUnitControls\"\n                    [attr.placeholder]=\"placeholder\"\n                    [attr.size]=\"size\"\n                    [attr.aria-required]=\"showAsterisk\"\n                    [attr.aria-describedby]=\"showErrors ? errorsId : descriptionId\"\n                    (blur)=\"updateUnlimitedCheckbox()\"\n                />\n                <ng-container [ngSwitch]=\"unitOptions.length\">\n                    <ng-container *ngSwitchCase=\"0\">\n                        <!-- Do not display unit -->\n                    </ng-container>\n                    <div class=\"single-option\" *ngSwitchCase=\"1\">\n                        {{ unitOptions[0].getUnitNameTranslationKey() | translate }}\n                    </div>\n\n                    <div class=\"clr-select-wrapper\" *ngSwitchDefault>\n                        <select\n                            [id]=\"id + 'unit'\"\n                            (ngModelChange)=\"onUnitChange($event)\"\n                            [ngModel]=\"unitsControlValue\"\n                            [attr.disabled]=\"shouldDisableNumberAndUnitControls\"\n                        >\n                            <option *ngFor=\"let option of comboOptions\" [value]=\"option.value\">\n                                {{ option.isTranslatable ? (option.display | translate) : option.display }}\n                            </option>\n                        </select>\n                    </div>\n                </ng-container>\n                <cds-icon *ngIf=\"showErrors\" class=\"clr-validate-icon\" shape=\"exclamation-circle\"></cds-icon>\n                <clr-signpost *ngIf=\"hint\">\n                    <clr-signpost-content [clrPosition]=\"hintPosition\" *clrIfOpen>\n                        <p>{{ hint }}</p>\n                    </clr-signpost-content>\n                </clr-signpost>\n            </div>\n            <div class=\"clr-subtext\" *ngIf=\"showErrors\" [id]=\"errorsId\">\n                <div *ngFor=\"let error of errors | keyvalue\">\n                    <div>{{ error.key | translate: getErrorTranslationParams(error.value) }}</div>\n                </div>\n            </div>\n            <div class=\"clr-subtext\" *ngIf=\"!showErrors && description\" [id]=\"descriptionId\">\n                {{ description }}\n            </div>\n\n            <div\n                *ngIf=\"showUnlimitedOption\"\n                class=\"clr-checkbox-wrapper\"\n                [ngClass]=\"{ 'clr-form-control-disabled': disabled }\"\n            >\n                <input\n                    type=\"checkbox\"\n                    class=\"clr-checkbox\"\n                    [attr.disabled]=\"disabled || null\"\n                    [id]=\"id + 'checkbox'\"\n                    (ngModelChange)=\"onUnlimitedCheckboxChange($event)\"\n                    [ngModel]=\"unlimitedControlValue\"\n                />\n                <label class=\"clr-control-label\" [for]=\"id + 'checkbox'\">{{ unlimitedText | lazyString }}</label>\n            </div>\n        </div>\n    </div>\n</div>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { AlternativeTextModule } from \"../lib/directives/alternative-text/alternative-text.module\";\nimport { ResponsiveInputDirectiveModule } from \"../lib/directives/responsive-input/responsive-input.module\";\nimport { IconsModule } from \"../lib/icons\";\nimport { UnitFormatter } from \"../utils/unit/unit-formatter\";\nimport { FormCheckboxComponent } from \"./form-checkbox/form-checkbox.component\";\nimport { FormInputComponent } from \"./form-input/form-input.component\";\nimport { FormSelectComponent } from \"./form-select/form-select.component\";\nimport { NumberWithUnitFormInputComponent } from \"./number-with-unit-input/number-with-unit-form-input.component\";\n\nconst declarations = [FormInputComponent, FormSelectComponent, FormCheckboxComponent, NumberWithUnitFormInputComponent];\n\n@NgModule({\n    imports: [\n        ClarityModule,\n        FormsModule,\n        ReactiveFormsModule.withConfig({\n            callSetDisabledState: \"whenDisabledForLegacyCode\",\n        }),\n        CommonModule,\n        I18nModule,\n        ResponsiveInputDirectiveModule,\n        AlternativeTextModule,\n        IconsModule,\n    ],\n    declarations,\n    providers: [UnitFormatter],\n    exports: [...declarations, ResponsiveInputDirectiveModule],\n})\nexport class VcdFormModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport {\n    ActionStyling,\n    ContextualActionDropdownDisplayConfig,\n    ContextualActionInlineDisplayConfig,\n    TextIcon,\n} from \"../../common/interfaces\";\nimport { DatagridContextualActionPosition } from \"../datagrid.component\";\n\n/**\n * Makes the featured count as required when action menu is displayed as a dropdown and also adds the position\n * at which the actions have to displayed in a datagrid\n */\ninterface DatagridContextualActionDropdownDisplayConfig extends ContextualActionDropdownDisplayConfig {\n    /**\n     * An enum that describes where the contextual buttons should display.\n     * If not specified, this defaults to {@link DatagridContextualActionPosition.TOP}\n     */\n    position?: DatagridContextualActionPosition;\n}\n\n/**\n * Makes the featured count as required when action menu is displayed as a inline bar and also adds the position\n * at which the actions have to displayed in a datagrid\n */\ninterface DatagridContextualActionInlineDisplayConfig extends ContextualActionInlineDisplayConfig {\n    /**\n     * An enum that describes where the contextual buttons should display.\n     * If not specified, this defaults to {@link DatagridContextualActionPosition.TOP}\n     */\n    position?: DatagridContextualActionPosition;\n}\n\n/**\n * Display configuration for actions that are displayed in a datagrid\n */\nexport interface DatagridActionDisplayConfig {\n    /**\n     * How the contextual actions list shows up on the screen\n     */\n    contextual?: DatagridContextualActionDropdownDisplayConfig | DatagridContextualActionInlineDisplayConfig;\n\n    /**\n     * How the static actions list shows up on the screen\n     */\n    staticActionStyling?: ActionStyling;\n}\n\n/**\n * To add default values to configs if they are not provided by the caller in the input config\n */\nexport function getDefaultDatagridActionDisplayConfig(\n    cfg: DatagridActionDisplayConfig = {}\n): DatagridActionDisplayConfig {\n    const defaults = {\n        contextual: {\n            styling: ActionStyling.INLINE,\n            buttonContents: TextIcon.TEXT,\n            position: DatagridContextualActionPosition.TOP,\n        },\n        staticActionStyling: ActionStyling.INLINE,\n    };\n    return {\n        contextual: { ...defaults.contextual, ...cfg.contextual },\n        staticActionStyling: cfg.staticActionStyling || defaults.staticActionStyling,\n    };\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CliptextConfig } from \"../../lib/directives/show-clipped-text.directive\";\nimport { FilterConfig, FilterRendererSpec } from \"../filters/datagrid-filter\";\nimport { ComponentRendererConstructor, ComponentRendererSpec } from \"./component-renderer.interface\";\n\nexport enum GridColumnHideable {\n    /**\n     * Does not show up in column toggle box\n     */\n    Never = \"NEVER\",\n    /**\n     * Shows up in column toggle box, column is visible\n     */\n    Shown = \"SHOWN\",\n    /**\n     * Shows up in column toggle box, column is hidden\n     */\n    Hidden = \"HIDDEN\",\n}\n\n/**\n * Column renderer as a function. Defined in calling component when the cell value is calculated from different\n * properties.\n * @param record The record for the row being rendered\n * @return The string to be displayed for that cell\n */\nexport interface FunctionRenderer<T> {\n    (record: T): string;\n}\n\n/**\n * Renderer specification of a column that contains component type to be rendered in the cell and configuration for that\n * component. used by the {@link ComponentRendererOutletDirective}\n */\nexport interface ColumnRendererSpec<R, C> extends ComponentRendererSpec<C> {\n    /**\n     * A function that creates a config object required for the configuration of component that will be rendered in the column\n     * @param record An object to be transformed into {@link ComponentRenderer#config}. It's passed in by the calling\n     * component\n     */\n    config: (record?: R) => C;\n}\n\n/**\n * Configuration object defined in the caller. This contains properties for the column header (text, filtering,\n * sorting, toggling etc.,) and content for row cells.\n *\n * Example:\n * const gridColumn: GridColumn<SomeRecord> = {\n *   displayName: \"Column Heading\",\n *   renderer: \"someRecord.property\",\n *   hideable: \"NEVER\"\n * }\n *\n * The above column is rendered with \"Column Heading\" text in it's heading and it is not shown in the column toggler.\n * The value of the property \"someRecord.property\" is rendered in cells corresponding to the column.\n */\nexport interface GridColumn<R> {\n    /**\n     * Header text for the column\n     */\n    displayName: string;\n\n    /**\n     * Used for sorting/filtering. Not needed for columns not filterable/sortable\n     * TODO: do we need to support array type for querying across multiple columns?\n     */\n    queryFieldName?: string;\n\n    /**\n     * If the renderer passed in is a\n     * - string: Used as default renderer. Can be a dot separated string to identify a nested property of the item\n     * - {@link FunctionRenderer}: When you want to create a calculated column, but don't need custom HTML\n     * - TemplateRef: When custom HTML is needed and when it has to be passed in as a inline HTML\n     * - {@link ColumnRendererSpec}: When HTML is needed and when the HTML is provided as a component\n     */\n    renderer: string | FunctionRenderer<R> | ColumnRendererSpec<R, unknown>;\n\n    /**\n     * Whether the column shows up in the column toggler and if the column shows up, it reflects the toggle state\n     */\n    hideable?: GridColumnHideable;\n\n    /**\n     * When there is no data, show this message.\n     *\n     * Try to avoid showing this before initial load.\n     */\n    emptyColumnPlaceholder?: string;\n\n    /**\n     * TODO: Should this be made to work with top level search on grids across all columns?\n     *  The above to-do is going to be worked on as part of https://jira.eng.vmware.com/browse/VDUCC-27 and\n     */\n    filter?: FilterRendererSpec<FilterConfig<unknown>>;\n\n    /**\n     * The configuration for the cliptext in the datagrid.\n     * Defaults to size: 'lg', mouseoutDelay: undefined.\n     * If null, will disable cliptext\n     */\n    cliptextConfig?: CliptextConfig;\n\n    /**\n     * Whether to show the column as sortable. Defaults to true\n     */\n    sortable?: boolean;\n\n    /**\n     * The class of the column header.\n     */\n    clrDgColumnClassName?: string;\n}\n\n/**\n * Utility function to enforce type safety on config object of components of {@link ComponentRenderer} type. Used for creating\n * component renderer specification of {@link ColumnRendererSpec} type\n *\n * Example usage:\n * const gridColumn = {\n *   renderer: ColumnComponentRendererSpec({type: BoldTextRendererComponent, config: record => ({text: ''})\n * }\n *\n * In the above example this method helps in making sure that:\n * - Value \"v\" returned by the config function is of BoldTextRendererConfig type for gridColumn.renderer\n *\n * #Note: 'C & {}' below makes the inference site for C be the constructor type from the first argument.\n * {@link https://stackoverflow.com/questions/59055154/typescript-generics-infer-type-from-the-type-of-function-arguments}\n */\nexport function ColumnComponentRendererSpec<R, C>(componentRendererSpec: {\n    type: ComponentRendererConstructor<C>;\n    config: (record?: R) => C & {};\n}): ColumnRendererSpec<R, C> {\n    return componentRendererSpec;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { ComponentFactoryResolver, ComponentRef, Directive, Input, ViewContainerRef } from \"@angular/core\";\nimport {\n    ComponentRenderer,\n    ComponentRendererConstructor,\n    ComponentRendererSpec,\n} from \"../interfaces/component-renderer.interface\";\n\n/**\n * Component that acts as a host element for dynamic rendering of component constructors.\n * It takes {@link ComponentRendererSpec} and also 'context' as input in case of a {@link ColumnRendererSpec} that serves as argument for\n * {@link ColumnRendererSpec.config} method. Attaches the component to be rendered to the view container of host element\n * and updates it's configuration whenever changed.\n *\n * Example usage:\n * <ng-template\n *      [vcdComponentRendererOutlet]=\"{ rendererSpec: column.fieldColumnRendererSpec, context: restItem }\"\n * ></ng-template>\n *\n */\n@Directive({\n    selector: \"[vcdComponentRendererOutlet]\",\n})\nexport class ComponentRendererOutletDirective<R, T> {\n    private componentRef: ComponentRef<ComponentRenderer<T>>;\n    private componentType: ComponentRendererConstructor<T>;\n\n    constructor(\n        private viewContainerRef: ViewContainerRef,\n        private cfr: ComponentFactoryResolver\n    ) {}\n\n    /**\n     * Sets the component that this outlet should render. Where rendererSpec is the\n     * {@link ComponentRendererSpec} that details how to render the component and context\n     * is any information that the component needs to render.\n     */\n    @Input()\n    set vcdComponentRendererOutlet(renderer: { rendererSpec: ComponentRendererSpec<T>; context?: R }) {\n        if (this.componentType !== renderer.rendererSpec.type) {\n            // Cache the componentType to avoid redundant detaching and attaching of component to this host\n            this.componentType = renderer.rendererSpec.type;\n            this.componentRef = this.attachRenderer();\n        }\n        this.assignValue(renderer.rendererSpec.config, renderer.context);\n    }\n\n    /**\n     * Attaches the passed component type to the view of this directive host\n     */\n    private attachRenderer(): ComponentRef<ComponentRenderer<T>> {\n        if (this.componentRef) {\n            this.detachRenderer();\n        }\n        const componentFactory = this.cfr.resolveComponentFactory(this.componentType);\n        return this.viewContainerRef.createComponent(componentFactory);\n    }\n\n    /**\n     * Updates the configuration of instantiated component\n     */\n    private assignValue(config: ((r: R) => T) | T, context: R): void {\n        if (!this.componentRef || !this.componentRef.instance) {\n            return;\n        }\n        this.componentRef.instance.config = config instanceof Function ? config(context) : config;\n    }\n\n    private detachRenderer(): void {\n        this.viewContainerRef.remove();\n        this.componentRef = null;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\n/**\n * Used for executing the functions of column cells which use functions to calculate their values from different\n * properties of an object\n */\n@Pipe({\n    name: \"functionRenderer\",\n    pure: true,\n})\nexport class FunctionRendererPipe implements PipeTransform {\n    public transform(item: any, renderer: (val: any) => any): string {\n        if (!item || !renderer) {\n            return null;\n        }\n        return renderer(item);\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    Self,\n    TrackByFunction,\n    ViewChild,\n    ViewChildren,\n} from \"@angular/core\";\nimport { ClrDatagrid, ClrDatagridPagination, ClrDatagridStateInterface } from \"@clr/angular\";\nimport { LazyString, TranslationService } from \"@vcd/i18n\";\nimport { Observable } from \"rxjs\";\nimport { FormGroup } from \"@angular/forms\";\nimport { ActionMenuComponent } from \"../action-menu/action-menu.component\";\nimport { ActivityReporter } from \"../common/activity-reporter\";\nimport { ActionHandlerType, ActionItem, ActionStyling, ActionType } from \"../common/interfaces/action-item.interface\";\nimport { SubscriptionTracker } from \"../common/subscription/subscription-tracker\";\nimport { TooltipSize } from \"../lib/directives/show-clipped-text.directive\";\nimport { DatagridFilter } from \"./filters/datagrid-filter\";\nimport { ComponentRendererConstructor, ComponentRendererSpec } from \"./interfaces/component-renderer.interface\";\nimport {\n    DatagridActionDisplayConfig,\n    getDefaultDatagridActionDisplayConfig,\n} from \"./interfaces/datagrid-action-display.interface\";\nimport {\n    ColumnRendererSpec,\n    FunctionRenderer,\n    GridColumn,\n    GridColumnHideable,\n} from \"./interfaces/datagrid-column.interface\";\n\n/**\n * An enum that describes where the contextual buttons should display.\n */\nexport enum DatagridContextualActionPosition {\n    TOP = \"TOP\",\n    ROW = \"ROW\",\n}\n\n/**\n * The default number of items on a single page.\n */\nconst DEFAULT_SIZE = 15;\n\n/**\n * The default items to show in the page size dropdown.\n */\nconst DEFAULT_SIZE_OPTIONS = [DEFAULT_SIZE, 20, 50, 100];\n\n/**\n * The maximum allowed .datagrid-header element clientHeight in pixels.\n */\nconst MAX_HEADER_HEIGHT = 40;\n\n/**\n * The default clr-dr-row element clientHeight in pixels.\n */\nconst ROW_HEIGHT = 37;\n\n/**\n * Key used for translation of pagination when a translation key is not given as input from the caller\n */\nexport const DEFAULT_PAGINATION_TRANSLATION_KEY = \"vcd.cc.grid.default.pagination\";\n\n/**\n * Different types of row selection on the grid\n */\nexport enum GridSelectionType {\n    /**\n     * For selecting multiple rows\n     */\n    Multi = \"MULTI\",\n    /**\n     * For selecting only one row at a time\n     */\n    Single = \"SINGLE\",\n    /**\n     * Disables the selection\n     */\n    None = \"NONE\",\n}\n\n/**\n * Representation of data required for rendering contents of cells and pagination information\n */\nexport interface GridDataFetchResult<R> {\n    /**\n     * Items to be listed in the grid\n     */\n    items: R[];\n    /**\n     * Total number of items\n     */\n    totalItems?: number;\n}\n\n/**\n * The information about the currently sorted column.\n */\nexport interface SortedColumn {\n    /**\n     * Whether the column is sorted normally or reversed.\n     */\n    reverse: boolean;\n    /**\n     * The name of the column that is sorted.\n     */\n    name: string;\n}\n\n/**\n * The types of activity indicators that can be displayed on top of the grid.\n */\nexport enum ActivityIndicatorType {\n    /**\n     * Display a {@link SpinnerActivityReporterComponent} indicator\n     */\n    SPINNER,\n    /**\n     * Display a {@link BannerActivityReporterComponent} indicator\n     */\n    BANNER,\n}\n\n/**\n * The information about pagionation that will be exposed.\n */\nexport interface PagionationInformation {\n    /**\n     * What page is currently selected.\n     */\n    pageNumber: number;\n    /**\n     * How many items belong on a page.\n     */\n    itemsPerPage: number;\n}\n\n/**\n * The information the user gives to show page size and page size options in the pagination footer.\n */\nexport interface PaginationConfiguration {\n    /**\n     * Available page size options in the dropdown\n     */\n    pageSizeOptions?: number[];\n\n    /**\n     * Number of items to be displayed on one page. As a result, the server will return a set of pages with the defined\n     * number of items per page(They can be smaller than the number here in case of last page, filtering etc.,)\n     *\n     * Magic: Auto calculates the size based on available height of the container\n     */\n    pageSize: number | \"Magic\";\n\n    /**\n     * The height of a row in the datagrid. If not set, will use the default of {@link ROW_HEIGHT}.\n     */\n    rowHeight?: number;\n    /**\n     * If the page size option dropdown should be shown.\n     * Defaults to false.\n     */\n    shouldShowPageSizeSelector?: boolean;\n    /**\n     * If the page number input should be shown.\n     * Defaults to false.\n     */\n    shouldShowPageNumberInput?: boolean;\n}\n\n/**\n * The configuration object that is passed to the detail row component.\n */\nexport interface DetailRowConfig<R> {\n    /**\n     * The record that this detail row should render.\n     */\n    record: R;\n    /**\n     * The index this detail row is in the datagrid.\n     */\n    index: number;\n    /**\n     * The total number of rows in the datagrid.\n     */\n    count: number;\n}\n\n/**\n * The configuration object that is passed to the detail pane component.\n */\nexport interface DetailPaneConfig<R> {\n    /**\n     * The record that this detail pane should render.\n     */\n    record: R;\n}\n\n/**\n * The configuration objet used to create the detail pane on the datagrid.\n */\nexport interface DetailPane<R> {\n    /**\n     * The header that goes on top of this detail pane.\n     */\n    header: (record: R) => string;\n    /**\n     * The contents that go within this detail pane.\n     */\n    component: ComponentRendererConstructor<DetailPaneConfig<R>>;\n}\n\n/**\n * The current state of various features of the grid like filtering, sorting, pagination. This object is emitted as\n * part of the event {@link DatagridComponent.gridRefresh}. The handler then used this object to construct a query.\n */\nexport interface GridState<R> {\n    /**\n     * FIQL formatted list of active filters\n     */\n    filters?: string[];\n    /**\n     * The currently sorted column in the datagrid.\n     */\n    sortColumn?: SortedColumn;\n    /**\n     * The pagination information that the datagrid should show.\n     */\n    pagination?: PagionationInformation;\n}\n\n/**\n * A function that can be used to render the pagination data in the grid.\n */\nexport interface PaginationCallback {\n    (firstItem: number, lastItem: number, totalItems: number): string | Observable<string>;\n}\n\n/**\n * For simplifying logic inside the HTML template to differentiate between different {@link GridColumn.renderer}\n * types.\n */\ninterface ColumnConfigInternal<R, T> extends GridColumn<R> {\n    fieldName?: string;\n    fieldRenderer?: FunctionRenderer<R>;\n    fieldColumnRendererSpec?: ColumnRendererSpec<R, T>;\n}\n\n/**\n * Component used for saving the time required for developing a data grid. It takes different properties required for\n * rendering as Inputs and Outputs.\n *\n * Example usage in a component:\n * In the component view, different properties required for the grid are wired as Inputs and Outputs.\n *\n * @example\n * <vcd-datagrid\n *    (onGridRefresh)=\"fetchData()\"\n *    [columns]=\"columns\"\n *    [gridData]=\"gridData\">\n *  </vcd-datagrid>\n *\n */\n@Component({\n    selector: \"vcd-datagrid\",\n    templateUrl: \"./datagrid.component.html\",\n    styleUrls: [\"./datagrid.component.scss\"],\n    providers: [SubscriptionTracker],\n})\nexport class DatagridComponent<R extends B, B = any> implements OnInit, AfterViewInit {\n    /**\n     * The parent component could provide a callback function to calculate if the row is selectable.\n     * When null (default) all rows are selectable.\n     */\n    @Input()\n    isRowSelectableCallback: (item: R) => boolean = null;\n\n    /**\n     * Sets the configuration of columns on the grid and updates the {@link columnsConfig} array. Also pushes\n     * notifications for listeners to make changes to the _columns array\n     */\n    @Input()\n    set columns(cols: GridColumn<R>[]) {\n        this._columns = cols;\n        this.updateColumnsConfig();\n        this.columnsUpdated.emit();\n    }\n    get columns(): GridColumn<R>[] {\n        return this._columns;\n    }\n\n    /**\n     * Set from the caller component using this grid. The input is set upon fetching data by the caller\n     */\n    @Input() set gridData(result: GridDataFetchResult<R>) {\n        this.isLoading = false;\n        this.items = result.items;\n        this.totalItems = result.totalItems;\n        /**\n         * This is due to a known bug in clarity (@link https://github.com/vmware/clarity/issues/2265)\n         * where using trackBy breaks the select all functionality unless you\n         * add a detectChanges before updating the selection manually.\n         */\n        if (this.viewInitted) {\n            this.changeDetectorRef.detectChanges();\n        }\n        this.updateSelectedItems();\n    }\n\n    /**\n     * Type of row selection on the grid\n     */\n    @Input() set selectionType(selectionType: GridSelectionType) {\n        this._selectionType = selectionType;\n        this.clearSelectionInformation();\n    }\n\n    /**\n     * Filters contextual actions from the list of actions to be displayed in a grid row\n     */\n    contextualActions: ActionItem<R, unknown>[];\n\n    private hasStaticActions: boolean;\n\n    /**\n     * List of actions given by the caller\n     */\n    @Input() set actions(actions: ActionItem<R, unknown>[]) {\n        this._actions = actions.map((action) => {\n            const actionCopy = { ...action };\n            const actionHandler: ActionHandlerType<R, unknown> = actionCopy.handler;\n            actionCopy.handler = (selectedEntities, handlerData) => {\n                const actionHandlerResponse = actionHandler(selectedEntities, handlerData);\n                if (actionHandlerResponse && this.actionReporter) {\n                    this.actionReporter.monitorGet(actionHandlerResponse);\n                }\n            };\n            return actionCopy;\n        });\n        this.hasStaticActions = this.actions.some(\n            (action) => action.actionType === ActionType.STATIC_FEATURED || action.actionType === ActionType.STATIC\n        );\n        this.contextualActions = this.getContextualActions();\n    }\n    private _actions: ActionItem<R, unknown>[] = [];\n    get actions(): ActionItem<R, unknown>[] {\n        return this._actions;\n    }\n\n    /**\n     * To display static and contextual actions in a action bar on top of a grid\n     */\n    get shouldShowActionBarOnTop(): boolean {\n        return (\n            this.actions.length &&\n            (this.hasStaticActions || (!!this.contextualActions.length && this.shouldDisplayContextualActionsOnTop))\n        );\n    }\n\n    constructor(\n        private node: ElementRef,\n        private translationService: TranslationService,\n        private changeDetectorRef: ChangeDetectorRef,\n        @Self() private subTracker: SubscriptionTracker\n    ) {\n        this.trackBy = (index: number, record): string => (record as any).href;\n    }\n\n    /**\n     * The pagination information that the user should supply.\n     */\n    @Input() set pagination(pagination: PaginationConfiguration) {\n        this._pagination = { ...pagination };\n        if (this._pagination.pageSizeOptions === undefined) {\n            this._pagination.pageSizeOptions = [];\n        }\n        if (this._pagination.shouldShowPageSizeSelector === undefined) {\n            this._pagination.shouldShowPageSizeSelector = false;\n        }\n        if (this._pagination.shouldShowPageNumberInput === undefined) {\n            this._pagination.shouldShowPageNumberInput = false;\n        }\n        this.updatePagination();\n    }\n\n    get pagination(): PaginationConfiguration {\n        return this._pagination;\n    }\n\n    /**\n     * Desired height of the grid in pixels. If unspecificed, the grid fills the parent container.\n     */\n    @Input() set height(height: number) {\n        this._height = height;\n        const heightCssValue = this.height ? `${this.height}px` : \"unset\";\n        this.node.nativeElement.style.setProperty(\"--datagrid-height\", heightCssValue);\n        this.updatePagination();\n    }\n\n    get height(): number {\n        return this._height;\n    }\n\n    @HostBinding(\"class.fill-parent\") get shouldFillParent(): boolean {\n        return this.height === undefined;\n    }\n\n    /**\n     * Returns the items selected in the VCD datagrid.\n     */\n    @Input()\n    get datagridSelection(): B[] {\n        // If a getter returns `[]` it is considered as a new reference in the angular detect changes process\n        // while `[]` in the template is not considered a new reference.\n        // In other words the following 2 have different behaviour:\n        // ```\n        // <component_tag\n        //    [someInput]='some_getter_that_retyrns_empty_array'\n        // ></component_tag>\n        // ```\n        // ```\n        // <component_tag\n        //    [someInput]='[]'\n        // ></component_tag>\n        // ```\n        // where the first one will result in setting `someInput` during the change detection while the second one will not\n        // TODO:  VDUCC-505 write unit tests\n        // The code below is to ensure there is no reference change unless there is a change indeed\n        return this._datagridSelection;\n    }\n    private _datagridSelection = [];\n    /**\n     * Sets the items selected in the VCD datagrid.\n     */\n    set datagridSelection(selection: B[]) {\n        if (!this.viewInitted) {\n            this.initialSelection = selection;\n            return;\n        }\n\n        if (this._selectionType === GridSelectionType.Single) {\n            if (selection) {\n                this.datagrid.selection.currentSingle = selection[0];\n            } else {\n                this.datagrid.selection.currentSingle = null;\n            }\n        } else if (this._selectionType === GridSelectionType.Multi) {\n            this.datagrid.selection.current = selection;\n        }\n    }\n\n    /**\n     * If the contextual buttons should display on the top of a grid.\n     */\n    get shouldDisplayContextualActionsOnTop(): boolean {\n        return (\n            this.actionDisplayConfig?.contextual?.position === DatagridContextualActionPosition.TOP &&\n            this.datagridSelection.length !== 0\n        );\n    }\n\n    /**\n     * If the contextual buttons should display in a row.\n     */\n    get shouldDisplayContextualActionsInRow(): boolean {\n        return this.actionDisplayConfig?.contextual?.position === DatagridContextualActionPosition.ROW;\n    }\n\n    /**\n     * If the contextual buttons should display in a row.\n     */\n    get shouldDisplayContextualActionsInDropdpown(): boolean {\n        return this.actionDisplayConfig?.contextual?.styling === ActionStyling.DROPDOWN;\n    }\n\n    /**\n     * The {@link #maxFeaturedActionsOnRow} value depends in the contextual featured actions config which belongs to the\n     * {@link ActionMenuComponent} being used in the rows. So, we wait for action menus in rows to be initialized and then calculate\n     * the value\n     */\n    @ViewChildren(\"actionMenuInRow\") set actionMenusInRow(actionMenus: QueryList<ActionMenuComponent<R, unknown>>) {\n        if (!actionMenus || !actionMenus.length) {\n            this.maxFeaturedActionsOnRow = 0;\n            return;\n        }\n        let max = 0;\n        actionMenus.forEach((actionMenu) => {\n            const contextualFeaturedActions = actionMenu.contextualFeaturedActions;\n            max = Math.max(contextualFeaturedActions.length, max);\n        });\n        this.maxFeaturedActionsOnRow = max;\n        this.changeDetectorRef.detectChanges();\n    }\n\n    private initialSelection: (B | R)[] = [];\n\n    /**\n     * An output that emits when the selection changes on the grid.\n     */\n    @Output() datagridSelectionChange = new EventEmitter<(B | R)[]>();\n    /**\n     * An output that emits when the selection changes on the grid.\n     *\n     * @deprecated\n     */\n    @Output() selectionChanged = this.datagridSelectionChange;\n\n    /**\n     * How to display the static and contextual actions.\n     * If not set, this will default to the output of {@link getDefaultDatagridActionDisplayConfig}\n     */\n    @Input() set actionDisplayConfig(value: DatagridActionDisplayConfig) {\n        this._actionDisplayConfig = getDefaultDatagridActionDisplayConfig(value);\n    }\n    private _actionDisplayConfig: DatagridActionDisplayConfig = getDefaultDatagridActionDisplayConfig();\n    get actionDisplayConfig(): DatagridActionDisplayConfig {\n        return this._actionDisplayConfig;\n    }\n\n    /**\n     * Emitted whenever {@link #columns} input is updated\n     */\n    @Output() columnsUpdated = new EventEmitter<void>();\n\n    /**\n     * A reference to {@link ActionMenuComponent} that is positioned above the grid, in the grid action tool bar\n     * This action menu may be dynamically added to / removed from the DOM based on the actions availability so the\n     * very reference should be taken from subscription to the list changes.\n     */\n    @ViewChildren(\"mainActionMenu\")\n    public readonly mainActionMenu: QueryList<ActionMenuComponent<unknown, unknown>>;\n\n    /**\n     * Columns are updated using set columns, addColumn and removeColumn methods. This cache helps in preserving changes\n     * made by each of the methods to columns array and helps in not overwriting the changes made by one of the methods\n     * with changes made by another method\n     */\n    private _columns: GridColumn<R>[];\n    /**\n     * A optional string to be displayed above the grid.\n     */\n    @Input()\n    header?: string;\n\n    /**\n     * The type of activity indicator that should sit ontop of the grid.\n     */\n    @Input()\n    indicatorType: ActivityIndicatorType;\n\n    GridColumnHideable = GridColumnHideable;\n    TooltipSize = TooltipSize;\n    ActivityIndicatorType = ActivityIndicatorType;\n\n    /**\n     * The component that sound be rendered for this detail row.\n     *\n     * @param R The type of record that this detail component will display.\n     */\n    @Input() detailComponent: ComponentRendererConstructor<DetailRowConfig<R>>;\n\n    /**\n     * Specifies if the row is expanded. The default is false.\n     */\n    @Input() isRowExpanded = false;\n\n    /**\n     * A detail pane that will be displayed when a user selects to expand a row.\n     *\n     * @param R The type of record that this detail pane will display.\n     */\n    @Input() detailPane: DetailPane<R>;\n    private _selectionType: GridSelectionType = GridSelectionType.None;\n\n    /**\n     * The CSS class to use for the Clarity datagrid.\n     */\n    @Input() clrDatagridCssClass = \"\";\n\n    /**\n     * The text placed next to the pagination number dropdown.\n     */\n    @Input() paginationDropdownText = \"\";\n\n    /**\n     * When there is no data, show this message.\n     */\n    @Input()\n    emptyGridPlaceholder: string;\n\n    private _pagination: PaginationConfiguration = {\n        pageSize: \"Magic\",\n        pageSizeOptions: DEFAULT_SIZE_OPTIONS,\n    };\n\n    /**\n     * The page size to display.\n     */\n    pageSize = DEFAULT_SIZE;\n\n    /**\n     * The complete set of options to show the user.\n     */\n    pageSizeOptions = DEFAULT_SIZE_OPTIONS;\n\n    private _height: number;\n\n    /**\n     * If the grid is currently loading.\n     */\n    @Input()\n    isLoading = false;\n\n    /**\n     * Used for simplifying logic inside the HTML template to differentiate between different\n     * {@link GridColumn.renderer} types.\n     */\n    columnsConfig: ColumnConfigInternal<R, unknown>[];\n\n    /**\n     * List of items used for displaying rows on the grid\n     */\n    items: R[] = [];\n\n    /**\n     * The total number of items that could be displayed in the grid.\n     */\n    totalItems?: number;\n\n    /**\n     * Emitted during the initial rendering, and is emitted whenever filtering/sorting/paging params change\n     * {@link #GridState} is the type of value emitted\n     */\n    @Output()\n    gridRefresh: EventEmitter<GridState<R>> = new EventEmitter<GridState<R>>();\n\n    @ViewChild(ClrDatagrid, { static: true }) datagrid: ClrDatagrid;\n    /**\n     * The pagination display within the datagrid.\n     */\n    @ViewChild(ClrDatagridPagination) paginationComponent: ClrDatagridPagination;\n    /**\n     * The activity reporter that all activites are displayed on\n     */\n    @ViewChild(\"actionReporter\") actionReporter: ActivityReporter;\n\n    private viewInitted = false;\n\n    /**\n     * Used for translating pagination information displayed in the grid\n     */\n    @Input() paginationTranslationKey: string = DEFAULT_PAGINATION_TRANSLATION_KEY;\n\n    /**\n     * Used for calculating the width of actions column\n     */\n    maxFeaturedActionsOnRow = 0;\n\n    /**\n     * If selection should be preserved when the item is not loaded to the grid.\n     *\n     * Defaults to false;\n     */\n    @Input() preserveSelection = false;\n\n    private currentPaneSpecRecord: R;\n    private currentPaneSpec: { rendererSpec: ComponentRendererSpec<DetailPaneConfig<R>> };\n\n    private currentDetailRowConfig: {\n        record: R;\n        count: number;\n        index: number;\n    };\n    private currentDetailRowRenderSpec: { rendererSpec: ComponentRendererSpec<DetailRowConfig<R>> };\n\n    protected clrDgItemsTrackBy: (record: B) => any;\n    private _trackBy: TrackByFunction<B>;\n\n    private getContextualActions(): ActionItem<R, unknown>[] {\n        return this.actions.filter(\n            (action) => action.actionType !== ActionType.STATIC_FEATURED && action.actionType !== ActionType.STATIC\n        );\n    }\n\n    /**\n     * To add or replace a column of this datagrid columns. Exposed for columns modifiers(eg: directives) that listen to\n     * {@link columnsUpdated} event and want to modify the columns set by components using this datagrid.\n     */\n    public addColumn(col: GridColumn<R>): void {\n        if (!col) {\n            return;\n        }\n        const colIndex = this.findColumnIndex(col);\n        if (colIndex !== -1) {\n            this._columns[colIndex] = col;\n        } else {\n            this._columns.push(col);\n        }\n        this.updateColumnsConfig();\n    }\n\n    /**\n     * To remove a column from this datagrid columns. Exposed for columns modifiers(eg: directives) that listen to\n     * {@link columnsUpdated} event and want to modify the columns set by components using this datagrid.\n     */\n    public removeColumn(col: GridColumn<R>): void {\n        if (!col) {\n            return;\n        }\n        const colIndex = this.findColumnIndex(col);\n        if (colIndex !== -1) {\n            this._columns.splice(colIndex, 1);\n            this.updateColumnsConfig();\n        }\n    }\n\n    private findColumnIndex(col: GridColumn<R>): number {\n        return this.columns.findIndex((column) => col.displayName === column.displayName);\n    }\n\n    private updateColumnsConfig(): void {\n        this.columnsConfig = this.getColumnsConfig(this.columns);\n    }\n\n    /**\n     * Returns an identifier for the given record at the given index.\n     *\n     * If the record has a href, defaults to that. Else, defaults to index.\n     */\n    @Input() set trackBy(trackByFn: TrackByFunction<B>) {\n        this._trackBy = trackByFn;\n        /**\n         * We are reusing the trackByFn as an identity function for the new `clrDgItemsTrackBy`, which\n         * was introduced to fix the [clrDgSelectable] bug (see: https://github.com/vmware-clarity/ng-clarity/pull/539)\n         *\n         * However `clrDgItemsTrackBy` does not accept an index as fist parameter (which `trackBy` does), as\n         * we don't have an index when we are comparing selection items across different pagination pages.\n         * Hence passing a hard coded '0' below.\n         *\n         * See more: https://jira.eng.vmware.com/browse/CDE-1313\n         */\n        this.clrDgItemsTrackBy = (record) => trackByFn(0, record);\n    }\n\n    get trackBy(): TrackByFunction<B> {\n        return this._trackBy;\n    }\n\n    /**\n     * Returns an identifier for the given column at the given index.\n     */\n    columnTrackBy(index: number, column: ColumnConfigInternal<R, unknown>): string {\n        return column.displayName;\n    }\n\n    /**\n     * Gives the render spec to create the detail row for the row with the given record, at the given index, and\n     * in a datagrid with the given count of total items.\n     */\n    getDetailRowRenderSpec(\n        record: R,\n        index: number,\n        count: number\n    ): { rendererSpec: ComponentRendererSpec<DetailRowConfig<R>> } {\n        if (\n            !this.currentDetailRowConfig ||\n            this.currentDetailRowConfig.record !== record ||\n            this.currentDetailRowConfig.index !== index ||\n            this.currentDetailRowConfig.count !== count\n        ) {\n            this.currentDetailRowConfig = { record, index, count };\n            this.currentDetailRowRenderSpec = {\n                rendererSpec: {\n                    type: this.detailComponent,\n                    config: this.currentDetailRowConfig,\n                },\n            };\n        }\n        return this.currentDetailRowRenderSpec;\n    }\n\n    /**\n     * Gives the render spec to create the detail pane for the row with the given record.\n     */\n    getDetailPaneRenderSpec(record: R): { rendererSpec: ComponentRendererSpec<DetailPaneConfig<R>> } {\n        if (this.currentPaneSpecRecord !== record) {\n            this.currentPaneSpecRecord = record;\n            this.currentPaneSpec = {\n                rendererSpec: {\n                    type: this.detailPane.component,\n                    config: { record },\n                },\n            };\n        }\n        return this.currentPaneSpec;\n    }\n\n    /**\n     * Gives the CSS class to use for a given datarow based on its relative index and entity definition.\n     */\n    @Input() clrDatarowCssClassGetter(row: R, index: number): string {\n        return \"\";\n    }\n\n    private updateSelectedItems(): void {\n        if (!this.preserveSelection) {\n            if (this._selectionType === GridSelectionType.Single && this.datagrid.selection.currentSingle) {\n                // Tries to find the currently selected item. If it isn't found, clears the selection.\n                const current = this.datagrid.selection.currentSingle as R;\n                const found = this.mapSelectedRecords([current], this.items)[0];\n                if (!found) {\n                    this.datagrid.selection.clearSelection();\n                } else {\n                    this.datagrid.selection.setSelected(found, true);\n                }\n            } else if (this._selectionType === GridSelectionType.Multi) {\n                // Tries to find the currently selected items. If an item isn't found, clears the selection for that item.\n                if (this.datagrid.selection.current && this.datagrid.selection.current.length) {\n                    const current = [...this.datagrid.selection.current] as R[];\n                    this.datagrid.selection.clearSelection();\n                    const nextSelection = this.mapSelectedRecords(current, this.items).filter((item) => item);\n                    this.datagrid.selection.updateCurrent(nextSelection, false);\n                }\n            }\n        }\n        if (this.datagrid.rows) {\n            this.datagrid.rows.notifyOnChanges();\n        }\n    }\n\n    onClarityDatafridSelectionChange(): void {\n        if (this.datagrid.selection.currentSingle) {\n            if (\n                this._datagridSelection?.length !== 1 ||\n                this._datagridSelection[0] !== this.datagrid.selection.currentSingle\n            ) {\n                this._datagridSelection = [this.datagrid.selection.currentSingle];\n            }\n        } else if (this.datagrid.selection.current && this.datagrid.selection.current.length) {\n            // If there is no selection from Clarity, we should clear the datagrid without creating a new reference.\n            this._datagridSelection = this.datagrid.selection.current;\n        } else {\n            if (this._datagridSelection.length) {\n                this._datagridSelection = [];\n            }\n        }\n        this.datagridSelectionChange.emit(this.datagridSelection);\n    }\n\n    /**\n     * Given an existing selection that is made up of records that are about to become stale,\n     * and new records to be loaded into the grid, returns the selection mapped to records\n     * from the newly added records, excluding any records that may not be present in the\n     * new selection because they are not present in the new data.\n     */\n    private mapSelectedRecords(currentSelection: R[], newRecords: R[]): R[] {\n        return currentSelection.map((selected, selectedIndex) => {\n            const found = newRecords.find(\n                (item, itemIndex) => this.trackBy(itemIndex, item) === this.trackBy(selectedIndex, selected)\n            );\n            return found;\n        });\n    }\n\n    private clearSelectionInformation(): void {\n        if (!this.datagrid) {\n            return;\n        }\n        if (this._selectionType === GridSelectionType.Single) {\n            this.datagrid.selected = undefined;\n            this.datagrid.singleSelected = null;\n        } else if (this._selectionType === GridSelectionType.Multi) {\n            this.datagrid.singleSelected = undefined;\n            this.datagrid.selected = [];\n        } else if (this._selectionType === GridSelectionType.None) {\n            this.datagrid.selected = [];\n            this.datagrid.singleSelected = undefined;\n            this.datagrid.selected = undefined;\n        }\n    }\n\n    /**\n     * Called when the {@param state} of the Clarity datagrid changes.\n     */\n    gridStateChanged(state: ClrDatagridStateInterface): void {\n        const vcdDgState: GridState<R> = {\n            pagination: {\n                pageNumber: state.page ? state.page.current : 1,\n                itemsPerPage: state.page ? state.page.size : DEFAULT_SIZE,\n            },\n        };\n        if (state.filters) {\n            vcdDgState.filters = state.filters.map((filter: DatagridFilter<unknown, unknown, FormGroup>) =>\n                filter.getValue()\n            );\n        }\n        if (state.sort && typeof state.sort.by === \"string\") {\n            vcdDgState.sortColumn = {\n                name: state.sort.by,\n                reverse: state.sort.reverse,\n            };\n        }\n        this.gridRefresh.emit(vcdDgState);\n    }\n\n    /**\n     * Is the given column able to be hidden by the user through the show/hide menu.\n     */\n    isColumnHideable(column: GridColumn<R>): boolean {\n        return column && column.hideable !== GridColumnHideable.Never;\n    }\n\n    /**\n     * Resets the pagination to page 1.\n     */\n    resetToPageOne(): void {\n        this.paginationComponent.currentPage = 1;\n    }\n\n    /**\n     * Gives the correct string to display for the pagination.\n     */\n    getPaginationTranslation(paginationData: ClrDatagridPagination): LazyString {\n        return this.translationService.translateAsync(this.paginationTranslationKey, [\n            {\n                firstItem: paginationData.firstItem + 1,\n                lastItem: paginationData.lastItem + 1,\n                totalItems: paginationData.totalItems,\n            },\n        ]);\n    }\n\n    /**\n     * The number of rows in a single page.\n     */\n    private getPageSize(): number {\n        if (typeof this.pagination.pageSize === \"number\") {\n            return this.pagination.pageSize;\n        }\n        if (this.pagination.pageSize === \"Magic\" && this.viewInitted) {\n            return this.calculatePageSize();\n        }\n        return DEFAULT_SIZE;\n    }\n\n    /**\n     * Available page size options in the dropdown\n     */\n    private getPageSizeOptions(): number[] {\n        let options = this.pagination.pageSizeOptions.map((size) => size);\n        if (options.indexOf(this.pageSize) === -1) {\n            options.push(this.pageSize);\n            options = options.sort((a, b) => a - b);\n        }\n        return options;\n    }\n\n    /**\n     *  Calculates the pageSize from the available space in the datagrid body\n     */\n    private calculatePageSize(): number {\n        const grid = this.node.nativeElement;\n        const gridHeight = grid.parentNode.clientHeight;\n\n        const headerHeight = grid.querySelector(\".datagrid-header\").offsetHeight;\n        const footerHeight = grid.querySelector(\"clr-dg-footer\").offsetHeight;\n        const rowHeight = this.pagination.rowHeight || ROW_HEIGHT;\n\n        // Substracting the height of the header, actionbar and footer\n        let availableHeight = (this.height || gridHeight) - headerHeight - footerHeight;\n        if (!this.height) {\n            const header = grid.querySelector(\".vcd-header\");\n            availableHeight -= header ? header.offsetHeight : 0;\n        }\n        if (this.shouldShowActionBarOnTop) {\n            availableHeight -= ROW_HEIGHT;\n        }\n\n        // Calculate the pageSize by dividing the available height by the row height.\n        const pageSize = Math.floor(availableHeight / rowHeight);\n\n        // If the calculated pageSize is less than the default, set the pageSize to the default one.\n        return Math.max(DEFAULT_SIZE, pageSize);\n    }\n\n    /**\n     * Updates the pagination information by recalculating pageSize if needed.\n     */\n    private updatePagination(): void {\n        this.pageSize = this.getPageSize();\n        this.pageSizeOptions = this.getPageSizeOptions();\n    }\n\n    /**\n     * Defines the {@property columnsConfig} by adding extra property required for differentiating different kinds\n     * of renderers which is required in the HTML template.\n     */\n    public getColumnsConfig(columns): ColumnConfigInternal<R, unknown>[] {\n        return columns.map((column) => {\n            const columnConfig: ColumnConfigInternal<R, unknown> = {\n                ...column,\n            };\n\n            if (column.renderer instanceof Function) {\n                columnConfig.fieldRenderer = column.renderer as FunctionRenderer<R>;\n            } else if ((column.renderer as ColumnRendererSpec<R, unknown>).config) {\n                columnConfig.fieldColumnRendererSpec = column.renderer as ColumnRendererSpec<R, unknown>;\n            } else {\n                columnConfig.fieldName = column.renderer as string;\n            }\n\n            // Add query filed required for the column filtering. This is then used in DatagridFilter.queryField\n            if (column.queryFieldName && column.filter) {\n                column.filter.config.queryField = column.queryFieldName;\n            }\n\n            return columnConfig;\n        });\n    }\n\n    /**\n     * Apply the parent's component callback when available.\n     * The default is to make all rows selectable.\n     * @param row to make selectable or not.\n     */\n    public isRowSelectable(row: R): boolean {\n        if (!this.isRowSelectableCallback) {\n            return true;\n        }\n\n        return this.isRowSelectableCallback(row);\n    }\n\n    ngOnInit(): void {\n        this.isLoading = true;\n        this.clearSelectionInformation();\n    }\n\n    ngAfterViewInit(): void {\n        this.viewInitted = true;\n        this.datagridSelection = this.initialSelection;\n        if (this.pagination.pageSize === \"Magic\") {\n            this.updatePagination();\n            // We need to update the page size in ngAfterViewInit because when it is set\n            // to magically calculate, we need to know that the rest of the page has been rendered.\n            // Yet, this causes a ExpressionChangedAfterItHasBeenCheckedError because we are changing\n            // pageSize in this method. So we need to detectChanges to avoid an error or\n            // calling a setTimeout.\n            this.changeDetectorRef.detectChanges();\n        }\n\n        this.subTracker.subscribe(this.columnsUpdated, () => {\n            this.datagrid.columns.reset(this.datagrid.columns.toArray());\n        });\n    }\n}\n","<h3 *ngIf=\"this.header\" class=\"vcd-header\">{{ header }}</h3>\n<vcd-spinner-activity-reporter #actionReporter *ngIf=\"ActivityIndicatorType.SPINNER === indicatorType\">\n</vcd-spinner-activity-reporter>\n<vcd-banner-activity-reporter #actionReporter *ngIf=\"ActivityIndicatorType.BANNER === indicatorType\">\n</vcd-banner-activity-reporter>\n<clr-datagrid\n    [clrDgLoading]=\"isLoading\"\n    [ngClass]=\"[this.clrDatagridCssClass, this.height ? 'set-height' : 'fill-parent-grid']\"\n    (clrDgRefresh)=\"gridStateChanged($event)\"\n    (clrDgSelectedChange)=\"onClarityDatafridSelectionChange()\"\n    (clrDgSingleSelectedChange)=\"onClarityDatafridSelectionChange()\"\n    [clrDgPreserveSelection]=\"preserveSelection\"\n    [clrDgItemsTrackBy]=\"clrDgItemsTrackBy\"\n>\n    <clr-dg-placeholder>{{ emptyGridPlaceholder }}</clr-dg-placeholder>\n    <clr-dg-action-bar class=\"top-action-bar\" *ngIf=\"shouldShowActionBarOnTop\">\n        <!--- We need to instantiate the action bar as its own component to separate its provider chain\n        such that the clr-dg-row doesn't get its trackBy.\n        This is due to a bug in Clarity: https://github.com/vmware/clarity/issues/3936 -->\n        <ng-container *ngTemplateOutlet=\"actionBar\"> </ng-container>\n    </clr-dg-action-bar>\n\n    <clr-dg-column\n        *ngIf=\"shouldDisplayContextualActionsInRow && contextualActions?.length\"\n        [ngClass]=\"\n            shouldDisplayContextualActionsInDropdpown ? 'dropdown-actions' : 'buttons-' + maxFeaturedActionsOnRow\n        \"\n    >\n        <ng-container *ngIf=\"!shouldDisplayContextualActionsInDropdpown\">\n            {{ \"vcd.cc.datagrid.actions\" | translate }}\n        </ng-container>\n    </clr-dg-column>\n    <clr-dg-column\n        *ngFor=\"let column of columnsConfig; trackBy: columnTrackBy\"\n        [clrDgSortBy]=\"column.sortable !== false && column.queryFieldName\"\n        (clrDgSortOrderChange)=\"resetToPageOne()\"\n        class=\"data-column\"\n        [ngClass]=\"column.clrDgColumnClassName\"\n    >\n        <ng-container *ngIf=\"isColumnHideable(column); else notHideable\">\n            <ng-container *clrDgHideableColumn=\"{ hidden: column.hideable === GridColumnHideable.Hidden }\">{{\n                column.displayName\n            }}</ng-container>\n        </ng-container>\n        <ng-template #notHideable>{{ column.displayName }}</ng-template>\n        <clr-dg-filter *ngIf=\"column.queryFieldName && column.filter\">\n            <ng-template [vcdComponentRendererOutlet]=\"{ rendererSpec: column.filter }\"> </ng-template>\n        </clr-dg-filter>\n    </clr-dg-column>\n\n    <!--The trackBy in the ngFor is to inform Angular on how to track changes to clrDgRow.\n        Whereas the trackBy in ngForTrackBy is to inform Clarity on how to track changes to it's\n        items. -->\n    <clr-dg-row\n        *ngFor=\"let restItem of items; let i = index; let count = count; trackBy: trackBy\"\n        [ngClass]=\"this.clrDatarowCssClassGetter(restItem, i)\"\n        [clrDgItem]=\"restItem\"\n        [clrDgSelectable]=\"isRowSelectable(restItem)\"\n    >\n        <clr-dg-cell\n            *ngIf=\"shouldDisplayContextualActionsInRow && contextualActions?.length\"\n            class=\"action-button-cell\"\n            [ngClass]=\"\n                shouldDisplayContextualActionsInDropdpown ? 'dropdown-actions' : 'buttons-' + maxFeaturedActionsOnRow\n            \"\n        >\n            <vcd-action-menu\n                #actionMenuInRow\n                [actions]=\"contextualActions\"\n                [selectedEntities]=\"[restItem]\"\n                [actionDisplayConfig]=\"actionDisplayConfig\"\n                [dropdownTriggerBtnIcon]=\"'ellipsis-vertical'\"\n            >\n            </vcd-action-menu>\n        </clr-dg-cell>\n\n        <clr-dg-cell [vcdShowClippedText]=\"column.cliptextConfig\" *ngFor=\"let column of columnsConfig\">\n            <!-- Default renderer -->\n            <ng-container *ngIf=\"column.fieldName\">{{ restItem | nestedProperty: column.fieldName }}</ng-container>\n\n            <!-- Renderer is a function -->\n            <ng-container *ngIf=\"column.fieldRenderer\">{{\n                restItem | functionRenderer: column.fieldRenderer\n            }}</ng-container>\n\n            <!-- Renderer is a componentRenderer -->\n            <ng-template\n                *ngIf=\"column.fieldColumnRendererSpec\"\n                [vcdComponentRendererOutlet]=\"{ rendererSpec: column.fieldColumnRendererSpec, context: restItem }\"\n            >\n            </ng-template>\n        </clr-dg-cell>\n\n        <ng-container ngProjectAs=\"clr-dg-row-detail\" *ngIf=\"detailComponent !== undefined\">\n            <clr-dg-row-detail *clrIfExpanded=\"isRowExpanded\">\n                <ng-template [vcdComponentRendererOutlet]=\"getDetailRowRenderSpec(restItem, i, count)\"> </ng-template>\n            </clr-dg-row-detail>\n        </ng-container>\n    </clr-dg-row>\n\n    <ng-container ngProjectAs=\"clr-dg-detail\" *ngIf=\"detailPane\">\n        <clr-dg-detail *clrIfDetail=\"let restItem\">\n            <clr-dg-detail-header>{{ detailPane.header(restItem) }}</clr-dg-detail-header>\n            <clr-dg-detail-body>\n                <ng-template [vcdComponentRendererOutlet]=\"getDetailPaneRenderSpec(restItem)\"> </ng-template>\n            </clr-dg-detail-body>\n        </clr-dg-detail>\n    </ng-container>\n\n    <clr-dg-footer>\n        <clr-dg-pagination\n            #paginationData\n            [clrDgTotalItems]=\"totalItems\"\n            [clrDgPageSize]=\"this.pageSize\"\n            [clrDgPageInputDisabled]=\"!this.pagination.shouldShowPageNumberInput\"\n        >\n            <div>{{ getPaginationTranslation(paginationData) | lazyString }}</div>\n            <clr-dg-page-size\n                [clrPageSizeOptions]=\"this.pageSizeOptions\"\n                *ngIf=\"this.pagination.shouldShowPageSizeSelector\"\n                >{{ paginationDropdownText }}</clr-dg-page-size\n            >\n        </clr-dg-pagination>\n    </clr-dg-footer>\n</clr-datagrid>\n\n<ng-template #actionBar>\n    <vcd-action-menu\n        #mainActionMenu\n        [actions]=\"actions\"\n        [selectedEntities]=\"datagridSelection\"\n        [actionDisplayConfig]=\"actionDisplayConfig\"\n        [dropdownTriggerBtnText]=\"'vcd.cc.action.menu.actions'\"\n    >\n    </vcd-action-menu>\n</ng-template>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { ComponentRendererOutletDirective } from \"./component-renderer-outlet.directive\";\n\n@NgModule({\n    declarations: [ComponentRendererOutletDirective],\n    imports: [CommonModule, FormsModule, ReactiveFormsModule, ClarityModule, I18nModule],\n    exports: [ComponentRendererOutletDirective],\n})\nexport class VcdComponentRendererOutletModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Directive, Input, OnInit, Self } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { ClrDatagridFilter, ClrDatagridFilterInterface } from \"@clr/angular\";\nimport { filter, Subject, switchMap, timer } from \"rxjs\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { SubscriptionTracker } from \"../../common/subscription/subscription-tracker\";\nimport {\n    ComponentRenderer,\n    ComponentRendererConstructor,\n    ComponentRendererSpec,\n} from \"../interfaces/component-renderer.interface\";\n\n/**\n * Number of milliseconds delayed before emitting the filter has changed observable\n */\nexport const DEBOUNCE_TIME_FOR_GRID_FILTER_CHANGES = 300;\n\n/**\n * Properties required by all the grid filters\n */\nexport interface FilterConfig<V> {\n    /**\n     * Used as a query field for server side filtering of the grid column\n     */\n    queryField?: string;\n\n    /**\n     * Value with which grid data can be filtered before initially being rendered\n     */\n    value?: V;\n}\n\n/**\n * Renderer specification of a column that contains component type to be rendered in a filter widget and configuration for that\n * component. used by the {@link ComponentRendererOutletDirective}\n */\nexport interface FilterRendererSpec<C> extends ComponentRendererSpec<C> {\n    /**\n     *  Config object required for the configuration of component that will be rendered in the column filter widget\n     */\n    config: C;\n}\n\n/**\n * Extended by filter components used in {@link DatagridComponent}. Those components can only be used inside a\n * clr-dg-filter component and are dynamically rendered by {@link ComponentRendererOutletDirective} using\n * {@link GridColumn.filter}\n * V is the type of filter input value that is passed into setValue method\n * C extends FilterConfig<V> is configuration of a filter that contains queryField and a value of type V\n * F is the specific FormGroup type used by the implementing filter component so that it can have type safety\n *   while the base class still knows that it's a FormGroup but doesn't care about its internal shape.\n */\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\n@Directive()\nexport abstract class DatagridFilter<V, C extends FilterConfig<V>, F extends FormGroup = FormGroup>\n    implements OnInit, ClrDatagridFilterInterface<V>, ComponentRenderer<C>\n{\n    abstract formGroup: F;\n\n    protected constructor(\n        protected filterContainer: ClrDatagridFilter,\n        @Self() private subscriptionTracker: SubscriptionTracker\n    ) {\n        filterContainer.setFilter(this);\n    }\n\n    /**\n     * Sets the configuration needed for a filter UI widget and also it's value.\n     * Assigned from {@link ComponentRendererOutletDirective#assignValue} after the filter component is created.\n     * Used by the getValue method in subclasses to format the FIQL string output.\n     */\n    protected _config: C;\n    @Input() set config(val: C) {\n        this.onBeforeSetConfig(val);\n        this._config = val;\n        if (this._config.value) {\n            this.setValue(this._config.value);\n        }\n    }\n\n    get config(): C {\n        return this._config;\n    }\n\n    /**\n     * Emits whenever a filter form inputs changes\n     */\n    changes = new Subject<void>();\n\n    ngOnInit(): void {\n        const obs = this.getDebounceTimeMs()\n            ? this.formGroup.valueChanges.pipe(debounceTime(this.getDebounceTimeMs()))\n            : this.formGroup.valueChanges;\n        this.subscriptionTracker.subscribe(obs, () => this.changes.next(null));\n        this.subscribeToSetFocusWhenOpened();\n    }\n\n    private subscribeToSetFocusWhenOpened(): void {\n        this.subscriptionTracker.subscribe(\n            this.filterContainer.openChange.pipe(\n                filter((open) => open === true),\n                switchMap(() => timer(50))\n            ),\n            () => this.setFocus()\n        );\n    }\n\n    /**\n     * To override the default delay time for emission of changes\n     */\n    protected getDebounceTimeMs(): number {\n        return DEBOUNCE_TIME_FOR_GRID_FILTER_CHANGES;\n    }\n\n    /**\n     * Called inside setter of {@link DatagridFilter#config} and Defined in the derived classes to perform some logic before\n     * assigning the UI widget configuration and setting a value\n     */\n    protected onBeforeSetConfig(config: C): void {\n        // No default behavior\n    }\n\n    /**\n     * Used for assigning a value to a filter from outside\n     */\n    abstract setValue(value: V): void;\n\n    /**\n     * For getting the filter UI widget values in FIQL formatted string\n     */\n    abstract getValue(): string;\n\n    /**\n     * Return true if the filter is currently activated (e.g. a value is provided)\n     */\n    abstract isActive(): boolean;\n\n    /**\n     * Called when the filter is opened to allow setting the focus on the desired element\n     */\n    protected abstract setFocus(): void;\n\n    /**\n     * Required by Clarity but ignored since we don't support client side filtering\n     */\n    accepts(): boolean {\n        return true;\n    }\n\n    /**\n     * @see unit tests of subclass {@link DatagridStringFilterComponent} for unit tests of following methods\n     */\n    /**\n     * Used in the {@link #getValue} method to make it part of the FIQL formatted string\n     */\n    get queryField(): string {\n        if (this._config) {\n            if (this._config.queryField) {\n                return this._config.queryField;\n            }\n            throw Error(\"Query field is not specified\");\n        }\n    }\n}\n\n/**\n * Utility function to enforce type safety on config object of components of {@link ComponentRenderer} type. Used for creating\n * component renderer specifications of {@link FilterRendererSpec} type\n *\n * Example usage:\n * const gridColumn = {\n *   filterRendererSpec: FilterComponentRendererSpec({type: DatagridNumericFilterComponent, config: {value: [1, 2]}}),\n * }\n *\n * In the above examples these methods help in making sure that:\n * - Value \"v\" of the config property is of [number, number] type for gridColumn.filterRendererSpec\n *\n * #Note: 'C & {}' below makes the inference site for C be the constructor type from the first argument.\n * {@link https://stackoverflow.com/questions/59055154/typescript-generics-infer-type-from-the-type-of-function-arguments}\n */\nexport function FilterComponentRendererSpec<R, C>(componentRendererSpec: {\n    type: ComponentRendererConstructor<C>;\n    config: C & {};\n}): FilterRendererSpec<C> {\n    return componentRendererSpec;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, ElementRef, Host, OnDestroy, Self } from \"@angular/core\";\nimport { AbstractControl, FormControl, FormGroup } from \"@angular/forms\";\nimport { ClrDatagridFilter } from \"@clr/angular\";\nimport { SelectOption } from \"../../common/interfaces/select-option\";\nimport { SubscriptionTracker } from \"../../common/subscription/subscription-tracker\";\nimport { FilterBuilder } from \"../../utils/filter-builder\";\nimport { IdGenerator } from \"../../utils/id-generator/id-generator\";\nimport { DatagridFilter, FilterComponentRendererSpec, FilterConfig, FilterRendererSpec } from \"./datagrid-filter\";\n\n/**\n * Same as the {@link SelectOption} but value is always a string\n */\nexport interface MultiSelectOption extends SelectOption {\n    value: string;\n}\n\nexport interface DatagridMultiSelectFilterConfig extends FilterConfig<string[]> {\n    /**\n     * List of select options\n     */\n    options: MultiSelectOption[];\n}\n\n/**\n * Used internally for {@link DatagridMultiSelectFilterComponent.options} to add unique IDs to filter options. The IDs are used for\n * associating checkbox options with their labels in the HTML\n */\ninterface MultiSelectOptionInternal extends MultiSelectOption {\n    /**\n     * Unique identifier for each checkbox option instantiated in the HTML\n     */\n    id: string;\n}\n\nconst idGenerator = new IdGenerator(\"vcd-multiselect-filter-id\");\n\n// Add a little safety,we don't know the names of the controls, but we do know they will all be checkboxes\ntype BooleanFormGroup = FormGroup<{ [name: string]: AbstractControl<boolean, boolean> }>;\n\n/**\n * Used within a clarity grid column {@link DatagridComponent} to render a filter widget with list of checkboxes to select\n * multiple options\n * Example usage:\n * columns: GridColumn<MockRecord>[] = [{\n *      displayName: 'Custom Select filter',\n *      renderer: 'state',\n *      queryFieldName: 'state',\n *      filterRendererSpec: FilterComponentRendererSpec({\n *          type: DatagridMultiSelectFilterComponent,\n *          config: {\n *              options: [{\n *                  value: 'CA',\n *                  display: 'California'\n *              }, {\n *                  value: 'MA',\n *                  display: 'Massachusetts'\n *              }],\n *              value: ['MA', 'NC'],\n *          },\n *      }),\n *   }]\n */\n@Component({\n    selector: \"vcd-dg-multiselect-filter\",\n    templateUrl: \"./datagrid-multiselect-filter.component.html\",\n    providers: [SubscriptionTracker],\n})\nexport class DatagridMultiSelectFilterComponent extends DatagridFilter<string[], DatagridMultiSelectFilterConfig> {\n    constructor(\n        filterContainer: ClrDatagridFilter,\n        @Self() subTracker: SubscriptionTracker,\n        private elemRef: ElementRef\n    ) {\n        super(filterContainer, subTracker);\n    }\n\n    /**\n     * Used inside the HTML to instantiate checkbox options\n     */\n    options: MultiSelectOptionInternal[];\n\n    formGroup: BooleanFormGroup = new FormGroup({});\n\n    /**\n     * Overrides the config property because, the formGroup controls are defined by the config set by the caller.\n     * Value of each option becomes a formControl name inside the formGroup.\n     */\n    onBeforeSetConfig(config: DatagridMultiSelectFilterConfig): void {\n        this.options = config.options.map((option) => ({\n            ...option,\n            id: idGenerator.generate(),\n        }));\n        // Remove all the form controls in the form before adding new controls\n        Object.keys(this.formGroup.controls).forEach((control) => {\n            this.formGroup.removeControl(control);\n        });\n        config.options.forEach((option) => {\n            this.formGroup.addControl(option.value, new FormControl(false));\n        });\n    }\n\n    protected getDebounceTimeMs(): number {\n        return 1000;\n    }\n\n    setValue(values: string[]): void {\n        values.forEach((frmCtrl) => {\n            const correspondingFormCtrl = this.formGroup.controls[frmCtrl];\n            if (!correspondingFormCtrl) {\n                throw Error(`A multi select filter option with value '${frmCtrl}' does not exist`);\n            }\n            correspondingFormCtrl.setValue(true);\n        });\n    }\n\n    getValue(): string {\n        const selectedFilters = Object.keys(this.formGroup.getRawValue())\n            .filter((formControl) => this.formGroup.get(formControl).value)\n            .map((selectedOption) => new FilterBuilder().is(this.queryField).equalTo(selectedOption));\n        return new FilterBuilder().any(...selectedFilters).getString();\n    }\n\n    isActive(): boolean {\n        return (\n            this.formGroup &&\n            !!Object.keys(this.formGroup.getRawValue()).filter((frmCtrl) => this.formGroup.get(frmCtrl).value).length\n        );\n    }\n\n    protected setFocus(): void {\n        this.elemRef?.nativeElement?.querySelector(\"input\")?.focus();\n    }\n}\n\n/**\n * Creates a {@link FilterRendererSpec} with the given config.\n * @param options List of options for select input\n * @param value the default value that should go in this multi-select filter.\n */\nexport function DatagridMultiSelectFilter(\n    options: MultiSelectOption[],\n    value?: string[]\n): FilterRendererSpec<DatagridMultiSelectFilterConfig> {\n    return FilterComponentRendererSpec({\n        type: DatagridMultiSelectFilterComponent,\n        config: {\n            options,\n            value,\n        },\n    });\n}\n","<form [formGroup]=\"formGroup\">\n    <div class=\"clr-form-control\">\n        <div class=\"clr-control-container\">\n            <div class=\"clr-checkbox-wrapper\" *ngFor=\"let option of options\">\n                <input type=\"checkbox\" class=\"clr-checkbox\" [id]=\"option.id\" [formControlName]=\"option.value\" />\n                <label class=\"clr-control-label\" [for]=\"option.id\">\n                    {{ option.isTranslatable ? (option.display | translate) : option.display }}\n                </label>\n            </div>\n        </div>\n    </div>\n</form>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport interface CanBeReadOnly {\n    /**\n     * This being true implies that any controls that may edit data will not allow editing or be removed\n     */\n    isReadOnly: boolean;\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./form.module\";\nexport * from \"./base-form-control\";\nexport * from \"./form-input/form-input.component\";\nexport * from \"./form-select/form-select.component\";\nexport * from \"./interfaces/can-be-read-only.interface\";\nexport * from \"./validators\";\nexport * from \"./number-with-unit-input/number-with-unit-form-input.component\";\nexport * from \"./form-checkbox/form-checkbox.component\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, ElementRef, Host, Input, OnDestroy, OnInit, Self, ViewChild } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup } from \"@angular/forms\";\nimport { ClrDatagridFilter } from \"@clr/angular\";\nimport { SubscriptionTracker } from \"../../common/subscription/subscription-tracker\";\nimport { NumberWithUnitFormInputComponent } from \"../../form\";\nimport { FilterBuilder } from \"../../utils/filter-builder\";\nimport { Unit } from \"../../utils/unit/unit\";\nimport { DatagridFilter, FilterComponentRendererSpec, FilterConfig, FilterRendererSpec } from \"./datagrid-filter\";\n\nenum FormFields {\n    from = \"from\",\n    to = \"to\",\n}\n\n/**\n * The type of value that goes in the {@link DatagridNumericFilterConfig}.\n */\nexport type DatagridNumericFilterValue = [number, number];\n\n/**\n * Numeric filter UI widget has only single configuration. So there are no properties in addition to FilterConfig\n */\nexport interface DatagridNumericFilterConfig extends FilterConfig<DatagridNumericFilterValue> {\n    unit?: Unit;\n    unitOptions?: Unit[];\n}\n\n@Component({\n    selector: \"vcd-dg-numeric-filter\",\n    templateUrl: \"datagrid-numeric-filter.component.html\",\n    styleUrls: [\"datagrid-numeric-filter.component.scss\"],\n    providers: [SubscriptionTracker],\n})\nexport class DatagridNumericFilterComponent\n    extends DatagridFilter<DatagridNumericFilterValue, DatagridNumericFilterConfig>\n    implements OnInit\n{\n    maxNumberLength = Number.MAX_SAFE_INTEGER.toString().length;\n\n    @ViewChild(\"from\") fromInput: NumberWithUnitFormInputComponent;\n    @ViewChild(\"to\") toInput: NumberWithUnitFormInputComponent;\n\n    /**\n     * Options for the select input of units\n     */\n    private _unitOptions: Unit[];\n    @Input() set unitOptions(val: Unit[]) {\n        this._unitOptions = val;\n        if (!this.unit && this.unitOptions && this.unitOptions.length) {\n            this.unit = this.unitOptions[0];\n        }\n    }\n    get unitOptions(): Unit[] {\n        return this._unitOptions;\n    }\n\n    /**\n     * Base unit to which selected units are converted\n     */\n    private _unit: Unit;\n    @Input() set unit(val: Unit) {\n        if (!val && this.unitOptions && this.unitOptions.length) {\n            this._unit = this.unitOptions[0];\n            return;\n        }\n        this._unit = val;\n    }\n    get unit(): Unit {\n        return this._unit;\n    }\n\n    formGroup = new FormGroup({\n        from: new FormControl(null as number),\n        to: new FormControl(null as number),\n    });\n\n    constructor(\n        filterContainer: ClrDatagridFilter,\n        @Self() subTracker: SubscriptionTracker,\n        private elemRef: ElementRef\n    ) {\n        super(filterContainer, subTracker);\n    }\n\n    protected onBeforeSetConfig(config: DatagridNumericFilterConfig): void {\n        this.unitOptions = config.unitOptions;\n        this.unit = config.unit;\n    }\n\n    setValue(values: DatagridNumericFilterValue): void {\n        if (!values) {\n            return;\n        }\n        if (typeof values[0] === \"number\") {\n            this.formGroup.controls.from.setValue(values[0]);\n        } else {\n            this.formGroup.controls.from.setValue(null);\n        }\n        if (typeof values[1] === \"number\") {\n            this.formGroup.controls.to.setValue(values[1]);\n        } else {\n            this.formGroup.controls.to.setValue(null);\n        }\n    }\n\n    getValue(): string {\n        const filterBuilder = new FilterBuilder().is(this.queryField);\n        const from = this.formGroup.controls.from.value;\n        const to = this.formGroup.controls.to.value;\n        if (typeof from === \"number\" && typeof to !== \"number\") {\n            return filterBuilder.greaterThan(from).getString();\n        }\n        if (typeof from !== \"number\" && typeof to === \"number\") {\n            return filterBuilder.lessThan(to).getString();\n        }\n        if (typeof from === \"number\" && typeof to === \"number\") {\n            return filterBuilder.betweenNumbers([from, to]).getString();\n        }\n    }\n\n    isActive(): boolean {\n        return !!(\n            this.formGroup &&\n            (typeof this.formGroup.controls.from.value === \"number\" ||\n                typeof this.formGroup.controls.to.value === \"number\")\n        );\n    }\n\n    close(): void {\n        this.filterContainer.open = false;\n    }\n\n    protected setFocus(): void {\n        this.elemRef?.nativeElement?.querySelector(\"input\")?.focus();\n    }\n}\n\n/**\n * Creates a {@link FilterRendererSpec} with the given config.\n * @param value the default value that should go in this numeric filter.\n * @param unit initial value for unit input to be selected\n * @param unitOptions Select dropdown options for unit input\n */\nexport function DatagridNumericFilter(\n    value?: DatagridNumericFilterValue,\n    unitOptions?: Unit[],\n    unit?: Unit\n): FilterRendererSpec<DatagridNumericFilterConfig> {\n    return FilterComponentRendererSpec({\n        type: DatagridNumericFilterComponent,\n        config: {\n            value,\n            unit,\n            unitOptions,\n        },\n    });\n}\n","<div class=\"clr-row\">\n    <div class=\"clr-col-6\">\n        <vcd-number-with-unit-form-input\n            #from\n            *ngIf=\"unit\"\n            [label]=\"'vcd.cc.numeric.filter.from' | translate\"\n            [formControl]=\"formGroup.controls.from\"\n            [unitOptions]=\"unitOptions\"\n            [showUnlimitedOption]=\"false\"\n            [min]=\"0\"\n            [inputValueUnit]=\"unit\"\n        >\n        </vcd-number-with-unit-form-input>\n        <vcd-form-input\n            *ngIf=\"!unit\"\n            [type]=\"'number'\"\n            [label]=\"'vcd.cc.numeric.filter.from' | translate\"\n            [formControl]=\"formGroup.controls.from\"\n            [maxlength]=\"maxNumberLength\"\n            (enterClicked)=\"close()\"\n            (escapeClicked)=\"close()\"\n        ></vcd-form-input>\n    </div>\n\n    <div class=\"clr-col-6\">\n        <vcd-number-with-unit-form-input\n            #to\n            *ngIf=\"unit\"\n            [label]=\"'vcd.cc.numeric.filter.to' | translate\"\n            [formControl]=\"formGroup.controls.to\"\n            [unitOptions]=\"unitOptions\"\n            [showUnlimitedOption]=\"false\"\n            [min]=\"0\"\n            [inputValueUnit]=\"unit\"\n        >\n        </vcd-number-with-unit-form-input>\n        <vcd-form-input\n            *ngIf=\"!unit\"\n            [type]=\"'number'\"\n            [label]=\"'vcd.cc.numeric.filter.to' | translate\"\n            [formControl]=\"formGroup.controls.to\"\n            [maxlength]=\"maxNumberLength\"\n            (enterClicked)=\"close()\"\n            (escapeClicked)=\"close()\"\n        ></vcd-form-input>\n    </div>\n</div>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, ElementRef, OnInit, Self, ViewChild } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup } from \"@angular/forms\";\nimport { ClrDatagridFilter } from \"@clr/angular\";\nimport { SelectOption } from \"../../common/interfaces/select-option\";\nimport { SubscriptionTracker } from \"../../common/subscription/subscription-tracker\";\nimport { FilterBuilder } from \"../../utils/filter-builder\";\nimport { DatagridFilter, FilterComponentRendererSpec, FilterConfig, FilterRendererSpec } from \"./datagrid-filter\";\n\n/**\n * List of select options and initial value for the filter are passed through this\n */\nexport interface DatagridSelectFilterConfig extends FilterConfig<string | number> {\n    /**\n     * List of select options\n     */\n    options: SelectOption[];\n\n    /**\n     * Switch to disable conversion of filter value to FIQL. Used by {@link DatagridSelectFilterComponent#getValue}\n     */\n    customFiql?: boolean;\n}\n\n/**\n * Used within a clarity grid column {@link DatagridComponent} to render a filter widget with select input\n * Example usage:\n * columns: GridColumn<MockRecord>[] = [{\n *      displayName: 'Custom Select filter',\n *      renderer: 'age',\n *      queryFieldName: 'age',\n *      filterRendererSpec: FilterComponentRendererSpec({\n *          type: DatagridSelectFilterComponent,\n *          config: {\n *              options: [{\n *                  value: 30,\n *                  display: 'Thirty'\n *              }, {\n *                  value: 60,\n *                  display: 'sixty'\n *              }],\n *              value: 60,\n *          },\n *      }),\n *   }]\n */\n@Component({\n    selector: \"vcd-dg-select-filter\",\n    templateUrl: \"datagrid-select-filter.component.html\",\n    providers: [SubscriptionTracker],\n})\nexport class DatagridSelectFilterComponent\n    extends DatagridFilter<string | number, DatagridSelectFilterConfig>\n    implements OnInit\n{\n    @ViewChild(\"onOpenFocusEl\") onOpenFocusEl: ElementRef;\n\n    /**\n     * Displayed as the first option with a falsy value. Selecting this option would deactivate the filter\n     */\n    anyChoice: SelectOption = {\n        value: \"\",\n        display: \"\",\n    };\n\n    formGroup = new FormGroup({\n        filterSelect: new FormControl(\"\" as string | number),\n    });\n\n    constructor(\n        filterContainer: ClrDatagridFilter,\n        private fb: FormBuilder,\n        @Self() subTracker: SubscriptionTracker\n    ) {\n        super(filterContainer, subTracker);\n    }\n\n    protected getDebounceTimeMs(): number {\n        return 0;\n    }\n\n    setValue(value: string | number): void {\n        if (!this.config.options.find((option) => option.value === value)) {\n            throw Error(\"The value being set on select filter is not equal to any of the options\");\n        }\n        this.formGroup.setValue({\n            filterSelect: value,\n        });\n    }\n\n    getValue(): string {\n        if (this.config.customFiql) {\n            return this.formGroup.controls.filterSelect.value.toString();\n        }\n        const filterBuilder = new FilterBuilder().is(this.queryField);\n        const value = this.formGroup.controls.filterSelect.value;\n        return filterBuilder.equalTo(value).getString();\n    }\n\n    isActive(): boolean {\n        return !!(this.formGroup && this.formGroup.controls.filterSelect.value);\n    }\n\n    protected setFocus(): void {\n        this.onOpenFocusEl?.nativeElement.focus();\n    }\n}\n\n/**\n * Creates a {@link FilterRendererSpec} with the given config.\n * @param options List of options for select input\n * @param value the default value that should go in this select filter.\n * @param customFiql when set as true will disable any formatting by {@link DatagridSelectFilterComponent#getValue}\n */\nexport function DatagridSelectFilter(\n    options: SelectOption[],\n    value?: string | number,\n    customFiql?: boolean\n): FilterRendererSpec<DatagridSelectFilterConfig> {\n    return FilterComponentRendererSpec({\n        type: DatagridSelectFilterComponent,\n        config: {\n            options,\n            value,\n            customFiql,\n        },\n    });\n}\n","<form>\n    <div class=\"clr-form-control\">\n        <div class=\"clr-control-container\">\n            <div class=\"clr-select-wrapper\">\n                <select #onOpenFocusEl [formControl]=\"formGroup.controls.filterSelect\" class=\"clr-select\">\n                    <option [ngValue]=\"anyChoice.value\">{{ anyChoice.display }}</option>\n                    <option *ngFor=\"let option of config.options\" [ngValue]=\"option.value\">\n                        {{ option.isTranslatable ? (option.display | translate) : option.display }}\n                    </option>\n                </select>\n            </div>\n        </div>\n    </div>\n</form>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, ElementRef, Self, ViewChild } from \"@angular/core\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\nimport { ClrDatagridFilter } from \"@clr/angular\";\nimport { TranslationService } from \"@vcd/i18n\";\nimport { SubscriptionTracker } from \"../../common/subscription/subscription-tracker\";\nimport { FilterBuilder } from \"../../utils/filter-builder\";\nimport { LazyString } from \"../../utils/types\";\nimport { DatagridFilter, FilterComponentRendererSpec, FilterConfig, FilterRendererSpec } from \"./datagrid-filter\";\n\nexport enum WildCardPosition {\n    NONE = 0,\n    START = 1,\n    END = 2,\n    WRAP = WildCardPosition.START | WildCardPosition.END,\n}\n\n/**\n * Configures the '*' position in the FIQL string output\n */\nexport interface DatagridStringFilterConfig extends FilterConfig<string> {\n    wildCardPosition?: WildCardPosition;\n    placeholder?: string;\n}\n\n@Component({\n    selector: \"vcd-dg-string-filter\",\n    templateUrl: \"datagrid-string-filter.component.html\",\n    providers: [SubscriptionTracker],\n})\nexport class DatagridStringFilterComponent extends DatagridFilter<string, DatagridStringFilterConfig> {\n    formGroup = new FormGroup({\n        filterText: new FormControl(\"\"),\n    });\n\n    @ViewChild(\"inputElement\") inputElement: ElementRef;\n\n    protected placeholder: LazyString;\n\n    constructor(\n        filterContainer: ClrDatagridFilter,\n        private translationService: TranslationService,\n        @Self() subTracker: SubscriptionTracker\n    ) {\n        super(filterContainer, subTracker);\n    }\n\n    setValue(value: string): void {\n        this.formGroup.setValue({\n            filterText: value,\n        });\n    }\n\n    getValue(): string {\n        const filterBuilder = new FilterBuilder().is(this.queryField);\n        let value = this.formGroup.controls.filterText.value;\n        if (this.config && this.config.wildCardPosition) {\n            value = this.addWildCard(value, this.config.wildCardPosition);\n        }\n        return filterBuilder.equalTo(value).getString();\n    }\n\n    protected onBeforeSetConfig(config: DatagridStringFilterConfig): void {\n        this.placeholder =\n            config?.placeholder || this.translationService.translateAsync(\"vcd.cc.datagrid.common.filter.items\");\n    }\n\n    isActive(): boolean {\n        return !!(this.formGroup && this.formGroup.controls.filterText.value);\n    }\n\n    protected setFocus(): void {\n        this.inputElement?.nativeElement.focus();\n    }\n\n    /**\n     * Wraps a string with a `wrapCharacter` in given position;\n     */\n    private addWildCard(input: string, position: WildCardPosition, wildcardCharacter = \"*\"): string {\n        const start = getWrapCharacter(position, WildCardPosition.START);\n        const end = getWrapCharacter(position, WildCardPosition.END);\n        return `${start}${input}${end}`;\n\n        /**\n         * @return `wrapCharacter` if the passed in position should show it, an empty string otherwise\n         */\n        function getWrapCharacter(inputPosition: WildCardPosition, checkPosition: WildCardPosition): string {\n            return inputPosition & checkPosition ? wildcardCharacter : \"\";\n        }\n    }\n}\n\n/**\n * Creates a {@link FilterRendererSpec} with the given config.\n * @param wildCardPosition where the * should go in the FIQL string output.\n * @param value the default value of the filter\n * @param placeholder for the input field\n */\nexport function DatagridStringFilter(\n    wildCardPosition?: WildCardPosition,\n    value?: string,\n    placeholder?: string\n): FilterRendererSpec<DatagridStringFilterConfig> {\n    return FilterComponentRendererSpec({\n        type: DatagridStringFilterComponent,\n        config: {\n            wildCardPosition,\n            value,\n            placeholder,\n        },\n    });\n}\n","<form>\n    <input\n        #inputElement\n        type=\"text\"\n        name=\"search\"\n        class=\"clr-input\"\n        [attr.aria-label]=\"placeholder | lazyString\"\n        [placeholder]=\"placeholder | lazyString\"\n        [formControl]=\"formGroup.controls.filterText\"\n    />\n</form>\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component, Input } from \"@angular/core\";\nimport { ComponentRenderer } from \"../interfaces/component-renderer.interface\";\nimport { ColumnComponentRendererSpec, ColumnRendererSpec } from \"../interfaces/datagrid-column.interface\";\n/**\n * {@link ComponentRenderer.config} type that the {@link BoldTextRendererComponent} can understand\n */\nexport interface BoldTextRendererConfig {\n    /**\n     * Text to be displayed in bold font\n     */\n    text: string;\n}\n\n/**\n * A {@link ComponentRenderer} component that is used for rendering a bold text inside a column cell template\n *\n * @example Example usage with RendererSpec:\n *     columns: GridColumn<MockRecord>[] = [\n *       {\n *         displayName: 'Component Renderer',\n *         renderer: RendererSpec(\n *           BoldTextRendererComponent,\n *           (record: MockRecord) => ({text: record.name})\n *         )\n *       }\n *     ];\n */\n@Component({\n    selector: \"vcd-bold-text-renderer\",\n    template: ` <strong>{{ config.text }}</strong> `,\n})\nexport class BoldTextRendererComponent implements ComponentRenderer<BoldTextRendererConfig> {\n    @Input()\n    config: BoldTextRendererConfig;\n}\n\n/**\n * Creates a {@link ColumnRendererSpec} for rendering bold text in a column.\n */\nexport function BoldTextRenderer<R>(\n    textExtractor: (record: R) => string\n): ColumnRendererSpec<R, BoldTextRendererConfig> {\n    return ColumnComponentRendererSpec({\n        type: BoldTextRendererComponent,\n        config(record): BoldTextRendererConfig {\n            return {\n                text: textExtractor(record),\n            };\n        },\n    });\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { RouterModule } from \"@angular/router\";\nimport { ClarityModule } from \"@clr/angular\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { VcdActionMenuModule } from \"../action-menu/action-menu.module\";\nimport { VcdActivityReporterModule } from \"../common/activity-reporter/activity-reporter.module\";\nimport { PipesModule } from \"../common/pipes/pipes.module\";\nimport { VcdFormModule } from \"../form/form.module\";\nimport { ShowClippedTextDirectiveModule } from \"../lib/directives/show-clipped-text.directive.module\";\nimport { DatagridComponent } from \"./datagrid.component\";\nimport { VcdComponentRendererOutletModule } from \"./directives/component-renderer-outlet.module\";\nimport { DatagridMultiSelectFilterComponent } from \"./filters/datagrid-multiselect-filter.component\";\nimport { DatagridNumericFilterComponent } from \"./filters/datagrid-numeric-filter.component\";\nimport { DatagridSelectFilterComponent } from \"./filters/datagrid-select-filter.component\";\nimport { DatagridStringFilterComponent } from \"./filters/datagrid-string-filter.component\";\nimport { FunctionRendererPipe } from \"./pipes/function-renderer.pipe\";\nimport { BoldTextRendererComponent } from \"./renderers/bold-text-renderer.component\";\n\nconst pipes = [FunctionRendererPipe];\nconst renderers = [BoldTextRendererComponent];\nconst filters = [\n    DatagridNumericFilterComponent,\n    DatagridStringFilterComponent,\n    DatagridSelectFilterComponent,\n    DatagridMultiSelectFilterComponent,\n];\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ClarityModule,\n        RouterModule,\n        PipesModule,\n        ReactiveFormsModule,\n        ShowClippedTextDirectiveModule,\n        FormsModule,\n        I18nModule,\n        VcdActivityReporterModule,\n        VcdFormModule,\n        VcdActionMenuModule,\n        VcdComponentRendererOutletModule,\n    ],\n    declarations: [DatagridComponent, ...renderers, ...pipes, ...filters],\n    providers: [],\n    exports: [DatagridComponent, ...renderers],\n})\nexport class VcdDatagridModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { VcdActionMenuModule } from \"./action-menu/index\";\nimport { VcdActivityReporterModule } from \"./common/activity-reporter/activity-reporter.module\";\nimport { VcdErrorBannerModule } from \"./common/error/error-banner.module\";\nimport { VcdLoadingIndicatorModule } from \"./common/loading/loading-indicator.module\";\nimport { VcdDataExporterModule } from \"./data-exporter/data-exporter.module\";\nimport { VcdDatagridModule } from \"./datagrid/datagrid.module\";\nimport { DropdownModule } from \"./dropdown/dropdown.module\";\nimport { VcdFormModule } from \"./form/form.module\";\nimport { AlternativeTextModule } from \"./lib/directives/alternative-text/alternative-text.module\";\nimport { ResponsiveInputDirectiveModule } from \"./lib/directives/responsive-input/responsive-input.module\";\nimport { ShowClippedTextDirectiveModule } from \"./lib/directives/show-clipped-text.directive.module\";\nimport { QuickSearchModule } from \"./quick-search/quick-search.module\";\nimport { AriaActivedescendantModule } from \"./lib/directives\";\n\n@NgModule({\n    exports: [\n        VcdDataExporterModule,\n        VcdDatagridModule,\n        ShowClippedTextDirectiveModule,\n        VcdErrorBannerModule,\n        VcdLoadingIndicatorModule,\n        VcdActivityReporterModule,\n        VcdFormModule,\n        QuickSearchModule,\n        VcdActionMenuModule,\n        DropdownModule,\n        ResponsiveInputDirectiveModule,\n        AlternativeTextModule,\n        AriaActivedescendantModule,\n    ],\n})\nexport class VcdComponentsModule {}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { BaseWidgetObject } from \"@vcd/widget-object\";\nimport { DataUi } from \"./data-exporter.component\";\n\n/**\n * Testing Object for {@link DataExporterComponent}\n */\nexport class DataExporterWidgetObject<T> extends BaseWidgetObject<T> {\n    static tagName = \"vcd-data-exporter\";\n\n    /**\n     * The available column bubbles that display the selected columns when the dropdown\n     * is closed, if check all is not selected.\n     */\n    getColumnBubbles = this.factory.dataUi(DataUi.columnSelectionBubbles);\n\n    /** Gets the cancel button. */\n    getCancelButton = this.factory.dataUi(DataUi.cancelButton);\n\n    /** The button that initiates the export process */\n    getExportButton = this.factory.dataUi(DataUi.exportButton);\n\n    /** Gets the export all switch */\n    getToggleSelectAll = this.factory.dataUi(DataUi.selectAllToggleLabel);\n\n    /** Gets the friendly field names switch  */\n    getToggleFriendlyNames = this.factory.dataUi(DataUi.friendlyNamesToggleLabel);\n\n    /** Gets the progress bar. */\n    getProgress = this.factory.dataUi(DataUi.progressInput);\n\n    /** The list of labels for the checkboxes with the configured columns */\n    getColumnCheckboxes = this.factory.dataUi(DataUi.columnSelectionMenuOptions);\n\n    getColumnCheckboxByLabel = this.factory.dataUi(DataUi.columnSelectionMenuOptions);\n\n    getColumnCheckboxArrow = this.factory.dataUi(DataUi.columnCheckboxArrow);\n\n    getColumnBubblesX = this.factory.dataUi(DataUi.columnBubblesX);\n\n    /**\n     * Exports data with the option to specify columns to be deselected\n     * @param columnsToUncheck  - Columns to be unchecked before exporting\n     */\n    exportData(columnsToUncheck?: string[]): void {\n        if (columnsToUncheck) {\n            this.getToggleSelectAll().click();\n            for (const column of columnsToUncheck) {\n                this.getColumnCheckboxByLabel({ text: column }).click();\n            }\n        }\n        this.getExportButton().click();\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./data-exporter.component\";\nexport * from \"./data-exporter.module\";\nexport * from \"./data-exporter.wo\";\nexport * from \"./csv-exporter.service\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Type } from \"@angular/core\";\n\n/**\n * Implemented by all the component renderers. The components that have to be rendered dynamically.\n */\nexport interface ComponentRenderer<T> {\n    /**\n     * Object used by the component renderers inside their HTML template\n     */\n    config: T;\n}\n\n/**\n * Used for the type safety of {@link ColumnRendererSpec#type}\n */\nexport type ComponentRendererConstructor<V> = Type<ComponentRenderer<V>>;\n\n/**\n * An object that contains the constructor of a component of {@link ComponentRenderer} type that has to be rendered dynamically.\n *\n * {@link ComponentRendererOutletDirective} uses this object to render the component. It is responsible for setting the\n * component's configuration{@link ComponentRenderer#config} after dynamically initializing it. But the caller is responsible\n * for providing a config\n */\nexport interface ComponentRendererSpec<C> {\n    /**\n     * Constructor of a specific type of component to be rendered\n     */\n    type: ComponentRendererConstructor<C>;\n    /**\n     * {@link ComponentRenderer.config}. In the case of a {@link ColumnRendererSpec} it is a function that takes a rest\n     * item as input and returns an object of {@link ComponentRenderer.config}\n     */\n    config: C | ((restItem: unknown) => C);\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./bold-text-renderer.component\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./datagrid.module\";\nexport * from \"./datagrid.component\";\nexport * from \"./directives/component-renderer-outlet.directive\";\nexport * from \"./directives/component-renderer-outlet.module\";\nexport * from \"./interfaces/datagrid-column.interface\";\nexport * from \"./interfaces/component-renderer.interface\";\nexport * from \"./interfaces/datagrid-action-display.interface\";\nexport * from \"./renderers/index\";\nexport * from \"./filters/datagrid-filter\";\nexport * from \"./filters/datagrid-numeric-filter.component\";\nexport * from \"./filters/datagrid-string-filter.component\";\nexport * from \"./filters/datagrid-select-filter.component\";\nexport * from \"./filters/datagrid-multiselect-filter.component\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./dropdown.module\";\nexport * from \"./dropdown.component\";\nexport * from \"./dynamic-dropdown-position.directive\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component } from \"@angular/core\";\nimport { FieldType } from \"@ngx-formly/core\";\n\n@Component({\n    selector: \"vcd-formly-input\",\n    template: `\n        <vcd-form-input\n            [label]=\"to.label\"\n            [description]=\"to.description\"\n            [showAsterisk]=\"to.required\"\n            [isReadOnly]=\"to.isReadOnly\"\n            [errorLabels]=\"errorLabels\"\n            [placeholder]=\"to.placeholder\"\n            [min]=\"min\"\n            [max]=\"max\"\n            [type]=\"type\"\n            [formControl]=\"formControl\"\n            [size]=\"to.size\"\n            [maxlength]=\"to.maxlength\"\n            [hintPosition]=\"hintPosition\"\n            [hint]=\"to.hint\"\n            (enterClicked)=\"onEnterClicked()\"\n            (escapeClicked)=\"onEscapeClicked()\"\n        >\n        </vcd-form-input>\n    `,\n})\nexport class FormlyInputComponent extends FieldType {\n    /**\n     * {@link FormInputComponent.min}\n     */\n    get min(): number {\n        return this.to.min || Number.MIN_SAFE_INTEGER;\n    }\n    /**\n     * {@link FormInputComponent.max}\n     */\n    get max(): number {\n        return this.to.max || Number.MAX_SAFE_INTEGER;\n    }\n    /**\n     * {@link FormInputComponent.type}\n     */\n    get type(): string {\n        return this.to.type || \"text\";\n    }\n    /**\n     * {@link FormInputComponent.hintPosition}\n     */\n    get hintPosition(): string {\n        return this.to.hintPosition || \"top-left\";\n    }\n    /**\n     * {@link FormInputComponent.errorLabels}\n     */\n    get errorLabels(): string[] {\n        return this.to.errorLabels || [];\n    }\n    /**\n     * {@link FormInputComponent.enterClicked}\n     */\n    onEnterClicked(): any {\n        if (this.to.onEnterClicked) {\n            return this.to.onEnterClicked(this.field);\n        }\n    }\n    /**\n     * {@link FormInputComponent.escapeClicked}\n     */\n    onEscapeClicked(): any {\n        if (this.to.onEscapeClicked) {\n            return this.to.onEscapeClicked(this.field);\n        }\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component } from \"@angular/core\";\nimport { FieldType } from \"@ngx-formly/core\";\nimport { UNLIMITED } from \"../../../../form/number-with-unit-input/number-with-unit-form-input.component\";\n\n@Component({\n    selector: \"vcd-formly-number-with-unit-input\",\n    template: `\n        <vcd-number-with-unit-form-input\n            [label]=\"to.label\"\n            [description]=\"to.description\"\n            [showAsterisk]=\"to.required\"\n            [isReadOnly]=\"to.isReadOnly\"\n            [errorLabels]=\"errorLabels\"\n            [placeholder]=\"to.placeholder\"\n            [min]=\"min\"\n            [max]=\"max\"\n            [formControl]=\"formControl\"\n            [size]=\"to.size\"\n            [maxlength]=\"to.maxlength\"\n            [hintPosition]=\"hintPosition\"\n            [hint]=\"to.hint\"\n            [showUnlimitedOption]=\"showUnlimitedOption\"\n            [unlimitedValue]=\"unlimitedValue\"\n            [inputValueUnit]=\"to.inputValueUnit\"\n            [unitOptions]=\"to.unitOptions\"\n        >\n        </vcd-number-with-unit-form-input>\n    `,\n})\nexport class FormlyNumberWithUnitInputComponent extends FieldType {\n    /**\n     * {@link NumberWithUnitFormInputComponent.errorLabels}\n     */\n    get errorLabels(): string[] {\n        return this.to.errorLabels || [];\n    }\n    /**\n     * {@link NumberWithUnitFormInputComponent.min}\n     */\n    get min(): number {\n        return this.to.min || UNLIMITED;\n    }\n    /**\n     * {@link NumberWithUnitFormInputComponent.max}\n     */\n    get max(): number {\n        return this.to.max || Number.MAX_SAFE_INTEGER;\n    }\n    /**\n     * {@link NumberWithUnitFormInputComponent.hintPosition}\n     */\n    get hintPosition(): string {\n        return this.to.hintPosition || \"top-left\";\n    }\n    /**\n     * {@link NumberWithUnitFormInputComponent.showUnlimitedOption}\n     */\n    get showUnlimitedOption(): boolean {\n        if (typeof this.to.showUnlimitedOption !== \"boolean\") {\n            return true;\n        }\n        return this.to.showUnlimitedOption;\n    }\n    /**\n     * {@link NumberWithUnitFormInputComponent.unlimitedValue}\n     */\n    get unlimitedValue(): number {\n        return this.to.unlimitedValue || UNLIMITED;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { Component } from \"@angular/core\";\nimport { FieldType } from \"@ngx-formly/core\";\nimport { Observable, of } from \"rxjs\";\nimport { SelectOption } from \"../../../../common/interfaces/select-option\";\n\n@Component({\n    selector: \"vcd-formly-select\",\n    template: `\n        <vcd-form-select\n            [label]=\"to.label\"\n            [description]=\"to.description\"\n            [showAsterisk]=\"to.required\"\n            [isReadOnly]=\"to.isReadOnly\"\n            [errorLabels]=\"errorLabels\"\n            [formControl]=\"formControl\"\n            [options]=\"selectOptions | async\"\n        >\n        </vcd-form-select>\n    `,\n})\nexport class FormlySelectComponent extends FieldType {\n    get errorLabels(): string[] {\n        return this.to.errorLabels || [];\n    }\n\n    get selectOptions(): Observable<SelectOption[]> {\n        if (!(this.to.options instanceof Observable)) {\n            return of(this.to.options);\n        }\n        return this.to.options;\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { ConfigOption, FormlyFieldConfig, FormlyTemplateOptions } from \"@ngx-formly/core\";\nimport { Observable } from \"rxjs\";\nimport { SelectOption } from \"../../common/interfaces/select-option\";\nimport { Unit } from \"../../utils/unit/unit\";\nimport { FormlyInputComponent } from \"./inputs/input/formly-input.component\";\nimport { FormlyNumberWithUnitInputComponent } from \"./inputs/number-with-unit-input/formly-number-with-unit-input.component\";\nimport { FormlySelectComponent } from \"./inputs/select/formly-select.component\";\n\n/**\n * Options that are specific to Vcd form components. These are passed as inputs or outputs in the HTML templates.\n */\nexport interface VcdFormlyTemplateOptions extends FormlyTemplateOptions {\n    options?: SelectOption[] | Observable<SelectOption[]>;\n    inputValueUnit?: Unit;\n    unlimitedValue?: number;\n    showUnlimitedOption?: boolean;\n    unitOptions?: Unit[];\n    isReadOnly?: boolean;\n    hint?: string;\n    hintPosition?: string;\n    errorLabels?: string[];\n    onEnterClicked?: (field: FormlyFieldConfig) => any;\n    onEscapeClicked?: (field: FormlyFieldConfig) => any;\n}\n\n/**\n * Configuration of {@link FormlyForm.fields} that is specific to Vcd.\n */\nexport interface VcdFormlyFieldConfig extends FormlyFieldConfig {\n    /**\n     * {@link VcdFormlyInputTypes}\n     */\n    type?: VcdFormlyInputTypes;\n    /**\n     * {@link VcdFormlyTemplateOptions}\n     */\n    templateOptions?: VcdFormlyTemplateOptions;\n    /**\n     * {@link FormlyForm.fields}\n     */\n    fieldGroup?: VcdFormlyFieldConfig[];\n}\n\n/**\n * Different of Vcd form inputs that are configurable through Formly\n */\nexport enum VcdFormlyInputTypes {\n    /**\n     * Used for identifying {@link FormlyInputComponent} type\n     */\n    input = \"input\",\n    /**\n     * Used for identifying {@link FormlySelectComponent} type\n     */\n    select = \"select\",\n    /**\n     * Used for identifying {@link FormlyNumberWithUnitInputComponent} type\n     */\n    number_with_unit_input = \"number_with_unit_input\",\n}\n\nexport const VCD_FORMLY_CONFIG: ConfigOption = {\n    types: [\n        {\n            name: VcdFormlyInputTypes.input,\n            component: FormlyInputComponent,\n        },\n        {\n            name: VcdFormlyInputTypes.select,\n            component: FormlySelectComponent,\n        },\n        {\n            name: VcdFormlyInputTypes.number_with_unit_input,\n            component: FormlyNumberWithUnitInputComponent,\n        },\n    ],\n};\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nimport { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { ConfigOption, FORMLY_CONFIG, FormlyModule } from \"@ngx-formly/core\";\nimport { FormlySelectModule } from \"@ngx-formly/core/select\";\nimport { I18nModule } from \"@vcd/i18n\";\nimport { VcdFormModule } from \"../../form/form.module\";\nimport { FormlyInputComponent } from \"./inputs/input/formly-input.component\";\nimport { FormlyNumberWithUnitInputComponent } from \"./inputs/number-with-unit-input/formly-number-with-unit-input.component\";\nimport { FormlySelectComponent } from \"./inputs/select/formly-select.component\";\nimport { VCD_FORMLY_CONFIG } from \"./vcd-formly.config\";\n\nconst VCD_FORMLY_INPUT_COMPONENTS = [FormlyInputComponent, FormlySelectComponent, FormlyNumberWithUnitInputComponent];\n\n@NgModule({\n    declarations: [...VCD_FORMLY_INPUT_COMPONENTS],\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        FormlyModule.forChild(VCD_FORMLY_CONFIG),\n        VcdFormModule,\n        FormlySelectModule,\n        I18nModule,\n    ],\n    exports: [],\n})\nexport class VcdFormlyModule {\n    /**\n     * Used for passing configuration in addition to default {@link VCD_FORMLY_CONFIG}\n     * @param configOption Additional Formly configuration\n     */\n    static forRoot(configOption: ConfigOption): ModuleWithProviders<VcdFormlyModule> {\n        return {\n            ngModule: VcdFormlyModule,\n            providers: [{ provide: FORMLY_CONFIG, useValue: configOption, multi: true }],\n        };\n    }\n}\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./vcd-formly.module\";\nexport * from \"./vcd-formly.config\";\nexport * from \"./inputs/input/formly-input.component\";\nexport * from \"./inputs/select/formly-select.component\";\nexport * from \"./inputs/number-with-unit-input/formly-number-with-unit-input.component\";\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./action-menu/index\";\nexport * from \"./action-search-provider/index\";\nexport * from \"./common/activity-reporter/index\";\nexport * from \"./common/error/index\";\nexport * from \"./common/interfaces/index\";\nexport * from \"./common/loading/index\";\nexport * from \"./common/subscription/index\";\nexport * from \"./ui-components.module\";\nexport * from \"./data-exporter/index\";\nexport * from \"./datagrid/index\";\nexport * from \"./dropdown/index\";\nexport * from \"./form/index\";\nexport * from \"./formly/vcd/index\";\nexport * from \"./lib/directives/index\";\nexport * from \"./lib/icons/index\";\nexport * from \"./quick-search/index\";\nexport * from \"./utils/index\";\n\n/**\n * The objects an entity must have. You are allowed to pass a more complicated object.\n *\n * @deprecated We already have a version of this in\n *\n * @param T is the interface for the Object that is being selected.\n */\nexport type HasId<T> = T & {\n    /**\n     * The unique ID of this entity.\n     */\n    id: string;\n};\n","/*\n * Copyright 2023-2024 VMware, Inc. All rights reserved. VMware Confidential\n */\n\nexport * from \"./lib/public-api\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.SubscriptionTracker","i1.AriaActiveDescendantService","i2.IdGenerator","i1.DropdownFocusHandlerService","i2","i3","i4.ShowClippedTextDirective","i5","i6.DynamicDropdownPositionDirective","i7","i8.SubscriptionTracker","i3.DropdownComponent","i3.DropdownFocusHandlerDirective","i4","DataUi","i1.QuickSearchService","i3.AriaActiveDescendantService","i4.SubscriptionTracker","i5.IdGenerator","i6","i8","i9.ShowClippedTextDirective","i10.AriaActiveDescendantDirective","i11","i12.DrawerComponent","i2.ErrorBannerComponent","i3.LoadingIndicatorComponent","i1.CsvExporterService","i3.SubscriptionTracker","declarations","idGenerator","i5.ResponsiveInputDirective","i6.AlternativeTextDirective","i3.UnitFormatter","i6.ResponsiveInputDirective","i7.AlternativeTextDirective","i2.SubscriptionTracker","i5.ShowClippedTextDirective","i6.BannerActivityReporterComponent","i7.SpinnerActivityReporterComponent","i8.ActionMenuComponent","i9.ComponentRendererOutletDirective","i10.NestedPropertyPipe","i11.FunctionRendererPipe","i5.FormInputComponent","i6.NumberWithUnitFormInputComponent","i2.FormInputComponent","i2.NumberWithUnitFormInputComponent","i2.FormSelectComponent"],"mappings":"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"}