@videojs/html 0.1.0-preview.2 → 0.1.0-preview.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/button-D1DWjsQu.js +57 -0
- package/dist/button-D1DWjsQu.js.map +1 -0
- package/dist/component-factory-DeAN6cjC.js +47 -0
- package/dist/component-factory-DeAN6cjC.js.map +1 -0
- package/dist/current-time-display-C3qndGf5.js +47 -0
- package/dist/current-time-display-C3qndGf5.js.map +1 -0
- package/dist/custom-element-3bDlB2XO.js +10 -0
- package/dist/custom-element-3bDlB2XO.js.map +1 -0
- package/dist/define/index.d.ts +12 -0
- package/dist/define/index.js +27 -0
- package/dist/define/media-container.d.ts +1 -0
- package/dist/define/media-container.js +3 -0
- package/dist/define/media-current-time-display.d.ts +1 -0
- package/dist/define/media-current-time-display.js +4 -0
- package/dist/define/media-duration-display.d.ts +1 -0
- package/dist/define/media-duration-display.js +4 -0
- package/dist/define/media-fullscreen-button.d.ts +1 -0
- package/dist/define/media-fullscreen-button.js +5 -0
- package/dist/define/media-mute-button.d.ts +1 -0
- package/dist/define/media-mute-button.js +5 -0
- package/dist/define/media-play-button.d.ts +1 -0
- package/dist/define/media-play-button.js +5 -0
- package/dist/define/media-popover.d.ts +1 -0
- package/dist/define/media-popover.js +3 -0
- package/dist/define/media-preview-time-display.d.ts +1 -0
- package/dist/define/media-preview-time-display.js +4 -0
- package/dist/define/media-provider.d.ts +1 -0
- package/dist/define/media-provider.js +3 -0
- package/dist/define/media-time-slider.d.ts +1 -0
- package/dist/define/media-time-slider.js +4 -0
- package/dist/define/media-tooltip.d.ts +1 -0
- package/dist/define/media-tooltip.js +3 -0
- package/dist/define/media-volume-slider.d.ts +1 -0
- package/dist/define/media-volume-slider.js +4 -0
- package/dist/duration-display-JOPp3bdU.js +49 -0
- package/dist/duration-display-JOPp3bdU.js.map +1 -0
- package/dist/fullscreen-button-CGO2UJjs.js +48 -0
- package/dist/fullscreen-button-CGO2UJjs.js.map +1 -0
- package/dist/{icons-YlVTDFdV.js → icons-CuxuONCk.js} +59 -48
- package/dist/icons-CuxuONCk.js.map +1 -0
- package/dist/icons.d.ts +1 -2
- package/dist/icons.js +2 -3
- package/dist/index-LKrIp3Oo.d.ts +1 -0
- package/dist/index.d.ts +172 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -9
- package/dist/media-container-BGEXSi9g.js +8 -0
- package/dist/media-container-BGEXSi9g.js.map +1 -0
- package/dist/media-container-C0MUzkJ_.js +83 -0
- package/dist/media-container-C0MUzkJ_.js.map +1 -0
- package/dist/media-container-DPnFjmtK.d.ts +1 -0
- package/dist/media-current-time-display-B-4Cp845.js +8 -0
- package/dist/media-current-time-display-B-4Cp845.js.map +1 -0
- package/dist/media-current-time-display-Cd0rPAuj.d.ts +1 -0
- package/dist/media-duration-display-BLMr7VHo.js +8 -0
- package/dist/media-duration-display-BLMr7VHo.js.map +1 -0
- package/dist/media-duration-display-qvm6YX-q.d.ts +1 -0
- package/dist/media-fullscreen-button-BgUK3lgu.d.ts +1 -0
- package/dist/media-fullscreen-button-Dcflbt54.js +8 -0
- package/dist/media-fullscreen-button-Dcflbt54.js.map +1 -0
- package/dist/media-mute-button-BOVhZ3aP.js +8 -0
- package/dist/media-mute-button-BOVhZ3aP.js.map +1 -0
- package/dist/media-mute-button-NVJF2EEW.d.ts +1 -0
- package/dist/media-play-button-CLj-hkwn.js +8 -0
- package/dist/media-play-button-CLj-hkwn.js.map +1 -0
- package/dist/media-play-button-oq8yDlxe.d.ts +1 -0
- package/dist/media-popover-BtJmPv0E.d.ts +1 -0
- package/dist/media-popover-F4M4Tq4z.js +8 -0
- package/dist/media-popover-F4M4Tq4z.js.map +1 -0
- package/dist/media-preview-time-display-4YX5Rics.d.ts +1 -0
- package/dist/media-preview-time-display-DAiMgLPX.js +8 -0
- package/dist/media-preview-time-display-DAiMgLPX.js.map +1 -0
- package/dist/media-provider-CyoL0bCx.js +17 -0
- package/dist/media-provider-CyoL0bCx.js.map +1 -0
- package/dist/media-provider-D7P2TLXG.d.ts +1 -0
- package/dist/media-provider-D_GL2_DN.js +8 -0
- package/dist/media-provider-D_GL2_DN.js.map +1 -0
- package/dist/media-skin-Di3vSHvS.d.ts +11 -0
- package/dist/media-skin-Di3vSHvS.d.ts.map +1 -0
- package/dist/media-skin-mHWwUPg3.js +36 -0
- package/dist/media-skin-mHWwUPg3.js.map +1 -0
- package/dist/media-time-slider-Bp2qnwsW.js +12 -0
- package/dist/media-time-slider-Bp2qnwsW.js.map +1 -0
- package/dist/media-time-slider-DvMnfYXZ.d.ts +1 -0
- package/dist/media-tooltip-BqV17mdM.d.ts +1 -0
- package/dist/media-tooltip-ClcVafMb.js +14 -0
- package/dist/media-tooltip-ClcVafMb.js.map +1 -0
- package/dist/media-volume-slider-CKSxmdQv.js +11 -0
- package/dist/media-volume-slider-CKSxmdQv.js.map +1 -0
- package/dist/media-volume-slider-DP47VLVi.d.ts +1 -0
- package/dist/mute-button-vW2sLqqY.js +50 -0
- package/dist/mute-button-vW2sLqqY.js.map +1 -0
- package/dist/play-button-aVb0g10G.js +44 -0
- package/dist/play-button-aVb0g10G.js.map +1 -0
- package/dist/popover-Dc0hyhwB.js +187 -0
- package/dist/popover-Dc0hyhwB.js.map +1 -0
- package/dist/preview-time-display-Dax0FQ2X.js +44 -0
- package/dist/preview-time-display-Dax0FQ2X.js.map +1 -0
- package/dist/skins/frosted.d.ts +23 -0
- package/dist/skins/frosted.d.ts.map +1 -0
- package/dist/skins/frosted.js +144 -0
- package/dist/skins/frosted.js.map +1 -0
- package/dist/skins/minimal.d.ts +23 -0
- package/dist/skins/minimal.d.ts.map +1 -0
- package/dist/skins/minimal.js +149 -0
- package/dist/skins/minimal.js.map +1 -0
- package/dist/time-slider-CA1GMs6A.js +201 -0
- package/dist/time-slider-CA1GMs6A.js.map +1 -0
- package/dist/tooltip-54fBUUpb.js +296 -0
- package/dist/tooltip-54fBUUpb.js.map +1 -0
- package/dist/volume-slider-guD8gqpi.js +206 -0
- package/dist/volume-slider-guD8gqpi.js.map +1 -0
- package/package.json +16 -7
- package/dist/chunk-Bp6m_JJh.js +0 -13
- package/dist/icons-YlVTDFdV.js.map +0 -1
- package/dist/index-BtSCzZKn.d.ts +0 -62
- package/dist/index-BtSCzZKn.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/media-skin-BlXPC9wG.js +0 -1458
- package/dist/media-skin-BlXPC9wG.js.map +0 -1
- package/dist/media-skin-CbuyuCb-.d.ts +0 -208
- package/dist/media-skin-CbuyuCb-.d.ts.map +0 -1
- package/dist/skins/default.d.ts +0 -12
- package/dist/skins/default.d.ts.map +0 -1
- package/dist/skins/default.js +0 -424
- package/dist/skins/default.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as MuteButtonElement } from "./mute-button-vW2sLqqY.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-mute-button.ts
|
|
5
|
+
defineCustomElement("media-mute-button", MuteButtonElement);
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
//# sourceMappingURL=media-mute-button-BOVhZ3aP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-mute-button-BOVhZ3aP.js","names":[],"sources":["../src/define/media-mute-button.ts"],"sourcesContent":["import { MuteButtonElement } from '@/elements/mute-button';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-mute-button', MuteButtonElement);\n"],"mappings":";;;;AAGA,oBAAoB,qBAAqB,kBAAkB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as PlayButtonElement } from "./play-button-aVb0g10G.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-play-button.ts
|
|
5
|
+
defineCustomElement("media-play-button", PlayButtonElement);
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
//# sourceMappingURL=media-play-button-CLj-hkwn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-play-button-CLj-hkwn.js","names":[],"sources":["../src/define/media-play-button.ts"],"sourcesContent":["import { PlayButtonElement } from '@/elements/play-button';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-play-button', PlayButtonElement);\n"],"mappings":";;;;AAGA,oBAAoB,qBAAqB,kBAAkB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as PopoverElement } from "./popover-Dc0hyhwB.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-popover.ts
|
|
5
|
+
defineCustomElement("media-popover", PopoverElement);
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
//# sourceMappingURL=media-popover-F4M4Tq4z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-popover-F4M4Tq4z.js","names":[],"sources":["../src/define/media-popover.ts"],"sourcesContent":["import { PopoverElement } from '@/elements/popover';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-popover', PopoverElement);\n"],"mappings":";;;;AAGA,oBAAoB,iBAAiB,eAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as PreviewTimeDisplayElement } from "./preview-time-display-Dax0FQ2X.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-preview-time-display.ts
|
|
5
|
+
defineCustomElement("media-preview-time-display", PreviewTimeDisplayElement);
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
//# sourceMappingURL=media-preview-time-display-DAiMgLPX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-preview-time-display-DAiMgLPX.js","names":[],"sources":["../src/define/media-preview-time-display.ts"],"sourcesContent":["import { PreviewTimeDisplayElement } from '@/elements/preview-time-display';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-preview-time-display', PreviewTimeDisplayElement);\n"],"mappings":";;;;AAGA,oBAAoB,8BAA8B,0BAA0B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createMediaStore } from "@videojs/core/store";
|
|
2
|
+
import { ProviderMixin } from "@open-wc/context-protocol";
|
|
3
|
+
|
|
4
|
+
//#region src/media/media-provider.ts
|
|
5
|
+
const ProviderHTMLElement = ProviderMixin(HTMLElement);
|
|
6
|
+
var MediaProviderElement = class extends ProviderHTMLElement {
|
|
7
|
+
constructor(..._args) {
|
|
8
|
+
super(..._args);
|
|
9
|
+
this.contexts = { mediaStore: () => {
|
|
10
|
+
return createMediaStore();
|
|
11
|
+
} };
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { MediaProviderElement as t };
|
|
17
|
+
//# sourceMappingURL=media-provider-CyoL0bCx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-provider-CyoL0bCx.js","names":["ProviderHTMLElement: Constructor<CustomElement & HTMLElement>"],"sources":["../src/media/media-provider.ts"],"sourcesContent":["import type { Constructor, CustomElement } from '@open-wc/context-protocol';\nimport type { MediaStore } from '@videojs/core/store';\n\nimport { ProviderMixin } from '@open-wc/context-protocol';\nimport { createMediaStore } from '@videojs/core/store';\n\nconst ProviderHTMLElement: Constructor<CustomElement & HTMLElement> = ProviderMixin(HTMLElement);\n\nexport class MediaProviderElement extends ProviderHTMLElement {\n contexts = {\n mediaStore: (): MediaStore => {\n return createMediaStore();\n },\n };\n}\n"],"mappings":";;;;AAMA,MAAMA,sBAAgE,cAAc,YAAY;AAEhG,IAAa,uBAAb,cAA0C,oBAAoB;;;kBACjD,EACT,kBAA8B;AAC5B,UAAO,kBAAkB;KAE5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as MediaProviderElement } from "./media-provider-CyoL0bCx.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-provider.ts
|
|
5
|
+
defineCustomElement("media-provider", MediaProviderElement);
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
//# sourceMappingURL=media-provider-D_GL2_DN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-provider-D_GL2_DN.js","names":[],"sources":["../src/define/media-provider.ts"],"sourcesContent":["import { MediaProviderElement } from '@/media/media-provider';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-provider', MediaProviderElement);\n"],"mappings":";;;;AAGA,oBAAoB,kBAAkB,qBAAqB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/media/media-skin.d.ts
|
|
2
|
+
declare class MediaSkinElement extends HTMLElement {
|
|
3
|
+
static shadowRootOptions: {
|
|
4
|
+
mode: ShadowRootMode;
|
|
5
|
+
};
|
|
6
|
+
static getTemplateHTML: () => string;
|
|
7
|
+
constructor();
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { MediaSkinElement as t };
|
|
11
|
+
//# sourceMappingURL=media-skin-Di3vSHvS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-skin-Di3vSHvS.d.ts","names":[],"sources":["../src/media/media-skin.ts"],"sourcesContent":[],"mappings":";AAiBa,cAAA,gBAAA,SAAyB,WAAA,CAAA;;UACS"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/media/media-skin.ts
|
|
2
|
+
function getTemplateHTML() {
|
|
3
|
+
return `
|
|
4
|
+
<style>
|
|
5
|
+
:host {
|
|
6
|
+
display: block;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
media-container {
|
|
10
|
+
display: block;
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 100%;
|
|
13
|
+
}
|
|
14
|
+
</style>
|
|
15
|
+
<slot></slot>
|
|
16
|
+
`;
|
|
17
|
+
}
|
|
18
|
+
var MediaSkinElement = class extends HTMLElement {
|
|
19
|
+
static {
|
|
20
|
+
this.shadowRootOptions = { mode: "open" };
|
|
21
|
+
}
|
|
22
|
+
static {
|
|
23
|
+
this.getTemplateHTML = getTemplateHTML;
|
|
24
|
+
}
|
|
25
|
+
constructor() {
|
|
26
|
+
super();
|
|
27
|
+
if (!this.shadowRoot) {
|
|
28
|
+
this.attachShadow(this.constructor.shadowRootOptions);
|
|
29
|
+
this.shadowRoot.innerHTML = this.constructor.getTemplateHTML();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
export { MediaSkinElement as t };
|
|
36
|
+
//# sourceMappingURL=media-skin-mHWwUPg3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-skin-mHWwUPg3.js","names":[],"sources":["../src/media/media-skin.ts"],"sourcesContent":["export function getTemplateHTML() {\n return /* html */ `\n <style>\n :host {\n display: block;\n }\n\n media-container {\n display: block;\n width: 100%;\n height: 100%;\n }\n </style>\n <slot></slot>\n `;\n}\n\nexport class MediaSkinElement extends HTMLElement {\n static shadowRootOptions = { mode: 'open' as ShadowRootMode };\n static getTemplateHTML: () => string = getTemplateHTML;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n this.attachShadow((this.constructor as typeof MediaSkinElement).shadowRootOptions);\n this.shadowRoot!.innerHTML = (this.constructor as typeof MediaSkinElement).getTemplateHTML();\n }\n }\n}\n"],"mappings":";AAAA,SAAgB,kBAAkB;AAChC,QAAkB;;;;;;;;;;;;;;;AAgBpB,IAAa,mBAAb,cAAsC,YAAY;;2BACrB,EAAE,MAAM,QAA0B;;;yBACtB;;CAEvC,cAAc;AACZ,SAAO;AAEP,MAAI,CAAC,KAAK,YAAY;AACpB,QAAK,aAAc,KAAK,YAAwC,kBAAkB;AAClF,QAAK,WAAY,YAAa,KAAK,YAAwC,iBAAiB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { a as TimeSliderThumbElement, i as TimeSliderRootElement, n as TimeSliderPointerElement, o as TimeSliderTrackElement, r as TimeSliderProgressElement } from "./time-slider-CA1GMs6A.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-time-slider.ts
|
|
5
|
+
defineCustomElement("media-time-slider", TimeSliderRootElement);
|
|
6
|
+
defineCustomElement("media-time-slider-track", TimeSliderTrackElement);
|
|
7
|
+
defineCustomElement("media-time-slider-progress", TimeSliderProgressElement);
|
|
8
|
+
defineCustomElement("media-time-slider-pointer", TimeSliderPointerElement);
|
|
9
|
+
defineCustomElement("media-time-slider-thumb", TimeSliderThumbElement);
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=media-time-slider-Bp2qnwsW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-time-slider-Bp2qnwsW.js","names":[],"sources":["../src/define/media-time-slider.ts"],"sourcesContent":["import { TimeSliderPointerElement, TimeSliderProgressElement, TimeSliderRootElement, TimeSliderThumbElement, TimeSliderTrackElement } from '@/elements/time-slider';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-time-slider', TimeSliderRootElement);\ndefineCustomElement('media-time-slider-track', TimeSliderTrackElement);\ndefineCustomElement('media-time-slider-progress', TimeSliderProgressElement);\ndefineCustomElement('media-time-slider-pointer', TimeSliderPointerElement);\ndefineCustomElement('media-time-slider-thumb', TimeSliderThumbElement);\n"],"mappings":";;;;AAGA,oBAAoB,qBAAqB,sBAAsB;AAC/D,oBAAoB,2BAA2B,uBAAuB;AACtE,oBAAoB,8BAA8B,0BAA0B;AAC5E,oBAAoB,6BAA6B,yBAAyB;AAC1E,oBAAoB,2BAA2B,uBAAuB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { a as TooltipPositionerElement, i as TooltipPortalElement, o as TooltipRootElement, r as TooltipPopupElement, s as TooltipTriggerElement, t as TooltipArrowElement } from "./tooltip-54fBUUpb.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-tooltip.ts
|
|
5
|
+
defineCustomElement("media-tooltip", TooltipRootElement);
|
|
6
|
+
defineCustomElement("media-tooltip-trigger", TooltipTriggerElement);
|
|
7
|
+
defineCustomElement("media-tooltip-portal", TooltipPortalElement);
|
|
8
|
+
defineCustomElement("media-tooltip-positioner", TooltipPositionerElement);
|
|
9
|
+
defineCustomElement("media-tooltip-portal", TooltipPortalElement);
|
|
10
|
+
defineCustomElement("media-tooltip-popup", TooltipPopupElement);
|
|
11
|
+
defineCustomElement("media-tooltip-arrow", TooltipArrowElement);
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
//# sourceMappingURL=media-tooltip-ClcVafMb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-tooltip-ClcVafMb.js","names":[],"sources":["../src/define/media-tooltip.ts"],"sourcesContent":["import { TooltipArrowElement, TooltipPopupElement, TooltipPortalElement, TooltipPositionerElement, TooltipRootElement, TooltipTriggerElement } from '@/elements/tooltip';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-tooltip', TooltipRootElement);\ndefineCustomElement('media-tooltip-trigger', TooltipTriggerElement);\ndefineCustomElement('media-tooltip-portal', TooltipPortalElement);\ndefineCustomElement('media-tooltip-positioner', TooltipPositionerElement);\ndefineCustomElement('media-tooltip-portal', TooltipPortalElement);\ndefineCustomElement('media-tooltip-popup', TooltipPopupElement);\ndefineCustomElement('media-tooltip-arrow', TooltipArrowElement);\n"],"mappings":";;;;AAGA,oBAAoB,iBAAiB,mBAAmB;AACxD,oBAAoB,yBAAyB,sBAAsB;AACnE,oBAAoB,wBAAwB,qBAAqB;AACjE,oBAAoB,4BAA4B,yBAAyB;AACzE,oBAAoB,wBAAwB,qBAAqB;AACjE,oBAAoB,uBAAuB,oBAAoB;AAC/D,oBAAoB,uBAAuB,oBAAoB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { a as VolumeSliderTrackElement, i as VolumeSliderThumbElement, n as VolumeSliderIndicatorElement, r as VolumeSliderRootElement } from "./volume-slider-guD8gqpi.js";
|
|
2
|
+
import { t as defineCustomElement } from "./custom-element-3bDlB2XO.js";
|
|
3
|
+
|
|
4
|
+
//#region src/define/media-volume-slider.ts
|
|
5
|
+
defineCustomElement("media-volume-slider", VolumeSliderRootElement);
|
|
6
|
+
defineCustomElement("media-volume-slider-track", VolumeSliderTrackElement);
|
|
7
|
+
defineCustomElement("media-volume-slider-indicator", VolumeSliderIndicatorElement);
|
|
8
|
+
defineCustomElement("media-volume-slider-thumb", VolumeSliderThumbElement);
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
//# sourceMappingURL=media-volume-slider-CKSxmdQv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-volume-slider-CKSxmdQv.js","names":[],"sources":["../src/define/media-volume-slider.ts"],"sourcesContent":["import { VolumeSliderIndicatorElement, VolumeSliderRootElement, VolumeSliderThumbElement, VolumeSliderTrackElement } from '@/elements/volume-slider';\nimport { defineCustomElement } from '@/utils/custom-element';\n\ndefineCustomElement('media-volume-slider', VolumeSliderRootElement);\ndefineCustomElement('media-volume-slider-track', VolumeSliderTrackElement);\ndefineCustomElement('media-volume-slider-indicator', VolumeSliderIndicatorElement);\ndefineCustomElement('media-volume-slider-thumb', VolumeSliderThumbElement);\n"],"mappings":";;;;AAGA,oBAAoB,uBAAuB,wBAAwB;AACnE,oBAAoB,6BAA6B,yBAAyB;AAC1E,oBAAoB,iCAAiC,6BAA6B;AAClF,oBAAoB,6BAA6B,yBAAyB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { t as toConnectedHTMLComponent } from "./component-factory-DeAN6cjC.js";
|
|
2
|
+
import { t as ButtonElement } from "./button-D1DWjsQu.js";
|
|
3
|
+
import { muteButtonStateDefinition } from "@videojs/core/store";
|
|
4
|
+
import { setAttributes } from "@videojs/utils/dom";
|
|
5
|
+
|
|
6
|
+
//#region src/elements/mute-button.ts
|
|
7
|
+
var MuteButton = class extends ButtonElement {
|
|
8
|
+
handleEvent(event) {
|
|
9
|
+
super.handleEvent(event);
|
|
10
|
+
const { type } = event;
|
|
11
|
+
const state = this._state;
|
|
12
|
+
if (state) {
|
|
13
|
+
if (type === "click") if (state.volumeLevel === "off") state.requestUnmute();
|
|
14
|
+
else state.requestMute();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
get muted() {
|
|
18
|
+
return this._state?.muted ?? false;
|
|
19
|
+
}
|
|
20
|
+
get volumeLevel() {
|
|
21
|
+
return this._state?.volumeLevel ?? "high";
|
|
22
|
+
}
|
|
23
|
+
_update(props, state) {
|
|
24
|
+
this._state = state;
|
|
25
|
+
/** @TODO Follow up with React vs. W.C. data-* attributes discrepancies (CJP) */
|
|
26
|
+
setAttributes(this, props);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const getMuteButtonState = {
|
|
30
|
+
keys: muteButtonStateDefinition.keys,
|
|
31
|
+
transform: (rawState, mediaStore) => ({
|
|
32
|
+
...muteButtonStateDefinition.stateTransform(rawState),
|
|
33
|
+
...muteButtonStateDefinition.createRequestMethods(mediaStore.dispatch)
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
const getMuteButtonProps = (state, _element) => {
|
|
37
|
+
return {
|
|
38
|
+
"data-muted": state.muted,
|
|
39
|
+
"data-volume-level": state.volumeLevel,
|
|
40
|
+
role: "button",
|
|
41
|
+
tabindex: "0",
|
|
42
|
+
"aria-label": state.muted ? "unmute" : "mute",
|
|
43
|
+
"data-tooltip": state.muted ? "Unmute" : "Mute"
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
const MuteButtonElement = toConnectedHTMLComponent(MuteButton, getMuteButtonState, getMuteButtonProps, "MuteButton");
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { MuteButtonElement as t };
|
|
50
|
+
//# sourceMappingURL=mute-button-vW2sLqqY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mute-button-vW2sLqqY.js","names":["getMuteButtonState: StateHook<{\n muted: boolean;\n volumeLevel: string;\n}>","getMuteButtonProps: PropsHook<{\n muted: boolean;\n volumeLevel: string;\n}>","MuteButtonElement: ConnectedComponentConstructor<MuteButtonState>"],"sources":["../src/elements/mute-button.ts"],"sourcesContent":["import type { MuteButtonState } from '@videojs/core/store';\nimport type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { muteButtonStateDefinition } from '@videojs/core/store';\n\nimport { setAttributes } from '@videojs/utils/dom';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\nimport { ButtonElement } from './button';\n\nexport class MuteButton extends ButtonElement {\n _state:\n | {\n muted: boolean;\n volumeLevel: string;\n requestMute: () => void;\n requestUnmute: () => void;\n }\n | undefined;\n\n handleEvent(event: Event): void {\n super.handleEvent(event);\n\n const { type } = event;\n const state = this._state;\n\n if (state) {\n if (type === 'click') {\n if (state.volumeLevel === 'off') {\n state.requestUnmute();\n } else {\n state.requestMute();\n }\n }\n }\n }\n\n get muted(): boolean {\n return this._state?.muted ?? false;\n }\n\n get volumeLevel(): string {\n return this._state?.volumeLevel ?? 'high';\n }\n\n _update(props: any, state: any): void {\n this._state = state;\n /** @TODO Follow up with React vs. W.C. data-* attributes discrepancies (CJP) */\n setAttributes(this, props);\n }\n}\n\nexport const getMuteButtonState: StateHook<{\n muted: boolean;\n volumeLevel: string;\n}> = {\n keys: muteButtonStateDefinition.keys,\n transform: (rawState, mediaStore) => ({\n ...muteButtonStateDefinition.stateTransform(rawState),\n ...muteButtonStateDefinition.createRequestMethods(mediaStore.dispatch),\n }),\n};\n\nexport const getMuteButtonProps: PropsHook<{\n muted: boolean;\n volumeLevel: string;\n}> = (state, _element) => {\n const baseProps: Record<string, any> = {\n /** data attributes/props */\n 'data-muted': state.muted,\n 'data-volume-level': state.volumeLevel,\n /** @TODO Need another state provider in core for i18n (CJP) */\n /** aria attributes/props */\n role: 'button',\n tabindex: '0',\n 'aria-label': state.muted ? 'unmute' : 'mute',\n /** tooltip */\n 'data-tooltip': state.muted ? 'Unmute' : 'Mute',\n /** @TODO Figure out how we want to handle attr overrides (e.g. aria-label) (CJP) */\n /** external props spread last to allow for overriding */\n // ...props,\n };\n\n return baseProps;\n};\n\nexport const MuteButtonElement: ConnectedComponentConstructor<MuteButtonState> = toConnectedHTMLComponent(\n MuteButton,\n getMuteButtonState,\n getMuteButtonProps,\n 'MuteButton',\n);\n"],"mappings":";;;;;;AASA,IAAa,aAAb,cAAgC,cAAc;CAU5C,YAAY,OAAoB;AAC9B,QAAM,YAAY,MAAM;EAExB,MAAM,EAAE,SAAS;EACjB,MAAM,QAAQ,KAAK;AAEnB,MAAI,OACF;OAAI,SAAS,QACX,KAAI,MAAM,gBAAgB,MACxB,OAAM,eAAe;OAErB,OAAM,aAAa;;;CAM3B,IAAI,QAAiB;AACnB,SAAO,KAAK,QAAQ,SAAS;;CAG/B,IAAI,cAAsB;AACxB,SAAO,KAAK,QAAQ,eAAe;;CAGrC,QAAQ,OAAY,OAAkB;AACpC,OAAK,SAAS;;AAEd,gBAAc,MAAM,MAAM;;;AAI9B,MAAaA,qBAGR;CACH,MAAM,0BAA0B;CAChC,YAAY,UAAU,gBAAgB;EACpC,GAAG,0BAA0B,eAAe,SAAS;EACrD,GAAG,0BAA0B,qBAAqB,WAAW,SAAS;EACvE;CACF;AAED,MAAaC,sBAGP,OAAO,aAAa;AAiBxB,QAhBuC;EAErC,cAAc,MAAM;EACpB,qBAAqB,MAAM;EAG3B,MAAM;EACN,UAAU;EACV,cAAc,MAAM,QAAQ,WAAW;EAEvC,gBAAgB,MAAM,QAAQ,WAAW;EAI1C;;AAKH,MAAaC,oBAAoE,yBAC/E,YACA,oBACA,oBACA,aACD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { t as toConnectedHTMLComponent } from "./component-factory-DeAN6cjC.js";
|
|
2
|
+
import { t as ButtonElement } from "./button-D1DWjsQu.js";
|
|
3
|
+
import { playButtonStateDefinition } from "@videojs/core/store";
|
|
4
|
+
import { setAttributes } from "@videojs/utils/dom";
|
|
5
|
+
|
|
6
|
+
//#region src/elements/play-button.ts
|
|
7
|
+
var PlayButton = class extends ButtonElement {
|
|
8
|
+
handleEvent(event) {
|
|
9
|
+
super.handleEvent(event);
|
|
10
|
+
const { type } = event;
|
|
11
|
+
const state = this._state;
|
|
12
|
+
if (state && type === "click") if (state.paused) state.requestPlay();
|
|
13
|
+
else state.requestPause();
|
|
14
|
+
}
|
|
15
|
+
get paused() {
|
|
16
|
+
return this._state?.paused ?? true;
|
|
17
|
+
}
|
|
18
|
+
_update(props, state, _mediaStore) {
|
|
19
|
+
this._state = state;
|
|
20
|
+
/** @TODO Follow up with React vs. W.C. data-* attributes discrepancies (CJP) */
|
|
21
|
+
setAttributes(this, props);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const getPlayButtonState = {
|
|
25
|
+
keys: playButtonStateDefinition.keys,
|
|
26
|
+
transform: (rawState, mediaStore) => ({
|
|
27
|
+
...playButtonStateDefinition.stateTransform(rawState),
|
|
28
|
+
...playButtonStateDefinition.createRequestMethods(mediaStore.dispatch)
|
|
29
|
+
})
|
|
30
|
+
};
|
|
31
|
+
const getPlayButtonProps = (state, _element) => {
|
|
32
|
+
return {
|
|
33
|
+
"data-paused": state.paused,
|
|
34
|
+
role: "button",
|
|
35
|
+
tabindex: "0",
|
|
36
|
+
"aria-label": state.paused ? "play" : "pause",
|
|
37
|
+
"data-tooltip": state.paused ? "Play" : "Pause"
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
const PlayButtonElement = toConnectedHTMLComponent(PlayButton, getPlayButtonState, getPlayButtonProps, "PlayButton");
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { PlayButtonElement as t };
|
|
44
|
+
//# sourceMappingURL=play-button-aVb0g10G.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"play-button-aVb0g10G.js","names":["getPlayButtonState: StateHook<{ paused: boolean }>","getPlayButtonProps: PropsHook<{ paused: boolean }>","PlayButtonElement: ConnectedComponentConstructor<PlayButtonState>"],"sources":["../src/elements/play-button.ts"],"sourcesContent":["import type { PlayButtonState } from '@videojs/core/store';\nimport type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { playButtonStateDefinition } from '@videojs/core/store';\n\nimport { setAttributes } from '@videojs/utils/dom';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\nimport { ButtonElement } from './button';\n\nexport class PlayButton extends ButtonElement {\n _state: { paused: boolean; requestPlay: () => void; requestPause: () => void } | undefined;\n\n handleEvent(event: Event): void {\n super.handleEvent(event);\n\n const { type } = event;\n const state = this._state;\n if (state && type === 'click') {\n if (state.paused) {\n state.requestPlay();\n } else {\n state.requestPause();\n }\n }\n }\n\n get paused(): boolean {\n return this._state?.paused ?? true;\n }\n\n _update(props: any, state: any, _mediaStore?: any): void {\n this._state = state;\n /** @TODO Follow up with React vs. W.C. data-* attributes discrepancies (CJP) */\n setAttributes(this, props);\n }\n}\n\nexport const getPlayButtonState: StateHook<{ paused: boolean }> = {\n keys: playButtonStateDefinition.keys,\n transform: (rawState, mediaStore) => ({\n ...playButtonStateDefinition.stateTransform(rawState),\n ...playButtonStateDefinition.createRequestMethods(mediaStore.dispatch),\n }),\n};\n\nexport const getPlayButtonProps: PropsHook<{ paused: boolean }> = (state, _element) => {\n const baseProps: Record<string, any> = {\n /** data attributes/props */\n 'data-paused': state.paused,\n /** @TODO Need another state provider in core for i18n (CJP) */\n /** aria attributes/props */\n role: 'button',\n tabindex: '0',\n 'aria-label': state.paused ? 'play' : 'pause',\n /** tooltip */\n 'data-tooltip': state.paused ? 'Play' : 'Pause',\n /** @TODO Figure out how we want to handle attr overrides (e.g. aria-label) (CJP) */\n /** external props spread last to allow for overriding */\n // ...props,\n };\n\n return baseProps;\n};\n\nexport const PlayButtonElement: ConnectedComponentConstructor<PlayButtonState> = toConnectedHTMLComponent(\n PlayButton,\n getPlayButtonState,\n getPlayButtonProps,\n 'PlayButton',\n);\n"],"mappings":";;;;;;AASA,IAAa,aAAb,cAAgC,cAAc;CAG5C,YAAY,OAAoB;AAC9B,QAAM,YAAY,MAAM;EAExB,MAAM,EAAE,SAAS;EACjB,MAAM,QAAQ,KAAK;AACnB,MAAI,SAAS,SAAS,QACpB,KAAI,MAAM,OACR,OAAM,aAAa;MAEnB,OAAM,cAAc;;CAK1B,IAAI,SAAkB;AACpB,SAAO,KAAK,QAAQ,UAAU;;CAGhC,QAAQ,OAAY,OAAY,aAAyB;AACvD,OAAK,SAAS;;AAEd,gBAAc,MAAM,MAAM;;;AAI9B,MAAaA,qBAAqD;CAChE,MAAM,0BAA0B;CAChC,YAAY,UAAU,gBAAgB;EACpC,GAAG,0BAA0B,eAAe,SAAS;EACrD,GAAG,0BAA0B,qBAAqB,WAAW,SAAS;EACvE;CACF;AAED,MAAaC,sBAAsD,OAAO,aAAa;AAgBrF,QAfuC;EAErC,eAAe,MAAM;EAGrB,MAAM;EACN,UAAU;EACV,cAAc,MAAM,SAAS,SAAS;EAEtC,gBAAgB,MAAM,SAAS,SAAS;EAIzC;;AAKH,MAAaC,oBAAoE,yBAC/E,YACA,oBACA,oBACA,aACD"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { contains, getDocument, getDocumentOrShadowRoot, safePolygon } from "@videojs/utils/dom";
|
|
2
|
+
import { autoUpdate, computePosition, flip, offset, shift } from "@floating-ui/dom";
|
|
3
|
+
|
|
4
|
+
//#region src/elements/popover.ts
|
|
5
|
+
var PopoverElement = class extends HTMLElement {
|
|
6
|
+
#open = false;
|
|
7
|
+
#transitionStatus = "initial";
|
|
8
|
+
#hoverTimeout = null;
|
|
9
|
+
#cleanup = null;
|
|
10
|
+
#abortController = null;
|
|
11
|
+
#floatingContext = null;
|
|
12
|
+
connectedCallback() {
|
|
13
|
+
this.#abortController ??= new AbortController();
|
|
14
|
+
const { signal } = this.#abortController;
|
|
15
|
+
const trigger = this.#triggerElement;
|
|
16
|
+
if (trigger) {
|
|
17
|
+
if (globalThis.matchMedia?.("(hover: hover)")?.matches) {
|
|
18
|
+
trigger.addEventListener("pointerenter", this, { signal });
|
|
19
|
+
trigger.addEventListener("pointerleave", this, { signal });
|
|
20
|
+
}
|
|
21
|
+
trigger.addEventListener("focusin", this, { signal });
|
|
22
|
+
trigger.addEventListener("focusout", this, { signal });
|
|
23
|
+
}
|
|
24
|
+
this.addEventListener("pointerenter", this, { signal });
|
|
25
|
+
this.addEventListener("focusout", this, { signal });
|
|
26
|
+
}
|
|
27
|
+
disconnectedCallback() {
|
|
28
|
+
this.#clearHoverTimeout();
|
|
29
|
+
this.#cleanup?.();
|
|
30
|
+
this.#abortController?.abort();
|
|
31
|
+
this.#abortController = null;
|
|
32
|
+
}
|
|
33
|
+
handleEvent(event) {
|
|
34
|
+
switch (event.type) {
|
|
35
|
+
case "pointerenter":
|
|
36
|
+
this.#handlePointerEnter(event);
|
|
37
|
+
break;
|
|
38
|
+
case "pointerleave":
|
|
39
|
+
this.#handlePointerLeave(event);
|
|
40
|
+
break;
|
|
41
|
+
case "pointermove":
|
|
42
|
+
this.#handlePointerMove(event);
|
|
43
|
+
break;
|
|
44
|
+
case "focusin":
|
|
45
|
+
this.#handleFocusIn(event);
|
|
46
|
+
break;
|
|
47
|
+
case "focusout":
|
|
48
|
+
this.#handleFocusOut(event);
|
|
49
|
+
break;
|
|
50
|
+
default: break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
static get observedAttributes() {
|
|
54
|
+
return [
|
|
55
|
+
"open-on-hover",
|
|
56
|
+
"delay",
|
|
57
|
+
"close-delay",
|
|
58
|
+
"side",
|
|
59
|
+
"side-offset"
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
get openOnHover() {
|
|
63
|
+
return this.hasAttribute("open-on-hover");
|
|
64
|
+
}
|
|
65
|
+
get delay() {
|
|
66
|
+
return Number.parseInt(this.getAttribute("delay") ?? "0", 10);
|
|
67
|
+
}
|
|
68
|
+
get closeDelay() {
|
|
69
|
+
return Number.parseInt(this.getAttribute("close-delay") ?? "0", 10);
|
|
70
|
+
}
|
|
71
|
+
get side() {
|
|
72
|
+
return this.getAttribute("side");
|
|
73
|
+
}
|
|
74
|
+
get sideOffset() {
|
|
75
|
+
return Number.parseInt(this.getAttribute("side-offset") ?? "0", 10);
|
|
76
|
+
}
|
|
77
|
+
get #triggerElement() {
|
|
78
|
+
return getDocumentOrShadowRoot(this)?.querySelector(`[popovertarget="${this.id}"]`);
|
|
79
|
+
}
|
|
80
|
+
#setOpen(open) {
|
|
81
|
+
if (this.#open === open) return;
|
|
82
|
+
this.#open = open;
|
|
83
|
+
if (open) {
|
|
84
|
+
this.#setupFloating();
|
|
85
|
+
this.#transitionStatus = "initial";
|
|
86
|
+
this.#updateVisibility();
|
|
87
|
+
this.showPopover();
|
|
88
|
+
requestAnimationFrame(() => {
|
|
89
|
+
this.#transitionStatus = "open";
|
|
90
|
+
this.#updateVisibility();
|
|
91
|
+
});
|
|
92
|
+
} else {
|
|
93
|
+
this.#transitionStatus = "close";
|
|
94
|
+
this.#updateVisibility();
|
|
95
|
+
const transitions = this.getAnimations().filter((anim) => anim instanceof CSSTransition);
|
|
96
|
+
if (transitions.length > 0) Promise.all(transitions.map((t) => t.finished)).then(() => this.hidePopover()).catch(() => this.hidePopover());
|
|
97
|
+
else this.hidePopover();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
#updateVisibility() {
|
|
101
|
+
this.toggleAttribute("data-starting-style", this.#transitionStatus === "initial");
|
|
102
|
+
this.toggleAttribute("data-open", this.#transitionStatus === "initial" || this.#transitionStatus === "open");
|
|
103
|
+
this.toggleAttribute("data-ending-style", this.#transitionStatus === "close" || this.#transitionStatus === "unmounted");
|
|
104
|
+
this.toggleAttribute("data-closed", this.#transitionStatus === "close" || this.#transitionStatus === "unmounted");
|
|
105
|
+
}
|
|
106
|
+
#setupFloating() {
|
|
107
|
+
const trigger = this.#triggerElement;
|
|
108
|
+
if (!trigger) return;
|
|
109
|
+
const placement = this.side ?? "top";
|
|
110
|
+
const sideOffset = this.sideOffset;
|
|
111
|
+
const updatePosition = () => {
|
|
112
|
+
computePosition(trigger, this, {
|
|
113
|
+
placement,
|
|
114
|
+
middleware: [
|
|
115
|
+
offset(sideOffset),
|
|
116
|
+
flip(),
|
|
117
|
+
shift()
|
|
118
|
+
],
|
|
119
|
+
strategy: "fixed"
|
|
120
|
+
}).then((data) => {
|
|
121
|
+
this.#floatingContext = {
|
|
122
|
+
...data,
|
|
123
|
+
elements: {
|
|
124
|
+
domReference: trigger,
|
|
125
|
+
floating: this
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
Object.assign(this.style, {
|
|
129
|
+
left: `${data.x}px`,
|
|
130
|
+
top: `${data.y}px`
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
updatePosition();
|
|
135
|
+
this.#cleanup = autoUpdate(trigger, this, updatePosition);
|
|
136
|
+
}
|
|
137
|
+
#clearHoverTimeout() {
|
|
138
|
+
if (this.#hoverTimeout) {
|
|
139
|
+
globalThis.clearTimeout(this.#hoverTimeout);
|
|
140
|
+
this.#hoverTimeout = null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
#handlePointerEnter(event) {
|
|
144
|
+
if (!this.openOnHover) return;
|
|
145
|
+
this.#clearHoverTimeout();
|
|
146
|
+
if (event.currentTarget === this) this.#addPointerMoveListener();
|
|
147
|
+
if (this.#open) return;
|
|
148
|
+
this.#hoverTimeout = globalThis.setTimeout(() => {
|
|
149
|
+
this.#setOpen(true);
|
|
150
|
+
}, this.delay);
|
|
151
|
+
}
|
|
152
|
+
#handlePointerLeave(_event) {
|
|
153
|
+
this.#addPointerMoveListener();
|
|
154
|
+
}
|
|
155
|
+
#addPointerMoveListener() {
|
|
156
|
+
if (!globalThis.matchMedia?.("(hover: hover)")?.matches) return;
|
|
157
|
+
const { signal } = this.#abortController;
|
|
158
|
+
getDocument(this).documentElement.addEventListener("pointermove", this, { signal });
|
|
159
|
+
}
|
|
160
|
+
#handlePointerMove(event) {
|
|
161
|
+
if (!this.openOnHover || !this.#floatingContext) return;
|
|
162
|
+
safePolygon({ blockPointerEvents: true })({
|
|
163
|
+
...this.#floatingContext,
|
|
164
|
+
x: event.clientX,
|
|
165
|
+
y: event.clientY,
|
|
166
|
+
onClose: () => {
|
|
167
|
+
getDocument(this).documentElement.removeEventListener("pointermove", this);
|
|
168
|
+
this.#clearHoverTimeout();
|
|
169
|
+
this.#hoverTimeout = globalThis.setTimeout(() => {
|
|
170
|
+
this.#setOpen(false);
|
|
171
|
+
}, this.closeDelay);
|
|
172
|
+
}
|
|
173
|
+
})(event);
|
|
174
|
+
}
|
|
175
|
+
#handleFocusIn(_event) {
|
|
176
|
+
this.#setOpen(true);
|
|
177
|
+
}
|
|
178
|
+
#handleFocusOut(event) {
|
|
179
|
+
const relatedTarget = event.relatedTarget;
|
|
180
|
+
if (relatedTarget && contains(this, relatedTarget)) return;
|
|
181
|
+
this.#setOpen(false);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
//#endregion
|
|
186
|
+
export { PopoverElement as t };
|
|
187
|
+
//# sourceMappingURL=popover-Dc0hyhwB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover-Dc0hyhwB.js","names":["#abortController","#triggerElement","#clearHoverTimeout","#cleanup","#handlePointerEnter","#handlePointerLeave","#handlePointerMove","#handleFocusIn","#handleFocusOut","#open","#setupFloating","#transitionStatus","#updateVisibility","#floatingContext","#hoverTimeout","#addPointerMoveListener","#setOpen"],"sources":["../src/elements/popover.ts"],"sourcesContent":["import type { ComputePositionReturn } from '@floating-ui/core';\nimport type { Placement } from '@floating-ui/dom';\nimport { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';\nimport { contains, getDocument, getDocumentOrShadowRoot, safePolygon } from '@videojs/utils/dom';\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n};\n\ntype FloatingContext = Prettify<ComputePositionReturn> & {\n elements: {\n domReference: HTMLElement;\n floating: HTMLElement;\n };\n};\n\nexport class PopoverElement extends HTMLElement {\n #open = false;\n #transitionStatus: 'initial' | 'open' | 'close' | 'unmounted' = 'initial';\n #hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n #cleanup: (() => void) | null = null;\n #abortController: AbortController | null = null;\n #floatingContext: FloatingContext | null = null;\n\n connectedCallback(): void {\n this.#abortController ??= new AbortController();\n const { signal } = this.#abortController;\n\n const trigger = this.#triggerElement as HTMLElement;\n if (trigger) {\n if (globalThis.matchMedia?.('(hover: hover)')?.matches) {\n trigger.addEventListener('pointerenter', this, { signal });\n trigger.addEventListener('pointerleave', this, { signal });\n }\n\n trigger.addEventListener('focusin', this, { signal });\n trigger.addEventListener('focusout', this, { signal });\n }\n\n this.addEventListener('pointerenter', this, { signal });\n this.addEventListener('focusout', this, { signal });\n }\n\n disconnectedCallback(): void {\n this.#clearHoverTimeout();\n this.#cleanup?.();\n\n this.#abortController?.abort();\n this.#abortController = null;\n }\n\n handleEvent(event: Event): void {\n switch (event.type) {\n case 'pointerenter':\n this.#handlePointerEnter(event as PointerEvent);\n break;\n case 'pointerleave':\n this.#handlePointerLeave(event as PointerEvent);\n break;\n case 'pointermove':\n this.#handlePointerMove(event as PointerEvent);\n break;\n case 'focusin':\n this.#handleFocusIn(event as FocusEvent);\n break;\n case 'focusout':\n this.#handleFocusOut(event as FocusEvent);\n break;\n default:\n break;\n }\n }\n\n static get observedAttributes(): string[] {\n return ['open-on-hover', 'delay', 'close-delay', 'side', 'side-offset'];\n }\n\n get openOnHover(): boolean {\n return this.hasAttribute('open-on-hover');\n }\n\n get delay(): number {\n return Number.parseInt(this.getAttribute('delay') ?? '0', 10);\n }\n\n get closeDelay(): number {\n return Number.parseInt(this.getAttribute('close-delay') ?? '0', 10);\n }\n\n get side(): Placement {\n return this.getAttribute('side') as Placement;\n }\n\n get sideOffset(): number {\n return Number.parseInt(this.getAttribute('side-offset') ?? '0', 10);\n }\n\n get #triggerElement(): HTMLElement | null {\n return getDocumentOrShadowRoot(this)?.querySelector(`[popovertarget=\"${this.id}\"]`) as HTMLElement | null;\n }\n\n #setOpen(open: boolean): void {\n if (this.#open === open) return;\n\n this.#open = open;\n\n if (open) {\n this.#setupFloating();\n\n this.#transitionStatus = 'initial';\n this.#updateVisibility();\n\n this.showPopover();\n\n requestAnimationFrame(() => {\n this.#transitionStatus = 'open';\n this.#updateVisibility();\n });\n } else {\n this.#transitionStatus = 'close';\n this.#updateVisibility();\n\n const transitions = this.getAnimations().filter(anim => anim instanceof CSSTransition);\n if (transitions.length > 0) {\n Promise.all(transitions.map(t => t.finished))\n .then(() => this.hidePopover())\n .catch(() => this.hidePopover());\n } else {\n this.hidePopover();\n }\n }\n }\n\n #updateVisibility(): void {\n this.toggleAttribute('data-starting-style', this.#transitionStatus === 'initial');\n this.toggleAttribute('data-open', this.#transitionStatus === 'initial' || this.#transitionStatus === 'open');\n this.toggleAttribute('data-ending-style', this.#transitionStatus === 'close' || this.#transitionStatus === 'unmounted');\n this.toggleAttribute('data-closed', this.#transitionStatus === 'close' || this.#transitionStatus === 'unmounted');\n }\n\n #setupFloating(): void {\n const trigger = this.#triggerElement as HTMLElement;\n if (!trigger) return;\n\n const placement = this.side ?? 'top';\n const sideOffset = this.sideOffset;\n\n const updatePosition = () => {\n computePosition(trigger, this, {\n placement,\n middleware: [offset(sideOffset), flip(), shift()],\n strategy: 'fixed',\n }).then((data: ComputePositionReturn) => {\n this.#floatingContext = {\n ...data,\n elements: {\n domReference: trigger,\n floating: this,\n },\n };\n\n Object.assign(this.style, {\n left: `${data.x}px`,\n top: `${data.y}px`,\n });\n });\n };\n\n updatePosition();\n this.#cleanup = autoUpdate(trigger, this, updatePosition);\n }\n\n #clearHoverTimeout(): void {\n if (this.#hoverTimeout) {\n globalThis.clearTimeout(this.#hoverTimeout);\n this.#hoverTimeout = null;\n }\n }\n\n #handlePointerEnter(event: PointerEvent): void {\n if (!this.openOnHover) return;\n\n this.#clearHoverTimeout();\n\n if (event.currentTarget === this) {\n this.#addPointerMoveListener();\n }\n\n if (this.#open) {\n return;\n }\n\n this.#hoverTimeout = globalThis.setTimeout(() => {\n this.#setOpen(true);\n }, this.delay);\n }\n\n #handlePointerLeave(_event: PointerEvent): void {\n this.#addPointerMoveListener();\n }\n\n #addPointerMoveListener(): void {\n if (!globalThis.matchMedia?.('(hover: hover)')?.matches) return;\n\n const { signal } = this.#abortController as AbortController;\n getDocument(this).documentElement.addEventListener('pointermove', this, { signal });\n }\n\n #handlePointerMove(event: PointerEvent): void {\n if (!this.openOnHover || !this.#floatingContext) return;\n\n const close = safePolygon({ blockPointerEvents: true })({\n ...this.#floatingContext,\n x: event.clientX,\n y: event.clientY,\n onClose: () => {\n getDocument(this).documentElement.removeEventListener('pointermove', this);\n\n this.#clearHoverTimeout();\n this.#hoverTimeout = globalThis.setTimeout(() => {\n this.#setOpen(false);\n }, this.closeDelay);\n },\n });\n close(event);\n }\n\n #handleFocusIn(_event: FocusEvent): void {\n this.#setOpen(true);\n }\n\n #handleFocusOut(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (relatedTarget && contains(this, relatedTarget)) return;\n\n this.#setOpen(false);\n };\n}\n"],"mappings":";;;;AAgBA,IAAa,iBAAb,cAAoC,YAAY;CAC9C,QAAQ;CACR,oBAAgE;CAChE,gBAAsD;CACtD,WAAgC;CAChC,mBAA2C;CAC3C,mBAA2C;CAE3C,oBAA0B;AACxB,QAAKA,oBAAqB,IAAI,iBAAiB;EAC/C,MAAM,EAAE,WAAW,MAAKA;EAExB,MAAM,UAAU,MAAKC;AACrB,MAAI,SAAS;AACX,OAAI,WAAW,aAAa,iBAAiB,EAAE,SAAS;AACtD,YAAQ,iBAAiB,gBAAgB,MAAM,EAAE,QAAQ,CAAC;AAC1D,YAAQ,iBAAiB,gBAAgB,MAAM,EAAE,QAAQ,CAAC;;AAG5D,WAAQ,iBAAiB,WAAW,MAAM,EAAE,QAAQ,CAAC;AACrD,WAAQ,iBAAiB,YAAY,MAAM,EAAE,QAAQ,CAAC;;AAGxD,OAAK,iBAAiB,gBAAgB,MAAM,EAAE,QAAQ,CAAC;AACvD,OAAK,iBAAiB,YAAY,MAAM,EAAE,QAAQ,CAAC;;CAGrD,uBAA6B;AAC3B,QAAKC,mBAAoB;AACzB,QAAKC,WAAY;AAEjB,QAAKH,iBAAkB,OAAO;AAC9B,QAAKA,kBAAmB;;CAG1B,YAAY,OAAoB;AAC9B,UAAQ,MAAM,MAAd;GACE,KAAK;AACH,UAAKI,mBAAoB,MAAsB;AAC/C;GACF,KAAK;AACH,UAAKC,mBAAoB,MAAsB;AAC/C;GACF,KAAK;AACH,UAAKC,kBAAmB,MAAsB;AAC9C;GACF,KAAK;AACH,UAAKC,cAAe,MAAoB;AACxC;GACF,KAAK;AACH,UAAKC,eAAgB,MAAoB;AACzC;GACF,QACE;;;CAIN,WAAW,qBAA+B;AACxC,SAAO;GAAC;GAAiB;GAAS;GAAe;GAAQ;GAAc;;CAGzE,IAAI,cAAuB;AACzB,SAAO,KAAK,aAAa,gBAAgB;;CAG3C,IAAI,QAAgB;AAClB,SAAO,OAAO,SAAS,KAAK,aAAa,QAAQ,IAAI,KAAK,GAAG;;CAG/D,IAAI,aAAqB;AACvB,SAAO,OAAO,SAAS,KAAK,aAAa,cAAc,IAAI,KAAK,GAAG;;CAGrE,IAAI,OAAkB;AACpB,SAAO,KAAK,aAAa,OAAO;;CAGlC,IAAI,aAAqB;AACvB,SAAO,OAAO,SAAS,KAAK,aAAa,cAAc,IAAI,KAAK,GAAG;;CAGrE,KAAIP,iBAAsC;AACxC,SAAO,wBAAwB,KAAK,EAAE,cAAc,mBAAmB,KAAK,GAAG,IAAI;;CAGrF,SAAS,MAAqB;AAC5B,MAAI,MAAKQ,SAAU,KAAM;AAEzB,QAAKA,OAAQ;AAEb,MAAI,MAAM;AACR,SAAKC,eAAgB;AAErB,SAAKC,mBAAoB;AACzB,SAAKC,kBAAmB;AAExB,QAAK,aAAa;AAElB,+BAA4B;AAC1B,UAAKD,mBAAoB;AACzB,UAAKC,kBAAmB;KACxB;SACG;AACL,SAAKD,mBAAoB;AACzB,SAAKC,kBAAmB;GAExB,MAAM,cAAc,KAAK,eAAe,CAAC,QAAO,SAAQ,gBAAgB,cAAc;AACtF,OAAI,YAAY,SAAS,EACvB,SAAQ,IAAI,YAAY,KAAI,MAAK,EAAE,SAAS,CAAC,CAC1C,WAAW,KAAK,aAAa,CAAC,CAC9B,YAAY,KAAK,aAAa,CAAC;OAElC,MAAK,aAAa;;;CAKxB,oBAA0B;AACxB,OAAK,gBAAgB,uBAAuB,MAAKD,qBAAsB,UAAU;AACjF,OAAK,gBAAgB,aAAa,MAAKA,qBAAsB,aAAa,MAAKA,qBAAsB,OAAO;AAC5G,OAAK,gBAAgB,qBAAqB,MAAKA,qBAAsB,WAAW,MAAKA,qBAAsB,YAAY;AACvH,OAAK,gBAAgB,eAAe,MAAKA,qBAAsB,WAAW,MAAKA,qBAAsB,YAAY;;CAGnH,iBAAuB;EACrB,MAAM,UAAU,MAAKV;AACrB,MAAI,CAAC,QAAS;EAEd,MAAM,YAAY,KAAK,QAAQ;EAC/B,MAAM,aAAa,KAAK;EAExB,MAAM,uBAAuB;AAC3B,mBAAgB,SAAS,MAAM;IAC7B;IACA,YAAY;KAAC,OAAO,WAAW;KAAE,MAAM;KAAE,OAAO;KAAC;IACjD,UAAU;IACX,CAAC,CAAC,MAAM,SAAgC;AACvC,UAAKY,kBAAmB;KACtB,GAAG;KACH,UAAU;MACR,cAAc;MACd,UAAU;MACX;KACF;AAED,WAAO,OAAO,KAAK,OAAO;KACxB,MAAM,GAAG,KAAK,EAAE;KAChB,KAAK,GAAG,KAAK,EAAE;KAChB,CAAC;KACF;;AAGJ,kBAAgB;AAChB,QAAKV,UAAW,WAAW,SAAS,MAAM,eAAe;;CAG3D,qBAA2B;AACzB,MAAI,MAAKW,cAAe;AACtB,cAAW,aAAa,MAAKA,aAAc;AAC3C,SAAKA,eAAgB;;;CAIzB,oBAAoB,OAA2B;AAC7C,MAAI,CAAC,KAAK,YAAa;AAEvB,QAAKZ,mBAAoB;AAEzB,MAAI,MAAM,kBAAkB,KAC1B,OAAKa,wBAAyB;AAGhC,MAAI,MAAKN,KACP;AAGF,QAAKK,eAAgB,WAAW,iBAAiB;AAC/C,SAAKE,QAAS,KAAK;KAClB,KAAK,MAAM;;CAGhB,oBAAoB,QAA4B;AAC9C,QAAKD,wBAAyB;;CAGhC,0BAAgC;AAC9B,MAAI,CAAC,WAAW,aAAa,iBAAiB,EAAE,QAAS;EAEzD,MAAM,EAAE,WAAW,MAAKf;AACxB,cAAY,KAAK,CAAC,gBAAgB,iBAAiB,eAAe,MAAM,EAAE,QAAQ,CAAC;;CAGrF,mBAAmB,OAA2B;AAC5C,MAAI,CAAC,KAAK,eAAe,CAAC,MAAKa,gBAAkB;AAejD,EAbc,YAAY,EAAE,oBAAoB,MAAM,CAAC,CAAC;GACtD,GAAG,MAAKA;GACR,GAAG,MAAM;GACT,GAAG,MAAM;GACT,eAAe;AACb,gBAAY,KAAK,CAAC,gBAAgB,oBAAoB,eAAe,KAAK;AAE1E,UAAKX,mBAAoB;AACzB,UAAKY,eAAgB,WAAW,iBAAiB;AAC/C,WAAKE,QAAS,MAAM;OACnB,KAAK,WAAW;;GAEtB,CAAC,CACI,MAAM;;CAGd,eAAe,QAA0B;AACvC,QAAKA,QAAS,KAAK;;CAGrB,gBAAgB,OAAyB;EACvC,MAAM,gBAAgB,MAAM;AAC5B,MAAI,iBAAiB,SAAS,MAAM,cAAc,CAAE;AAEpD,QAAKA,QAAS,MAAM"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { t as toConnectedHTMLComponent } from "./component-factory-DeAN6cjC.js";
|
|
2
|
+
import { previewTimeDisplayStateDefinition } from "@videojs/core/store";
|
|
3
|
+
import { formatDisplayTime } from "@videojs/utils";
|
|
4
|
+
|
|
5
|
+
//#region src/elements/preview-time-display.ts
|
|
6
|
+
var PreviewTimeDisplay = class extends HTMLElement {
|
|
7
|
+
static {
|
|
8
|
+
this.shadowRootOptions = { mode: "open" };
|
|
9
|
+
}
|
|
10
|
+
static {
|
|
11
|
+
this.observedAttributes = ["show-remaining"];
|
|
12
|
+
}
|
|
13
|
+
constructor() {
|
|
14
|
+
super();
|
|
15
|
+
if (!this.shadowRoot) this.attachShadow(this.constructor.shadowRootOptions);
|
|
16
|
+
}
|
|
17
|
+
get previewTime() {
|
|
18
|
+
return this._state?.previewTime ?? 0;
|
|
19
|
+
}
|
|
20
|
+
get showRemaining() {
|
|
21
|
+
return this.hasAttribute("show-remaining");
|
|
22
|
+
}
|
|
23
|
+
attributeChangedCallback(name, _oldValue, _newValue) {
|
|
24
|
+
if (name === "show-remaining" && this._state) this._update({}, this._state);
|
|
25
|
+
}
|
|
26
|
+
_update(_props, state) {
|
|
27
|
+
this._state = state;
|
|
28
|
+
/** @TODO Should this live here or elsewhere? (CJP) */
|
|
29
|
+
const timeLabel = formatDisplayTime(state.previewTime);
|
|
30
|
+
if (this.shadowRoot) this.shadowRoot.textContent = timeLabel;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const usePreviewTimeDisplayState = {
|
|
34
|
+
keys: [...previewTimeDisplayStateDefinition.keys],
|
|
35
|
+
transform: (rawState, _mediaStore) => ({ ...previewTimeDisplayStateDefinition.stateTransform(rawState) })
|
|
36
|
+
};
|
|
37
|
+
const getPreviewTimeDisplayProps = (_state, _element) => {
|
|
38
|
+
return {};
|
|
39
|
+
};
|
|
40
|
+
const PreviewTimeDisplayElement = toConnectedHTMLComponent(PreviewTimeDisplay, usePreviewTimeDisplayState, getPreviewTimeDisplayProps, "PreviewTimeDisplay");
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { PreviewTimeDisplayElement as t };
|
|
44
|
+
//# sourceMappingURL=preview-time-display-Dax0FQ2X.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-time-display-Dax0FQ2X.js","names":["usePreviewTimeDisplayState: StateHook<{\n previewTime: number | undefined;\n}>","getPreviewTimeDisplayProps: PropsHook<{\n previewTime: number | undefined;\n}>","PreviewTimeDisplayElement: ConnectedComponentConstructor<PreviewTimeDisplayState>"],"sources":["../src/elements/preview-time-display.ts"],"sourcesContent":["import type { PreviewTimeDisplayState } from '@videojs/core/store';\nimport type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { previewTimeDisplayStateDefinition } from '@videojs/core/store';\n\nimport { formatDisplayTime } from '@videojs/utils';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\n\nexport class PreviewTimeDisplay extends HTMLElement {\n static shadowRootOptions = {\n mode: 'open' as ShadowRootMode,\n };\n\n static observedAttributes: string[] = ['show-remaining'];\n\n _state:\n | {\n previewTime: number | undefined;\n }\n | undefined;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n this.attachShadow((this.constructor as typeof PreviewTimeDisplay).shadowRootOptions);\n }\n }\n\n get previewTime(): number {\n return this._state?.previewTime ?? 0;\n }\n\n get showRemaining(): boolean {\n return this.hasAttribute('show-remaining');\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, _newValue: string | null): void {\n if (name === 'show-remaining' && this._state) {\n // Re-render with current state when show-remaining attribute changes\n this._update({}, this._state);\n }\n }\n\n _update(_props: any, state: any): void {\n this._state = state;\n\n /** @TODO Should this live here or elsewhere? (CJP) */\n const timeLabel = formatDisplayTime(state.previewTime);\n\n if (this.shadowRoot) {\n this.shadowRoot.textContent = timeLabel;\n }\n }\n}\n\nexport const usePreviewTimeDisplayState: StateHook<{\n previewTime: number | undefined;\n}> = {\n keys: [...previewTimeDisplayStateDefinition.keys],\n transform: (rawState, _mediaStore) => ({\n ...previewTimeDisplayStateDefinition.stateTransform(rawState),\n // Preview time display is read-only, so no request methods needed\n }),\n};\n\nexport const getPreviewTimeDisplayProps: PropsHook<{\n previewTime: number | undefined;\n}> = (_state, _element) => {\n const baseProps: Record<string, any> = {};\n return baseProps;\n};\n\nexport const PreviewTimeDisplayElement: ConnectedComponentConstructor<PreviewTimeDisplayState> = toConnectedHTMLComponent(\n PreviewTimeDisplay,\n usePreviewTimeDisplayState,\n getPreviewTimeDisplayProps,\n 'PreviewTimeDisplay',\n);\n"],"mappings":";;;;;AAQA,IAAa,qBAAb,cAAwC,YAAY;;2BACvB,EACzB,MAAM,QACP;;;4BAEqC,CAAC,iBAAiB;;CAQxD,cAAc;AACZ,SAAO;AAEP,MAAI,CAAC,KAAK,WACR,MAAK,aAAc,KAAK,YAA0C,kBAAkB;;CAIxF,IAAI,cAAsB;AACxB,SAAO,KAAK,QAAQ,eAAe;;CAGrC,IAAI,gBAAyB;AAC3B,SAAO,KAAK,aAAa,iBAAiB;;CAG5C,yBAAyB,MAAc,WAA0B,WAAgC;AAC/F,MAAI,SAAS,oBAAoB,KAAK,OAEpC,MAAK,QAAQ,EAAE,EAAE,KAAK,OAAO;;CAIjC,QAAQ,QAAa,OAAkB;AACrC,OAAK,SAAS;;EAGd,MAAM,YAAY,kBAAkB,MAAM,YAAY;AAEtD,MAAI,KAAK,WACP,MAAK,WAAW,cAAc;;;AAKpC,MAAaA,6BAER;CACH,MAAM,CAAC,GAAG,kCAAkC,KAAK;CACjD,YAAY,UAAU,iBAAiB,EACrC,GAAG,kCAAkC,eAAe,SAAS,EAE9D;CACF;AAED,MAAaC,8BAEP,QAAQ,aAAa;AAEzB,QADuC,EAAE;;AAI3C,MAAaC,4BAAoF,yBAC/F,oBACA,4BACA,4BACA,qBACD"}
|