@shival99/z-ui 2.4.11 → 2.4.12
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-calendar.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +20 -1
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-media-player.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +20 -5
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-i18n.mjs +2 -0
- package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-dropdown-menu.d.ts +9 -11
- package/types/shival99-z-ui-components-z-gallery.d.ts +4 -4
- package/types/shival99-z-ui-components-z-media-player.d.ts +3 -1
- package/types/shival99-z-ui-components-z-table.d.ts +3 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { viewChild, output, input, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, viewChild, output, input, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import { TranslatePipe } from '@ngx-translate/core';
|
|
4
4
|
import { ZButtonComponent } from '@shival99/z-ui/components/z-button';
|
|
5
5
|
import { ZHoverGlideDirective } from '@shival99/z-ui/components/z-hover-glide';
|
|
@@ -9,6 +9,8 @@ import { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';
|
|
|
9
9
|
import { zTransform } from '@shival99/z-ui/utils';
|
|
10
10
|
|
|
11
11
|
class ZDropdownMenuComponent {
|
|
12
|
+
_host = inject(ElementRef);
|
|
13
|
+
_visibilityObserver = null;
|
|
12
14
|
contentWrapper = viewChild('contentWrapper', /* @ts-ignore */
|
|
13
15
|
...(ngDevMode ? [{ debugName: "contentWrapper" }] : /* istanbul ignore next */ []));
|
|
14
16
|
zOnItemClick = output();
|
|
@@ -45,6 +47,11 @@ class ZDropdownMenuComponent {
|
|
|
45
47
|
const hasProjectedContent = wrapper.nativeElement.children.length > 0;
|
|
46
48
|
this.hasContent.set(hasProjectedContent);
|
|
47
49
|
}
|
|
50
|
+
this._setupVisibilityObserver();
|
|
51
|
+
}
|
|
52
|
+
ngOnDestroy() {
|
|
53
|
+
this._visibilityObserver?.disconnect();
|
|
54
|
+
this._visibilityObserver = null;
|
|
48
55
|
}
|
|
49
56
|
onItemClick(item) {
|
|
50
57
|
if (item.disabled || item.loading) {
|
|
@@ -57,6 +64,18 @@ class ZDropdownMenuComponent {
|
|
|
57
64
|
onControl(control) {
|
|
58
65
|
this.popoverControl.set(control);
|
|
59
66
|
}
|
|
67
|
+
_setupVisibilityObserver() {
|
|
68
|
+
if (typeof ResizeObserver === 'undefined') {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const host = this._host.nativeElement;
|
|
72
|
+
this._visibilityObserver = new ResizeObserver(() => {
|
|
73
|
+
if (host.getClientRects().length === 0 || getComputedStyle(host).display === 'none') {
|
|
74
|
+
this.popoverControl()?.closeImmediate();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
this._visibilityObserver.observe(host);
|
|
78
|
+
}
|
|
60
79
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ZDropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
61
80
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: ZDropdownMenuComponent, isStandalone: true, selector: "z-dropdown-menu", inputs: { zItems: { classPropertyName: "zItems", publicName: "zItems", isSignal: true, isRequired: true, transformFunction: null }, zLabel: { classPropertyName: "zLabel", publicName: "zLabel", isSignal: true, isRequired: false, transformFunction: null }, zIcon: { classPropertyName: "zIcon", publicName: "zIcon", isSignal: true, isRequired: false, transformFunction: null }, zButtonType: { classPropertyName: "zButtonType", publicName: "zButtonType", isSignal: true, isRequired: false, transformFunction: null }, zPosition: { classPropertyName: "zPosition", publicName: "zPosition", isSignal: true, isRequired: false, transformFunction: null }, zButtonSize: { classPropertyName: "zButtonSize", publicName: "zButtonSize", isSignal: true, isRequired: false, transformFunction: null }, zOffset: { classPropertyName: "zOffset", publicName: "zOffset", isSignal: true, isRequired: false, transformFunction: null }, zMinWidth: { classPropertyName: "zMinWidth", publicName: "zMinWidth", isSignal: true, isRequired: false, transformFunction: null }, zMaxWidth: { classPropertyName: "zMaxWidth", publicName: "zMaxWidth", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null }, zWave: { classPropertyName: "zWave", publicName: "zWave", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnItemClick: "zOnItemClick" }, providers: [TranslatePipe], viewQueries: [{ propertyName: "contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n [zWave]=\"zWave()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div\n zHoverGlide\n class=\"z-dropdown-menu-content p-1\"\n [style.min-width.px]=\"zMinWidth()\"\n [style.max-width.px]=\"zMaxWidth()\">\n @for (item of visibleItems(); track $index) {\n @if (item.divide === 'before' && $index > 0) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n data-glide-item\n [disabled]=\"item.disabled || item.loading\"\n [class]=\"item.class\"\n class=\"data-[state=open]:bg-accent focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"item.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n zHoverGlide\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n data-glide-item\n [disabled]=\"subItem.disabled || subItem.loading\"\n [class]=\"subItem.class\"\n class=\"focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (subItem.icon) {\n <z-icon\n [zType]=\"subItem.icon\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label | translate }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut | translate }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n data-glide-item\n [disabled]=\"item.disabled || item.loading\"\n [class]=\"item.class\"\n class=\"focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"item.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (item.divide === 'after' && $index < visibleItems().length - 1) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n", styles: [".z-dropdown-menu-content{min-width:inherit}\n"], dependencies: [{ kind: "directive", type: ZPopoverDirective, selector: "[z-popover]", inputs: ["zPopoverContent", "zPosition", "zTrigger", "zPopoverTrigger", "zClass", "zShowDelay", "zHideDelay", "zDisabled", "zOffset", "zPopoverWidth", "zTriggerRef", "zManualClose", "zOutsideClickClose", "zScrollClose", "zSticky", "zShowArrow", "zKeyboardSafe"], outputs: ["zShow", "zHide", "zHideStart", "zControl", "zPositionChange", "zOutsideClick"], exportAs: ["zPopover"] }, { 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: "directive", type: ZHoverGlideDirective, selector: "[zHoverGlide]", inputs: ["zHoverGlideSelector", "zHoverGlideClass", "zHoverGlideDisabled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
62
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-dropdown-menu.mjs","sources":["../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.ts","../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.html","../../../../libs/core-ui/components/z-dropdown-menu/shival99-z-ui-components-z-dropdown-menu.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZHoverGlideDirective } from '@shival99/z-ui/components/z-hover-glide';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { type ZPopoverPosition } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport { ZDropdownMenuItem } from './z-dropdown-menu.types';\n\n@Component({\n selector: 'z-dropdown-menu',\n imports: [\n ZPopoverDirective,\n ZButtonComponent,\n ZIconComponent,\n ZTooltipDirective,\n ZHoverGlideDirective,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-dropdown-menu.component.html',\n styleUrl: './z-dropdown-menu.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZDropdownMenuComponent implements AfterContentInit {\n protected readonly contentWrapper = viewChild<ElementRef<HTMLElement>>('contentWrapper');\n\n public readonly zOnItemClick = output<ZDropdownMenuItem>();\n\n public readonly zItems = input.required<ZDropdownMenuItem[]>();\n public readonly zLabel = input<string>();\n public readonly zIcon = input<ZIcon>('lucideMenu');\n public readonly zButtonType = input<'primary' | 'secondary' | 'outline' | 'ghost'>('outline');\n public readonly zPosition = input<ZPopoverPosition>('bottom-right');\n public readonly zButtonSize = input<ZButtonVariants['zSize']>('default');\n public readonly zOffset = input<number>(4);\n public readonly zMinWidth = input<number>(224);\n public readonly zMaxWidth = input<number>(320);\n public readonly zDisabled = input<boolean>(false);\n public readonly zWave = input(true, { transform: zTransform });\n\n protected readonly hasContent = signal(false);\n protected readonly popoverControl = signal<{ close: () => void; closeImmediate: () => void } | null>(null);\n\n protected readonly visibleItems = computed(() => this.zItems().filter(item => !item.hidden));\n\n ngAfterContentInit(): void {\n const wrapper = this.contentWrapper();\n if (wrapper) {\n const hasProjectedContent = wrapper.nativeElement.children.length > 0;\n this.hasContent.set(hasProjectedContent);\n }\n }\n\n protected onItemClick(item: ZDropdownMenuItem): void {\n if (item.disabled || item.loading) {\n return;\n }\n\n item.onClick?.();\n this.zOnItemClick.emit(item);\n this.popoverControl()?.closeImmediate();\n }\n\n protected onControl(control: { close: () => void; closeImmediate: () => void }): void {\n this.popoverControl.set(control);\n }\n}\n","<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n [zWave]=\"zWave()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div\n zHoverGlide\n class=\"z-dropdown-menu-content p-1\"\n [style.min-width.px]=\"zMinWidth()\"\n [style.max-width.px]=\"zMaxWidth()\">\n @for (item of visibleItems(); track $index) {\n @if (item.divide === 'before' && $index > 0) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n data-glide-item\n [disabled]=\"item.disabled || item.loading\"\n [class]=\"item.class\"\n class=\"data-[state=open]:bg-accent focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"item.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n zHoverGlide\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n data-glide-item\n [disabled]=\"subItem.disabled || subItem.loading\"\n [class]=\"subItem.class\"\n class=\"focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (subItem.icon) {\n <z-icon\n [zType]=\"subItem.icon\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label | translate }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut | translate }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n data-glide-item\n [disabled]=\"item.disabled || item.loading\"\n [class]=\"item.class\"\n class=\"focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"item.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (item.divide === 'after' && $index < visibleItems().length - 1) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\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-dropdown-menu.mjs","sources":["../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.ts","../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.html","../../../../libs/core-ui/components/z-dropdown-menu/shival99-z-ui-components-z-dropdown-menu.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZHoverGlideDirective } from '@shival99/z-ui/components/z-hover-glide';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective, type ZPopoverControl, type ZPopoverPosition } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport { ZDropdownMenuItem } from './z-dropdown-menu.types';\n\n@Component({\n selector: 'z-dropdown-menu',\n imports: [\n ZPopoverDirective,\n ZButtonComponent,\n ZIconComponent,\n ZTooltipDirective,\n ZHoverGlideDirective,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-dropdown-menu.component.html',\n styleUrl: './z-dropdown-menu.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZDropdownMenuComponent implements AfterContentInit, OnDestroy {\n private readonly _host = inject<ElementRef<HTMLElement>>(ElementRef);\n private _visibilityObserver: ResizeObserver | null = null;\n\n protected readonly contentWrapper = viewChild<ElementRef<HTMLElement>>('contentWrapper');\n\n public readonly zOnItemClick = output<ZDropdownMenuItem>();\n\n public readonly zItems = input.required<ZDropdownMenuItem[]>();\n public readonly zLabel = input<string>();\n public readonly zIcon = input<ZIcon>('lucideMenu');\n public readonly zButtonType = input<'primary' | 'secondary' | 'outline' | 'ghost'>('outline');\n public readonly zPosition = input<ZPopoverPosition>('bottom-right');\n public readonly zButtonSize = input<ZButtonVariants['zSize']>('default');\n public readonly zOffset = input<number>(4);\n public readonly zMinWidth = input<number>(224);\n public readonly zMaxWidth = input<number>(320);\n public readonly zDisabled = input<boolean>(false);\n public readonly zWave = input(true, { transform: zTransform });\n\n protected readonly hasContent = signal(false);\n protected readonly popoverControl = signal<ZPopoverControl | null>(null);\n\n protected readonly visibleItems = computed(() => this.zItems().filter(item => !item.hidden));\n\n ngAfterContentInit(): void {\n const wrapper = this.contentWrapper();\n if (wrapper) {\n const hasProjectedContent = wrapper.nativeElement.children.length > 0;\n this.hasContent.set(hasProjectedContent);\n }\n\n this._setupVisibilityObserver();\n }\n\n ngOnDestroy(): void {\n this._visibilityObserver?.disconnect();\n this._visibilityObserver = null;\n }\n\n protected onItemClick(item: ZDropdownMenuItem): void {\n if (item.disabled || item.loading) {\n return;\n }\n\n item.onClick?.();\n this.zOnItemClick.emit(item);\n this.popoverControl()?.closeImmediate();\n }\n\n protected onControl(control: ZPopoverControl): void {\n this.popoverControl.set(control);\n }\n\n private _setupVisibilityObserver(): void {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const host = this._host.nativeElement;\n this._visibilityObserver = new ResizeObserver(() => {\n if (host.getClientRects().length === 0 || getComputedStyle(host).display === 'none') {\n this.popoverControl()?.closeImmediate();\n }\n });\n this._visibilityObserver.observe(host);\n }\n}\n","<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n [zWave]=\"zWave()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div\n zHoverGlide\n class=\"z-dropdown-menu-content p-1\"\n [style.min-width.px]=\"zMinWidth()\"\n [style.max-width.px]=\"zMaxWidth()\">\n @for (item of visibleItems(); track $index) {\n @if (item.divide === 'before' && $index > 0) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n data-glide-item\n [disabled]=\"item.disabled || item.loading\"\n [class]=\"item.class\"\n class=\"data-[state=open]:bg-accent focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"item.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n zHoverGlide\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n data-glide-item\n [disabled]=\"subItem.disabled || subItem.loading\"\n [class]=\"subItem.class\"\n class=\"focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (subItem.icon) {\n <z-icon\n [zType]=\"subItem.icon\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label | translate }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut | translate }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n data-glide-item\n [disabled]=\"item.disabled || item.loading\"\n [class]=\"item.class\"\n class=\"focus:bg-accent relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.loading) {\n <z-icon\n zType=\"lucideLoader\"\n [zSize]=\"item.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0 animate-spin\" />\n } @else if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (item.divide === 'after' && $index < visibleItems().length - 1) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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,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,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,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,EAAA,CAAA;;AE3CzF;;AAEG;;"}
|
|
@@ -124,9 +124,9 @@ const MEDIA_PLAYER_VI_PLYR_TRANSLATIONS = {
|
|
|
124
124
|
function mapSourceToProviderProps(source) {
|
|
125
125
|
switch (source.kind) {
|
|
126
126
|
case 'video':
|
|
127
|
-
return { src: source.src, type: 'video/mp4' };
|
|
127
|
+
return { src: source.src, type: source.type || 'video/mp4' };
|
|
128
128
|
case 'audio':
|
|
129
|
-
return { src: source.src, type: 'audio/mpeg' };
|
|
129
|
+
return { src: source.src, type: source.type || 'audio/mpeg' };
|
|
130
130
|
case 'hls':
|
|
131
131
|
return { src: source.src, type: 'application/x-mpegurl' };
|
|
132
132
|
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: 'video/mp4' };\n case 'audio':\n return { src: source.src, 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":"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"}
|
|
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":"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"}
|