@ruc-lib/drawer 2.0.0 → 3.1.0
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/README.md +188 -97
- package/fesm2022/ruc-lib-drawer.mjs +456 -0
- package/fesm2022/ruc-lib-drawer.mjs.map +1 -0
- package/index.d.ts +375 -3
- package/package.json +6 -18
- package/esm2020/index.mjs +0 -4
- package/esm2020/interface/drawer.mjs +0 -2
- package/esm2020/lib/ruclib-drawer/ruclib-drawer.component.mjs +0 -412
- package/esm2020/lib/ruclib-drawer.module.mjs +0 -41
- package/esm2020/model/default-values.mjs +0 -37
- package/esm2020/pipes/pipes/safe-html.pipe.mjs +0 -36
- package/esm2020/ruc-lib-drawer.mjs +0 -5
- package/fesm2015/ruc-lib-drawer.mjs +0 -531
- package/fesm2015/ruc-lib-drawer.mjs.map +0 -1
- package/fesm2020/ruc-lib-drawer.mjs +0 -525
- package/fesm2020/ruc-lib-drawer.mjs.map +0 -1
- package/interface/drawer.d.ts +0 -203
- package/lib/ruclib-drawer/ruclib-drawer.component.d.ts +0 -176
- package/lib/ruclib-drawer.module.d.ts +0 -13
- package/model/default-values.d.ts +0 -2
- package/pipes/pipes/safe-html.pipe.d.ts +0 -24
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ruc-lib-drawer.mjs","sources":["../../src/pipes/pipes/safe-html.pipe.ts","../../src/lib/ruclib-drawer/ruclib-drawer.component.ts","../../src/lib/ruclib-drawer/ruclib-drawer.component.html","../../src/lib/ruclib-drawer.module.ts","../../src/model/default-values.ts","../../src/ruc-lib-drawer.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n/**\r\n * @Pipe SafeHtmlPipe\r\n * @name safeHtml\r\n * @description A pipe that bypasses Angular's built-in security and sanitizes HTML content,\r\n * allowing it to be safely rendered in the DOM. Use with caution and only with trusted HTML sources.\r\n */\r\n@Pipe({ name: 'safeHtml' })\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n /**\r\n * @param sanitizer - An instance of DomSanitizer used to bypass security.\r\n */\r\n constructor(private sanitizer: DomSanitizer) { }\r\n /**\r\n * Transforms a string containing HTML into a SafeHtml object that can be bound to [innerHTML].\r\n * @param value - The HTML string to sanitize.\r\n * @returns A SafeHtml object, which Angular trusts as safe HTML.\r\n */\r\n transform(value: any) {\r\n if (value === null || value === undefined) {\r\n return value;\r\n }\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, Output, EventEmitter, AfterViewInit, ChangeDetectorRef, HostListener, ViewChild, ViewContainerRef, ComponentRef, OnDestroy } from '@angular/core';\r\nimport { trigger, state, style, transition, animate, AnimationEvent } from '@angular/animations';\r\nimport { MatDrawerMode } from '@angular/material/sidenav';\r\nimport { RuclibDrawerInput } from '../../interface/drawer';\r\n\r\n/**\r\n * @Component RuclibDrawerComponent\r\n * @description A highly configurable drawer component that can slide in from any of the four directions (left, right, top, bottom).\r\n * It uses custom Angular animations for smooth transitions and supports theming.\r\n */\r\n@Component({\r\n selector: 'uxp-ruclib-drawer',\r\n templateUrl: './ruclib-drawer.component.html',\r\n styleUrls: ['./ruclib-drawer.component.scss'],\r\n animations: [\r\n trigger('backdropFade', [\r\n state('out', style({ opacity: 0, visibility: 'hidden' })),\r\n state('in', style({ opacity: 0.6, visibility: 'visible' })),\r\n transition('out => in', animate('{{duration}} ease-in')),\r\n transition('in => out', animate('{{duration}} ease-out')),\r\n ]),\r\n trigger('slideInOutLeft', [\r\n state('out', style({ transform: 'translateX(-100%)', visibility: 'hidden' })),\r\n state('in', style({ transform: 'translateX(0)', visibility: 'visible' })),\r\n transition('out <=> in', animate('{{duration}} ease-in-out')),\r\n ]),\r\n trigger('slideInOutRight', [\r\n state('out', style({ transform: 'translateX(100%)', visibility: 'hidden' })),\r\n state('in', style({ transform: 'translateX(0)', visibility: 'visible' })),\r\n transition('out <=> in', animate('{{duration}} ease-in-out')),\r\n ]),\r\n trigger('slideInOutTop', [\r\n state('out', style({ transform: 'translateY(-100%)', visibility: 'hidden' })),\r\n state('in', style({ transform: 'translateY(0%)', visibility: 'visible' })),\r\n transition('out <=> in', animate('{{duration}} ease-in-out')),\r\n ]),\r\n trigger('slideInOutBottom', [\r\n state('out', style({ transform: 'translateY(100%)', visibility: 'hidden' })),\r\n state('in', style({ transform: 'translateY(0%)', visibility: 'visible' })),\r\n transition('out <=> in', animate('{{duration}} ease-in-out')),\r\n ])\r\n ]\r\n})\r\nexport class RuclibDrawerComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n /**\r\n * Input data for configuring the drawer's appearance and behavior.\r\n * @see RuclibDrawerInput interface for detailed properties.\r\n */\r\n @Input() rucInputData: RuclibDrawerInput = {};\r\n /**\r\n * Optional custom theme class to be applied to the drawer panel.\r\n * @example 'dark-theme', 'custom-theme-one'\r\n */\r\n @Input() customTheme: string | undefined;\r\n /**\r\n * EventEmitter for various drawer events.\r\n * Emits objects with `type` (e.g., 'openedStart', 'closedStart', 'openedChange', 'drawerToggle')\r\n * and `opened` (boolean) and `position` (string) properties.\r\n */\r\n @Output() rucEvent = new EventEmitter<any>();\r\n\r\n /** ViewContainerRef to host the dynamically loaded component. */\r\n @ViewChild('drawerComponentHost', { read: ViewContainerRef, static: true }) drawerComponentHost!: ViewContainerRef;\r\n\r\n /** Reference to the dynamically created component. */\r\n private dynamicComponentRef: ComponentRef<any> | null = null;\r\n\r\n /**\r\n * Current animation state of the drawer ('in' or 'out').\r\n * @public\r\n */\r\n public drawerAnimationState: 'in' | 'out' = 'out';\r\n /**\r\n * Current active position of the drawer.\r\n * @public\r\n * @default 'left'\r\n */\r\n public currentDrawerPosition: 'left' | 'right' | 'top' | 'bottom' = 'left'; // Default\r\n /**\r\n * Stores the next position if the drawer is currently open and a new position is requested.\r\n * Used to sequence close and open animations.\r\n * @private\r\n */\r\n private pendingDrawerPosition: 'left' | 'right' | 'top' | 'bottom' | null = null;\r\n /**\r\n * Flag to indicate if an animation is currently in progress to prevent rapid toggling.\r\n * @public\r\n */\r\n public isAnimating: boolean = false;\r\n /**\r\n * Effective animation duration for the drawer, derived from input or default.\r\n * @public\r\n * @default '300ms'\r\n */\r\n public effectiveAnimationDuration: string = '300ms';\r\n\r\n /**\r\n * Mode of the drawer, primarily for determining backdrop behavior with custom animations.\r\n * @public\r\n * @default 'side'\r\n */\r\n public matDrawerMode: MatDrawerMode = 'side';\r\n /**\r\n * Actual position ('start' or 'end') used by Angular Material's MatDrawer if it were directly used.\r\n * Retained for logical consistency in determining layout.\r\n * @public\r\n * @default 'start'\r\n */\r\n public matActualPosition: 'start' | 'end' = 'start';\r\n /**\r\n * Flag indicating if the drawer is in a vertical layout (top/bottom).\r\n * Helps determine if width or height should be 100%.\r\n * @public\r\n */\r\n public isVerticalLayout: boolean = false;\r\n /**\r\n * Effective dimension (width or height) of the drawer panel.\r\n * @public\r\n * @default '250px'\r\n */\r\n public effectiveDrawerDimension: string = '250px';\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n /**\r\n * Angular lifecycle hook that is called after data-bound properties of a directive are initialized.\r\n */\r\n ngOnInit(): void {\r\n this.applyInputs();\r\n this.drawerAnimationState = 'out';\r\n this.loadDynamicContent();\r\n }\r\n\r\n /**\r\n * Angular lifecycle hook that is called after Angular has fully initialized a component's view.\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.rucInputData.initialOpenedState && this.drawerAnimationState === 'out') {\r\n // Defer state update to the next microtask queue.\r\n // This helps avoid ExpressionChangedAfterItHasBeenCheckedError when initializing the drawer's open state.\r\n Promise.resolve().then(() => this.setDrawerOpenState(true));\r\n }\r\n }\r\n\r\n /**\r\n * Angular lifecycle hook that is called when any data-bound property of a directive changes.\r\n * @param changes - Object containing the changed properties.\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['rucInputData']) {\r\n const previousRucInputData = changes['rucInputData'].previousValue as RuclibDrawerInput || {};\r\n const currentRucInputData = changes['rucInputData'].currentValue as RuclibDrawerInput || {};\r\n\r\n const oldPosition = previousRucInputData.drawerPosition ?? this.currentDrawerPosition;\r\n const wasOpen = this.drawerAnimationState === 'in';\r\n\r\n this.currentDrawerPosition = currentRucInputData.drawerPosition ?? 'left';\r\n this.applyInputs();\r\n\r\n const newPosition = this.currentDrawerPosition;\r\n const shouldBeOpen = this.rucInputData.initialOpenedState ?? false;\r\n\r\n if (wasOpen && oldPosition !== newPosition) {\r\n this.pendingDrawerPosition = newPosition;\r\n this.setDrawerOpenState(false);\r\n } else if (wasOpen !== shouldBeOpen) {\r\n setTimeout(() => {\r\n this.setDrawerOpenState(shouldBeOpen);\r\n });\r\n } else {\r\n this.loadDynamicContent();\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Applies input data to component properties, calculating dimensions and positions.\r\n * @private\r\n */\r\n private applyInputs(): void {\r\n this.matDrawerMode = this.rucInputData.mode ?? 'side';\r\n this.effectiveAnimationDuration = this.rucInputData.animationDuration || '300ms';\r\n\r\n const getDimension = (inputDimension: string | undefined, defaultDimension: string): string => {\r\n return (inputDimension && inputDimension.trim() !== '') ? inputDimension : defaultDimension;\r\n };\r\n\r\n switch (this.currentDrawerPosition) {\r\n case 'right':\r\n this.matActualPosition = 'end';\r\n this.isVerticalLayout = false;\r\n this.effectiveDrawerDimension = getDimension(this.rucInputData.drawerWidth, '250px');\r\n break;\r\n case 'top':\r\n this.matActualPosition = 'start';\r\n this.isVerticalLayout = true;\r\n this.effectiveDrawerDimension = getDimension(this.rucInputData.drawerHeight, '200px');\r\n break;\r\n case 'bottom':\r\n this.matActualPosition = 'end';\r\n this.isVerticalLayout = true;\r\n this.effectiveDrawerDimension = getDimension(this.rucInputData.drawerHeight, '200px');\r\n break;\r\n case 'left':\r\n default:\r\n this.matActualPosition = 'start';\r\n this.isVerticalLayout = false;\r\n this.effectiveDrawerDimension = getDimension(this.rucInputData.drawerWidth, '250px');\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Toggles the drawer's open/close state or switches to a new position.\r\n * @param requestedPosition - The desired position to open the drawer from. If not provided, uses `currentDrawerPosition`.\r\n */\r\n toggleDrawer(requestedPosition?: 'left' | 'right' | 'top' | 'bottom'): void {\r\n if (this.isAnimating && !this.pendingDrawerPosition) {\r\n return;\r\n }\r\n \r\n const positionToToggle = requestedPosition || this.currentDrawerPosition;\r\n const isDrawerOpen = this.drawerAnimationState === 'in';\r\n const isSamePosition = this.currentDrawerPosition === positionToToggle;\r\n\r\n if (isDrawerOpen) {\r\n if (isSamePosition) {\r\n this.setDrawerOpenState(false);\r\n } else {\r\n this.pendingDrawerPosition = positionToToggle;\r\n this.setDrawerOpenState(false);\r\n }\r\n } else {\r\n if (!isSamePosition) {\r\n this.currentDrawerPosition = positionToToggle;\r\n this.applyInputs();\r\n }\r\n this.setDrawerOpenState(true);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the drawer's open state and triggers the animation.\r\n * @param open - Boolean indicating whether to open (true) or close (false) the drawer.\r\n * @private\r\n */\r\n private setDrawerOpenState(open: boolean): void {\r\n if (this.isAnimating && !this.pendingDrawerPosition && open === (this.drawerAnimationState === 'in')) {\r\n return;\r\n }\r\n this.isAnimating = true;\r\n this.drawerAnimationState = open ? 'in' : 'out';\r\n this.rucEvent.emit({\r\n type: open ? 'openedStart' : 'closedStart',\r\n opened: open,\r\n position: this.currentDrawerPosition\r\n });\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Callback for when a drawer animation finishes.\r\n * Manages state transitions, especially when switching between open drawers.\r\n * @param event - The Angular AnimationEvent.\r\n */\r\n onAnimationDone(event: AnimationEvent): void {\r\n if (event.element.classList.contains('dynamic-drawer')) {\r\n if (event.toState === 'out') {\r\n this.rucEvent.emit({ type: 'openedChange', opened: false, position: this.currentDrawerPosition });\r\n this.rucEvent.emit({ type: 'drawerToggle', opened: false, position: this.currentDrawerPosition });\r\n\r\n if (this.pendingDrawerPosition) {\r\n this.currentDrawerPosition = this.pendingDrawerPosition;\r\n this.pendingDrawerPosition = null;\r\n this.applyInputs();\r\n setTimeout(() => {\r\n this.setDrawerOpenState(true);\r\n });\r\n return;\r\n }\r\n } else if (event.toState === 'in') {\r\n this.rucEvent.emit({ type: 'openedChange', opened: true, position: this.currentDrawerPosition });\r\n this.rucEvent.emit({ type: 'drawerToggle', opened: true, position: this.currentDrawerPosition });\r\n }\r\n this.isAnimating = false;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Loads the dynamic component into the drawer if specified in rucInputData.\r\n * Clears existing dynamic component if any.\r\n * @private\r\n */\r\n private loadDynamicContent(): void {\r\n this.clearDynamicContent();\r\n\r\n const componentType = this.rucInputData.content?.drawerContentComponent;\r\n if (componentType && this.drawerComponentHost) {\r\n this.dynamicComponentRef = this.drawerComponentHost.createComponent(componentType);\r\n if (this.dynamicComponentRef.instance) {\r\n this.dynamicComponentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n if (this.rucInputData.drawerContentComponentData && this.dynamicComponentRef.instance) {\r\n Object.keys(this.rucInputData.drawerContentComponentData).forEach(key => {\r\n if (key in this.dynamicComponentRef!.instance) {\r\n this.dynamicComponentRef!.instance[key] = this.rucInputData.drawerContentComponentData[key];\r\n }\r\n });\r\n this.dynamicComponentRef.changeDetectorRef.detectChanges();\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Getter for the current animation parameters to be passed to the animation triggers in the template.\r\n * Includes the current animation state ('in' or 'out') and the effective duration.\r\n */\r\n get animationParams() {\r\n return { value: this.drawerAnimationState, params: { duration: this.effectiveAnimationDuration } };\r\n }\r\n\r\n /**\r\n * Getter for the backdrop animation parameters.\r\n * Typically uses a faster duration than the main drawer animation.\r\n */\r\n get backdropAnimationParams() {\r\n let durationMs = 0;\r\n if (this.effectiveAnimationDuration.endsWith('ms')) {\r\n durationMs = parseInt(this.effectiveAnimationDuration, 10);\r\n } else if (this.effectiveAnimationDuration.endsWith('s')) {\r\n durationMs = parseFloat(this.effectiveAnimationDuration) * 1000;\r\n } else {\r\n durationMs = parseInt(this.effectiveAnimationDuration, 10) || 300; // Fallback if format is unexpected\r\n }\r\n const backdropDurationValue = Math.floor(durationMs / 2); // Ensure integer for ms\r\n const backdropDuration = backdropDurationValue > 0 ? `${backdropDurationValue}ms` : '150ms'; // Fallback if calculated duration is 0 or less\r\n return { value: this.drawerAnimationState, params: { duration: backdropDuration } };\r\n }\r\n /**\r\n * Generates an accessible label for the toggle button based on the drawer's state and position.\r\n * @returns The ARIA label string for the toggle button.\r\n */\r\n getToggleButtonAriaLabel(): string {\r\n const defaultOpen = `Open ${this.currentDrawerPosition} Drawer`;\r\n const defaultClose = `Close ${this.currentDrawerPosition} Drawer`;\r\n const openText = this.rucInputData.toggleButtonText?.open || defaultOpen;\r\n const closeText = this.rucInputData.toggleButtonText?.close || defaultClose;\r\n return this.drawerAnimationState === 'in' ? closeText : openText;\r\n }\r\n\r\n /**\r\n * Handles clicks on the backdrop.\r\n * Closes the drawer only if `disableClose` is not true.\r\n * @public\r\n */\r\n public handleBackdropClick(): void {\r\n if (!(this.rucInputData.disableClose ?? false)) {\r\n this.toggleDrawer(this.currentDrawerPosition);\r\n }\r\n }\r\n\r\n /**\r\n * Listens for Escape key presses on the document.\r\n * Closes the drawer if it's open and `disableClose` is not true.\r\n * @param event - The KeyboardEvent.\r\n */\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onKeydownHandler(event: KeyboardEvent) {\r\n if (this.drawerAnimationState === 'in' && !(this.rucInputData.disableClose ?? false)) {\r\n this.toggleDrawer(this.currentDrawerPosition);\r\n }\r\n }\r\n\r\n /**\r\n * Clears any dynamically loaded component.\r\n * @private\r\n */\r\n private clearDynamicContent(): void {\r\n if (this.drawerComponentHost) {\r\n this.drawerComponentHost.clear();\r\n }\r\n if (this.dynamicComponentRef) {\r\n this.dynamicComponentRef.destroy();\r\n this.dynamicComponentRef = null;\r\n }\r\n }\r\n\r\n /**\r\n * Angular lifecycle hook that is called clear dynamic component content.\r\n */\r\n ngOnDestroy(): void {\r\n this.clearDynamicContent();\r\n }\r\n}","<!-- \r\n Custom Backdrop element.\r\n Visible only when:\r\n - rucInputData.mode is 'over'\r\n - rucInputData.hasBackdrop is true (or undefined, defaulting to true)\r\n - drawerAnimationState is 'in' (drawer is open or opening)\r\n Animates using 'backdropFade' trigger.\r\n Clicking the backdrop will toggle the drawer for the current position.\r\n Background color can be customized via rucInputData.backdropBackgroundColor.\r\n-->\r\n<div class=\"custom-backdrop\"\r\n *ngIf=\"rucInputData.mode === 'over' && (rucInputData.hasBackdrop ?? true) && drawerAnimationState === 'in'\"\r\n [@backdropFade]=\"backdropAnimationParams\"\r\n (click)=\"handleBackdropClick()\"\r\n [style.background-color]=\"rucInputData.hasBackdrop ? rucInputData.backdropBackgroundColor : ''\">\r\n</div>\r\n\r\n<!-- \r\n Custom Dynamic Drawer element.\r\n This is the main panel that slides in and out.\r\n - Applies CSS classes based on currentDrawerPosition and customTheme.\r\n - Dynamically sets width and height based on drawer orientation and input data.\r\n - Uses one of four animation triggers (slideInOutLeft, slideInOutRight, slideInOutTop, slideInOutBottom)\r\n based on currentDrawerPosition. Only the active trigger runs its animation; others are set to an\r\n instant 'out' state to prevent interference.\r\n - Animation completion events are handled by onAnimationDone().\r\n-->\r\n<div class=\"dynamic-drawer\"\r\n [ngClass]=\"'drawer-' + currentDrawerPosition + ' ' + (customTheme || '')\"\r\n [style.width]=\"!isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n [style.height]=\"isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n\r\n [@slideInOutLeft]=\"currentDrawerPosition === 'left' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutLeft.done)=\"currentDrawerPosition === 'left' && onAnimationDone($event)\"\r\n\r\n [@slideInOutRight]=\"currentDrawerPosition === 'right' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutRight.done)=\"currentDrawerPosition === 'right' && onAnimationDone($event)\"\r\n\r\n [@slideInOutTop]=\"currentDrawerPosition === 'top' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutTop.done)=\"currentDrawerPosition === 'top' && onAnimationDone($event)\"\r\n\r\n [@slideInOutBottom]=\"currentDrawerPosition === 'bottom' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutBottom.done)=\"currentDrawerPosition === 'bottom' && onAnimationDone($event)\">\r\n\r\n <!-- Wrapper for the content inside the drawer, handles padding and layout. -->\r\n <div class=\"drawer-content-wrapper\">\r\n <!-- Optional title for the drawer. -->\r\n <h2 *ngIf=\"rucInputData.content?.drawerTitle\" class=\"ruclib-drawer-title\">\r\n {{ rucInputData.content?.drawerTitle }}\r\n </h2>\r\n <!-- \r\n Optional close button inside the drawer.\r\n Toggles the drawer for the current position when clicked.\r\n ARIA label provides accessibility.\r\n Dimensions can be customized via rucInputData.closeButtonDimensions.\r\n -->\r\n <button *ngIf=\"rucInputData.showCloseIcon\"\r\n mat-icon-button class=\"ruclib-drawer-close-button\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"'Close ' + currentDrawerPosition + ' drawer'\"\r\n [style.width]=\"rucInputData.closeButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.closeButtonDimensions?.height\">\r\n <!-- Material icon for the close button. Size can be customized. -->\r\n <mat-icon [style.font-size]=\"rucInputData.closeButtonDimensions?.iconSize\">close</mat-icon>\r\n </button>\r\n <!-- Main body content of the drawer. -->\r\n <div class=\"ruclib-drawer-body\">\r\n <!-- Host for dynamically injected component -->\r\n <ng-template #drawerComponentHost></ng-template>\r\n <!-- Fallback to HTML content if no component is provided -->\r\n <div *ngIf=\"!rucInputData.content?.drawerContentComponent\" [innerHTML]=\"rucInputData.content?.drawerBody || '' | safeHtml\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Material Drawer Container.\r\n Acts as the main container for the drawer system, especially if 'side' or 'push' modes\r\n were to be implemented with MatDrawer's native behavior. With custom fixed-position animations,\r\n its primary role here is to host the mat-drawer-content.\r\n - Applies 'vertical-layout' class if the drawer is top/bottom.\r\n - MatDrawer's own backdrop is disabled as a custom one is used.\r\n-->\r\n<mat-drawer-container\r\n class=\"ruclib-drawer-container\"\r\n [class.vertical-layout]=\"isVerticalLayout\"\r\n [hasBackdrop]=\"false\"> <!-- MatDrawer's backdrop is not used with custom animation -->\r\n <mat-drawer-content class=\"ruclib-main-content\">\r\n <button [disabled]=\"rucInputData.disableToggleButtonInMainContent\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Toggle Drawer\"\r\n class=\"drawer-toggle-button\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\"\r\n [style.font-size]=\"rucInputData.toggleButtonDimensions?.fontSize\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"getToggleButtonAriaLabel()\"\r\n [attr.aria-expanded]=\"drawerAnimationState === 'in'\">\r\n <!-- Optional Material icon for the toggle button. Show only if no image URL is provided. -->\r\n <mat-icon *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl\" [style.font-size]=\"rucInputData.toggleButtonDimensions?.iconSize\">{{ rucInputData.toggleButtonIcon }}</mat-icon>\r\n <!-- Optional image for the toggle button. If present, it should fill the button. -->\r\n <img *ngIf=\"rucInputData.toggleButtonImageUrl\"\r\n [src]=\"rucInputData.toggleButtonImageUrl\"\r\n [alt]=\"rucInputData.toggleButtonImageAlt || 'Toggle Drawer'\"\r\n class=\"ruclib-drawer-toggle-image\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\">\r\n <!-- Text for the toggle button. Show only if NO icon AND NO image URL is provided. -->\r\n <span *ngIf=\"!rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n <!-- Text for the toggle button when an icon (but NO image) IS also present. -->\r\n <span *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\" class=\"toggle-button-text-with-icon\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n </button>\r\n <!-- Main application content area, rendered from HTML string via safeHtml pipe. -->\r\n <div [innerHTML]=\"rucInputData.content?.mainBody || '' | safeHtml\"></div>\r\n </mat-drawer-content>\r\n</mat-drawer-container>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RuclibDrawerComponent } from './ruclib-drawer/ruclib-drawer.component';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SafeHtmlPipe } from '../pipes/pipes/safe-html.pipe';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n ],\r\n declarations: [\r\n RuclibDrawerComponent,\r\n SafeHtmlPipe\r\n ],\r\n exports: [RuclibDrawerComponent],\r\n})\r\nexport class RuclibDrawerModule {}\r\n","import { RuclibDrawerInput } from \"../interface/drawer\";\r\n\r\nexport const defaultValues: RuclibDrawerInput = {\r\n drawerPosition: 'left',\r\n mode: 'over',\r\n initialOpenedState: false,\r\n drawerWidth: '300px',\r\n drawerHeight: '250px',\r\n content: {\r\n drawerTitle: 'Drawer Title',\r\n drawerBody: '<p>This is the <strong>body</strong> content of the drawer.</p><p>It can contain <em>HTML</em>.</p>',\r\n drawerContentComponent: undefined,\r\n mainBody: '<h2>Main Content Area</h2><p>This is where the main application content would go.</p>',\r\n },\r\n drawerContentComponentData: null,\r\n disableToggleButtonInMainContent: false,\r\n toggleButtonText: {\r\n open: 'Open Drawer',\r\n close: 'Close Drawer',\r\n },\r\n hasBackdrop: true,\r\n backdropBackgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n showCloseIcon: true,\r\n disableClose: false,\r\n animationDuration: '300ms',\r\n toggleButtonDimensions: {\r\n width: 'auto',\r\n height: '40px',\r\n padding: '0 16px',\r\n fontSize: '14px',\r\n iconSize: '20px',\r\n },\r\n closeButtonDimensions: {\r\n width: '40px',\r\n height: '40px',\r\n iconSize: '24px',\r\n },\r\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i5.SafeHtmlPipe"],"mappings":"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"}
|