@masterteam/components 0.0.140 → 0.0.142
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/common.css +1 -1
- package/fesm2022/masterteam-components-business-fields.mjs +1 -1
- package/fesm2022/masterteam-components-business-fields.mjs.map +1 -1
- package/fesm2022/masterteam-components-client-page-menu.mjs +2 -2
- package/fesm2022/masterteam-components-client-page-menu.mjs.map +1 -1
- package/fesm2022/masterteam-components-client-page.mjs +2 -2
- package/fesm2022/masterteam-components-client-page.mjs.map +1 -1
- package/fesm2022/masterteam-components-entities.mjs +44 -7
- package/fesm2022/masterteam-components-entities.mjs.map +1 -1
- package/fesm2022/masterteam-components-paginator.mjs +2 -3
- package/fesm2022/masterteam-components-paginator.mjs.map +1 -1
- package/fesm2022/masterteam-components-select-field.mjs +2 -2
- package/fesm2022/masterteam-components-select-field.mjs.map +1 -1
- package/fesm2022/masterteam-components-statistic-card.mjs +2 -2
- package/fesm2022/masterteam-components-statistic-card.mjs.map +1 -1
- package/fesm2022/masterteam-components-table.mjs +69 -27
- package/fesm2022/masterteam-components-table.mjs.map +1 -1
- package/fesm2022/masterteam-components-tooltip.mjs +9 -5
- package/fesm2022/masterteam-components-tooltip.mjs.map +1 -1
- package/fesm2022/masterteam-components.mjs +84 -70
- package/fesm2022/masterteam-components.mjs.map +1 -1
- package/package.json +11 -10
- package/types/masterteam-components-entities.d.ts +30 -5
- package/types/masterteam-components-table.d.ts +10 -18
|
@@ -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\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],\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 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 gradient respects RTL direction */\r\n readonly sidebarGradient = computed(() => {\r\n const dir = this.isRtl() ? 'to left' : 'to right';\r\n return `linear-gradient(${dir}, #EBEBF0, #e5e5ea)`;\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.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.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\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=\"bg-gray-200 w-full h-full\">\r\n <ng-template #headless>\r\n <div\r\n #layoutRoot\r\n class=\"flex h-full min-h-0\"\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 rounded-lg transition-all duration-300 ease-in-out\"\r\n [class.transition-none]=\"isResizing()\"\r\n [style.width]=\"sidebarWidth()\"\r\n [style.background]=\"\r\n collapsed() && !isResponsive() ? null : sidebarGradient()\r\n \"\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-gray-300 px-5 py-4\"\r\n [class.whitespace-nowrap]=\"!isResponsive()\"\r\n >\r\n <div class=\"flex min-w-0 items-center gap-2\">\r\n @if (menuIcon()) {\r\n <div class=\"text-xl shrink-0\">\r\n <mt-icon [icon]=\"menuIcon()!\" />\r\n </div>\r\n }\r\n @if (menuTitle()) {\r\n <div class=\"min-w-0 truncate font-semibold\">\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 >\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)=\"sidebarHovered.set(true)\"\r\n (mouseleave)=\"sidebarHovered.set(false)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-surface-300 transition-opacity duration-200 ease-in-out\"\r\n [class.opacity-0]=\"!sidebarHovered() && !isResizing()\"\r\n [class.opacity-100]=\"sidebarHovered() || isResizing()\"\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() && !collapsed() && !isResizing()\r\n \"\r\n [class.pointer-events-none]=\"\r\n !sidebarHovered() && !collapsed() && !isResizing()\r\n \"\r\n [class.opacity-100]=\"\r\n sidebarHovered() || collapsed() || isResizing()\r\n \"\r\n [attr.aria-label]=\"toggleAriaLabel()\"\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\">\r\n <ng-template #headless>\r\n <!-- Content Header -->\r\n <div\r\n class=\"flex shrink-0 items-center justify-between border-b border-surface px-5 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 >\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 class=\"text-md truncate font-semibold\">\r\n {{ selected.title }}\r\n </div>\r\n @if (selected.subtitle) {\r\n <div class=\"truncate text-sm font-semibold text-gray-500\">\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 p-5\"\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\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],\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 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 gradient respects RTL direction */\r\n readonly sidebarGradient = computed(() => {\r\n const dir = this.isRtl() ? 'to left' : 'to right';\r\n return `linear-gradient(${dir}, #EBEBF0, #e5e5ea)`;\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.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.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\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=\"bg-gray-200 w-full h-full\">\n <ng-template #headless>\n <div\n #layoutRoot\n class=\"flex h-full min-h-0\"\n [class.flex-col]=\"isResponsive()\"\n >\n <!-- Left Sidebar -->\n <div\n class=\"flex min-h-0 flex-col overflow-hidden rounded-lg transition-all duration-300 ease-in-out\"\n [class.transition-none]=\"isResizing()\"\n [style.width]=\"sidebarWidth()\"\n [style.background]=\"\n collapsed() && !isResponsive() ? null : sidebarGradient()\n \"\n (mouseenter)=\"sidebarHovered.set(true)\"\n (mouseleave)=\"sidebarHovered.set(false)\"\n >\n <!-- Sidebar Header -->\n <div\n class=\"flex shrink-0 items-center justify-between overflow-hidden border-b border-surface-300 px-5 py-[18px]\"\n [class.whitespace-nowrap]=\"!isResponsive()\"\n >\n <div class=\"flex min-w-0 items-center gap-[9px]\">\n @if (menuIcon()) {\n <div\n class=\"shrink-0 text-surface-950\"\n [style.--mt-icon-prev-width]=\"'1.25rem'\"\n [style.--mt-icon-prev-height]=\"'1.25rem'\"\n >\n <mt-icon [icon]=\"menuIcon()!\" />\n </div>\n }\n @if (menuTitle()) {\n <div\n class=\"min-w-0 truncate text-sm font-medium leading-5 text-surface-950\"\n >\n {{ menuTitle() }}\n </div>\n }\n </div>\n\n @if (isResponsive()) {\n <button\n type=\"button\"\n (click)=\"toggleCollapsed()\"\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\"\n [attr.aria-label]=\"toggleAriaLabel()\"\n >\n <mt-icon [icon]=\"toggleIcon()\" class=\"text-sm\" />\n </button>\n }\n </div>\n\n @if (showSidebarMenu()) {\n <!-- Menu Items -->\n <div\n class=\"min-h-0 overflow-hidden\"\n [class.flex-1]=\"!isResponsive()\"\n [style.maxHeight]=\"isResponsive() ? '22rem' : null\"\n >\n <mt-client-page-menu\n class=\"h-full\"\n [menuItems]=\"menuItems()\"\n [selectedItem]=\"selectedItem()\"\n [loading]=\"menuItemsLoading()\"\n (menuItemClick)=\"selectItem($event)\"\n />\n </div>\n }\n </div>\n\n <!-- Vertical Divider with Toggle Button -->\n @if (!isResponsive()) {\n <div\n class=\"relative flex w-0 shrink-0 items-stretch\"\n (mouseenter)=\"sidebarHovered.set(true)\"\n (mouseleave)=\"sidebarHovered.set(false)\"\n >\n <div\n class=\"pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-surface-300 transition-opacity duration-200 ease-in-out\"\n [class.opacity-0]=\"!sidebarHovered() && !isResizing()\"\n [class.opacity-100]=\"sidebarHovered() || isResizing()\"\n ></div>\n\n @if (resizable()) {\n <div\n class=\"absolute inset-y-0 left-1/2 z-0 w-5 -translate-x-1/2\"\n [class.cursor-col-resize]=\"canResize()\"\n [class.cursor-default]=\"!canResize()\"\n (mousedown)=\"startResize($event)\"\n ></div>\n }\n\n <!-- Toggle Button at bottom of divider (visible on sidebar hover or when collapsed) -->\n <button\n type=\"button\"\n (click)=\"toggleCollapsed()\"\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\"\n [class.opacity-0]=\"\n !sidebarHovered() && !collapsed() && !isResizing()\n \"\n [class.pointer-events-none]=\"\n !sidebarHovered() && !collapsed() && !isResizing()\n \"\n [class.opacity-100]=\"\n sidebarHovered() || collapsed() || isResizing()\n \"\n [attr.aria-label]=\"toggleAriaLabel()\"\n >\n <mt-icon\n [icon]=\"toggleIcon()\"\n class=\"block text-gray-500 transition-all duration-200 group-hover:animate-pulse group-hover:text-primary-600\"\n [style.--mt-icon-prev-width]=\"'0.875rem'\"\n [style.--mt-icon-prev-height]=\"'0.875rem'\"\n />\n </button>\n </div>\n }\n\n <!-- Right Content Panel -->\n <div\n class=\"relative flex min-h-0 min-w-0 flex-1 flex-col\"\n [class.ltr:[box-shadow:inset_8px_0_10px_-8px_rgba(0,0,0,0.12)]]=\"\n !isResponsive() && !collapsed()\n \"\n [class.rtl:[box-shadow:inset_-8px_0_10px_-8px_rgba(0,0,0,0.12)]]=\"\n !isResponsive() && !collapsed()\n \"\n >\n <mt-card class=\"h-full min-h-0\">\n <ng-template #headless>\n <!-- Content Header -->\n <div\n class=\"flex shrink-0 items-center justify-between border-b border-surface px-5 py-4 [box-shadow:0_2px_3px_-1px_rgba(0,0,0,0.07)]\"\n [class.flex-col]=\"isResponsive()\"\n [class.items-start]=\"isResponsive()\"\n [class.gap-3]=\"isResponsive()\"\n >\n <div class=\"flex min-w-0 items-center gap-3\">\n @if (selectedItem(); as selected) {\n <mt-avatar\n [style]=\"getAvatarStyle(selected.color)\"\n [icon]=\"selected.icon\"\n shape=\"square\"\n size=\"large\"\n />\n <div class=\"min-w-0\">\n <div\n class=\"truncate text-sm font-medium leading-5 text-surface-950\"\n >\n {{ selected.title }}\n </div>\n @if (selected.subtitle) {\n <div class=\"truncate text-sm font-semibold text-gray-500\">\n {{ selected.subtitle }}\n </div>\n }\n </div>\n }\n </div>\n @if (headerEnd(); as template) {\n <div\n class=\"flex gap-2\"\n [class.w-full]=\"isResponsive()\"\n [class.flex-wrap]=\"isResponsive()\"\n [class.justify-end]=\"isResponsive()\"\n >\n <ng-container [ngTemplateOutlet]=\"template\" />\n </div>\n }\n </div>\n\n <!-- Content Body -->\n <div\n class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto p-5\"\n >\n <ng-content />\n </div>\n </ng-template>\n </mt-card>\n </div>\n </div>\n </ng-template>\n</mt-card>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ import { Progress } from '@masterteam/components/progress';
|
|
|
10
10
|
import * as i1 from '@angular/forms';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
12
|
import { forkJoin, finalize, of, take, switchMap, EMPTY, map, catchError } from 'rxjs';
|
|
13
|
+
import * as i1$1 from 'primeng/tooltip';
|
|
14
|
+
import { TooltipModule } from 'primeng/tooltip';
|
|
13
15
|
import { CdkDrag, CdkDropList, CdkDragPlaceholder } from '@angular/cdk/drag-drop';
|
|
14
16
|
import { DOCUMENT } from '@angular/common';
|
|
15
17
|
|
|
@@ -178,11 +180,11 @@ class EntityStatus {
|
|
|
178
180
|
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
179
181
|
}
|
|
180
182
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
181
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityStatus, isStandalone: true, selector: "mt-entity-status", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n @if (statusValue(); as status) {\
|
|
183
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityStatus, isStandalone: true, selector: "mt-entity-status", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n @if (statusValue(); as status) {\n <span\n class=\"inline-flex items-center px-3 py-2 rounded-md text-xs font-semibold w-fit\"\n [style]=\"badgeStyle()\"\n >\n {{ statusLabel() }}\n </span>\n } @else {\n <span\n class=\"inline-flex items-center px-3 py-2 rounded-md text-xs font-semibold w-fit text-gray-500 bg-gray-100\"\n >\n {{ emptyLabel }}\n </span>\n }\n</mt-entity-field>\n", dependencies: [{ kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "configuration", "gap"] }] });
|
|
182
184
|
}
|
|
183
185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityStatus, decorators: [{
|
|
184
186
|
type: Component,
|
|
185
|
-
args: [{ selector: 'mt-entity-status', standalone: true, imports: [EntityField], template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n @if (statusValue(); as status) {\
|
|
187
|
+
args: [{ selector: 'mt-entity-status', standalone: true, imports: [EntityField], template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n @if (statusValue(); as status) {\n <span\n class=\"inline-flex items-center px-3 py-2 rounded-md text-xs font-semibold w-fit\"\n [style]=\"badgeStyle()\"\n >\n {{ statusLabel() }}\n </span>\n } @else {\n <span\n class=\"inline-flex items-center px-3 py-2 rounded-md text-xs font-semibold w-fit text-gray-500 bg-gray-100\"\n >\n {{ emptyLabel }}\n </span>\n }\n</mt-entity-field>\n" }]
|
|
186
188
|
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }] } });
|
|
187
189
|
|
|
188
190
|
class EntityUser {
|
|
@@ -270,11 +272,11 @@ class EntityPercentage {
|
|
|
270
272
|
return Number.isNaN(numericValue) ? null : numericValue;
|
|
271
273
|
}
|
|
272
274
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPercentage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
273
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPercentage, isStandalone: true, selector: "mt-entity-percentage", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, rawValue: { classPropertyName: "rawValue", publicName: "rawValue", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-col gap-1\">\
|
|
275
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPercentage, isStandalone: true, selector: "mt-entity-percentage", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, rawValue: { classPropertyName: "rawValue", publicName: "rawValue", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-col gap-1\">\n <div class=\"flex items-center justify-between\">\n @if (!hideName()) {\n <span class=\"text-xs font-semibold\">{{ displayName() }}</span>\n }\n <span class=\"text-xs font-bold\" [class.ms-auto]=\"hideName()\">{{\n displayValue()\n }}</span>\n </div>\n @if (hasNumericValue()) {\n <mt-progress\n [value]=\"numericValue()\"\n [showLabel]=\"false\"\n [height]=\"9\"\n [maxValue]=\"maxValue()\"\n [color]=\"progressColor()\"\n >\n </mt-progress>\n } @else {\n <div class=\"h-[9px] rounded-full bg-gray-200\"></div>\n }\n</div>\n", dependencies: [{ kind: "component", type: Progress, selector: "mt-progress", inputs: ["value", "mode", "showLabel", "unit", "color", "minValue", "maxValue", "height", "circleSize", "strokeWidth", "customClass"] }] });
|
|
274
276
|
}
|
|
275
277
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPercentage, decorators: [{
|
|
276
278
|
type: Component,
|
|
277
|
-
args: [{ selector: 'mt-entity-percentage', standalone: true, imports: [Progress], template: "<div class=\"flex flex-col gap-1\">\
|
|
279
|
+
args: [{ selector: 'mt-entity-percentage', standalone: true, imports: [Progress], template: "<div class=\"flex flex-col gap-1\">\n <div class=\"flex items-center justify-between\">\n @if (!hideName()) {\n <span class=\"text-xs font-semibold\">{{ displayName() }}</span>\n }\n <span class=\"text-xs font-bold\" [class.ms-auto]=\"hideName()\">{{\n displayValue()\n }}</span>\n </div>\n @if (hasNumericValue()) {\n <mt-progress\n [value]=\"numericValue()\"\n [showLabel]=\"false\"\n [height]=\"9\"\n [maxValue]=\"maxValue()\"\n [color]=\"progressColor()\"\n >\n </mt-progress>\n } @else {\n <div class=\"h-[9px] rounded-full bg-gray-200\"></div>\n }\n</div>\n" }]
|
|
278
280
|
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], rawValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "rawValue", required: false }] }] } });
|
|
279
281
|
|
|
280
282
|
class EntityCurrency {
|
|
@@ -641,6 +643,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
641
643
|
args: [{ selector: 'mt-entity-attachment', standalone: true, imports: [FormsModule, UploadField, Button, EntityField], template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"relaxed\"\r\n>\r\n @if (hasAttachments()) {\r\n @if (shape() === \"compact\") {\r\n <div class=\"flex flex-wrap items-center gap-2\">\r\n @for (\r\n attachment of attachments();\r\n track attachmentTrackBy($index, attachment)\r\n ) {\r\n <mt-button\r\n iconPos=\"top\"\r\n size=\"small\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [icon]=\"attachmentIcon(attachment)\"\r\n [tooltip]=\"attachmentTooltip(attachment)\"\r\n styleClass=\"h-9! w-9! rounded-lg!\"\r\n (onClick)=\"onCompactAttachmentClick($event, attachment)\"\r\n />\r\n }\r\n </div>\r\n } @else {\r\n <mt-upload-field\r\n class=\"w-full\"\r\n [ngModel]=\"uploadValue()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [shape]=\"'card'\"\r\n [multiple]=\"isMultiple()\"\r\n [readonly]=\"true\"\r\n [endPoint]=\"endPoint()\"\r\n [context]=\"context()\"\r\n />\r\n }\r\n } @else {\r\n <span class=\"text-sm font-semibold\">{{ empty }}</span>\r\n }\r\n</mt-entity-field>\r\n" }]
|
|
642
644
|
}], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], endPoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "endPoint", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }] } });
|
|
643
645
|
|
|
646
|
+
class EntityLeafDetails {
|
|
647
|
+
data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
648
|
+
leafValue = computed(() => {
|
|
649
|
+
const v = this.data().value;
|
|
650
|
+
if (v && typeof v === 'object' && !Array.isArray(v) && 'levelId' in v) {
|
|
651
|
+
return v;
|
|
652
|
+
}
|
|
653
|
+
return null;
|
|
654
|
+
}, ...(ngDevMode ? [{ debugName: "leafValue" }] : /* istanbul ignore next */ []));
|
|
655
|
+
/** Label shown below the badges: "Level Name (total)" */
|
|
656
|
+
labelWithTotal = computed(() => {
|
|
657
|
+
const leaf = this.leafValue();
|
|
658
|
+
const name = this.data().name ?? leaf?.levelName ?? '';
|
|
659
|
+
if (!leaf)
|
|
660
|
+
return name;
|
|
661
|
+
const total = leaf.statuses.reduce((sum, s) => sum + s.count, 0);
|
|
662
|
+
return `${name} (${total})`;
|
|
663
|
+
}, ...(ngDevMode ? [{ debugName: "labelWithTotal" }] : /* istanbul ignore next */ []));
|
|
664
|
+
/** Always force label to top position, merged with any saved config */
|
|
665
|
+
labelTopConfig = computed(() => ({
|
|
666
|
+
...this.data().configuration,
|
|
667
|
+
labelPosition: 'top',
|
|
668
|
+
}), ...(ngDevMode ? [{ debugName: "labelTopConfig" }] : /* istanbul ignore next */ []));
|
|
669
|
+
statusColor(color) {
|
|
670
|
+
return color ?? '#9CA3AF';
|
|
671
|
+
}
|
|
672
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityLeafDetails, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
673
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityLeafDetails, isStandalone: true, selector: "mt-entity-leaf-details", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\n [label]=\"labelWithTotal()\"\n [configuration]=\"labelTopConfig()\"\n gap=\"normal\"\n>\n @if (leafValue(); as leaf) {\n <div class=\"flex flex-wrap gap-1.5\">\n @for (status of leaf.statuses; track status.key) {\n <div\n class=\"flex items-center justify-center min-w-7 h-7 px-1.5 rounded-lg text-xs font-bold text-white\"\n [style.background-color]=\"statusColor(status.color)\"\n [pTooltip]=\"status.display\"\n tooltipPosition=\"top\"\n >\n {{ status.count }}\n </div>\n }\n @if (leaf.statuses.length === 0) {\n <span class=\"text-sm text-muted-color\">\u2014</span>\n }\n </div>\n }\n</mt-entity-field>\n", dependencies: [{ kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "configuration", "gap"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1$1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
674
|
+
}
|
|
675
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityLeafDetails, decorators: [{
|
|
676
|
+
type: Component,
|
|
677
|
+
args: [{ selector: 'mt-entity-leaf-details', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [EntityField, TooltipModule], template: "<mt-entity-field\n [label]=\"labelWithTotal()\"\n [configuration]=\"labelTopConfig()\"\n gap=\"normal\"\n>\n @if (leafValue(); as leaf) {\n <div class=\"flex flex-wrap gap-1.5\">\n @for (status of leaf.statuses; track status.key) {\n <div\n class=\"flex items-center justify-center min-w-7 h-7 px-1.5 rounded-lg text-xs font-bold text-white\"\n [style.background-color]=\"statusColor(status.color)\"\n [pTooltip]=\"status.display\"\n tooltipPosition=\"top\"\n >\n {{ status.count }}\n </div>\n }\n @if (leaf.statuses.length === 0) {\n <span class=\"text-sm text-muted-color\">\u2014</span>\n }\n </div>\n }\n</mt-entity-field>\n" }]
|
|
678
|
+
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }] } });
|
|
679
|
+
|
|
644
680
|
class EntityPreview {
|
|
645
681
|
/** Single entity data to display */
|
|
646
682
|
data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
@@ -650,7 +686,7 @@ class EntityPreview {
|
|
|
650
686
|
return viewType === 'LookupMatrix' ? 'Lookup' : viewType;
|
|
651
687
|
}, ...(ngDevMode ? [{ debugName: "previewType" }] : /* istanbul ignore next */ []));
|
|
652
688
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPreview, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
653
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPreview, isStandalone: true, selector: "mt-entity-preview", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "w-full" }, ngImport: i0, template: "@switch (previewType()) {\r\n @case (\"Text\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"LongText\") {\r\n <mt-entity-long-text [data]=\"data()\" />\r\n }\r\n @case (\"Date\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"DateTime\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"User\") {\r\n <mt-entity-user [data]=\"data()\" />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-entity-percentage [data]=\"data()\" />\r\n }\r\n @case (\"Currency\") {\r\n <mt-entity-currency [data]=\"data()\" />\r\n }\r\n @case (\"Checkbox\") {\r\n <mt-entity-checkbox [data]=\"data()\" />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-entity-lookup [data]=\"data()\" />\r\n }\r\n @case (\"Status\") {\r\n <mt-entity-status [data]=\"data()\" />\r\n }\r\n @case (\"Attachment\") {\r\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\r\n }\r\n @default {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n}\r\n", dependencies: [{ kind: "component", type: EntityText, selector: "mt-entity-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityLongText, selector: "mt-entity-long-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityDate, selector: "mt-entity-date", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityUser, selector: "mt-entity-user", inputs: ["data"] }, { kind: "component", type: EntityPercentage, selector: "mt-entity-percentage", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityCurrency, selector: "mt-entity-currency", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityCheckbox, selector: "mt-entity-checkbox", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityLookup, selector: "mt-entity-lookup", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityAttachment, selector: "mt-entity-attachment", inputs: ["data", "name", "shape", "value", "endPoint", "context"] }, { kind: "component", type: EntityStatus, selector: "mt-entity-status", inputs: ["data", "name", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
689
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPreview, isStandalone: true, selector: "mt-entity-preview", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "w-full" }, ngImport: i0, template: "@switch (previewType()) {\r\n @case (\"Text\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"LongText\") {\r\n <mt-entity-long-text [data]=\"data()\" />\r\n }\r\n @case (\"Date\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"DateTime\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"User\") {\r\n <mt-entity-user [data]=\"data()\" />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-entity-percentage [data]=\"data()\" />\r\n }\r\n @case (\"Currency\") {\r\n <mt-entity-currency [data]=\"data()\" />\r\n }\r\n @case (\"Checkbox\") {\r\n <mt-entity-checkbox [data]=\"data()\" />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-entity-lookup [data]=\"data()\" />\r\n }\r\n @case (\"Status\") {\r\n <mt-entity-status [data]=\"data()\" />\r\n }\r\n @case (\"Attachment\") {\r\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\r\n }\r\n @case (\"LeafDetails\") {\r\n <mt-entity-leaf-details [data]=\"data()\" />\r\n }\r\n @default {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n}\r\n", dependencies: [{ kind: "component", type: EntityText, selector: "mt-entity-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityLongText, selector: "mt-entity-long-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityDate, selector: "mt-entity-date", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityUser, selector: "mt-entity-user", inputs: ["data"] }, { kind: "component", type: EntityPercentage, selector: "mt-entity-percentage", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityCurrency, selector: "mt-entity-currency", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityCheckbox, selector: "mt-entity-checkbox", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityLookup, selector: "mt-entity-lookup", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityAttachment, selector: "mt-entity-attachment", inputs: ["data", "name", "shape", "value", "endPoint", "context"] }, { kind: "component", type: EntityStatus, selector: "mt-entity-status", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityLeafDetails, selector: "mt-entity-leaf-details", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
654
690
|
}
|
|
655
691
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPreview, decorators: [{
|
|
656
692
|
type: Component,
|
|
@@ -665,9 +701,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
665
701
|
EntityLookup,
|
|
666
702
|
EntityAttachment,
|
|
667
703
|
EntityStatus,
|
|
704
|
+
EntityLeafDetails,
|
|
668
705
|
], host: {
|
|
669
706
|
class: 'w-full',
|
|
670
|
-
}, template: "@switch (previewType()) {\r\n @case (\"Text\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"LongText\") {\r\n <mt-entity-long-text [data]=\"data()\" />\r\n }\r\n @case (\"Date\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"DateTime\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"User\") {\r\n <mt-entity-user [data]=\"data()\" />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-entity-percentage [data]=\"data()\" />\r\n }\r\n @case (\"Currency\") {\r\n <mt-entity-currency [data]=\"data()\" />\r\n }\r\n @case (\"Checkbox\") {\r\n <mt-entity-checkbox [data]=\"data()\" />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-entity-lookup [data]=\"data()\" />\r\n }\r\n @case (\"Status\") {\r\n <mt-entity-status [data]=\"data()\" />\r\n }\r\n @case (\"Attachment\") {\r\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\r\n }\r\n @default {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n}\r\n" }]
|
|
707
|
+
}, template: "@switch (previewType()) {\r\n @case (\"Text\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"LongText\") {\r\n <mt-entity-long-text [data]=\"data()\" />\r\n }\r\n @case (\"Date\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"DateTime\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"User\") {\r\n <mt-entity-user [data]=\"data()\" />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-entity-percentage [data]=\"data()\" />\r\n }\r\n @case (\"Currency\") {\r\n <mt-entity-currency [data]=\"data()\" />\r\n }\r\n @case (\"Checkbox\") {\r\n <mt-entity-checkbox [data]=\"data()\" />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-entity-lookup [data]=\"data()\" />\r\n }\r\n @case (\"Status\") {\r\n <mt-entity-status [data]=\"data()\" />\r\n }\r\n @case (\"Attachment\") {\r\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\r\n }\r\n @case (\"LeafDetails\") {\r\n <mt-entity-leaf-details [data]=\"data()\" />\r\n }\r\n @default {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n}\r\n" }]
|
|
671
708
|
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], attachmentShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachmentShape", required: false }] }] } });
|
|
672
709
|
|
|
673
710
|
class EntitiesPreview {
|
|
@@ -869,5 +906,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
869
906
|
* Generated bundle index. Do not edit.
|
|
870
907
|
*/
|
|
871
908
|
|
|
872
|
-
export { EntitiesManage, EntitiesPreview, EntitiesResizeBase, EntityAttachment, EntityCheckbox, EntityCurrency, EntityDate, EntityField, EntityLongText, EntityLookup, EntityPercentage, EntityPreview, EntityStatus, EntityText, EntityUser };
|
|
909
|
+
export { EntitiesManage, EntitiesPreview, EntitiesResizeBase, EntityAttachment, EntityCheckbox, EntityCurrency, EntityDate, EntityField, EntityLeafDetails, EntityLongText, EntityLookup, EntityPercentage, EntityPreview, EntityStatus, EntityText, EntityUser };
|
|
873
910
|
//# sourceMappingURL=masterteam-components-entities.mjs.map
|