{"version":3,"file":"fundamental-ngx-core-fixed-card-layout.mjs","sources":["../../../../libs/core/fixed-card-layout/fixed-card-layout-item/fixed-card-layout-item.component.ts","../../../../libs/core/fixed-card-layout/fixed-card-layout.component.ts","../../../../libs/core/fixed-card-layout/fixed-card-layout.component.html","../../../../libs/core/fixed-card-layout/fixed-card-layout.module.ts","../../../../libs/core/fixed-card-layout/fundamental-ngx-core-fixed-card-layout.ts"],"sourcesContent":["import { FocusableOption } from '@angular/cdk/a11y';\nimport { afterNextRender, ChangeDetectionStrategy, Component, ElementRef, inject, signal } from '@angular/core';\n\n@Component({\n    selector: 'fd-fixed-card-layout-item',\n    template: `<ng-content></ng-content>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[style.display]': '\"block\"'\n    }\n})\nexport class FixedCardLayoutItemComponent implements FocusableOption {\n    /** Card title ID for aria-labelledby, or undefined if no title is present */\n    readonly cardTitleId = signal<string | undefined>(undefined);\n\n    /** @hidden */\n    private _elementRef = inject(ElementRef);\n\n    /** @hidden */\n    constructor() {\n        afterNextRender(() => {\n            // Query the DOM for the card title element after render\n            const titleElement = this._elementRef.nativeElement.querySelector('[fd-card-title]') as HTMLElement;\n            const titleId = titleElement?.getAttribute('id');\n            this.cardTitleId.set(titleId || undefined);\n        });\n    }\n\n    /** Set focus on the element. */\n    focus(): void {\n        const header = this._elementRef.nativeElement.querySelector('.fd-card__header');\n        if (header) {\n            header.focus();\n        }\n    }\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport {\n    CdkDrag,\n    CdkDragDrop,\n    CdkDragEnter,\n    CdkDragPlaceholder,\n    CdkDragStart,\n    CdkDropList,\n    CdkDropListGroup,\n    DragDropModule\n} from '@angular/cdk/drag-drop';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    QueryList,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation,\n    computed,\n    inject\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { debounceTime, filter, skip } from 'rxjs/operators';\n\nimport { Direction } from '@angular/cdk/bidi';\nimport { NumberInput, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n    DndKeyboardGroupDirective,\n    DndKeyboardItemDirective,\n    Nullable,\n    RtlService,\n    getDocumentFontSize,\n    resizeObservable\n} from '@fundamental-ngx/cdk/utils';\nimport { FixedCardLayoutItemComponent } from './fixed-card-layout-item/fixed-card-layout-item.component';\n\nconst REM_IN_PX = getDocumentFontSize();\nconst CARD_MINIMUM_WIDTH = REM_IN_PX * 20; // 20rem\nconst CARD_GAP_WIDTH = REM_IN_PX; // 1rem\nconst DRAG_START_DELAY = 200; // in ms\nconst MAX_COLUMNS = 10;\n\nlet cardRank = 1;\n\n@Directive({\n    selector: '[fdCardDef]',\n    standalone: true\n})\nexport class CardDefinitionDirective {\n    /**\n     * Behaves like rank of card.\n     * Useful in creating layout again after drag and drop.\n     */\n    @Input()\n    set fdCardDef(value: NumberInput) {\n        if (!value) {\n            return;\n        }\n\n        this._fdCardDef = coerceNumberProperty(value);\n    }\n    get fdCardDef(): number {\n        return this._fdCardDef;\n    }\n\n    /** @hidden */\n    private _fdCardDef: number = cardRank++;\n\n    /** @hidden */\n    constructor(public template: TemplateRef<any>) {}\n}\n\nexport interface Layout {\n    numberOfColumns?: number;\n    screenSize: number;\n}\n\nexport interface CardDropped {\n    previousIndex: number;\n    currentIndex: number;\n    layoutColumns: number;\n    items: CardDefinitionDirective[];\n}\n\ntype Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;\n\nexport type ColumnsWidthConfig = { [C in Columns]?: number };\n\ntype CardColumn = CardDefinitionDirective[];\n\n@Component({\n    selector: 'fd-fixed-card-layout',\n    templateUrl: './fixed-card-layout.component.html',\n    styleUrl: './fixed-card-layout.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fd-fixed-card-layout'\n    },\n    standalone: true,\n    imports: [\n        CdkDropListGroup,\n        DragDropModule,\n        DndKeyboardGroupDirective,\n        DndKeyboardItemDirective,\n        CdkDropList,\n        CdkDrag,\n        FixedCardLayoutItemComponent,\n        NgTemplateOutlet,\n        CdkDragPlaceholder\n    ]\n})\nexport class FixedCardLayoutComponent implements AfterViewInit, OnChanges, OnDestroy {\n    /** Drag drop behavior can be disabled */\n    @Input()\n    disableDragDrop: boolean;\n\n    /** Drag start delay in milliseconds, default to 200ms for safe scrolling on mobile with touchscreen */\n    @Input()\n    dragStartDelay = DRAG_START_DELAY;\n\n    /** Card's minimum width in pixels. */\n    @Input()\n    set cardMinimumWidth(value: NumberInput) {\n        const coercedValue = coerceNumberProperty(value);\n\n        if (coercedValue < CARD_MINIMUM_WIDTH) {\n            return;\n        }\n\n        this._cardMinimumWidth = coercedValue;\n    }\n    get cardMinimumWidth(): number {\n        return this._cardMinimumWidth;\n    }\n\n    /** Config with the width ratios that should take every column. Flex-grow principe. Missed values set to 0. s*/\n    @Input()\n    columnsWidthConfig: ColumnsWidthConfig;\n\n    /** Limit the number of columns. Default is 10. */\n    @Input()\n    maxColumns = MAX_COLUMNS;\n\n    /** Event to emit, when layout changes */\n    @Output()\n    layoutChange: EventEmitter<Layout> = new EventEmitter<Layout>();\n\n    /** Event to emit on Card dragged and dropped */\n    @Output()\n    cardDraggedDropped: EventEmitter<CardDropped> = new EventEmitter<CardDropped>();\n\n    /** @hidden */\n    @ContentChildren(CardDefinitionDirective)\n    _cards: QueryList<CardDefinitionDirective>;\n\n    /** @hidden */\n    @ViewChildren(FixedCardLayoutItemComponent)\n    _cardContainers: QueryList<FixedCardLayoutItemComponent>;\n\n    /** @hidden */\n    @ViewChildren(CdkDrag)\n    _dragList: QueryList<CdkDrag>;\n\n    /** @hidden */\n    @ViewChild('layout')\n    _layout: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    _cardsArray: CardDefinitionDirective[];\n\n    /** @hidden Number of Columns in layout */\n    _numberOfColumns: number;\n\n    /** @hidden */\n    _cardColumns: CardColumn[];\n\n    /** @hidden*/\n    _containerHeight = 0;\n\n    /** @hidden handles rtl service */\n    readonly dir = computed<Direction>(() => (this._rtlService?.rtl() ? 'rtl' : 'ltr'));\n\n    /** @hidden first number is the CardDefinition rank, i.e. id */\n    _groupIndexes = new Map<number, number>();\n\n    /** @hidden first number is the CardDefinition rank, i.e. id */\n    _itemIndexes = new Map<number, number>();\n\n    /** @hidden first number is the CardDefinition rank, i.e. id */\n    _singleItemColumns = new Set<number>();\n\n    /** @hidden */\n    _columnsWidth = new Map<number, number>();\n\n    /** @hidden Return available width for fixed card layout */\n    get _availableWidth(): number {\n        return this._layout.nativeElement.getBoundingClientRect().width;\n    }\n\n    /** @hidden */\n    _placeholderMargin: boolean;\n\n    /** @hidden */\n    _listenResize = true;\n\n    /** @hidden */\n    _hiddenCard: Nullable<CardDefinitionDirective>;\n\n    /** @hidden FocusKeyManager instance */\n    private _keyboardEventsManager: FocusKeyManager<FixedCardLayoutItemComponent>;\n\n    /** @hidden */\n    private _cardMinimumWidth = CARD_MINIMUM_WIDTH;\n\n    /** @hidden */\n    private _cardsSizeChangeSubscription = new Subscription();\n\n    /** @hidden  */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    @HostListener('keydown', ['$event'])\n    handleKeydown(event: KeyboardEvent): void {\n        event.stopImmediatePropagation();\n\n        if (this._keyboardEventsManager) {\n            this._keyboardEventsManager.onKeydown(event);\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._processCards();\n\n        this._listenOnResize();\n        this._listenOnCardsChange();\n        this._accessibilitySetup();\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        // Skip all changes unless we don't have initial layout created\n        if (!this._cardsArray) {\n            return;\n        }\n\n        if ('maxColumns' in changes || 'cardMinimumWidth' in changes) {\n            this.updateLayout();\n        } else if ('columnsWidthConfig' in changes) {\n            this._setCardColumnsWidth();\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._cardsSizeChangeSubscription.unsubscribe();\n        this._keyboardEventsManager?.destroy();\n    }\n\n    /** Distribute cards on window resize */\n    updateLayout(): void {\n        this._listenResize = false;\n\n        if (this._cards.length) {\n            const possibleNumberOfColumns = getNumberOfColumns(this._availableWidth, this.cardMinimumWidth);\n\n            this._numberOfColumns = Math.min(\n                possibleNumberOfColumns,\n                this._cards.length,\n                this.maxColumns || MAX_COLUMNS,\n                MAX_COLUMNS\n            );\n        } else {\n            this._numberOfColumns = 1;\n        }\n\n        this.layoutChange.emit({\n            numberOfColumns: this._numberOfColumns,\n            screenSize: this._availableWidth\n        });\n\n        this._setCardColumns();\n        this._setCardColumnsWidth();\n        this._setContainerHeight();\n\n        this._listenResize = true;\n    }\n\n    /** @hidden */\n    _onDragStarted(event: CdkDragStart): void {\n        this._listenResize = false;\n        this._hiddenCard = event.source.data;\n    }\n\n    /** @hidden */\n    _onDropListEntered(event: CdkDragEnter): void {\n        const containerItemCardDef = (event.container.getSortedItems()[0].data as CardDefinitionDirective).fdCardDef;\n        const dragItemCardDef = (event.item.data as CardDefinitionDirective).fdCardDef;\n\n        this._placeholderMargin = containerItemCardDef !== dragItemCardDef;\n\n        const columnIndexToAddSpace = this._cardColumns.findIndex((column) =>\n            column.find((card) => event.container.getSortedItems()[0].data === card)\n        );\n        const spaceToAdd =\n            event.item.element.nativeElement.getBoundingClientRect().height +\n            (event.container.getSortedItems().length ? REM_IN_PX : 0);\n\n        // When we move the card into a certain column we should increase the height of that column by the card height\n        this._setContainerHeight(columnIndexToAddSpace, spaceToAdd);\n    }\n\n    /** @hidden */\n    _onDragDropped(event: CdkDragDrop<number, number>): void {\n        this._hiddenCard = null;\n\n        if (event.container.data === event.previousContainer.data) {\n            return;\n        }\n\n        this._placeholderMargin = false;\n\n        const movedCard = event.previousContainer.getSortedItems()[0].data;\n        const replacedCard = event.container.getSortedItems()[0].data;\n\n        const movedCardColumn = this._cardColumns.find((column) =>\n            column.find((card) => card.fdCardDef === movedCard.fdCardDef)\n        );\n        const replacedCardColumn = this._cardColumns.find((column) =>\n            column.find((card) => card.fdCardDef === replacedCard.fdCardDef)\n        );\n\n        // If we dragged the card from the same column as the column we're dropping into\n        // There may be a situation where the order shouldn't change but since there are a different drop lists it will change\n        // We should prevent this\n        if (movedCardColumn === replacedCardColumn && movedCardColumn?.length === 2) {\n            if (movedCard.fdCardDef < replacedCard.fdCardDef && event.previousContainer.data < event.container.data) {\n                return;\n            }\n\n            if (movedCard.fdCardDef > replacedCard.fdCardDef && event.previousContainer.data > event.container.data) {\n                return;\n            }\n        }\n\n        this._processDragDrop(event.previousContainer.data, event.container.data, movedCard, replacedCard);\n    }\n\n    /** @hidden */\n    _sortPredicateFn = (index: number): boolean => index === 0;\n\n    /** @hidden For the keyboard drag&drop directive */\n    _customMoveFn = (group: CardColumn, indexFrom: number, indexTo: number): void => {\n        const movedCard = group[indexFrom];\n        const replacedCard = group[indexTo];\n\n        const indexFromArray = this._cardsArray.findIndex((card) => card.fdCardDef === movedCard.fdCardDef);\n        const indexToArray = this._cardsArray.findIndex((card) => card.fdCardDef === replacedCard.fdCardDef);\n\n        this._processDragDrop(indexFromArray, indexToArray, movedCard, replacedCard);\n    };\n\n    /** @hidden For the keyboard drag&drop directive */\n    _customTransferFn = (prevGroup: CardColumn, nextGroup: CardColumn, indexFrom: number, indexTo: number): void => {\n        const movedCard = prevGroup[indexFrom];\n        const replacedCard = nextGroup[indexTo];\n\n        const indexFromArray = this._cardsArray.findIndex((card) => card.fdCardDef === movedCard.fdCardDef);\n        const indexToArray = this._cardsArray.findIndex((card) => card.fdCardDef === replacedCard.fdCardDef);\n\n        this._processDragDrop(indexFromArray, indexToArray, movedCard, replacedCard);\n    };\n\n    /** @hidden Arranges cards on drop of dragged card */\n    private _processDragDrop(\n        prevIndex: number,\n        newIndex: number,\n        prevCard: CardDefinitionDirective,\n        newCard: CardDefinitionDirective\n    ): void {\n        // moveItemInArray from CDK won't work as it changes order of other cards\n        const replacedCard = this._cardsArray[newIndex];\n        this._cardsArray[newIndex] = this._cardsArray[prevIndex];\n        this._cardsArray[prevIndex] = replacedCard;\n\n        adjustCardRank(prevCard, newCard);\n\n        this.cardDraggedDropped.emit({\n            previousIndex: prevIndex,\n            currentIndex: newIndex,\n            layoutColumns: this._numberOfColumns,\n            items: this._cards.toArray()\n        });\n\n        this.updateLayout();\n    }\n\n    /** @hidden */\n    private _accessibilitySetup(): void {\n        this._keyboardEventsManager?.destroy();\n        this._keyboardEventsManager = new FocusKeyManager(this._cardContainers).withWrap();\n    }\n\n    /** @hidden Listen window resize and distribute cards on column change */\n    private _listenOnResize(): void {\n        resizeObservable(this._layout.nativeElement)\n            .pipe(\n                debounceTime(20),\n                filter(\n                    (entries) => this._listenResize && !!(entries[0].contentRect.height || entries[0].contentRect.width)\n                ),\n                takeUntilDestroyed(this._destroyRef)\n            )\n            .subscribe(() => this.updateLayout());\n    }\n\n    /** @hidden Listen card change and distribute cards on column change */\n    private _listenOnCardsChange(): void {\n        this._cards.changes.subscribe(() => {\n            this._processCards();\n            this.updateLayout();\n        });\n    }\n\n    /** @hidden */\n    private _processCards(): void {\n        this._cardsArray = this._cards\n            .toArray()\n            .sort((firstCard, secondCard) => firstCard.fdCardDef - secondCard.fdCardDef);\n    }\n\n    /** @hidden Distribute cards among columns to arrange them in \"Z\" flow */\n    private _setCardColumns(): void {\n        this._groupIndexes = new Map<number, number>();\n        this._itemIndexes = new Map<number, number>();\n        this._singleItemColumns = new Set<number>();\n\n        const columns: CardColumn[] = new Array(this._numberOfColumns).fill(0).map(() => new Array(0));\n\n        this._cardsArray.forEach((card, i) => {\n            const currColumnIndex = i % this._numberOfColumns;\n            const itemIndex = columns[currColumnIndex].length;\n\n            columns[currColumnIndex].push(card);\n\n            this._groupIndexes.set(card.fdCardDef, currColumnIndex);\n            this._itemIndexes.set(card.fdCardDef, itemIndex);\n        });\n\n        this._cardColumns = columns;\n\n        this._cardColumns.forEach((column) => {\n            if (column.length === 1) {\n                this._singleItemColumns.add(column[0].fdCardDef);\n            }\n        });\n\n        this._listenOnCardsHeightChange();\n    }\n\n    /** @hidden */\n    private _setCardColumnsWidth(): void {\n        this._columnsWidth = new Map();\n\n        const configPresent =\n            this.columnsWidthConfig &&\n            typeof this.columnsWidthConfig === 'object' &&\n            Object.keys(this.columnsWidthConfig).length;\n\n        if (!configPresent || this._numberOfColumns === 1) {\n            return;\n        }\n\n        const fixedWidthModifiers = fixWidthModifiers(this.columnsWidthConfig, this._numberOfColumns);\n        const totalWidthModifiers = fixedWidthModifiers.reduce((sum, width) => (sum += width), 0);\n        const freeSpace = this._availableWidth - this.cardMinimumWidth * this._numberOfColumns;\n\n        this._cardColumns.forEach((column, index) => {\n            const columnWidth = Math.round(\n                this.cardMinimumWidth + (freeSpace / totalWidthModifiers) * fixedWidthModifiers[index]\n            );\n\n            column.forEach((card) => this._columnsWidth.set(card.fdCardDef, columnWidth));\n        });\n    }\n\n    /**\n     * @hidden\n     * Calculate container height accordingly to the the card columns height\n     * Parameters used to increase the height of the column where drag'n'drop placeholder currently is\n     */\n    private _setContainerHeight(columnIndexToAddSpace = -1, spaceToAdd = 0): void {\n        this._changeDetector.detectChanges();\n\n        const cardColumns = this._cardColumns.map((column) =>\n            column\n                .map((card) => this._dragList.find((drag) => drag.data === card))\n                .filter((cdkDrag) => !cdkDrag?._dragRef.isDragging() && !!cdkDrag?.element?.nativeElement)\n                .map((cdkDrag) => cdkDrag?.element)\n        );\n\n        const columnsHeights = cardColumns\n            .map((column) => column.map((cardElRef) => cardElRef?.nativeElement.getBoundingClientRect().height || 0))\n            .map(\n                (column, columnIndex) =>\n                    column.reduce((cardsHeight, height) => (cardsHeight += height + REM_IN_PX), 0) +\n                    (columnIndex === columnIndexToAddSpace ? spaceToAdd : 0)\n            );\n\n        const prevContainerHeight = this._containerHeight;\n\n        // +4px because it's the top & bottom borders of card placeholder\n        this._containerHeight = Math.ceil(Math.max(...columnsHeights) + 4);\n\n        if (this._containerHeight !== prevContainerHeight) {\n            this._changeDetector.detectChanges();\n        }\n    }\n\n    /** @hidden */\n    private _listenOnCardsHeightChange(): void {\n        this._cardsSizeChangeSubscription.unsubscribe();\n        this._cardsSizeChangeSubscription = new Subscription();\n\n        this._changeDetector.detectChanges();\n\n        this._cardColumns.forEach((column) =>\n            column\n                .map((card) => this._dragList.find((wrapper) => wrapper.data === card)?.element)\n                .filter((v): v is ElementRef<HTMLElement> => !!v)\n                .forEach((card) => {\n                    this._cardsSizeChangeSubscription.add(\n                        resizeObservable(card.nativeElement)\n                            .pipe(\n                                skip(1),\n                                debounceTime(20),\n                                filter(() => this._listenResize && !!this._layout.nativeElement.clientHeight)\n                            )\n                            .subscribe(() => this._setContainerHeight())\n                    );\n                })\n        );\n    }\n}\n\n/** @hidden */\nfunction fixWidthModifiers(config: ColumnsWidthConfig, numberOfColumns: number): number[] {\n    const modifiers = new Array(numberOfColumns).fill(0);\n\n    return modifiers.map((_, index) => {\n        const columnWidthModifier = config[index + 1];\n\n        if (!columnWidthModifier || columnWidthModifier < 0) {\n            return 0;\n        }\n\n        return columnWidthModifier;\n    });\n}\n\n/** @hidden Returns number of columns that can fit in current available width for fd-card-layout */\nfunction getNumberOfColumns(containerWidth: number, cardWidth: number): number {\n    containerWidth = containerWidth || 1;\n    cardWidth = cardWidth || 1;\n\n    const numberOfCardsWithNoGap = Math.max(Math.floor(containerWidth / cardWidth), 1); // Example: 960 / 320 = 3\n    const requiredWidthWithGap = numberOfCardsWithNoGap * cardWidth + (numberOfCardsWithNoGap - 1) * CARD_GAP_WIDTH;\n    const columnCount = requiredWidthWithGap > containerWidth ? numberOfCardsWithNoGap - 1 : numberOfCardsWithNoGap;\n\n    return Math.max(columnCount, 1);\n}\n\n/** @hidden Method to update rank after cards are dragged */\nfunction adjustCardRank(draggedCard: CardDefinitionDirective, replacedCard: CardDefinitionDirective): void {\n    const draggedCardRank = draggedCard.fdCardDef;\n    draggedCard.fdCardDef = replacedCard.fdCardDef;\n    replacedCard.fdCardDef = draggedCardRank;\n}\n","<div\n    #layout\n    cdkDropListGroup\n    fdDndKeyboardGroup\n    class=\"fd-fixed-card-layout__card-layout fd-fixed-card-layout__card-layout--columns-{{ this._numberOfColumns }}\"\n    [style.height]=\"_containerHeight + 'px'\"\n    [groups]=\"_cardColumns\"\n    orientation=\"horizontal\"\n    [customMoveFn]=\"_customMoveFn\"\n    [customTransferFn]=\"_customTransferFn\"\n    [disableKeyboardDragDrop]=\"disableDragDrop\"\n    [cdkDropListGroupDisabled]=\"disableDragDrop\"\n    [attr.dir]=\"dir()\"\n>\n    @for (card of _cardsArray; track card; let cardIndex = $index) {\n        <div\n            cdkDropList\n            class=\"fd-fixed-card-layout__card\"\n            [class.fd-fixed-card-layout__card--single]=\"_singleItemColumns.has(card.fdCardDef)\"\n            [style.min-width.px]=\"_columnsWidth.get(card.fdCardDef)\"\n            [style.max-width.px]=\"_columnsWidth.get(card.fdCardDef)\"\n            [style.display]=\"_hiddenCard === card ? 'none' : 'block'\"\n            [cdkDropListData]=\"cardIndex\"\n            [cdkDropListSortPredicate]=\"_sortPredicateFn\"\n            (cdkDropListEntered)=\"_onDropListEntered($event)\"\n        >\n            <div\n                cdkDrag\n                fdDndKeyboardItem\n                tabindex=\"0\"\n                role=\"group\"\n                cdkDragPreviewClass=\"fd-fixed-card-layout__card-preview\"\n                [cdkDragData]=\"card\"\n                [cdkDragStartDelay]=\"dragStartDelay\"\n                [itemIndex]=\"_itemIndexes.get(card.fdCardDef)!\"\n                [groupIndex]=\"_groupIndexes.get(card.fdCardDef)!\"\n                [attr.aria-labelledby]=\"cardLayoutItem.cardTitleId()\"\n                (cdkDragStarted)=\"_onDragStarted($event)\"\n                (cdkDragDropped)=\"_onDragDropped($event)\"\n            >\n                <fd-fixed-card-layout-item #cardLayoutItem>\n                    <ng-template [ngTemplateOutlet]=\"card?.template || null\"> </ng-template>\n                </fd-fixed-card-layout-item>\n                <div\n                    *cdkDragPlaceholder\n                    class=\"fd-fixed-card-layout__card-placeholder\"\n                    [style.margin-bottom.rem]=\"+_placeholderMargin\"\n                >\n                    <ng-template [ngTemplateOutlet]=\"card?.template || null\"></ng-template>\n                </div>\n            </div>\n        </div>\n    }\n    @for (column of _cardColumns; track column; let last = $last; let index = $index) {\n        @if (!last) {\n            <div class=\"fd-fixed-card-layout__clearfix\" [style.order]=\"index + 1\"></div>\n        }\n    }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FixedCardLayoutItemComponent } from './fixed-card-layout-item/fixed-card-layout-item.component';\nimport { CardDefinitionDirective, FixedCardLayoutComponent } from './fixed-card-layout.component';\n\nconst components = [FixedCardLayoutComponent, CardDefinitionDirective, FixedCardLayoutItemComponent];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [...components],\n    exports: [...components]\n})\nexport class FixedCardLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}