@masterteam/components 0.0.164 → 0.0.166

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.
Files changed (55) hide show
  1. package/assets/common.css +1 -1
  2. package/assets/i18n/ar.json +128 -0
  3. package/assets/i18n/en.json +128 -0
  4. package/fesm2022/masterteam-components-business-fields.mjs +40 -20
  5. package/fesm2022/masterteam-components-business-fields.mjs.map +1 -1
  6. package/fesm2022/masterteam-components-client-page.mjs +6 -4
  7. package/fesm2022/masterteam-components-client-page.mjs.map +1 -1
  8. package/fesm2022/masterteam-components-drawer.mjs +4 -2
  9. package/fesm2022/masterteam-components-drawer.mjs.map +1 -1
  10. package/fesm2022/masterteam-components-dynamic-drawer.mjs +9 -4
  11. package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -1
  12. package/fesm2022/masterteam-components-entities.mjs +19 -8
  13. package/fesm2022/masterteam-components-entities.mjs.map +1 -1
  14. package/fesm2022/masterteam-components-formula.mjs +52 -14
  15. package/fesm2022/masterteam-components-formula.mjs.map +1 -1
  16. package/fesm2022/masterteam-components-icon-field.mjs +4 -3
  17. package/fesm2022/masterteam-components-icon-field.mjs.map +1 -1
  18. package/fesm2022/masterteam-components-module-summary-card.mjs +4 -2
  19. package/fesm2022/masterteam-components-module-summary-card.mjs.map +1 -1
  20. package/fesm2022/masterteam-components-pick-list-field.mjs +5 -3
  21. package/fesm2022/masterteam-components-pick-list-field.mjs.map +1 -1
  22. package/fesm2022/masterteam-components-runtime-action.mjs +21 -13
  23. package/fesm2022/masterteam-components-runtime-action.mjs.map +1 -1
  24. package/fesm2022/masterteam-components-sidebar.mjs +3 -2
  25. package/fesm2022/masterteam-components-sidebar.mjs.map +1 -1
  26. package/fesm2022/masterteam-components-table.mjs +51 -16
  27. package/fesm2022/masterteam-components-table.mjs.map +1 -1
  28. package/fesm2022/masterteam-components-tabs.mjs +4 -2
  29. package/fesm2022/masterteam-components-tabs.mjs.map +1 -1
  30. package/fesm2022/masterteam-components-text-field.mjs +5 -1
  31. package/fesm2022/masterteam-components-text-field.mjs.map +1 -1
  32. package/fesm2022/masterteam-components-topbar.mjs +3 -2
  33. package/fesm2022/masterteam-components-topbar.mjs.map +1 -1
  34. package/fesm2022/masterteam-components-tree.mjs +14 -2
  35. package/fesm2022/masterteam-components-tree.mjs.map +1 -1
  36. package/fesm2022/masterteam-components-upload-field.mjs +4 -3
  37. package/fesm2022/masterteam-components-upload-field.mjs.map +1 -1
  38. package/fesm2022/masterteam-components-user-search-field.mjs +5 -6
  39. package/fesm2022/masterteam-components-user-search-field.mjs.map +1 -1
  40. package/package.json +1 -1
  41. package/types/masterteam-components-business-fields.d.ts +2 -0
  42. package/types/masterteam-components-client-page.d.ts +2 -1
  43. package/types/masterteam-components-drawer.d.ts +1 -0
  44. package/types/masterteam-components-dynamic-drawer.d.ts +2 -0
  45. package/types/masterteam-components-entities.d.ts +3 -0
  46. package/types/masterteam-components-formula.d.ts +7 -3
  47. package/types/masterteam-components-module-summary-card.d.ts +1 -0
  48. package/types/masterteam-components-pick-list-field.d.ts +1 -0
  49. package/types/masterteam-components-runtime-action.d.ts +2 -0
  50. package/types/masterteam-components-table.d.ts +15 -3
  51. package/types/masterteam-components-tabs.d.ts +1 -0
  52. package/types/masterteam-components-text-field.d.ts +2 -1
  53. package/types/masterteam-components-tree.d.ts +1 -0
  54. package/types/masterteam-components-upload-field.d.ts +1 -0
  55. package/types/masterteam-components-user-search-field.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-client-page.mjs","sources":["../../../../packages/masterteam/components/client-page/client-page.ts","../../../../packages/masterteam/components/client-page/client-page.html","../../../../packages/masterteam/components/client-page/masterteam-components-client-page.ts"],"sourcesContent":["import {\r\n booleanAttribute,\r\n Component,\r\n contentChild,\r\n computed,\r\n ElementRef,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n model,\r\n NgZone,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n ClientPageMenu,\r\n ClientPageMenuItem,\r\n} from '@masterteam/components/client-page-menu';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\ninterface PersistedClientPageState {\r\n sidebarWidth?: number;\r\n}\r\n\r\nconst DEFAULT_SIDEBAR_WIDTH = 280;\r\nconst DEFAULT_MIN_SIDEBAR_WIDTH = 220;\r\nconst DEFAULT_MAX_SIDEBAR_WIDTH = 420;\r\n\r\n@Component({\r\n selector: 'mt-client-page',\r\n standalone: true,\r\n imports: [Avatar, Card, ClientPageMenu, Icon, NgTemplateOutlet, Tooltip],\r\n templateUrl: './client-page.html',\r\n host: {\r\n class: 'block h-full',\r\n },\r\n})\r\nexport class ClientPage implements OnDestroy {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly dir = inject(Directionality, { optional: true });\r\n private readonly zone = inject(NgZone);\r\n\r\n private mediaQueryList: MediaQueryList | null = null;\r\n private resizeMoveListener: ((event: MouseEvent) => void) | null = null;\r\n private resizeUpListener: ((event: MouseEvent) => void) | null = null;\r\n\r\n /** Whether the current direction is RTL */\r\n readonly isRtl = computed(() => this.dir?.value === 'rtl');\r\n\r\n /** Icon for the left sidebar header */\r\n readonly menuIcon = input<string>();\r\n\r\n /** Title for the left sidebar header */\r\n readonly menuTitle = input<string>();\r\n\r\n /** List of menu items for the left sidebar */\r\n readonly menuItems = input<ClientPageMenuItem[]>([]);\r\n\r\n /** Whether menu items are loading */\r\n readonly menuItemsLoading = input<boolean>(false);\r\n\r\n /** Key of the active menu item (defaults to first item) */\r\n readonly activeItem = input<string>();\r\n\r\n /** Whether the sidebar menu is collapsed (two-way bindable) */\r\n readonly collapsed = model<boolean>(false);\r\n\r\n /** Enables desktop sidebar resizing from the divider */\r\n readonly resizable = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n /** Unique storage seed used to persist the sidebar width */\r\n readonly storageKey = input<string | null>(null);\r\n\r\n /** Storage location used for persisted sidebar width */\r\n readonly storageMode = input<'local' | 'session'>('local');\r\n\r\n /** Minimum desktop sidebar width in pixels */\r\n readonly minSidebarWidth = input<number>(DEFAULT_MIN_SIDEBAR_WIDTH);\r\n\r\n /** Maximum desktop sidebar width in pixels */\r\n readonly maxSidebarWidth = input<number>(DEFAULT_MAX_SIDEBAR_WIDTH);\r\n\r\n /** Optional default desktop sidebar width in pixels */\r\n readonly defaultSidebarWidth = input<number | null>(null);\r\n\r\n /** Template projected into the left sidebar header end */\r\n readonly headerEnd = contentChild<TemplateRef<any>>('headerClientPageEnd');\r\n\r\n /** Emitted when a menu item is clicked */\r\n readonly menuItemClick = output<ClientPageMenuItem>();\r\n\r\n private readonly layoutRoot =\r\n viewChild<ElementRef<HTMLElement>>('layoutRoot');\r\n\r\n /** Tracks activeItem input, overridable by user clicks */\r\n private readonly selectedKey = linkedSignal(() => this.activeItem());\r\n\r\n /** Currently selected menu item */\r\n readonly selectedItem = computed(() => {\r\n const key = this.selectedKey();\r\n const items = this.menuItems();\r\n if (key) {\r\n return items.find((item) => item.key === key) ?? items[0] ?? null;\r\n }\r\n return items[0] ?? null;\r\n });\r\n\r\n /** Whether the initial default selection has been emitted */\r\n private initialEmitted = false;\r\n\r\n /** Whether the sidebar area is being hovered */\r\n readonly sidebarHovered = signal(false);\r\n\r\n /** Whether the resize divider area is being hovered */\r\n readonly dividerHovered = signal(false);\r\n\r\n /** Whether the desktop divider is currently resizing */\r\n readonly isResizing = signal(false);\r\n\r\n /** Whether the viewport is at or below the responsive breakpoint */\r\n readonly isResponsive = signal(false);\r\n\r\n /** Whether the responsive top navigation is expanded */\r\n readonly responsiveMenuExpanded = signal(false);\r\n\r\n /** Current desktop sidebar width in pixels */\r\n private readonly desktopSidebarWidth = signal(DEFAULT_SIDEBAR_WIDTH);\r\n\r\n /** Whether the menu section is currently visible */\r\n readonly showSidebarMenu = computed(() =>\r\n this.isResponsive() ? this.responsiveMenuExpanded() : !this.collapsed(),\r\n );\r\n\r\n /** Sidebar width reacts to collapsed + hover */\r\n readonly sidebarWidth = computed(() => {\r\n if (this.isResponsive()) {\r\n return '100%';\r\n }\r\n if (this.collapsed()) {\r\n return this.sidebarHovered() ? '12px' : '9px';\r\n }\r\n return `${this.desktopSidebarWidth()}px`;\r\n });\r\n\r\n /** Whether the current state allows divider dragging */\r\n readonly canResize = computed(\r\n () => this.resizable() && !this.isResponsive() && !this.collapsed(),\r\n );\r\n\r\n /** Icon for the collapse toggle button */\r\n readonly toggleIcon = computed(() => {\r\n if (this.isResponsive()) {\r\n return this.responsiveMenuExpanded()\r\n ? 'arrow.chevron-up'\r\n : 'arrow.chevron-down';\r\n }\r\n const rtl = this.isRtl();\r\n if (this.collapsed()) {\r\n return rtl ? 'arrow.chevron-left' : 'arrow.chevron-right';\r\n }\r\n return rtl ? 'arrow.chevron-right' : 'arrow.chevron-left';\r\n });\r\n\r\n /** Accessible label for the toggle button */\r\n readonly toggleAriaLabel = computed(() =>\r\n this.isResponsive()\r\n ? this.responsiveMenuExpanded()\r\n ? 'Collapse menu'\r\n : 'Expand menu'\r\n : this.collapsed()\r\n ? 'Expand sidebar'\r\n : 'Collapse sidebar',\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const item = this.selectedItem();\r\n if (item && !this.initialEmitted) {\r\n this.initialEmitted = true;\r\n this.menuItemClick.emit(item);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const minWidth = this.getNormalizedMinSidebarWidth();\r\n const maxWidth = this.getNormalizedMaxSidebarWidth(minWidth);\r\n const storage = this.getStorage();\r\n const storageKey = this.getNormalizedStorageKey();\r\n const persistedState =\r\n storage && storageKey\r\n ? this.readPersistedState(storage, storageKey)\r\n : null;\r\n\r\n this.desktopSidebarWidth.set(\r\n this.normalizeSidebarWidth(\r\n persistedState?.sidebarWidth,\r\n this.getDefaultDesktopSidebarWidth(minWidth, maxWidth),\r\n minWidth,\r\n maxWidth,\r\n ),\r\n );\r\n });\r\n\r\n this.setupResponsiveBehavior();\r\n }\r\n\r\n toggleCollapsed(): void {\r\n if (this.isResponsive()) {\r\n this.responsiveMenuExpanded.update((expanded) => !expanded);\r\n return;\r\n }\r\n this.collapsed.update((value) => !value);\r\n }\r\n\r\n selectItem(item: ClientPageMenuItem): void {\r\n this.selectedKey.set(item.key);\r\n if (this.isResponsive()) {\r\n this.responsiveMenuExpanded.set(false);\r\n }\r\n this.menuItemClick.emit(item);\r\n }\r\n\r\n startResize(event: MouseEvent): void {\r\n if (!this.canResize()) {\r\n return;\r\n }\r\n\r\n const layoutRoot = this.layoutRoot()?.nativeElement;\r\n if (!layoutRoot) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const layoutRect = layoutRoot.getBoundingClientRect();\r\n const minWidth = this.getNormalizedMinSidebarWidth();\r\n const maxWidth = this.getNormalizedMaxSidebarWidth(minWidth);\r\n\r\n this.isResizing.set(true);\r\n this.sidebarHovered.set(true);\r\n this.dividerHovered.set(true);\r\n this.desktopSidebarWidth.set(\r\n this.getWidthFromPointer(event.clientX, layoutRect, minWidth, maxWidth),\r\n );\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.resizeMoveListener = (moveEvent: MouseEvent) => {\r\n const nextWidth = this.getWidthFromPointer(\r\n moveEvent.clientX,\r\n layoutRect,\r\n minWidth,\r\n maxWidth,\r\n );\r\n\r\n if (nextWidth === this.desktopSidebarWidth()) {\r\n return;\r\n }\r\n\r\n this.zone.run(() => this.desktopSidebarWidth.set(nextWidth));\r\n };\r\n\r\n this.resizeUpListener = (_event: MouseEvent) => {\r\n this.zone.run(() => {\r\n this.isResizing.set(false);\r\n this.dividerHovered.set(false);\r\n this.persistSidebarWidth();\r\n });\r\n this.cleanupResizeListeners();\r\n };\r\n\r\n this.document.addEventListener('mousemove', this.resizeMoveListener);\r\n this.document.addEventListener('mouseup', this.resizeUpListener, {\r\n once: true,\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupResizeListeners();\r\n\r\n if (!this.mediaQueryList) {\r\n return;\r\n }\r\n\r\n if (typeof this.mediaQueryList.removeEventListener === 'function') {\r\n this.mediaQueryList.removeEventListener(\r\n 'change',\r\n this.handleResponsiveBreakpointChange,\r\n );\r\n return;\r\n }\r\n\r\n this.mediaQueryList.removeListener(this.handleResponsiveBreakpointChange);\r\n }\r\n\r\n getAvatarStyle(color: string): Record<string, string> {\r\n if (color.startsWith('#')) {\r\n return {\r\n '--p-avatar-background': color + '1a',\r\n '--p-avatar-color': color,\r\n };\r\n }\r\n return {\r\n '--p-avatar-background': `var(--p-${color}-100)`,\r\n '--p-avatar-color': `var(--p-${color}-700)`,\r\n };\r\n }\r\n\r\n private readonly handleResponsiveBreakpointChange = (\r\n event: MediaQueryListEvent,\r\n ): void => {\r\n this.syncResponsiveState(event.matches);\r\n };\r\n\r\n private setupResponsiveBehavior(): void {\r\n if (\r\n !isPlatformBrowser(this.platformId) ||\r\n typeof window.matchMedia !== 'function'\r\n ) {\r\n return;\r\n }\r\n\r\n this.mediaQueryList = window.matchMedia('(max-width: 1024px)');\r\n this.syncResponsiveState(this.mediaQueryList.matches);\r\n\r\n if (typeof this.mediaQueryList.addEventListener === 'function') {\r\n this.mediaQueryList.addEventListener(\r\n 'change',\r\n this.handleResponsiveBreakpointChange,\r\n );\r\n return;\r\n }\r\n\r\n this.mediaQueryList.addListener(this.handleResponsiveBreakpointChange);\r\n }\r\n\r\n private cleanupResizeListeners(): void {\r\n if (this.resizeMoveListener) {\r\n this.document.removeEventListener('mousemove', this.resizeMoveListener);\r\n this.resizeMoveListener = null;\r\n }\r\n\r\n if (this.resizeUpListener) {\r\n this.document.removeEventListener('mouseup', this.resizeUpListener);\r\n this.resizeUpListener = null;\r\n }\r\n }\r\n\r\n private syncResponsiveState(isResponsive: boolean): void {\r\n const wasResponsive = this.isResponsive();\r\n this.isResponsive.set(isResponsive);\r\n this.sidebarHovered.set(false);\r\n this.dividerHovered.set(false);\r\n\r\n if (wasResponsive !== isResponsive) {\r\n this.responsiveMenuExpanded.set(false);\r\n }\r\n }\r\n\r\n private getWidthFromPointer(\r\n clientX: number,\r\n layoutRect: DOMRect,\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n const rawWidth = this.isRtl()\r\n ? layoutRect.right - clientX\r\n : clientX - layoutRect.left;\r\n\r\n return this.normalizeSidebarWidth(rawWidth, minWidth, minWidth, maxWidth);\r\n }\r\n\r\n private persistSidebarWidth(): void {\r\n const storage = this.getStorage();\r\n const storageKey = this.getNormalizedStorageKey();\r\n\r\n if (!storage || !storageKey) {\r\n return;\r\n }\r\n\r\n this.writePersistedState(storage, storageKey, {\r\n sidebarWidth: this.desktopSidebarWidth(),\r\n });\r\n }\r\n\r\n private getNormalizedStorageKey(): string | null {\r\n const storageKey = this.storageKey()?.trim();\r\n return storageKey ? `mt-client-page:${storageKey}` : null;\r\n }\r\n\r\n private getStorage(): Storage | null {\r\n if (typeof window === 'undefined') {\r\n return null;\r\n }\r\n\r\n return this.storageMode() === 'session'\r\n ? window.sessionStorage\r\n : window.localStorage;\r\n }\r\n\r\n private getDefaultDesktopSidebarWidth(\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n const configuredWidth = this.defaultSidebarWidth();\r\n if (configuredWidth !== null && configuredWidth !== undefined) {\r\n return this.normalizeSidebarWidth(\r\n configuredWidth,\r\n DEFAULT_SIDEBAR_WIDTH,\r\n minWidth,\r\n maxWidth,\r\n );\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return this.normalizeSidebarWidth(\r\n Math.round(window.innerWidth * 0.16),\r\n DEFAULT_SIDEBAR_WIDTH,\r\n minWidth,\r\n maxWidth,\r\n );\r\n }\r\n\r\n return this.normalizeSidebarWidth(\r\n DEFAULT_SIDEBAR_WIDTH,\r\n DEFAULT_SIDEBAR_WIDTH,\r\n minWidth,\r\n maxWidth,\r\n );\r\n }\r\n\r\n private getNormalizedMinSidebarWidth(): number {\r\n const minWidth = Number(this.minSidebarWidth());\r\n return Number.isFinite(minWidth) && minWidth > 0\r\n ? Math.trunc(minWidth)\r\n : DEFAULT_MIN_SIDEBAR_WIDTH;\r\n }\r\n\r\n private getNormalizedMaxSidebarWidth(minWidth: number): number {\r\n const maxWidth = Number(this.maxSidebarWidth());\r\n if (!Number.isFinite(maxWidth) || maxWidth < minWidth) {\r\n return Math.max(DEFAULT_MAX_SIDEBAR_WIDTH, minWidth);\r\n }\r\n\r\n return Math.trunc(maxWidth);\r\n }\r\n\r\n private normalizeSidebarWidth(\r\n value: unknown,\r\n fallback: number,\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized)) {\r\n return this.clampSidebarWidth(fallback, minWidth, maxWidth);\r\n }\r\n\r\n return this.clampSidebarWidth(normalized, minWidth, maxWidth);\r\n }\r\n\r\n private clampSidebarWidth(\r\n value: number,\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n return Math.min(maxWidth, Math.max(minWidth, Math.round(value)));\r\n }\r\n\r\n private readPersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n ): PersistedClientPageState | null {\r\n try {\r\n const raw = storage.getItem(storageKey);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n const parsed = JSON.parse(raw) as PersistedClientPageState;\r\n return parsed && typeof parsed === 'object' ? parsed : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private writePersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n state: PersistedClientPageState,\r\n ): void {\r\n try {\r\n storage.setItem(storageKey, JSON.stringify(state));\r\n } catch {\r\n // Ignore storage write failures.\r\n }\r\n }\r\n}\r\n","<mt-card class=\"h-full w-full rounded-b-none rounded-e-none\">\r\n <ng-template #headless>\r\n <div\r\n #layoutRoot\r\n class=\"flex h-full min-h-0 [border-end-end-radius:0] [border-end-start-radius:0] [border-start-end-radius:0] [border-start-start-radius:0.5rem]\"\r\n [style.background-color]=\"'var(--mt-cp-sidebar-bg, #EBEBF0)'\"\r\n [class.flex-col]=\"isResponsive()\"\r\n >\r\n <!-- Left Sidebar -->\r\n <div\r\n class=\"flex min-h-0 flex-col overflow-hidden transition-all duration-300 ease-in-out [border-end-end-radius:0] [border-end-start-radius:0] [border-start-end-radius:0] [border-start-start-radius:0.5rem]\"\r\n [class.transition-none]=\"isResizing()\"\r\n [style.width]=\"sidebarWidth()\"\r\n (mouseenter)=\"sidebarHovered.set(true)\"\r\n (mouseleave)=\"sidebarHovered.set(false)\"\r\n >\r\n <!-- Sidebar Header -->\r\n <div\r\n class=\"flex shrink-0 items-center justify-between overflow-hidden border-b border-surface-300 px-5 py-[18px]\"\r\n [class.whitespace-nowrap]=\"!isResponsive()\"\r\n >\r\n <div class=\"flex min-w-0 items-center gap-[9px]\">\r\n @if (menuIcon()) {\r\n <div class=\"shrink-0 text-xl flex items-center\">\r\n <mt-icon [icon]=\"menuIcon()!\" />\r\n </div>\r\n }\r\n @if (menuTitle()) {\r\n <div\r\n class=\"min-w-0 truncate text-sm font-medium leading-5\"\r\n [style.color]=\"'var(--mt-cp-sidebar-text)'\"\r\n >\r\n {{ menuTitle() }}\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (isResponsive()) {\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleCollapsed()\"\r\n class=\"ml-3 flex h-9 w-9 shrink-0 items-center justify-center rounded-full border border-gray-300 bg-white text-gray-500 transition-all duration-200 ease-in-out hover:bg-gray-50 hover:text-primary-600 active:scale-95 active:bg-gray-100\"\r\n [attr.aria-label]=\"toggleAriaLabel()\"\r\n [mtTooltip]=\"toggleAriaLabel()\"\r\n tooltipPosition=\"bottom\"\r\n >\r\n <mt-icon [icon]=\"toggleIcon()\" class=\"text-sm\" />\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showSidebarMenu()) {\r\n <!-- Menu Items -->\r\n <div\r\n class=\"min-h-0 overflow-hidden\"\r\n [class.flex-1]=\"!isResponsive()\"\r\n [style.maxHeight]=\"isResponsive() ? '22rem' : null\"\r\n >\r\n <mt-client-page-menu\r\n class=\"h-full\"\r\n [menuItems]=\"menuItems()\"\r\n [selectedItem]=\"selectedItem()\"\r\n [loading]=\"menuItemsLoading()\"\r\n (menuItemClick)=\"selectItem($event)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Vertical Divider with Toggle Button -->\r\n @if (!isResponsive()) {\r\n <div\r\n class=\"relative flex w-0 shrink-0 items-stretch\"\r\n (mouseenter)=\"dividerHovered.set(true)\"\r\n (mouseleave)=\"dividerHovered.set(false)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute inset-y-0 left-1/2 w-[2px] -translate-x-1/2 rounded-full transition-[opacity,background-color,box-shadow] duration-200 ease-in-out\"\r\n [class.opacity-0]=\"!dividerHovered() && !isResizing()\"\r\n [class.opacity-100]=\"dividerHovered() || isResizing()\"\r\n [style.backgroundColor]=\"\r\n isResizing()\r\n ? 'var(--p-primary-500)'\r\n : dividerHovered()\r\n ? 'var(--p-primary-300)'\r\n : 'var(--p-surface-300)'\r\n \"\r\n [style.boxShadow]=\"\r\n isResizing() ? '0 0 0 2px var(--p-primary-100)' : 'none'\r\n \"\r\n ></div>\r\n\r\n @if (resizable()) {\r\n <div\r\n class=\"absolute inset-y-0 left-1/2 z-0 w-5 -translate-x-1/2\"\r\n [class.cursor-col-resize]=\"canResize()\"\r\n [class.cursor-default]=\"!canResize()\"\r\n (mousedown)=\"startResize($event)\"\r\n ></div>\r\n }\r\n\r\n <!-- Toggle Button at bottom of divider (visible on sidebar hover or when collapsed) -->\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleCollapsed()\"\r\n class=\"absolute bottom-6 left-1/2 z-10 grid h-7 w-7 -translate-x-1/2 cursor-pointer place-items-center rounded-full border border-gray-300 bg-white p-0 transition-all duration-200 ease-in-out hover:scale-125 hover:bg-gray-50 active:scale-95 active:bg-gray-100 group\"\r\n [class.opacity-0]=\"\r\n !sidebarHovered() &&\r\n !dividerHovered() &&\r\n !collapsed() &&\r\n !isResizing()\r\n \"\r\n [class.pointer-events-none]=\"\r\n !sidebarHovered() &&\r\n !dividerHovered() &&\r\n !collapsed() &&\r\n !isResizing()\r\n \"\r\n [class.opacity-100]=\"\r\n sidebarHovered() ||\r\n dividerHovered() ||\r\n collapsed() ||\r\n isResizing()\r\n \"\r\n [attr.aria-label]=\"toggleAriaLabel()\"\r\n [mtTooltip]=\"toggleAriaLabel()\"\r\n tooltipPosition=\"right\"\r\n >\r\n <mt-icon\r\n [icon]=\"toggleIcon()\"\r\n class=\"block text-gray-500 transition-all duration-200 group-hover:animate-pulse group-hover:text-primary-600\"\r\n [style.--mt-icon-prev-width]=\"'0.875rem'\"\r\n [style.--mt-icon-prev-height]=\"'0.875rem'\"\r\n />\r\n </button>\r\n </div>\r\n }\r\n\r\n <!-- Right Content Panel -->\r\n <div\r\n class=\"relative flex min-h-0 min-w-0 flex-1 flex-col\"\r\n [class.ltr:[box-shadow:inset_8px_0_10px_-8px_rgba(0,0,0,0.12)]]=\"\r\n !isResponsive() && !collapsed()\r\n \"\r\n [class.rtl:[box-shadow:inset_-8px_0_10px_-8px_rgba(0,0,0,0.12)]]=\"\r\n !isResponsive() && !collapsed()\r\n \"\r\n >\r\n <mt-card class=\"h-full min-h-0 rounded-b-none rounded-e-none shadow-lg\">\r\n <ng-template #headless>\r\n <!-- Content Header -->\r\n <div\r\n class=\"flex shrink-0 items-center rounded-s-lg justify-between border-b border-surface px-7 py-4 [box-shadow:0_2px_3px_-1px_rgba(0,0,0,0.07)]\"\r\n [class.flex-col]=\"isResponsive()\"\r\n [class.items-start]=\"isResponsive()\"\r\n [class.gap-3]=\"isResponsive()\"\r\n [style.background-color]=\"'var(--mt-cp-header-bg)'\"\r\n [style.color]=\"'var(--mt-cp-header-text)'\"\r\n >\r\n <div class=\"flex min-w-0 items-center gap-3\">\r\n @if (selectedItem(); as selected) {\r\n <mt-avatar\r\n [style]=\"getAvatarStyle(selected.color)\"\r\n [icon]=\"selected.icon\"\r\n shape=\"square\"\r\n size=\"large\"\r\n />\r\n <div class=\"min-w-0\">\r\n <div\r\n class=\"truncate text-sm font-medium leading-5\"\r\n [style.color]=\"'var(--mt-cp-header-text)'\"\r\n >\r\n {{ selected.title }}\r\n </div>\r\n @if (selected.subtitle) {\r\n <div\r\n class=\"truncate text-xs font-light text-gray-500\"\r\n [style.color]=\"'var(--mt-cp-header-text)'\"\r\n >\r\n {{ selected.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (headerEnd(); as template) {\r\n <div\r\n class=\"flex gap-2\"\r\n [class.w-full]=\"isResponsive()\"\r\n [class.flex-wrap]=\"isResponsive()\"\r\n [class.justify-end]=\"isResponsive()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Content Body -->\r\n <div\r\n class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto py-5 px-7\"\r\n [style.background-color]=\"'var(--mt-cp-content-bg)'\"\r\n >\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</mt-card>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-client-page.mjs","sources":["../../../../packages/masterteam/components/client-page/client-page.ts","../../../../packages/masterteam/components/client-page/client-page.html","../../../../packages/masterteam/components/client-page/masterteam-components-client-page.ts"],"sourcesContent":["import {\r\n booleanAttribute,\r\n Component,\r\n contentChild,\r\n computed,\r\n ElementRef,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n model,\r\n NgZone,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n ClientPageMenu,\r\n ClientPageMenuItem,\r\n} from '@masterteam/components/client-page-menu';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\ninterface PersistedClientPageState {\r\n sidebarWidth?: number;\r\n}\r\n\r\nconst DEFAULT_SIDEBAR_WIDTH = 280;\r\nconst DEFAULT_MIN_SIDEBAR_WIDTH = 220;\r\nconst DEFAULT_MAX_SIDEBAR_WIDTH = 420;\r\n\r\n@Component({\r\n selector: 'mt-client-page',\r\n standalone: true,\r\n imports: [Avatar, Card, ClientPageMenu, Icon, NgTemplateOutlet, Tooltip],\r\n templateUrl: './client-page.html',\r\n host: {\r\n class: 'block h-full',\r\n },\r\n})\r\nexport class ClientPage implements OnDestroy {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly dir = inject(Directionality, { optional: true });\r\n private readonly zone = inject(NgZone);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n private mediaQueryList: MediaQueryList | null = null;\r\n private resizeMoveListener: ((event: MouseEvent) => void) | null = null;\r\n private resizeUpListener: ((event: MouseEvent) => void) | null = null;\r\n\r\n /** Whether the current direction is RTL */\r\n readonly isRtl = computed(() => this.dir?.value === 'rtl');\r\n\r\n /** Icon for the left sidebar header */\r\n readonly menuIcon = input<string>();\r\n\r\n /** Title for the left sidebar header */\r\n readonly menuTitle = input<string>();\r\n\r\n /** List of menu items for the left sidebar */\r\n readonly menuItems = input<ClientPageMenuItem[]>([]);\r\n\r\n /** Whether menu items are loading */\r\n readonly menuItemsLoading = input<boolean>(false);\r\n\r\n /** Key of the active menu item (defaults to first item) */\r\n readonly activeItem = input<string>();\r\n\r\n /** Whether the sidebar menu is collapsed (two-way bindable) */\r\n readonly collapsed = model<boolean>(false);\r\n\r\n /** Enables desktop sidebar resizing from the divider */\r\n readonly resizable = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n /** Unique storage seed used to persist the sidebar width */\r\n readonly storageKey = input<string | null>(null);\r\n\r\n /** Storage location used for persisted sidebar width */\r\n readonly storageMode = input<'local' | 'session'>('local');\r\n\r\n /** Minimum desktop sidebar width in pixels */\r\n readonly minSidebarWidth = input<number>(DEFAULT_MIN_SIDEBAR_WIDTH);\r\n\r\n /** Maximum desktop sidebar width in pixels */\r\n readonly maxSidebarWidth = input<number>(DEFAULT_MAX_SIDEBAR_WIDTH);\r\n\r\n /** Optional default desktop sidebar width in pixels */\r\n readonly defaultSidebarWidth = input<number | null>(null);\r\n\r\n /** Template projected into the left sidebar header end */\r\n readonly headerEnd = contentChild<TemplateRef<any>>('headerClientPageEnd');\r\n\r\n /** Emitted when a menu item is clicked */\r\n readonly menuItemClick = output<ClientPageMenuItem>();\r\n\r\n private readonly layoutRoot =\r\n viewChild<ElementRef<HTMLElement>>('layoutRoot');\r\n\r\n /** Tracks activeItem input, overridable by user clicks */\r\n private readonly selectedKey = linkedSignal(() => this.activeItem());\r\n\r\n /** Currently selected menu item */\r\n readonly selectedItem = computed(() => {\r\n const key = this.selectedKey();\r\n const items = this.menuItems();\r\n if (key) {\r\n return items.find((item) => item.key === key) ?? items[0] ?? null;\r\n }\r\n return items[0] ?? null;\r\n });\r\n\r\n /** Whether the initial default selection has been emitted */\r\n private initialEmitted = false;\r\n\r\n /** Whether the sidebar area is being hovered */\r\n readonly sidebarHovered = signal(false);\r\n\r\n /** Whether the resize divider area is being hovered */\r\n readonly dividerHovered = signal(false);\r\n\r\n /** Whether the desktop divider is currently resizing */\r\n readonly isResizing = signal(false);\r\n\r\n /** Whether the viewport is at or below the responsive breakpoint */\r\n readonly isResponsive = signal(false);\r\n\r\n /** Whether the responsive top navigation is expanded */\r\n readonly responsiveMenuExpanded = signal(false);\r\n\r\n /** Current desktop sidebar width in pixels */\r\n private readonly desktopSidebarWidth = signal(DEFAULT_SIDEBAR_WIDTH);\r\n\r\n /** Whether the menu section is currently visible */\r\n readonly showSidebarMenu = computed(() =>\r\n this.isResponsive() ? this.responsiveMenuExpanded() : !this.collapsed(),\r\n );\r\n\r\n /** Sidebar width reacts to collapsed + hover */\r\n readonly sidebarWidth = computed(() => {\r\n if (this.isResponsive()) {\r\n return '100%';\r\n }\r\n if (this.collapsed()) {\r\n return this.sidebarHovered() ? '12px' : '9px';\r\n }\r\n return `${this.desktopSidebarWidth()}px`;\r\n });\r\n\r\n /** Whether the current state allows divider dragging */\r\n readonly canResize = computed(\r\n () => this.resizable() && !this.isResponsive() && !this.collapsed(),\r\n );\r\n\r\n /** Icon for the collapse toggle button */\r\n readonly toggleIcon = computed(() => {\r\n if (this.isResponsive()) {\r\n return this.responsiveMenuExpanded()\r\n ? 'arrow.chevron-up'\r\n : 'arrow.chevron-down';\r\n }\r\n const rtl = this.isRtl();\r\n if (this.collapsed()) {\r\n return rtl ? 'arrow.chevron-left' : 'arrow.chevron-right';\r\n }\r\n return rtl ? 'arrow.chevron-right' : 'arrow.chevron-left';\r\n });\r\n\r\n /** Accessible label for the toggle button */\r\n readonly toggleAriaLabel = computed(() =>\r\n this.isResponsive()\r\n ? this.responsiveMenuExpanded()\r\n ? this.transloco.translate('components.clientPage.collapseMenu')\r\n : this.transloco.translate('components.clientPage.expandMenu')\r\n : this.collapsed()\r\n ? this.transloco.translate('components.clientPage.expandSidebar')\r\n : this.transloco.translate('components.clientPage.collapseSidebar'),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const item = this.selectedItem();\r\n if (item && !this.initialEmitted) {\r\n this.initialEmitted = true;\r\n this.menuItemClick.emit(item);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const minWidth = this.getNormalizedMinSidebarWidth();\r\n const maxWidth = this.getNormalizedMaxSidebarWidth(minWidth);\r\n const storage = this.getStorage();\r\n const storageKey = this.getNormalizedStorageKey();\r\n const persistedState =\r\n storage && storageKey\r\n ? this.readPersistedState(storage, storageKey)\r\n : null;\r\n\r\n this.desktopSidebarWidth.set(\r\n this.normalizeSidebarWidth(\r\n persistedState?.sidebarWidth,\r\n this.getDefaultDesktopSidebarWidth(minWidth, maxWidth),\r\n minWidth,\r\n maxWidth,\r\n ),\r\n );\r\n });\r\n\r\n this.setupResponsiveBehavior();\r\n }\r\n\r\n toggleCollapsed(): void {\r\n if (this.isResponsive()) {\r\n this.responsiveMenuExpanded.update((expanded) => !expanded);\r\n return;\r\n }\r\n this.collapsed.update((value) => !value);\r\n }\r\n\r\n selectItem(item: ClientPageMenuItem): void {\r\n this.selectedKey.set(item.key);\r\n if (this.isResponsive()) {\r\n this.responsiveMenuExpanded.set(false);\r\n }\r\n this.menuItemClick.emit(item);\r\n }\r\n\r\n startResize(event: MouseEvent): void {\r\n if (!this.canResize()) {\r\n return;\r\n }\r\n\r\n const layoutRoot = this.layoutRoot()?.nativeElement;\r\n if (!layoutRoot) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const layoutRect = layoutRoot.getBoundingClientRect();\r\n const minWidth = this.getNormalizedMinSidebarWidth();\r\n const maxWidth = this.getNormalizedMaxSidebarWidth(minWidth);\r\n\r\n this.isResizing.set(true);\r\n this.sidebarHovered.set(true);\r\n this.dividerHovered.set(true);\r\n this.desktopSidebarWidth.set(\r\n this.getWidthFromPointer(event.clientX, layoutRect, minWidth, maxWidth),\r\n );\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.resizeMoveListener = (moveEvent: MouseEvent) => {\r\n const nextWidth = this.getWidthFromPointer(\r\n moveEvent.clientX,\r\n layoutRect,\r\n minWidth,\r\n maxWidth,\r\n );\r\n\r\n if (nextWidth === this.desktopSidebarWidth()) {\r\n return;\r\n }\r\n\r\n this.zone.run(() => this.desktopSidebarWidth.set(nextWidth));\r\n };\r\n\r\n this.resizeUpListener = (_event: MouseEvent) => {\r\n this.zone.run(() => {\r\n this.isResizing.set(false);\r\n this.dividerHovered.set(false);\r\n this.persistSidebarWidth();\r\n });\r\n this.cleanupResizeListeners();\r\n };\r\n\r\n this.document.addEventListener('mousemove', this.resizeMoveListener);\r\n this.document.addEventListener('mouseup', this.resizeUpListener, {\r\n once: true,\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupResizeListeners();\r\n\r\n if (!this.mediaQueryList) {\r\n return;\r\n }\r\n\r\n if (typeof this.mediaQueryList.removeEventListener === 'function') {\r\n this.mediaQueryList.removeEventListener(\r\n 'change',\r\n this.handleResponsiveBreakpointChange,\r\n );\r\n return;\r\n }\r\n\r\n this.mediaQueryList.removeListener(this.handleResponsiveBreakpointChange);\r\n }\r\n\r\n getAvatarStyle(color: string): Record<string, string> {\r\n if (color.startsWith('#')) {\r\n return {\r\n '--p-avatar-background': color + '1a',\r\n '--p-avatar-color': color,\r\n };\r\n }\r\n return {\r\n '--p-avatar-background': `var(--p-${color}-100)`,\r\n '--p-avatar-color': `var(--p-${color}-700)`,\r\n };\r\n }\r\n\r\n private readonly handleResponsiveBreakpointChange = (\r\n event: MediaQueryListEvent,\r\n ): void => {\r\n this.syncResponsiveState(event.matches);\r\n };\r\n\r\n private setupResponsiveBehavior(): void {\r\n if (\r\n !isPlatformBrowser(this.platformId) ||\r\n typeof window.matchMedia !== 'function'\r\n ) {\r\n return;\r\n }\r\n\r\n this.mediaQueryList = window.matchMedia('(max-width: 1024px)');\r\n this.syncResponsiveState(this.mediaQueryList.matches);\r\n\r\n if (typeof this.mediaQueryList.addEventListener === 'function') {\r\n this.mediaQueryList.addEventListener(\r\n 'change',\r\n this.handleResponsiveBreakpointChange,\r\n );\r\n return;\r\n }\r\n\r\n this.mediaQueryList.addListener(this.handleResponsiveBreakpointChange);\r\n }\r\n\r\n private cleanupResizeListeners(): void {\r\n if (this.resizeMoveListener) {\r\n this.document.removeEventListener('mousemove', this.resizeMoveListener);\r\n this.resizeMoveListener = null;\r\n }\r\n\r\n if (this.resizeUpListener) {\r\n this.document.removeEventListener('mouseup', this.resizeUpListener);\r\n this.resizeUpListener = null;\r\n }\r\n }\r\n\r\n private syncResponsiveState(isResponsive: boolean): void {\r\n const wasResponsive = this.isResponsive();\r\n this.isResponsive.set(isResponsive);\r\n this.sidebarHovered.set(false);\r\n this.dividerHovered.set(false);\r\n\r\n if (wasResponsive !== isResponsive) {\r\n this.responsiveMenuExpanded.set(false);\r\n }\r\n }\r\n\r\n private getWidthFromPointer(\r\n clientX: number,\r\n layoutRect: DOMRect,\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n const rawWidth = this.isRtl()\r\n ? layoutRect.right - clientX\r\n : clientX - layoutRect.left;\r\n\r\n return this.normalizeSidebarWidth(rawWidth, minWidth, minWidth, maxWidth);\r\n }\r\n\r\n private persistSidebarWidth(): void {\r\n const storage = this.getStorage();\r\n const storageKey = this.getNormalizedStorageKey();\r\n\r\n if (!storage || !storageKey) {\r\n return;\r\n }\r\n\r\n this.writePersistedState(storage, storageKey, {\r\n sidebarWidth: this.desktopSidebarWidth(),\r\n });\r\n }\r\n\r\n private getNormalizedStorageKey(): string | null {\r\n const storageKey = this.storageKey()?.trim();\r\n return storageKey ? `mt-client-page:${storageKey}` : null;\r\n }\r\n\r\n private getStorage(): Storage | null {\r\n if (typeof window === 'undefined') {\r\n return null;\r\n }\r\n\r\n return this.storageMode() === 'session'\r\n ? window.sessionStorage\r\n : window.localStorage;\r\n }\r\n\r\n private getDefaultDesktopSidebarWidth(\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n const configuredWidth = this.defaultSidebarWidth();\r\n if (configuredWidth !== null && configuredWidth !== undefined) {\r\n return this.normalizeSidebarWidth(\r\n configuredWidth,\r\n DEFAULT_SIDEBAR_WIDTH,\r\n minWidth,\r\n maxWidth,\r\n );\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return this.normalizeSidebarWidth(\r\n Math.round(window.innerWidth * 0.16),\r\n DEFAULT_SIDEBAR_WIDTH,\r\n minWidth,\r\n maxWidth,\r\n );\r\n }\r\n\r\n return this.normalizeSidebarWidth(\r\n DEFAULT_SIDEBAR_WIDTH,\r\n DEFAULT_SIDEBAR_WIDTH,\r\n minWidth,\r\n maxWidth,\r\n );\r\n }\r\n\r\n private getNormalizedMinSidebarWidth(): number {\r\n const minWidth = Number(this.minSidebarWidth());\r\n return Number.isFinite(minWidth) && minWidth > 0\r\n ? Math.trunc(minWidth)\r\n : DEFAULT_MIN_SIDEBAR_WIDTH;\r\n }\r\n\r\n private getNormalizedMaxSidebarWidth(minWidth: number): number {\r\n const maxWidth = Number(this.maxSidebarWidth());\r\n if (!Number.isFinite(maxWidth) || maxWidth < minWidth) {\r\n return Math.max(DEFAULT_MAX_SIDEBAR_WIDTH, minWidth);\r\n }\r\n\r\n return Math.trunc(maxWidth);\r\n }\r\n\r\n private normalizeSidebarWidth(\r\n value: unknown,\r\n fallback: number,\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized)) {\r\n return this.clampSidebarWidth(fallback, minWidth, maxWidth);\r\n }\r\n\r\n return this.clampSidebarWidth(normalized, minWidth, maxWidth);\r\n }\r\n\r\n private clampSidebarWidth(\r\n value: number,\r\n minWidth: number,\r\n maxWidth: number,\r\n ): number {\r\n return Math.min(maxWidth, Math.max(minWidth, Math.round(value)));\r\n }\r\n\r\n private readPersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n ): PersistedClientPageState | null {\r\n try {\r\n const raw = storage.getItem(storageKey);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n const parsed = JSON.parse(raw) as PersistedClientPageState;\r\n return parsed && typeof parsed === 'object' ? parsed : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private writePersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n state: PersistedClientPageState,\r\n ): void {\r\n try {\r\n storage.setItem(storageKey, JSON.stringify(state));\r\n } catch {\r\n // Ignore storage write failures.\r\n }\r\n }\r\n}\r\n","<mt-card class=\"h-full w-full rounded-b-none rounded-e-none\">\r\n <ng-template #headless>\r\n <div\r\n #layoutRoot\r\n class=\"flex h-full min-h-0 [border-end-end-radius:0] [border-end-start-radius:0] [border-start-end-radius:0] [border-start-start-radius:0.5rem]\"\r\n [style.background-color]=\"'var(--mt-cp-sidebar-bg, #EBEBF0)'\"\r\n [class.flex-col]=\"isResponsive()\"\r\n >\r\n <!-- Left Sidebar -->\r\n <div\r\n class=\"flex min-h-0 flex-col overflow-hidden transition-all duration-300 ease-in-out [border-end-end-radius:0] [border-end-start-radius:0] [border-start-end-radius:0] [border-start-start-radius:0.5rem]\"\r\n [class.transition-none]=\"isResizing()\"\r\n [style.width]=\"sidebarWidth()\"\r\n (mouseenter)=\"sidebarHovered.set(true)\"\r\n (mouseleave)=\"sidebarHovered.set(false)\"\r\n >\r\n <!-- Sidebar Header -->\r\n <div\r\n class=\"flex shrink-0 items-center justify-between overflow-hidden border-b border-surface-300 px-5 py-[18px]\"\r\n [class.whitespace-nowrap]=\"!isResponsive()\"\r\n >\r\n <div class=\"flex min-w-0 items-center gap-[9px]\">\r\n @if (menuIcon()) {\r\n <div class=\"shrink-0 text-xl flex items-center\">\r\n <mt-icon [icon]=\"menuIcon()!\" />\r\n </div>\r\n }\r\n @if (menuTitle()) {\r\n <div\r\n class=\"min-w-0 truncate text-sm font-medium leading-5\"\r\n [style.color]=\"'var(--mt-cp-sidebar-text)'\"\r\n >\r\n {{ menuTitle() }}\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (isResponsive()) {\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleCollapsed()\"\r\n class=\"ml-3 flex h-9 w-9 shrink-0 items-center justify-center rounded-full border border-gray-300 bg-white text-gray-500 transition-all duration-200 ease-in-out hover:bg-gray-50 hover:text-primary-600 active:scale-95 active:bg-gray-100\"\r\n [attr.aria-label]=\"toggleAriaLabel()\"\r\n [mtTooltip]=\"toggleAriaLabel()\"\r\n tooltipPosition=\"bottom\"\r\n >\r\n <mt-icon [icon]=\"toggleIcon()\" class=\"text-sm\" />\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showSidebarMenu()) {\r\n <!-- Menu Items -->\r\n <div\r\n class=\"min-h-0 overflow-hidden\"\r\n [class.flex-1]=\"!isResponsive()\"\r\n [style.maxHeight]=\"isResponsive() ? '22rem' : null\"\r\n >\r\n <mt-client-page-menu\r\n class=\"h-full\"\r\n [menuItems]=\"menuItems()\"\r\n [selectedItem]=\"selectedItem()\"\r\n [loading]=\"menuItemsLoading()\"\r\n (menuItemClick)=\"selectItem($event)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Vertical Divider with Toggle Button -->\r\n @if (!isResponsive()) {\r\n <div\r\n class=\"relative flex w-0 shrink-0 items-stretch\"\r\n (mouseenter)=\"dividerHovered.set(true)\"\r\n (mouseleave)=\"dividerHovered.set(false)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute inset-y-0 left-1/2 w-[2px] -translate-x-1/2 rounded-full transition-[opacity,background-color,box-shadow] duration-200 ease-in-out\"\r\n [class.opacity-0]=\"!dividerHovered() && !isResizing()\"\r\n [class.opacity-100]=\"dividerHovered() || isResizing()\"\r\n [style.backgroundColor]=\"\r\n isResizing()\r\n ? 'var(--p-primary-500)'\r\n : dividerHovered()\r\n ? 'var(--p-primary-300)'\r\n : 'var(--p-surface-300)'\r\n \"\r\n [style.boxShadow]=\"\r\n isResizing() ? '0 0 0 2px var(--p-primary-100)' : 'none'\r\n \"\r\n ></div>\r\n\r\n @if (resizable()) {\r\n <div\r\n class=\"absolute inset-y-0 left-1/2 z-0 w-5 -translate-x-1/2\"\r\n [class.cursor-col-resize]=\"canResize()\"\r\n [class.cursor-default]=\"!canResize()\"\r\n (mousedown)=\"startResize($event)\"\r\n ></div>\r\n }\r\n\r\n <!-- Toggle Button at bottom of divider (visible on sidebar hover or when collapsed) -->\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleCollapsed()\"\r\n class=\"absolute bottom-6 left-1/2 z-10 grid h-7 w-7 -translate-x-1/2 cursor-pointer place-items-center rounded-full border border-gray-300 bg-white p-0 transition-all duration-200 ease-in-out hover:scale-125 hover:bg-gray-50 active:scale-95 active:bg-gray-100 group\"\r\n [class.opacity-0]=\"\r\n !sidebarHovered() &&\r\n !dividerHovered() &&\r\n !collapsed() &&\r\n !isResizing()\r\n \"\r\n [class.pointer-events-none]=\"\r\n !sidebarHovered() &&\r\n !dividerHovered() &&\r\n !collapsed() &&\r\n !isResizing()\r\n \"\r\n [class.opacity-100]=\"\r\n sidebarHovered() ||\r\n dividerHovered() ||\r\n collapsed() ||\r\n isResizing()\r\n \"\r\n [attr.aria-label]=\"toggleAriaLabel()\"\r\n [mtTooltip]=\"toggleAriaLabel()\"\r\n tooltipPosition=\"right\"\r\n >\r\n <mt-icon\r\n [icon]=\"toggleIcon()\"\r\n class=\"block text-gray-500 transition-all duration-200 group-hover:animate-pulse group-hover:text-primary-600\"\r\n [style.--mt-icon-prev-width]=\"'0.875rem'\"\r\n [style.--mt-icon-prev-height]=\"'0.875rem'\"\r\n />\r\n </button>\r\n </div>\r\n }\r\n\r\n <!-- Right Content Panel -->\r\n <div\r\n class=\"relative flex min-h-0 min-w-0 flex-1 flex-col\"\r\n [class.ltr:[box-shadow:inset_8px_0_10px_-8px_rgba(0,0,0,0.12)]]=\"\r\n !isResponsive() && !collapsed()\r\n \"\r\n [class.rtl:[box-shadow:inset_-8px_0_10px_-8px_rgba(0,0,0,0.12)]]=\"\r\n !isResponsive() && !collapsed()\r\n \"\r\n >\r\n <mt-card class=\"h-full min-h-0 rounded-b-none rounded-e-none shadow-lg\">\r\n <ng-template #headless>\r\n <!-- Content Header -->\r\n <div\r\n class=\"flex shrink-0 items-center rounded-s-lg justify-between border-b border-surface px-7 py-4 [box-shadow:0_2px_3px_-1px_rgba(0,0,0,0.07)]\"\r\n [class.flex-col]=\"isResponsive()\"\r\n [class.items-start]=\"isResponsive()\"\r\n [class.gap-3]=\"isResponsive()\"\r\n [style.background-color]=\"'var(--mt-cp-header-bg)'\"\r\n [style.color]=\"'var(--mt-cp-header-text)'\"\r\n >\r\n <div class=\"flex min-w-0 items-center gap-3\">\r\n @if (selectedItem(); as selected) {\r\n <mt-avatar\r\n [style]=\"getAvatarStyle(selected.color)\"\r\n [icon]=\"selected.icon\"\r\n shape=\"square\"\r\n size=\"large\"\r\n />\r\n <div class=\"min-w-0\">\r\n <div\r\n class=\"truncate text-sm font-medium leading-5\"\r\n [style.color]=\"'var(--mt-cp-header-text)'\"\r\n >\r\n {{ selected.title }}\r\n </div>\r\n @if (selected.subtitle) {\r\n <div\r\n class=\"truncate text-xs font-light text-gray-500\"\r\n [style.color]=\"'var(--mt-cp-header-text)'\"\r\n >\r\n {{ selected.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (headerEnd(); as template) {\r\n <div\r\n class=\"flex gap-2\"\r\n [class.w-full]=\"isResponsive()\"\r\n [class.flex-wrap]=\"isResponsive()\"\r\n [class.justify-end]=\"isResponsive()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Content Body -->\r\n <div\r\n class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto py-5 px-7\"\r\n [style.background-color]=\"'var(--mt-cp-content-bg)'\"\r\n >\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</mt-card>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { Button } from '@masterteam/components/button';
2
2
  import * as i0 from '@angular/core';
3
3
  import { inject, ElementRef, Renderer2, model, output, input, computed, effect, RendererStyleFlags2, Component } from '@angular/core';
4
4
  import { DOCUMENT, CommonModule } from '@angular/common';
5
+ import { TranslocoService } from '@jsverse/transloco';
5
6
  import * as i1 from 'primeng/drawer';
6
7
  import { DrawerModule } from 'primeng/drawer';
7
8
  import { blockBodyScroll, unblockBodyScroll } from 'primeng/dom';
@@ -13,6 +14,7 @@ class Drawer {
13
14
  doc = inject(DOCUMENT);
14
15
  host = inject((ElementRef));
15
16
  renderer = inject(Renderer2);
17
+ transloco = inject(TranslocoService);
16
18
  drawerInstanceClass = `mt-custom-drawer-instance-${Drawer.nextInstanceId++}`;
17
19
  customMask = null;
18
20
  removeMaskClickListener = null;
@@ -36,8 +38,8 @@ class Drawer {
36
38
  appendTo = input('self', ...(ngDevMode ? [{ debugName: "appendTo" }] : /* istanbul ignore next */ []));
37
39
  modal = input(true, ...(ngDevMode ? [{ debugName: "modal" }] : /* istanbul ignore next */ []));
38
40
  showMaximizeToggle = input(true, ...(ngDevMode ? [{ debugName: "showMaximizeToggle" }] : /* istanbul ignore next */ []));
39
- maximizeTooltip = input('Expand to full width', ...(ngDevMode ? [{ debugName: "maximizeTooltip" }] : /* istanbul ignore next */ []));
40
- restoreTooltip = input('Restore size', ...(ngDevMode ? [{ debugName: "restoreTooltip" }] : /* istanbul ignore next */ []));
41
+ maximizeTooltip = input(this.transloco.translate('components.drawer.expandFullWidth'), ...(ngDevMode ? [{ debugName: "maximizeTooltip" }] : /* istanbul ignore next */ []));
42
+ restoreTooltip = input(this.transloco.translate('components.drawer.restoreSize'), ...(ngDevMode ? [{ debugName: "restoreTooltip" }] : /* istanbul ignore next */ []));
41
43
  maximized = model(false, ...(ngDevMode ? [{ debugName: "maximized" }] : /* istanbul ignore next */ []));
42
44
  canShowMaximizeToggle = computed(() => this.showMaximizeToggle() &&
43
45
  !this.fullScreen() &&
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-drawer.mjs","sources":["../../../../packages/masterteam/components/drawer/drawer.ts","../../../../packages/masterteam/components/drawer/drawer.html","../../../../packages/masterteam/components/drawer/masterteam-components-drawer.ts"],"sourcesContent":["import { Button } from '@masterteam/components/button';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n Renderer2,\r\n RendererStyleFlags2,\r\n model,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule, DOCUMENT } from '@angular/common';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport { blockBodyScroll, unblockBodyScroll } from 'primeng/dom';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\n\r\n@Component({\r\n selector: 'mt-drawer',\r\n standalone: true,\r\n imports: [CommonModule, DrawerModule, SkeletonModule, Button],\r\n templateUrl: './drawer.html',\r\n styleUrls: ['./drawer.scss'],\r\n})\r\nexport class Drawer implements OnDestroy {\r\n private static nextInstanceId = 0;\r\n private readonly doc = inject(DOCUMENT);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly drawerInstanceClass = `mt-custom-drawer-instance-${Drawer.nextInstanceId++}`;\r\n private customMask: HTMLElement | null = null;\r\n private removeMaskClickListener: (() => void) | null = null;\r\n private resizeAnimTimer: ReturnType<typeof setTimeout> | null = null;\r\n private readonly RESIZE_ANIM_CLASS = 'mt-drawer--anim-resize';\r\n private readonly RESIZE_ANIM_DURATION_MS = 700;\r\n visible = model<boolean>(false);\r\n visibleChange = output<boolean>();\r\n onShow = output<boolean>();\r\n onHide = output<boolean>();\r\n position = input<'left' | 'right' | 'top' | 'bottom'>('right');\r\n fullScreen = input<boolean>(false);\r\n closeOnEscape = input<boolean>(false);\r\n blockScroll = input<boolean>(true);\r\n dismissible = input<boolean>(true);\r\n title = input<string>('');\r\n subtitle = input<string>('');\r\n loadingHeader = input<boolean>(false);\r\n styleClass = input<string>('');\r\n transitionOptions = input<string>('200ms cubic-bezier(0, 0, 1, 1)');\r\n appendTo = input<string | HTMLElement>('self');\r\n modal = input<boolean>(true);\r\n showMaximizeToggle = input<boolean>(true);\r\n maximizeTooltip = input<string>('Expand to full width');\r\n restoreTooltip = input<string>('Restore size');\r\n maximized = model<boolean>(false);\r\n protected readonly canShowMaximizeToggle = computed(\r\n () =>\r\n this.showMaximizeToggle() &&\r\n !this.fullScreen() &&\r\n (this.position() === 'left' || this.position() === 'right'),\r\n );\r\n protected readonly resolvedAppendTo = computed(() => {\r\n this.visible();\r\n\r\n const appendTo = this.appendTo();\r\n\r\n if (!appendTo || appendTo === 'self' || appendTo === 'body') {\r\n return appendTo || 'self';\r\n }\r\n\r\n if (typeof appendTo !== 'string') {\r\n return appendTo;\r\n }\r\n\r\n const selector =\r\n appendTo.startsWith('#') || appendTo.startsWith('.')\r\n ? appendTo\r\n : `#${appendTo}`;\r\n\r\n return (this.doc.querySelector(selector) as HTMLElement | null) ?? 'self';\r\n });\r\n protected readonly resolvedStyleClass = computed(() =>\r\n [\r\n this.styleClass(),\r\n 'mt-custom-drawer',\r\n this.drawerInstanceClass,\r\n this.maximized() ? 'mt-drawer--maximized' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' '),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.visible() || !this.modal()) {\r\n this.destroyCustomMask();\r\n }\r\n });\r\n\r\n effect(() => {\r\n // React only when the user toggles maximize while the drawer is open.\r\n // Closing/opening is handled by onShowEvent / onHideEvent so we never\r\n // race with PrimeNG's slide animation.\r\n const isMaximized = this.maximized();\r\n if (!this.visible()) {\r\n return;\r\n }\r\n this.applyMaximizedInlineStyles(isMaximized, true);\r\n });\r\n }\r\n\r\n visibleChangeEvent(event: boolean) {\r\n this.visibleChange.emit(event);\r\n }\r\n\r\n onClose() {\r\n this.visible.set(false);\r\n this.visibleChange.emit(false);\r\n this.onHide.emit(true);\r\n }\r\n\r\n toggleMaximized() {\r\n this.maximized.set(!this.maximized());\r\n }\r\n onShowEvent() {\r\n this.syncCustomMask();\r\n // Drawer DOM only exists after PrimeNG renders it — apply current state\r\n // instantly so the open animation isn't fighting our resize transition.\r\n this.applyMaximizedInlineStyles(this.maximized(), false);\r\n this.onShow.emit(true);\r\n }\r\n onHideEvent() {\r\n this.destroyCustomMask();\r\n // Instant cleanup — the close animation is already done; we don't want\r\n // to start a 650ms width transition mid-hide.\r\n this.applyMaximizedInlineStyles(false, false);\r\n this.onHide.emit(true);\r\n }\r\n\r\n private applyMaximizedInlineStyles(\r\n isMaximized: boolean,\r\n animate: boolean,\r\n ): void {\r\n const drawerEl = this.getDrawerElement();\r\n if (!drawerEl) {\r\n return;\r\n }\r\n\r\n if (this.resizeAnimTimer) {\r\n clearTimeout(this.resizeAnimTimer);\r\n this.resizeAnimTimer = null;\r\n }\r\n\r\n if (animate) {\r\n this.renderer.addClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = setTimeout(() => {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = null;\r\n }, this.RESIZE_ANIM_DURATION_MS);\r\n } else {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n }\r\n\r\n if (isMaximized) {\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n } else {\r\n this.renderer.removeStyle(drawerEl, 'width');\r\n this.renderer.removeStyle(drawerEl, 'max-width');\r\n this.renderer.removeStyle(drawerEl, 'height');\r\n this.renderer.removeStyle(drawerEl, 'max-height');\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.resizeAnimTimer) {\r\n clearTimeout(this.resizeAnimTimer);\r\n this.resizeAnimTimer = null;\r\n }\r\n this.destroyCustomMask();\r\n }\r\n\r\n private syncCustomMask(): void {\r\n if (!this.modal()) {\r\n this.destroyCustomMask();\r\n return;\r\n }\r\n\r\n const parent = this.resolveMaskParent();\r\n if (!parent) {\r\n return;\r\n }\r\n\r\n if (!this.customMask) {\r\n const mask = this.renderer.createElement('div') as HTMLElement;\r\n this.renderer.addClass(mask, 'p-drawer-mask');\r\n this.renderer.addClass(mask, 'p-overlay-mask');\r\n this.renderer.addClass(mask, 'p-overlay-mask-enter-active');\r\n this.customMask = mask;\r\n this.renderer.appendChild(parent, mask);\r\n }\r\n\r\n this.updateCustomMaskAttributes();\r\n this.bindMaskClickListener();\r\n\r\n if (this.blockScroll()) {\r\n blockBodyScroll();\r\n }\r\n }\r\n\r\n private updateCustomMaskAttributes(): void {\r\n if (!this.customMask) {\r\n return;\r\n }\r\n\r\n this.renderer.setAttribute(this.customMask, 'style', this.getMaskStyle());\r\n this.renderer.setAttribute(this.customMask, 'data-p', this.getMaskDataP());\r\n }\r\n\r\n private resolveMaskParent(): HTMLElement | null {\r\n const appendTo = this.resolvedAppendTo();\r\n\r\n if (!appendTo || appendTo === 'self') {\r\n return this.host.nativeElement;\r\n }\r\n\r\n if (appendTo === 'body') {\r\n return this.doc.body;\r\n }\r\n\r\n return appendTo instanceof HTMLElement ? appendTo : this.host.nativeElement;\r\n }\r\n\r\n private getDrawerElement(): HTMLElement | null {\r\n return this.doc.querySelector(\r\n `.${this.drawerInstanceClass}.p-drawer`,\r\n ) as HTMLElement | null;\r\n }\r\n\r\n private getMaskStyle(): string {\r\n const drawerElement = this.getDrawerElement();\r\n const drawerZIndex = Number.parseInt(drawerElement?.style.zIndex ?? '', 10);\r\n const maskZIndex = Number.isFinite(drawerZIndex)\r\n ? Math.max(drawerZIndex - 1, 0)\r\n : 1901;\r\n\r\n return `z-index: ${maskZIndex};`;\r\n }\r\n\r\n private getMaskDataP(): string {\r\n const parts = [\r\n this.fullScreen() ? 'full-screen' : null,\r\n this.position(),\r\n 'open',\r\n 'modal',\r\n ].filter((part): part is string => !!part);\r\n\r\n return parts.join(' ');\r\n }\r\n\r\n private bindMaskClickListener(): void {\r\n if (!this.customMask) {\r\n return;\r\n }\r\n\r\n if (this.removeMaskClickListener) {\r\n this.removeMaskClickListener();\r\n this.removeMaskClickListener = null;\r\n }\r\n\r\n if (!this.dismissible()) {\r\n return;\r\n }\r\n\r\n this.removeMaskClickListener = this.renderer.listen(\r\n this.customMask,\r\n 'click',\r\n (event: Event) => {\r\n if (this.dismissible()) {\r\n event.preventDefault();\r\n this.onClose();\r\n }\r\n },\r\n );\r\n }\r\n\r\n private destroyCustomMask(): void {\r\n if (this.removeMaskClickListener) {\r\n this.removeMaskClickListener();\r\n this.removeMaskClickListener = null;\r\n }\r\n\r\n if (this.customMask) {\r\n const parent = this.customMask.parentNode;\r\n if (parent) {\r\n this.renderer.removeChild(parent, this.customMask);\r\n }\r\n this.customMask = null;\r\n }\r\n\r\n if (this.blockScroll()) {\r\n unblockBodyScroll();\r\n }\r\n }\r\n}\r\n","<p-drawer\r\n [(visible)]=\"visible\"\r\n [position]=\"position()\"\r\n [fullScreen]=\"fullScreen()\"\r\n [modal]=\"false\"\r\n [closable]=\"false\"\r\n [closeOnEscape]=\"closeOnEscape()\"\r\n [blockScroll]=\"blockScroll()\"\r\n [dismissible]=\"dismissible()\"\r\n [appendTo]=\"resolvedAppendTo()\"\r\n [transitionOptions]=\"transitionOptions()\"\r\n [styleClass]=\"resolvedStyleClass()\"\r\n (visibleChange)=\"visibleChangeEvent($event)\"\r\n (onShow)=\"onShowEvent()\"\r\n (onHide)=\"onHideEvent()\"\r\n>\r\n <ng-template #header>\r\n <div\r\n class=\"flex items-center justify-between px-5 w-full py-3 border-b border-surface\"\r\n >\r\n @if (loadingHeader()) {\r\n <div class=\"flex flex-1 flex-col gap-2\">\r\n <p-skeleton width=\"12rem\" height=\"1.75rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"8rem\" height=\"0.875rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n } @else {\r\n <div class=\"flex flex-1 flex-col\">\r\n <h3 class=\"text-xl font-semibold\" [innerHTML]=\"title()\"></h3>\r\n @if (subtitle()) {\r\n <p class=\"text-sm text-surface-500\" [innerHTML]=\"subtitle()\"></p>\r\n }\r\n </div>\r\n }\r\n <div class=\"flex items-center gap-2\">\r\n @if (canShowMaximizeToggle()) {\r\n <mt-button\r\n (onClick)=\"toggleMaximized()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n severity=\"secondary\"\r\n [icon]=\"maximized() ? 'layout.minimize-01' : 'layout.maximize-01'\"\r\n [tooltip]=\"maximized() ? restoreTooltip() : maximizeTooltip()\"\r\n >\r\n </mt-button>\r\n }\r\n <mt-button\r\n (onClick)=\"onClose()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n >\r\n </mt-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-content select=\"[content]\"></ng-content>\r\n\r\n <ng-template #footer>\r\n <div class=\"flex justify-end p-3 gap-2 border-t border-surface-200\">\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-drawer>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-drawer.mjs","sources":["../../../../packages/masterteam/components/drawer/drawer.ts","../../../../packages/masterteam/components/drawer/drawer.html","../../../../packages/masterteam/components/drawer/masterteam-components-drawer.ts"],"sourcesContent":["import { Button } from '@masterteam/components/button';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n Renderer2,\r\n RendererStyleFlags2,\r\n model,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule, DOCUMENT } from '@angular/common';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport { blockBodyScroll, unblockBodyScroll } from 'primeng/dom';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\n\r\n@Component({\r\n selector: 'mt-drawer',\r\n standalone: true,\r\n imports: [CommonModule, DrawerModule, SkeletonModule, Button],\r\n templateUrl: './drawer.html',\r\n styleUrls: ['./drawer.scss'],\r\n})\r\nexport class Drawer implements OnDestroy {\r\n private static nextInstanceId = 0;\r\n private readonly doc = inject(DOCUMENT);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly drawerInstanceClass = `mt-custom-drawer-instance-${Drawer.nextInstanceId++}`;\r\n private customMask: HTMLElement | null = null;\r\n private removeMaskClickListener: (() => void) | null = null;\r\n private resizeAnimTimer: ReturnType<typeof setTimeout> | null = null;\r\n private readonly RESIZE_ANIM_CLASS = 'mt-drawer--anim-resize';\r\n private readonly RESIZE_ANIM_DURATION_MS = 700;\r\n visible = model<boolean>(false);\r\n visibleChange = output<boolean>();\r\n onShow = output<boolean>();\r\n onHide = output<boolean>();\r\n position = input<'left' | 'right' | 'top' | 'bottom'>('right');\r\n fullScreen = input<boolean>(false);\r\n closeOnEscape = input<boolean>(false);\r\n blockScroll = input<boolean>(true);\r\n dismissible = input<boolean>(true);\r\n title = input<string>('');\r\n subtitle = input<string>('');\r\n loadingHeader = input<boolean>(false);\r\n styleClass = input<string>('');\r\n transitionOptions = input<string>('200ms cubic-bezier(0, 0, 1, 1)');\r\n appendTo = input<string | HTMLElement>('self');\r\n modal = input<boolean>(true);\r\n showMaximizeToggle = input<boolean>(true);\r\n maximizeTooltip = input<string>(\r\n this.transloco.translate('components.drawer.expandFullWidth'),\r\n );\r\n restoreTooltip = input<string>(\r\n this.transloco.translate('components.drawer.restoreSize'),\r\n );\r\n maximized = model<boolean>(false);\r\n protected readonly canShowMaximizeToggle = computed(\r\n () =>\r\n this.showMaximizeToggle() &&\r\n !this.fullScreen() &&\r\n (this.position() === 'left' || this.position() === 'right'),\r\n );\r\n protected readonly resolvedAppendTo = computed(() => {\r\n this.visible();\r\n\r\n const appendTo = this.appendTo();\r\n\r\n if (!appendTo || appendTo === 'self' || appendTo === 'body') {\r\n return appendTo || 'self';\r\n }\r\n\r\n if (typeof appendTo !== 'string') {\r\n return appendTo;\r\n }\r\n\r\n const selector =\r\n appendTo.startsWith('#') || appendTo.startsWith('.')\r\n ? appendTo\r\n : `#${appendTo}`;\r\n\r\n return (this.doc.querySelector(selector) as HTMLElement | null) ?? 'self';\r\n });\r\n protected readonly resolvedStyleClass = computed(() =>\r\n [\r\n this.styleClass(),\r\n 'mt-custom-drawer',\r\n this.drawerInstanceClass,\r\n this.maximized() ? 'mt-drawer--maximized' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' '),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.visible() || !this.modal()) {\r\n this.destroyCustomMask();\r\n }\r\n });\r\n\r\n effect(() => {\r\n // React only when the user toggles maximize while the drawer is open.\r\n // Closing/opening is handled by onShowEvent / onHideEvent so we never\r\n // race with PrimeNG's slide animation.\r\n const isMaximized = this.maximized();\r\n if (!this.visible()) {\r\n return;\r\n }\r\n this.applyMaximizedInlineStyles(isMaximized, true);\r\n });\r\n }\r\n\r\n visibleChangeEvent(event: boolean) {\r\n this.visibleChange.emit(event);\r\n }\r\n\r\n onClose() {\r\n this.visible.set(false);\r\n this.visibleChange.emit(false);\r\n this.onHide.emit(true);\r\n }\r\n\r\n toggleMaximized() {\r\n this.maximized.set(!this.maximized());\r\n }\r\n onShowEvent() {\r\n this.syncCustomMask();\r\n // Drawer DOM only exists after PrimeNG renders it — apply current state\r\n // instantly so the open animation isn't fighting our resize transition.\r\n this.applyMaximizedInlineStyles(this.maximized(), false);\r\n this.onShow.emit(true);\r\n }\r\n onHideEvent() {\r\n this.destroyCustomMask();\r\n // Instant cleanup — the close animation is already done; we don't want\r\n // to start a 650ms width transition mid-hide.\r\n this.applyMaximizedInlineStyles(false, false);\r\n this.onHide.emit(true);\r\n }\r\n\r\n private applyMaximizedInlineStyles(\r\n isMaximized: boolean,\r\n animate: boolean,\r\n ): void {\r\n const drawerEl = this.getDrawerElement();\r\n if (!drawerEl) {\r\n return;\r\n }\r\n\r\n if (this.resizeAnimTimer) {\r\n clearTimeout(this.resizeAnimTimer);\r\n this.resizeAnimTimer = null;\r\n }\r\n\r\n if (animate) {\r\n this.renderer.addClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = setTimeout(() => {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = null;\r\n }, this.RESIZE_ANIM_DURATION_MS);\r\n } else {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n }\r\n\r\n if (isMaximized) {\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n } else {\r\n this.renderer.removeStyle(drawerEl, 'width');\r\n this.renderer.removeStyle(drawerEl, 'max-width');\r\n this.renderer.removeStyle(drawerEl, 'height');\r\n this.renderer.removeStyle(drawerEl, 'max-height');\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.resizeAnimTimer) {\r\n clearTimeout(this.resizeAnimTimer);\r\n this.resizeAnimTimer = null;\r\n }\r\n this.destroyCustomMask();\r\n }\r\n\r\n private syncCustomMask(): void {\r\n if (!this.modal()) {\r\n this.destroyCustomMask();\r\n return;\r\n }\r\n\r\n const parent = this.resolveMaskParent();\r\n if (!parent) {\r\n return;\r\n }\r\n\r\n if (!this.customMask) {\r\n const mask = this.renderer.createElement('div') as HTMLElement;\r\n this.renderer.addClass(mask, 'p-drawer-mask');\r\n this.renderer.addClass(mask, 'p-overlay-mask');\r\n this.renderer.addClass(mask, 'p-overlay-mask-enter-active');\r\n this.customMask = mask;\r\n this.renderer.appendChild(parent, mask);\r\n }\r\n\r\n this.updateCustomMaskAttributes();\r\n this.bindMaskClickListener();\r\n\r\n if (this.blockScroll()) {\r\n blockBodyScroll();\r\n }\r\n }\r\n\r\n private updateCustomMaskAttributes(): void {\r\n if (!this.customMask) {\r\n return;\r\n }\r\n\r\n this.renderer.setAttribute(this.customMask, 'style', this.getMaskStyle());\r\n this.renderer.setAttribute(this.customMask, 'data-p', this.getMaskDataP());\r\n }\r\n\r\n private resolveMaskParent(): HTMLElement | null {\r\n const appendTo = this.resolvedAppendTo();\r\n\r\n if (!appendTo || appendTo === 'self') {\r\n return this.host.nativeElement;\r\n }\r\n\r\n if (appendTo === 'body') {\r\n return this.doc.body;\r\n }\r\n\r\n return appendTo instanceof HTMLElement ? appendTo : this.host.nativeElement;\r\n }\r\n\r\n private getDrawerElement(): HTMLElement | null {\r\n return this.doc.querySelector(\r\n `.${this.drawerInstanceClass}.p-drawer`,\r\n ) as HTMLElement | null;\r\n }\r\n\r\n private getMaskStyle(): string {\r\n const drawerElement = this.getDrawerElement();\r\n const drawerZIndex = Number.parseInt(drawerElement?.style.zIndex ?? '', 10);\r\n const maskZIndex = Number.isFinite(drawerZIndex)\r\n ? Math.max(drawerZIndex - 1, 0)\r\n : 1901;\r\n\r\n return `z-index: ${maskZIndex};`;\r\n }\r\n\r\n private getMaskDataP(): string {\r\n const parts = [\r\n this.fullScreen() ? 'full-screen' : null,\r\n this.position(),\r\n 'open',\r\n 'modal',\r\n ].filter((part): part is string => !!part);\r\n\r\n return parts.join(' ');\r\n }\r\n\r\n private bindMaskClickListener(): void {\r\n if (!this.customMask) {\r\n return;\r\n }\r\n\r\n if (this.removeMaskClickListener) {\r\n this.removeMaskClickListener();\r\n this.removeMaskClickListener = null;\r\n }\r\n\r\n if (!this.dismissible()) {\r\n return;\r\n }\r\n\r\n this.removeMaskClickListener = this.renderer.listen(\r\n this.customMask,\r\n 'click',\r\n (event: Event) => {\r\n if (this.dismissible()) {\r\n event.preventDefault();\r\n this.onClose();\r\n }\r\n },\r\n );\r\n }\r\n\r\n private destroyCustomMask(): void {\r\n if (this.removeMaskClickListener) {\r\n this.removeMaskClickListener();\r\n this.removeMaskClickListener = null;\r\n }\r\n\r\n if (this.customMask) {\r\n const parent = this.customMask.parentNode;\r\n if (parent) {\r\n this.renderer.removeChild(parent, this.customMask);\r\n }\r\n this.customMask = null;\r\n }\r\n\r\n if (this.blockScroll()) {\r\n unblockBodyScroll();\r\n }\r\n }\r\n}\r\n","<p-drawer\r\n [(visible)]=\"visible\"\r\n [position]=\"position()\"\r\n [fullScreen]=\"fullScreen()\"\r\n [modal]=\"false\"\r\n [closable]=\"false\"\r\n [closeOnEscape]=\"closeOnEscape()\"\r\n [blockScroll]=\"blockScroll()\"\r\n [dismissible]=\"dismissible()\"\r\n [appendTo]=\"resolvedAppendTo()\"\r\n [transitionOptions]=\"transitionOptions()\"\r\n [styleClass]=\"resolvedStyleClass()\"\r\n (visibleChange)=\"visibleChangeEvent($event)\"\r\n (onShow)=\"onShowEvent()\"\r\n (onHide)=\"onHideEvent()\"\r\n>\r\n <ng-template #header>\r\n <div\r\n class=\"flex items-center justify-between px-5 w-full py-3 border-b border-surface\"\r\n >\r\n @if (loadingHeader()) {\r\n <div class=\"flex flex-1 flex-col gap-2\">\r\n <p-skeleton width=\"12rem\" height=\"1.75rem\" borderRadius=\"0.5rem\" />\r\n <p-skeleton width=\"8rem\" height=\"0.875rem\" borderRadius=\"0.5rem\" />\r\n </div>\r\n } @else {\r\n <div class=\"flex flex-1 flex-col\">\r\n <h3 class=\"text-xl font-semibold\" [innerHTML]=\"title()\"></h3>\r\n @if (subtitle()) {\r\n <p class=\"text-sm text-surface-500\" [innerHTML]=\"subtitle()\"></p>\r\n }\r\n </div>\r\n }\r\n <div class=\"flex items-center gap-2\">\r\n @if (canShowMaximizeToggle()) {\r\n <mt-button\r\n (onClick)=\"toggleMaximized()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n severity=\"secondary\"\r\n [icon]=\"maximized() ? 'layout.minimize-01' : 'layout.maximize-01'\"\r\n [tooltip]=\"maximized() ? restoreTooltip() : maximizeTooltip()\"\r\n >\r\n </mt-button>\r\n }\r\n <mt-button\r\n (onClick)=\"onClose()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n >\r\n </mt-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-content select=\"[content]\"></ng-content>\r\n\r\n <ng-template #footer>\r\n <div class=\"flex justify-end p-3 gap-2 border-t border-surface-200\">\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-drawer>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, signal, Injectable, model, inject, ElementRef, Renderer2, effect, computed, Injector, RendererStyleFlags2, Input, Component, ApplicationRef, EnvironmentInjector, DestroyRef, createComponent } from '@angular/core';
3
3
  import { NgComponentOutlet, DOCUMENT } from '@angular/common';
4
+ import { TranslocoService } from '@jsverse/transloco';
4
5
  import { DynamicDialogRef } from 'primeng/dynamicdialog';
5
6
  import * as i1 from 'primeng/drawer';
6
7
  import { DrawerModule } from 'primeng/drawer';
@@ -92,6 +93,7 @@ class DynamicDrawerHost {
92
93
  drawerController = new DrawerController();
93
94
  host = inject((ElementRef));
94
95
  renderer = inject(Renderer2);
96
+ transloco = inject(TranslocoService);
95
97
  resizeAnimTimer = null;
96
98
  RESIZE_ANIM_CLASS = 'mt-drawer--anim-resize';
97
99
  RESIZE_ANIM_DURATION_MS = 700;
@@ -134,8 +136,10 @@ class DynamicDrawerHost {
134
136
  maximizeButtonTooltip = computed(() => {
135
137
  const config = this.cfg();
136
138
  return this.drawerController.maximized()
137
- ? (config?.restoreTooltip ?? 'Restore size')
138
- : (config?.maximizeTooltip ?? 'Expand to full width');
139
+ ? (config?.restoreTooltip ??
140
+ this.transloco.translate('components.drawer.restoreSize'))
141
+ : (config?.maximizeTooltip ??
142
+ this.transloco.translate('components.drawer.expandFullWidth'));
139
143
  }, ...(ngDevMode ? [{ debugName: "maximizeButtonTooltip" }] : /* istanbul ignore next */ []));
140
144
  /** Icon for maximize/restore button (state-aware) */
141
145
  maximizeButtonIcon = computed(() => this.drawerController.maximized()
@@ -367,6 +371,7 @@ class DrawerService {
367
371
  destroyRef = inject(DestroyRef);
368
372
  doc = inject(DOCUMENT);
369
373
  hostRef;
374
+ transloco = inject(TranslocoService);
370
375
  defauiltConfig = {
371
376
  position: 'right',
372
377
  modal: true,
@@ -374,8 +379,8 @@ class DrawerService {
374
379
  transitionOptions: '200ms cubic-bezier(0, 0, 1, 1)',
375
380
  inputValues: {},
376
381
  showMaximizeToggle: true,
377
- maximizeTooltip: 'Expand to full width',
378
- restoreTooltip: 'Restore size',
382
+ maximizeTooltip: this.transloco.translate('components.drawer.expandFullWidth'),
383
+ restoreTooltip: this.transloco.translate('components.drawer.restoreSize'),
379
384
  };
380
385
  constructor() {
381
386
  this.preloadDrawerHost();
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-dynamic-drawer.mjs","sources":["../../../../packages/masterteam/components/dynamic-drawer/dynamic-drawer-host.ts","../../../../packages/masterteam/components/dynamic-drawer/dynamic-drawer.ts","../../../../packages/masterteam/components/dynamic-drawer/masterteam-components-dynamic-drawer.ts"],"sourcesContent":["import { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport {\r\n Component,\r\n ElementRef,\r\n Injector,\r\n Input,\r\n Renderer2,\r\n RendererStyleFlags2,\r\n effect,\r\n inject,\r\n signal,\r\n InjectionToken,\r\n model,\r\n computed,\r\n Injectable,\r\n} from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\n\r\nexport const DynamicDrawerConfig = new InjectionToken<any>(\r\n 'DynamicDrawerConfig',\r\n);\r\n\r\n/**\r\n * Controller to dynamically update drawer properties from inside the child component.\r\n * Inject this in your drawer content component to modify drawer behavior.\r\n */\r\n@Injectable()\r\nexport class DrawerController {\r\n private _styleClass = signal<string>('');\r\n private _header = signal<string>('');\r\n private _fullScreen = signal<boolean | undefined>(undefined);\r\n private _maximized = signal<boolean>(false);\r\n\r\n /** Get the current additional styleClass */\r\n get styleClass() {\r\n return this._styleClass;\r\n }\r\n\r\n /** Get the current header */\r\n get header() {\r\n return this._header;\r\n }\r\n\r\n /** Get the current fullScreen state */\r\n get fullScreen() {\r\n return this._fullScreen;\r\n }\r\n\r\n /** Get the current maximized (full-width) state */\r\n get maximized() {\r\n return this._maximized;\r\n }\r\n\r\n /** Add or replace the dynamic styleClass */\r\n setStyleClass(styleClass: string) {\r\n this._styleClass.set(styleClass);\r\n }\r\n\r\n /** Append a class to the existing styleClass */\r\n addClass(className: string) {\r\n const current = this._styleClass();\r\n if (!current.includes(className)) {\r\n this._styleClass.set((current + ' ' + className).trim());\r\n }\r\n }\r\n\r\n /** Remove a class from the styleClass */\r\n removeClass(className: string) {\r\n const current = this._styleClass();\r\n this._styleClass.set(\r\n current\r\n .split(' ')\r\n .filter((c) => c !== className)\r\n .join(' '),\r\n );\r\n }\r\n\r\n /** Toggle a class on/off */\r\n toggleClass(className: string) {\r\n if (this._styleClass().includes(className)) {\r\n this.removeClass(className);\r\n } else {\r\n this.addClass(className);\r\n }\r\n }\r\n\r\n /** Update the drawer header */\r\n setHeader(header: string) {\r\n this._header.set(header);\r\n }\r\n\r\n /** Toggle fullScreen mode */\r\n setFullScreen(fullScreen: boolean) {\r\n this._fullScreen.set(fullScreen);\r\n }\r\n\r\n /** Set maximized (full-width) state */\r\n setMaximized(maximized: boolean) {\r\n this._maximized.set(maximized);\r\n }\r\n\r\n /** Toggle maximized (full-width) state */\r\n toggleMaximized() {\r\n this._maximized.set(!this._maximized());\r\n }\r\n}\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-dynamic-drawer-host',\r\n standalone: true,\r\n imports: [NgComponentOutlet, DrawerModule, Button],\r\n template: `\r\n <p-drawer\r\n [(visible)]=\"visible\"\r\n [appendTo]=\"'self'\"\r\n [style]=\"computedDrawerStyle()\"\r\n [closable]=\"cfg()?.closable\"\r\n [position]=\"cfg()?.position\"\r\n [fullScreen]=\"computedFullScreen()\"\r\n [modal]=\"cfg()?.modal\"\r\n [closeOnEscape]=\"cfg()?.closeOnEscape\"\r\n [dismissible]=\"cfg()?.dismissible\"\r\n [transitionOptions]=\"cfg()?.transitionOptions\"\r\n [styleClass]=\"computedStyleClass()\"\r\n (onShow)=\"onDrawerShow()\"\r\n (onHide)=\"onDrawerHide()\"\r\n >\r\n <ng-template #header>\r\n <div\r\n class=\"flex items-center justify-between px-5 w-full py-3 border-b border-surface\"\r\n >\r\n <h3 class=\"text-xl font-semibold\">{{ computedHeader() }}</h3>\r\n <div class=\"flex items-center gap-2\">\r\n @if (canShowMaximizeToggle()) {\r\n <mt-button\r\n (onClick)=\"toggleMaximized()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n severity=\"secondary\"\r\n [icon]=\"maximizeButtonIcon()\"\r\n [tooltip]=\"maximizeButtonTooltip()\"\r\n >\r\n </mt-button>\r\n }\r\n <mt-button\r\n (onClick)=\"handleHide()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n >\r\n </mt-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n @if (childInjector) {\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n cmp();\r\n injector: childInjector;\r\n inputs: cmpInputs()\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n </p-drawer>\r\n `,\r\n})\r\nexport class DynamicDrawerHost {\r\n public visible = model<boolean>(false);\r\n cmp = signal<any>(null);\r\n cfg = signal<any>({ position: 'right' });\r\n cmpInputs = signal<Record<string, unknown>>({});\r\n childInjector!: Injector;\r\n private ref?: DynamicDialogRef;\r\n private drawerController = new DrawerController();\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private readonly renderer = inject(Renderer2);\r\n private resizeAnimTimer: ReturnType<typeof setTimeout> | null = null;\r\n private readonly RESIZE_ANIM_CLASS = 'mt-drawer--anim-resize';\r\n private readonly RESIZE_ANIM_DURATION_MS = 700;\r\n\r\n constructor() {\r\n effect(() => {\r\n // React only when the user toggles maximize while the drawer is open.\r\n // Closing/opening goes through onDrawerShow / onDrawerHide so we never\r\n // race with PrimeNG's slide animation.\r\n const isMaximized = this.drawerController.maximized();\r\n if (!this.visible()) {\r\n return;\r\n }\r\n this.applyMaximizedInlineStyles(isMaximized, true);\r\n });\r\n }\r\n\r\n /** Computed styleClass combining config + dynamic controller class */\r\n computedStyleClass = computed(() => {\r\n const configClass = this.cfg()?.styleClass ?? '';\r\n const dynamicClass = this.drawerController.styleClass();\r\n const maximizedClass = this.drawerController.maximized()\r\n ? 'mt-drawer--maximized'\r\n : '';\r\n return `${configClass} ${dynamicClass} mt-drawer ${maximizedClass}`\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n });\r\n\r\n /** Whether the maximize toggle button is visible in the header */\r\n canShowMaximizeToggle = computed(() => {\r\n const config = this.cfg();\r\n if (config?.showMaximizeToggle === false) {\r\n return false;\r\n }\r\n if (this.computedFullScreen()) {\r\n return false;\r\n }\r\n const position = config?.position ?? 'right';\r\n return position === 'left' || position === 'right';\r\n });\r\n\r\n /** Tooltip for maximize/restore button (state-aware) */\r\n maximizeButtonTooltip = computed(() => {\r\n const config = this.cfg();\r\n return this.drawerController.maximized()\r\n ? (config?.restoreTooltip ?? 'Restore size')\r\n : (config?.maximizeTooltip ?? 'Expand to full width');\r\n });\r\n\r\n /** Icon for maximize/restore button (state-aware) */\r\n maximizeButtonIcon = computed(() =>\r\n this.drawerController.maximized()\r\n ? 'layout.minimize-01'\r\n : 'layout.maximize-01',\r\n );\r\n\r\n /** Toggle the drawer's full-width state */\r\n toggleMaximized() {\r\n this.drawerController.toggleMaximized();\r\n }\r\n\r\n computedDrawerStyle = computed<Record<string, string> | null>(() => {\r\n const appendTo = this.cfg()?.appendTo;\r\n if (!appendTo || appendTo === 'body') {\r\n return { position: 'fixed' };\r\n }\r\n\r\n return null;\r\n });\r\n\r\n /** Computed header - controller overrides config if set */\r\n computedHeader = computed(() => {\r\n const dynamicHeader = this.drawerController.header();\r\n return dynamicHeader || this.cfg()?.header || '';\r\n });\r\n\r\n /** Computed fullScreen - controller overrides config if set */\r\n computedFullScreen = computed(() => {\r\n const dynamicFullScreen = this.drawerController.fullScreen();\r\n return dynamicFullScreen !== undefined\r\n ? dynamicFullScreen\r\n : this.cfg()?.fullScreen;\r\n });\r\n\r\n @Input({ required: true })\r\n connect(opts: {\r\n component: any;\r\n config?: any;\r\n parent: Injector;\r\n ref: DynamicDialogRef;\r\n }) {\r\n this.cmp.set(opts.component);\r\n this.cfg.set(opts.config ?? {});\r\n this.cmpInputs.set(opts.config?.inputValues ?? {});\r\n this.ref = opts.ref;\r\n this.childInjector = Injector.create({\r\n parent: opts.parent,\r\n providers: [\r\n { provide: DynamicDrawerConfig, useValue: opts.config ?? {} },\r\n { provide: DynamicDialogRef, useValue: opts.ref },\r\n { provide: DrawerController, useValue: this.drawerController },\r\n ],\r\n });\r\n\r\n opts.ref.onClose.subscribe(() => {\r\n this.visible.set(false);\r\n });\r\n }\r\n\r\n show() {\r\n this.visible.set(true);\r\n }\r\n\r\n handleHide(data = null) {\r\n this.visible.set(false);\r\n this.ref?.close(data);\r\n }\r\n\r\n onDrawerShow() {\r\n // Drawer DOM only exists after PrimeNG renders it — apply current state\r\n // instantly so the open animation doesn't fight the resize transition.\r\n this.applyMaximizedInlineStyles(this.drawerController.maximized(), false);\r\n }\r\n\r\n onDrawerHide() {\r\n // Instant cleanup — close animation already done; we don't want to start\r\n // a 650ms width transition mid-hide.\r\n this.applyMaximizedInlineStyles(false, false);\r\n }\r\n\r\n private getDrawerElement(): HTMLElement | null {\r\n return this.host.nativeElement.querySelector(\r\n '.p-drawer',\r\n ) as HTMLElement | null;\r\n }\r\n\r\n private applyMaximizedInlineStyles(\r\n isMaximized: boolean,\r\n animate: boolean,\r\n ): void {\r\n const drawerEl = this.getDrawerElement();\r\n if (!drawerEl) {\r\n return;\r\n }\r\n\r\n if (this.resizeAnimTimer) {\r\n clearTimeout(this.resizeAnimTimer);\r\n this.resizeAnimTimer = null;\r\n }\r\n\r\n if (animate) {\r\n this.renderer.addClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = setTimeout(() => {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = null;\r\n }, this.RESIZE_ANIM_DURATION_MS);\r\n } else {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n }\r\n\r\n if (isMaximized) {\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n } else {\r\n this.renderer.removeStyle(drawerEl, 'width');\r\n this.renderer.removeStyle(drawerEl, 'max-width');\r\n this.renderer.removeStyle(drawerEl, 'height');\r\n this.renderer.removeStyle(drawerEl, 'max-height');\r\n }\r\n }\r\n}\r\n","// dynamic-drawer.service.ts\r\nimport {\r\n Injectable,\r\n Type,\r\n createComponent,\r\n EnvironmentInjector,\r\n ApplicationRef,\r\n Injector,\r\n DestroyRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { DynamicDrawerHost } from './dynamic-drawer-host';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\nexport interface DynamicDrawerConfigInterface {\r\n header?: string;\r\n position?: string;\r\n data?: any;\r\n fullScreen?: boolean;\r\n modal?: boolean;\r\n closable?: boolean;\r\n closeOnEscape?: boolean;\r\n dismissible?: boolean;\r\n appendTo?: any;\r\n transitionOptions?: string;\r\n styleClass?: string;\r\n inputValues?: any;\r\n showMaximizeToggle?: boolean;\r\n maximizeTooltip?: string;\r\n restoreTooltip?: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DrawerService {\r\n private appRef = inject(ApplicationRef);\r\n private env = inject(EnvironmentInjector);\r\n private rootInjector = inject(Injector);\r\n private destroyRef = inject(DestroyRef);\r\n private doc = inject(DOCUMENT);\r\n private hostRef?: ReturnType<typeof createComponent<DynamicDrawerHost>>;\r\n defauiltConfig: DynamicDrawerConfigInterface = {\r\n position: 'right',\r\n modal: true,\r\n closable: false,\r\n transitionOptions: '200ms cubic-bezier(0, 0, 1, 1)',\r\n inputValues: {},\r\n showMaximizeToggle: true,\r\n maximizeTooltip: 'Expand to full width',\r\n restoreTooltip: 'Restore size',\r\n };\r\n\r\n constructor() {\r\n this.preloadDrawerHost();\r\n }\r\n\r\n open<T>(\r\n component: Type<any>,\r\n config: DynamicDrawerConfigInterface = {},\r\n ): DynamicDialogRef<T> {\r\n config = { ...this.defauiltConfig, ...config };\r\n\r\n const targetEl = this.resolveAppendTarget(config.appendTo);\r\n\r\n this.hostRef = createComponent(DynamicDrawerHost, {\r\n environmentInjector: this.env,\r\n });\r\n\r\n const ref = new DynamicDialogRef<T>();\r\n this.hostRef.instance.connect({\r\n component,\r\n config,\r\n parent: this.rootInjector,\r\n ref,\r\n });\r\n\r\n this.appRef.attachView(this.hostRef.hostView);\r\n\r\n // 📌 append to target (NOT body when provided)\r\n targetEl.appendChild(this.hostRef.location.nativeElement);\r\n\r\n // 🧹 auto-clean if app destroyed (SSR / HMR safety)\r\n this.destroyRef.onDestroy(() => {\r\n this.appRef.detachView(this.hostRef!.hostView);\r\n this.hostRef!.destroy();\r\n this.hostRef = undefined;\r\n });\r\n\r\n const currentHostRef = this.hostRef;\r\n const openDrawer = () => {\r\n if (this.hostRef !== currentHostRef) {\r\n return;\r\n }\r\n\r\n currentHostRef.instance.show();\r\n };\r\n\r\n if (this.doc.defaultView?.requestAnimationFrame) {\r\n this.doc.defaultView.requestAnimationFrame(openDrawer);\r\n } else {\r\n setTimeout(openDrawer, 0);\r\n }\r\n\r\n return ref;\r\n }\r\n\r\n private preloadDrawerHost() {\r\n const preloadHostRef = createComponent(DynamicDrawerHost, {\r\n environmentInjector: this.env,\r\n });\r\n const preloadElement = preloadHostRef.location.nativeElement as HTMLElement;\r\n\r\n preloadElement.style.display = 'none';\r\n\r\n this.appRef.attachView(preloadHostRef.hostView);\r\n this.doc.body.appendChild(preloadElement);\r\n preloadHostRef.changeDetectorRef.detectChanges();\r\n this.appRef.detachView(preloadHostRef.hostView);\r\n preloadElement.remove();\r\n preloadHostRef.destroy();\r\n }\r\n\r\n private resolveAppendTarget(appendTo?: string | HTMLElement): HTMLElement {\r\n if (!appendTo) return this.doc.body;\r\n\r\n if (typeof appendTo === 'string') {\r\n const selector =\r\n appendTo.startsWith('#') || appendTo.startsWith('.')\r\n ? appendTo\r\n : `#${appendTo}`;\r\n const el = this.doc.querySelector(selector) as HTMLElement | null;\r\n if (!el) {\r\n return this.doc.body;\r\n }\r\n return el;\r\n }\r\n\r\n return appendTo; // HTMLElement passed directly\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-dynamic-drawer.mjs","sources":["../../../../packages/masterteam/components/dynamic-drawer/dynamic-drawer-host.ts","../../../../packages/masterteam/components/dynamic-drawer/dynamic-drawer.ts","../../../../packages/masterteam/components/dynamic-drawer/masterteam-components-dynamic-drawer.ts"],"sourcesContent":["import { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport {\r\n Component,\r\n ElementRef,\r\n Injector,\r\n Input,\r\n Renderer2,\r\n RendererStyleFlags2,\r\n effect,\r\n inject,\r\n signal,\r\n InjectionToken,\r\n model,\r\n computed,\r\n Injectable,\r\n} from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\nexport const DynamicDrawerConfig = new InjectionToken<any>(\r\n 'DynamicDrawerConfig',\r\n);\r\n\r\n/**\r\n * Controller to dynamically update drawer properties from inside the child component.\r\n * Inject this in your drawer content component to modify drawer behavior.\r\n */\r\n@Injectable()\r\nexport class DrawerController {\r\n private _styleClass = signal<string>('');\r\n private _header = signal<string>('');\r\n private _fullScreen = signal<boolean | undefined>(undefined);\r\n private _maximized = signal<boolean>(false);\r\n\r\n /** Get the current additional styleClass */\r\n get styleClass() {\r\n return this._styleClass;\r\n }\r\n\r\n /** Get the current header */\r\n get header() {\r\n return this._header;\r\n }\r\n\r\n /** Get the current fullScreen state */\r\n get fullScreen() {\r\n return this._fullScreen;\r\n }\r\n\r\n /** Get the current maximized (full-width) state */\r\n get maximized() {\r\n return this._maximized;\r\n }\r\n\r\n /** Add or replace the dynamic styleClass */\r\n setStyleClass(styleClass: string) {\r\n this._styleClass.set(styleClass);\r\n }\r\n\r\n /** Append a class to the existing styleClass */\r\n addClass(className: string) {\r\n const current = this._styleClass();\r\n if (!current.includes(className)) {\r\n this._styleClass.set((current + ' ' + className).trim());\r\n }\r\n }\r\n\r\n /** Remove a class from the styleClass */\r\n removeClass(className: string) {\r\n const current = this._styleClass();\r\n this._styleClass.set(\r\n current\r\n .split(' ')\r\n .filter((c) => c !== className)\r\n .join(' '),\r\n );\r\n }\r\n\r\n /** Toggle a class on/off */\r\n toggleClass(className: string) {\r\n if (this._styleClass().includes(className)) {\r\n this.removeClass(className);\r\n } else {\r\n this.addClass(className);\r\n }\r\n }\r\n\r\n /** Update the drawer header */\r\n setHeader(header: string) {\r\n this._header.set(header);\r\n }\r\n\r\n /** Toggle fullScreen mode */\r\n setFullScreen(fullScreen: boolean) {\r\n this._fullScreen.set(fullScreen);\r\n }\r\n\r\n /** Set maximized (full-width) state */\r\n setMaximized(maximized: boolean) {\r\n this._maximized.set(maximized);\r\n }\r\n\r\n /** Toggle maximized (full-width) state */\r\n toggleMaximized() {\r\n this._maximized.set(!this._maximized());\r\n }\r\n}\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-dynamic-drawer-host',\r\n standalone: true,\r\n imports: [NgComponentOutlet, DrawerModule, Button],\r\n template: `\r\n <p-drawer\r\n [(visible)]=\"visible\"\r\n [appendTo]=\"'self'\"\r\n [style]=\"computedDrawerStyle()\"\r\n [closable]=\"cfg()?.closable\"\r\n [position]=\"cfg()?.position\"\r\n [fullScreen]=\"computedFullScreen()\"\r\n [modal]=\"cfg()?.modal\"\r\n [closeOnEscape]=\"cfg()?.closeOnEscape\"\r\n [dismissible]=\"cfg()?.dismissible\"\r\n [transitionOptions]=\"cfg()?.transitionOptions\"\r\n [styleClass]=\"computedStyleClass()\"\r\n (onShow)=\"onDrawerShow()\"\r\n (onHide)=\"onDrawerHide()\"\r\n >\r\n <ng-template #header>\r\n <div\r\n class=\"flex items-center justify-between px-5 w-full py-3 border-b border-surface\"\r\n >\r\n <h3 class=\"text-xl font-semibold\">{{ computedHeader() }}</h3>\r\n <div class=\"flex items-center gap-2\">\r\n @if (canShowMaximizeToggle()) {\r\n <mt-button\r\n (onClick)=\"toggleMaximized()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n severity=\"secondary\"\r\n [icon]=\"maximizeButtonIcon()\"\r\n [tooltip]=\"maximizeButtonTooltip()\"\r\n >\r\n </mt-button>\r\n }\r\n <mt-button\r\n (onClick)=\"handleHide()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n >\r\n </mt-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n @if (childInjector) {\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n cmp();\r\n injector: childInjector;\r\n inputs: cmpInputs()\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n </p-drawer>\r\n `,\r\n})\r\nexport class DynamicDrawerHost {\r\n public visible = model<boolean>(false);\r\n cmp = signal<any>(null);\r\n cfg = signal<any>({ position: 'right' });\r\n cmpInputs = signal<Record<string, unknown>>({});\r\n childInjector!: Injector;\r\n private ref?: DynamicDialogRef;\r\n private drawerController = new DrawerController();\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly transloco = inject(TranslocoService);\r\n private resizeAnimTimer: ReturnType<typeof setTimeout> | null = null;\r\n private readonly RESIZE_ANIM_CLASS = 'mt-drawer--anim-resize';\r\n private readonly RESIZE_ANIM_DURATION_MS = 700;\r\n\r\n constructor() {\r\n effect(() => {\r\n // React only when the user toggles maximize while the drawer is open.\r\n // Closing/opening goes through onDrawerShow / onDrawerHide so we never\r\n // race with PrimeNG's slide animation.\r\n const isMaximized = this.drawerController.maximized();\r\n if (!this.visible()) {\r\n return;\r\n }\r\n this.applyMaximizedInlineStyles(isMaximized, true);\r\n });\r\n }\r\n\r\n /** Computed styleClass combining config + dynamic controller class */\r\n computedStyleClass = computed(() => {\r\n const configClass = this.cfg()?.styleClass ?? '';\r\n const dynamicClass = this.drawerController.styleClass();\r\n const maximizedClass = this.drawerController.maximized()\r\n ? 'mt-drawer--maximized'\r\n : '';\r\n return `${configClass} ${dynamicClass} mt-drawer ${maximizedClass}`\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n });\r\n\r\n /** Whether the maximize toggle button is visible in the header */\r\n canShowMaximizeToggle = computed(() => {\r\n const config = this.cfg();\r\n if (config?.showMaximizeToggle === false) {\r\n return false;\r\n }\r\n if (this.computedFullScreen()) {\r\n return false;\r\n }\r\n const position = config?.position ?? 'right';\r\n return position === 'left' || position === 'right';\r\n });\r\n\r\n /** Tooltip for maximize/restore button (state-aware) */\r\n maximizeButtonTooltip = computed(() => {\r\n const config = this.cfg();\r\n return this.drawerController.maximized()\r\n ? (config?.restoreTooltip ??\r\n this.transloco.translate('components.drawer.restoreSize'))\r\n : (config?.maximizeTooltip ??\r\n this.transloco.translate('components.drawer.expandFullWidth'));\r\n });\r\n\r\n /** Icon for maximize/restore button (state-aware) */\r\n maximizeButtonIcon = computed(() =>\r\n this.drawerController.maximized()\r\n ? 'layout.minimize-01'\r\n : 'layout.maximize-01',\r\n );\r\n\r\n /** Toggle the drawer's full-width state */\r\n toggleMaximized() {\r\n this.drawerController.toggleMaximized();\r\n }\r\n\r\n computedDrawerStyle = computed<Record<string, string> | null>(() => {\r\n const appendTo = this.cfg()?.appendTo;\r\n if (!appendTo || appendTo === 'body') {\r\n return { position: 'fixed' };\r\n }\r\n\r\n return null;\r\n });\r\n\r\n /** Computed header - controller overrides config if set */\r\n computedHeader = computed(() => {\r\n const dynamicHeader = this.drawerController.header();\r\n return dynamicHeader || this.cfg()?.header || '';\r\n });\r\n\r\n /** Computed fullScreen - controller overrides config if set */\r\n computedFullScreen = computed(() => {\r\n const dynamicFullScreen = this.drawerController.fullScreen();\r\n return dynamicFullScreen !== undefined\r\n ? dynamicFullScreen\r\n : this.cfg()?.fullScreen;\r\n });\r\n\r\n @Input({ required: true })\r\n connect(opts: {\r\n component: any;\r\n config?: any;\r\n parent: Injector;\r\n ref: DynamicDialogRef;\r\n }) {\r\n this.cmp.set(opts.component);\r\n this.cfg.set(opts.config ?? {});\r\n this.cmpInputs.set(opts.config?.inputValues ?? {});\r\n this.ref = opts.ref;\r\n this.childInjector = Injector.create({\r\n parent: opts.parent,\r\n providers: [\r\n { provide: DynamicDrawerConfig, useValue: opts.config ?? {} },\r\n { provide: DynamicDialogRef, useValue: opts.ref },\r\n { provide: DrawerController, useValue: this.drawerController },\r\n ],\r\n });\r\n\r\n opts.ref.onClose.subscribe(() => {\r\n this.visible.set(false);\r\n });\r\n }\r\n\r\n show() {\r\n this.visible.set(true);\r\n }\r\n\r\n handleHide(data = null) {\r\n this.visible.set(false);\r\n this.ref?.close(data);\r\n }\r\n\r\n onDrawerShow() {\r\n // Drawer DOM only exists after PrimeNG renders it — apply current state\r\n // instantly so the open animation doesn't fight the resize transition.\r\n this.applyMaximizedInlineStyles(this.drawerController.maximized(), false);\r\n }\r\n\r\n onDrawerHide() {\r\n // Instant cleanup — close animation already done; we don't want to start\r\n // a 650ms width transition mid-hide.\r\n this.applyMaximizedInlineStyles(false, false);\r\n }\r\n\r\n private getDrawerElement(): HTMLElement | null {\r\n return this.host.nativeElement.querySelector(\r\n '.p-drawer',\r\n ) as HTMLElement | null;\r\n }\r\n\r\n private applyMaximizedInlineStyles(\r\n isMaximized: boolean,\r\n animate: boolean,\r\n ): void {\r\n const drawerEl = this.getDrawerElement();\r\n if (!drawerEl) {\r\n return;\r\n }\r\n\r\n if (this.resizeAnimTimer) {\r\n clearTimeout(this.resizeAnimTimer);\r\n this.resizeAnimTimer = null;\r\n }\r\n\r\n if (animate) {\r\n this.renderer.addClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = setTimeout(() => {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n this.resizeAnimTimer = null;\r\n }, this.RESIZE_ANIM_DURATION_MS);\r\n } else {\r\n this.renderer.removeClass(drawerEl, this.RESIZE_ANIM_CLASS);\r\n }\r\n\r\n if (isMaximized) {\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-width',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n this.renderer.setStyle(\r\n drawerEl,\r\n 'max-height',\r\n '100%',\r\n RendererStyleFlags2.Important,\r\n );\r\n } else {\r\n this.renderer.removeStyle(drawerEl, 'width');\r\n this.renderer.removeStyle(drawerEl, 'max-width');\r\n this.renderer.removeStyle(drawerEl, 'height');\r\n this.renderer.removeStyle(drawerEl, 'max-height');\r\n }\r\n }\r\n}\r\n","// dynamic-drawer.service.ts\r\nimport {\r\n Injectable,\r\n Type,\r\n createComponent,\r\n EnvironmentInjector,\r\n ApplicationRef,\r\n Injector,\r\n DestroyRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { DynamicDrawerHost } from './dynamic-drawer-host';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\nexport interface DynamicDrawerConfigInterface {\r\n header?: string;\r\n position?: string;\r\n data?: any;\r\n fullScreen?: boolean;\r\n modal?: boolean;\r\n closable?: boolean;\r\n closeOnEscape?: boolean;\r\n dismissible?: boolean;\r\n appendTo?: any;\r\n transitionOptions?: string;\r\n styleClass?: string;\r\n inputValues?: any;\r\n showMaximizeToggle?: boolean;\r\n maximizeTooltip?: string;\r\n restoreTooltip?: string;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DrawerService {\r\n private appRef = inject(ApplicationRef);\r\n private env = inject(EnvironmentInjector);\r\n private rootInjector = inject(Injector);\r\n private destroyRef = inject(DestroyRef);\r\n private doc = inject(DOCUMENT);\r\n private hostRef?: ReturnType<typeof createComponent<DynamicDrawerHost>>;\r\n private transloco = inject(TranslocoService);\r\n defauiltConfig: DynamicDrawerConfigInterface = {\r\n position: 'right',\r\n modal: true,\r\n closable: false,\r\n transitionOptions: '200ms cubic-bezier(0, 0, 1, 1)',\r\n inputValues: {},\r\n showMaximizeToggle: true,\r\n maximizeTooltip: this.transloco.translate(\r\n 'components.drawer.expandFullWidth',\r\n ),\r\n restoreTooltip: this.transloco.translate('components.drawer.restoreSize'),\r\n };\r\n\r\n constructor() {\r\n this.preloadDrawerHost();\r\n }\r\n\r\n open<T>(\r\n component: Type<any>,\r\n config: DynamicDrawerConfigInterface = {},\r\n ): DynamicDialogRef<T> {\r\n config = { ...this.defauiltConfig, ...config };\r\n\r\n const targetEl = this.resolveAppendTarget(config.appendTo);\r\n\r\n this.hostRef = createComponent(DynamicDrawerHost, {\r\n environmentInjector: this.env,\r\n });\r\n\r\n const ref = new DynamicDialogRef<T>();\r\n this.hostRef.instance.connect({\r\n component,\r\n config,\r\n parent: this.rootInjector,\r\n ref,\r\n });\r\n\r\n this.appRef.attachView(this.hostRef.hostView);\r\n\r\n // 📌 append to target (NOT body when provided)\r\n targetEl.appendChild(this.hostRef.location.nativeElement);\r\n\r\n // 🧹 auto-clean if app destroyed (SSR / HMR safety)\r\n this.destroyRef.onDestroy(() => {\r\n this.appRef.detachView(this.hostRef!.hostView);\r\n this.hostRef!.destroy();\r\n this.hostRef = undefined;\r\n });\r\n\r\n const currentHostRef = this.hostRef;\r\n const openDrawer = () => {\r\n if (this.hostRef !== currentHostRef) {\r\n return;\r\n }\r\n\r\n currentHostRef.instance.show();\r\n };\r\n\r\n if (this.doc.defaultView?.requestAnimationFrame) {\r\n this.doc.defaultView.requestAnimationFrame(openDrawer);\r\n } else {\r\n setTimeout(openDrawer, 0);\r\n }\r\n\r\n return ref;\r\n }\r\n\r\n private preloadDrawerHost() {\r\n const preloadHostRef = createComponent(DynamicDrawerHost, {\r\n environmentInjector: this.env,\r\n });\r\n const preloadElement = preloadHostRef.location.nativeElement as HTMLElement;\r\n\r\n preloadElement.style.display = 'none';\r\n\r\n this.appRef.attachView(preloadHostRef.hostView);\r\n this.doc.body.appendChild(preloadElement);\r\n preloadHostRef.changeDetectorRef.detectChanges();\r\n this.appRef.detachView(preloadHostRef.hostView);\r\n preloadElement.remove();\r\n preloadHostRef.destroy();\r\n }\r\n\r\n private resolveAppendTarget(appendTo?: string | HTMLElement): HTMLElement {\r\n if (!appendTo) return this.doc.body;\r\n\r\n if (typeof appendTo === 'string') {\r\n const selector =\r\n appendTo.startsWith('#') || appendTo.startsWith('.')\r\n ? appendTo\r\n : `#${appendTo}`;\r\n const el = this.doc.querySelector(selector) as HTMLElement | null;\r\n if (!el) {\r\n return this.doc.body;\r\n }\r\n return el;\r\n }\r\n\r\n return appendTo; // HTMLElement passed directly\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}