@fundamental-ngx/core 0.46.2-rc.12 → 0.46.2-rc.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/action-bar/action-bar.component.mjs +2 -2
- package/esm2022/action-sheet/action-sheet.component.mjs +3 -3
- package/esm2022/avatar/avatar.component.mjs +3 -3
- package/esm2022/avatar-group/avatar-group.component.mjs +3 -3
- package/esm2022/bar/bar.component.mjs +2 -2
- package/esm2022/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/busy-indicator/busy-indicator.component.mjs +3 -3
- package/esm2022/button/button.component.mjs +3 -3
- package/esm2022/calendar/calendar.component.mjs +3 -3
- package/esm2022/card/card.component.mjs +3 -3
- package/esm2022/carousel/carousel.component.mjs +3 -3
- package/esm2022/checkbox/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/dialog/dialog.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page.component.mjs +3 -3
- package/esm2022/dynamic-side-content/dynamic-side-content.component.mjs +3 -3
- package/esm2022/facets/facet/facet.component.mjs +3 -3
- package/esm2022/feed-input/feed-input.component.mjs +2 -2
- package/esm2022/feed-list-item/components/list/feed-list.component.mjs +2 -2
- package/esm2022/file-uploader/file-uploader.component.mjs +3 -3
- package/esm2022/fixed-card-layout/fixed-card-layout.component.mjs +3 -3
- package/esm2022/flexible-column-layout/flexible-column-layout.component.mjs +3 -3
- package/esm2022/form/fieldset/fieldset.component.mjs +2 -2
- package/esm2022/form/form-control/form-control.component.mjs +3 -3
- package/esm2022/form/form-group/form-group.component.mjs +2 -2
- package/esm2022/form/form-header/form-header.component.mjs +2 -2
- package/esm2022/form/form-item/form-item.component.mjs +2 -2
- package/esm2022/form/form-label/form-label.component.mjs +3 -3
- package/esm2022/form/form-message/form-message.component.mjs +2 -2
- package/esm2022/generic-tag/generic-tag.component.mjs +3 -3
- package/esm2022/grid-list/components/grid-list/grid-list.component.mjs +2 -2
- package/esm2022/icon/icon.component.mjs +2 -2
- package/esm2022/illustrated-message/illustrated-message.component.mjs +3 -3
- package/esm2022/info-label/info-label.component.mjs +3 -3
- package/esm2022/input-group/input-group.component.mjs +3 -3
- package/esm2022/layout-grid/layout-grid.component.mjs +3 -3
- package/esm2022/layout-panel/layout-panel.component.mjs +2 -2
- package/esm2022/link/link.component.mjs +3 -3
- package/esm2022/list/list-navigation-item/list-navigation-item.component.mjs +3 -3
- package/esm2022/list/list.component.mjs +2 -2
- package/esm2022/menu/menu.component.mjs +2 -2
- package/esm2022/message-box/message-box.component.mjs +2 -2
- package/esm2022/message-page/message-page.component.mjs +3 -3
- package/esm2022/message-strip/message-strip.component.mjs +3 -3
- package/esm2022/message-toast/message-toast.component.mjs +3 -3
- package/esm2022/micro-process-flow/components/micro-process-flow/micro-process-flow.component.mjs +3 -3
- package/esm2022/multi-combobox/multi-combobox.component.mjs +3 -3
- package/esm2022/notification/notification/notification.component.mjs +2 -2
- package/esm2022/object-identifier/object-identifier.component.mjs +3 -3
- package/esm2022/object-marker/object-marker.component.mjs +3 -3
- package/esm2022/object-number/object-number.component.mjs +3 -3
- package/esm2022/object-status/object-status.component.mjs +3 -3
- package/esm2022/pagination/pagination.component.mjs +3 -3
- package/esm2022/panel/panel.component.mjs +3 -3
- package/esm2022/popover/popover-body/popover-body.component.mjs +3 -3
- package/esm2022/product-switch/product-switch-body/product-switch-body.component.mjs +3 -3
- package/esm2022/progress-indicator/progress-indicator.component.mjs +3 -3
- package/esm2022/quick-view/quick-view/quick-view.component.mjs +2 -2
- package/esm2022/radio/radio-button/radio-button.component.mjs +3 -3
- package/esm2022/rating-indicator/components/rating-indicator.component.mjs +3 -3
- package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +3 -3
- package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +2 -2
- package/esm2022/segmented-button/segmented-button.component.mjs +2 -2
- package/esm2022/select/select.component.mjs +3 -3
- package/esm2022/shellbar/shellbar.component.mjs +3 -3
- package/esm2022/side-navigation/side-navigation.component.mjs +3 -3
- package/esm2022/skeleton/components/skeleton.component.mjs +3 -3
- package/esm2022/slider/slider.component.mjs +3 -3
- package/esm2022/split-button/split-button.component.mjs +3 -3
- package/esm2022/splitter/splitter.component.mjs +2 -2
- package/esm2022/status-indicator/status-indicator.component.mjs +3 -3
- package/esm2022/step-input/step-input.component.mjs +3 -3
- package/esm2022/switch/switch.component.mjs +3 -3
- package/esm2022/table/table-wrapper.component.mjs +2 -2
- package/esm2022/table/table.component.mjs +2 -2
- package/esm2022/tabs/tab-list.component.mjs +3 -3
- package/esm2022/tabs/tab-nav/tab-nav.component.mjs +2 -2
- package/esm2022/text/text.component.mjs +3 -3
- package/esm2022/tile/tile.component.mjs +3 -3
- package/esm2022/time/time.component.mjs +3 -3
- package/esm2022/title/title.component.mjs +2 -2
- package/esm2022/token/token.component.mjs +3 -3
- package/esm2022/token/tokenizer.component.mjs +3 -3
- package/esm2022/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/tree/tree.component.mjs +3 -3
- package/esm2022/upload-collection/upload-collection.component.mjs +3 -3
- package/esm2022/vertical-navigation/vertical-navigation-main-navigation.component.mjs +3 -3
- package/esm2022/vertical-navigation/vertical-navigation.component.mjs +3 -3
- package/esm2022/wizard/wizard.component.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-action-bar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar-group.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-calendar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-card.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-carousel.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-checkbox.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-facets.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-facets.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-file-uploader.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +14 -14
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-generic-tag.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-generic-tag.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-grid-list.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-icon.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-info-label.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-layout-grid.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-layout-panel.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-menu.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-page.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-message-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-strip.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-toast.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-message-toast.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-notification.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-identifier.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-marker.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-marker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-number.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-status.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-pagination.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-panel.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-panel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-quick-view.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-radio.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-select.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-side-navigation.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-skeleton.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-slider.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-split-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-splitter.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-status-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-step-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-switch.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-text.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tile.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-title.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-wizard.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/fundamental-ngx-core-v0.46.2-rc.13.tgz +0 -0
- package/package.json +4 -4
- package/schematics/add-dependencies/index.js +6 -6
- package/fundamental-ngx-core-v0.46.2-rc.12.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-resizable-card-layout.mjs","sources":["../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.ts","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.html","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.ts","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.html","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout.module.ts","../../../../libs/core/src/lib/resizable-card-layout/fundamental-ngx-core-resizable-card-layout.ts"],"sourcesContent":["import { FocusableOption } from '@angular/cdk/a11y';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Optional,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { Nullable, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\n\nexport type ResizeDirection = 'vertical' | 'horizontal' | 'both';\n\n// Card resizes in step of fixed values. values are in pixel\nexport const horizontalResizeStep = 320;\n\n// vertical resize step\nexport const verticalResizeStep = 16;\n\n// gap of 1rem between the cards\nexport const gap = 16;\n\n// threshold offset for horizontal resizing.\nexport const horizontalResizeOffset = 160;\n\n// threshold offset for vertical resizing.\nexport const verticalResizeOffset = 8;\n\n// state of card. Increasing width, no change or decreasing width.\nexport type CardState = 1 | 0 | -1;\n\n// card is given numeric value, on which sorting of cards is done\nlet cardRank = 1;\nlet cardUniqueId = 0;\n\n@Component({\n selector: 'fd-resizable-card-item',\n templateUrl: 'resizable-card-item.component.html',\n styleUrls: ['./resizable-card-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, NgTemplateOutlet]\n})\nexport class ResizableCardItemComponent implements FocusableOption, OnDestroy {\n /** Card properties from the config */\n @Input()\n set config(config: ResizableCardItemConfig) {\n this._config = config;\n this._initialSetup();\n this._cd.detectChanges();\n }\n get config(): ResizableCardItemConfig {\n return this._config;\n }\n\n /** set uinque id for the card */\n @Input()\n itemId = `fd-card-item-${cardUniqueId++}`;\n\n /** set title of the card */\n @Input()\n title: string;\n\n /**\n * Serial order of card.\n * cards are sorted based on ranks before displaying layout.\n * card with lower rank will be displayed first in layout than the card with higher rank.\n */\n @Input()\n set rank(rankValue: number) {\n // determine max value between user given value and default value\n this._rank = rankValue ? rankValue : cardRank++;\n if (rankValue > cardRank) {\n cardRank = rankValue;\n }\n }\n get rank(): number {\n return this._rank;\n }\n\n /**\n * Number of column span card width takes.\n * It will be in step of 20rem.\n */\n @Input()\n set cardWidthColSpan(colSpan: number) {\n this._cardWidthColSpan = colSpan;\n this._setCardWidth();\n }\n get cardWidthColSpan(): number {\n return this._cardWidthColSpan;\n }\n\n /**\n * Number of row span, card height takes.\n * It will be in the step of 1rem.\n */\n @Input()\n set cardHeightRowSpan(rowSpan: number) {\n this._cardHeightRowSpan = rowSpan;\n this._setCardHeight();\n }\n get cardHeightRowSpan(): number {\n return this._cardHeightRowSpan;\n }\n\n /**\n * Number of row span card mini header height takes.\n * Mini Header: The smallest representation of the card is the header.\n * The card can be collapsed to only its header height.\n */\n @Input()\n set cardMiniHeaderRowSpan(rowSpan: number) {\n this._cardMiniHeaderRowSpan = rowSpan;\n this._setCardMiniHeaderHeight();\n }\n get cardMiniHeaderRowSpan(): number {\n return this._cardMiniHeaderRowSpan;\n }\n\n /**\n * Number of row span card mini content height takes.\n * Mini Content: The minimum height for the card content depends on the card type,\n * and must be as high as the smallest representation of the content.\n */\n @Input()\n set cardMiniContentRowSpan(rowSpan: number) {\n this._cardMiniContentRowSpan = rowSpan;\n this._setCardMiniContentHeight();\n }\n get cardMiniContentRowSpan(): number {\n return this._cardMiniContentRowSpan ?? 0;\n }\n\n /** Card can be set to resizable=false, to restrict card resize */\n @Input()\n resizable = true;\n\n /** Set left position for the card */\n @Input()\n @HostBinding('style.left.px')\n left: Nullable<number>;\n\n /** Set right position for the card */\n @Input()\n @HostBinding('style.right.px')\n right: Nullable<number>;\n\n /** Set top position for the card*/\n @Input()\n @HostBinding('style.top.px')\n top = 0;\n\n /** @hidden while resizing this value will change to a greater value */\n @HostBinding('style.z-index')\n zIndex = 0;\n\n /** @hidden */\n @HostBinding('style.position')\n position = 'absolute';\n\n /** @hidden transition animation when layout re-draws */\n @HostBinding('class.fd-resizable-card-layout__draw-transition')\n reDrawAnimation = true;\n\n /** Emits when card is still resizing */\n @Output()\n resizing: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card resize is completed */\n @Output()\n resized: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card height is reduced to show only header */\n @Output()\n miniHeaderReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when minimum height of card content area is reached */\n @Output()\n miniContentReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** show corner resize icon on hover over card */\n showingResizeIcon = false;\n\n /** show border when card is resizing */\n showBorder = false;\n\n /** starting column position of card. starts with 0 */\n startingColumnPosition: number;\n\n /** card width in px. Default value to 20rem */\n cardWidth: number = horizontalResizeStep;\n\n /** card height in px */\n cardHeight: number;\n\n /** Mini-header height of card */\n cardMiniHeaderHeight: number;\n\n /** Mini-content height of card to display minimum valid content */\n cardMiniContentHeight: number;\n\n /** Outer resize indication border width for the card */\n resizeIndicationBorderWidth = 0;\n\n /**\n * Denotes if card is currently expanding or contracting horizontally.\n * +1 denotes increasing, -1 denotes decreasing and 0 denotes card-state has not changed horizontally.\n */\n cardState: CardState = 0;\n\n /** Change in rank from previous value*/\n prevRank = 0;\n\n /** @hidden Default width of card is 20rem ie. 1 column */\n private _cardWidthColSpan = 1;\n\n /** @hidden */\n private _cardHeightRowSpan: number;\n\n /** @hidden helps in vertical step change event emit */\n private _prevCardHeightRowSpan: number;\n\n /** @hidden */\n private _cardMiniHeaderRowSpan: number;\n\n /** @hidden */\n private _cardMiniContentRowSpan?: number;\n\n /** @hidden config values for card */\n private _config: ResizableCardItemConfig;\n\n /** @hidden previous cursor x position */\n private _prevX: number;\n\n /** @hidden previous cursor y position */\n private _prevY: number;\n\n /** @hidden */\n private _prevCardWidth: number;\n\n /** @hidden */\n private _prevCardHeight: number;\n\n /** @hidden flag to control resize */\n private _resize = false;\n\n /** @hidden */\n private _resizeDirection: ResizeDirection;\n\n /** @hidden */\n private _maxColumn: number;\n\n /**\n * @hidden stores original width span of card.\n * It may reduce on small screen, so have to restore using this.\n */\n private _originalCardWidthSpan = 0;\n\n /** @hidden */\n private _rank: number;\n\n /** @hidden */\n private _rtl = false;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n private readonly _cd: ChangeDetectorRef,\n public readonly elementRef: ElementRef,\n @Optional() private readonly _rtlService: RtlService\n ) {\n if (this._rtlService) {\n this._subscriptions.add(this._rtlService.rtl.subscribe((value) => (this._rtl = value)));\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /**\n * When resize handler is pressed and resizing may start.\n * @param event: MouseEvent\n * @param resizeDirection: which handler is pressed to resize\n */\n onMouseDown(event: MouseEvent, resizeDirection: ResizeDirection): void {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n\n this.showingResizeIcon = true;\n this._resize = true;\n this._prevX = event.clientX;\n this._prevY = event.clientY;\n this._prevCardWidth = this.cardWidth;\n this._prevCardHeight = this.cardHeight;\n this._resizeDirection = resizeDirection;\n }\n\n /**\n * @hidden When mouse moves to resize the card.\n * using window:mousemove so, resize will happen smoothly\n * @param event: MouseEvent\n */\n @HostListener('window:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n\n // saves from un-necessary resize\n if (!this._resize) {\n return;\n }\n\n if (!this.showBorder) {\n this.showBorder = true;\n }\n\n // resizing card will go over other cards\n this.zIndex = 1;\n\n const { clientX, clientY } = event;\n switch (this._resizeDirection) {\n case 'both':\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n break;\n case 'horizontal':\n this._horizontalResizing(clientX);\n break;\n case 'vertical':\n this._verticalResizing(clientY);\n break;\n default:\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n }\n\n const cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardWidthWithColumn = cardWidthColSpan * horizontalResizeStep + cardWidthColSpan * gap;\n\n const horizontalResizeThresholdReached = this.cardWidth - cardWidthWithColumn > horizontalResizeOffset;\n\n if (clientX > this._prevX) {\n // increasing width\n this.cardState = 1;\n\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n } else {\n this.resizeIndicationBorderWidth = 0;\n }\n } else if (clientX < this._prevX) {\n // decreasing width\n this.cardState = -1;\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n } else {\n this.resizeIndicationBorderWidth = 0;\n }\n }\n\n this._prevX = clientX;\n this._prevY = clientY;\n this._cd.detectChanges();\n\n // Emits resizing event.\n this.resizing.emit(this.getResizedEventObject());\n }\n\n /**\n * when resizing of card stops\n * @param event: MouseEvent\n */\n @HostListener('document: mouseup', ['$event'])\n onMouseUp(): void {\n if (!this.resizable) {\n return;\n }\n // if card was not resizing\n if (!this._resize) {\n return;\n }\n\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n\n this._stopResizing();\n this._cd.markForCheck();\n }\n\n /** Sets focus on the element */\n focus(): void {\n const header = this.elementRef.nativeElement.querySelector('.fd-card__header');\n header?.focus();\n }\n\n /** Shows resize icon */\n showResizeIcon(): void {\n if (!this.resizable) {\n return;\n }\n this.showingResizeIcon = true;\n }\n\n /** Hides resize icon */\n hideResizeIcon(): void {\n if (!this._resize) {\n this.showingResizeIcon = false;\n }\n }\n\n /** Returns max width for card, based on layout size passed */\n getMaxColSpan(layoutSize: string): number {\n switch (layoutSize) {\n case 'sm':\n this._maxColumn = 1;\n break;\n case 'md':\n this._maxColumn = 2;\n break;\n case 'lg':\n this._maxColumn = 3;\n break;\n case 'xl':\n this._maxColumn = 4;\n break;\n default:\n this._maxColumn = 1;\n }\n return this._maxColumn;\n }\n\n /** Update card width if it exceeds column span based on layout */\n verifyUpdateCardWidth(layoutSize: string): void {\n const widthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n // storing original width of card.\n // used to restore width on window resize from small to large\n this._originalCardWidthSpan = !this._originalCardWidthSpan ? widthColSpan : this._originalCardWidthSpan;\n this._maxColumn = this.getMaxColSpan(layoutSize);\n if (widthColSpan > this._maxColumn) {\n this.cardWidthColSpan = this._maxColumn;\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n } else {\n // keep card width minimum, so it can fit in screen.\n this.cardWidthColSpan = Math.min(this._maxColumn, this._originalCardWidthSpan);\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n }\n }\n\n /** Returns ResizedEvent object to emit. */\n getResizedEventObject(): ResizedEvent {\n const newCardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const newCardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const newCardWidth = newCardWidthColSpan * horizontalResizeStep + newCardWidthColSpan * gap;\n\n const horizontalResizeThresholdReached = this.cardWidth - newCardWidth > horizontalResizeOffset;\n const newCardColSpan = horizontalResizeThresholdReached ? newCardWidthColSpan + 1 : newCardWidthColSpan;\n return new ResizedEvent(\n this,\n this._prevCardWidth,\n this._prevCardHeight,\n this.cardWidth,\n this.cardHeight,\n this._cardWidthColSpan,\n this._cardHeightRowSpan,\n newCardColSpan,\n newCardHeightRowSpan\n );\n }\n\n /** @hidden Return previous height row span of the card */\n get previousCardHeightRowSpan(): number {\n return this._prevCardHeightRowSpan;\n }\n\n /** @hidden Set card properties using config received */\n private _initialSetup(): void {\n this.cardWidthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n this.cardHeightRowSpan = this._config?.cardHeightRowSpan || this.cardHeightRowSpan;\n this.title = this._config?.title || this.title;\n this.rank = this._config?.rank || this.rank;\n this.cardMiniHeaderRowSpan = this._config?.cardMiniHeaderRowSpan || this.cardMiniHeaderRowSpan;\n this.cardMiniContentRowSpan = this._config?.cardMiniContentRowSpan || this.cardMiniContentRowSpan;\n this.resizable = this._config.resizable || this.resizable;\n }\n\n /** @hidden Returns true when resize offset is crossed */\n private _horizontalResizeWithOffset(): void {\n // positive value indicates that width has increased\n const widthIncrement = this.cardWidth - this._prevCardWidth;\n const cardSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardSpanFraction = this.cardWidth % horizontalResizeStep;\n\n // when width increases\n if (widthIncrement > 0) {\n if (widthIncrement < horizontalResizeOffset + gap) {\n // widthIncrement is less than offset, do not increase width\n this.cardWidth = this._prevCardWidth;\n } else {\n // check value of cardSpanFraction, including gaps in cards\n let isCardSpanFractionCrossingOffset = false;\n isCardSpanFractionCrossingOffset = cardSpanFraction - (cardSpan - 1) * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n } else {\n // when width decreases\n if (Math.abs(widthIncrement) < horizontalResizeOffset) {\n // widthIncrement is less than offset, do not decrease width\n this.cardWidth = this._prevCardWidth;\n } else {\n // check value of cardSpanFraction, including gaps in cards\n let isCardSpanFractionCrossingOffset = false;\n isCardSpanFractionCrossingOffset = cardSpanFraction - cardSpan * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n }\n }\n\n /**\n * @hidden make horizontal resize only on step of 20rem\n */\n private _horizontalStepResizing(): void {\n this._horizontalResizeWithOffset();\n\n // Add inner gap in cardWidth if width is more than 1 column\n if (this.cardWidth > horizontalResizeStep) {\n this.cardWidth = this.cardWidth + (this.cardWidth / horizontalResizeStep - 1) * gap;\n }\n this.cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n }\n\n /**\n * @hidden make vertical resize only on step of 1rem\n */\n private _verticalStepResizing(): void {\n // positive value indicates that height has increased\n const cardHeightSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const cardSpanFraction = this.cardHeight % verticalResizeStep;\n this.cardHeight =\n cardSpanFraction > verticalResizeOffset\n ? (cardHeightSpan + 1) * verticalResizeStep\n : cardHeightSpan * verticalResizeStep;\n\n this.cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n\n /**\n * @hidden Resize card horizontally by checking boundary condition\n * @param xPosition: current x-position of cursor\n */\n private _horizontalResizing(xPosition: number): void {\n const difference = this._prevX - xPosition;\n this.cardWidth = this._rtl ? this.cardWidth + difference : this.cardWidth - difference;\n\n const totalIndentation = (this._maxColumn - 1) * gap;\n const maxCardWidtWithoutIndentation = this._maxColumn * horizontalResizeStep;\n\n const maxCardWidth = this._rtl\n ? maxCardWidtWithoutIndentation - totalIndentation\n : maxCardWidtWithoutIndentation + totalIndentation;\n\n if (this.cardWidth > maxCardWidth) {\n this.cardWidth = maxCardWidth;\n } else if (this.cardWidth < horizontalResizeStep) {\n this.cardWidth = horizontalResizeStep;\n }\n }\n\n /**\n * @hidden Resize card vertically.\n * takes care of mini-header height and mini-content height\n * @param yPosition: current y-position of cursor\n */\n private _verticalResizing(yPosition: number): void {\n let reachingMiniHeader = false;\n\n if (this.cardHeight === this.cardMiniHeaderHeight) {\n // if card height is already at mini-header height\n if (this._prevY - yPosition > 0) {\n // decreasing height\n // if miniHeader height reached, stop resizing\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n } else {\n // increasing height\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n } else if (this.cardHeight < this.cardMiniContentHeight + this.cardMiniHeaderHeight) {\n // if card height is between mini-header and mini-content\n if (this._prevY - yPosition < 0) {\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n } else if (\n this.cardHeight === this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0\n ) {\n // decreasing height\n // height decreasing after reaching mini-content. this needs to differentiate\n // from height decreasing and reaching to mini-content.\n reachingMiniHeader = true;\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n // miniHeader height reached, stop resizing\n this._stopResizing();\n this.miniHeaderReached.emit(this.getResizedEventObject());\n } else {\n this.cardHeight = this.cardHeight - (this._prevY - yPosition);\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n\n // stop resizing on miniContent height\n if (\n this.cardHeight <= this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0 &&\n !reachingMiniHeader\n ) {\n this.cardHeight = this.cardMiniContentHeight + this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this.miniContentReached.emit(this.getResizedEventObject());\n this._stopResizing();\n }\n\n // while corner resize, width might have increased and reached to mini-content height.\n // so, on mini-content resize will stop, but have to do step resizing for vertical and horizontal.\n if (!this._resize) {\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n }\n }\n\n /** @hidden reset involved variables while resizing */\n private _stopResizing(): void {\n if (this._resize) {\n this.cardState = 0;\n this.resizeIndicationBorderWidth = 0;\n this._resize = false;\n this.zIndex = 0;\n this.showBorder = false;\n this.resized.emit(this.getResizedEventObject());\n }\n }\n\n /** @hidden Returns cardWidth based on card column span */\n private _setCardWidth(): void {\n this.cardWidth = this._cardWidthColSpan * horizontalResizeStep + (this._cardWidthColSpan - 1) * gap;\n this._cd.markForCheck();\n }\n\n /** @hidden Returns cardHeight based on card row span */\n private _setCardHeight(): void {\n this.cardHeight = this._cardHeightRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n\n /** @hidden Returns card mini header height */\n private _setCardMiniHeaderHeight(): void {\n this.cardMiniHeaderHeight = this._cardMiniHeaderRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n\n /** @hidden Returns card mini content height */\n private _setCardMiniContentHeight(): void {\n this.cardMiniContentHeight = this.cardMiniContentRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n}\n\n/** Config interface for card properties */\nexport interface ResizableCardItemConfig {\n title?: string;\n rank?: number;\n cardWidthColSpan?: number;\n cardHeightRowSpan?: number;\n cardMiniHeaderRowSpan?: number;\n cardMiniContentRowSpan?: number;\n resizable?: boolean;\n}\n\n/** Object to emit on resize complete */\nexport class ResizedEvent {\n /**\n * Object to emit on resize complete\n * @param card\n * @param prevCardWidth Previous card width\n * @param prevCardHeight Previous card height\n * @param cardWidth Current card width\n * @param cardHeight Current card height\n * @param cardWidthColSpan Current card width column span\n * @param cardHeightRowSpan Current card height row span\n * @param newCardWidthColSpan New card width column span\n * @param newCardHeightRowSpan New card height row span\n */\n constructor(\n public card: ResizableCardItemComponent,\n public prevCardWidth: number,\n public prevCardHeight: number,\n public cardWidth: number,\n public cardHeight: number,\n public cardWidthColSpan: number,\n public cardHeightRowSpan: number,\n public newCardWidthColSpan: number,\n public newCardHeightRowSpan: number\n ) {}\n}\n","<div\n class=\"fd-resizable-card-layout__item\"\n [class.fd-resizable-card-layout__indication-border]=\"showBorder\"\n #resizeCard\n>\n <div\n class=\"fd-resizable-card-layout__item--border-display fd-resizable-card-layout__item--resize-transition\"\n [style.width.px]=\"cardWidth\"\n [style.height.px]=\"cardHeight\"\n (mouseenter)=\"showResizeIcon()\"\n (mouseleave)=\"hideResizeIcon()\"\n >\n <div class=\"fd-resizable-card-layout__card\">\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"showingResizeIcon\">\n <div class=\"fd-resizable-card-layout__icon-wrapper\">\n <div\n class=\"fd-resizable-card-layout__icon\"\n #cornerHandle\n (mousedown)=\"onMouseDown($event, 'both')\"\n ></div>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"resizable\">\n <ng-container *ngTemplateOutlet=\"verticalHandleTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"horizontalHandleTemplate\"></ng-container>\n </ng-container>\n </div>\n\n <div\n class=\"fd-resizable-card-layout__item--resize-transition\"\n [style.width.px]=\"resizeIndicationBorderWidth\"\n [style.height.px]=\"cardHeight\"\n ></div>\n</div>\n\n<ng-template #verticalHandleTemplate>\n <div\n #verticalHandle\n class=\"fd-resizable-card-layout__resize--vertical\"\n (mousedown)=\"onMouseDown($event, 'horizontal')\"\n ></div>\n</ng-template>\n\n<ng-template #horizontalHandleTemplate>\n <div\n #horizontalHandle\n class=\"fd-resizable-card-layout__resize--horizontal\"\n (mousedown)=\"onMouseDown($event, 'vertical')\"\n ></div>\n</ng-template>\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport {\n ResizableCardItemComponent,\n ResizableCardItemConfig,\n ResizedEvent,\n gap,\n horizontalResizeOffset,\n horizontalResizeStep,\n verticalResizeStep\n} from './resizable-card-item/resizable-card-item.component';\n\nexport type LayoutSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type ResizableCardLayoutConfig = Array<ResizableCardItemConfig>;\n\n@Component({\n selector: 'fd-resizable-card-layout',\n templateUrl: 'resizable-card-layout.component.html',\n styleUrls: ['./resizable-card-layout.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class ResizableCardLayoutComponent implements OnInit, AfterViewInit, AfterContentInit, OnDestroy {\n /** Object for setting each card property */\n @Input()\n layoutConfig: ResizableCardLayoutConfig;\n\n /** Emits when card resize is reached to one new step in horizontal or vertical direction */\n @Output()\n stepChange: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card is still resizing */\n @Output()\n resizing: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card resize is completed */\n @Output()\n resized: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card height is reduced to show only header */\n @Output()\n miniHeaderReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when minimum height of card content area is reached */\n @Output()\n miniContentReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when layout changes */\n @Output()\n layoutChange: EventEmitter<ResizableCardLayoutConfig> = new EventEmitter<ResizableCardLayoutConfig>();\n\n /** @hidden */\n @ContentChildren(ResizableCardItemComponent)\n resizeCardItems: QueryList<ResizableCardItemComponent>;\n\n /** width for layout */\n layoutWidth: number;\n\n /** height for layout */\n layoutHeight: number;\n\n /** @hidden Number of columns in layout. considering 1 column width 20rem */\n private _columns: number;\n\n /** @hidden Layout padding. will be added to first card padding in every row */\n private _paddingLeft: number;\n\n /** @hidden Stores height of each column on card arrangement */\n private _columnsHeight: Array<number>;\n\n /** @hidden Available screen layout */\n private _layout: LayoutSize;\n\n /** @hidden Stores sorted card before placing in layout */\n private _sortedCards: Array<ResizableCardItemComponent>;\n\n /** @hidden FocusKeyManager instance */\n private _keyboardEventsManager: FocusKeyManager<ResizableCardItemComponent>;\n\n /** @hidden */\n private readonly _destroy$ = new Subject<void>();\n\n /** @hidden */\n private _layoutShifted = false;\n\n /** @hidden */\n private _directionPosition: 'left' | 'right' = 'left';\n\n /** @hidden */\n constructor(\n private readonly _cd: ChangeDetectorRef,\n public readonly elementRef: ElementRef,\n @Optional() private readonly _rtlService: RtlService\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // initialise value 0\n\n this._subscribeToRtl();\n\n // detect initial window size and set layout\n this._createLayout();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._initialSetup();\n // listen for query-list change\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n\n this.resizeCardItems.changes.subscribe(() => {\n this.arrangeCards(this.resizeCardItems?.toArray());\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n this._cd.markForCheck();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._accessibilitySetup();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n this._keyboardEventsManager?.destroy();\n }\n\n /** @hidden handles keyboard accessibility */\n @HostListener('keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n event.stopImmediatePropagation();\n if (!this._keyboardEventsManager.activeItemIndex) {\n this._keyboardEventsManager.setFirstItemActive();\n }\n\n if (this._keyboardEventsManager) {\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n\n /** @hidden */\n @HostListener('window:resize')\n onResize(): void {\n this._createLayout();\n }\n\n /** Layout size. Available options are 'sm', 'md', 'lg' and 'xl' */\n set layoutSize(layoutSize: LayoutSize) {\n this._layout = layoutSize;\n }\n get layoutSize(): LayoutSize {\n return this._layout;\n }\n\n /**\n * Arranges cards in layout based on rank, width and height of card\n * @param cards: Array of ResizableCardItemComponent\n */\n arrangeCards(cards: Array<ResizableCardItemComponent>): void {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // sort based on the card rank\n this._sortedCards = cards?.sort(this._sortCards);\n\n this._sortedCards?.forEach((card, index) => {\n this._setCardPositionValues(card, index);\n this._updateColumnsHeight(card);\n });\n this.layoutHeight = Math.max.apply(null, this._columnsHeight) + verticalResizeStep;\n\n this._emitLayoutChange();\n this._cd.markForCheck();\n }\n\n /**\n * Handles shifting of cards with animation, while card is still resizing.\n * @param event: ResizedEvent\n */\n cardResizing(event: ResizedEvent): void {\n this.resizing.emit(event);\n this._handleHorizontalResize(event);\n this._handleVerticalResize(event);\n }\n\n /**\n * Handles arrangement of cards in layout\n * @param event: ResizedEvent\n */\n cardResizeComplete(event: ResizedEvent): void {\n this._layoutShifted = false;\n this.arrangeCards(this.resizeCardItems.toArray());\n this.resized.emit(event);\n }\n\n /** @hidden */\n updateLayout(): void {\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n }\n\n /**\n * method to get screen width\n * @returns Window width in px\n */\n getWidthAvailable(): number {\n return window.innerWidth;\n }\n\n /** @hidden Subscribe to events from items */\n private _initialSetup(): void {\n // listen for resizing event of card item\n this.resizeCardItems?.forEach((resizeCardItem, index) => {\n if (this.layoutConfig && this.layoutConfig.length >= index + 1) {\n resizeCardItem.config = this.layoutConfig[index];\n }\n\n resizeCardItem.resizing\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: ResizedEvent) => this.cardResizing(event));\n\n // listen for resize complete event of card item\n resizeCardItem.resized\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: ResizedEvent) => this.cardResizeComplete(event));\n\n // listen for mini-header height event of card item\n resizeCardItem.miniHeaderReached.pipe(takeUntil(this._destroy$)).subscribe((event: ResizedEvent) => {\n this.miniHeaderReached.emit(event);\n this.stepChange.emit(event);\n });\n\n // listen for mini-content height event of card item\n resizeCardItem.miniContentReached.pipe(takeUntil(this._destroy$)).subscribe((event: ResizedEvent) => {\n this.miniContentReached.emit(event);\n this.stepChange.emit(event);\n });\n });\n }\n\n /** @hidden */\n private _accessibilitySetup(): void {\n this._keyboardEventsManager?.destroy();\n this._keyboardEventsManager = new FocusKeyManager(this.resizeCardItems).withWrap();\n }\n\n /** @hidden create layout based on layout size */\n private _createLayout(): void {\n const screenWidth = this.getWidthAvailable();\n const prevLayoutSize = this.layoutSize;\n\n if (screenWidth > 0 && screenWidth <= 656 && prevLayoutSize !== 'sm') {\n this.layoutSize = 'sm';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n } else if (screenWidth > 656 && screenWidth <= 975 && prevLayoutSize !== 'md') {\n this.layoutSize = 'md';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n } else if (screenWidth > 975 && screenWidth <= 1359 && prevLayoutSize !== 'lg') {\n this.layoutSize = 'lg';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n } else if (screenWidth > 1359 && prevLayoutSize !== 'xl') {\n this.layoutSize = 'xl';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n }\n\n /** @hidden Emit layoutChange event with updated card dimensions */\n private _emitLayoutChange(): void {\n const latestCardConfig: ResizableCardLayoutConfig = [];\n this.resizeCardItems?.forEach((card) => {\n const cardConfig: ResizableCardItemConfig = {};\n cardConfig.cardWidthColSpan = card.cardWidthColSpan;\n cardConfig.cardHeightRowSpan = card.cardHeightRowSpan;\n cardConfig.rank = card.rank;\n cardConfig.title = card.title;\n cardConfig.cardMiniContentRowSpan = card.cardMiniContentRowSpan;\n cardConfig.cardMiniHeaderRowSpan = card.cardMiniHeaderRowSpan;\n cardConfig.resizable = card.resizable;\n latestCardConfig.push(cardConfig);\n });\n this.layoutChange.emit(latestCardConfig);\n }\n\n /**\n * @hidden Sets number of column in layout, based on LayoutSize passed\n * @param layoutSize: Available options are 'sm' | 'md' | 'lg' | 'xl'\n */\n private _setLayoutColumns(layoutSize: LayoutSize): void {\n let layoutWidthDefault: number;\n\n switch (layoutSize) {\n case 'sm':\n this._columns = 1;\n this._paddingLeft = 8;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault;\n break;\n case 'md':\n this._columns = 2;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + gap;\n break;\n case 'lg':\n this._columns = 3;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 2 * gap;\n break;\n case 'xl':\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n break;\n default:\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n }\n }\n\n /**\n * @hidden Method to handle card vertical resize and trigger the layout change\n * @param event: ResizedEvent\n */\n private _handleVerticalResize(event: ResizedEvent): void {\n if (event.card.cardHeightRowSpan !== event.card.previousCardHeightRowSpan) {\n this.arrangeCards(this._sortedCards);\n this._cd.markForCheck();\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n\n /**\n * @hidden Method to handle card horizontal resize and trigger the layout change\n * @param event : ResizedEvent\n */\n private _handleHorizontalResize(event: ResizedEvent): void {\n // when increasing width hit the offset, show extended border and start pushing down border cards\n // when width is decreasing , show extended border till it reaches to offset.\n const cardWidthChange = event.cardWidth - event.prevCardWidth;\n const currentResizingItemIndex = this._sortedCards?.findIndex((x) => x.rank === event.card.rank);\n\n if (event.cardWidth > event.prevCardWidth) {\n // when increasing size\n // card width increasing currently\n if (event.card.cardState === 1 && cardWidthChange > horizontalResizeOffset + gap && !this._layoutShifted) {\n // index of this card, then get next card. exchange ranks\n this._sortedCards.forEach((card: ResizableCardItemComponent, index: number) => {\n if (index > currentResizingItemIndex) {\n // if there are some cards on same height. make the current card rank higher than these.\n // otherwise next index where it will fit. until any card has less column span than total columns\n // if only in next top, one card is taking full columns\n if (\n card.startingColumnPosition + card.cardWidthColSpan === this._columns &&\n card.cardWidthColSpan !== this._columns\n ) {\n // get cards with top > current top , but minimum of it\n // exchange rank with these card\n this._moveCardDown(index);\n }\n }\n });\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n } else if (\n event.card.cardState === -1 &&\n cardWidthChange < horizontalResizeOffset + gap &&\n this._layoutShifted\n ) {\n // card width decreasing currently\n // move up the cards, if it was shifted while increasing the width\n this._sortedCards.forEach((card: ResizableCardItemComponent) => {\n card.rank = card.prevRank ? card.prevRank : card.rank;\n card.prevRank = 0;\n });\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n } else if (event.cardWidth < event.prevCardWidth) {\n // when decreasing size\n if (event.card.cardState === -1 && -cardWidthChange > horizontalResizeOffset && !this._layoutShifted) {\n // card width decreasing currently\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n } else if (event.card.cardState === 1 && -cardWidthChange < horizontalResizeOffset && this._layoutShifted) {\n // card width increasing currently\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n }\n\n /**\n * @hidden Method to move card down, when another card width is increasing\n * Method to loop till this._columns -1 positions and exchange the rank\n * @param currentCardIndex: Index of current card\n */\n private _moveCardDown(currentCardIndex: number): void {\n // taking width of adjacent card col-span into account\n\n // eg: 4 columns - 2 col(adjacent card) = 2 positions can exchange ranks\n const currentCard: ResizableCardItemComponent = this._sortedCards[currentCardIndex];\n let card: ResizableCardItemComponent;\n\n // unoccupiedPositions positions left after currentCard occupies in next row.\n let unoccupiedPositions = this._columns - currentCard.cardWidthColSpan;\n\n currentCard.prevRank = currentCard.rank;\n\n let index = 1;\n while (unoccupiedPositions > 0) {\n // compare from next card\n card = this._sortedCards[index + currentCardIndex];\n if (card && unoccupiedPositions >= card.cardWidthColSpan) {\n card.prevRank = card.rank;\n card.rank -= 1;\n currentCard.rank = card.prevRank;\n unoccupiedPositions -= card.cardWidthColSpan;\n } else {\n unoccupiedPositions = 0;\n }\n index += 1;\n }\n }\n\n /**\n * @hidden updates array with new column heights\n * @param card: ResizableCardItemComponent\n */\n private _updateColumnsHeight(card: ResizableCardItemComponent): void {\n const columnsStart =\n card[this._directionPosition] != null\n ? Math.floor(card[this._directionPosition]! / horizontalResizeStep)\n : 0;\n\n // Get width of current card resizing and assign width here for that card\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n\n // till which columns card spans\n const columnsSpan =\n card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n\n const columnHeight = card.cardHeight + card.top;\n\n for (let i = 0; i < columnsSpan; i++) {\n this._columnsHeight[i + columnsStart] = columnHeight;\n }\n\n if (columnsStart === columnsSpan) {\n this._columnsHeight[columnsStart] = columnHeight;\n }\n }\n\n /**\n * @hidden Try to set card at available heights\n * @param card : ResizableCardItemComponent\n * @param index : index value of card in array of ResizableCardItemComponent\n */\n private _setCardPositionValues(card: ResizableCardItemComponent, index: number): void {\n if (index === 0) {\n card[this._directionPosition] = 0 + this._paddingLeft;\n card.top = 0;\n card.startingColumnPosition = 0;\n return;\n }\n\n const uniqueHeights = this._getSortedUniqueHeights();\n let cardPositioned = false;\n\n for (let i = 0; i < uniqueHeights.length && !cardPositioned; i++) {\n cardPositioned = this._isPositionSetSuccess(uniqueHeights[i], card);\n }\n }\n\n /**\n * @hidden try to set card at given height.\n * @param height : height at which card is getting positioned.\n * @param card : ResizableCardItemComponent\n * @returns It returns true when card position id found otherwise it returns false.\n */\n private _isPositionSetSuccess(height: number, card: ResizableCardItemComponent): boolean {\n const columnPositions: number[] = [];\n let index = 0;\n for (const columnHeight of this._columnsHeight) {\n index++;\n if (columnHeight === height) {\n columnPositions.push(index);\n }\n }\n // check for each card position, starting from leftmost\n let isFitting = false;\n let startingColumnPosition = -1;\n\n // try to fit as left (or right if Rtl) as possible from the column position\n startingColumnPosition = this._fitCardColumnPosition(card, columnPositions, height);\n if (startingColumnPosition !== -1) {\n isFitting = true;\n card[this._directionPosition] =\n startingColumnPosition * horizontalResizeStep +\n this._paddingLeft +\n (startingColumnPosition > 0 ? gap * startingColumnPosition : 0);\n card.top = height + (height > 0 ? verticalResizeStep : 0);\n card.startingColumnPosition = startingColumnPosition;\n }\n return isFitting;\n }\n\n /**\n * @hidden Try to start card position from left most fit position.\n * @param card : ResizableCardItemComponent\n * @param columnPositions : Array of available positions for cards.\n * @param height : height at which fixing the card\n * @returns : returns starting column position where card will fit.\n */\n private _fitCardColumnPosition(\n card: ResizableCardItemComponent,\n columnPositions: Array<number>,\n height: number\n ): number {\n // check for each card position, starting from leftmost\n let isFitting = false;\n let startingColumnPosition = -1;\n\n // start from previous indexes\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n const cardColSpan =\n card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n // try to set towards left from available card position\n // eg. [1, 2, 3, 4] columnsPositions\n for (const columnPosition of columnPositions) {\n if (isFitting) {\n break;\n }\n\n // startingPosition values will be 1, 2, 3, 4\n // try to fit as left as possible\n let startingPosition = columnPosition - (cardColSpan - 1);\n startingPosition = startingPosition > 0 ? startingPosition : 1;\n\n for (let index = startingPosition; index <= columnPosition && !isFitting; index++) {\n for (let span = 0; span < cardColSpan; span++) {\n if (this._columnsHeight[index + span - 1] <= height && cardColSpan + index - 1 <= this._columns) {\n isFitting = true;\n startingColumnPosition = index - 1;\n } else {\n isFitting = false;\n startingColumnPosition = -1;\n break;\n }\n }\n }\n }\n return startingColumnPosition;\n }\n\n /** @hidden returns sorted unique height of columns */\n private _getSortedUniqueHeights(): number[] {\n const tempArray = this._columnsHeight.slice();\n const sortedColumnsHeightArray = tempArray.sort(comparer);\n const uniqueHeights: number[] = [];\n\n for (const sortedHeight of sortedColumnsHeightArray) {\n if (uniqueHeights.indexOf(sortedHeight) === -1) {\n uniqueHeights.push(sortedHeight);\n }\n }\n function comparer(first: number, second: number): number {\n return first - second;\n }\n return uniqueHeights;\n }\n\n /**\n * @hidden Comparator to sort card based on rank.\n * @param firstCard : ResizableCardItemComponent\n * @param secondCard : ResizableCardItemComponent\n * @returns : returns difference between first card rank and other card rank.\n */\n private _sortCards(firstCard: ResizableCardItemComponent, secondCard: ResizableCardItemComponent): number {\n return firstCard.rank - secondCard.rank;\n }\n\n /** get value for rtl */\n private get _isRtl(): boolean {\n return this._rtlService?.rtl.getValue();\n }\n\n /** @hidden Rtl change subscription */\n private _subscribeToRtl(): void {\n const refreshDirection = (isRtl): void => {\n this._directionPosition = isRtl ? 'right' : 'left';\n this._cd.detectChanges();\n };\n\n refreshDirection(this._isRtl);\n this._rtlService?.rtl.pipe(takeUntil(this._destroy$)).subscribe(refreshDirection);\n }\n}\n","<div\n #layout\n class=\"fd-resizable-card-layout\"\n [class]=\"'fd-resizable-card-layout--' + layoutSize\"\n [style.width.px]=\"layoutWidth\"\n [style.height.px]=\"layoutHeight\"\n>\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { ResizableCardItemComponent } from './resizable-card-layout/resizable-card-item/resizable-card-item.component';\nimport { ResizableCardLayoutComponent } from './resizable-card-layout/resizable-card-layout.component';\n\n/**\n * @deprecated\n * Use direct imports of `ResizableCardLayoutComponent` and `ResizableCardItemComponent`.\n */\n@NgModule({\n imports: [ResizableCardLayoutComponent, ResizableCardItemComponent],\n exports: [ResizableCardLayoutComponent, ResizableCardItemComponent]\n})\nexport class ResizableCardLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-resizable-card-layout.mjs","sources":["../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.ts","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.html","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.ts","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.html","../../../../libs/core/src/lib/resizable-card-layout/resizable-card-layout.module.ts","../../../../libs/core/src/lib/resizable-card-layout/fundamental-ngx-core-resizable-card-layout.ts"],"sourcesContent":["import { FocusableOption } from '@angular/cdk/a11y';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Optional,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { Nullable, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\n\nexport type ResizeDirection = 'vertical' | 'horizontal' | 'both';\n\n// Card resizes in step of fixed values. values are in pixel\nexport const horizontalResizeStep = 320;\n\n// vertical resize step\nexport const verticalResizeStep = 16;\n\n// gap of 1rem between the cards\nexport const gap = 16;\n\n// threshold offset for horizontal resizing.\nexport const horizontalResizeOffset = 160;\n\n// threshold offset for vertical resizing.\nexport const verticalResizeOffset = 8;\n\n// state of card. Increasing width, no change or decreasing width.\nexport type CardState = 1 | 0 | -1;\n\n// card is given numeric value, on which sorting of cards is done\nlet cardRank = 1;\nlet cardUniqueId = 0;\n\n@Component({\n selector: 'fd-resizable-card-item',\n templateUrl: 'resizable-card-item.component.html',\n styleUrls: ['./resizable-card-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, NgTemplateOutlet]\n})\nexport class ResizableCardItemComponent implements FocusableOption, OnDestroy {\n /** Card properties from the config */\n @Input()\n set config(config: ResizableCardItemConfig) {\n this._config = config;\n this._initialSetup();\n this._cd.detectChanges();\n }\n get config(): ResizableCardItemConfig {\n return this._config;\n }\n\n /** set uinque id for the card */\n @Input()\n itemId = `fd-card-item-${cardUniqueId++}`;\n\n /** set title of the card */\n @Input()\n title: string;\n\n /**\n * Serial order of card.\n * cards are sorted based on ranks before displaying layout.\n * card with lower rank will be displayed first in layout than the card with higher rank.\n */\n @Input()\n set rank(rankValue: number) {\n // determine max value between user given value and default value\n this._rank = rankValue ? rankValue : cardRank++;\n if (rankValue > cardRank) {\n cardRank = rankValue;\n }\n }\n get rank(): number {\n return this._rank;\n }\n\n /**\n * Number of column span card width takes.\n * It will be in step of 20rem.\n */\n @Input()\n set cardWidthColSpan(colSpan: number) {\n this._cardWidthColSpan = colSpan;\n this._setCardWidth();\n }\n get cardWidthColSpan(): number {\n return this._cardWidthColSpan;\n }\n\n /**\n * Number of row span, card height takes.\n * It will be in the step of 1rem.\n */\n @Input()\n set cardHeightRowSpan(rowSpan: number) {\n this._cardHeightRowSpan = rowSpan;\n this._setCardHeight();\n }\n get cardHeightRowSpan(): number {\n return this._cardHeightRowSpan;\n }\n\n /**\n * Number of row span card mini header height takes.\n * Mini Header: The smallest representation of the card is the header.\n * The card can be collapsed to only its header height.\n */\n @Input()\n set cardMiniHeaderRowSpan(rowSpan: number) {\n this._cardMiniHeaderRowSpan = rowSpan;\n this._setCardMiniHeaderHeight();\n }\n get cardMiniHeaderRowSpan(): number {\n return this._cardMiniHeaderRowSpan;\n }\n\n /**\n * Number of row span card mini content height takes.\n * Mini Content: The minimum height for the card content depends on the card type,\n * and must be as high as the smallest representation of the content.\n */\n @Input()\n set cardMiniContentRowSpan(rowSpan: number) {\n this._cardMiniContentRowSpan = rowSpan;\n this._setCardMiniContentHeight();\n }\n get cardMiniContentRowSpan(): number {\n return this._cardMiniContentRowSpan ?? 0;\n }\n\n /** Card can be set to resizable=false, to restrict card resize */\n @Input()\n resizable = true;\n\n /** Set left position for the card */\n @Input()\n @HostBinding('style.left.px')\n left: Nullable<number>;\n\n /** Set right position for the card */\n @Input()\n @HostBinding('style.right.px')\n right: Nullable<number>;\n\n /** Set top position for the card*/\n @Input()\n @HostBinding('style.top.px')\n top = 0;\n\n /** @hidden while resizing this value will change to a greater value */\n @HostBinding('style.z-index')\n zIndex = 0;\n\n /** @hidden */\n @HostBinding('style.position')\n position = 'absolute';\n\n /** @hidden transition animation when layout re-draws */\n @HostBinding('class.fd-resizable-card-layout__draw-transition')\n reDrawAnimation = true;\n\n /** Emits when card is still resizing */\n @Output()\n resizing: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card resize is completed */\n @Output()\n resized: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card height is reduced to show only header */\n @Output()\n miniHeaderReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when minimum height of card content area is reached */\n @Output()\n miniContentReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** show corner resize icon on hover over card */\n showingResizeIcon = false;\n\n /** show border when card is resizing */\n showBorder = false;\n\n /** starting column position of card. starts with 0 */\n startingColumnPosition: number;\n\n /** card width in px. Default value to 20rem */\n cardWidth: number = horizontalResizeStep;\n\n /** card height in px */\n cardHeight: number;\n\n /** Mini-header height of card */\n cardMiniHeaderHeight: number;\n\n /** Mini-content height of card to display minimum valid content */\n cardMiniContentHeight: number;\n\n /** Outer resize indication border width for the card */\n resizeIndicationBorderWidth = 0;\n\n /**\n * Denotes if card is currently expanding or contracting horizontally.\n * +1 denotes increasing, -1 denotes decreasing and 0 denotes card-state has not changed horizontally.\n */\n cardState: CardState = 0;\n\n /** Change in rank from previous value*/\n prevRank = 0;\n\n /** @hidden Default width of card is 20rem ie. 1 column */\n private _cardWidthColSpan = 1;\n\n /** @hidden */\n private _cardHeightRowSpan: number;\n\n /** @hidden helps in vertical step change event emit */\n private _prevCardHeightRowSpan: number;\n\n /** @hidden */\n private _cardMiniHeaderRowSpan: number;\n\n /** @hidden */\n private _cardMiniContentRowSpan?: number;\n\n /** @hidden config values for card */\n private _config: ResizableCardItemConfig;\n\n /** @hidden previous cursor x position */\n private _prevX: number;\n\n /** @hidden previous cursor y position */\n private _prevY: number;\n\n /** @hidden */\n private _prevCardWidth: number;\n\n /** @hidden */\n private _prevCardHeight: number;\n\n /** @hidden flag to control resize */\n private _resize = false;\n\n /** @hidden */\n private _resizeDirection: ResizeDirection;\n\n /** @hidden */\n private _maxColumn: number;\n\n /**\n * @hidden stores original width span of card.\n * It may reduce on small screen, so have to restore using this.\n */\n private _originalCardWidthSpan = 0;\n\n /** @hidden */\n private _rank: number;\n\n /** @hidden */\n private _rtl = false;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n private readonly _cd: ChangeDetectorRef,\n public readonly elementRef: ElementRef,\n @Optional() private readonly _rtlService: RtlService\n ) {\n if (this._rtlService) {\n this._subscriptions.add(this._rtlService.rtl.subscribe((value) => (this._rtl = value)));\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /**\n * When resize handler is pressed and resizing may start.\n * @param event: MouseEvent\n * @param resizeDirection: which handler is pressed to resize\n */\n onMouseDown(event: MouseEvent, resizeDirection: ResizeDirection): void {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n\n this.showingResizeIcon = true;\n this._resize = true;\n this._prevX = event.clientX;\n this._prevY = event.clientY;\n this._prevCardWidth = this.cardWidth;\n this._prevCardHeight = this.cardHeight;\n this._resizeDirection = resizeDirection;\n }\n\n /**\n * @hidden When mouse moves to resize the card.\n * using window:mousemove so, resize will happen smoothly\n * @param event: MouseEvent\n */\n @HostListener('window:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n\n // saves from un-necessary resize\n if (!this._resize) {\n return;\n }\n\n if (!this.showBorder) {\n this.showBorder = true;\n }\n\n // resizing card will go over other cards\n this.zIndex = 1;\n\n const { clientX, clientY } = event;\n switch (this._resizeDirection) {\n case 'both':\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n break;\n case 'horizontal':\n this._horizontalResizing(clientX);\n break;\n case 'vertical':\n this._verticalResizing(clientY);\n break;\n default:\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n }\n\n const cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardWidthWithColumn = cardWidthColSpan * horizontalResizeStep + cardWidthColSpan * gap;\n\n const horizontalResizeThresholdReached = this.cardWidth - cardWidthWithColumn > horizontalResizeOffset;\n\n if (clientX > this._prevX) {\n // increasing width\n this.cardState = 1;\n\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n } else {\n this.resizeIndicationBorderWidth = 0;\n }\n } else if (clientX < this._prevX) {\n // decreasing width\n this.cardState = -1;\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n } else {\n this.resizeIndicationBorderWidth = 0;\n }\n }\n\n this._prevX = clientX;\n this._prevY = clientY;\n this._cd.detectChanges();\n\n // Emits resizing event.\n this.resizing.emit(this.getResizedEventObject());\n }\n\n /**\n * when resizing of card stops\n * @param event: MouseEvent\n */\n @HostListener('document: mouseup', ['$event'])\n onMouseUp(): void {\n if (!this.resizable) {\n return;\n }\n // if card was not resizing\n if (!this._resize) {\n return;\n }\n\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n\n this._stopResizing();\n this._cd.markForCheck();\n }\n\n /** Sets focus on the element */\n focus(): void {\n const header = this.elementRef.nativeElement.querySelector('.fd-card__header');\n header?.focus();\n }\n\n /** Shows resize icon */\n showResizeIcon(): void {\n if (!this.resizable) {\n return;\n }\n this.showingResizeIcon = true;\n }\n\n /** Hides resize icon */\n hideResizeIcon(): void {\n if (!this._resize) {\n this.showingResizeIcon = false;\n }\n }\n\n /** Returns max width for card, based on layout size passed */\n getMaxColSpan(layoutSize: string): number {\n switch (layoutSize) {\n case 'sm':\n this._maxColumn = 1;\n break;\n case 'md':\n this._maxColumn = 2;\n break;\n case 'lg':\n this._maxColumn = 3;\n break;\n case 'xl':\n this._maxColumn = 4;\n break;\n default:\n this._maxColumn = 1;\n }\n return this._maxColumn;\n }\n\n /** Update card width if it exceeds column span based on layout */\n verifyUpdateCardWidth(layoutSize: string): void {\n const widthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n // storing original width of card.\n // used to restore width on window resize from small to large\n this._originalCardWidthSpan = !this._originalCardWidthSpan ? widthColSpan : this._originalCardWidthSpan;\n this._maxColumn = this.getMaxColSpan(layoutSize);\n if (widthColSpan > this._maxColumn) {\n this.cardWidthColSpan = this._maxColumn;\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n } else {\n // keep card width minimum, so it can fit in screen.\n this.cardWidthColSpan = Math.min(this._maxColumn, this._originalCardWidthSpan);\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n }\n }\n\n /** Returns ResizedEvent object to emit. */\n getResizedEventObject(): ResizedEvent {\n const newCardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const newCardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const newCardWidth = newCardWidthColSpan * horizontalResizeStep + newCardWidthColSpan * gap;\n\n const horizontalResizeThresholdReached = this.cardWidth - newCardWidth > horizontalResizeOffset;\n const newCardColSpan = horizontalResizeThresholdReached ? newCardWidthColSpan + 1 : newCardWidthColSpan;\n return new ResizedEvent(\n this,\n this._prevCardWidth,\n this._prevCardHeight,\n this.cardWidth,\n this.cardHeight,\n this._cardWidthColSpan,\n this._cardHeightRowSpan,\n newCardColSpan,\n newCardHeightRowSpan\n );\n }\n\n /** @hidden Return previous height row span of the card */\n get previousCardHeightRowSpan(): number {\n return this._prevCardHeightRowSpan;\n }\n\n /** @hidden Set card properties using config received */\n private _initialSetup(): void {\n this.cardWidthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n this.cardHeightRowSpan = this._config?.cardHeightRowSpan || this.cardHeightRowSpan;\n this.title = this._config?.title || this.title;\n this.rank = this._config?.rank || this.rank;\n this.cardMiniHeaderRowSpan = this._config?.cardMiniHeaderRowSpan || this.cardMiniHeaderRowSpan;\n this.cardMiniContentRowSpan = this._config?.cardMiniContentRowSpan || this.cardMiniContentRowSpan;\n this.resizable = this._config.resizable || this.resizable;\n }\n\n /** @hidden Returns true when resize offset is crossed */\n private _horizontalResizeWithOffset(): void {\n // positive value indicates that width has increased\n const widthIncrement = this.cardWidth - this._prevCardWidth;\n const cardSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardSpanFraction = this.cardWidth % horizontalResizeStep;\n\n // when width increases\n if (widthIncrement > 0) {\n if (widthIncrement < horizontalResizeOffset + gap) {\n // widthIncrement is less than offset, do not increase width\n this.cardWidth = this._prevCardWidth;\n } else {\n // check value of cardSpanFraction, including gaps in cards\n let isCardSpanFractionCrossingOffset = false;\n isCardSpanFractionCrossingOffset = cardSpanFraction - (cardSpan - 1) * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n } else {\n // when width decreases\n if (Math.abs(widthIncrement) < horizontalResizeOffset) {\n // widthIncrement is less than offset, do not decrease width\n this.cardWidth = this._prevCardWidth;\n } else {\n // check value of cardSpanFraction, including gaps in cards\n let isCardSpanFractionCrossingOffset = false;\n isCardSpanFractionCrossingOffset = cardSpanFraction - cardSpan * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n }\n }\n\n /**\n * @hidden make horizontal resize only on step of 20rem\n */\n private _horizontalStepResizing(): void {\n this._horizontalResizeWithOffset();\n\n // Add inner gap in cardWidth if width is more than 1 column\n if (this.cardWidth > horizontalResizeStep) {\n this.cardWidth = this.cardWidth + (this.cardWidth / horizontalResizeStep - 1) * gap;\n }\n this.cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n }\n\n /**\n * @hidden make vertical resize only on step of 1rem\n */\n private _verticalStepResizing(): void {\n // positive value indicates that height has increased\n const cardHeightSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const cardSpanFraction = this.cardHeight % verticalResizeStep;\n this.cardHeight =\n cardSpanFraction > verticalResizeOffset\n ? (cardHeightSpan + 1) * verticalResizeStep\n : cardHeightSpan * verticalResizeStep;\n\n this.cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n\n /**\n * @hidden Resize card horizontally by checking boundary condition\n * @param xPosition: current x-position of cursor\n */\n private _horizontalResizing(xPosition: number): void {\n const difference = this._prevX - xPosition;\n this.cardWidth = this._rtl ? this.cardWidth + difference : this.cardWidth - difference;\n\n const totalIndentation = (this._maxColumn - 1) * gap;\n const maxCardWidtWithoutIndentation = this._maxColumn * horizontalResizeStep;\n\n const maxCardWidth = this._rtl\n ? maxCardWidtWithoutIndentation - totalIndentation\n : maxCardWidtWithoutIndentation + totalIndentation;\n\n if (this.cardWidth > maxCardWidth) {\n this.cardWidth = maxCardWidth;\n } else if (this.cardWidth < horizontalResizeStep) {\n this.cardWidth = horizontalResizeStep;\n }\n }\n\n /**\n * @hidden Resize card vertically.\n * takes care of mini-header height and mini-content height\n * @param yPosition: current y-position of cursor\n */\n private _verticalResizing(yPosition: number): void {\n let reachingMiniHeader = false;\n\n if (this.cardHeight === this.cardMiniHeaderHeight) {\n // if card height is already at mini-header height\n if (this._prevY - yPosition > 0) {\n // decreasing height\n // if miniHeader height reached, stop resizing\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n } else {\n // increasing height\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n } else if (this.cardHeight < this.cardMiniContentHeight + this.cardMiniHeaderHeight) {\n // if card height is between mini-header and mini-content\n if (this._prevY - yPosition < 0) {\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n } else if (\n this.cardHeight === this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0\n ) {\n // decreasing height\n // height decreasing after reaching mini-content. this needs to differentiate\n // from height decreasing and reaching to mini-content.\n reachingMiniHeader = true;\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n // miniHeader height reached, stop resizing\n this._stopResizing();\n this.miniHeaderReached.emit(this.getResizedEventObject());\n } else {\n this.cardHeight = this.cardHeight - (this._prevY - yPosition);\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n\n // stop resizing on miniContent height\n if (\n this.cardHeight <= this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0 &&\n !reachingMiniHeader\n ) {\n this.cardHeight = this.cardMiniContentHeight + this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this.miniContentReached.emit(this.getResizedEventObject());\n this._stopResizing();\n }\n\n // while corner resize, width might have increased and reached to mini-content height.\n // so, on mini-content resize will stop, but have to do step resizing for vertical and horizontal.\n if (!this._resize) {\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n }\n }\n\n /** @hidden reset involved variables while resizing */\n private _stopResizing(): void {\n if (this._resize) {\n this.cardState = 0;\n this.resizeIndicationBorderWidth = 0;\n this._resize = false;\n this.zIndex = 0;\n this.showBorder = false;\n this.resized.emit(this.getResizedEventObject());\n }\n }\n\n /** @hidden Returns cardWidth based on card column span */\n private _setCardWidth(): void {\n this.cardWidth = this._cardWidthColSpan * horizontalResizeStep + (this._cardWidthColSpan - 1) * gap;\n this._cd.markForCheck();\n }\n\n /** @hidden Returns cardHeight based on card row span */\n private _setCardHeight(): void {\n this.cardHeight = this._cardHeightRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n\n /** @hidden Returns card mini header height */\n private _setCardMiniHeaderHeight(): void {\n this.cardMiniHeaderHeight = this._cardMiniHeaderRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n\n /** @hidden Returns card mini content height */\n private _setCardMiniContentHeight(): void {\n this.cardMiniContentHeight = this.cardMiniContentRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n}\n\n/** Config interface for card properties */\nexport interface ResizableCardItemConfig {\n title?: string;\n rank?: number;\n cardWidthColSpan?: number;\n cardHeightRowSpan?: number;\n cardMiniHeaderRowSpan?: number;\n cardMiniContentRowSpan?: number;\n resizable?: boolean;\n}\n\n/** Object to emit on resize complete */\nexport class ResizedEvent {\n /**\n * Object to emit on resize complete\n * @param card\n * @param prevCardWidth Previous card width\n * @param prevCardHeight Previous card height\n * @param cardWidth Current card width\n * @param cardHeight Current card height\n * @param cardWidthColSpan Current card width column span\n * @param cardHeightRowSpan Current card height row span\n * @param newCardWidthColSpan New card width column span\n * @param newCardHeightRowSpan New card height row span\n */\n constructor(\n public card: ResizableCardItemComponent,\n public prevCardWidth: number,\n public prevCardHeight: number,\n public cardWidth: number,\n public cardHeight: number,\n public cardWidthColSpan: number,\n public cardHeightRowSpan: number,\n public newCardWidthColSpan: number,\n public newCardHeightRowSpan: number\n ) {}\n}\n","<div\n class=\"fd-resizable-card-layout__item\"\n [class.fd-resizable-card-layout__indication-border]=\"showBorder\"\n #resizeCard\n>\n <div\n class=\"fd-resizable-card-layout__item--border-display fd-resizable-card-layout__item--resize-transition\"\n [style.width.px]=\"cardWidth\"\n [style.height.px]=\"cardHeight\"\n (mouseenter)=\"showResizeIcon()\"\n (mouseleave)=\"hideResizeIcon()\"\n >\n <div class=\"fd-resizable-card-layout__card\">\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"showingResizeIcon\">\n <div class=\"fd-resizable-card-layout__icon-wrapper\">\n <div\n class=\"fd-resizable-card-layout__icon\"\n #cornerHandle\n (mousedown)=\"onMouseDown($event, 'both')\"\n ></div>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"resizable\">\n <ng-container *ngTemplateOutlet=\"verticalHandleTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"horizontalHandleTemplate\"></ng-container>\n </ng-container>\n </div>\n\n <div\n class=\"fd-resizable-card-layout__item--resize-transition\"\n [style.width.px]=\"resizeIndicationBorderWidth\"\n [style.height.px]=\"cardHeight\"\n ></div>\n</div>\n\n<ng-template #verticalHandleTemplate>\n <div\n #verticalHandle\n class=\"fd-resizable-card-layout__resize--vertical\"\n (mousedown)=\"onMouseDown($event, 'horizontal')\"\n ></div>\n</ng-template>\n\n<ng-template #horizontalHandleTemplate>\n <div\n #horizontalHandle\n class=\"fd-resizable-card-layout__resize--horizontal\"\n (mousedown)=\"onMouseDown($event, 'vertical')\"\n ></div>\n</ng-template>\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport {\n ResizableCardItemComponent,\n ResizableCardItemConfig,\n ResizedEvent,\n gap,\n horizontalResizeOffset,\n horizontalResizeStep,\n verticalResizeStep\n} from './resizable-card-item/resizable-card-item.component';\n\nexport type LayoutSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type ResizableCardLayoutConfig = Array<ResizableCardItemConfig>;\n\n@Component({\n selector: 'fd-resizable-card-layout',\n templateUrl: 'resizable-card-layout.component.html',\n styleUrls: ['./resizable-card-layout.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class ResizableCardLayoutComponent implements OnInit, AfterViewInit, AfterContentInit, OnDestroy {\n /** Object for setting each card property */\n @Input()\n layoutConfig: ResizableCardLayoutConfig;\n\n /** Emits when card resize is reached to one new step in horizontal or vertical direction */\n @Output()\n stepChange: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card is still resizing */\n @Output()\n resizing: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card resize is completed */\n @Output()\n resized: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when card height is reduced to show only header */\n @Output()\n miniHeaderReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when minimum height of card content area is reached */\n @Output()\n miniContentReached: EventEmitter<ResizedEvent> = new EventEmitter<ResizedEvent>();\n\n /** Emits when layout changes */\n @Output()\n layoutChange: EventEmitter<ResizableCardLayoutConfig> = new EventEmitter<ResizableCardLayoutConfig>();\n\n /** @hidden */\n @ContentChildren(ResizableCardItemComponent)\n resizeCardItems: QueryList<ResizableCardItemComponent>;\n\n /** width for layout */\n layoutWidth: number;\n\n /** height for layout */\n layoutHeight: number;\n\n /** @hidden Number of columns in layout. considering 1 column width 20rem */\n private _columns: number;\n\n /** @hidden Layout padding. will be added to first card padding in every row */\n private _paddingLeft: number;\n\n /** @hidden Stores height of each column on card arrangement */\n private _columnsHeight: Array<number>;\n\n /** @hidden Available screen layout */\n private _layout: LayoutSize;\n\n /** @hidden Stores sorted card before placing in layout */\n private _sortedCards: Array<ResizableCardItemComponent>;\n\n /** @hidden FocusKeyManager instance */\n private _keyboardEventsManager: FocusKeyManager<ResizableCardItemComponent>;\n\n /** @hidden */\n private readonly _destroy$ = new Subject<void>();\n\n /** @hidden */\n private _layoutShifted = false;\n\n /** @hidden */\n private _directionPosition: 'left' | 'right' = 'left';\n\n /** @hidden */\n constructor(\n private readonly _cd: ChangeDetectorRef,\n public readonly elementRef: ElementRef,\n @Optional() private readonly _rtlService: RtlService\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // initialise value 0\n\n this._subscribeToRtl();\n\n // detect initial window size and set layout\n this._createLayout();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._initialSetup();\n // listen for query-list change\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n\n this.resizeCardItems.changes.subscribe(() => {\n this.arrangeCards(this.resizeCardItems?.toArray());\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n this._cd.markForCheck();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._accessibilitySetup();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n this._keyboardEventsManager?.destroy();\n }\n\n /** @hidden handles keyboard accessibility */\n @HostListener('keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n event.stopImmediatePropagation();\n if (!this._keyboardEventsManager.activeItemIndex) {\n this._keyboardEventsManager.setFirstItemActive();\n }\n\n if (this._keyboardEventsManager) {\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n\n /** @hidden */\n @HostListener('window:resize')\n onResize(): void {\n this._createLayout();\n }\n\n /** Layout size. Available options are 'sm', 'md', 'lg' and 'xl' */\n set layoutSize(layoutSize: LayoutSize) {\n this._layout = layoutSize;\n }\n get layoutSize(): LayoutSize {\n return this._layout;\n }\n\n /**\n * Arranges cards in layout based on rank, width and height of card\n * @param cards: Array of ResizableCardItemComponent\n */\n arrangeCards(cards: Array<ResizableCardItemComponent>): void {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // sort based on the card rank\n this._sortedCards = cards?.sort(this._sortCards);\n\n this._sortedCards?.forEach((card, index) => {\n this._setCardPositionValues(card, index);\n this._updateColumnsHeight(card);\n });\n this.layoutHeight = Math.max.apply(null, this._columnsHeight) + verticalResizeStep;\n\n this._emitLayoutChange();\n this._cd.markForCheck();\n }\n\n /**\n * Handles shifting of cards with animation, while card is still resizing.\n * @param event: ResizedEvent\n */\n cardResizing(event: ResizedEvent): void {\n this.resizing.emit(event);\n this._handleHorizontalResize(event);\n this._handleVerticalResize(event);\n }\n\n /**\n * Handles arrangement of cards in layout\n * @param event: ResizedEvent\n */\n cardResizeComplete(event: ResizedEvent): void {\n this._layoutShifted = false;\n this.arrangeCards(this.resizeCardItems.toArray());\n this.resized.emit(event);\n }\n\n /** @hidden */\n updateLayout(): void {\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n }\n\n /**\n * method to get screen width\n * @returns Window width in px\n */\n getWidthAvailable(): number {\n return window.innerWidth;\n }\n\n /** @hidden Subscribe to events from items */\n private _initialSetup(): void {\n // listen for resizing event of card item\n this.resizeCardItems?.forEach((resizeCardItem, index) => {\n if (this.layoutConfig && this.layoutConfig.length >= index + 1) {\n resizeCardItem.config = this.layoutConfig[index];\n }\n\n resizeCardItem.resizing\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: ResizedEvent) => this.cardResizing(event));\n\n // listen for resize complete event of card item\n resizeCardItem.resized\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: ResizedEvent) => this.cardResizeComplete(event));\n\n // listen for mini-header height event of card item\n resizeCardItem.miniHeaderReached.pipe(takeUntil(this._destroy$)).subscribe((event: ResizedEvent) => {\n this.miniHeaderReached.emit(event);\n this.stepChange.emit(event);\n });\n\n // listen for mini-content height event of card item\n resizeCardItem.miniContentReached.pipe(takeUntil(this._destroy$)).subscribe((event: ResizedEvent) => {\n this.miniContentReached.emit(event);\n this.stepChange.emit(event);\n });\n });\n }\n\n /** @hidden */\n private _accessibilitySetup(): void {\n this._keyboardEventsManager?.destroy();\n this._keyboardEventsManager = new FocusKeyManager(this.resizeCardItems).withWrap();\n }\n\n /** @hidden create layout based on layout size */\n private _createLayout(): void {\n const screenWidth = this.getWidthAvailable();\n const prevLayoutSize = this.layoutSize;\n\n if (screenWidth > 0 && screenWidth <= 656 && prevLayoutSize !== 'sm') {\n this.layoutSize = 'sm';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n } else if (screenWidth > 656 && screenWidth <= 975 && prevLayoutSize !== 'md') {\n this.layoutSize = 'md';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n } else if (screenWidth > 975 && screenWidth <= 1359 && prevLayoutSize !== 'lg') {\n this.layoutSize = 'lg';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n } else if (screenWidth > 1359 && prevLayoutSize !== 'xl') {\n this.layoutSize = 'xl';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n }\n\n /** @hidden Emit layoutChange event with updated card dimensions */\n private _emitLayoutChange(): void {\n const latestCardConfig: ResizableCardLayoutConfig = [];\n this.resizeCardItems?.forEach((card) => {\n const cardConfig: ResizableCardItemConfig = {};\n cardConfig.cardWidthColSpan = card.cardWidthColSpan;\n cardConfig.cardHeightRowSpan = card.cardHeightRowSpan;\n cardConfig.rank = card.rank;\n cardConfig.title = card.title;\n cardConfig.cardMiniContentRowSpan = card.cardMiniContentRowSpan;\n cardConfig.cardMiniHeaderRowSpan = card.cardMiniHeaderRowSpan;\n cardConfig.resizable = card.resizable;\n latestCardConfig.push(cardConfig);\n });\n this.layoutChange.emit(latestCardConfig);\n }\n\n /**\n * @hidden Sets number of column in layout, based on LayoutSize passed\n * @param layoutSize: Available options are 'sm' | 'md' | 'lg' | 'xl'\n */\n private _setLayoutColumns(layoutSize: LayoutSize): void {\n let layoutWidthDefault: number;\n\n switch (layoutSize) {\n case 'sm':\n this._columns = 1;\n this._paddingLeft = 8;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault;\n break;\n case 'md':\n this._columns = 2;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + gap;\n break;\n case 'lg':\n this._columns = 3;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 2 * gap;\n break;\n case 'xl':\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n break;\n default:\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n }\n }\n\n /**\n * @hidden Method to handle card vertical resize and trigger the layout change\n * @param event: ResizedEvent\n */\n private _handleVerticalResize(event: ResizedEvent): void {\n if (event.card.cardHeightRowSpan !== event.card.previousCardHeightRowSpan) {\n this.arrangeCards(this._sortedCards);\n this._cd.markForCheck();\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n\n /**\n * @hidden Method to handle card horizontal resize and trigger the layout change\n * @param event : ResizedEvent\n */\n private _handleHorizontalResize(event: ResizedEvent): void {\n // when increasing width hit the offset, show extended border and start pushing down border cards\n // when width is decreasing , show extended border till it reaches to offset.\n const cardWidthChange = event.cardWidth - event.prevCardWidth;\n const currentResizingItemIndex = this._sortedCards?.findIndex((x) => x.rank === event.card.rank);\n\n if (event.cardWidth > event.prevCardWidth) {\n // when increasing size\n // card width increasing currently\n if (event.card.cardState === 1 && cardWidthChange > horizontalResizeOffset + gap && !this._layoutShifted) {\n // index of this card, then get next card. exchange ranks\n this._sortedCards.forEach((card: ResizableCardItemComponent, index: number) => {\n if (index > currentResizingItemIndex) {\n // if there are some cards on same height. make the current card rank higher than these.\n // otherwise next index where it will fit. until any card has less column span than total columns\n // if only in next top, one card is taking full columns\n if (\n card.startingColumnPosition + card.cardWidthColSpan === this._columns &&\n card.cardWidthColSpan !== this._columns\n ) {\n // get cards with top > current top , but minimum of it\n // exchange rank with these card\n this._moveCardDown(index);\n }\n }\n });\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n } else if (\n event.card.cardState === -1 &&\n cardWidthChange < horizontalResizeOffset + gap &&\n this._layoutShifted\n ) {\n // card width decreasing currently\n // move up the cards, if it was shifted while increasing the width\n this._sortedCards.forEach((card: ResizableCardItemComponent) => {\n card.rank = card.prevRank ? card.prevRank : card.rank;\n card.prevRank = 0;\n });\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n } else if (event.cardWidth < event.prevCardWidth) {\n // when decreasing size\n if (event.card.cardState === -1 && -cardWidthChange > horizontalResizeOffset && !this._layoutShifted) {\n // card width decreasing currently\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n } else if (event.card.cardState === 1 && -cardWidthChange < horizontalResizeOffset && this._layoutShifted) {\n // card width increasing currently\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n }\n\n /**\n * @hidden Method to move card down, when another card width is increasing\n * Method to loop till this._columns -1 positions and exchange the rank\n * @param currentCardIndex: Index of current card\n */\n private _moveCardDown(currentCardIndex: number): void {\n // taking width of adjacent card col-span into account\n\n // eg: 4 columns - 2 col(adjacent card) = 2 positions can exchange ranks\n const currentCard: ResizableCardItemComponent = this._sortedCards[currentCardIndex];\n let card: ResizableCardItemComponent;\n\n // unoccupiedPositions positions left after currentCard occupies in next row.\n let unoccupiedPositions = this._columns - currentCard.cardWidthColSpan;\n\n currentCard.prevRank = currentCard.rank;\n\n let index = 1;\n while (unoccupiedPositions > 0) {\n // compare from next card\n card = this._sortedCards[index + currentCardIndex];\n if (card && unoccupiedPositions >= card.cardWidthColSpan) {\n card.prevRank = card.rank;\n card.rank -= 1;\n currentCard.rank = card.prevRank;\n unoccupiedPositions -= card.cardWidthColSpan;\n } else {\n unoccupiedPositions = 0;\n }\n index += 1;\n }\n }\n\n /**\n * @hidden updates array with new column heights\n * @param card: ResizableCardItemComponent\n */\n private _updateColumnsHeight(card: ResizableCardItemComponent): void {\n const columnsStart =\n card[this._directionPosition] != null\n ? Math.floor(card[this._directionPosition]! / horizontalResizeStep)\n : 0;\n\n // Get width of current card resizing and assign width here for that card\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n\n // till which columns card spans\n const columnsSpan =\n card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n\n const columnHeight = card.cardHeight + card.top;\n\n for (let i = 0; i < columnsSpan; i++) {\n this._columnsHeight[i + columnsStart] = columnHeight;\n }\n\n if (columnsStart === columnsSpan) {\n this._columnsHeight[columnsStart] = columnHeight;\n }\n }\n\n /**\n * @hidden Try to set card at available heights\n * @param card : ResizableCardItemComponent\n * @param index : index value of card in array of ResizableCardItemComponent\n */\n private _setCardPositionValues(card: ResizableCardItemComponent, index: number): void {\n if (index === 0) {\n card[this._directionPosition] = 0 + this._paddingLeft;\n card.top = 0;\n card.startingColumnPosition = 0;\n return;\n }\n\n const uniqueHeights = this._getSortedUniqueHeights();\n let cardPositioned = false;\n\n for (let i = 0; i < uniqueHeights.length && !cardPositioned; i++) {\n cardPositioned = this._isPositionSetSuccess(uniqueHeights[i], card);\n }\n }\n\n /**\n * @hidden try to set card at given height.\n * @param height : height at which card is getting positioned.\n * @param card : ResizableCardItemComponent\n * @returns It returns true when card position id found otherwise it returns false.\n */\n private _isPositionSetSuccess(height: number, card: ResizableCardItemComponent): boolean {\n const columnPositions: number[] = [];\n let index = 0;\n for (const columnHeight of this._columnsHeight) {\n index++;\n if (columnHeight === height) {\n columnPositions.push(index);\n }\n }\n // check for each card position, starting from leftmost\n let isFitting = false;\n let startingColumnPosition = -1;\n\n // try to fit as left (or right if Rtl) as possible from the column position\n startingColumnPosition = this._fitCardColumnPosition(card, columnPositions, height);\n if (startingColumnPosition !== -1) {\n isFitting = true;\n card[this._directionPosition] =\n startingColumnPosition * horizontalResizeStep +\n this._paddingLeft +\n (startingColumnPosition > 0 ? gap * startingColumnPosition : 0);\n card.top = height + (height > 0 ? verticalResizeStep : 0);\n card.startingColumnPosition = startingColumnPosition;\n }\n return isFitting;\n }\n\n /**\n * @hidden Try to start card position from left most fit position.\n * @param card : ResizableCardItemComponent\n * @param columnPositions : Array of available positions for cards.\n * @param height : height at which fixing the card\n * @returns : returns starting column position where card will fit.\n */\n private _fitCardColumnPosition(\n card: ResizableCardItemComponent,\n columnPositions: Array<number>,\n height: number\n ): number {\n // check for each card position, starting from leftmost\n let isFitting = false;\n let startingColumnPosition = -1;\n\n // start from previous indexes\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n const cardColSpan =\n card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n // try to set towards left from available card position\n // eg. [1, 2, 3, 4] columnsPositions\n for (const columnPosition of columnPositions) {\n if (isFitting) {\n break;\n }\n\n // startingPosition values will be 1, 2, 3, 4\n // try to fit as left as possible\n let startingPosition = columnPosition - (cardColSpan - 1);\n startingPosition = startingPosition > 0 ? startingPosition : 1;\n\n for (let index = startingPosition; index <= columnPosition && !isFitting; index++) {\n for (let span = 0; span < cardColSpan; span++) {\n if (this._columnsHeight[index + span - 1] <= height && cardColSpan + index - 1 <= this._columns) {\n isFitting = true;\n startingColumnPosition = index - 1;\n } else {\n isFitting = false;\n startingColumnPosition = -1;\n break;\n }\n }\n }\n }\n return startingColumnPosition;\n }\n\n /** @hidden returns sorted unique height of columns */\n private _getSortedUniqueHeights(): number[] {\n const tempArray = this._columnsHeight.slice();\n const sortedColumnsHeightArray = tempArray.sort(comparer);\n const uniqueHeights: number[] = [];\n\n for (const sortedHeight of sortedColumnsHeightArray) {\n if (uniqueHeights.indexOf(sortedHeight) === -1) {\n uniqueHeights.push(sortedHeight);\n }\n }\n function comparer(first: number, second: number): number {\n return first - second;\n }\n return uniqueHeights;\n }\n\n /**\n * @hidden Comparator to sort card based on rank.\n * @param firstCard : ResizableCardItemComponent\n * @param secondCard : ResizableCardItemComponent\n * @returns : returns difference between first card rank and other card rank.\n */\n private _sortCards(firstCard: ResizableCardItemComponent, secondCard: ResizableCardItemComponent): number {\n return firstCard.rank - secondCard.rank;\n }\n\n /** get value for rtl */\n private get _isRtl(): boolean {\n return this._rtlService?.rtl.getValue();\n }\n\n /** @hidden Rtl change subscription */\n private _subscribeToRtl(): void {\n const refreshDirection = (isRtl): void => {\n this._directionPosition = isRtl ? 'right' : 'left';\n this._cd.detectChanges();\n };\n\n refreshDirection(this._isRtl);\n this._rtlService?.rtl.pipe(takeUntil(this._destroy$)).subscribe(refreshDirection);\n }\n}\n","<div\n #layout\n class=\"fd-resizable-card-layout\"\n [class]=\"'fd-resizable-card-layout--' + layoutSize\"\n [style.width.px]=\"layoutWidth\"\n [style.height.px]=\"layoutHeight\"\n>\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { ResizableCardItemComponent } from './resizable-card-layout/resizable-card-item/resizable-card-item.component';\nimport { ResizableCardLayoutComponent } from './resizable-card-layout/resizable-card-layout.component';\n\n/**\n * @deprecated\n * Use direct imports of `ResizableCardLayoutComponent` and `ResizableCardItemComponent`.\n */\n@NgModule({\n imports: [ResizableCardLayoutComponent, ResizableCardItemComponent],\n exports: [ResizableCardLayoutComponent, ResizableCardItemComponent]\n})\nexport class ResizableCardLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -212,7 +212,7 @@ class SegmentedButtonComponent {
|
|
|
212
212
|
useExisting: forwardRef(() => SegmentedButtonComponent),
|
|
213
213
|
multi: true
|
|
214
214
|
}
|
|
215
|
-
], queries: [{ propertyName: "_buttons", predicate: FD_BUTTON_COMPONENT }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: ["/*!\n * Fundamental Library Styles v0.
|
|
215
|
+
], queries: [{ propertyName: "_buttons", predicate: FD_BUTTON_COMPONENT }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-segmented-button{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:inline-flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative;vertical-align:middle}.fd-segmented-button:after,.fd-segmented-button:before{box-sizing:inherit;font-size:inherit}.fd-segmented-button:before{-webkit-box-shadow:inset 0 0 0 var(--sapButton_BorderWidth) var(--fdButtonPrioritizedBorderColor, var(--sapButton_BorderColor));background:var(--sapButton_Background);border-radius:var(--sapButton_BorderCornerRadius);box-shadow:inset 0 0 0 var(--sapButton_BorderWidth) var(--fdButtonPrioritizedBorderColor, var(--sapButton_BorderColor));content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.fd-segmented-button button{--fdButtonPrioritizedBorderColor:var(--fdButton_Split_Border_Color);--fdButtonPrioritizedBackgroundColor:var(--fdButton_Split_Background_Color);margin:0}.fd-segmented-button button.is-hover,.fd-segmented-button button:hover{z-index:1}.fd-segmented-button button:first-child{border-radius:var(--fdButton_Border_Radius_Left)}.fd-segmented-button button:not(:first-child):not(:last-child){border-radius:var(--fdButton_Segmented_Middle_Border_Radius)}.fd-segmented-button button:last-child{border-radius:var(--fdButton_Border_Radius_Right)}.fd-segmented-button button:not(:last-child){margin-right:var(--fdButton_Segmented_Border_Offset)}.fd-segmented-button button:not(:last-child)[dir=rtl],[dir=rtl] .fd-segmented-button button:not(:last-child){margin-left:var(--fdButton_Segmented_Border_Offset);margin-right:0}.fd-segmented-button:not(.fd-segmented-button--vertical) button[dir=rtl]:first-child,[dir=rtl] .fd-segmented-button:not(.fd-segmented-button--vertical) button:first-child{border-radius:var(--fdButton_Border_Radius_Left_RTL)}.fd-segmented-button:not(.fd-segmented-button--vertical) button[dir=rtl]:last-child,[dir=rtl] .fd-segmented-button:not(.fd-segmented-button--vertical) button:last-child{border-radius:var(--fdButton_Border_Radius_Right_RTL)}.fd-segmented-button--vertical{flex-direction:column}.fd-segmented-button--vertical button:first-child{border-radius:var(--fdButton_Vertical_Border_Radius_Left)}.fd-segmented-button--vertical button:last-child{border-radius:var(--fdButton_Vertical_Border_Radius_Right)}.fd-segmented-button--vertical button:not(:last-child){margin-bottom:var(--fdButton_Segmented_Border_Offset);margin-right:0}.fd-segmented-button--vertical button:not(:last-child)[dir=rtl],[dir=rtl] .fd-segmented-button--vertical button:not(:last-child){margin-left:0;margin-right:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
216
216
|
}
|
|
217
217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: SegmentedButtonComponent, decorators: [{
|
|
218
218
|
type: Component,
|
|
@@ -224,7 +224,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
224
224
|
useExisting: forwardRef(() => SegmentedButtonComponent),
|
|
225
225
|
multi: true
|
|
226
226
|
}
|
|
227
|
-
], standalone: true, styles: ["/*!\n * Fundamental Library Styles v0.
|
|
227
|
+
], standalone: true, styles: ["/*!\n * Fundamental Library Styles v0.31.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-segmented-button{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:inline-flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0;position:relative;vertical-align:middle}.fd-segmented-button:after,.fd-segmented-button:before{box-sizing:inherit;font-size:inherit}.fd-segmented-button:before{-webkit-box-shadow:inset 0 0 0 var(--sapButton_BorderWidth) var(--fdButtonPrioritizedBorderColor, var(--sapButton_BorderColor));background:var(--sapButton_Background);border-radius:var(--sapButton_BorderCornerRadius);box-shadow:inset 0 0 0 var(--sapButton_BorderWidth) var(--fdButtonPrioritizedBorderColor, var(--sapButton_BorderColor));content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.fd-segmented-button button{--fdButtonPrioritizedBorderColor:var(--fdButton_Split_Border_Color);--fdButtonPrioritizedBackgroundColor:var(--fdButton_Split_Background_Color);margin:0}.fd-segmented-button button.is-hover,.fd-segmented-button button:hover{z-index:1}.fd-segmented-button button:first-child{border-radius:var(--fdButton_Border_Radius_Left)}.fd-segmented-button button:not(:first-child):not(:last-child){border-radius:var(--fdButton_Segmented_Middle_Border_Radius)}.fd-segmented-button button:last-child{border-radius:var(--fdButton_Border_Radius_Right)}.fd-segmented-button button:not(:last-child){margin-right:var(--fdButton_Segmented_Border_Offset)}.fd-segmented-button button:not(:last-child)[dir=rtl],[dir=rtl] .fd-segmented-button button:not(:last-child){margin-left:var(--fdButton_Segmented_Border_Offset);margin-right:0}.fd-segmented-button:not(.fd-segmented-button--vertical) button[dir=rtl]:first-child,[dir=rtl] .fd-segmented-button:not(.fd-segmented-button--vertical) button:first-child{border-radius:var(--fdButton_Border_Radius_Left_RTL)}.fd-segmented-button:not(.fd-segmented-button--vertical) button[dir=rtl]:last-child,[dir=rtl] .fd-segmented-button:not(.fd-segmented-button--vertical) button:last-child{border-radius:var(--fdButton_Border_Radius_Right_RTL)}.fd-segmented-button--vertical{flex-direction:column}.fd-segmented-button--vertical button:first-child{border-radius:var(--fdButton_Vertical_Border_Radius_Left)}.fd-segmented-button--vertical button:last-child{border-radius:var(--fdButton_Vertical_Border_Radius_Right)}.fd-segmented-button--vertical button:not(:last-child){margin-bottom:var(--fdButton_Segmented_Border_Offset);margin-right:0}.fd-segmented-button--vertical button:not(:last-child)[dir=rtl],[dir=rtl] .fd-segmented-button--vertical button:not(:last-child){margin-left:0;margin-right:0}\n"] }]
|
|
228
228
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.DestroyRef }]; }, propDecorators: { toggle: [{
|
|
229
229
|
type: Input
|
|
230
230
|
}], _fdSegmentedButtonClass: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-segmented-button.mjs","sources":["../../../../libs/core/src/lib/segmented-button/segmented-button.component.ts","../../../../libs/core/src/lib/segmented-button/segmented-button.module.ts","../../../../libs/core/src/lib/segmented-button/fundamental-ngx-core-segmented-button.ts"],"sourcesContent":["import { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n QueryList,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KeyUtil, destroyObservable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent, FD_BUTTON_COMPONENT } from '@fundamental-ngx/core/button';\nimport { Subject, asyncScheduler, fromEvent, merge } from 'rxjs';\nimport { filter, observeOn, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport const isDisabledClass = 'is-disabled';\n\nexport type SegmentedButtonValue = string | (string | null)[] | null;\n\n/**\n * Container for grouped buttons.\n *\n * ```html\n * <fd-segmented-button [(ngModel)]=\"value\">\n * <button fd-button value=\"first\">Button</button>\n * <button fd-button value=\"second\">Button</button>\n * <button fd-button value=\"third\">Button</button>\n * </fd-segmented-button>\n * ```\n */\n@Component({\n selector: 'fd-segmented-button',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./segmented-button.component.scss'],\n host: {\n role: 'group'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SegmentedButtonComponent),\n multi: true\n }\n ],\n standalone: true\n})\nexport class SegmentedButtonComponent implements AfterViewInit, ControlValueAccessor, OnDestroy {\n /** Whether segmented button is on toggle mode, which allows to toggle more than 1 button */\n @Input()\n toggle = false;\n\n /** @hidden */\n @HostBinding('class.fd-segmented-button')\n _fdSegmentedButtonClass = true;\n\n /** @hidden */\n @ContentChildren(FD_BUTTON_COMPONENT)\n _buttons: QueryList<ButtonComponent>;\n\n /**\n * Value of segmented button can have 2 types:\n * - string, when there is no toggle mode and only 1 value can be chosen.\n * - array of strings, when there is toggle mode and more than 1 value can be chosen.\n */\n private _currentValue: SegmentedButtonValue;\n\n /** @hidden */\n private _isDisabled = false;\n\n /** An RxJS Subject that will kill the data stream upon queryList changes (for unsubscribing) */\n private readonly _onRefresh$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n constructor(\n private readonly _changeDetRef: ChangeDetectorRef,\n private readonly _elementRef: ElementRef,\n private readonly _destroyRef: DestroyRef\n ) {}\n\n /** @hidden */\n @HostListener('click', ['$event'])\n private _click(event: MouseEvent): void {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n onChange: (value: SegmentedButtonValue) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._listenToButtonChanges();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onRefresh$.complete();\n }\n\n /** @hidden */\n writeValue(values: string[] | string): void {\n this._currentValue = values;\n this._pickButtonsByValues(values);\n }\n\n /**\n * @hidden\n * @param fn User defined function that handles the *onChange* event of the SegmentedButtons.\n */\n registerOnChange(fn: (value: SegmentedButtonValue) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @hidden\n * @param fn User defined function that handles the *onTouch* event of the SegmentedButtons.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @hidden\n * @param isDisabled Sets the value of the *disabled* property of the SegmentedButtons.\n */\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled = isDisabled;\n this._toggleDisableButtons(isDisabled);\n this._changeDetRef.detectChanges();\n }\n\n /** @hidden */\n private _listenToButtonChanges(): void {\n this._buttons.changes\n .pipe(startWith(1), observeOn(asyncScheduler), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._onRefresh$.next();\n this._toggleDisableButtons(this._isDisabled);\n this._pickButtonsByValues(this._currentValue);\n this._buttons.forEach((button) => this._listenToTriggerEvents(button));\n });\n }\n\n /** @hidden */\n private _listenToTriggerEvents(buttonComponent: ButtonComponent): void {\n const htmlElement = buttonComponent.elementRef.nativeElement;\n\n const refresh$ = merge(destroyObservable(this._destroyRef), this._onRefresh$);\n\n const triggerEvents$ = merge(\n fromEvent(htmlElement, 'click'),\n fromEvent<KeyboardEvent>(htmlElement, 'keydown').pipe(\n filter((event) => KeyUtil.isKeyCode(event, [ENTER, SPACE])),\n tap((event) => {\n event.preventDefault();\n this.onTouched();\n })\n )\n );\n\n triggerEvents$.pipe(takeUntil(refresh$)).subscribe(() => this._handleTriggerOnButton(buttonComponent));\n }\n\n /** @hidden */\n private _handleTriggerOnButton(buttonComponent: ButtonComponent): void {\n if (!this._isButtonDisabled(buttonComponent)) {\n if (!this._isButtonSelected(buttonComponent) && !this.toggle) {\n this._buttons.forEach((button) => this._deselectButton(button));\n this._selectButton(buttonComponent);\n this._propagateChange();\n this._changeDetRef.markForCheck();\n }\n\n if (this.toggle) {\n this._toggleButton(buttonComponent);\n this._propagateChange();\n this._changeDetRef.markForCheck();\n }\n }\n }\n\n /** @hidden */\n private _propagateChange(): void {\n this.onChange(this._getValuesBySelected());\n this._currentValue = this._getValuesBySelected();\n }\n\n /** @hidden */\n private _toggleButton(buttonComponent: ButtonComponent): void {\n if (this._isButtonSelected(buttonComponent)) {\n this._deselectButton(buttonComponent);\n } else {\n this._selectButton(buttonComponent);\n }\n }\n\n /** @hidden */\n private _pickButtonsByValues(values: SegmentedButtonValue): void {\n if (!this._buttons) {\n return;\n }\n this._buttons.forEach((button) => this._deselectButton(button));\n this._getButtonsByValues(values).forEach((button) => this._selectButton(button));\n this._changeDetRef.detectChanges();\n }\n\n /** @hidden */\n private _getButtonsByValues(values: SegmentedButtonValue): ButtonComponent[] {\n if (!values) {\n return [];\n }\n\n if (Array.isArray(values)) {\n return this._buttons.filter((button) => !!values.find((value) => this._getButtonValue(button) === value));\n } else {\n return this._buttons.filter((button) => this._getButtonValue(button) === values);\n }\n }\n\n /** @hidden */\n private _selectButton(buttonComponent: ButtonComponent): void {\n buttonComponent.toggled = true;\n }\n\n /** @hidden */\n private _deselectButton(buttonComponent: ButtonComponent): void {\n buttonComponent.toggled = false;\n }\n\n /** @hidden */\n private _isButtonSelected(buttonComponent: ButtonComponent): boolean {\n return buttonComponent.toggled;\n }\n\n /** @hidden */\n private _isButtonDisabled(buttonComponent: ButtonComponent): boolean {\n return buttonComponent._disabled || buttonComponent.ariaDisabled;\n }\n\n /** @hidden */\n private _toggleDisableButtons(disable: boolean): void {\n if (!this._buttons) {\n return;\n }\n\n this._buttons.forEach((button) => (button.disabled = disable));\n if (disable) {\n this._buttons.forEach((button) => button.elementRef.nativeElement.setAttribute('disabled', 'true'));\n }\n this._changeDetRef.markForCheck();\n }\n\n /** @hidden */\n private _getButtonValue(buttonComponent: ButtonComponent): string | null {\n const element = buttonComponent.elementRef.nativeElement;\n if (element instanceof HTMLButtonElement) {\n return element.value;\n }\n return element.getAttribute('value');\n }\n\n /** @hidden\n * Returns values depending on selected state of buttons\n */\n private _getValuesBySelected(): SegmentedButtonValue {\n if (!this._buttons) {\n return [];\n }\n\n const resButtons = this._buttons\n .filter((button) => this._isButtonSelected(button))\n .map((button) => this._getButtonValue(button));\n if (!this.toggle) {\n return resButtons.length === 1 ? resButtons[0] : null;\n } else {\n return resButtons;\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SegmentedButtonComponent } from './segmented-button.component';\n\n/**\n * @deprecated\n * Use direct `SegmentedButtonComponent` import instead.\n */\n@NgModule({\n imports: [SegmentedButtonComponent],\n exports: [SegmentedButtonComponent]\n})\nexport class SegmentedButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-segmented-button.mjs","sources":["../../../../libs/core/src/lib/segmented-button/segmented-button.component.ts","../../../../libs/core/src/lib/segmented-button/segmented-button.module.ts","../../../../libs/core/src/lib/segmented-button/fundamental-ngx-core-segmented-button.ts"],"sourcesContent":["import { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n QueryList,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KeyUtil, destroyObservable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent, FD_BUTTON_COMPONENT } from '@fundamental-ngx/core/button';\nimport { Subject, asyncScheduler, fromEvent, merge } from 'rxjs';\nimport { filter, observeOn, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport const isDisabledClass = 'is-disabled';\n\nexport type SegmentedButtonValue = string | (string | null)[] | null;\n\n/**\n * Container for grouped buttons.\n *\n * ```html\n * <fd-segmented-button [(ngModel)]=\"value\">\n * <button fd-button value=\"first\">Button</button>\n * <button fd-button value=\"second\">Button</button>\n * <button fd-button value=\"third\">Button</button>\n * </fd-segmented-button>\n * ```\n */\n@Component({\n selector: 'fd-segmented-button',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./segmented-button.component.scss'],\n host: {\n role: 'group'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SegmentedButtonComponent),\n multi: true\n }\n ],\n standalone: true\n})\nexport class SegmentedButtonComponent implements AfterViewInit, ControlValueAccessor, OnDestroy {\n /** Whether segmented button is on toggle mode, which allows to toggle more than 1 button */\n @Input()\n toggle = false;\n\n /** @hidden */\n @HostBinding('class.fd-segmented-button')\n _fdSegmentedButtonClass = true;\n\n /** @hidden */\n @ContentChildren(FD_BUTTON_COMPONENT)\n _buttons: QueryList<ButtonComponent>;\n\n /**\n * Value of segmented button can have 2 types:\n * - string, when there is no toggle mode and only 1 value can be chosen.\n * - array of strings, when there is toggle mode and more than 1 value can be chosen.\n */\n private _currentValue: SegmentedButtonValue;\n\n /** @hidden */\n private _isDisabled = false;\n\n /** An RxJS Subject that will kill the data stream upon queryList changes (for unsubscribing) */\n private readonly _onRefresh$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n constructor(\n private readonly _changeDetRef: ChangeDetectorRef,\n private readonly _elementRef: ElementRef,\n private readonly _destroyRef: DestroyRef\n ) {}\n\n /** @hidden */\n @HostListener('click', ['$event'])\n private _click(event: MouseEvent): void {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /** @hidden */\n onChange: (value: SegmentedButtonValue) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._listenToButtonChanges();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onRefresh$.complete();\n }\n\n /** @hidden */\n writeValue(values: string[] | string): void {\n this._currentValue = values;\n this._pickButtonsByValues(values);\n }\n\n /**\n * @hidden\n * @param fn User defined function that handles the *onChange* event of the SegmentedButtons.\n */\n registerOnChange(fn: (value: SegmentedButtonValue) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @hidden\n * @param fn User defined function that handles the *onTouch* event of the SegmentedButtons.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @hidden\n * @param isDisabled Sets the value of the *disabled* property of the SegmentedButtons.\n */\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled = isDisabled;\n this._toggleDisableButtons(isDisabled);\n this._changeDetRef.detectChanges();\n }\n\n /** @hidden */\n private _listenToButtonChanges(): void {\n this._buttons.changes\n .pipe(startWith(1), observeOn(asyncScheduler), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._onRefresh$.next();\n this._toggleDisableButtons(this._isDisabled);\n this._pickButtonsByValues(this._currentValue);\n this._buttons.forEach((button) => this._listenToTriggerEvents(button));\n });\n }\n\n /** @hidden */\n private _listenToTriggerEvents(buttonComponent: ButtonComponent): void {\n const htmlElement = buttonComponent.elementRef.nativeElement;\n\n const refresh$ = merge(destroyObservable(this._destroyRef), this._onRefresh$);\n\n const triggerEvents$ = merge(\n fromEvent(htmlElement, 'click'),\n fromEvent<KeyboardEvent>(htmlElement, 'keydown').pipe(\n filter((event) => KeyUtil.isKeyCode(event, [ENTER, SPACE])),\n tap((event) => {\n event.preventDefault();\n this.onTouched();\n })\n )\n );\n\n triggerEvents$.pipe(takeUntil(refresh$)).subscribe(() => this._handleTriggerOnButton(buttonComponent));\n }\n\n /** @hidden */\n private _handleTriggerOnButton(buttonComponent: ButtonComponent): void {\n if (!this._isButtonDisabled(buttonComponent)) {\n if (!this._isButtonSelected(buttonComponent) && !this.toggle) {\n this._buttons.forEach((button) => this._deselectButton(button));\n this._selectButton(buttonComponent);\n this._propagateChange();\n this._changeDetRef.markForCheck();\n }\n\n if (this.toggle) {\n this._toggleButton(buttonComponent);\n this._propagateChange();\n this._changeDetRef.markForCheck();\n }\n }\n }\n\n /** @hidden */\n private _propagateChange(): void {\n this.onChange(this._getValuesBySelected());\n this._currentValue = this._getValuesBySelected();\n }\n\n /** @hidden */\n private _toggleButton(buttonComponent: ButtonComponent): void {\n if (this._isButtonSelected(buttonComponent)) {\n this._deselectButton(buttonComponent);\n } else {\n this._selectButton(buttonComponent);\n }\n }\n\n /** @hidden */\n private _pickButtonsByValues(values: SegmentedButtonValue): void {\n if (!this._buttons) {\n return;\n }\n this._buttons.forEach((button) => this._deselectButton(button));\n this._getButtonsByValues(values).forEach((button) => this._selectButton(button));\n this._changeDetRef.detectChanges();\n }\n\n /** @hidden */\n private _getButtonsByValues(values: SegmentedButtonValue): ButtonComponent[] {\n if (!values) {\n return [];\n }\n\n if (Array.isArray(values)) {\n return this._buttons.filter((button) => !!values.find((value) => this._getButtonValue(button) === value));\n } else {\n return this._buttons.filter((button) => this._getButtonValue(button) === values);\n }\n }\n\n /** @hidden */\n private _selectButton(buttonComponent: ButtonComponent): void {\n buttonComponent.toggled = true;\n }\n\n /** @hidden */\n private _deselectButton(buttonComponent: ButtonComponent): void {\n buttonComponent.toggled = false;\n }\n\n /** @hidden */\n private _isButtonSelected(buttonComponent: ButtonComponent): boolean {\n return buttonComponent.toggled;\n }\n\n /** @hidden */\n private _isButtonDisabled(buttonComponent: ButtonComponent): boolean {\n return buttonComponent._disabled || buttonComponent.ariaDisabled;\n }\n\n /** @hidden */\n private _toggleDisableButtons(disable: boolean): void {\n if (!this._buttons) {\n return;\n }\n\n this._buttons.forEach((button) => (button.disabled = disable));\n if (disable) {\n this._buttons.forEach((button) => button.elementRef.nativeElement.setAttribute('disabled', 'true'));\n }\n this._changeDetRef.markForCheck();\n }\n\n /** @hidden */\n private _getButtonValue(buttonComponent: ButtonComponent): string | null {\n const element = buttonComponent.elementRef.nativeElement;\n if (element instanceof HTMLButtonElement) {\n return element.value;\n }\n return element.getAttribute('value');\n }\n\n /** @hidden\n * Returns values depending on selected state of buttons\n */\n private _getValuesBySelected(): SegmentedButtonValue {\n if (!this._buttons) {\n return [];\n }\n\n const resButtons = this._buttons\n .filter((button) => this._isButtonSelected(button))\n .map((button) => this._getButtonValue(button));\n if (!this.toggle) {\n return resButtons.length === 1 ? resButtons[0] : null;\n } else {\n return resButtons;\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SegmentedButtonComponent } from './segmented-button.component';\n\n/**\n * @deprecated\n * Use direct `SegmentedButtonComponent` import instead.\n */\n@NgModule({\n imports: [SegmentedButtonComponent],\n exports: [SegmentedButtonComponent]\n})\nexport class SegmentedButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAwBO,MAAM,eAAe,GAAG,cAAc;AAI7C;;;;;;;;;;AAUG;MAmBU,wBAAwB,CAAA;;AA2BjC,IAAA,WAAA,CACqB,aAAgC,EAChC,WAAuB,EACvB,WAAuB,EAAA;QAFvB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAmB;QAChC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QACvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;;QA3B5C,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;;QAIf,IAAuB,CAAA,uBAAA,GAAG,IAAI,CAAC;;QAcvB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;;AAGX,QAAA,IAAA,CAAA,WAAW,GAAkB,IAAI,OAAO,EAAQ,CAAC;;AAkBlE,QAAA,IAAA,CAAA,QAAQ,GAA0C,MAAK,GAAG,CAAC;;AAG3D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAW,GAAG,CAAC;KAdvB;;AAII,IAAA,MAAM,CAAC,KAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;YAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,SAAA;KACJ;;IASD,eAAe,GAAA;QACX,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;IAGD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC/B;;AAGD,IAAA,UAAU,CAAC,MAAyB,EAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;KACrC;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAAyC,EAAA;AACtD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACtB;AAED;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;KACtC;;IAGO,sBAAsB,GAAA;QAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO;AAChB,aAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACnF,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3E,SAAC,CAAC,CAAC;KACV;;AAGO,IAAA,sBAAsB,CAAC,eAAgC,EAAA;AAC3D,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC;AAE7D,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9E,MAAM,cAAc,GAAG,KAAK,CACxB,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,EAC/B,SAAS,CAAgB,WAAW,EAAE,SAAS,CAAC,CAAC,IAAI,CACjD,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAC3D,GAAG,CAAC,CAAC,KAAK,KAAI;YACV,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;SACpB,CAAC,CACL,CACJ,CAAC;QAEF,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC;KAC1G;;AAGO,IAAA,sBAAsB,CAAC,eAAgC,EAAA;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1D,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAChE,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AACrC,aAAA;YAED,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AACrC,aAAA;AACJ,SAAA;KACJ;;IAGO,gBAAgB,GAAA;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;KACpD;;AAGO,IAAA,aAAa,CAAC,eAAgC,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AACzC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AACvC,SAAA;KACJ;;AAGO,IAAA,oBAAoB,CAAC,MAA4B,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;KACtC;;AAGO,IAAA,mBAAmB,CAAC,MAA4B,EAAA;QACpD,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AAC7G,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC;AACpF,SAAA;KACJ;;AAGO,IAAA,aAAa,CAAC,eAAgC,EAAA;AAClD,QAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;KAClC;;AAGO,IAAA,eAAe,CAAC,eAAgC,EAAA;AACpD,QAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;KACnC;;AAGO,IAAA,iBAAiB,CAAC,eAAgC,EAAA;QACtD,OAAO,eAAe,CAAC,OAAO,CAAC;KAClC;;AAGO,IAAA,iBAAiB,CAAC,eAAgC,EAAA;AACtD,QAAA,OAAO,eAAe,CAAC,SAAS,IAAI,eAAe,CAAC,YAAY,CAAC;KACpE;;AAGO,IAAA,qBAAqB,CAAC,OAAgB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AACvG,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;KACrC;;AAGO,IAAA,eAAe,CAAC,eAAgC,EAAA;AACpD,QAAA,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC;QACzD,IAAI,OAAO,YAAY,iBAAiB,EAAE;YACtC,OAAO,OAAO,CAAC,KAAK,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KACxC;AAED;;AAEG;IACK,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ;AAC3B,aAAA,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAClD,aAAA,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACzD,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;KACJ;8GA3OQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EATtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;SACJ,EAagB,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,mBAAmB,6BA1B1B,CAA2B,yBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q1FAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAgB5B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;+BACI,qBAAqB,EAAA,QAAA,EACrB,2BAA2B,EAE/B,IAAA,EAAA;AACF,wBAAA,IAAI,EAAE,OAAO;AAChB,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,MAAA,EAAA,CAAA,q1FAAA,CAAA,EAAA,CAAA;0JAKhB,MAAM,EAAA,CAAA;sBADL,KAAK;gBAKN,uBAAuB,EAAA,CAAA;sBADtB,WAAW;uBAAC,2BAA2B,CAAA;gBAKxC,QAAQ,EAAA,CAAA;sBADP,eAAe;uBAAC,mBAAmB,CAAA;gBAyB5B,MAAM,EAAA,CAAA;sBADb,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ACvFrC;;;AAGG;MAKU,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAArB,qBAAqB,EAAA,OAAA,EAAA,CAHpB,wBAAwB,CAAA,EAAA,OAAA,EAAA,CACxB,wBAAwB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAEzB,qBAAqB,EAAA,CAAA,CAAA,EAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,wBAAwB,CAAC;oBACnC,OAAO,EAAE,CAAC,wBAAwB,CAAC;AACtC,iBAAA,CAAA;;;ACXD;;AAEG;;;;"}
|