@shival99/z-ui 2.4.12 → 2.5.1
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/fesm2022/shival99-z-ui-components-z-media-player.mjs +10 -2
- package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-modal.mjs +8 -4
- package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-gallery.d.ts +4 -4
- package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
- package/types/shival99-z-ui-components-z-table.d.ts +1 -1
|
@@ -121,12 +121,20 @@ const MEDIA_PLAYER_VI_PLYR_TRANSLATIONS = {
|
|
|
121
121
|
Volume: 'Âm lượng',
|
|
122
122
|
};
|
|
123
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Vidstack infers the real type on its own (blob URLs -> `video/object`, otherwise a HEAD
|
|
126
|
+
* request) whenever it receives a falsy `type`, but only if we don't hand it a guess first —
|
|
127
|
+
* an explicit (even wrong) type always wins over that inference. So a genuinely unknown
|
|
128
|
+
* `video`/`audio` type must stay empty here rather than defaulting to a specific MIME type.
|
|
129
|
+
* The cast is required because Vidstack's own `MediaSrc` union only models the literal MIME
|
|
130
|
+
* types, not the empty-string "please infer" signal its runtime actually accepts.
|
|
131
|
+
*/
|
|
124
132
|
function mapSourceToProviderProps(source) {
|
|
125
133
|
switch (source.kind) {
|
|
126
134
|
case 'video':
|
|
127
|
-
return { src: source.src, type: source.type
|
|
135
|
+
return { src: source.src, type: (source.type ?? '') };
|
|
128
136
|
case 'audio':
|
|
129
|
-
return { src: source.src, type: source.type
|
|
137
|
+
return { src: source.src, type: (source.type ?? '') };
|
|
130
138
|
case 'hls':
|
|
131
139
|
return { src: source.src, type: 'application/x-mpegurl' };
|
|
132
140
|
case 'dash':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-media-player.mjs","sources":["../../../../libs/core-ui/components/z-media-player/z-media-player.define.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.utils.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.variants.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.component.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.component.html","../../../../libs/core-ui/components/z-media-player/shival99-z-ui-components-z-media-player.ts"],"sourcesContent":["import type { DefaultLayoutTranslations, PlyrLayoutTranslations } from 'vidstack';\nimport type { ZMediaPlayerConfig } from './z-media-player.types';\n\nexport const DEFAULT_MEDIA_PLAYER_CONFIG: ZMediaPlayerConfig = {\n autoPlay: false,\n loop: false,\n muted: false,\n volume: 1,\n playbackRate: 1,\n subtitles: [],\n thumbnailsVtt: '',\n chaptersVtt: '',\n playsInline: true,\n};\n\n/** Vietnamese translation of Vidstack's Default Layout UI words, applied when the app language is `vi`. */\nexport const MEDIA_PLAYER_VI_DEFAULT_TRANSLATIONS: Partial<DefaultLayoutTranslations> = {\n Announcements: 'Thông báo',\n Accessibility: 'Trợ năng',\n AirPlay: 'AirPlay',\n Audio: 'Âm thanh',\n Auto: 'Tự động',\n Boost: 'Tăng cường',\n Captions: 'Phụ đề',\n 'Caption Styles': 'Kiểu phụ đề',\n 'Captions look like this': 'Phụ đề trông như thế này',\n Chapters: 'Chương',\n 'Closed-Captions Off': 'Tắt phụ đề',\n 'Closed-Captions On': 'Bật phụ đề',\n Connected: 'Đã kết nối',\n Continue: 'Tiếp tục',\n Connecting: 'Đang kết nối',\n Default: 'Mặc định',\n Disabled: 'Đã tắt',\n Disconnected: 'Đã ngắt kết nối',\n 'Display Background': 'Nền hiển thị',\n Download: 'Tải xuống',\n 'Enter Fullscreen': 'Vào toàn màn hình',\n 'Enter PiP': 'Vào chế độ nổi',\n 'Exit Fullscreen': 'Thoát toàn màn hình',\n 'Exit PiP': 'Thoát chế độ nổi',\n Font: 'Phông chữ',\n Family: 'Kiểu chữ',\n Fullscreen: 'Toàn màn hình',\n 'Google Cast': 'Google Cast',\n 'Keyboard Animations': 'Hiệu ứng phím tắt',\n LIVE: 'TRỰC TIẾP',\n Loop: 'Lặp lại',\n Mute: 'Tắt tiếng',\n Normal: 'Bình thường',\n Off: 'Tắt',\n Pause: 'Tạm dừng',\n Play: 'Phát',\n Playback: 'Phát lại',\n PiP: 'Nổi',\n Quality: 'Chất lượng',\n Replay: 'Phát lại',\n Reset: 'Đặt lại',\n 'Seek Backward': 'Tua lùi',\n 'Seek Forward': 'Tua tới',\n Seek: 'Tua',\n Settings: 'Cài đặt',\n 'Skip To Live': 'Về trực tiếp',\n Speed: 'Tốc độ',\n Size: 'Kích thước',\n Color: 'Màu sắc',\n Opacity: 'Độ mờ',\n Shadow: 'Đổ bóng',\n Text: 'Văn bản',\n 'Text Background': 'Nền văn bản',\n Track: 'Track',\n Unmute: 'Bật tiếng',\n Volume: 'Âm lượng',\n};\n\n/** Vietnamese translation of Vidstack's Plyr Layout UI words, applied when the app language is `vi`. */\nexport const MEDIA_PLAYER_VI_PLYR_TRANSLATIONS: Partial<PlyrLayoutTranslations> = {\n Ad: 'Quảng cáo',\n All: 'Tất cả',\n AirPlay: 'AirPlay',\n Audio: 'Âm thanh',\n Auto: 'Tự động',\n Buffered: 'Đã tải đệm',\n Captions: 'Phụ đề',\n 'Current time': 'Thời gian hiện tại',\n Default: 'Mặc định',\n 'Disable captions': 'Tắt phụ đề',\n Disabled: 'Đã tắt',\n Download: 'Tải xuống',\n Duration: 'Thời lượng',\n 'Enable captions': 'Bật phụ đề',\n Enabled: 'Đã bật',\n End: 'Kết thúc',\n 'Enter Fullscreen': 'Vào toàn màn hình',\n 'Exit Fullscreen': 'Thoát toàn màn hình',\n Forward: 'Tua tới',\n 'Go back to previous menu': 'Quay lại menu trước',\n LIVE: 'TRỰC TIẾP',\n Loop: 'Lặp lại',\n Mute: 'Tắt tiếng',\n Normal: 'Bình thường',\n Pause: 'Tạm dừng',\n 'Enter PiP': 'Vào chế độ nổi',\n 'Exit PiP': 'Thoát chế độ nổi',\n Play: 'Phát',\n Played: 'Đã phát',\n Quality: 'Chất lượng',\n Reset: 'Đặt lại',\n Restart: 'Phát lại từ đầu',\n Rewind: 'Tua lùi',\n Seek: 'Tua',\n Settings: 'Cài đặt',\n Speed: 'Tốc độ',\n Start: 'Bắt đầu',\n Unmute: 'Bật tiếng',\n Volume: 'Âm lượng',\n};\n","import type { MediaSrc } from 'vidstack';\nimport type {\n ZMediaPlayerSource,\n ZMediaPlayerSnapshot,\n ZMediaPlayerStateChange,\n ZMediaPlayerStateEvent,\n ZMediaPlayerVidstackState,\n} from './z-media-player.types';\n\nexport function mapSourceToProviderProps(source: ZMediaPlayerSource): MediaSrc {\n switch (source.kind) {\n case 'video':\n return { src: source.src, type: source.type || 'video/mp4' };\n case 'audio':\n return { src: source.src, type: source.type || 'audio/mpeg' };\n case 'hls':\n return { src: source.src, type: 'application/x-mpegurl' };\n case 'dash':\n return { src: source.src, type: 'application/dash+xml' };\n case 'youtube':\n return { src: source.src, type: 'video/youtube' };\n case 'vimeo':\n return { src: source.src, type: 'video/vimeo' };\n }\n}\n\n/**\n * Vidstack's own thumbnail-storyboard loader only resolves relative sprite paths inside a VTT\n * file against the VTT's own URL when that URL is itself absolute (`^https?:`); a root-relative\n * path like `/assets/foo.vtt` makes it silently fall back to resolving against the current page\n * URL instead, breaking the sprite image path. Resolving to an absolute URL up front avoids that.\n */\nexport function resolveAbsoluteUrl(url: string | null | undefined): string | null {\n if (!url) {\n return null;\n }\n try {\n return new URL(url, document.baseURI).href;\n } catch {\n return url;\n }\n}\n\n/** Assigns non-`undefined` entries of `source` onto `target`, leaving its own defaults for omitted keys. */\nexport function assignDefinedProperties<T extends object>(target: T, source: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(source)) {\n if (value !== undefined) {\n (target as Record<string, unknown>)[key] = value;\n }\n }\n}\n\nexport function buildStateChange(\n event: ZMediaPlayerStateEvent,\n state: ZMediaPlayerVidstackState,\n activeSourceLabel: string | null\n): ZMediaPlayerStateChange {\n const bufferedEnd =\n typeof state.bufferedEnd === 'number'\n ? state.bufferedEnd\n : state.buffered && state.buffered.length > 0\n ? state.buffered.end(state.buffered.length - 1)\n : 0;\n const snapshot: ZMediaPlayerSnapshot = {\n paused: state.paused,\n playing: state.playing,\n ended: state.ended,\n waiting: state.waiting,\n currentTime: state.currentTime,\n duration: state.duration,\n volume: state.volume,\n muted: state.muted,\n playbackRate: state.playbackRate,\n bufferedRatio: state.duration > 0 ? Math.min(1, bufferedEnd / state.duration) : 0,\n fullscreen: state.fullscreen,\n theaterMode: false,\n pictureInPicture: state.pictureInPicture,\n activeSourceLabel,\n activeCaptionsLabel: state.textTrack?.label ?? null,\n };\n\n return { event, state: snapshot };\n}\n","import { cva } from 'class-variance-authority';\n\nexport const zMediaPlayerVariants = cva(\n 'relative overflow-hidden bg-black select-none transition-all duration-300 w-full flex flex-col justify-center items-center group/player outline-none',\n {\n variants: {\n zLayout: {\n default: 'aspect-video rounded-sm shadow-sm border border-border max-w-5xl mx-auto',\n },\n },\n defaultVariants: {\n zLayout: 'default',\n },\n }\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ZThemeService, ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { DefaultLayoutTranslations, PlyrLayoutTranslations } from 'vidstack';\nimport type { MediaPlayerElement } from 'vidstack/elements';\nimport {\n DEFAULT_MEDIA_PLAYER_CONFIG,\n MEDIA_PLAYER_VI_DEFAULT_TRANSLATIONS,\n MEDIA_PLAYER_VI_PLYR_TRANSLATIONS,\n} from './z-media-player.define';\nimport type {\n ZMediaPlayerConfig,\n ZMediaPlayerDefaultLayoutConfig,\n ZMediaPlayerError,\n ZMediaPlayerPlyrLayoutConfig,\n ZMediaPlayerSkin,\n ZMediaPlayerSnapshot,\n ZMediaPlayerSource,\n ZMediaPlayerStateChange,\n ZMediaPlayerStateEvent,\n} from './z-media-player.types';\nimport {\n assignDefinedProperties,\n buildStateChange,\n mapSourceToProviderProps,\n resolveAbsoluteUrl,\n} from './z-media-player.utils';\nimport { zMediaPlayerVariants } from './z-media-player.variants';\n\nimport 'vidstack/player';\nimport 'vidstack/player/ui';\nimport 'vidstack/player/layouts/default';\nimport 'vidstack/player/layouts/plyr';\n\n/**\n * Video, audio, HLS, DASH, YouTube, and Vimeo use Vidstack's Default or Plyr Layout skin\n * (`zSkin`). `zConfig` mirrors Vidstack's own `<media-player>` props; `zDefaultLayoutConfig` /\n * `zPlyrLayoutConfig` mirror the props of the currently active skin.\n */\n@Component({\n selector: 'z-media-player',\n standalone: true,\n templateUrl: './z-media-player.component.html',\n styleUrl: './z-media-player.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'zClasses()',\n },\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ZMediaPlayerComponent {\n private readonly _themeService = inject(ZThemeService, { optional: true });\n private readonly _translateService = inject(ZTranslateService, { optional: true });\n\n public readonly class = input<ClassValue>('');\n public readonly zSources = input.required<ZMediaPlayerSource[]>();\n public readonly zConfig = input<Partial<ZMediaPlayerConfig>>({});\n public readonly zSkin = input<ZMediaPlayerSkin>('default');\n public readonly zDefaultLayoutConfig = input<ZMediaPlayerDefaultLayoutConfig>({});\n public readonly zPlyrLayoutConfig = input<ZMediaPlayerPlyrLayoutConfig>({});\n public readonly zStateChange = output<ZMediaPlayerStateChange>();\n public readonly zError = output<ZMediaPlayerError>();\n\n protected readonly playerElement = viewChild<ElementRef<MediaPlayerElement>>('playerElement');\n protected readonly layoutElement = viewChild<ElementRef<HTMLElement>>('layoutElement');\n protected readonly activeSource = computed<ZMediaPlayerSource | null>(() => {\n const sources = this.zSources();\n return sources.find(source => source.default) ?? sources[0] ?? null;\n });\n\n protected readonly isAudioSource = computed(() => this.activeSource()?.kind === 'audio');\n protected readonly isPlyrSkin = computed(() => this.zSkin() === 'plyr');\n protected readonly colorScheme = computed<'light' | 'dark' | 'system'>(() => {\n if (!this._themeService) {\n return 'system';\n }\n return this._themeService.isDark() ? 'dark' : 'light';\n });\n\n private readonly _isVietnamese = computed(() => (this._translateService?.currentLang() ?? 'en') === 'vi');\n protected readonly defaultLayoutTranslations = computed<Partial<DefaultLayoutTranslations> | null>(() => {\n const base = this._isVietnamese() ? MEDIA_PLAYER_VI_DEFAULT_TRANSLATIONS : null;\n const override = this.zDefaultLayoutConfig().translations;\n return base || override ? { ...base, ...override } : null;\n });\n\n protected readonly plyrLayoutTranslations = computed<Partial<PlyrLayoutTranslations> | null>(() => {\n const base = this._isVietnamese() ? MEDIA_PLAYER_VI_PLYR_TRANSLATIONS : null;\n const override = this.zPlyrLayoutConfig().translations;\n return base || override ? { ...base, ...override } : null;\n });\n\n protected readonly state = signal<ZMediaPlayerSnapshot>({\n paused: true,\n playing: false,\n ended: false,\n waiting: false,\n currentTime: 0,\n duration: 0,\n volume: DEFAULT_MEDIA_PLAYER_CONFIG.volume ?? 1,\n muted: DEFAULT_MEDIA_PLAYER_CONFIG.muted ?? false,\n playbackRate: DEFAULT_MEDIA_PLAYER_CONFIG.playbackRate ?? 1,\n bufferedRatio: 0,\n fullscreen: false,\n theaterMode: false,\n pictureInPicture: false,\n activeSourceLabel: null,\n activeCaptionsLabel: null,\n });\n\n protected readonly zClasses = computed(() => zMergeClasses(zMediaPlayerVariants(), this.class()));\n\n constructor() {\n effect(() => {\n const player = this.playerElement()?.nativeElement;\n const sources = this.zSources();\n const source = this.activeSource();\n if (!player || !source || sources.length === 0) {\n return;\n }\n\n const {\n subtitles: _subtitles,\n thumbnailsVtt: _thumbnailsVtt,\n chaptersVtt: _chaptersVtt,\n ...playerProps\n } = {\n ...DEFAULT_MEDIA_PLAYER_CONFIG,\n ...this.zConfig(),\n };\n const orderedSources = [...sources].sort(\n (left, right) => Number(Boolean(right.default)) - Number(Boolean(left.default))\n );\n const providerSources = orderedSources.map(mapSourceToProviderProps);\n player.src = providerSources.length === 1 ? providerSources[0] : providerSources;\n assignDefinedProperties(player, playerProps);\n });\n\n effect(() => {\n const layout = this.layoutElement()?.nativeElement;\n if (!layout) {\n return;\n }\n\n const thumbnails = resolveAbsoluteUrl(this.zConfig().thumbnailsVtt);\n if (this.isPlyrSkin()) {\n assignDefinedProperties(layout, {\n thumbnails,\n translations: this.plyrLayoutTranslations(),\n ...this.zPlyrLayoutConfig(),\n });\n return;\n }\n\n assignDefinedProperties(layout, {\n thumbnails,\n colorScheme: this.colorScheme(),\n translations: this.defaultLayoutTranslations(),\n ...this.zDefaultLayoutConfig(),\n });\n });\n\n effect(onCleanup => {\n const player = this.playerElement()?.nativeElement;\n if (!player) {\n return;\n }\n\n const stateSubscription = player.subscribe(nextState => this._syncState(nextState));\n const eventMap: Readonly<Record<string, ZMediaPlayerStateEvent>> = {\n 'loaded-data': 'loaded',\n play: 'play',\n pause: 'pause',\n ended: 'ended',\n 'time-update': 'time-update',\n 'volume-change': 'volume-change',\n 'rate-change': 'rate-change',\n 'fullscreen-change': 'fullscreen-change',\n 'picture-in-picture-change': 'pip-change',\n 'source-change': 'source-change',\n 'text-track-change': 'subtitle-change',\n waiting: 'waiting',\n 'can-play': 'can-play',\n };\n const listeners = Object.entries(eventMap).map(([eventName, event]) => {\n const listener = () => this._emitStateChange(event);\n player.addEventListener(eventName, listener);\n return () => player.removeEventListener(eventName, listener);\n });\n const onError = (event: Event) => this._emitError(event);\n const onProviderChange = (event: Event) => this._configureStreamingProvider(event);\n player.addEventListener('error', onError);\n player.addEventListener('provider-change', onProviderChange);\n\n onCleanup(() => {\n stateSubscription();\n listeners.forEach(cleanup => cleanup());\n player.removeEventListener('error', onError);\n player.removeEventListener('provider-change', onProviderChange);\n });\n });\n }\n\n private _syncState(nextState: unknown): void {\n const player = this.playerElement()?.nativeElement;\n if (!player) {\n return;\n }\n\n const patch = nextState && typeof nextState === 'object' ? nextState : {};\n const state = { ...player.state, ...patch } as Parameters<typeof buildStateChange>[1];\n this.state.set(buildStateChange('time-update', state, this.activeSource()?.label ?? null).state);\n }\n\n private _emitStateChange(event: ZMediaPlayerStateEvent): void {\n const player = this.playerElement()?.nativeElement;\n if (!player) {\n return;\n }\n\n const change = buildStateChange(\n event,\n player.state as Parameters<typeof buildStateChange>[1],\n this.activeSource()?.label ?? null\n );\n this.state.set(change.state);\n this.zStateChange.emit(change);\n }\n\n private _emitError(event: Event): void {\n const { detail } = event as CustomEvent<unknown>;\n const error = detail && typeof detail === 'object' ? (detail as Record<string, unknown>) : {};\n this.zError.emit({\n message: typeof error['message'] === 'string' ? error['message'] : 'Media playback error',\n code: typeof error['code'] === 'string' || typeof error['code'] === 'number' ? error['code'] : undefined,\n source: 'provider',\n raw: detail,\n });\n }\n\n private _configureStreamingProvider(event: Event): void {\n const source = this.activeSource();\n const { detail } = event as CustomEvent<unknown>;\n if (!source || !detail || typeof detail !== 'object') {\n return;\n }\n\n const provider = detail as { library?: unknown };\n if (source.kind === 'hls') {\n provider.library = () => import('hls.js');\n return;\n }\n if (source.kind === 'dash') {\n provider.library = () => import('dashjs');\n }\n }\n}\n","<media-player #playerElement>\n <media-provider>\n @for (subtitle of zConfig().subtitles ?? []; track subtitle.src) {\n <track\n kind=\"subtitles\"\n [label]=\"subtitle.label\"\n [src]=\"subtitle.src\"\n [srclang]=\"subtitle.srclang\"\n [default]=\"subtitle.default ?? false\" />\n }\n @if (zConfig().chaptersVtt) {\n <track kind=\"chapters\" [src]=\"zConfig().chaptersVtt!\" />\n }\n </media-provider>\n\n @if (isPlyrSkin()) {\n <media-plyr-layout #layoutElement></media-plyr-layout>\n } @else if (isAudioSource()) {\n <media-audio-layout #layoutElement></media-audio-layout>\n } @else {\n <media-video-layout #layoutElement></media-video-layout>\n }\n</media-player>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAGO,MAAM,2BAA2B,GAAuB;AAC7D,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,WAAW,EAAE,IAAI;CAClB;AAED;AACO,MAAM,oCAAoC,GAAuC;AACtF,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,aAAa,EAAE,UAAU;AACzB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,gBAAgB,EAAE,aAAa;AAC/B,IAAA,yBAAyB,EAAE,0BAA0B;AACrD,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,qBAAqB,EAAE,YAAY;AACnC,IAAA,oBAAoB,EAAE,YAAY;AAClC,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,YAAY,EAAE,iBAAiB;AAC/B,IAAA,oBAAoB,EAAE,cAAc;AACpC,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,kBAAkB,EAAE,mBAAmB;AACvC,IAAA,WAAW,EAAE,gBAAgB;AAC7B,IAAA,iBAAiB,EAAE,qBAAqB;AACxC,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,UAAU,EAAE,eAAe;AAC3B,IAAA,aAAa,EAAE,aAAa;AAC5B,IAAA,qBAAqB,EAAE,mBAAmB;AAC1C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,cAAc,EAAE,cAAc;AAC9B,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,iBAAiB,EAAE,aAAa;AAChC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,MAAM,EAAE,UAAU;CACnB;AAED;AACO,MAAM,iCAAiC,GAAoC;AAChF,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,cAAc,EAAE,oBAAoB;AACpC,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,kBAAkB,EAAE,YAAY;AAChC,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,iBAAiB,EAAE,YAAY;AAC/B,IAAA,OAAO,EAAE,QAAQ;AACjB,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,kBAAkB,EAAE,mBAAmB;AACvC,IAAA,iBAAiB,EAAE,qBAAqB;AACxC,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,0BAA0B,EAAE,qBAAqB;AACjD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,WAAW,EAAE,gBAAgB;AAC7B,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,MAAM,EAAE,UAAU;CACnB;;AC3GK,SAAU,wBAAwB,CAAC,MAA0B,EAAA;AACjE,IAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW,EAAE;AAC9D,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE;AAC/D,QAAA,KAAK,KAAK;YACR,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,uBAAuB,EAAE;AAC3D,QAAA,KAAK,MAAM;YACT,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,sBAAsB,EAAE;AAC1D,QAAA,KAAK,SAAS;YACZ,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE;AACnD,QAAA,KAAK,OAAO;YACV,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE;;AAErD;AAEA;;;;;AAKG;AACG,SAAU,kBAAkB,CAAC,GAA8B,EAAA;IAC/D,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI;QACF,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI;IAC5C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,GAAG;IACZ;AACF;AAEA;AACM,SAAU,uBAAuB,CAAmB,MAAS,EAAE,MAA+B,EAAA;AAClG,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACjD,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACtB,YAAA,MAAkC,CAAC,GAAG,CAAC,GAAG,KAAK;QAClD;IACF;AACF;SAEgB,gBAAgB,CAC9B,KAA6B,EAC7B,KAAgC,EAChC,iBAAgC,EAAA;AAEhC,IAAA,MAAM,WAAW,GACf,OAAO,KAAK,CAAC,WAAW,KAAK;UACzB,KAAK,CAAC;UACN,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG;AAC1C,cAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;cAC5C,CAAC;AACT,IAAA,MAAM,QAAQ,GAAyB;QACrC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjF,UAAU,EAAE,KAAK,CAAC,UAAU;AAC5B,QAAA,WAAW,EAAE,KAAK;QAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,iBAAiB;AACjB,QAAA,mBAAmB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI;KACpD;AAED,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;AACnC;;AChFO,MAAM,oBAAoB,GAAG,GAAG,CACrC,sJAAsJ,EACtJ;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,0EAA0E;AACpF,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AACnB,KAAA;AACF,CAAA,CACF;;ACkCD;;;;AAIG;MAaU,qBAAqB,CAAA;IACf,aAAa,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzD,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAElE,KAAK,GAAG,KAAK,CAAa,EAAE;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAC,QAAQ;iFAAwB;IACjD,OAAO,GAAG,KAAK,CAA8B,EAAE;gFAAC;IAChD,KAAK,GAAG,KAAK,CAAmB,SAAS;8EAAC;IAC1C,oBAAoB,GAAG,KAAK,CAAkC,EAAE;6FAAC;IACjE,iBAAiB,GAAG,KAAK,CAA+B,EAAE;0FAAC;IAC3D,YAAY,GAAG,MAAM,EAA2B;IAChD,MAAM,GAAG,MAAM,EAAqB;IAEjC,aAAa,GAAG,SAAS,CAAiC,eAAe;sFAAC;IAC1E,aAAa,GAAG,SAAS,CAA0B,eAAe;sFAAC;AACnE,IAAA,YAAY,GAAG,QAAQ,CAA4B,MAAK;AACzE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;IACrE,CAAC;qFAAC;AAEiB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,KAAK,OAAO;sFAAC;IACrE,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,MAAM;mFAAC;AACpD,IAAA,WAAW,GAAG,QAAQ,CAA8B,MAAK;AAC1E,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAO,QAAQ;QACjB;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO;IACvD,CAAC;oFAAC;AAEe,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,IAAI,MAAM,IAAI;sFAAC;AACtF,IAAA,yBAAyB,GAAG,QAAQ,CAA4C,MAAK;AACtG,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,oCAAoC,GAAG,IAAI;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,YAAY;AACzD,QAAA,OAAO,IAAI,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;IAC3D,CAAC;kGAAC;AAEiB,IAAA,sBAAsB,GAAG,QAAQ,CAAyC,MAAK;AAChG,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,iCAAiC,GAAG,IAAI;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY;AACtD,QAAA,OAAO,IAAI,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;IAC3D,CAAC;+FAAC;IAEiB,KAAK,GAAG,MAAM,CAAuB;AACtD,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,MAAM,EAAE,2BAA2B,CAAC,MAAM,IAAI,CAAC;AAC/C,QAAA,KAAK,EAAE,2BAA2B,CAAC,KAAK,IAAI,KAAK;AACjD,QAAA,YAAY,EAAE,2BAA2B,CAAC,YAAY,IAAI,CAAC;AAC3D,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,gBAAgB,EAAE,KAAK;AACvB,QAAA,iBAAiB,EAAE,IAAI;AACvB,QAAA,mBAAmB,EAAE,IAAI;AAC1B,KAAA;8EAAC;AAEiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,aAAa,CAAC,oBAAoB,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;iFAAC;AAEjG,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AAClD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9C;YACF;AAEA,YAAA,MAAM,EACJ,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,EAC7B,WAAW,EAAE,YAAY,EACzB,GAAG,WAAW,EACf,GAAG;AACF,gBAAA,GAAG,2BAA2B;gBAC9B,GAAG,IAAI,CAAC,OAAO,EAAE;aAClB;AACD,YAAA,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAChF;YACD,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACpE,YAAA,MAAM,CAAC,GAAG,GAAG,eAAe,CAAC,MAAM,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe;AAChF,YAAA,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;YAClD,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;YAEA,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC;AACnE,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrB,uBAAuB,CAAC,MAAM,EAAE;oBAC9B,UAAU;AACV,oBAAA,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAAE;oBAC3C,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC5B,iBAAA,CAAC;gBACF;YACF;YAEA,uBAAuB,CAAC,MAAM,EAAE;gBAC9B,UAAU;AACV,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,YAAY,EAAE,IAAI,CAAC,yBAAyB,EAAE;gBAC9C,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC/B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,SAAS,IAAG;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;YAClD,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;AAEA,YAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACnF,YAAA,MAAM,QAAQ,GAAqD;AACjE,gBAAA,aAAa,EAAE,QAAQ;AACvB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,eAAe,EAAE,eAAe;AAChC,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,mBAAmB,EAAE,mBAAmB;AACxC,gBAAA,2BAA2B,EAAE,YAAY;AACzC,gBAAA,eAAe,EAAE,eAAe;AAChC,gBAAA,mBAAmB,EAAE,iBAAiB;AACtC,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,UAAU,EAAE,UAAU;aACvB;AACD,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,KAAI;gBACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACnD,gBAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAC5C,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC9D,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,OAAO,GAAG,CAAC,KAAY,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACxD,YAAA,MAAM,gBAAgB,GAAG,CAAC,KAAY,KAAK,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;AAClF,YAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AACzC,YAAA,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;YAE5D,SAAS,CAAC,MAAK;AACb,gBAAA,iBAAiB,EAAE;gBACnB,SAAS,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;AACvC,gBAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC5C,gBAAA,MAAM,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;AACjE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,UAAU,CAAC,SAAkB,EAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;QAClD,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,EAAE;QACzE,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,KAAK,EAA4C;QACrF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC;IAClG;AAEQ,IAAA,gBAAgB,CAAC,KAA6B,EAAA;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;QAClD,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAC7B,KAAK,EACL,MAAM,CAAC,KAA+C,EACtD,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,IAAI,IAAI,CACnC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAChC;AAEQ,IAAA,UAAU,CAAC,KAAY,EAAA;AAC7B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAA6B;AAChD,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,GAAI,MAAkC,GAAG,EAAE;AAC7F,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,OAAO,EAAE,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,sBAAsB;YACzF,IAAI,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS;AACxG,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,GAAG,EAAE,MAAM;AACZ,SAAA,CAAC;IACJ;AAEQ,IAAA,2BAA2B,CAAC,KAAY,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAA6B;QAChD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YACpD;QACF;QAEA,MAAM,QAAQ,GAAG,MAA+B;AAChD,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;YACzB,QAAQ,CAAC,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC;YACzC;QACF;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC1B,QAAQ,CAAC,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC;QAC3C;IACF;uGA7MW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ouCCjElC,wuBAuBA,EAAA,MAAA,EAAA,CAAA,0UAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FD0Ca,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,SAAS,EAAE,YAAY;qBACxB,EAAA,OAAA,EACQ,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,wuBAAA,EAAA,MAAA,EAAA,CAAA,0UAAA,CAAA,EAAA;AAe4C,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,eAAe,uEACtB,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE/EvF;;AAEG;;"}
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-media-player.mjs","sources":["../../../../libs/core-ui/components/z-media-player/z-media-player.define.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.utils.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.variants.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.component.ts","../../../../libs/core-ui/components/z-media-player/z-media-player.component.html","../../../../libs/core-ui/components/z-media-player/shival99-z-ui-components-z-media-player.ts"],"sourcesContent":["import type { DefaultLayoutTranslations, PlyrLayoutTranslations } from 'vidstack';\nimport type { ZMediaPlayerConfig } from './z-media-player.types';\n\nexport const DEFAULT_MEDIA_PLAYER_CONFIG: ZMediaPlayerConfig = {\n autoPlay: false,\n loop: false,\n muted: false,\n volume: 1,\n playbackRate: 1,\n subtitles: [],\n thumbnailsVtt: '',\n chaptersVtt: '',\n playsInline: true,\n};\n\n/** Vietnamese translation of Vidstack's Default Layout UI words, applied when the app language is `vi`. */\nexport const MEDIA_PLAYER_VI_DEFAULT_TRANSLATIONS: Partial<DefaultLayoutTranslations> = {\n Announcements: 'Thông báo',\n Accessibility: 'Trợ năng',\n AirPlay: 'AirPlay',\n Audio: 'Âm thanh',\n Auto: 'Tự động',\n Boost: 'Tăng cường',\n Captions: 'Phụ đề',\n 'Caption Styles': 'Kiểu phụ đề',\n 'Captions look like this': 'Phụ đề trông như thế này',\n Chapters: 'Chương',\n 'Closed-Captions Off': 'Tắt phụ đề',\n 'Closed-Captions On': 'Bật phụ đề',\n Connected: 'Đã kết nối',\n Continue: 'Tiếp tục',\n Connecting: 'Đang kết nối',\n Default: 'Mặc định',\n Disabled: 'Đã tắt',\n Disconnected: 'Đã ngắt kết nối',\n 'Display Background': 'Nền hiển thị',\n Download: 'Tải xuống',\n 'Enter Fullscreen': 'Vào toàn màn hình',\n 'Enter PiP': 'Vào chế độ nổi',\n 'Exit Fullscreen': 'Thoát toàn màn hình',\n 'Exit PiP': 'Thoát chế độ nổi',\n Font: 'Phông chữ',\n Family: 'Kiểu chữ',\n Fullscreen: 'Toàn màn hình',\n 'Google Cast': 'Google Cast',\n 'Keyboard Animations': 'Hiệu ứng phím tắt',\n LIVE: 'TRỰC TIẾP',\n Loop: 'Lặp lại',\n Mute: 'Tắt tiếng',\n Normal: 'Bình thường',\n Off: 'Tắt',\n Pause: 'Tạm dừng',\n Play: 'Phát',\n Playback: 'Phát lại',\n PiP: 'Nổi',\n Quality: 'Chất lượng',\n Replay: 'Phát lại',\n Reset: 'Đặt lại',\n 'Seek Backward': 'Tua lùi',\n 'Seek Forward': 'Tua tới',\n Seek: 'Tua',\n Settings: 'Cài đặt',\n 'Skip To Live': 'Về trực tiếp',\n Speed: 'Tốc độ',\n Size: 'Kích thước',\n Color: 'Màu sắc',\n Opacity: 'Độ mờ',\n Shadow: 'Đổ bóng',\n Text: 'Văn bản',\n 'Text Background': 'Nền văn bản',\n Track: 'Track',\n Unmute: 'Bật tiếng',\n Volume: 'Âm lượng',\n};\n\n/** Vietnamese translation of Vidstack's Plyr Layout UI words, applied when the app language is `vi`. */\nexport const MEDIA_PLAYER_VI_PLYR_TRANSLATIONS: Partial<PlyrLayoutTranslations> = {\n Ad: 'Quảng cáo',\n All: 'Tất cả',\n AirPlay: 'AirPlay',\n Audio: 'Âm thanh',\n Auto: 'Tự động',\n Buffered: 'Đã tải đệm',\n Captions: 'Phụ đề',\n 'Current time': 'Thời gian hiện tại',\n Default: 'Mặc định',\n 'Disable captions': 'Tắt phụ đề',\n Disabled: 'Đã tắt',\n Download: 'Tải xuống',\n Duration: 'Thời lượng',\n 'Enable captions': 'Bật phụ đề',\n Enabled: 'Đã bật',\n End: 'Kết thúc',\n 'Enter Fullscreen': 'Vào toàn màn hình',\n 'Exit Fullscreen': 'Thoát toàn màn hình',\n Forward: 'Tua tới',\n 'Go back to previous menu': 'Quay lại menu trước',\n LIVE: 'TRỰC TIẾP',\n Loop: 'Lặp lại',\n Mute: 'Tắt tiếng',\n Normal: 'Bình thường',\n Pause: 'Tạm dừng',\n 'Enter PiP': 'Vào chế độ nổi',\n 'Exit PiP': 'Thoát chế độ nổi',\n Play: 'Phát',\n Played: 'Đã phát',\n Quality: 'Chất lượng',\n Reset: 'Đặt lại',\n Restart: 'Phát lại từ đầu',\n Rewind: 'Tua lùi',\n Seek: 'Tua',\n Settings: 'Cài đặt',\n Speed: 'Tốc độ',\n Start: 'Bắt đầu',\n Unmute: 'Bật tiếng',\n Volume: 'Âm lượng',\n};\n","import type { AudioMimeType, MediaSrc, VideoMimeType } from 'vidstack';\nimport type {\n ZMediaPlayerSource,\n ZMediaPlayerSnapshot,\n ZMediaPlayerStateChange,\n ZMediaPlayerStateEvent,\n ZMediaPlayerVidstackState,\n} from './z-media-player.types';\n\n/**\n * Vidstack infers the real type on its own (blob URLs -> `video/object`, otherwise a HEAD\n * request) whenever it receives a falsy `type`, but only if we don't hand it a guess first —\n * an explicit (even wrong) type always wins over that inference. So a genuinely unknown\n * `video`/`audio` type must stay empty here rather than defaulting to a specific MIME type.\n * The cast is required because Vidstack's own `MediaSrc` union only models the literal MIME\n * types, not the empty-string \"please infer\" signal its runtime actually accepts.\n */\nexport function mapSourceToProviderProps(source: ZMediaPlayerSource): MediaSrc {\n switch (source.kind) {\n case 'video':\n return { src: source.src, type: (source.type ?? '') as VideoMimeType };\n case 'audio':\n return { src: source.src, type: (source.type ?? '') as AudioMimeType };\n case 'hls':\n return { src: source.src, type: 'application/x-mpegurl' };\n case 'dash':\n return { src: source.src, type: 'application/dash+xml' };\n case 'youtube':\n return { src: source.src, type: 'video/youtube' };\n case 'vimeo':\n return { src: source.src, type: 'video/vimeo' };\n }\n}\n\n/**\n * Vidstack's own thumbnail-storyboard loader only resolves relative sprite paths inside a VTT\n * file against the VTT's own URL when that URL is itself absolute (`^https?:`); a root-relative\n * path like `/assets/foo.vtt` makes it silently fall back to resolving against the current page\n * URL instead, breaking the sprite image path. Resolving to an absolute URL up front avoids that.\n */\nexport function resolveAbsoluteUrl(url: string | null | undefined): string | null {\n if (!url) {\n return null;\n }\n try {\n return new URL(url, document.baseURI).href;\n } catch {\n return url;\n }\n}\n\n/** Assigns non-`undefined` entries of `source` onto `target`, leaving its own defaults for omitted keys. */\nexport function assignDefinedProperties<T extends object>(target: T, source: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(source)) {\n if (value !== undefined) {\n (target as Record<string, unknown>)[key] = value;\n }\n }\n}\n\nexport function buildStateChange(\n event: ZMediaPlayerStateEvent,\n state: ZMediaPlayerVidstackState,\n activeSourceLabel: string | null\n): ZMediaPlayerStateChange {\n const bufferedEnd =\n typeof state.bufferedEnd === 'number'\n ? state.bufferedEnd\n : state.buffered && state.buffered.length > 0\n ? state.buffered.end(state.buffered.length - 1)\n : 0;\n const snapshot: ZMediaPlayerSnapshot = {\n paused: state.paused,\n playing: state.playing,\n ended: state.ended,\n waiting: state.waiting,\n currentTime: state.currentTime,\n duration: state.duration,\n volume: state.volume,\n muted: state.muted,\n playbackRate: state.playbackRate,\n bufferedRatio: state.duration > 0 ? Math.min(1, bufferedEnd / state.duration) : 0,\n fullscreen: state.fullscreen,\n theaterMode: false,\n pictureInPicture: state.pictureInPicture,\n activeSourceLabel,\n activeCaptionsLabel: state.textTrack?.label ?? null,\n };\n\n return { event, state: snapshot };\n}\n","import { cva } from 'class-variance-authority';\n\nexport const zMediaPlayerVariants = cva(\n 'relative overflow-hidden bg-black select-none transition-all duration-300 w-full flex flex-col justify-center items-center group/player outline-none',\n {\n variants: {\n zLayout: {\n default: 'aspect-video rounded-sm shadow-sm border border-border max-w-5xl mx-auto',\n },\n },\n defaultVariants: {\n zLayout: 'default',\n },\n }\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ZThemeService, ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { DefaultLayoutTranslations, PlyrLayoutTranslations } from 'vidstack';\nimport type { MediaPlayerElement } from 'vidstack/elements';\nimport {\n DEFAULT_MEDIA_PLAYER_CONFIG,\n MEDIA_PLAYER_VI_DEFAULT_TRANSLATIONS,\n MEDIA_PLAYER_VI_PLYR_TRANSLATIONS,\n} from './z-media-player.define';\nimport type {\n ZMediaPlayerConfig,\n ZMediaPlayerDefaultLayoutConfig,\n ZMediaPlayerError,\n ZMediaPlayerPlyrLayoutConfig,\n ZMediaPlayerSkin,\n ZMediaPlayerSnapshot,\n ZMediaPlayerSource,\n ZMediaPlayerStateChange,\n ZMediaPlayerStateEvent,\n} from './z-media-player.types';\nimport {\n assignDefinedProperties,\n buildStateChange,\n mapSourceToProviderProps,\n resolveAbsoluteUrl,\n} from './z-media-player.utils';\nimport { zMediaPlayerVariants } from './z-media-player.variants';\n\nimport 'vidstack/player';\nimport 'vidstack/player/ui';\nimport 'vidstack/player/layouts/default';\nimport 'vidstack/player/layouts/plyr';\n\n/**\n * Video, audio, HLS, DASH, YouTube, and Vimeo use Vidstack's Default or Plyr Layout skin\n * (`zSkin`). `zConfig` mirrors Vidstack's own `<media-player>` props; `zDefaultLayoutConfig` /\n * `zPlyrLayoutConfig` mirror the props of the currently active skin.\n */\n@Component({\n selector: 'z-media-player',\n standalone: true,\n templateUrl: './z-media-player.component.html',\n styleUrl: './z-media-player.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'zClasses()',\n },\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ZMediaPlayerComponent {\n private readonly _themeService = inject(ZThemeService, { optional: true });\n private readonly _translateService = inject(ZTranslateService, { optional: true });\n\n public readonly class = input<ClassValue>('');\n public readonly zSources = input.required<ZMediaPlayerSource[]>();\n public readonly zConfig = input<Partial<ZMediaPlayerConfig>>({});\n public readonly zSkin = input<ZMediaPlayerSkin>('default');\n public readonly zDefaultLayoutConfig = input<ZMediaPlayerDefaultLayoutConfig>({});\n public readonly zPlyrLayoutConfig = input<ZMediaPlayerPlyrLayoutConfig>({});\n public readonly zStateChange = output<ZMediaPlayerStateChange>();\n public readonly zError = output<ZMediaPlayerError>();\n\n protected readonly playerElement = viewChild<ElementRef<MediaPlayerElement>>('playerElement');\n protected readonly layoutElement = viewChild<ElementRef<HTMLElement>>('layoutElement');\n protected readonly activeSource = computed<ZMediaPlayerSource | null>(() => {\n const sources = this.zSources();\n return sources.find(source => source.default) ?? sources[0] ?? null;\n });\n\n protected readonly isAudioSource = computed(() => this.activeSource()?.kind === 'audio');\n protected readonly isPlyrSkin = computed(() => this.zSkin() === 'plyr');\n protected readonly colorScheme = computed<'light' | 'dark' | 'system'>(() => {\n if (!this._themeService) {\n return 'system';\n }\n return this._themeService.isDark() ? 'dark' : 'light';\n });\n\n private readonly _isVietnamese = computed(() => (this._translateService?.currentLang() ?? 'en') === 'vi');\n protected readonly defaultLayoutTranslations = computed<Partial<DefaultLayoutTranslations> | null>(() => {\n const base = this._isVietnamese() ? MEDIA_PLAYER_VI_DEFAULT_TRANSLATIONS : null;\n const override = this.zDefaultLayoutConfig().translations;\n return base || override ? { ...base, ...override } : null;\n });\n\n protected readonly plyrLayoutTranslations = computed<Partial<PlyrLayoutTranslations> | null>(() => {\n const base = this._isVietnamese() ? MEDIA_PLAYER_VI_PLYR_TRANSLATIONS : null;\n const override = this.zPlyrLayoutConfig().translations;\n return base || override ? { ...base, ...override } : null;\n });\n\n protected readonly state = signal<ZMediaPlayerSnapshot>({\n paused: true,\n playing: false,\n ended: false,\n waiting: false,\n currentTime: 0,\n duration: 0,\n volume: DEFAULT_MEDIA_PLAYER_CONFIG.volume ?? 1,\n muted: DEFAULT_MEDIA_PLAYER_CONFIG.muted ?? false,\n playbackRate: DEFAULT_MEDIA_PLAYER_CONFIG.playbackRate ?? 1,\n bufferedRatio: 0,\n fullscreen: false,\n theaterMode: false,\n pictureInPicture: false,\n activeSourceLabel: null,\n activeCaptionsLabel: null,\n });\n\n protected readonly zClasses = computed(() => zMergeClasses(zMediaPlayerVariants(), this.class()));\n\n constructor() {\n effect(() => {\n const player = this.playerElement()?.nativeElement;\n const sources = this.zSources();\n const source = this.activeSource();\n if (!player || !source || sources.length === 0) {\n return;\n }\n\n const {\n subtitles: _subtitles,\n thumbnailsVtt: _thumbnailsVtt,\n chaptersVtt: _chaptersVtt,\n ...playerProps\n } = {\n ...DEFAULT_MEDIA_PLAYER_CONFIG,\n ...this.zConfig(),\n };\n const orderedSources = [...sources].sort(\n (left, right) => Number(Boolean(right.default)) - Number(Boolean(left.default))\n );\n const providerSources = orderedSources.map(mapSourceToProviderProps);\n player.src = providerSources.length === 1 ? providerSources[0] : providerSources;\n assignDefinedProperties(player, playerProps);\n });\n\n effect(() => {\n const layout = this.layoutElement()?.nativeElement;\n if (!layout) {\n return;\n }\n\n const thumbnails = resolveAbsoluteUrl(this.zConfig().thumbnailsVtt);\n if (this.isPlyrSkin()) {\n assignDefinedProperties(layout, {\n thumbnails,\n translations: this.plyrLayoutTranslations(),\n ...this.zPlyrLayoutConfig(),\n });\n return;\n }\n\n assignDefinedProperties(layout, {\n thumbnails,\n colorScheme: this.colorScheme(),\n translations: this.defaultLayoutTranslations(),\n ...this.zDefaultLayoutConfig(),\n });\n });\n\n effect(onCleanup => {\n const player = this.playerElement()?.nativeElement;\n if (!player) {\n return;\n }\n\n const stateSubscription = player.subscribe(nextState => this._syncState(nextState));\n const eventMap: Readonly<Record<string, ZMediaPlayerStateEvent>> = {\n 'loaded-data': 'loaded',\n play: 'play',\n pause: 'pause',\n ended: 'ended',\n 'time-update': 'time-update',\n 'volume-change': 'volume-change',\n 'rate-change': 'rate-change',\n 'fullscreen-change': 'fullscreen-change',\n 'picture-in-picture-change': 'pip-change',\n 'source-change': 'source-change',\n 'text-track-change': 'subtitle-change',\n waiting: 'waiting',\n 'can-play': 'can-play',\n };\n const listeners = Object.entries(eventMap).map(([eventName, event]) => {\n const listener = () => this._emitStateChange(event);\n player.addEventListener(eventName, listener);\n return () => player.removeEventListener(eventName, listener);\n });\n const onError = (event: Event) => this._emitError(event);\n const onProviderChange = (event: Event) => this._configureStreamingProvider(event);\n player.addEventListener('error', onError);\n player.addEventListener('provider-change', onProviderChange);\n\n onCleanup(() => {\n stateSubscription();\n listeners.forEach(cleanup => cleanup());\n player.removeEventListener('error', onError);\n player.removeEventListener('provider-change', onProviderChange);\n });\n });\n }\n\n private _syncState(nextState: unknown): void {\n const player = this.playerElement()?.nativeElement;\n if (!player) {\n return;\n }\n\n const patch = nextState && typeof nextState === 'object' ? nextState : {};\n const state = { ...player.state, ...patch } as Parameters<typeof buildStateChange>[1];\n this.state.set(buildStateChange('time-update', state, this.activeSource()?.label ?? null).state);\n }\n\n private _emitStateChange(event: ZMediaPlayerStateEvent): void {\n const player = this.playerElement()?.nativeElement;\n if (!player) {\n return;\n }\n\n const change = buildStateChange(\n event,\n player.state as Parameters<typeof buildStateChange>[1],\n this.activeSource()?.label ?? null\n );\n this.state.set(change.state);\n this.zStateChange.emit(change);\n }\n\n private _emitError(event: Event): void {\n const { detail } = event as CustomEvent<unknown>;\n const error = detail && typeof detail === 'object' ? (detail as Record<string, unknown>) : {};\n this.zError.emit({\n message: typeof error['message'] === 'string' ? error['message'] : 'Media playback error',\n code: typeof error['code'] === 'string' || typeof error['code'] === 'number' ? error['code'] : undefined,\n source: 'provider',\n raw: detail,\n });\n }\n\n private _configureStreamingProvider(event: Event): void {\n const source = this.activeSource();\n const { detail } = event as CustomEvent<unknown>;\n if (!source || !detail || typeof detail !== 'object') {\n return;\n }\n\n const provider = detail as { library?: unknown };\n if (source.kind === 'hls') {\n provider.library = () => import('hls.js');\n return;\n }\n if (source.kind === 'dash') {\n provider.library = () => import('dashjs');\n }\n }\n}\n","<media-player #playerElement>\n <media-provider>\n @for (subtitle of zConfig().subtitles ?? []; track subtitle.src) {\n <track\n kind=\"subtitles\"\n [label]=\"subtitle.label\"\n [src]=\"subtitle.src\"\n [srclang]=\"subtitle.srclang\"\n [default]=\"subtitle.default ?? false\" />\n }\n @if (zConfig().chaptersVtt) {\n <track kind=\"chapters\" [src]=\"zConfig().chaptersVtt!\" />\n }\n </media-provider>\n\n @if (isPlyrSkin()) {\n <media-plyr-layout #layoutElement></media-plyr-layout>\n } @else if (isAudioSource()) {\n <media-audio-layout #layoutElement></media-audio-layout>\n } @else {\n <media-video-layout #layoutElement></media-video-layout>\n }\n</media-player>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -366,7 +366,9 @@ class ZModalComponent {
|
|
|
366
366
|
const hideHeader = this.effectiveHideHeader();
|
|
367
367
|
const hideFooter = this.effectiveHideFooter();
|
|
368
368
|
const bodySpacingClass = hideHeader && hideFooter ? 'py-0' : hideHeader ? 'pt-0' : hideFooter ? 'pb-0' : '';
|
|
369
|
-
|
|
369
|
+
// Le skeleton overlay tuyệt đối cần chỗ để hiện + cần vùng chứa làm mốc định vị (`relative`).
|
|
370
|
+
const loadingMinHeightClass = this.effectiveContentLoading() ? 'min-h-[12.5rem]' : '';
|
|
371
|
+
return zMergeClasses('relative flex min-h-0 flex-col gap-4 px-4 py-4', loadingMinHeightClass, this.effectiveBodyClass(), bodySpacingClass);
|
|
370
372
|
}, /* @ts-ignore */
|
|
371
373
|
...(ngDevMode ? [{ debugName: "serviceBodyClasses" }] : /* istanbul ignore next */ []));
|
|
372
374
|
effectiveClosable = computed(() => this.isServiceMode() ? (this.config.zClosable ?? true) : this.zClosable(), /* @ts-ignore */
|
|
@@ -617,7 +619,9 @@ class ZModalComponent {
|
|
|
617
619
|
}
|
|
618
620
|
const host = this._host.nativeElement;
|
|
619
621
|
const newHeight = host.offsetHeight;
|
|
620
|
-
|
|
622
|
+
// Nội dung thật có thể thấp hơn hoặc cao hơn skeleton — morph cả hai chiều, chỉ bỏ qua khi
|
|
623
|
+
// chiều cao không đổi (không có gì để animate).
|
|
624
|
+
if (newHeight === oldHeight) {
|
|
621
625
|
return;
|
|
622
626
|
}
|
|
623
627
|
this._clearContentRevealTimeout();
|
|
@@ -664,7 +668,7 @@ class ZModalComponent {
|
|
|
664
668
|
}
|
|
665
669
|
}
|
|
666
670
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
667
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZModalComponent, isStandalone: true, selector: "z-modal", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zBodyClass: { classPropertyName: "zBodyClass", publicName: "zBodyClass", isSignal: true, isRequired: false, transformFunction: null }, zVisible: { classPropertyName: "zVisible", publicName: "zVisible", isSignal: true, isRequired: false, transformFunction: null }, zTitle: { classPropertyName: "zTitle", publicName: "zTitle", isSignal: true, isRequired: false, transformFunction: null }, zDescription: { classPropertyName: "zDescription", publicName: "zDescription", isSignal: true, isRequired: false, transformFunction: null }, zWidth: { classPropertyName: "zWidth", publicName: "zWidth", isSignal: true, isRequired: false, transformFunction: null }, zClosable: { classPropertyName: "zClosable", publicName: "zClosable", isSignal: true, isRequired: false, transformFunction: null }, zMaskClosable: { classPropertyName: "zMaskClosable", publicName: "zMaskClosable", isSignal: true, isRequired: false, transformFunction: null }, zDisableShadow: { classPropertyName: "zDisableShadow", publicName: "zDisableShadow", isSignal: true, isRequired: false, transformFunction: null }, zHeaderBorder: { classPropertyName: "zHeaderBorder", publicName: "zHeaderBorder", isSignal: true, isRequired: false, transformFunction: null }, zFooterBorder: { classPropertyName: "zFooterBorder", publicName: "zFooterBorder", isSignal: true, isRequired: false, transformFunction: null }, zHideHeader: { classPropertyName: "zHideHeader", publicName: "zHideHeader", isSignal: true, isRequired: false, transformFunction: null }, zHideFooter: { classPropertyName: "zHideFooter", publicName: "zHideFooter", isSignal: true, isRequired: false, transformFunction: null }, zOkText: { classPropertyName: "zOkText", publicName: "zOkText", isSignal: true, isRequired: false, transformFunction: null }, zCancelText: { classPropertyName: "zCancelText", publicName: "zCancelText", isSignal: true, isRequired: false, transformFunction: null }, zOkDestructive: { classPropertyName: "zOkDestructive", publicName: "zOkDestructive", isSignal: true, isRequired: false, transformFunction: null }, zOkDisabled: { classPropertyName: "zOkDisabled", publicName: "zOkDisabled", isSignal: true, isRequired: false, transformFunction: null }, zLoading: { classPropertyName: "zLoading", publicName: "zLoading", isSignal: true, isRequired: false, transformFunction: null }, zContentLoading: { classPropertyName: "zContentLoading", publicName: "zContentLoading", isSignal: true, isRequired: false, transformFunction: null }, zSkeletonRows: { classPropertyName: "zSkeletonRows", publicName: "zSkeletonRows", isSignal: true, isRequired: false, transformFunction: null }, zOverlay: { classPropertyName: "zOverlay", publicName: "zOverlay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOk: "zOk", zCancel: "zCancel", zAfterClose: "zAfterClose", zScrollbar: "zScrollbar", zVisible: "zVisibleChange" }, host: { properties: { "class": "hostClasses()", "style.width": "effectiveWidth()" } }, providers: [TranslatePipe], queries: [{ propertyName: "customHeader", first: true, predicate: ZModalHeaderDirective, descendants: true, isSignal: true }, { propertyName: "customContent", first: true, predicate: ZModalContentDirective, descendants: true, isSignal: true }, { propertyName: "customFooter", first: true, predicate: ZModalFooterDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "contentOutlet", first: true, predicate: ["contentOutlet"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "mainContentRef", first: true, predicate: ["mainContent"], descendants: true, isSignal: true }], exportAs: ["zModal"], ngImport: i0, template: "<!-- Template mode content (rendered in host element, which is moved to overlay) -->\n@if (isTemplateMode() && shouldRenderContent()) {\n @if (customHeader(); as headerDir) {\n <header [class.z-modal-header-shadow]=\"shouldShowShadow()\" [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex items-start justify-between px-4\">\n <ng-container *ngTemplateOutlet=\"headerDir.templateRef\" />\n </div>\n </header>\n } @else if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n @if (effectiveDescription(); as description) {\n @switch (description | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(description)\" />\n }\n @case ('html') {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-1 text-sm\"\n [innerHTML]=\"$any(description) | zSafeHtml\"></p>\n }\n @default {\n <p data-testid=\"z-modal-description\" class=\"text-muted-foreground m-0 mt-1 text-sm\">\n {{ $any(description) | translate }}\n </p>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"templateBodyClasses()\">\n <div [class.invisible]=\"effectiveContentLoading()\" [class.pointer-events-none]=\"effectiveContentLoading()\">\n @if (customContent(); as contentDir) {\n <ng-container *ngTemplateOutlet=\"contentDir.templateRef\" />\n } @else {\n <ng-content />\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (customFooter(); as footerDir) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n <ng-container *ngTemplateOutlet=\"footerDir.templateRef\" />\n </div>\n </footer>\n } @else if (!effectiveHideFooter()) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button type=\"button\" data-testid=\"z-modal-cancel-button\" z-button zType=\"outline\" (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? ('i18n_z_ui_modal_cancel' | translate) }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? ('i18n_z_ui_common_ok' | translate) }}\n </button>\n }\n </div>\n </footer>\n }\n}\n\n<!-- Service mode content -->\n@if (isServiceMode()) {\n <!-- Confirm Modal Layout (no skeleton) -->\n @if (isConfirmMode()) {\n <div class=\"flex flex-col items-center px-4 pt-2 pb-4 text-center\">\n @if (config.zConfirmIcon) {\n <div class=\"relative mb-4 flex size-20 items-center justify-center\">\n <div class=\"absolute inset-0 rounded-full\" [class]=\"confirmIconColors().ring\"></div>\n <div class=\"relative flex size-14 items-center justify-center rounded-full\" [class]=\"confirmIconColors().bg\">\n <z-icon [zType]=\"config.zConfirmIcon\" zSize=\"30\" [zStrokeWidth]=\"2.6\" [class]=\"confirmIconColors().icon\" />\n </div>\n </div>\n }\n\n <!-- Title centered -->\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 text-lg leading-snug font-semibold\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4 data-testid=\"z-modal-title\" class=\"m-0 text-lg leading-snug font-semibold\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n\n <!-- Description centered -->\n @if (config.zContent; as content) {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-2 text-sm\"\n [innerHTML]=\"$any(content) | translate | zSafeHtml\"></p>\n }\n </div>\n\n <!-- Footer centered -->\n @if (!effectiveHideFooter()) {\n <footer class=\"mt-4 flex flex-row justify-center gap-3 pb-2\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveTypeOk()\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </footer>\n }\n } @else {\n <!-- Normal Modal Layout -->\n @if (!effectiveContentLoading()) {\n @if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"serviceBodyClasses()\">\n <ng-template #contentOutlet />\n\n @if (isStringContent()) {\n <div data-testid=\"z-modal-content\" [innerHTML]=\"$any(config.zContent) | zSafeHtml\"></div>\n }\n </main>\n </ng-scrollbar>\n\n @if (!effectiveHideFooter()) {\n <footer\n [class.z-modal-footer-shadow]=\"shouldShowShadow()\"\n [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n @if (config.zCancelIcon) {\n <z-icon [zType]=\"config.zCancelIcon\" />\n }\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n @if (config.zOkIcon && !effectiveLoading()) {\n <z-icon [zType]=\"config.zOkIcon\" />\n }\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </div>\n </footer>\n }\n } @else {\n <div class=\"flex h-[12.5rem] flex-col gap-4 px-4 py-4\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n }\n}\n", styles: ["@charset \"UTF-8\";:host.z-modal-service-mode,:host.z-modal-template-mode{pointer-events:auto;--z-enter-opacity: 0;--z-enter-scale: .95;transform-origin:center center;animation:z-enter .2s cubic-bezier(.16,1,.3,1) forwards}:host.z-modal-service-mode.modal-leave,:host.z-modal-template-mode.modal-leave{--z-exit-opacity: 0;--z-exit-scale: .95;transform-origin:center center;animation:z-exit .15s cubic-bezier(.4,0,1,1) forwards}:host.z-modal-template-host{display:contents}::ng-deep .z-modal-backdrop-dark{background-color:#0009;animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-blur{background-color:#0000000d;backdrop-filter:blur(2px);animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-dark.z-backdrop-leaving,::ng-deep .z-modal-backdrop-blur.z-backdrop-leaving{animation:z-backdrop-exit .15s ease-in forwards}.z-modal-header-shadow{padding-bottom:1rem;box-shadow:0 2px 8px -2px #0000001a}.z-modal-footer-shadow{padding-top:1rem;box-shadow:0 -2px 8px -2px #0000001a}.z-modal-header-border{border-bottom:1px solid var(--border)}.z-modal-footer-border{border-top:1px solid var(--border)}:host main{overscroll-behavior:contain}:host header,:host footer{transition:box-shadow .2s ease-out,padding .2s ease-out}.z-modal-scrollbar{--scrollbar-container-offset: 0px;--scrollbar-track-offset: 0px}:host.z-modal-height-morph{transition:height .24s cubic-bezier(.16,1,.3,1)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zAnimatedTypeIcon", "zAnimateIcon", "zAnimationTriggerIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zAnimatedType", "zAnimate", "zAnimationTrigger", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "directive", type: ZTooltipDirective, selector: "[z-tooltip], [zTooltip]", inputs: ["zContent", "zPosition", "zTooltipPosition", "zTrigger", "zTooltipTrigger", "zTooltipType", "zTooltipSize", "zClass", "zTooltipClass", "zShowDelay", "zTooltipShowDelay", "zHideDelay", "zTooltipHideDelay", "zArrow", "zTooltipArrow", "zDisabled", "zTooltipDisabled", "zOffset", "zTooltipOffset", "zAutoDetect", "zTriggerElement", "zAlwaysShow", "zMaxWidth"], outputs: ["zShow", "zHide"], exportAs: ["zTooltip"] }, { kind: "component", type: ZSkeletonComponent, selector: "z-skeleton", inputs: ["class", "zType", "zSize", "zWidth", "zHeight", "zRows", "zGap", "zAnimated", "zRadius"] }, { kind: "component", type: NgScrollbar, selector: "ng-scrollbar:not([externalViewport]), [ngScrollbar]", exportAs: ["ngScrollbar"] }, { kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: ZContentTypePipe, name: "zContentType" }, { kind: "pipe", type: ZSafeHtmlPipe, name: "zSafeHtml" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
671
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZModalComponent, isStandalone: true, selector: "z-modal", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zBodyClass: { classPropertyName: "zBodyClass", publicName: "zBodyClass", isSignal: true, isRequired: false, transformFunction: null }, zVisible: { classPropertyName: "zVisible", publicName: "zVisible", isSignal: true, isRequired: false, transformFunction: null }, zTitle: { classPropertyName: "zTitle", publicName: "zTitle", isSignal: true, isRequired: false, transformFunction: null }, zDescription: { classPropertyName: "zDescription", publicName: "zDescription", isSignal: true, isRequired: false, transformFunction: null }, zWidth: { classPropertyName: "zWidth", publicName: "zWidth", isSignal: true, isRequired: false, transformFunction: null }, zClosable: { classPropertyName: "zClosable", publicName: "zClosable", isSignal: true, isRequired: false, transformFunction: null }, zMaskClosable: { classPropertyName: "zMaskClosable", publicName: "zMaskClosable", isSignal: true, isRequired: false, transformFunction: null }, zDisableShadow: { classPropertyName: "zDisableShadow", publicName: "zDisableShadow", isSignal: true, isRequired: false, transformFunction: null }, zHeaderBorder: { classPropertyName: "zHeaderBorder", publicName: "zHeaderBorder", isSignal: true, isRequired: false, transformFunction: null }, zFooterBorder: { classPropertyName: "zFooterBorder", publicName: "zFooterBorder", isSignal: true, isRequired: false, transformFunction: null }, zHideHeader: { classPropertyName: "zHideHeader", publicName: "zHideHeader", isSignal: true, isRequired: false, transformFunction: null }, zHideFooter: { classPropertyName: "zHideFooter", publicName: "zHideFooter", isSignal: true, isRequired: false, transformFunction: null }, zOkText: { classPropertyName: "zOkText", publicName: "zOkText", isSignal: true, isRequired: false, transformFunction: null }, zCancelText: { classPropertyName: "zCancelText", publicName: "zCancelText", isSignal: true, isRequired: false, transformFunction: null }, zOkDestructive: { classPropertyName: "zOkDestructive", publicName: "zOkDestructive", isSignal: true, isRequired: false, transformFunction: null }, zOkDisabled: { classPropertyName: "zOkDisabled", publicName: "zOkDisabled", isSignal: true, isRequired: false, transformFunction: null }, zLoading: { classPropertyName: "zLoading", publicName: "zLoading", isSignal: true, isRequired: false, transformFunction: null }, zContentLoading: { classPropertyName: "zContentLoading", publicName: "zContentLoading", isSignal: true, isRequired: false, transformFunction: null }, zSkeletonRows: { classPropertyName: "zSkeletonRows", publicName: "zSkeletonRows", isSignal: true, isRequired: false, transformFunction: null }, zOverlay: { classPropertyName: "zOverlay", publicName: "zOverlay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOk: "zOk", zCancel: "zCancel", zAfterClose: "zAfterClose", zScrollbar: "zScrollbar", zVisible: "zVisibleChange" }, host: { properties: { "class": "hostClasses()", "style.width": "effectiveWidth()" } }, providers: [TranslatePipe], queries: [{ propertyName: "customHeader", first: true, predicate: ZModalHeaderDirective, descendants: true, isSignal: true }, { propertyName: "customContent", first: true, predicate: ZModalContentDirective, descendants: true, isSignal: true }, { propertyName: "customFooter", first: true, predicate: ZModalFooterDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "contentOutlet", first: true, predicate: ["contentOutlet"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "mainContentRef", first: true, predicate: ["mainContent"], descendants: true, isSignal: true }], exportAs: ["zModal"], ngImport: i0, template: "<!-- Template mode content (rendered in host element, which is moved to overlay) -->\n@if (isTemplateMode() && shouldRenderContent()) {\n @if (customHeader(); as headerDir) {\n <header [class.z-modal-header-shadow]=\"shouldShowShadow()\" [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex items-start justify-between px-4\">\n <ng-container *ngTemplateOutlet=\"headerDir.templateRef\" />\n </div>\n </header>\n } @else if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n @if (effectiveDescription(); as description) {\n @switch (description | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(description)\" />\n }\n @case ('html') {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-1 text-sm\"\n [innerHTML]=\"$any(description) | zSafeHtml\"></p>\n }\n @default {\n <p data-testid=\"z-modal-description\" class=\"text-muted-foreground m-0 mt-1 text-sm\">\n {{ $any(description) | translate }}\n </p>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"templateBodyClasses()\">\n <div [class.invisible]=\"effectiveContentLoading()\" [class.pointer-events-none]=\"effectiveContentLoading()\">\n @if (customContent(); as contentDir) {\n <ng-container *ngTemplateOutlet=\"contentDir.templateRef\" />\n } @else {\n <ng-content />\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (customFooter(); as footerDir) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n <ng-container *ngTemplateOutlet=\"footerDir.templateRef\" />\n </div>\n </footer>\n } @else if (!effectiveHideFooter()) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button type=\"button\" data-testid=\"z-modal-cancel-button\" z-button zType=\"outline\" (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? ('i18n_z_ui_modal_cancel' | translate) }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? ('i18n_z_ui_common_ok' | translate) }}\n </button>\n }\n </div>\n </footer>\n }\n}\n\n<!-- Service mode content -->\n@if (isServiceMode()) {\n <!-- Confirm Modal Layout (no skeleton) -->\n @if (isConfirmMode()) {\n <div class=\"flex flex-col items-center px-4 pt-2 pb-4 text-center\">\n @if (config.zConfirmIcon) {\n <div class=\"relative mb-4 flex size-20 items-center justify-center\">\n <div class=\"absolute inset-0 rounded-full\" [class]=\"confirmIconColors().ring\"></div>\n <div class=\"relative flex size-14 items-center justify-center rounded-full\" [class]=\"confirmIconColors().bg\">\n <z-icon [zType]=\"config.zConfirmIcon\" zSize=\"30\" [zStrokeWidth]=\"2.6\" [class]=\"confirmIconColors().icon\" />\n </div>\n </div>\n }\n\n <!-- Title centered -->\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 text-lg leading-snug font-semibold\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4 data-testid=\"z-modal-title\" class=\"m-0 text-lg leading-snug font-semibold\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n\n <!-- Description centered -->\n @if (config.zContent; as content) {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-2 text-sm\"\n [innerHTML]=\"$any(content) | translate | zSafeHtml\"></p>\n }\n </div>\n\n <!-- Footer centered -->\n @if (!effectiveHideFooter()) {\n <footer class=\"mt-4 flex flex-row justify-center gap-3 pb-2\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveTypeOk()\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </footer>\n }\n } @else {\n <!-- Normal Modal Layout -->\n <!--\n Header/footer lu\u00F4n render v\u00E0 n\u1ED9i dung (contentOutlet) kh\u00F4ng \u0111\u01B0\u1EE3c th\u00E1o kh\u1ECFi DOM khi\n effectiveContentLoading() b\u1EADt/t\u1EAFt \u2014 component/template \u0111\u00EDnh v\u00E0o #contentOutlet ch\u1EC9 \u0111\u01B0\u1EE3c\n attach m\u1ED9t l\u1EA7n b\u1EDFi ZModalService; b\u1ECDc n\u00F3 trong @if theo c\u1EDD loading s\u1EBD khi\u1EBFn Angular h\u1EE7y\n view \u0111\u00F3 (component bi\u1EBFn m\u1EA5t v\u0129nh vi\u1EC5n) thay v\u00EC ch\u1EC9 \u1EA9n \u0111i. Skeleton ch\u1EC9 che t\u1EA1m b\u1EB1ng\n `invisible` + overlay tuy\u1EC7t \u0111\u1ED1i, gi\u1ED1ng h\u1EC7t c\u00E1ch template mode x\u1EED l\u00FD \u1EDF tr\u00EAn.\n -->\n @if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"serviceBodyClasses()\">\n <!--\n `hidden` (display:none), kh\u00F4ng ph\u1EA3i `invisible` \u2014 reveal-animation c\u1EE7a service mode\n (_revealContentWithAnimation) \u0111o ch\u00EAnh l\u1EC7ch chi\u1EC1u cao tr\u01B0\u1EDBc/sau khi h\u1EBFt loading \u0111\u1EC3 t\u1EA1o\n hi\u1EC7u \u1EE9ng \"t\u1EF1 expand\"; `invisible` v\u1EABn chi\u1EBFm ch\u1ED7 n\u00EAn chi\u1EC1u cao kh\u00F4ng \u0111\u1ED5i, m\u1EA5t hi\u1EC7u \u1EE9ng.\n V\u1EABn kh\u00F4ng d\u00F9ng @if structural \u1EDF \u0111\u00E2y \u0111\u1EC3 tr\u00E1nh ph\u00E1 h\u1EE7y component \u0111\u00E3 attach v\u00E0o #contentOutlet.\n -->\n <div [class.hidden]=\"effectiveContentLoading()\">\n <ng-template #contentOutlet />\n\n @if (isStringContent()) {\n <div data-testid=\"z-modal-content\" [innerHTML]=\"$any(config.zContent) | zSafeHtml\"></div>\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (!effectiveHideFooter()) {\n <footer\n [class.z-modal-footer-shadow]=\"shouldShowShadow()\"\n [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n @if (config.zCancelIcon) {\n <z-icon [zType]=\"config.zCancelIcon\" />\n }\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n @if (config.zOkIcon && !effectiveLoading()) {\n <z-icon [zType]=\"config.zOkIcon\" />\n }\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </div>\n </footer>\n }\n }\n}\n", styles: ["@charset \"UTF-8\";:host.z-modal-service-mode,:host.z-modal-template-mode{pointer-events:auto;--z-enter-opacity: 0;--z-enter-scale: .95;transform-origin:center center;animation:z-enter .2s cubic-bezier(.16,1,.3,1) forwards}:host.z-modal-service-mode.modal-leave,:host.z-modal-template-mode.modal-leave{--z-exit-opacity: 0;--z-exit-scale: .95;transform-origin:center center;animation:z-exit .15s cubic-bezier(.4,0,1,1) forwards}:host.z-modal-template-host{display:contents}::ng-deep .z-modal-backdrop-dark{background-color:#0009;animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-blur{background-color:#0000000d;backdrop-filter:blur(2px);animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-dark.z-backdrop-leaving,::ng-deep .z-modal-backdrop-blur.z-backdrop-leaving{animation:z-backdrop-exit .15s ease-in forwards}.z-modal-header-shadow{padding-bottom:1rem;box-shadow:0 2px 8px -2px #0000001a}.z-modal-footer-shadow{padding-top:1rem;box-shadow:0 -2px 8px -2px #0000001a}.z-modal-header-border{border-bottom:1px solid var(--border)}.z-modal-footer-border{border-top:1px solid var(--border)}:host main{overscroll-behavior:contain}:host header,:host footer{transition:box-shadow .2s ease-out,padding .2s ease-out}.z-modal-scrollbar{--scrollbar-container-offset: 0px;--scrollbar-track-offset: 0px}:host.z-modal-height-morph{transition:height .24s cubic-bezier(.16,1,.3,1)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zAnimatedTypeIcon", "zAnimateIcon", "zAnimationTriggerIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zAnimatedType", "zAnimate", "zAnimationTrigger", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "directive", type: ZTooltipDirective, selector: "[z-tooltip], [zTooltip]", inputs: ["zContent", "zPosition", "zTooltipPosition", "zTrigger", "zTooltipTrigger", "zTooltipType", "zTooltipSize", "zClass", "zTooltipClass", "zShowDelay", "zTooltipShowDelay", "zHideDelay", "zTooltipHideDelay", "zArrow", "zTooltipArrow", "zDisabled", "zTooltipDisabled", "zOffset", "zTooltipOffset", "zAutoDetect", "zTriggerElement", "zAlwaysShow", "zMaxWidth"], outputs: ["zShow", "zHide"], exportAs: ["zTooltip"] }, { kind: "component", type: ZSkeletonComponent, selector: "z-skeleton", inputs: ["class", "zType", "zSize", "zWidth", "zHeight", "zRows", "zGap", "zAnimated", "zRadius"] }, { kind: "component", type: NgScrollbar, selector: "ng-scrollbar:not([externalViewport]), [ngScrollbar]", exportAs: ["ngScrollbar"] }, { kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: ZContentTypePipe, name: "zContentType" }, { kind: "pipe", type: ZSafeHtmlPipe, name: "zSafeHtml" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
668
672
|
}
|
|
669
673
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZModalComponent, decorators: [{
|
|
670
674
|
type: Component,
|
|
@@ -682,7 +686,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
682
686
|
], standalone: true, providers: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
683
687
|
'[class]': 'hostClasses()',
|
|
684
688
|
'[style.width]': 'effectiveWidth()',
|
|
685
|
-
}, exportAs: 'zModal', template: "<!-- Template mode content (rendered in host element, which is moved to overlay) -->\n@if (isTemplateMode() && shouldRenderContent()) {\n @if (customHeader(); as headerDir) {\n <header [class.z-modal-header-shadow]=\"shouldShowShadow()\" [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex items-start justify-between px-4\">\n <ng-container *ngTemplateOutlet=\"headerDir.templateRef\" />\n </div>\n </header>\n } @else if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n @if (effectiveDescription(); as description) {\n @switch (description | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(description)\" />\n }\n @case ('html') {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-1 text-sm\"\n [innerHTML]=\"$any(description) | zSafeHtml\"></p>\n }\n @default {\n <p data-testid=\"z-modal-description\" class=\"text-muted-foreground m-0 mt-1 text-sm\">\n {{ $any(description) | translate }}\n </p>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"templateBodyClasses()\">\n <div [class.invisible]=\"effectiveContentLoading()\" [class.pointer-events-none]=\"effectiveContentLoading()\">\n @if (customContent(); as contentDir) {\n <ng-container *ngTemplateOutlet=\"contentDir.templateRef\" />\n } @else {\n <ng-content />\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (customFooter(); as footerDir) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n <ng-container *ngTemplateOutlet=\"footerDir.templateRef\" />\n </div>\n </footer>\n } @else if (!effectiveHideFooter()) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button type=\"button\" data-testid=\"z-modal-cancel-button\" z-button zType=\"outline\" (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? ('i18n_z_ui_modal_cancel' | translate) }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? ('i18n_z_ui_common_ok' | translate) }}\n </button>\n }\n </div>\n </footer>\n }\n}\n\n<!-- Service mode content -->\n@if (isServiceMode()) {\n <!-- Confirm Modal Layout (no skeleton) -->\n @if (isConfirmMode()) {\n <div class=\"flex flex-col items-center px-4 pt-2 pb-4 text-center\">\n @if (config.zConfirmIcon) {\n <div class=\"relative mb-4 flex size-20 items-center justify-center\">\n <div class=\"absolute inset-0 rounded-full\" [class]=\"confirmIconColors().ring\"></div>\n <div class=\"relative flex size-14 items-center justify-center rounded-full\" [class]=\"confirmIconColors().bg\">\n <z-icon [zType]=\"config.zConfirmIcon\" zSize=\"30\" [zStrokeWidth]=\"2.6\" [class]=\"confirmIconColors().icon\" />\n </div>\n </div>\n }\n\n <!-- Title centered -->\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 text-lg leading-snug font-semibold\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4 data-testid=\"z-modal-title\" class=\"m-0 text-lg leading-snug font-semibold\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n\n <!-- Description centered -->\n @if (config.zContent; as content) {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-2 text-sm\"\n [innerHTML]=\"$any(content) | translate | zSafeHtml\"></p>\n }\n </div>\n\n <!-- Footer centered -->\n @if (!effectiveHideFooter()) {\n <footer class=\"mt-4 flex flex-row justify-center gap-3 pb-2\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveTypeOk()\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </footer>\n }\n } @else {\n <!-- Normal Modal Layout -->\n @if (!effectiveContentLoading()) {\n @if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"serviceBodyClasses()\">\n <ng-template #contentOutlet />\n\n @if (isStringContent()) {\n <div data-testid=\"z-modal-content\" [innerHTML]=\"$any(config.zContent) | zSafeHtml\"></div>\n }\n </main>\n </ng-scrollbar>\n\n @if (!effectiveHideFooter()) {\n <footer\n [class.z-modal-footer-shadow]=\"shouldShowShadow()\"\n [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n @if (config.zCancelIcon) {\n <z-icon [zType]=\"config.zCancelIcon\" />\n }\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n @if (config.zOkIcon && !effectiveLoading()) {\n <z-icon [zType]=\"config.zOkIcon\" />\n }\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </div>\n </footer>\n }\n } @else {\n <div class=\"flex h-[12.5rem] flex-col gap-4 px-4 py-4\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n }\n}\n", styles: ["@charset \"UTF-8\";:host.z-modal-service-mode,:host.z-modal-template-mode{pointer-events:auto;--z-enter-opacity: 0;--z-enter-scale: .95;transform-origin:center center;animation:z-enter .2s cubic-bezier(.16,1,.3,1) forwards}:host.z-modal-service-mode.modal-leave,:host.z-modal-template-mode.modal-leave{--z-exit-opacity: 0;--z-exit-scale: .95;transform-origin:center center;animation:z-exit .15s cubic-bezier(.4,0,1,1) forwards}:host.z-modal-template-host{display:contents}::ng-deep .z-modal-backdrop-dark{background-color:#0009;animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-blur{background-color:#0000000d;backdrop-filter:blur(2px);animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-dark.z-backdrop-leaving,::ng-deep .z-modal-backdrop-blur.z-backdrop-leaving{animation:z-backdrop-exit .15s ease-in forwards}.z-modal-header-shadow{padding-bottom:1rem;box-shadow:0 2px 8px -2px #0000001a}.z-modal-footer-shadow{padding-top:1rem;box-shadow:0 -2px 8px -2px #0000001a}.z-modal-header-border{border-bottom:1px solid var(--border)}.z-modal-footer-border{border-top:1px solid var(--border)}:host main{overscroll-behavior:contain}:host header,:host footer{transition:box-shadow .2s ease-out,padding .2s ease-out}.z-modal-scrollbar{--scrollbar-container-offset: 0px;--scrollbar-track-offset: 0px}:host.z-modal-height-morph{transition:height .24s cubic-bezier(.16,1,.3,1)}\n"] }]
|
|
689
|
+
}, exportAs: 'zModal', template: "<!-- Template mode content (rendered in host element, which is moved to overlay) -->\n@if (isTemplateMode() && shouldRenderContent()) {\n @if (customHeader(); as headerDir) {\n <header [class.z-modal-header-shadow]=\"shouldShowShadow()\" [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex items-start justify-between px-4\">\n <ng-container *ngTemplateOutlet=\"headerDir.templateRef\" />\n </div>\n </header>\n } @else if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n @if (effectiveDescription(); as description) {\n @switch (description | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(description)\" />\n }\n @case ('html') {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-1 text-sm\"\n [innerHTML]=\"$any(description) | zSafeHtml\"></p>\n }\n @default {\n <p data-testid=\"z-modal-description\" class=\"text-muted-foreground m-0 mt-1 text-sm\">\n {{ $any(description) | translate }}\n </p>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"templateBodyClasses()\">\n <div [class.invisible]=\"effectiveContentLoading()\" [class.pointer-events-none]=\"effectiveContentLoading()\">\n @if (customContent(); as contentDir) {\n <ng-container *ngTemplateOutlet=\"contentDir.templateRef\" />\n } @else {\n <ng-content />\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (customFooter(); as footerDir) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n <ng-container *ngTemplateOutlet=\"footerDir.templateRef\" />\n </div>\n </footer>\n } @else if (!effectiveHideFooter()) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button type=\"button\" data-testid=\"z-modal-cancel-button\" z-button zType=\"outline\" (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? ('i18n_z_ui_modal_cancel' | translate) }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? ('i18n_z_ui_common_ok' | translate) }}\n </button>\n }\n </div>\n </footer>\n }\n}\n\n<!-- Service mode content -->\n@if (isServiceMode()) {\n <!-- Confirm Modal Layout (no skeleton) -->\n @if (isConfirmMode()) {\n <div class=\"flex flex-col items-center px-4 pt-2 pb-4 text-center\">\n @if (config.zConfirmIcon) {\n <div class=\"relative mb-4 flex size-20 items-center justify-center\">\n <div class=\"absolute inset-0 rounded-full\" [class]=\"confirmIconColors().ring\"></div>\n <div class=\"relative flex size-14 items-center justify-center rounded-full\" [class]=\"confirmIconColors().bg\">\n <z-icon [zType]=\"config.zConfirmIcon\" zSize=\"30\" [zStrokeWidth]=\"2.6\" [class]=\"confirmIconColors().icon\" />\n </div>\n </div>\n }\n\n <!-- Title centered -->\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 text-lg leading-snug font-semibold\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4 data-testid=\"z-modal-title\" class=\"m-0 text-lg leading-snug font-semibold\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n\n <!-- Description centered -->\n @if (config.zContent; as content) {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-2 text-sm\"\n [innerHTML]=\"$any(content) | translate | zSafeHtml\"></p>\n }\n </div>\n\n <!-- Footer centered -->\n @if (!effectiveHideFooter()) {\n <footer class=\"mt-4 flex flex-row justify-center gap-3 pb-2\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveTypeOk()\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </footer>\n }\n } @else {\n <!-- Normal Modal Layout -->\n <!--\n Header/footer lu\u00F4n render v\u00E0 n\u1ED9i dung (contentOutlet) kh\u00F4ng \u0111\u01B0\u1EE3c th\u00E1o kh\u1ECFi DOM khi\n effectiveContentLoading() b\u1EADt/t\u1EAFt \u2014 component/template \u0111\u00EDnh v\u00E0o #contentOutlet ch\u1EC9 \u0111\u01B0\u1EE3c\n attach m\u1ED9t l\u1EA7n b\u1EDFi ZModalService; b\u1ECDc n\u00F3 trong @if theo c\u1EDD loading s\u1EBD khi\u1EBFn Angular h\u1EE7y\n view \u0111\u00F3 (component bi\u1EBFn m\u1EA5t v\u0129nh vi\u1EC5n) thay v\u00EC ch\u1EC9 \u1EA9n \u0111i. Skeleton ch\u1EC9 che t\u1EA1m b\u1EB1ng\n `invisible` + overlay tuy\u1EC7t \u0111\u1ED1i, gi\u1ED1ng h\u1EC7t c\u00E1ch template mode x\u1EED l\u00FD \u1EDF tr\u00EAn.\n -->\n @if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"serviceBodyClasses()\">\n <!--\n `hidden` (display:none), kh\u00F4ng ph\u1EA3i `invisible` \u2014 reveal-animation c\u1EE7a service mode\n (_revealContentWithAnimation) \u0111o ch\u00EAnh l\u1EC7ch chi\u1EC1u cao tr\u01B0\u1EDBc/sau khi h\u1EBFt loading \u0111\u1EC3 t\u1EA1o\n hi\u1EC7u \u1EE9ng \"t\u1EF1 expand\"; `invisible` v\u1EABn chi\u1EBFm ch\u1ED7 n\u00EAn chi\u1EC1u cao kh\u00F4ng \u0111\u1ED5i, m\u1EA5t hi\u1EC7u \u1EE9ng.\n V\u1EABn kh\u00F4ng d\u00F9ng @if structural \u1EDF \u0111\u00E2y \u0111\u1EC3 tr\u00E1nh ph\u00E1 h\u1EE7y component \u0111\u00E3 attach v\u00E0o #contentOutlet.\n -->\n <div [class.hidden]=\"effectiveContentLoading()\">\n <ng-template #contentOutlet />\n\n @if (isStringContent()) {\n <div data-testid=\"z-modal-content\" [innerHTML]=\"$any(config.zContent) | zSafeHtml\"></div>\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (!effectiveHideFooter()) {\n <footer\n [class.z-modal-footer-shadow]=\"shouldShowShadow()\"\n [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n @if (config.zCancelIcon) {\n <z-icon [zType]=\"config.zCancelIcon\" />\n }\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n @if (config.zOkIcon && !effectiveLoading()) {\n <z-icon [zType]=\"config.zOkIcon\" />\n }\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </div>\n </footer>\n }\n }\n}\n", styles: ["@charset \"UTF-8\";:host.z-modal-service-mode,:host.z-modal-template-mode{pointer-events:auto;--z-enter-opacity: 0;--z-enter-scale: .95;transform-origin:center center;animation:z-enter .2s cubic-bezier(.16,1,.3,1) forwards}:host.z-modal-service-mode.modal-leave,:host.z-modal-template-mode.modal-leave{--z-exit-opacity: 0;--z-exit-scale: .95;transform-origin:center center;animation:z-exit .15s cubic-bezier(.4,0,1,1) forwards}:host.z-modal-template-host{display:contents}::ng-deep .z-modal-backdrop-dark{background-color:#0009;animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-blur{background-color:#0000000d;backdrop-filter:blur(2px);animation:z-backdrop-enter .2s ease-out forwards}::ng-deep .z-modal-backdrop-dark.z-backdrop-leaving,::ng-deep .z-modal-backdrop-blur.z-backdrop-leaving{animation:z-backdrop-exit .15s ease-in forwards}.z-modal-header-shadow{padding-bottom:1rem;box-shadow:0 2px 8px -2px #0000001a}.z-modal-footer-shadow{padding-top:1rem;box-shadow:0 -2px 8px -2px #0000001a}.z-modal-header-border{border-bottom:1px solid var(--border)}.z-modal-footer-border{border-top:1px solid var(--border)}:host main{overscroll-behavior:contain}:host header,:host footer{transition:box-shadow .2s ease-out,padding .2s ease-out}.z-modal-scrollbar{--scrollbar-container-offset: 0px;--scrollbar-track-offset: 0px}:host.z-modal-height-morph{transition:height .24s cubic-bezier(.16,1,.3,1)}\n"] }]
|
|
686
690
|
}], ctorParameters: () => [], propDecorators: { zOk: [{ type: i0.Output, args: ["zOk"] }], zCancel: [{ type: i0.Output, args: ["zCancel"] }], zAfterClose: [{ type: i0.Output, args: ["zAfterClose"] }], zScrollbar: [{ type: i0.Output, args: ["zScrollbar"] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zBodyClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "zBodyClass", required: false }] }], zVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "zVisible", required: false }] }, { type: i0.Output, args: ["zVisibleChange"] }], zTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTitle", required: false }] }], zDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDescription", required: false }] }], zWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "zWidth", required: false }] }], zClosable: [{ type: i0.Input, args: [{ isSignal: true, alias: "zClosable", required: false }] }], zMaskClosable: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMaskClosable", required: false }] }], zDisableShadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDisableShadow", required: false }] }], zHeaderBorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "zHeaderBorder", required: false }] }], zFooterBorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "zFooterBorder", required: false }] }], zHideHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "zHideHeader", required: false }] }], zHideFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "zHideFooter", required: false }] }], zOkText: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOkText", required: false }] }], zCancelText: [{ type: i0.Input, args: [{ isSignal: true, alias: "zCancelText", required: false }] }], zOkDestructive: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOkDestructive", required: false }] }], zOkDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOkDisabled", required: false }] }], zLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLoading", required: false }] }], zContentLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "zContentLoading", required: false }] }], zSkeletonRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSkeletonRows", required: false }] }], zOverlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOverlay", required: false }] }], customHeader: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ZModalHeaderDirective), { isSignal: true }] }], customContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ZModalContentDirective), { isSignal: true }] }], customFooter: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ZModalFooterDirective), { isSignal: true }] }], contentOutlet: [{ type: i0.ViewChild, args: ['contentOutlet', { ...{ read: ViewContainerRef }, isSignal: true }] }], mainContentRef: [{ type: i0.ViewChild, args: ['mainContent', { isSignal: true }] }] } });
|
|
687
691
|
|
|
688
692
|
let ZModalRef = class ZModalRef {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-modal.mjs","sources":["../../../../libs/core-ui/components/z-modal/directives/z-modal-content.directive.ts","../../../../libs/core-ui/components/z-modal/directives/z-modal-footer.directive.ts","../../../../libs/core-ui/components/z-modal/directives/z-modal-header.directive.ts","../../../../libs/core-ui/components/z-modal/z-modal.define.ts","../../../../libs/core-ui/components/z-modal/z-modal.options.ts","../../../../libs/core-ui/components/z-modal/z-modal.utils.ts","../../../../libs/core-ui/components/z-modal/z-modal.variants.ts","../../../../libs/core-ui/components/z-modal/z-modal.component.ts","../../../../libs/core-ui/components/z-modal/z-modal.component.html","../../../../libs/core-ui/components/z-modal/z-modal.ref.ts","../../../../libs/core-ui/components/z-modal/z-modal.service.ts","../../../../libs/core-ui/components/z-modal/shival99-z-ui-components-z-modal.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-modal-content], [zModalContent]',\n standalone: true,\n})\nexport class ZModalContentDirective {\n public readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-modal-footer], [zModalFooter]',\n standalone: true,\n})\nexport class ZModalFooterDirective {\n public readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-modal-header], [zModalHeader]',\n standalone: true,\n})\nexport class ZModalHeaderDirective {\n public readonly templateRef = inject(TemplateRef<unknown>);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { InjectionToken } from '@angular/core';\n\nexport const Z_MODAL_DATA = new InjectionToken<any>('Z_MODAL_DATA');\nexport const Z_MODAL_ANIMATION_DURATION = 150;\nexport const Z_MODAL_CONTENT_REVEAL_DURATION = 240;\n\nexport enum ZModalTriggerAction {\n CANCEL = 'cancel',\n OK = 'ok',\n}\n","import type { EventEmitter, TemplateRef, Type, ViewContainerRef, WritableSignal } from '@angular/core';\nimport type { ZIcon } from '@shival99/z-ui/components/z-icon';\nimport type { ClassValue } from 'clsx';\nimport type { Observable } from 'rxjs';\nimport type { ZModalOnClickCallBack } from './z-modal.types';\n\n/**\n * Configuration options for z-modal component.\n *\n * @template T - The type of the content component\n * @template U - The type of the data passed to the modal\n */\nexport class ZModalOptions<T, U> {\n /** Icon for the cancel button */\n public zCancelIcon?: ZIcon;\n /** Text for the cancel button. Set to null to hide the button */\n public zCancelText?: string | null;\n /** Whether the modal is closable (shows close button) */\n public zClosable?: boolean;\n /** Confirm type for preset styling (show, info, warning, danger) */\n public zConfirmType?: 'show' | 'info' | 'warning' | 'danger';\n /** Icon for the confirm modal */\n public zConfirmIcon?: ZIcon;\n /** Modal content - can be a component, template, or string */\n public zContent?: string | TemplateRef<T> | Type<T>;\n /** Custom CSS classes for the modal */\n public class?: ClassValue;\n /** Custom CSS classes for the modal body */\n public zBodyClass?: ClassValue;\n /** Data to be passed to the content component via Z_MODAL_DATA token */\n public zData?: U;\n /**\n * Observable for deferred data loading before showing modal content.\n * Modal will show a loading spinner until the Observable completes.\n * The resolved data will be available via Z_MODAL_DATA.\n *\n * @example\n * ```typescript\n * this.modalService.create({\n * zDefer: this.userService.getUser(userId),\n * zContent: UserFormComponent,\n * });\n * ```\n */\n public zDefer?: Observable<U>;\n /** Description text shown below the title */\n public zDescription?: string;\n /** Whether to disable the header and footer shadows */\n public zDisableShadow?: boolean;\n /** Whether to show a border below the header */\n public zHeaderBorder?: boolean;\n /** Whether to show a border above the footer */\n public zFooterBorder?: boolean;\n /** Whether to hide the default footer */\n public zHideFooter?: boolean;\n /** Whether to hide the default header */\n public zHideHeader?: boolean;\n /**\n * WritableSignal to control loading state of the OK button.\n * Use this when submitting forms or calling APIs.\n *\n * @example Using with confirm modal (delete action)\n * ```typescript\n * const modalRef = this.modalService.danger({\n * zTitle: 'Delete Item',\n * zContent: 'Are you sure you want to delete this item?',\n * zOkText: 'Delete',\n * zOnOk: () => {\n * modalRef.setLoading(true);\n * this.api.delete(itemId).subscribe({\n * next: () => {\n * modalRef.setLoading(false);\n * modalRef.close();\n * },\n * error: () => modalRef.setLoading(false),\n * });\n * return false; // Prevent auto-close\n * },\n * });\n * ```\n */\n public readonly zLoading?: WritableSignal<boolean>;\n /** Whether clicking mask closes the modal */\n public zMaskClosable?: boolean;\n /** Whether OK button has destructive (red) style */\n public zOkDestructive?: boolean;\n /** Whether OK button is disabled */\n public zOkDisabled?: boolean;\n /** Overlay style: 'dark' (black overlay) or 'blur' (backdrop blur) */\n public zOverlay?: 'dark' | 'blur';\n /** Icon for the OK button */\n public zOkIcon?: ZIcon;\n /** Text for the OK button. Set to null to hide the button */\n public zOkText?: string | null;\n /** Callback or EventEmitter when cancel is clicked */\n public zOnCancel?: EventEmitter<T> | ZModalOnClickCallBack<T> = (): void => {};\n /** Callback or EventEmitter when OK is clicked */\n public zOnOk?: EventEmitter<T> | ZModalOnClickCallBack<T> = (): void => {};\n /** Modal title - supports string, HTML string, or TemplateRef */\n public zTitle?: string | TemplateRef<T>;\n /** ViewContainerRef for the modal portal */\n public zViewContainerRef?: ViewContainerRef;\n /** Modal width. In service mode this is applied as the minimum width to allow content to expand naturally. */\n public zWidth?: string;\n /** WritableSignal to control content loading state (shows skeleton when true) */\n public readonly zContentLoading?: WritableSignal<boolean>;\n /** Number of skeleton rows to show when content is loading */\n public zSkeletonRows?: number;\n}\n","import { zDetectBrowser } from '@shival99/z-ui/utils';\nimport type { ZModalConfirmConfig, ZModalConfirmType } from './z-modal.types';\n\nexport type ZModalOverlayType = 'dark' | 'blur';\nexport const getOverlayType = (): ZModalOverlayType => {\n const browser = zDetectBrowser();\n return browser.name === 'Chrome' ? 'dark' : 'blur';\n};\n\nexport const Z_MODAL_CONFIRM_CONFIG: Record<ZModalConfirmType, ZModalConfirmConfig> = {\n show: {\n icon: 'lucideMessageCircleQuestion',\n colors: {\n ring: 'bg-gray-500/10',\n bg: 'bg-gray-500/15',\n icon: 'text-gray-600!',\n },\n },\n info: {\n icon: 'lucideInfo',\n colors: {\n ring: 'bg-blue-500/10',\n bg: 'bg-blue-500/15',\n icon: 'text-blue-500!',\n },\n },\n warning: {\n icon: 'lucideTriangleAlert',\n colors: {\n ring: 'bg-amber-500/10',\n bg: 'bg-amber-500/15',\n icon: 'text-amber-500!',\n },\n },\n danger: {\n icon: 'lucideX',\n okDestructive: true,\n colors: {\n ring: 'bg-red-500/10',\n bg: 'bg-red-500/15',\n icon: 'text-red-500!',\n },\n },\n};\n","import { cva } from 'class-variance-authority';\n\nexport const zModalVariants = cva(\n [\n 'fixed left-[50vw] top-[50%] z-50 flex flex-col w-full translate-x-[-50%]',\n 'translate-y-[-50%] border bg-background py-4 shadow-lg rounded-lg',\n 'max-w-[calc(100%-2rem)] overflow-hidden',\n 'max-h-[80dvh]',\n ].join(' ')\n);\n","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n type ComponentRef,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n type EmbeddedViewRef,\n inject,\n type Injector,\n input,\n model,\n OnDestroy,\n output,\n PLATFORM_ID,\n signal,\n type TemplateRef,\n type Type,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZOverlayService, type ZOverlayRef } from '@shival99/z-ui/components/z-overlay';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZContentTypePipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZOverlayContainerService, ZOverlayZIndexService, ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { Subscription } from 'rxjs';\nimport { ZModalContentDirective } from './directives/z-modal-content.directive';\nimport { ZModalFooterDirective } from './directives/z-modal-footer.directive';\nimport { ZModalHeaderDirective } from './directives/z-modal-header.directive';\nimport { Z_MODAL_ANIMATION_DURATION, Z_MODAL_CONTENT_REVEAL_DURATION } from './z-modal.define';\nimport { ZModalOptions } from './z-modal.options';\nimport { ZModalRef } from './z-modal.ref';\nimport { getOverlayType, Z_MODAL_CONFIRM_CONFIG } from './z-modal.utils';\nimport { zModalVariants } from './z-modal.variants';\n\n@Component({\n selector: 'z-modal',\n imports: [\n NgTemplateOutlet,\n ZButtonComponent,\n ZIconComponent,\n ZContentTypePipe,\n ZTooltipDirective,\n ZSkeletonComponent,\n NgScrollbar,\n ZSafeHtmlPipe,\n TranslatePipe,\n CdkScrollable,\n ],\n standalone: true,\n templateUrl: './z-modal.component.html',\n styleUrl: './z-modal.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'effectiveWidth()',\n },\n exportAs: 'zModal',\n})\nexport class ZModalComponent<T, U> implements OnDestroy, AfterViewChecked {\n public zOk = output<void>();\n public zCancel = output<void>();\n public zAfterClose = output<void>();\n public readonly zScrollbar = output<NgScrollbar>();\n\n public readonly class = input<ClassValue>('');\n public readonly zBodyClass = input<ClassValue>('');\n public readonly zVisible = model<boolean>(false);\n public readonly zTitle = input<string | TemplateRef<unknown>>();\n public readonly zDescription = input<string | TemplateRef<unknown>>();\n public readonly zWidth = input<string>('500px');\n public readonly zClosable = input<boolean>(true);\n public readonly zMaskClosable = input<boolean>(true);\n public readonly zDisableShadow = input<boolean>(false);\n public readonly zHeaderBorder = input<boolean>(false);\n public readonly zFooterBorder = input<boolean>(false);\n public readonly zHideHeader = input<boolean>(false);\n public readonly zHideFooter = input<boolean>(false);\n public readonly zOkText = input<string | null>(null);\n public readonly zCancelText = input<string | null>(null);\n public readonly zOkDestructive = input<boolean>(false);\n public readonly zOkDisabled = input<boolean>(false);\n public readonly zLoading = input<boolean>(false);\n public readonly zContentLoading = input<boolean>(false);\n public readonly zSkeletonRows = input<number>(3);\n public readonly zOverlay = input<'dark' | 'blur'>(getOverlayType());\n\n protected readonly customHeader = contentChild(ZModalHeaderDirective);\n protected readonly customContent = contentChild(ZModalContentDirective);\n protected readonly customFooter = contentChild(ZModalFooterDirective);\n\n public modalRef?: ZModalRef<T>;\n protected readonly contentOutlet = viewChild('contentOutlet', { read: ViewContainerRef });\n protected readonly mainContentRef = viewChild<NgScrollbar>('mainContent');\n\n protected readonly config = inject(ZModalOptions<T, U>, { optional: true }) || new ZModalOptions<T, U>();\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _host = inject(ElementRef<HTMLElement>);\n private readonly _overlayService = inject(ZOverlayService);\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _zTranslate = inject(ZTranslateService);\n private readonly _overlayContainerService = inject(ZOverlayContainerService);\n private readonly _zIndexService = inject(ZOverlayZIndexService);\n\n private _templateOverlayRef: ZOverlayRef | null = null;\n private _originalParent: HTMLElement | null = null;\n private _originalNextSibling: Node | null = null;\n private _backdropSubscription: Subscription | null = null;\n private _closeTimeout: ReturnType<typeof setTimeout> | null = null;\n private _contentRevealTimeout: ReturnType<typeof setTimeout> | null = null;\n private _contentResizeObserver: ResizeObserver | null = null;\n private _lastLoadingHeight: number | null = null;\n private _wasContentLoading = false;\n\n protected readonly isLeaving = signal(false);\n protected readonly hasScrollableContent = signal(false);\n protected readonly isScrolledFromTop = signal(false);\n protected readonly isScrolledToBottom = signal(false);\n protected readonly isServiceMode = computed(() => !!this.modalRef);\n protected readonly isTemplateMode = computed(() => !this.isServiceMode());\n protected readonly isConfirmMode = computed(() => !!this.config.zConfirmType);\n protected readonly shouldRenderContent = computed(() => this.zVisible() || this.isLeaving());\n protected readonly isStringContent = computed(\n () => typeof this.config.zContent === 'string' && !this.isConfirmMode()\n );\n\n private _lastScrollHeight = 0;\n\n public ngAfterViewChecked(): void {\n this._checkScrollState();\n }\n\n private _checkScrollState(): void {\n const scrollbar = this.mainContentRef();\n if (!scrollbar) {\n return;\n }\n\n const viewport = scrollbar.nativeElement.querySelector('.ng-scroll-viewport') as HTMLElement;\n if (!viewport) {\n return;\n }\n\n if (viewport.scrollHeight === this._lastScrollHeight) {\n return;\n }\n this._lastScrollHeight = viewport.scrollHeight;\n\n const hasVerticalScroll = viewport.scrollHeight > viewport.clientHeight;\n this.hasScrollableContent.set(hasVerticalScroll);\n }\n\n public onContentScroll(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n\n const { scrollTop } = target;\n const { scrollHeight } = target;\n const { clientHeight } = target;\n\n this.isScrolledFromTop.set(scrollTop > 0);\n this.isScrolledToBottom.set(scrollTop + clientHeight >= scrollHeight - 1);\n }\n\n protected readonly confirmIconColors = computed(() => {\n const type = this.config.zConfirmType ?? 'show';\n return Z_MODAL_CONFIRM_CONFIG[type].colors;\n });\n\n protected readonly effectiveTitle = computed(() => (this.isServiceMode() ? this.config.zTitle : this.zTitle()));\n\n protected readonly effectiveDescription = computed(() =>\n this.isServiceMode() ? this.config.zDescription : this.zDescription()\n );\n\n protected readonly hasEffectiveDescription = computed(() => !!this.effectiveDescription());\n\n protected readonly headerContentClasses = computed(() =>\n zMergeClasses(\n 'flex w-full justify-between overflow-hidden px-4',\n this.hasEffectiveDescription() ? 'items-start' : 'items-center'\n )\n );\n\n protected readonly effectiveBodyClass = computed(() =>\n this.isServiceMode() ? this.config.zBodyClass : this.zBodyClass()\n );\n\n protected readonly templateBodyClasses = computed(() => {\n const hideHeader = this.effectiveHideHeader();\n const hideFooter = this.effectiveHideFooter();\n const bodySpacingClass = hideHeader && hideFooter ? 'py-0' : hideHeader ? 'pt-0' : hideFooter ? 'pb-0' : '';\n\n return zMergeClasses(\n 'relative flex min-h-[12.5rem] flex-col gap-4 px-4 py-4',\n this.effectiveBodyClass(),\n bodySpacingClass\n );\n });\n\n protected readonly serviceBodyClasses = computed(() => {\n const hideHeader = this.effectiveHideHeader();\n const hideFooter = this.effectiveHideFooter();\n const bodySpacingClass = hideHeader && hideFooter ? 'py-0' : hideHeader ? 'pt-0' : hideFooter ? 'pb-0' : '';\n\n return zMergeClasses('flex min-h-0 flex-col gap-4 px-4 py-4', this.effectiveBodyClass(), bodySpacingClass);\n });\n\n protected readonly effectiveClosable = computed(() =>\n this.isServiceMode() ? (this.config.zClosable ?? true) : this.zClosable()\n );\n\n protected readonly effectiveDisableShadow = computed(() =>\n this.isServiceMode() ? (this.config.zDisableShadow ?? false) : this.zDisableShadow()\n );\n\n protected readonly shouldShowShadow = computed(() => !this.effectiveDisableShadow());\n\n protected readonly effectiveHeaderBorder = computed(() =>\n this.isServiceMode() ? (this.config.zHeaderBorder ?? false) : this.zHeaderBorder()\n );\n\n protected readonly effectiveFooterBorder = computed(() =>\n this.isServiceMode() ? (this.config.zFooterBorder ?? false) : this.zFooterBorder()\n );\n\n protected readonly effectiveHideFooter = computed(() =>\n this.isServiceMode() ? this.config.zHideFooter : this.zHideFooter()\n );\n\n protected readonly effectiveHideHeader = computed(() =>\n this.isServiceMode() ? this.config.zHideHeader : this.zHideHeader()\n );\n\n protected readonly effectiveOkText = computed(() => (this.isServiceMode() ? this.config.zOkText : this.zOkText()));\n\n protected readonly effectiveCancelText = computed(() =>\n this.isServiceMode() ? this.config.zCancelText : this.zCancelText()\n );\n\n protected readonly effectiveOkDestructive = computed(() =>\n this.isServiceMode() ? this.config.zOkDestructive : this.zOkDestructive()\n );\n\n protected readonly effectiveTypeOk = computed((): ZButtonVariants['zType'] => {\n if (!this.isServiceMode()) {\n return 'default';\n }\n\n const typeMap: Record<string, ZButtonVariants['zType']> = {\n show: 'default',\n info: 'info',\n warning: 'warning',\n danger: 'error',\n };\n\n const confirmType = this.config.zConfirmType;\n return confirmType ? (typeMap[confirmType] ?? 'default') : 'default';\n });\n\n protected readonly effectiveOkDisabled = computed(() =>\n this.isServiceMode() ? this.config.zOkDisabled : this.zOkDisabled()\n );\n\n protected readonly effectiveLoading = computed(() => {\n if (this.isServiceMode()) {\n return this.modalRef?.loading() || (this.config.zLoading?.() ?? false);\n }\n return this.zLoading();\n });\n\n protected readonly effectiveContentLoading = computed(() => {\n if (this.isServiceMode()) {\n return this.config.zContentLoading?.() ?? false;\n }\n return this.zContentLoading();\n });\n\n protected readonly effectiveSkeletonRows = computed(() => {\n if (this.isServiceMode()) {\n return this.config.zSkeletonRows ?? 3;\n }\n return this.zSkeletonRows();\n });\n\n protected readonly effectiveWidth = computed(() => {\n if (this.isServiceMode()) {\n return this.config.zWidth ?? this.zWidth();\n }\n return this.shouldRenderContent() ? this.zWidth() : null;\n });\n\n protected readonly isDeferLoading = computed(() => {\n if (!this.isServiceMode()) {\n return false;\n }\n return !!this.config.zDefer && !this.contentOutlet()?.length;\n });\n\n protected readonly classes = computed(() =>\n zMergeClasses(zModalVariants(), this.isServiceMode() ? this.config.class : this.class())\n );\n\n protected readonly hostClasses = computed(() => {\n const baseClasses = this.classes();\n if (this.isServiceMode()) {\n return `${baseClasses} z-modal-service-mode`.trim();\n }\n if (this.shouldRenderContent()) {\n return `${baseClasses} z-modal-template-mode`.trim();\n }\n return 'z-modal-template-host';\n });\n\n constructor() {\n effect(() => {\n this._zTranslate.currentLang();\n this._cdr.markForCheck();\n });\n\n effect(() => {\n const scrollbar = this.mainContentRef();\n if (scrollbar) {\n this.zScrollbar.emit(scrollbar);\n }\n });\n\n effect(() => {\n const visible = this.zVisible();\n if (visible && this.isTemplateMode() && !this._templateOverlayRef) {\n this._openTemplateOverlay();\n return;\n }\n\n if (!visible && this.isTemplateMode() && this._templateOverlayRef && !this.isLeaving()) {\n this._closeWithAnimation();\n }\n });\n\n if (isPlatformBrowser(this._platformId)) {\n this._contentResizeObserver = new ResizeObserver(() => {\n const isSkeletonSwap = this.isServiceMode() && !this.isConfirmMode();\n if (isSkeletonSwap && this.effectiveContentLoading()) {\n this._lastLoadingHeight = this._host.nativeElement.offsetHeight;\n }\n });\n this._contentResizeObserver.observe(this._host.nativeElement);\n }\n\n effect(() => {\n const isSkeletonSwap = this.isServiceMode() && !this.isConfirmMode();\n const loading = isSkeletonSwap && this.effectiveContentLoading();\n\n if (!loading && this._wasContentLoading) {\n // Đợi 1 tick để template patch xong (bỏ skeleton) trước khi đo chiều cao mới.\n setTimeout(() => this._revealContentWithAnimation(), 0);\n }\n\n this._wasContentLoading = loading;\n });\n }\n\n public ngOnDestroy(): void {\n this._clearCloseTimeout();\n this._clearContentRevealTimeout();\n this._contentResizeObserver?.disconnect();\n this._disposeTemplateOverlay();\n }\n\n public isDestroyed(): boolean {\n return this._destroyRef.destroyed;\n }\n\n public getNativeElement(): HTMLElement {\n return this._host.nativeElement;\n }\n\n public attachComponentPortal<C>(component: Type<C>, injector?: Injector): ComponentRef<C> {\n this._cdr.detectChanges();\n const outlet = this.contentOutlet();\n if (outlet && outlet.length > 0) {\n throw new Error('Attempting to attach modal content after content is already attached');\n }\n return outlet?.createComponent(component, { injector }) as ComponentRef<C>;\n }\n\n public attachTemplatePortal<C>(templateRef: TemplateRef<C>, context: C): EmbeddedViewRef<C> {\n const outlet = this.contentOutlet();\n if (outlet && outlet.length > 0) {\n throw new Error('Attempting to attach modal content after content is already attached');\n }\n return outlet?.createEmbeddedView(templateRef, context) as EmbeddedViewRef<C>;\n }\n\n public onOkClick(): void {\n if (this.effectiveLoading()) {\n return;\n }\n this.zOk.emit();\n }\n\n public onCloseClick(): void {\n if (this.effectiveLoading()) {\n return;\n }\n this.zCancel.emit();\n if (this.isTemplateMode()) {\n this._closeWithAnimation();\n }\n }\n\n public onBackdropClick(): void {\n if (this.zMaskClosable() && !this.effectiveLoading()) {\n this.zCancel.emit();\n this._closeWithAnimation();\n }\n }\n\n public open(): void {\n this.isLeaving.set(false);\n this.zVisible.set(true);\n }\n\n public close(): void {\n this._closeWithAnimation();\n }\n\n private _createOverlay(): ZOverlayRef | null {\n if (!isPlatformBrowser(this._platformId)) {\n return null;\n }\n\n const overlayType = getOverlayType();\n const backdropClass = overlayType === 'blur' ? 'z-modal-backdrop-blur' : 'z-modal-backdrop-dark';\n\n return this._overlayService.createGlobal({\n hasBackdrop: true,\n backdropClass,\n panelClass: 'z-modal-overlay-pane',\n scrollLock: true,\n });\n }\n\n private _openTemplateOverlay(): void {\n if (this._templateOverlayRef) {\n return;\n }\n\n this._templateOverlayRef = this._createOverlay();\n if (!this._templateOverlayRef) {\n return;\n }\n\n this._zIndexService.applyToOverlay(this._templateOverlayRef);\n this._zIndexService.deferMoveToTop(this._templateOverlayRef);\n\n const hostElement = this._host.nativeElement;\n this._originalParent = hostElement.parentElement;\n this._originalNextSibling = hostElement.nextSibling;\n\n this._templateOverlayRef.overlayElement.appendChild(hostElement);\n\n this._backdropSubscription = this._templateOverlayRef.backdropClick().subscribe(() => {\n this.onBackdropClick();\n });\n }\n\n private _closeWithAnimation(): void {\n if (this.isLeaving()) {\n return;\n }\n\n this._overlayContainerService.notifyClosing();\n this.isLeaving.set(true);\n this.zVisible.set(false);\n\n const hostElement = this._host.nativeElement;\n const { backdropElement } = this._templateOverlayRef ?? {};\n\n if (backdropElement) {\n backdropElement.classList.add('z-backdrop-leaving');\n }\n\n hostElement.classList.add('modal-leave');\n\n this._clearCloseTimeout();\n this._closeTimeout = setTimeout(() => {\n if (this._destroyRef.destroyed) {\n return;\n }\n\n this.isLeaving.set(false);\n this._disposeTemplateOverlay();\n this.zAfterClose.emit();\n }, Z_MODAL_ANIMATION_DURATION);\n }\n\n private _clearCloseTimeout(): void {\n if (!this._closeTimeout) {\n return;\n }\n\n clearTimeout(this._closeTimeout);\n this._closeTimeout = null;\n }\n\n private _revealContentWithAnimation(): void {\n const oldHeight = this._lastLoadingHeight;\n this._lastLoadingHeight = null;\n if (oldHeight == null || !isPlatformBrowser(this._platformId) || this._destroyRef.destroyed) {\n return;\n }\n\n const host = this._host.nativeElement;\n const newHeight = host.offsetHeight;\n\n if (newHeight <= oldHeight) {\n return;\n }\n\n this._clearContentRevealTimeout();\n\n host.style.height = `${oldHeight}px`;\n void host.offsetHeight;\n host.classList.add('z-modal-height-morph');\n\n // 2 rAF lồng nhau để browser paint chiều cao cũ trước, tránh transition bị gộp frame và mất hiệu ứng.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n host.style.height = `${newHeight}px`;\n });\n });\n\n this._contentRevealTimeout = setTimeout(() => {\n host.classList.remove('z-modal-height-morph');\n host.style.height = '';\n this._contentRevealTimeout = null;\n }, Z_MODAL_CONTENT_REVEAL_DURATION + 50);\n }\n\n private _clearContentRevealTimeout(): void {\n if (!this._contentRevealTimeout) {\n return;\n }\n\n clearTimeout(this._contentRevealTimeout);\n this._contentRevealTimeout = null;\n }\n\n private _disposeTemplateOverlay(): void {\n const hostElement = this._host.nativeElement;\n\n if (this._originalParent && this._originalNextSibling) {\n this._originalParent.insertBefore(hostElement, this._originalNextSibling);\n }\n\n if (this._originalParent && !this._originalNextSibling) {\n this._originalParent.appendChild(hostElement);\n }\n\n hostElement.classList.remove('modal-leave');\n if (this._templateOverlayRef) {\n this._templateOverlayRef.dispose();\n this._templateOverlayRef = null;\n }\n\n this._originalParent = null;\n this._originalNextSibling = null;\n\n if (this._backdropSubscription) {\n this._backdropSubscription.unsubscribe();\n this._backdropSubscription = null;\n }\n }\n}\n","<!-- Template mode content (rendered in host element, which is moved to overlay) -->\n@if (isTemplateMode() && shouldRenderContent()) {\n @if (customHeader(); as headerDir) {\n <header [class.z-modal-header-shadow]=\"shouldShowShadow()\" [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex items-start justify-between px-4\">\n <ng-container *ngTemplateOutlet=\"headerDir.templateRef\" />\n </div>\n </header>\n } @else if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n @if (effectiveDescription(); as description) {\n @switch (description | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(description)\" />\n }\n @case ('html') {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-1 text-sm\"\n [innerHTML]=\"$any(description) | zSafeHtml\"></p>\n }\n @default {\n <p data-testid=\"z-modal-description\" class=\"text-muted-foreground m-0 mt-1 text-sm\">\n {{ $any(description) | translate }}\n </p>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"templateBodyClasses()\">\n <div [class.invisible]=\"effectiveContentLoading()\" [class.pointer-events-none]=\"effectiveContentLoading()\">\n @if (customContent(); as contentDir) {\n <ng-container *ngTemplateOutlet=\"contentDir.templateRef\" />\n } @else {\n <ng-content />\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (customFooter(); as footerDir) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n <ng-container *ngTemplateOutlet=\"footerDir.templateRef\" />\n </div>\n </footer>\n } @else if (!effectiveHideFooter()) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button type=\"button\" data-testid=\"z-modal-cancel-button\" z-button zType=\"outline\" (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? ('i18n_z_ui_modal_cancel' | translate) }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? ('i18n_z_ui_common_ok' | translate) }}\n </button>\n }\n </div>\n </footer>\n }\n}\n\n<!-- Service mode content -->\n@if (isServiceMode()) {\n <!-- Confirm Modal Layout (no skeleton) -->\n @if (isConfirmMode()) {\n <div class=\"flex flex-col items-center px-4 pt-2 pb-4 text-center\">\n @if (config.zConfirmIcon) {\n <div class=\"relative mb-4 flex size-20 items-center justify-center\">\n <div class=\"absolute inset-0 rounded-full\" [class]=\"confirmIconColors().ring\"></div>\n <div class=\"relative flex size-14 items-center justify-center rounded-full\" [class]=\"confirmIconColors().bg\">\n <z-icon [zType]=\"config.zConfirmIcon\" zSize=\"30\" [zStrokeWidth]=\"2.6\" [class]=\"confirmIconColors().icon\" />\n </div>\n </div>\n }\n\n <!-- Title centered -->\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 text-lg leading-snug font-semibold\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4 data-testid=\"z-modal-title\" class=\"m-0 text-lg leading-snug font-semibold\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n\n <!-- Description centered -->\n @if (config.zContent; as content) {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-2 text-sm\"\n [innerHTML]=\"$any(content) | translate | zSafeHtml\"></p>\n }\n </div>\n\n <!-- Footer centered -->\n @if (!effectiveHideFooter()) {\n <footer class=\"mt-4 flex flex-row justify-center gap-3 pb-2\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveTypeOk()\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </footer>\n }\n } @else {\n <!-- Normal Modal Layout -->\n @if (!effectiveContentLoading()) {\n @if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"serviceBodyClasses()\">\n <ng-template #contentOutlet />\n\n @if (isStringContent()) {\n <div data-testid=\"z-modal-content\" [innerHTML]=\"$any(config.zContent) | zSafeHtml\"></div>\n }\n </main>\n </ng-scrollbar>\n\n @if (!effectiveHideFooter()) {\n <footer\n [class.z-modal-footer-shadow]=\"shouldShowShadow()\"\n [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n @if (config.zCancelIcon) {\n <z-icon [zType]=\"config.zCancelIcon\" />\n }\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n @if (config.zOkIcon && !effectiveLoading()) {\n <z-icon [zType]=\"config.zOkIcon\" />\n }\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </div>\n </footer>\n }\n } @else {\n <div class=\"flex h-[12.5rem] flex-col gap-4 px-4 py-4\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isPlatformBrowser } from '@angular/common';\nimport { EventEmitter, Inject, PLATFORM_ID, signal } from '@angular/core';\nimport type { ZOverlayRef } from '@shival99/z-ui/components/z-overlay';\nimport { filter, fromEvent, Subject, takeUntil } from 'rxjs';\nimport { ZModalComponent } from './z-modal.component';\nimport { Z_MODAL_ANIMATION_DURATION, ZModalTriggerAction } from './z-modal.define';\nimport { ZModalOptions } from './z-modal.options';\n\nexport class ZModalRef<T = any, R = any, U = any> {\n private readonly _destroy$ = new Subject<void>();\n private _isClosing = false;\n private _result?: R;\n\n public componentInstance: T | null = null;\n public readonly loading = signal(false);\n public readonly zAfterClose = new EventEmitter<R | undefined>();\n\n public constructor(\n private readonly _overlayRef: ZOverlayRef,\n private readonly _config: ZModalOptions<T, U>,\n private readonly _containerInstance: ZModalComponent<T, U>,\n @Inject(PLATFORM_ID) private readonly _platformId: object\n ) {\n this._containerInstance.zCancel.subscribe(() => this._trigger(ZModalTriggerAction.CANCEL));\n this._containerInstance.zOk.subscribe(() => this._trigger(ZModalTriggerAction.OK));\n\n if ((this._config.zMaskClosable ?? true) && isPlatformBrowser(this._platformId)) {\n this._overlayRef\n .backdropClick()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.loading()) {\n this._trigger(ZModalTriggerAction.CANCEL);\n }\n });\n }\n\n if (isPlatformBrowser(this._platformId)) {\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter(event => event.key === 'Escape'),\n takeUntil(this._destroy$)\n )\n .subscribe(() => {\n // Chỉ overlay trên cùng phản hồi Escape — modal-trong-modal không đóng dồn cả stack.\n if (!this.loading() && this._overlayRef.isTopmost()) {\n this._trigger(ZModalTriggerAction.CANCEL);\n }\n });\n }\n }\n\n public setLoading(value: boolean): void {\n this.loading.set(value);\n }\n\n public close(result?: R): void {\n if (this._isClosing) {\n return;\n }\n\n this._isClosing = true;\n this._result = result;\n this._overlayRef?.markClosing();\n\n if (isPlatformBrowser(this._platformId)) {\n const hostElement = this._containerInstance.getNativeElement();\n hostElement.classList.add('modal-leave');\n const { backdropElement } = this._overlayRef;\n if (backdropElement) {\n backdropElement.classList.add('z-backdrop-leaving');\n }\n }\n\n setTimeout(() => {\n if (!this._containerInstance.isDestroyed()) {\n this._containerInstance.zAfterClose.emit();\n }\n\n this.zAfterClose.emit(this._result);\n\n this._overlayRef?.dispose();\n\n if (!this._destroy$.closed) {\n this._destroy$.next();\n this._destroy$.complete();\n }\n }, Z_MODAL_ANIMATION_DURATION);\n }\n\n private _trigger(action: ZModalTriggerAction): void {\n if (this.loading()) {\n return;\n }\n\n const trigger = {\n ok: this._config.zOnOk,\n cancel: this._config.zOnCancel,\n }[action];\n\n if (trigger instanceof EventEmitter) {\n trigger.emit(this._getContentComponent());\n return;\n }\n\n if (typeof trigger === 'function') {\n const result = trigger(this._getContentComponent(), this) as R;\n this._closeWithResult(result);\n return;\n }\n\n this.close();\n }\n\n private _getContentComponent(): T {\n return this.componentInstance as T;\n }\n\n private _closeWithResult(result: R): void {\n if (result !== false) {\n this.close(result);\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, Injector, PLATFORM_ID, TemplateRef, type Type } from '@angular/core';\nimport { ZOverlayService, type ZOverlayRef } from '@shival99/z-ui/components/z-overlay';\nimport { ZOverlayZIndexService, ZTranslateService } from '@shival99/z-ui/services';\nimport { ZModalComponent } from './z-modal.component';\nimport { Z_MODAL_DATA } from './z-modal.define';\nimport { ZModalOptions } from './z-modal.options';\nimport { ZModalRef } from './z-modal.ref';\nimport { ZModalConfirmOptions, ZModalConfirmType, ZModalContentType } from './z-modal.types';\nimport { getOverlayType, Z_MODAL_CONFIRM_CONFIG } from './z-modal.utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZModalService {\n private readonly _overlayService = inject(ZOverlayService);\n private readonly _injector = inject(Injector);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _zTranslate = inject(ZTranslateService);\n private readonly _zIndexService = inject(ZOverlayZIndexService);\n\n public create<T, U>(config: ZModalOptions<T, U>): ZModalRef<T> {\n return this._open<T, U>(config.zContent as Type<T>, config);\n }\n\n public show<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('show', options);\n }\n\n public info<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('info', options);\n }\n\n public warning<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('warning', options);\n }\n\n public danger<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('danger', options);\n }\n\n private _confirmModal<U>(type: ZModalConfirmType, options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n const typeConfig = Z_MODAL_CONFIRM_CONFIG[type];\n this._zTranslate.currentLang();\n\n const config: ZModalOptions<unknown, U> = {\n zTitle: options.zTitle,\n zContent: options.zContent,\n zOkText: options.zOkText ?? this._zTranslate.translate('i18n_z_ui_modal_confirm')(),\n zCancelText: options.zCancelText ?? this._zTranslate.translate('i18n_z_ui_modal_cancel')(),\n zOkDestructive: typeConfig.okDestructive,\n zConfirmIcon: options.zIcon ?? typeConfig.icon,\n zMaskClosable: options.zMaskClosable ?? true,\n zWidth: options.zWidth ?? '500px',\n zConfirmType: type,\n zData: options.zData,\n zOnOk: () => options.zOnOk?.(),\n zOnCancel: () => options.zOnCancel?.(),\n };\n\n return this.create(config);\n }\n\n private _open<T, U>(componentOrTemplateRef: ZModalContentType<T>, config: ZModalOptions<T, U>) {\n const overlayRef = this._createOverlay(config);\n\n if (!overlayRef) {\n return new ZModalRef(\n undefined as unknown as ZOverlayRef,\n config,\n undefined as unknown as ZModalComponent<T, U>,\n this._platformId\n );\n }\n\n const modalContainer = this._attachModalContainer<T, U>(overlayRef, config);\n const modalRef = this._attachModalContent<T, U>(componentOrTemplateRef, modalContainer, overlayRef, config);\n\n return modalRef;\n }\n\n private _createOverlay<T, U>(config: ZModalOptions<T, U>): ZOverlayRef | undefined {\n if (!isPlatformBrowser(this._platformId)) {\n return undefined;\n }\n\n const overlayType = config.zOverlay ?? getOverlayType();\n const backdropClass = overlayType === 'blur' ? 'z-modal-backdrop-blur' : 'z-modal-backdrop-dark';\n const overlayRef = this._overlayService.createGlobal({\n hasBackdrop: true,\n backdropClass,\n scrollLock: true,\n });\n\n this._zIndexService.applyToOverlay(overlayRef);\n this._zIndexService.deferMoveToTop(overlayRef);\n\n return overlayRef;\n }\n\n private _attachModalContainer<T, U>(overlayRef: ZOverlayRef, config: ZModalOptions<T, U>) {\n const injector = Injector.create({\n parent: this._injector,\n providers: [{ provide: ZModalOptions, useValue: config }],\n });\n\n const containerRef = overlayRef.attach<ZModalComponent<T, U>>(ZModalComponent, {\n injector,\n viewContainerRef: config.zViewContainerRef,\n });\n\n return containerRef.instance;\n }\n\n private _attachModalContent<T, U>(\n componentOrTemplateRef: ZModalContentType<T>,\n modalContainer: ZModalComponent<T, U>,\n overlayRef: ZOverlayRef,\n config: ZModalOptions<T, U>\n ) {\n const modalRef = new ZModalRef<T>(overlayRef, config, modalContainer, this._platformId);\n modalContainer.modalRef = modalRef;\n\n if (componentOrTemplateRef instanceof TemplateRef) {\n modalContainer.attachTemplatePortal(componentOrTemplateRef, { modalRef } as T);\n return modalRef;\n }\n\n if (typeof componentOrTemplateRef !== 'string') {\n const injector = this._createInjector<T, U>(modalRef, config);\n const contentRef = modalContainer.attachComponentPortal<T>(componentOrTemplateRef, injector);\n\n if (contentRef) {\n modalRef.componentInstance = contentRef.instance;\n }\n }\n\n return modalRef;\n }\n\n private _createInjector<T, U>(modalRef: ZModalRef<T>, config: ZModalOptions<T, U>) {\n return Injector.create({\n parent: this._injector,\n providers: [\n { provide: ZModalRef, useValue: modalRef },\n { provide: Z_MODAL_DATA, useValue: config.zData },\n ],\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-modal.mjs","sources":["../../../../libs/core-ui/components/z-modal/directives/z-modal-content.directive.ts","../../../../libs/core-ui/components/z-modal/directives/z-modal-footer.directive.ts","../../../../libs/core-ui/components/z-modal/directives/z-modal-header.directive.ts","../../../../libs/core-ui/components/z-modal/z-modal.define.ts","../../../../libs/core-ui/components/z-modal/z-modal.options.ts","../../../../libs/core-ui/components/z-modal/z-modal.utils.ts","../../../../libs/core-ui/components/z-modal/z-modal.variants.ts","../../../../libs/core-ui/components/z-modal/z-modal.component.ts","../../../../libs/core-ui/components/z-modal/z-modal.component.html","../../../../libs/core-ui/components/z-modal/z-modal.ref.ts","../../../../libs/core-ui/components/z-modal/z-modal.service.ts","../../../../libs/core-ui/components/z-modal/shival99-z-ui-components-z-modal.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-modal-content], [zModalContent]',\n standalone: true,\n})\nexport class ZModalContentDirective {\n public readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-modal-footer], [zModalFooter]',\n standalone: true,\n})\nexport class ZModalFooterDirective {\n public readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-modal-header], [zModalHeader]',\n standalone: true,\n})\nexport class ZModalHeaderDirective {\n public readonly templateRef = inject(TemplateRef<unknown>);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { InjectionToken } from '@angular/core';\n\nexport const Z_MODAL_DATA = new InjectionToken<any>('Z_MODAL_DATA');\nexport const Z_MODAL_ANIMATION_DURATION = 150;\nexport const Z_MODAL_CONTENT_REVEAL_DURATION = 240;\n\nexport enum ZModalTriggerAction {\n CANCEL = 'cancel',\n OK = 'ok',\n}\n","import type { EventEmitter, TemplateRef, Type, ViewContainerRef, WritableSignal } from '@angular/core';\nimport type { ZIcon } from '@shival99/z-ui/components/z-icon';\nimport type { ClassValue } from 'clsx';\nimport type { Observable } from 'rxjs';\nimport type { ZModalOnClickCallBack } from './z-modal.types';\n\n/**\n * Configuration options for z-modal component.\n *\n * @template T - The type of the content component\n * @template U - The type of the data passed to the modal\n */\nexport class ZModalOptions<T, U> {\n /** Icon for the cancel button */\n public zCancelIcon?: ZIcon;\n /** Text for the cancel button. Set to null to hide the button */\n public zCancelText?: string | null;\n /** Whether the modal is closable (shows close button) */\n public zClosable?: boolean;\n /** Confirm type for preset styling (show, info, warning, danger) */\n public zConfirmType?: 'show' | 'info' | 'warning' | 'danger';\n /** Icon for the confirm modal */\n public zConfirmIcon?: ZIcon;\n /** Modal content - can be a component, template, or string */\n public zContent?: string | TemplateRef<T> | Type<T>;\n /** Custom CSS classes for the modal */\n public class?: ClassValue;\n /** Custom CSS classes for the modal body */\n public zBodyClass?: ClassValue;\n /** Data to be passed to the content component via Z_MODAL_DATA token */\n public zData?: U;\n /**\n * Observable for deferred data loading before showing modal content.\n * Modal will show a loading spinner until the Observable completes.\n * The resolved data will be available via Z_MODAL_DATA.\n *\n * @example\n * ```typescript\n * this.modalService.create({\n * zDefer: this.userService.getUser(userId),\n * zContent: UserFormComponent,\n * });\n * ```\n */\n public zDefer?: Observable<U>;\n /** Description text shown below the title */\n public zDescription?: string;\n /** Whether to disable the header and footer shadows */\n public zDisableShadow?: boolean;\n /** Whether to show a border below the header */\n public zHeaderBorder?: boolean;\n /** Whether to show a border above the footer */\n public zFooterBorder?: boolean;\n /** Whether to hide the default footer */\n public zHideFooter?: boolean;\n /** Whether to hide the default header */\n public zHideHeader?: boolean;\n /**\n * WritableSignal to control loading state of the OK button.\n * Use this when submitting forms or calling APIs.\n *\n * @example Using with confirm modal (delete action)\n * ```typescript\n * const modalRef = this.modalService.danger({\n * zTitle: 'Delete Item',\n * zContent: 'Are you sure you want to delete this item?',\n * zOkText: 'Delete',\n * zOnOk: () => {\n * modalRef.setLoading(true);\n * this.api.delete(itemId).subscribe({\n * next: () => {\n * modalRef.setLoading(false);\n * modalRef.close();\n * },\n * error: () => modalRef.setLoading(false),\n * });\n * return false; // Prevent auto-close\n * },\n * });\n * ```\n */\n public readonly zLoading?: WritableSignal<boolean>;\n /** Whether clicking mask closes the modal */\n public zMaskClosable?: boolean;\n /** Whether OK button has destructive (red) style */\n public zOkDestructive?: boolean;\n /** Whether OK button is disabled */\n public zOkDisabled?: boolean;\n /** Overlay style: 'dark' (black overlay) or 'blur' (backdrop blur) */\n public zOverlay?: 'dark' | 'blur';\n /** Icon for the OK button */\n public zOkIcon?: ZIcon;\n /** Text for the OK button. Set to null to hide the button */\n public zOkText?: string | null;\n /** Callback or EventEmitter when cancel is clicked */\n public zOnCancel?: EventEmitter<T> | ZModalOnClickCallBack<T> = (): void => {};\n /** Callback or EventEmitter when OK is clicked */\n public zOnOk?: EventEmitter<T> | ZModalOnClickCallBack<T> = (): void => {};\n /** Modal title - supports string, HTML string, or TemplateRef */\n public zTitle?: string | TemplateRef<T>;\n /** ViewContainerRef for the modal portal */\n public zViewContainerRef?: ViewContainerRef;\n /** Modal width. In service mode this is applied as the minimum width to allow content to expand naturally. */\n public zWidth?: string;\n /** WritableSignal to control content loading state (shows skeleton when true) */\n public readonly zContentLoading?: WritableSignal<boolean>;\n /** Number of skeleton rows to show when content is loading */\n public zSkeletonRows?: number;\n}\n","import { zDetectBrowser } from '@shival99/z-ui/utils';\nimport type { ZModalConfirmConfig, ZModalConfirmType } from './z-modal.types';\n\nexport type ZModalOverlayType = 'dark' | 'blur';\nexport const getOverlayType = (): ZModalOverlayType => {\n const browser = zDetectBrowser();\n return browser.name === 'Chrome' ? 'dark' : 'blur';\n};\n\nexport const Z_MODAL_CONFIRM_CONFIG: Record<ZModalConfirmType, ZModalConfirmConfig> = {\n show: {\n icon: 'lucideMessageCircleQuestion',\n colors: {\n ring: 'bg-gray-500/10',\n bg: 'bg-gray-500/15',\n icon: 'text-gray-600!',\n },\n },\n info: {\n icon: 'lucideInfo',\n colors: {\n ring: 'bg-blue-500/10',\n bg: 'bg-blue-500/15',\n icon: 'text-blue-500!',\n },\n },\n warning: {\n icon: 'lucideTriangleAlert',\n colors: {\n ring: 'bg-amber-500/10',\n bg: 'bg-amber-500/15',\n icon: 'text-amber-500!',\n },\n },\n danger: {\n icon: 'lucideX',\n okDestructive: true,\n colors: {\n ring: 'bg-red-500/10',\n bg: 'bg-red-500/15',\n icon: 'text-red-500!',\n },\n },\n};\n","import { cva } from 'class-variance-authority';\n\nexport const zModalVariants = cva(\n [\n 'fixed left-[50vw] top-[50%] z-50 flex flex-col w-full translate-x-[-50%]',\n 'translate-y-[-50%] border bg-background py-4 shadow-lg rounded-lg',\n 'max-w-[calc(100%-2rem)] overflow-hidden',\n 'max-h-[80dvh]',\n ].join(' ')\n);\n","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n type ComponentRef,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n type EmbeddedViewRef,\n inject,\n type Injector,\n input,\n model,\n OnDestroy,\n output,\n PLATFORM_ID,\n signal,\n type TemplateRef,\n type Type,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZOverlayService, type ZOverlayRef } from '@shival99/z-ui/components/z-overlay';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZContentTypePipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZOverlayContainerService, ZOverlayZIndexService, ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { Subscription } from 'rxjs';\nimport { ZModalContentDirective } from './directives/z-modal-content.directive';\nimport { ZModalFooterDirective } from './directives/z-modal-footer.directive';\nimport { ZModalHeaderDirective } from './directives/z-modal-header.directive';\nimport { Z_MODAL_ANIMATION_DURATION, Z_MODAL_CONTENT_REVEAL_DURATION } from './z-modal.define';\nimport { ZModalOptions } from './z-modal.options';\nimport { ZModalRef } from './z-modal.ref';\nimport { getOverlayType, Z_MODAL_CONFIRM_CONFIG } from './z-modal.utils';\nimport { zModalVariants } from './z-modal.variants';\n\n@Component({\n selector: 'z-modal',\n imports: [\n NgTemplateOutlet,\n ZButtonComponent,\n ZIconComponent,\n ZContentTypePipe,\n ZTooltipDirective,\n ZSkeletonComponent,\n NgScrollbar,\n ZSafeHtmlPipe,\n TranslatePipe,\n CdkScrollable,\n ],\n standalone: true,\n templateUrl: './z-modal.component.html',\n styleUrl: './z-modal.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': 'effectiveWidth()',\n },\n exportAs: 'zModal',\n})\nexport class ZModalComponent<T, U> implements OnDestroy, AfterViewChecked {\n public zOk = output<void>();\n public zCancel = output<void>();\n public zAfterClose = output<void>();\n public readonly zScrollbar = output<NgScrollbar>();\n\n public readonly class = input<ClassValue>('');\n public readonly zBodyClass = input<ClassValue>('');\n public readonly zVisible = model<boolean>(false);\n public readonly zTitle = input<string | TemplateRef<unknown>>();\n public readonly zDescription = input<string | TemplateRef<unknown>>();\n public readonly zWidth = input<string>('500px');\n public readonly zClosable = input<boolean>(true);\n public readonly zMaskClosable = input<boolean>(true);\n public readonly zDisableShadow = input<boolean>(false);\n public readonly zHeaderBorder = input<boolean>(false);\n public readonly zFooterBorder = input<boolean>(false);\n public readonly zHideHeader = input<boolean>(false);\n public readonly zHideFooter = input<boolean>(false);\n public readonly zOkText = input<string | null>(null);\n public readonly zCancelText = input<string | null>(null);\n public readonly zOkDestructive = input<boolean>(false);\n public readonly zOkDisabled = input<boolean>(false);\n public readonly zLoading = input<boolean>(false);\n public readonly zContentLoading = input<boolean>(false);\n public readonly zSkeletonRows = input<number>(3);\n public readonly zOverlay = input<'dark' | 'blur'>(getOverlayType());\n\n protected readonly customHeader = contentChild(ZModalHeaderDirective);\n protected readonly customContent = contentChild(ZModalContentDirective);\n protected readonly customFooter = contentChild(ZModalFooterDirective);\n\n public modalRef?: ZModalRef<T>;\n protected readonly contentOutlet = viewChild('contentOutlet', { read: ViewContainerRef });\n protected readonly mainContentRef = viewChild<NgScrollbar>('mainContent');\n\n protected readonly config = inject(ZModalOptions<T, U>, { optional: true }) || new ZModalOptions<T, U>();\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _host = inject(ElementRef<HTMLElement>);\n private readonly _overlayService = inject(ZOverlayService);\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _zTranslate = inject(ZTranslateService);\n private readonly _overlayContainerService = inject(ZOverlayContainerService);\n private readonly _zIndexService = inject(ZOverlayZIndexService);\n\n private _templateOverlayRef: ZOverlayRef | null = null;\n private _originalParent: HTMLElement | null = null;\n private _originalNextSibling: Node | null = null;\n private _backdropSubscription: Subscription | null = null;\n private _closeTimeout: ReturnType<typeof setTimeout> | null = null;\n private _contentRevealTimeout: ReturnType<typeof setTimeout> | null = null;\n private _contentResizeObserver: ResizeObserver | null = null;\n private _lastLoadingHeight: number | null = null;\n private _wasContentLoading = false;\n\n protected readonly isLeaving = signal(false);\n protected readonly hasScrollableContent = signal(false);\n protected readonly isScrolledFromTop = signal(false);\n protected readonly isScrolledToBottom = signal(false);\n protected readonly isServiceMode = computed(() => !!this.modalRef);\n protected readonly isTemplateMode = computed(() => !this.isServiceMode());\n protected readonly isConfirmMode = computed(() => !!this.config.zConfirmType);\n protected readonly shouldRenderContent = computed(() => this.zVisible() || this.isLeaving());\n protected readonly isStringContent = computed(\n () => typeof this.config.zContent === 'string' && !this.isConfirmMode()\n );\n\n private _lastScrollHeight = 0;\n\n public ngAfterViewChecked(): void {\n this._checkScrollState();\n }\n\n private _checkScrollState(): void {\n const scrollbar = this.mainContentRef();\n if (!scrollbar) {\n return;\n }\n\n const viewport = scrollbar.nativeElement.querySelector('.ng-scroll-viewport') as HTMLElement;\n if (!viewport) {\n return;\n }\n\n if (viewport.scrollHeight === this._lastScrollHeight) {\n return;\n }\n this._lastScrollHeight = viewport.scrollHeight;\n\n const hasVerticalScroll = viewport.scrollHeight > viewport.clientHeight;\n this.hasScrollableContent.set(hasVerticalScroll);\n }\n\n public onContentScroll(event: Event): void {\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n\n const { scrollTop } = target;\n const { scrollHeight } = target;\n const { clientHeight } = target;\n\n this.isScrolledFromTop.set(scrollTop > 0);\n this.isScrolledToBottom.set(scrollTop + clientHeight >= scrollHeight - 1);\n }\n\n protected readonly confirmIconColors = computed(() => {\n const type = this.config.zConfirmType ?? 'show';\n return Z_MODAL_CONFIRM_CONFIG[type].colors;\n });\n\n protected readonly effectiveTitle = computed(() => (this.isServiceMode() ? this.config.zTitle : this.zTitle()));\n\n protected readonly effectiveDescription = computed(() =>\n this.isServiceMode() ? this.config.zDescription : this.zDescription()\n );\n\n protected readonly hasEffectiveDescription = computed(() => !!this.effectiveDescription());\n\n protected readonly headerContentClasses = computed(() =>\n zMergeClasses(\n 'flex w-full justify-between overflow-hidden px-4',\n this.hasEffectiveDescription() ? 'items-start' : 'items-center'\n )\n );\n\n protected readonly effectiveBodyClass = computed(() =>\n this.isServiceMode() ? this.config.zBodyClass : this.zBodyClass()\n );\n\n protected readonly templateBodyClasses = computed(() => {\n const hideHeader = this.effectiveHideHeader();\n const hideFooter = this.effectiveHideFooter();\n const bodySpacingClass = hideHeader && hideFooter ? 'py-0' : hideHeader ? 'pt-0' : hideFooter ? 'pb-0' : '';\n\n return zMergeClasses(\n 'relative flex min-h-[12.5rem] flex-col gap-4 px-4 py-4',\n this.effectiveBodyClass(),\n bodySpacingClass\n );\n });\n\n protected readonly serviceBodyClasses = computed(() => {\n const hideHeader = this.effectiveHideHeader();\n const hideFooter = this.effectiveHideFooter();\n const bodySpacingClass = hideHeader && hideFooter ? 'py-0' : hideHeader ? 'pt-0' : hideFooter ? 'pb-0' : '';\n // Le skeleton overlay tuyệt đối cần chỗ để hiện + cần vùng chứa làm mốc định vị (`relative`).\n const loadingMinHeightClass = this.effectiveContentLoading() ? 'min-h-[12.5rem]' : '';\n\n return zMergeClasses(\n 'relative flex min-h-0 flex-col gap-4 px-4 py-4',\n loadingMinHeightClass,\n this.effectiveBodyClass(),\n bodySpacingClass\n );\n });\n\n protected readonly effectiveClosable = computed(() =>\n this.isServiceMode() ? (this.config.zClosable ?? true) : this.zClosable()\n );\n\n protected readonly effectiveDisableShadow = computed(() =>\n this.isServiceMode() ? (this.config.zDisableShadow ?? false) : this.zDisableShadow()\n );\n\n protected readonly shouldShowShadow = computed(() => !this.effectiveDisableShadow());\n\n protected readonly effectiveHeaderBorder = computed(() =>\n this.isServiceMode() ? (this.config.zHeaderBorder ?? false) : this.zHeaderBorder()\n );\n\n protected readonly effectiveFooterBorder = computed(() =>\n this.isServiceMode() ? (this.config.zFooterBorder ?? false) : this.zFooterBorder()\n );\n\n protected readonly effectiveHideFooter = computed(() =>\n this.isServiceMode() ? this.config.zHideFooter : this.zHideFooter()\n );\n\n protected readonly effectiveHideHeader = computed(() =>\n this.isServiceMode() ? this.config.zHideHeader : this.zHideHeader()\n );\n\n protected readonly effectiveOkText = computed(() => (this.isServiceMode() ? this.config.zOkText : this.zOkText()));\n\n protected readonly effectiveCancelText = computed(() =>\n this.isServiceMode() ? this.config.zCancelText : this.zCancelText()\n );\n\n protected readonly effectiveOkDestructive = computed(() =>\n this.isServiceMode() ? this.config.zOkDestructive : this.zOkDestructive()\n );\n\n protected readonly effectiveTypeOk = computed((): ZButtonVariants['zType'] => {\n if (!this.isServiceMode()) {\n return 'default';\n }\n\n const typeMap: Record<string, ZButtonVariants['zType']> = {\n show: 'default',\n info: 'info',\n warning: 'warning',\n danger: 'error',\n };\n\n const confirmType = this.config.zConfirmType;\n return confirmType ? (typeMap[confirmType] ?? 'default') : 'default';\n });\n\n protected readonly effectiveOkDisabled = computed(() =>\n this.isServiceMode() ? this.config.zOkDisabled : this.zOkDisabled()\n );\n\n protected readonly effectiveLoading = computed(() => {\n if (this.isServiceMode()) {\n return this.modalRef?.loading() || (this.config.zLoading?.() ?? false);\n }\n return this.zLoading();\n });\n\n protected readonly effectiveContentLoading = computed(() => {\n if (this.isServiceMode()) {\n return this.config.zContentLoading?.() ?? false;\n }\n return this.zContentLoading();\n });\n\n protected readonly effectiveSkeletonRows = computed(() => {\n if (this.isServiceMode()) {\n return this.config.zSkeletonRows ?? 3;\n }\n return this.zSkeletonRows();\n });\n\n protected readonly effectiveWidth = computed(() => {\n if (this.isServiceMode()) {\n return this.config.zWidth ?? this.zWidth();\n }\n return this.shouldRenderContent() ? this.zWidth() : null;\n });\n\n protected readonly isDeferLoading = computed(() => {\n if (!this.isServiceMode()) {\n return false;\n }\n return !!this.config.zDefer && !this.contentOutlet()?.length;\n });\n\n protected readonly classes = computed(() =>\n zMergeClasses(zModalVariants(), this.isServiceMode() ? this.config.class : this.class())\n );\n\n protected readonly hostClasses = computed(() => {\n const baseClasses = this.classes();\n if (this.isServiceMode()) {\n return `${baseClasses} z-modal-service-mode`.trim();\n }\n if (this.shouldRenderContent()) {\n return `${baseClasses} z-modal-template-mode`.trim();\n }\n return 'z-modal-template-host';\n });\n\n constructor() {\n effect(() => {\n this._zTranslate.currentLang();\n this._cdr.markForCheck();\n });\n\n effect(() => {\n const scrollbar = this.mainContentRef();\n if (scrollbar) {\n this.zScrollbar.emit(scrollbar);\n }\n });\n\n effect(() => {\n const visible = this.zVisible();\n if (visible && this.isTemplateMode() && !this._templateOverlayRef) {\n this._openTemplateOverlay();\n return;\n }\n\n if (!visible && this.isTemplateMode() && this._templateOverlayRef && !this.isLeaving()) {\n this._closeWithAnimation();\n }\n });\n\n if (isPlatformBrowser(this._platformId)) {\n this._contentResizeObserver = new ResizeObserver(() => {\n const isSkeletonSwap = this.isServiceMode() && !this.isConfirmMode();\n if (isSkeletonSwap && this.effectiveContentLoading()) {\n this._lastLoadingHeight = this._host.nativeElement.offsetHeight;\n }\n });\n this._contentResizeObserver.observe(this._host.nativeElement);\n }\n\n effect(() => {\n const isSkeletonSwap = this.isServiceMode() && !this.isConfirmMode();\n const loading = isSkeletonSwap && this.effectiveContentLoading();\n\n if (!loading && this._wasContentLoading) {\n // Đợi 1 tick để template patch xong (bỏ skeleton) trước khi đo chiều cao mới.\n setTimeout(() => this._revealContentWithAnimation(), 0);\n }\n\n this._wasContentLoading = loading;\n });\n }\n\n public ngOnDestroy(): void {\n this._clearCloseTimeout();\n this._clearContentRevealTimeout();\n this._contentResizeObserver?.disconnect();\n this._disposeTemplateOverlay();\n }\n\n public isDestroyed(): boolean {\n return this._destroyRef.destroyed;\n }\n\n public getNativeElement(): HTMLElement {\n return this._host.nativeElement;\n }\n\n public attachComponentPortal<C>(component: Type<C>, injector?: Injector): ComponentRef<C> {\n this._cdr.detectChanges();\n const outlet = this.contentOutlet();\n if (outlet && outlet.length > 0) {\n throw new Error('Attempting to attach modal content after content is already attached');\n }\n return outlet?.createComponent(component, { injector }) as ComponentRef<C>;\n }\n\n public attachTemplatePortal<C>(templateRef: TemplateRef<C>, context: C): EmbeddedViewRef<C> {\n const outlet = this.contentOutlet();\n if (outlet && outlet.length > 0) {\n throw new Error('Attempting to attach modal content after content is already attached');\n }\n return outlet?.createEmbeddedView(templateRef, context) as EmbeddedViewRef<C>;\n }\n\n public onOkClick(): void {\n if (this.effectiveLoading()) {\n return;\n }\n this.zOk.emit();\n }\n\n public onCloseClick(): void {\n if (this.effectiveLoading()) {\n return;\n }\n this.zCancel.emit();\n if (this.isTemplateMode()) {\n this._closeWithAnimation();\n }\n }\n\n public onBackdropClick(): void {\n if (this.zMaskClosable() && !this.effectiveLoading()) {\n this.zCancel.emit();\n this._closeWithAnimation();\n }\n }\n\n public open(): void {\n this.isLeaving.set(false);\n this.zVisible.set(true);\n }\n\n public close(): void {\n this._closeWithAnimation();\n }\n\n private _createOverlay(): ZOverlayRef | null {\n if (!isPlatformBrowser(this._platformId)) {\n return null;\n }\n\n const overlayType = getOverlayType();\n const backdropClass = overlayType === 'blur' ? 'z-modal-backdrop-blur' : 'z-modal-backdrop-dark';\n\n return this._overlayService.createGlobal({\n hasBackdrop: true,\n backdropClass,\n panelClass: 'z-modal-overlay-pane',\n scrollLock: true,\n });\n }\n\n private _openTemplateOverlay(): void {\n if (this._templateOverlayRef) {\n return;\n }\n\n this._templateOverlayRef = this._createOverlay();\n if (!this._templateOverlayRef) {\n return;\n }\n\n this._zIndexService.applyToOverlay(this._templateOverlayRef);\n this._zIndexService.deferMoveToTop(this._templateOverlayRef);\n\n const hostElement = this._host.nativeElement;\n this._originalParent = hostElement.parentElement;\n this._originalNextSibling = hostElement.nextSibling;\n\n this._templateOverlayRef.overlayElement.appendChild(hostElement);\n\n this._backdropSubscription = this._templateOverlayRef.backdropClick().subscribe(() => {\n this.onBackdropClick();\n });\n }\n\n private _closeWithAnimation(): void {\n if (this.isLeaving()) {\n return;\n }\n\n this._overlayContainerService.notifyClosing();\n this.isLeaving.set(true);\n this.zVisible.set(false);\n\n const hostElement = this._host.nativeElement;\n const { backdropElement } = this._templateOverlayRef ?? {};\n\n if (backdropElement) {\n backdropElement.classList.add('z-backdrop-leaving');\n }\n\n hostElement.classList.add('modal-leave');\n\n this._clearCloseTimeout();\n this._closeTimeout = setTimeout(() => {\n if (this._destroyRef.destroyed) {\n return;\n }\n\n this.isLeaving.set(false);\n this._disposeTemplateOverlay();\n this.zAfterClose.emit();\n }, Z_MODAL_ANIMATION_DURATION);\n }\n\n private _clearCloseTimeout(): void {\n if (!this._closeTimeout) {\n return;\n }\n\n clearTimeout(this._closeTimeout);\n this._closeTimeout = null;\n }\n\n private _revealContentWithAnimation(): void {\n const oldHeight = this._lastLoadingHeight;\n this._lastLoadingHeight = null;\n if (oldHeight == null || !isPlatformBrowser(this._platformId) || this._destroyRef.destroyed) {\n return;\n }\n\n const host = this._host.nativeElement;\n const newHeight = host.offsetHeight;\n\n // Nội dung thật có thể thấp hơn hoặc cao hơn skeleton — morph cả hai chiều, chỉ bỏ qua khi\n // chiều cao không đổi (không có gì để animate).\n if (newHeight === oldHeight) {\n return;\n }\n\n this._clearContentRevealTimeout();\n\n host.style.height = `${oldHeight}px`;\n void host.offsetHeight;\n host.classList.add('z-modal-height-morph');\n\n // 2 rAF lồng nhau để browser paint chiều cao cũ trước, tránh transition bị gộp frame và mất hiệu ứng.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n host.style.height = `${newHeight}px`;\n });\n });\n\n this._contentRevealTimeout = setTimeout(() => {\n host.classList.remove('z-modal-height-morph');\n host.style.height = '';\n this._contentRevealTimeout = null;\n }, Z_MODAL_CONTENT_REVEAL_DURATION + 50);\n }\n\n private _clearContentRevealTimeout(): void {\n if (!this._contentRevealTimeout) {\n return;\n }\n\n clearTimeout(this._contentRevealTimeout);\n this._contentRevealTimeout = null;\n }\n\n private _disposeTemplateOverlay(): void {\n const hostElement = this._host.nativeElement;\n\n if (this._originalParent && this._originalNextSibling) {\n this._originalParent.insertBefore(hostElement, this._originalNextSibling);\n }\n\n if (this._originalParent && !this._originalNextSibling) {\n this._originalParent.appendChild(hostElement);\n }\n\n hostElement.classList.remove('modal-leave');\n if (this._templateOverlayRef) {\n this._templateOverlayRef.dispose();\n this._templateOverlayRef = null;\n }\n\n this._originalParent = null;\n this._originalNextSibling = null;\n\n if (this._backdropSubscription) {\n this._backdropSubscription.unsubscribe();\n this._backdropSubscription = null;\n }\n }\n}\n","<!-- Template mode content (rendered in host element, which is moved to overlay) -->\n@if (isTemplateMode() && shouldRenderContent()) {\n @if (customHeader(); as headerDir) {\n <header [class.z-modal-header-shadow]=\"shouldShowShadow()\" [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex items-start justify-between px-4\">\n <ng-container *ngTemplateOutlet=\"headerDir.templateRef\" />\n </div>\n </header>\n } @else if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n @if (effectiveDescription(); as description) {\n @switch (description | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(description)\" />\n }\n @case ('html') {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-1 text-sm\"\n [innerHTML]=\"$any(description) | zSafeHtml\"></p>\n }\n @default {\n <p data-testid=\"z-modal-description\" class=\"text-muted-foreground m-0 mt-1 text-sm\">\n {{ $any(description) | translate }}\n </p>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"templateBodyClasses()\">\n <div [class.invisible]=\"effectiveContentLoading()\" [class.pointer-events-none]=\"effectiveContentLoading()\">\n @if (customContent(); as contentDir) {\n <ng-container *ngTemplateOutlet=\"contentDir.templateRef\" />\n } @else {\n <ng-content />\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (customFooter(); as footerDir) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n <ng-container *ngTemplateOutlet=\"footerDir.templateRef\" />\n </div>\n </footer>\n } @else if (!effectiveHideFooter()) {\n <footer [class.z-modal-footer-shadow]=\"shouldShowShadow()\" [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button type=\"button\" data-testid=\"z-modal-cancel-button\" z-button zType=\"outline\" (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? ('i18n_z_ui_modal_cancel' | translate) }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? ('i18n_z_ui_common_ok' | translate) }}\n </button>\n }\n </div>\n </footer>\n }\n}\n\n<!-- Service mode content -->\n@if (isServiceMode()) {\n <!-- Confirm Modal Layout (no skeleton) -->\n @if (isConfirmMode()) {\n <div class=\"flex flex-col items-center px-4 pt-2 pb-4 text-center\">\n @if (config.zConfirmIcon) {\n <div class=\"relative mb-4 flex size-20 items-center justify-center\">\n <div class=\"absolute inset-0 rounded-full\" [class]=\"confirmIconColors().ring\"></div>\n <div class=\"relative flex size-14 items-center justify-center rounded-full\" [class]=\"confirmIconColors().bg\">\n <z-icon [zType]=\"config.zConfirmIcon\" zSize=\"30\" [zStrokeWidth]=\"2.6\" [class]=\"confirmIconColors().icon\" />\n </div>\n </div>\n }\n\n <!-- Title centered -->\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 text-lg leading-snug font-semibold\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4 data-testid=\"z-modal-title\" class=\"m-0 text-lg leading-snug font-semibold\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n\n <!-- Description centered -->\n @if (config.zContent; as content) {\n <p\n data-testid=\"z-modal-description\"\n class=\"text-muted-foreground m-0 mt-2 text-sm\"\n [innerHTML]=\"$any(content) | translate | zSafeHtml\"></p>\n }\n </div>\n\n <!-- Footer centered -->\n @if (!effectiveHideFooter()) {\n <footer class=\"mt-4 flex flex-row justify-center gap-3 pb-2\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveTypeOk()\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </footer>\n }\n } @else {\n <!-- Normal Modal Layout -->\n <!--\n Header/footer luôn render và nội dung (contentOutlet) không được tháo khỏi DOM khi\n effectiveContentLoading() bật/tắt — component/template đính vào #contentOutlet chỉ được\n attach một lần bởi ZModalService; bọc nó trong @if theo cờ loading sẽ khiến Angular hủy\n view đó (component biến mất vĩnh viễn) thay vì chỉ ẩn đi. Skeleton chỉ che tạm bằng\n `invisible` + overlay tuyệt đối, giống hệt cách template mode xử lý ở trên.\n -->\n @if (!effectiveHideHeader()) {\n @if (effectiveTitle()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div [class]=\"headerContentClasses()\">\n <div class=\"min-w-0 flex-1 overflow-hidden pr-2\">\n @if (effectiveTitle(); as title) {\n @switch (title | zContentType) {\n @case ('template') {\n <ng-container *ngTemplateOutlet=\"$any(title)\" />\n }\n @case ('html') {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"title\"\n [innerHTML]=\"$any(title) | zSafeHtml\"></h4>\n }\n @default {\n <h4\n data-testid=\"z-modal-title\"\n class=\"m-0 truncate text-base leading-snug font-semibold\"\n z-tooltip\n [zContent]=\"$any(title) | translate\">\n {{ $any(title) | translate }}\n </h4>\n }\n }\n }\n </div>\n @if (effectiveClosable()) {\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n }\n </div>\n </header>\n } @else if (effectiveClosable()) {\n <header\n [class.z-modal-header-shadow]=\"shouldShowShadow()\"\n [class.z-modal-header-border]=\"effectiveHeaderBorder()\">\n <div class=\"flex justify-end px-4\">\n <button\n type=\"button\"\n data-testid=\"z-modal-close-header-button\"\n z-button\n zType=\"subtle\"\n zSize=\"xs\"\n [zWave]=\"false\"\n (click)=\"onCloseClick()\">\n <z-icon zType=\"lucideX\" />\n </button>\n </div>\n </header>\n }\n }\n\n <ng-scrollbar\n class=\"z-modal-scrollbar flex-1\"\n #mainContent\n track=\"vertical\"\n cdkScrollable\n (scroll)=\"onContentScroll($event)\">\n <main [class]=\"serviceBodyClasses()\">\n <!--\n `hidden` (display:none), không phải `invisible` — reveal-animation của service mode\n (_revealContentWithAnimation) đo chênh lệch chiều cao trước/sau khi hết loading để tạo\n hiệu ứng \"tự expand\"; `invisible` vẫn chiếm chỗ nên chiều cao không đổi, mất hiệu ứng.\n Vẫn không dùng @if structural ở đây để tránh phá hủy component đã attach vào #contentOutlet.\n -->\n <div [class.hidden]=\"effectiveContentLoading()\">\n <ng-template #contentOutlet />\n\n @if (isStringContent()) {\n <div data-testid=\"z-modal-content\" [innerHTML]=\"$any(config.zContent) | zSafeHtml\"></div>\n }\n </div>\n\n @if (effectiveContentLoading()) {\n <div class=\"absolute inset-4 flex flex-col\">\n <z-skeleton class=\"h-full\" [zRows]=\"effectiveSkeletonRows()\" />\n </div>\n }\n </main>\n </ng-scrollbar>\n\n @if (!effectiveHideFooter()) {\n <footer\n [class.z-modal-footer-shadow]=\"shouldShowShadow()\"\n [class.z-modal-footer-border]=\"effectiveFooterBorder()\">\n <div class=\"flex flex-row justify-end gap-2 px-4\">\n @if (effectiveCancelText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-cancel-button\"\n z-button\n zType=\"outline\"\n (click)=\"onCloseClick()\">\n @if (config.zCancelIcon) {\n <z-icon [zType]=\"config.zCancelIcon\" />\n }\n {{ effectiveCancelText() ?? 'i18n_z_ui_modal_cancel' | translate }}\n </button>\n }\n\n @if (effectiveOkText() !== null) {\n <button\n type=\"button\"\n class=\"min-w-28\"\n data-testid=\"z-modal-ok-button\"\n z-button\n [zType]=\"effectiveOkDestructive() ? 'destructive' : 'default'\"\n [disabled]=\"effectiveOkDisabled() || effectiveLoading()\"\n [zLoading]=\"effectiveLoading()\"\n (click)=\"onOkClick()\">\n @if (config.zOkIcon && !effectiveLoading()) {\n <z-icon [zType]=\"config.zOkIcon\" />\n }\n {{ effectiveOkText() ?? 'i18n_z_ui_common_ok' | translate }}\n </button>\n }\n </div>\n </footer>\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isPlatformBrowser } from '@angular/common';\nimport { EventEmitter, Inject, PLATFORM_ID, signal } from '@angular/core';\nimport type { ZOverlayRef } from '@shival99/z-ui/components/z-overlay';\nimport { filter, fromEvent, Subject, takeUntil } from 'rxjs';\nimport { ZModalComponent } from './z-modal.component';\nimport { Z_MODAL_ANIMATION_DURATION, ZModalTriggerAction } from './z-modal.define';\nimport { ZModalOptions } from './z-modal.options';\n\nexport class ZModalRef<T = any, R = any, U = any> {\n private readonly _destroy$ = new Subject<void>();\n private _isClosing = false;\n private _result?: R;\n\n public componentInstance: T | null = null;\n public readonly loading = signal(false);\n public readonly zAfterClose = new EventEmitter<R | undefined>();\n\n public constructor(\n private readonly _overlayRef: ZOverlayRef,\n private readonly _config: ZModalOptions<T, U>,\n private readonly _containerInstance: ZModalComponent<T, U>,\n @Inject(PLATFORM_ID) private readonly _platformId: object\n ) {\n this._containerInstance.zCancel.subscribe(() => this._trigger(ZModalTriggerAction.CANCEL));\n this._containerInstance.zOk.subscribe(() => this._trigger(ZModalTriggerAction.OK));\n\n if ((this._config.zMaskClosable ?? true) && isPlatformBrowser(this._platformId)) {\n this._overlayRef\n .backdropClick()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.loading()) {\n this._trigger(ZModalTriggerAction.CANCEL);\n }\n });\n }\n\n if (isPlatformBrowser(this._platformId)) {\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter(event => event.key === 'Escape'),\n takeUntil(this._destroy$)\n )\n .subscribe(() => {\n // Chỉ overlay trên cùng phản hồi Escape — modal-trong-modal không đóng dồn cả stack.\n if (!this.loading() && this._overlayRef.isTopmost()) {\n this._trigger(ZModalTriggerAction.CANCEL);\n }\n });\n }\n }\n\n public setLoading(value: boolean): void {\n this.loading.set(value);\n }\n\n public close(result?: R): void {\n if (this._isClosing) {\n return;\n }\n\n this._isClosing = true;\n this._result = result;\n this._overlayRef?.markClosing();\n\n if (isPlatformBrowser(this._platformId)) {\n const hostElement = this._containerInstance.getNativeElement();\n hostElement.classList.add('modal-leave');\n const { backdropElement } = this._overlayRef;\n if (backdropElement) {\n backdropElement.classList.add('z-backdrop-leaving');\n }\n }\n\n setTimeout(() => {\n if (!this._containerInstance.isDestroyed()) {\n this._containerInstance.zAfterClose.emit();\n }\n\n this.zAfterClose.emit(this._result);\n\n this._overlayRef?.dispose();\n\n if (!this._destroy$.closed) {\n this._destroy$.next();\n this._destroy$.complete();\n }\n }, Z_MODAL_ANIMATION_DURATION);\n }\n\n private _trigger(action: ZModalTriggerAction): void {\n if (this.loading()) {\n return;\n }\n\n const trigger = {\n ok: this._config.zOnOk,\n cancel: this._config.zOnCancel,\n }[action];\n\n if (trigger instanceof EventEmitter) {\n trigger.emit(this._getContentComponent());\n return;\n }\n\n if (typeof trigger === 'function') {\n const result = trigger(this._getContentComponent(), this) as R;\n this._closeWithResult(result);\n return;\n }\n\n this.close();\n }\n\n private _getContentComponent(): T {\n return this.componentInstance as T;\n }\n\n private _closeWithResult(result: R): void {\n if (result !== false) {\n this.close(result);\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, Injector, PLATFORM_ID, TemplateRef, type Type } from '@angular/core';\nimport { ZOverlayService, type ZOverlayRef } from '@shival99/z-ui/components/z-overlay';\nimport { ZOverlayZIndexService, ZTranslateService } from '@shival99/z-ui/services';\nimport { ZModalComponent } from './z-modal.component';\nimport { Z_MODAL_DATA } from './z-modal.define';\nimport { ZModalOptions } from './z-modal.options';\nimport { ZModalRef } from './z-modal.ref';\nimport { ZModalConfirmOptions, ZModalConfirmType, ZModalContentType } from './z-modal.types';\nimport { getOverlayType, Z_MODAL_CONFIRM_CONFIG } from './z-modal.utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZModalService {\n private readonly _overlayService = inject(ZOverlayService);\n private readonly _injector = inject(Injector);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _zTranslate = inject(ZTranslateService);\n private readonly _zIndexService = inject(ZOverlayZIndexService);\n\n public create<T, U>(config: ZModalOptions<T, U>): ZModalRef<T> {\n return this._open<T, U>(config.zContent as Type<T>, config);\n }\n\n public show<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('show', options);\n }\n\n public info<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('info', options);\n }\n\n public warning<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('warning', options);\n }\n\n public danger<U = unknown>(options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n return this._confirmModal('danger', options);\n }\n\n private _confirmModal<U>(type: ZModalConfirmType, options: ZModalConfirmOptions<U>): ZModalRef<unknown> {\n const typeConfig = Z_MODAL_CONFIRM_CONFIG[type];\n this._zTranslate.currentLang();\n\n const config: ZModalOptions<unknown, U> = {\n zTitle: options.zTitle,\n zContent: options.zContent,\n zOkText: options.zOkText ?? this._zTranslate.translate('i18n_z_ui_modal_confirm')(),\n zCancelText: options.zCancelText ?? this._zTranslate.translate('i18n_z_ui_modal_cancel')(),\n zOkDestructive: typeConfig.okDestructive,\n zConfirmIcon: options.zIcon ?? typeConfig.icon,\n zMaskClosable: options.zMaskClosable ?? true,\n zWidth: options.zWidth ?? '500px',\n zConfirmType: type,\n zData: options.zData,\n zOnOk: () => options.zOnOk?.(),\n zOnCancel: () => options.zOnCancel?.(),\n };\n\n return this.create(config);\n }\n\n private _open<T, U>(componentOrTemplateRef: ZModalContentType<T>, config: ZModalOptions<T, U>) {\n const overlayRef = this._createOverlay(config);\n\n if (!overlayRef) {\n return new ZModalRef(\n undefined as unknown as ZOverlayRef,\n config,\n undefined as unknown as ZModalComponent<T, U>,\n this._platformId\n );\n }\n\n const modalContainer = this._attachModalContainer<T, U>(overlayRef, config);\n const modalRef = this._attachModalContent<T, U>(componentOrTemplateRef, modalContainer, overlayRef, config);\n\n return modalRef;\n }\n\n private _createOverlay<T, U>(config: ZModalOptions<T, U>): ZOverlayRef | undefined {\n if (!isPlatformBrowser(this._platformId)) {\n return undefined;\n }\n\n const overlayType = config.zOverlay ?? getOverlayType();\n const backdropClass = overlayType === 'blur' ? 'z-modal-backdrop-blur' : 'z-modal-backdrop-dark';\n const overlayRef = this._overlayService.createGlobal({\n hasBackdrop: true,\n backdropClass,\n scrollLock: true,\n });\n\n this._zIndexService.applyToOverlay(overlayRef);\n this._zIndexService.deferMoveToTop(overlayRef);\n\n return overlayRef;\n }\n\n private _attachModalContainer<T, U>(overlayRef: ZOverlayRef, config: ZModalOptions<T, U>) {\n const injector = Injector.create({\n parent: this._injector,\n providers: [{ provide: ZModalOptions, useValue: config }],\n });\n\n const containerRef = overlayRef.attach<ZModalComponent<T, U>>(ZModalComponent, {\n injector,\n viewContainerRef: config.zViewContainerRef,\n });\n\n return containerRef.instance;\n }\n\n private _attachModalContent<T, U>(\n componentOrTemplateRef: ZModalContentType<T>,\n modalContainer: ZModalComponent<T, U>,\n overlayRef: ZOverlayRef,\n config: ZModalOptions<T, U>\n ) {\n const modalRef = new ZModalRef<T>(overlayRef, config, modalContainer, this._platformId);\n modalContainer.modalRef = modalRef;\n\n if (componentOrTemplateRef instanceof TemplateRef) {\n modalContainer.attachTemplatePortal(componentOrTemplateRef, { modalRef } as T);\n return modalRef;\n }\n\n if (typeof componentOrTemplateRef !== 'string') {\n const injector = this._createInjector<T, U>(modalRef, config);\n const contentRef = modalContainer.attachComponentPortal<T>(componentOrTemplateRef, injector);\n\n if (contentRef) {\n modalRef.componentInstance = contentRef.instance;\n }\n }\n\n return modalRef;\n }\n\n private _createInjector<T, U>(modalRef: ZModalRef<T>, config: ZModalOptions<T, U>) {\n return Injector.create({\n parent: this._injector,\n providers: [\n { provide: ZModalRef, useValue: modalRef },\n { provide: Z_MODAL_DATA, useValue: config.zData },\n ],\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shival99/z-ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "Z-UI: Modern Angular UI Component Library - A comprehensive, high-performance design system built with Angular 22, featuring 45+ customizable components with dark mode, accessibility, and enterprise-ready features.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -189,7 +189,7 @@ declare class ZGalleryComponent implements AfterViewInit {
|
|
|
189
189
|
protected readonly headerControlHeight: _angular_core.Signal<"1.75rem" | "2rem" | "2.5rem" | "2.25rem">;
|
|
190
190
|
protected readonly skeletonMediaHeight: _angular_core.Signal<"9rem" | "14rem" | "11rem">;
|
|
191
191
|
protected readonly toggleIconSize: _angular_core.Signal<"14" | "16" | "20" | "18">;
|
|
192
|
-
protected readonly searchInputSize: _angular_core.Signal<"
|
|
192
|
+
protected readonly searchInputSize: _angular_core.Signal<"sm" | "default" | "lg">;
|
|
193
193
|
protected readonly filteredFiles: _angular_core.Signal<ZGalleryFile[]>;
|
|
194
194
|
protected readonly selectedIds: _angular_core.Signal<Set<string>>;
|
|
195
195
|
protected readonly isAllSelected: _angular_core.Signal<boolean>;
|
|
@@ -415,16 +415,16 @@ declare const isPreviewable: (file: ZGalleryFile) => boolean;
|
|
|
415
415
|
declare const isImage: (file: ZGalleryFile) => boolean;
|
|
416
416
|
|
|
417
417
|
declare const zGalleryVariants: (props?: ({
|
|
418
|
-
zSize?: "
|
|
418
|
+
zSize?: "sm" | "default" | "lg" | null | undefined;
|
|
419
419
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
420
420
|
type ZGalleryVariants = VariantProps<typeof zGalleryVariants>;
|
|
421
421
|
declare const zGalleryItemVariants: (props?: ({
|
|
422
422
|
zMode?: "grid" | "list" | null | undefined;
|
|
423
|
-
zSize?: "
|
|
423
|
+
zSize?: "sm" | "default" | "lg" | null | undefined;
|
|
424
424
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
425
425
|
type ZGalleryItemVariants = VariantProps<typeof zGalleryItemVariants>;
|
|
426
426
|
declare const zGalleryFileIconVariants: (props?: ({
|
|
427
|
-
zSize?: "
|
|
427
|
+
zSize?: "sm" | "default" | "lg" | null | undefined;
|
|
428
428
|
zMode?: "grid" | "list" | null | undefined;
|
|
429
429
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
430
430
|
type ZGalleryFileIconVariants = VariantProps<typeof zGalleryFileIconVariants>;
|
|
@@ -252,7 +252,7 @@ declare class ZModalComponent<T, U> implements OnDestroy, AfterViewChecked {
|
|
|
252
252
|
protected readonly effectiveOkText: _angular_core.Signal<string | null | undefined>;
|
|
253
253
|
protected readonly effectiveCancelText: _angular_core.Signal<string | null | undefined>;
|
|
254
254
|
protected readonly effectiveOkDestructive: _angular_core.Signal<boolean | undefined>;
|
|
255
|
-
protected readonly effectiveTypeOk: _angular_core.Signal<"info" | "warning" | "error" | "
|
|
255
|
+
protected readonly effectiveTypeOk: _angular_core.Signal<"info" | "warning" | "error" | "default" | "primary" | "secondary" | "destructive" | "destructive-heartbeat" | "success" | "outline" | "outline-primary" | "outline-secondary" | "outline-success" | "outline-info" | "outline-warning" | "outline-error" | "outline-destructive" | "outline-shimmer" | "outline-success-secondary" | "outline-info-secondary" | "outline-warning-secondary" | "outline-error-secondary" | "outline-destructive-secondary" | "outline-primary-secondary" | "outline-primary-soft" | "outline-success-soft" | "outline-info-soft" | "outline-warning-soft" | "outline-error-soft" | "outline-destructive-soft" | "outline-primary-soft-border" | "outline-success-soft-border" | "outline-info-soft-border" | "outline-warning-soft-border" | "outline-error-soft-border" | "outline-destructive-soft-border" | "ghost" | "ghost-primary" | "ghost-success" | "ghost-info" | "ghost-warning" | "ghost-error" | "ghost-destructive" | "subtle" | "subtle-primary" | "subtle-success" | "subtle-info" | "subtle-warning" | "subtle-destructive" | "subtle-outline" | "subtle-primary-outline" | "subtle-success-outline" | "subtle-info-outline" | "subtle-warning-outline" | "subtle-destructive-outline" | "link" | null | undefined>;
|
|
256
256
|
protected readonly effectiveOkDisabled: _angular_core.Signal<boolean | undefined>;
|
|
257
257
|
protected readonly effectiveLoading: _angular_core.Signal<boolean>;
|
|
258
258
|
protected readonly effectiveContentLoading: _angular_core.Signal<boolean>;
|
|
@@ -2168,7 +2168,7 @@ declare class ZTableFilterComponent<T> {
|
|
|
2168
2168
|
protected readonly filterBadgeCount: _angular_core.Signal<number>;
|
|
2169
2169
|
protected readonly hasFilterValue: _angular_core.Signal<boolean>;
|
|
2170
2170
|
protected readonly isActive: _angular_core.Signal<boolean>;
|
|
2171
|
-
protected readonly draftSortValue: _angular_core.Signal<"
|
|
2171
|
+
protected readonly draftSortValue: _angular_core.Signal<"none" | "asc" | "desc">;
|
|
2172
2172
|
protected readonly rangeMinValue: _angular_core.Signal<any>;
|
|
2173
2173
|
protected readonly rangeMaxValue: _angular_core.Signal<any>;
|
|
2174
2174
|
protected readonly dateValue: _angular_core.Signal<Date | null>;
|