@videojs/html 0.1.0-preview.2 → 0.1.0-preview.3
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/{icons-YlVTDFdV.js → icons-eJws_3Te.js} +55 -7
- package/dist/icons-eJws_3Te.js.map +1 -0
- package/dist/icons.d.ts +2 -2
- package/dist/icons.js +2 -2
- package/dist/{index-BtSCzZKn.d.ts → index-AcYRyuAY.d.ts} +18 -4
- package/dist/index-AcYRyuAY.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/media-preview-time-display-C7jpAct6.js +44 -0
- package/dist/media-preview-time-display-C7jpAct6.js.map +1 -0
- package/dist/{media-skin-CbuyuCb-.d.ts → media-skin-D44BfH6y.d.ts} +3 -29
- package/dist/media-skin-D44BfH6y.d.ts.map +1 -0
- package/dist/{media-skin-BlXPC9wG.js → media-skin-DR8zj-LV.js} +124 -258
- package/dist/media-skin-DR8zj-LV.js.map +1 -0
- package/dist/skins/frosted.d.ts +12 -0
- package/dist/skins/frosted.d.ts.map +1 -0
- package/dist/skins/frosted.js +118 -0
- package/dist/skins/frosted.js.map +1 -0
- package/dist/skins/minimal.d.ts +12 -0
- package/dist/skins/minimal.d.ts.map +1 -0
- package/dist/skins/minimal.js +123 -0
- package/dist/skins/minimal.js.map +1 -0
- package/package.json +12 -7
- package/dist/icons-YlVTDFdV.js.map +0 -1
- package/dist/index-BtSCzZKn.d.ts.map +0 -1
- package/dist/media-skin-BlXPC9wG.js.map +0 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"minimal.js","names":["styles"],"sources":["../../src/skins/minimal/styles.css","../../src/skins/minimal/index.ts"],"sourcesContent":["\"media-container * {\\n box-sizing: border-box;\\n}\\n\\nmedia-container {\\n position: relative;\\n isolation: isolate;\\n container: root / inline-size;\\n overflow: clip;\\n font-size: 0.8125rem;\\n line-height: 1.5;\\n border-radius: inherit;\\n background: oklab(0 0 0);\\n}\\nmedia-container::after {\\n content: '';\\n position: absolute;\\n pointer-events: none;\\n border-radius: inherit;\\n z-index: 10;\\n inset: 0;\\n box-shadow: inset 0 0 0 1px oklab(0 0 0 / 0.2);\\n}\\n@media (prefers-color-scheme: dark) {\\n media-container::after {\\n box-shadow: inset 0 0 0 1px oklab(1 0 0 / 0.2);\\n }\\n}\\n\\n/* Fullscreen */\\nmedia-container:fullscreen {\\n border-radius: 0;\\n}\\n\\nmedia-container > ::slotted([slot='media']) {\\n display: block;\\n width: 100%;\\n height: 100%;\\n}\\n\\n/* Media Container UI Overlay Styling */\\nmedia-container > .overlay {\\n position: absolute;\\n inset: 0;\\n display: flex;\\n flex-flow: column nowrap;\\n align-items: start;\\n pointer-events: none;\\n border-radius: inherit;\\n background-image: linear-gradient(to top, oklab(0 0 0 / 0.7), oklab(0 0 0 / 0.5) 7.5rem, rgba(0, 0, 0, 0));\\n transform: translateY(100%);\\n transition-property: transform, opacity;\\n transition-duration: 150ms;\\n transition-timing-function: ease-out;\\n transition-delay: 500ms;\\n opacity: 0;\\n}\\nmedia-container:hover > .overlay,\\nmedia-container:has([data-paused]) > .overlay,\\nmedia-container:has([aria-expanded='true']) > .overlay {\\n opacity: 1;\\n transform: translateY(0);\\n transition-duration: 100ms;\\n transition-delay: 0ms;\\n}\\n\\n/* Media Control Bar UI/Styles */\\n.control-bar {\\n position: absolute;\\n bottom: 0;\\n inset-inline: 0;\\n padding: 2.5rem 0.75rem 0.75rem 0.75rem;\\n display: flex;\\n align-items: center;\\n gap: 0.875rem;\\n will-change: transform, filter, opacity;\\n transform: translateY(100%);\\n opacity: 0;\\n filter: blur(8px);\\n transition-property: transform, filter, opacity;\\n transition-delay: 500ms;\\n transition-duration: 300ms;\\n transition-timing-function: ease-out;\\n color: oklab(1 0 0);\\n}\\nmedia-container:hover > .control-bar,\\nmedia-container:has([data-paused]) > .control-bar,\\nmedia-container:has([aria-expanded='true']) > .control-bar {\\n opacity: 1;\\n transform: translateY(0);\\n filter: blur(0px);\\n transition-delay: 0ms;\\n transition-duration: 100ms;\\n}\\n\\n/* Time Display Styling */\\n.time-display-group {\\n display: flex;\\n align-items: center;\\n gap: 0.25rem;\\n}\\n.duration-display {\\n display: contents;\\n color: oklab(1 0 0 / 0.5);\\n}\\nmedia-current-time-display,\\nmedia-duration-display {\\n text-shadow: 0 1px 0 oklab(0 0 0 / 0.2);\\n font-variant-numeric: tabular-nums;\\n}\\n\\n.button-group {\\n display: flex;\\n align-items: center;\\n gap: 0.375rem;\\n}\\n\\n/* Generic Media Button Styling */\\n.button {\\n display: grid;\\n flex-shrink: 0;\\n padding: 0.625rem;\\n cursor: pointer;\\n background: transparent;\\n border: none;\\n border-radius: 0.375rem;\\n color: oklab(1 0 0);\\n user-select: none;\\n outline: 2px solid transparent;\\n outline-offset: -2px;\\n transition-property: background-color, color, outline-offset;\\n transition-duration: 150ms;\\n transition-timing-function: ease-out;\\n}\\n.button:hover,\\n.button:focus-visible,\\n.button[aria-expanded='true'] {\\n color: oklab(1 0 0 / 0.8);\\n text-decoration: none;\\n}\\n.button:focus-visible {\\n outline-color: oklab(1 0 0);\\n outline-offset: 2px;\\n}\\n.button[disabled] {\\n cursor: not-allowed;\\n opacity: 0.5;\\n filter: grayscale(1);\\n}\\n\\n.button .icon {\\n grid-area: 1 / 1;\\n width: 18px;\\n height: 18px;\\n filter: drop-shadow(0 1px 0 oklab(0 0 0 / 0.4));\\n}\\n\\n/* Media Play Button UI/Styles */\\nmedia-play-button .icon {\\n opacity: 0;\\n transition: opacity 150ms linear;\\n}\\n\\nmedia-play-button:not([data-paused]) .pause-icon,\\nmedia-play-button[data-paused] .play-icon {\\n opacity: 1;\\n}\\n\\n/* Media Fullscreen Button UI/Styles */\\nmedia-fullscreen-button .icon {\\n display: none;\\n}\\nmedia-fullscreen-button:not([data-fullscreen]) .fullscreen-enter-icon,\\nmedia-fullscreen-button[data-fullscreen] .fullscreen-exit-icon {\\n display: inline;\\n}\\n\\n/* One way to define the \\\"default visible\\\" icon (CJP) */\\nmedia-mute-button .icon {\\n display: none;\\n}\\nmedia-mute-button:not([data-volume-level]) .volume-low-icon,\\nmedia-mute-button[data-volume-level='high'] .volume-high-icon,\\nmedia-mute-button[data-volume-level='low'] .volume-low-icon,\\nmedia-mute-button[data-volume-level='medium'] .volume-low-icon,\\nmedia-mute-button[data-volume-level='off'] .volume-off-icon {\\n display: inline;\\n}\\n\\n/* TimeSlider Component Styles */\\n.slider-root {\\n flex: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n border-radius: calc(infinity * 1px);\\n outline: none;\\n}\\n\\n/* Horizontal orientation styles */\\n.slider-root[data-orientation='horizontal'] {\\n min-width: 5rem;\\n width: 100%;\\n height: 1.25rem;\\n}\\n\\n/* Vertical orientation styles */\\n.slider-root[data-orientation='vertical'] {\\n height: 4.5rem;\\n width: 1.25rem;\\n}\\n\\n.slider-track {\\n position: relative;\\n isolation: isolate;\\n background-color: oklab(1 0 0 / 0.2);\\n border-radius: inherit;\\n overflow: hidden;\\n user-select: none;\\n outline: 2px solid transparent;\\n outline-offset: -2px;\\n transition: outline-offset 150ms ease-out;\\n box-shadow: 0 0 0 1px oklab(0 0 0 / 0.05);\\n}\\n\\n/* Horizontal track styles */\\n.slider-track[data-orientation='horizontal'] {\\n width: 100%;\\n height: 0.1875rem;\\n}\\n\\n/* Vertical track styles */\\n.slider-track[data-orientation='vertical'] {\\n width: 0.1875rem;\\n height: 100%;\\n}\\n\\n.slider-root:focus-visible .slider-track {\\n outline-color: oklab(1 0 0);\\n outline-offset: 6px;\\n}\\n\\n.slider-thumb {\\n width: 0.75rem;\\n height: 0.75rem;\\n background-color: oklab(1 0 0);\\n border-radius: calc(infinity * 1px);\\n user-select: none;\\n z-index: 10;\\n box-shadow:\\n 0 0 0 1px oklab(0 0 0 / 0.1),\\n 0 1px 3px 0 oklab(0 0 0 / 0.15),\\n 0 1px 2px -1px oklab(0 0 0 / 0.15);\\n opacity: 0;\\n scale: 0.7;\\n transform-origin: center;\\n transition-property: opacity, scale;\\n transition-duration: 150ms;\\n transition-timing-function: ease-out;\\n}\\n.slider-root:hover .slider-thumb,\\n.slider-root:focus-within .slider-thumb {\\n opacity: 1;\\n scale: 1;\\n}\\n.slider-track[data-orientation='horizontal'] .slider-thumb {\\n cursor: ew-resize;\\n}\\n.slider-track[data-orientation='vertical'] .slider-thumb {\\n cursor: ns-resize;\\n}\\n\\n.slider-pointer {\\n display: none;\\n}\\n\\n.slider-progress {\\n background-color: oklab(1 0 0);\\n border-radius: inherit;\\n}\\n\\npreview-time-display {\\n font-variant-numeric: tabular-nums;\\n}\\n\\n.popup-animation {\\n transition-property: transform, scale, opacity, filter;\\n transition-duration: 200ms;\\n transform: scale(1);\\n transform-origin: bottom;\\n opacity: 1;\\n filter: blur(0px);\\n}\\n.popup-animation[data-starting-style],\\n.popup-animation[data-ending-style] {\\n transform: scale(0);\\n opacity: 0;\\n filter: blur(8px);\\n}\\n.popup-animation[data-instant] {\\n transition-duration: 0ms;\\n}\\n\\nmedia-popover {\\n margin: 0;\\n border: none;\\n box-shadow: none;\\n background: transparent;\\n padding: 0.75rem 0.25rem;\\n border-radius: calc(infinity * 1px);\\n}\\n\\n/* Tooltip Component Styles */\\nmedia-tooltip-popup {\\n color: oklab(1 0 0);\\n padding: 0.25rem 0.5rem;\\n border-radius: 0.25rem;\\n font-size: 0.75rem;\\n background-color: oklab(1 0 0 / 0.1);\\n backdrop-filter: blur(64px) brightness(0.9) saturate(1.5);\\n box-shadow:\\n 0 4px 6px -1px oklab(0 0 0 / 0.1),\\n 0 2px 4px -2px oklab(0 0 0 / 0.1);\\n}\\n@media (prefers-reduced-transparency: reduce) {\\n media-tooltip-popup {\\n background-color: oklab(0 0 0 / 0.7);\\n }\\n}\\n@media (prefers-contrast: more) {\\n media-tooltip-popup {\\n background-color: oklab(0 0 0 / 0.9);\\n }\\n}\\n\\n.tooltip {\\n display: none;\\n white-space: nowrap;\\n}\\n\\nmedia-tooltip-popup[data-paused] .play-tooltip,\\nmedia-tooltip-popup:not([data-paused]) .pause-tooltip {\\n display: block;\\n}\\n\\nmedia-tooltip-popup[data-fullscreen] .fullscreen-exit-tooltip,\\nmedia-tooltip-popup:not([data-fullscreen]) .fullscreen-enter-tooltip {\\n display: block;\\n}\\n\"","import { MediaSkin } from '@/media/media-skin';\nimport styles from './styles.css';\nimport '@/media/media-container';\nimport '@/media/media-provider';\nimport '@/components/media-play-button';\nimport '@/components/media-mute-button';\nimport '@/components/media-volume-slider';\nimport '@/components/media-time-slider';\nimport '@/components/media-fullscreen-button';\nimport '@/components/media-duration-display';\nimport '@/components/media-current-time-display';\nimport '@/components/media-preview-time-display';\nimport '@/components/media-popover';\nimport '@/components/media-tooltip';\n\nimport '@/icons';\n\nexport function getTemplateHTML() {\n return /* html */`\n ${MediaSkin.getTemplateHTML()}\n <style>${styles}</style>\n\n <media-container>\n <slot name=\"media\" slot=\"media\"></slot>\n\n <div class=\"overlay\"></div>\n\n <div class=\"control-bar\">\n <!-- NOTE: We can decide if we further want to provide a further, \"themed\" media-play-button that comes with baked in default styles and icons. (CJP) -->\n <media-tooltip-root delay=\"500\" close-delay=\"0\">\n <media-tooltip-trigger>\n <media-play-button class=\"button\">\n <media-play-icon class=\"icon play-icon\"></media-play-icon>\n <media-pause-icon class=\"icon pause-icon\"></media-pause-icon>\n </media-play-button>\n </media-tooltip-trigger>\n <media-tooltip-portal>\n <media-tooltip-positioner side=\"top\" side-offset=\"6\" collision-padding=\"12\">\n <media-tooltip-popup class=\"popup-animation\">\n <span class=\"tooltip play-tooltip\">Play</span>\n <span class=\"tooltip pause-tooltip\">Pause</span>\n </media-tooltip-popup>\n </media-tooltip-positioner>\n </media-tooltip-portal>\n </media-tooltip-root>\n\n <div class=\"time-display-group\">\n <!-- Use the show-remaining attribute to show count down/remaining time -->\n <media-current-time-display></media-current-time-display>\n\n <span class=\"duration-display\">\n /\n <media-duration-display></media-duration-display>\n </span>\n </div>\n\n <media-tooltip-root track-cursor-axis=\"x\">\n <media-tooltip-trigger>\n <media-time-slider-root class=\"slider-root\">\n <media-time-slider-track class=\"slider-track\">\n <media-time-slider-progress class=\"slider-progress\"></media-time-slider-progress>\n <media-time-slider-pointer class=\"slider-pointer\"></media-time-slider-pointer>\n </media-time-slider-track>\n <media-time-slider-thumb class=\"slider-thumb\"></media-time-slider-thumb>\n </media-time-slider-root>\n </media-tooltip-trigger>\n <media-tooltip-portal>\n <media-tooltip-positioner side=\"top\" side-offset=\"12\" collision-padding=\"12\">\n <media-tooltip-popup class=\"popup-animation\">\n <preview-time-display></preview-time-display>\n </media-tooltip-popup>\n </media-tooltip-positioner>\n </media-tooltip-portal>\n </media-tooltip-root>\n\n <div class=\"button-group\">\n <media-mute-button popovertarget=\"volume-slider-popover\" class=\"button\">\n <media-volume-high-icon class=\"icon volume-high-icon\"></media-volume-high-icon>\n <media-volume-low-icon class=\"icon volume-low-icon\"></media-volume-low-icon>\n <media-volume-off-icon class=\"icon volume-off-icon\"></media-volume-off-icon>\n </media-mute-button>\n <media-popover \n id=\"volume-slider-popover\" \n class=\"popup-animation\"\n popover\n open-on-hover\n delay=\"200\"\n close-delay=\"100\"\n side=\"top\"\n side-offset=\"2\"\n collision-padding=\"12\"\n >\n <media-volume-slider-root class=\"slider-root\" orientation=\"vertical\">\n <media-volume-slider-track class=\"slider-track\">\n <media-volume-slider-progress class=\"slider-progress\"></media-volume-slider-progress>\n </media-volume-slider-track>\n <media-volume-slider-thumb class=\"slider-thumb\"></media-volume-slider-thumb>\n </media-volume-slider-root>\n </media-popover>\n\n <media-tooltip-root delay=\"500\" close-delay=\"0\">\n <media-tooltip-trigger>\n <media-fullscreen-button class=\"button\">\n <media-fullscreen-enter-alt-icon class=\"icon fullscreen-enter-icon\"></media-fullscreen-enter-alt-icon>\n <media-fullscreen-exit-alt-icon class=\"icon fullscreen-exit-icon\"></media-fullscreen-exit-alt-icon>\n </media-fullscreen-button>\n </media-tooltip-trigger>\n <media-tooltip-portal>\n <media-tooltip-positioner side=\"top\" side-offset=\"6\" collision-padding=\"12\">\n <media-tooltip-popup class=\"popup-animation\">\n <span class=\"tooltip fullscreen-enter-tooltip\">Enter Fullscreen</span>\n <span class=\"tooltip fullscreen-exit-tooltip\">Exit Fullscreen</span>\n </media-tooltip-popup>\n </media-tooltip-positioner>\n </media-tooltip-portal>\n </media-tooltip-root>\n </div>\n </div>\n </media-container>\n `;\n}\n\nexport class MediaSkinMinimal extends MediaSkin {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-skin-minimal', MediaSkinMinimal);\n"],"mappings":";;;;;qBAAA;;;;ACiBA,SAAgB,kBAAkB;AAChC,QAAiB;MACb,UAAU,iBAAiB,CAAC;aACrBA,eAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGpB,IAAa,mBAAb,cAAsC,UAAU;;yBACP;;;AAGzC,eAAe,OAAO,sBAAsB,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@videojs/html",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.1.0-preview.
|
|
4
|
+
"version": "0.1.0-preview.3",
|
|
5
5
|
"description": "HTML library for building media players",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"keywords": [
|
|
@@ -25,9 +25,13 @@
|
|
|
25
25
|
"types": "./dist/icons.d.ts",
|
|
26
26
|
"default": "./dist/icons.js"
|
|
27
27
|
},
|
|
28
|
-
"./skins/
|
|
29
|
-
"types": "./dist/skins/
|
|
30
|
-
"default": "./dist/skins/
|
|
28
|
+
"./skins/frosted": {
|
|
29
|
+
"types": "./dist/skins/frosted.d.ts",
|
|
30
|
+
"default": "./dist/skins/frosted.js"
|
|
31
|
+
},
|
|
32
|
+
"./skins/minimal": {
|
|
33
|
+
"types": "./dist/skins/minimal.d.ts",
|
|
34
|
+
"default": "./dist/skins/minimal.js"
|
|
31
35
|
}
|
|
32
36
|
},
|
|
33
37
|
"main": "dist/index.js",
|
|
@@ -37,11 +41,12 @@
|
|
|
37
41
|
"dist"
|
|
38
42
|
],
|
|
39
43
|
"dependencies": {
|
|
44
|
+
"@floating-ui/core": "^1.6.13",
|
|
40
45
|
"@floating-ui/dom": "^1.6.13",
|
|
41
46
|
"@open-wc/context-protocol": "^0.0.9",
|
|
42
|
-
"@videojs/
|
|
43
|
-
"@videojs/
|
|
44
|
-
"@videojs/utils": "0.1.0-preview.
|
|
47
|
+
"@videojs/core": "0.1.0-preview.3",
|
|
48
|
+
"@videojs/icons": "0.1.0-preview.3",
|
|
49
|
+
"@videojs/utils": "0.1.0-preview.3"
|
|
45
50
|
},
|
|
46
51
|
"devDependencies": {
|
|
47
52
|
"tsdown": "^0.15.9",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icons-YlVTDFdV.js","names":["getTemplateHTML","getTemplateHTML","getTemplateHTML","getTemplateHTML","getTemplateHTML","getTemplateHTML","getTemplateHTML"],"sources":["../src/icons/media-chrome-icon.ts","../src/icons/media-fullscreen-enter-icon.ts","../src/icons/media-fullscreen-exit-icon.ts","../src/icons/media-pause-icon.ts","../src/icons/media-play-icon.ts","../src/icons/media-volume-high-icon.ts","../src/icons/media-volume-low-icon.ts","../src/icons/media-volume-off-icon.ts"],"sourcesContent":["export function getTemplateHTML() {\n return /* html */ `\n <style>\n :host {\n display: inline-block;\n }\n svg {\n fill: currentColor;\n }\n </style>\n `;\n}\n\nexport class MediaChromeIcon 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 MediaChromeIcon).shadowRootOptions);\n this.shadowRoot!.innerHTML = (this.constructor as typeof MediaChromeIcon).getTemplateHTML();\n }\n }\n}\n","import { SVG_ICONS } from '@videojs/icons';\n\nimport { MediaChromeIcon } from './media-chrome-icon';\n\nexport function getTemplateHTML() {\n return /* html */ `\n ${MediaChromeIcon.getTemplateHTML()}\n <style>\n :host {\n display: var(--media-fullscreen-enter-icon-display, inline-flex);\n }\n </style>\n ${SVG_ICONS.fullscreenEnter}\n `;\n}\n\nexport class MediaFullscreenEnterIcon extends MediaChromeIcon {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-fullscreen-enter-icon', MediaFullscreenEnterIcon);\n","import { SVG_ICONS } from '@videojs/icons';\n\nimport { MediaChromeIcon } from './media-chrome-icon';\n\nexport function getTemplateHTML() {\n return /* html */ `\n ${MediaChromeIcon.getTemplateHTML()}\n <style>\n :host {\n display: var(--media-fullscreen-exit-icon-display, inline-flex);\n }\n </style>\n ${SVG_ICONS.fullscreenExit}\n `;\n}\n\nexport class MediaFullscreenExitIcon extends MediaChromeIcon {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-fullscreen-exit-icon', MediaFullscreenExitIcon);\n","import { SVG_ICONS } from '@videojs/icons';\n\nimport { MediaChromeIcon } from './media-chrome-icon';\n\nexport function getTemplateHTML() {\n return /* html */ `\n ${MediaChromeIcon.getTemplateHTML()}\n ${SVG_ICONS.pause}\n `;\n}\n\nexport class MediaPauseIcon extends MediaChromeIcon {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-pause-icon', MediaPauseIcon);\n","import { SVG_ICONS } from '@videojs/icons';\n\nimport { MediaChromeIcon } from './media-chrome-icon';\n\nexport function getTemplateHTML() {\n return /* html */ `\n ${MediaChromeIcon.getTemplateHTML()}\n <style>\n :host {\n display: var(--media-play-icon-display, inline-flex);\n }\n </style>\n ${SVG_ICONS.play}\n `;\n}\n\nexport class MediaPlayIcon extends MediaChromeIcon {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-play-icon', MediaPlayIcon);\n","import { SVG_ICONS } from '@videojs/icons';\n\nimport { MediaChromeIcon } from './media-chrome-icon';\n\nexport function getTemplateHTML() {\n return /* html */ `\n ${MediaChromeIcon.getTemplateHTML()}\n <style>\n :host {\n display: var(--media-play-icon-display, inline-flex);\n }\n </style>\n ${SVG_ICONS.volumeHigh}\n `;\n}\n\nexport class MediaVolumeHighIcon extends MediaChromeIcon {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-volume-high-icon', MediaVolumeHighIcon);\n","import { SVG_ICONS } from '@videojs/icons';\n\nimport { MediaChromeIcon } from './media-chrome-icon';\n\nexport function getTemplateHTML() {\n return /* html */ `\n ${MediaChromeIcon.getTemplateHTML()}\n <style>\n :host {\n display: var(--media-play-icon-display, inline-flex);\n }\n </style>\n ${SVG_ICONS.volumeLow}\n `;\n}\n\nexport class MediaVolumeLowIcon extends MediaChromeIcon {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-volume-low-icon', MediaVolumeLowIcon);\n","import { SVG_ICONS } from '@videojs/icons';\n\nimport { MediaChromeIcon } from './media-chrome-icon';\n\nexport function getTemplateHTML() {\n return /* html */ `\n ${MediaChromeIcon.getTemplateHTML()}\n <style>\n :host {\n display: var(--media-play-icon-display, inline-flex);\n }\n </style>\n ${SVG_ICONS.volumeOff}\n `;\n}\n\nexport class MediaVolumeOffIcon extends MediaChromeIcon {\n static getTemplateHTML: () => string = getTemplateHTML;\n}\n\ncustomElements.define('media-volume-off-icon', MediaVolumeOffIcon);\n"],"mappings":";;;;AAAA,SAAgBA,oBAAkB;AAChC,QAAkB;;;;;;;;;;;AAYpB,IAAa,kBAAb,cAAqC,YAAY;;2BACpB,EAAE,MAAM,QAA0B;;;yBACtBA;;CAEvC,cAAc;AACZ,SAAO;AAEP,MAAI,CAAC,KAAK,YAAY;AACpB,QAAK,aAAc,KAAK,YAAuC,kBAAkB;AACjF,QAAK,WAAY,YAAa,KAAK,YAAuC,iBAAiB;;;;;;;;;;;AClBjG,SAAgBC,oBAAkB;AAChC,QAAkB;MACd,gBAAgB,iBAAiB,CAAC;;;;;;MAMlC,UAAU,gBAAgB;;;AAIhC,IAAa,2BAAb,cAA8C,gBAAgB;;yBACrBA;;;AAGzC,eAAe,OAAO,+BAA+B,yBAAyB;;;;;;;;AChB9E,SAAgBC,oBAAkB;AAChC,QAAkB;MACd,gBAAgB,iBAAiB,CAAC;;;;;;MAMlC,UAAU,eAAe;;;AAI/B,IAAa,0BAAb,cAA6C,gBAAgB;;yBACpBA;;;AAGzC,eAAe,OAAO,8BAA8B,wBAAwB;;;;;;;;AChB5E,SAAgBC,oBAAkB;AAChC,QAAkB;MACd,gBAAgB,iBAAiB,CAAC;MAClC,UAAU,MAAM;;;AAItB,IAAa,iBAAb,cAAoC,gBAAgB;;yBACXA;;;AAGzC,eAAe,OAAO,oBAAoB,eAAe;;;;;;;;ACXzD,SAAgBC,oBAAkB;AAChC,QAAkB;MACd,gBAAgB,iBAAiB,CAAC;;;;;;MAMlC,UAAU,KAAK;;;AAIrB,IAAa,gBAAb,cAAmC,gBAAgB;;yBACVA;;;AAGzC,eAAe,OAAO,mBAAmB,cAAc;;;;;;;;AChBvD,SAAgBC,oBAAkB;AAChC,QAAkB;MACd,gBAAgB,iBAAiB,CAAC;;;;;;MAMlC,UAAU,WAAW;;;AAI3B,IAAa,sBAAb,cAAyC,gBAAgB;;yBAChBA;;;AAGzC,eAAe,OAAO,0BAA0B,oBAAoB;;;;;;;;AChBpE,SAAgBC,oBAAkB;AAChC,QAAkB;MACd,gBAAgB,iBAAiB,CAAC;;;;;;MAMlC,UAAU,UAAU;;;AAI1B,IAAa,qBAAb,cAAwC,gBAAgB;;yBACfA;;;AAGzC,eAAe,OAAO,yBAAyB,mBAAmB;;;;;;;;AChBlE,SAAgB,kBAAkB;AAChC,QAAkB;MACd,gBAAgB,iBAAiB,CAAC;;;;;;MAMlC,UAAU,UAAU;;;AAI1B,IAAa,qBAAb,cAAwC,gBAAgB;;yBACf;;;AAGzC,eAAe,OAAO,yBAAyB,mBAAmB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BtSCzZKn.d.ts","names":[],"sources":["../src/icons/media-chrome-icon.ts","../src/icons/media-fullscreen-enter-icon.ts","../src/icons/media-fullscreen-exit-icon.ts","../src/icons/media-pause-icon.ts","../src/icons/media-play-icon.ts","../src/icons/media-volume-high-icon.ts","../src/icons/media-volume-low-icon.ts","../src/icons/media-volume-off-icon.ts"],"sourcesContent":[],"mappings":";;;cAaa,eAAA,SAAwB,WAAA;;IAArC,IAAa,EACkC,cADlC;;;;;;;;iBCTG,iBAAA,CAAA;cAYH,wBAAA,SAAiC,eAAA;EDH9C,OAAa,eAAA,EAAA,GAAA,GAAA,MACkC;;;;;iBEV/B,iBAAA,CAAA;cAYH,uBAAA,SAAgC,eAAA;EFH7C,OAAa,eAAA,EAAA,GAAA,GAAA,MACkC;;;;;iBGV/B,iBAAA,CAAA;cAOH,cAAA,SAAuB,eAAA;EHEpC,OAAa,eAAA,EAAA,GAAA,GAAA,MACkC;;;;;iBIV/B,iBAAA,CAAA;cAYH,aAAA,SAAsB,eAAA;EJHnC,OAAa,eAAA,EAAA,GAAA,GAAA,MACkC;;;;;iBKV/B,iBAAA,CAAA;cAYH,mBAAA,SAA4B,eAAA;ELHzC,OAAa,eAAA,EAAA,GAAA,GAAA,MACkC;;;;;iBMV/B,iBAAA,CAAA;cAYH,kBAAA,SAA2B,eAAA;ENHxC,OAAa,eAAA,EAAA,GAAA,GAAA,MACkC;;;;;iBOV/B,eAAA,CAAA;cAYH,kBAAA,SAA2B,eAAA;EPHxC,OAAa,eAAA,EAAA,GAAA,GAAA,MACkC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-skin-BlXPC9wG.js","names":["useCurrentTimeDisplayState: StateHook<{\n currentTime: number | undefined;\n duration: number | undefined;\n}>","getCurrentTimeDisplayProps: PropsHook<{\n currentTime: number | undefined;\n duration: number | undefined;\n}>","CurrentTimeDisplay: ConnectedComponentConstructor<CurrentTimeDisplayState>","getTemplateHTML","useDurationDisplayState: StateHook<{\n duration: number | undefined;\n}>","getDurationDisplayProps: PropsHook<{\n duration: number | undefined;\n}>","DurationDisplay: ConnectedComponentConstructor<DurationDisplayState>","getTemplateHTML","#handleKeyDown","#handleKeyUp","getFullscreenButtonState: StateHook<{ fullscreen: boolean }>","getFullscreenButtonProps: PropsHook<{ fullscreen: boolean }>","FullscreenButton: ConnectedComponentConstructor<FullscreenButtonState>","getMuteButtonState: StateHook<{\n muted: boolean;\n volumeLevel: string;\n}>","getMuteButtonProps: PropsHook<{\n muted: boolean;\n volumeLevel: string;\n}>","MuteButton: ConnectedComponentConstructor<MuteButtonState>","getPlayButtonState: StateHook<{ paused: boolean }>","getPlayButtonProps: PropsHook<{ paused: boolean }>","PlayButton: ConnectedComponentConstructor<PlayButtonState>","#updateVisibility","#abortController","#clearHoverTimeout","#cleanup","#transitionStatus","#handleMouseEnter","#handleMouseLeave","#handleFocusIn","#handleFocusOut","#triggerElement","#portalElement","#positionerElement","#popupElement","#open","#setupFloating","#hoverTimeout","#setupPortal","#cleanupPortal","#portal","#childrenArray","#guards","Popover: {\n Root: typeof MediaPopoverRoot;\n Trigger: typeof MediaPopoverTrigger;\n Portal: typeof MediaPopoverPortal;\n Positioner: typeof MediaPopoverPositioner;\n Popup: typeof MediaPopoverPopup;\n}","getTimeSliderRootProps: PropsHook<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}>","CoreTimeSlider","useTimeSliderRootState: StateHook<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}>","getTimeSliderTrackProps: PropsHook<Record<string, never>>","getTimeSliderProgressProps: PropsHook<Record<string, never>>","getTimeSliderPointerProps: PropsHook<Record<string, never>>","getTimeSliderThumbProps: PropsHook<Record<string, never>>","TimeSliderRoot: ConnectedComponentConstructor<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}>","TimeSliderTrack: ConnectedComponentConstructor<any>","TimeSliderProgress: ConnectedComponentConstructor<any>","TimeSliderPointer: ConnectedComponentConstructor<any>","TimeSliderThumb: ConnectedComponentConstructor<any>","TimeSlider","#handleMouseEnter","#handleMouseLeave","#handleMouseMove","#updateVisibility","#clearHoverTimeout","#cleanup","#transitionStatus","#triggerElement","#portalElement","#positionerElement","#popupElement","#open","#setupFloating","#arrowElement","#mousePosition","#hoverTimeout","#setOpen","#updatePosition","#setupPortal","#cleanupPortal","#portal","Tooltip: {\n Root: typeof MediaTooltipRoot;\n Trigger: typeof MediaTooltipTrigger;\n Portal: typeof MediaTooltipPortal;\n Positioner: typeof MediaTooltipPositioner;\n Popup: typeof MediaTooltipPopup;\n Arrow: typeof MediaTooltipArrow;\n}","getVolumeSliderRootProps: PropsHook<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}>","CoreVolumeSlider","useVolumeSliderRootState: StateHook<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}>","getVolumeSliderTrackProps: PropsHook<Record<string, never>>","getVolumeSliderProgressProps: PropsHook<Record<string, never>>","getVolumeSliderThumbProps: PropsHook<Record<string, never>>","VolumeSliderRoot: ConnectedComponentConstructor<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}>","VolumeSliderTrack: ConnectedComponentConstructor<any>","VolumeSliderProgress: ConnectedComponentConstructor<any>","VolumeSliderThumb: ConnectedComponentConstructor<any>","VolumeSlider","getTemplateHTML","CustomElementConsumer: Constructor<CustomElement>","ProviderHTMLElement: Constructor<CustomElement>"],"sources":["../src/utils/component-factory.ts","../src/components/media-current-time-display.ts","../src/components/media-duration-display.ts","../src/components/media-chrome-button.ts","../src/components/media-fullscreen-button.ts","../src/components/media-mute-button.ts","../src/components/media-play-button.ts","../src/components/media-popover.ts","../src/components/media-time-slider.ts","../src/components/media-tooltip.ts","../src/components/media-volume-slider.ts","../src/media/media-container.ts","../src/media/media-provider.ts","../src/media/media-skin.ts"],"sourcesContent":["import { ConsumerMixin } from '@open-wc/context-protocol';\n\n/**\n * Generic types for HTML component hooks pattern\n * Mirrors the React hooks architecture for consistency\n */\nexport interface StateHook<T = any> {\n keys: string[];\n transform: (rawState: any, mediaStore: any) => T;\n}\n\nexport type PropsHook<T = any, P = any> = (state: T, element: HTMLElement) => P;\n\nexport interface ConnectedComponentConstructor<State> {\n new (state: State): HTMLElement;\n}\n\n/**\n * Generic factory function to create connected HTML components using hooks pattern.\n * Provides equivalent functionality to React's toConnectedComponent but for custom elements.\n *\n * @param BaseClass - Base custom element class to extend\n * @param stateHook - Hook that defines state keys and transformation logic\n * @param propsHook - Hook that handles element attributes and properties based on state\n * @param eventsHook - Hook that defines event handling logic\n * @param displayName - Display name for debugging\n * @returns Connected custom element class with media store integration\n */\nexport function toConnectedHTMLComponent<State = any>(\n BaseClass: CustomElementConstructor,\n stateHook: StateHook<State>,\n propsHook: PropsHook<State>,\n displayName?: string,\n): ConnectedComponentConstructor<State> {\n const ConnectedComponent = class extends ConsumerMixin(BaseClass) {\n static get observedAttributes(): string[] {\n return [\n // @ts-expect-error ts(2339)\n ...(super.observedAttributes ?? []),\n ];\n }\n\n _mediaStore: any;\n\n contexts = {\n mediaStore: (mediaStore: any) => {\n this._mediaStore = mediaStore;\n\n // Subscribe to media store state changes\n // Split into two phases: state transformation, then props update\n this._mediaStore.subscribeKeys(stateHook.keys, (rawState: any) => {\n // Phase 1: Transform raw media store state (state concern)\n const state = stateHook.transform(rawState, mediaStore);\n\n // Phase 2: Update element attributes/properties (props concern)\n const props = propsHook(state ?? {} as State, this);\n // @ts-expect-error any\n this._update(props, state, mediaStore);\n });\n },\n };\n\n connectedCallback(): void {\n super.connectedCallback?.();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n }\n\n handleEvent(event: CustomEvent): void {\n // @ts-expect-error any\n super.handleEvent?.(event);\n }\n };\n\n // Set display name for debugging and dev tools\n if (displayName) {\n Object.defineProperty(ConnectedComponent, 'name', { value: displayName });\n }\n\n return ConnectedComponent;\n}\n","import type { CurrentTimeDisplayState } from '@videojs/core/store';\nimport type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { currentTimeDisplayStateDefinition } from '@videojs/core/store';\n\nimport { formatDisplayTime } from '@videojs/utils';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\n\nexport class CurrentTimeDisplayBase extends HTMLElement {\n static shadowRootOptions = {\n mode: 'open' as ShadowRootMode,\n };\n\n static observedAttributes: string[] = ['show-remaining'];\n\n _state:\n | {\n currentTime: number | undefined;\n duration: number | undefined;\n }\n | undefined;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n this.attachShadow((this.constructor as typeof CurrentTimeDisplayBase).shadowRootOptions);\n }\n }\n\n get currentTime(): number {\n return this._state?.currentTime ?? 0;\n }\n\n get duration(): number {\n return this._state?.duration ?? 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\n = this.showRemaining && state.duration != null && state.currentTime != null\n ? formatDisplayTime(-(state.duration - state.currentTime))\n : formatDisplayTime(state.currentTime);\n\n if (this.shadowRoot) {\n this.shadowRoot.textContent = timeLabel;\n }\n }\n}\n\nexport const useCurrentTimeDisplayState: StateHook<{\n currentTime: number | undefined;\n duration: number | undefined;\n}> = {\n keys: [...currentTimeDisplayStateDefinition.keys],\n transform: (rawState, _mediaStore) => ({\n ...currentTimeDisplayStateDefinition.stateTransform(rawState),\n // Current time display is read-only, so no request methods needed\n }),\n};\n\nexport const getCurrentTimeDisplayProps: PropsHook<{\n currentTime: number | undefined;\n duration: number | undefined;\n}> = (_state, _element) => {\n const baseProps: Record<string, any> = {};\n return baseProps;\n};\n\nexport const CurrentTimeDisplay: ConnectedComponentConstructor<CurrentTimeDisplayState> = toConnectedHTMLComponent(\n CurrentTimeDisplayBase,\n useCurrentTimeDisplayState,\n getCurrentTimeDisplayProps,\n 'CurrentTimeDisplay',\n);\n\n// Register the custom element\nif (!globalThis.customElements.get('media-current-time-display')) {\n globalThis.customElements.define('media-current-time-display', CurrentTimeDisplay);\n}\n\nexport default CurrentTimeDisplay;\n","import type { DurationDisplayState } from '@videojs/core/store';\nimport type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { durationDisplayStateDefinition } from '@videojs/core/store';\n\nimport { formatDisplayTime } from '@videojs/utils';\nimport { namedNodeMapToObject } from '@videojs/utils/dom';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\n\nexport function getTemplateHTML(\n this: typeof DurationDisplayBase,\n _attrs: Record<string, string>,\n _props: Record<string, any> = {},\n) {\n return /* html */ `\n <span></span>\n `;\n}\n\nexport class DurationDisplayBase extends HTMLElement {\n static shadowRootOptions = {\n mode: 'open' as ShadowRootMode,\n };\n\n static getTemplateHTML: typeof getTemplateHTML = getTemplateHTML;\n\n _state:\n | {\n duration: number | undefined;\n }\n | undefined;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n this.attachShadow((this.constructor as typeof DurationDisplayBase).shadowRootOptions);\n\n const attrs = namedNodeMapToObject(this.attributes);\n const html = (this.constructor as typeof DurationDisplayBase).getTemplateHTML(attrs);\n const shadowRoot = this.shadowRoot as unknown as ShadowRoot;\n shadowRoot.setHTMLUnsafe ? shadowRoot.setHTMLUnsafe(html) : (shadowRoot.innerHTML = html);\n }\n }\n\n get duration(): number {\n return this._state?.duration ?? 0;\n }\n\n _update(_props: any, state: any): void {\n this._state = state;\n\n // Update the span content with formatted duration\n const spanElement = this.shadowRoot?.querySelector('span') as HTMLElement;\n if (spanElement) {\n spanElement.textContent = formatDisplayTime(state.duration);\n }\n }\n}\n\nexport const useDurationDisplayState: StateHook<{\n duration: number | undefined;\n}> = {\n keys: [...durationDisplayStateDefinition.keys],\n transform: (rawState, _mediaStore) => ({\n ...durationDisplayStateDefinition.stateTransform(rawState),\n // Duration display is read-only, so no request methods needed\n }),\n};\n\nexport const getDurationDisplayProps: PropsHook<{\n duration: number | undefined;\n}> = (_state, _element) => {\n const baseProps: Record<string, any> = {};\n return baseProps;\n};\n\nexport const DurationDisplay: ConnectedComponentConstructor<DurationDisplayState> = toConnectedHTMLComponent(\n DurationDisplayBase,\n useDurationDisplayState,\n getDurationDisplayProps,\n 'DurationDisplay',\n);\n\n// Register the custom element\nif (!globalThis.customElements.get('media-duration-display')) {\n globalThis.customElements.define('media-duration-display', DurationDisplay);\n}\n\nexport default DurationDisplay;\n","import { namedNodeMapToObject } from '@videojs/utils/dom';\n\nexport function getTemplateHTML(\n this: typeof MediaChromeButton,\n _attrs: Record<string, string>,\n _props: Record<string, any> = {},\n): string {\n return /* html */ `\n <style>\n /*\n NOTE: Even though primitives should aim to be \"unstyled\" in their core definitions, we should\n still add pointer-events, as this defines functionality. (CJP)\n */\n :host {\n pointer-events: auto;\n }\n </style>\n <slot>\n </slot>\n `;\n}\n\nexport class MediaChromeButton extends HTMLElement {\n static shadowRootOptions = {\n mode: 'open' as ShadowRootMode,\n };\n\n static getTemplateHTML: typeof getTemplateHTML = getTemplateHTML;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n // Set up the Shadow DOM if not using Declarative Shadow DOM.\n this.attachShadow((this.constructor as typeof MediaChromeButton).shadowRootOptions);\n\n const attrs = namedNodeMapToObject(this.attributes);\n const html = (this.constructor as typeof MediaChromeButton).getTemplateHTML(attrs);\n // From MDN: setHTMLUnsafe should be used instead of ShadowRoot.innerHTML\n // when a string of HTML may contain declarative shadow roots.\n const shadowRoot = this.shadowRoot as unknown as ShadowRoot;\n shadowRoot.setHTMLUnsafe ? shadowRoot.setHTMLUnsafe(html) : (shadowRoot.innerHTML = html);\n }\n\n this.addEventListener('click', this);\n this.addEventListener('keydown', this);\n }\n\n handleEvent(event: Event): void {\n const { type } = event;\n if (type === 'keydown') {\n this.#handleKeyDown(event as KeyboardEvent);\n }\n }\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n const { metaKey, altKey, key } = event;\n if (metaKey || altKey || !['Enter', ' '].includes(key)) {\n this.removeEventListener('keyup', this.#handleKeyUp);\n return;\n }\n this.addEventListener('keyup', this.#handleKeyUp, { once: true });\n };\n\n #handleKeyUp = (_event: KeyboardEvent): void => {\n this.handleEvent({ type: 'click' } as Event);\n };\n}\n","import type { FullscreenButtonState } from '@videojs/core/store';\nimport type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { fullscreenButtonStateDefinition } from '@videojs/core/store';\n\nimport { setAttributes } from '@videojs/utils/dom';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\nimport { MediaChromeButton } from './media-chrome-button';\n\nexport class FullscreenButtonBase extends MediaChromeButton {\n _state:\n | {\n fullscreen: boolean;\n requestEnterFullscreen: () => void;\n requestExitFullscreen: () => 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 if (state && type === 'click') {\n if (state.fullscreen) {\n state.requestExitFullscreen();\n } else {\n state.requestEnterFullscreen();\n }\n }\n }\n\n get fullscreen(): boolean {\n return this._state?.fullscreen ?? false;\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\n/**\n * FullscreenButton state hook - equivalent to React's useFullscreenButtonState\n * Handles media store state subscription and transformation\n */\nexport const getFullscreenButtonState: StateHook<{ fullscreen: boolean }> = {\n keys: fullscreenButtonStateDefinition.keys,\n transform: (rawState, mediaStore) => ({\n ...fullscreenButtonStateDefinition.stateTransform(rawState),\n ...fullscreenButtonStateDefinition.createRequestMethods(mediaStore.dispatch),\n }),\n};\n\nexport const getFullscreenButtonProps: PropsHook<{ fullscreen: boolean }> = (state, _element) => {\n const baseProps: Record<string, any> = {\n /** data attributes/props */\n 'data-fullscreen': state.fullscreen,\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.fullscreen ? 'exit fullscreen' : 'enter fullscreen',\n /** tooltip */\n 'data-tooltip': state.fullscreen ? 'Exit Fullscreen' : 'Enter Fullscreen',\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 FullscreenButton: ConnectedComponentConstructor<FullscreenButtonState> = toConnectedHTMLComponent(\n FullscreenButtonBase,\n getFullscreenButtonState,\n getFullscreenButtonProps,\n 'FullscreenButton',\n);\n\n// NOTE: In this architecture it will be important to decouple component class definitions from their registration in the CustomElementsRegistry. (CJP)\nif (!globalThis.customElements.get('media-fullscreen-button')) {\n globalThis.customElements.define('media-fullscreen-button', FullscreenButton);\n}\n\nexport default FullscreenButton;\n","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 { MediaChromeButton } from './media-chrome-button';\n\nexport class MuteButtonBase extends MediaChromeButton {\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 MuteButton: ConnectedComponentConstructor<MuteButtonState> = toConnectedHTMLComponent(\n MuteButtonBase,\n getMuteButtonState,\n getMuteButtonProps,\n 'MuteButton',\n);\n\n// NOTE: In this architecture it will be important to decouple component class definitions from their registration in the CustomElementsRegistry. (CJP)\nif (!globalThis.customElements.get('media-mute-button')) {\n globalThis.customElements.define('media-mute-button', MuteButton);\n}\n\nexport default MuteButton;\n","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 { MediaChromeButton } from './media-chrome-button';\n\nexport class PlayButtonBase extends MediaChromeButton {\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 PlayButton: ConnectedComponentConstructor<PlayButtonState> = toConnectedHTMLComponent(\n PlayButtonBase,\n getPlayButtonState,\n getPlayButtonProps,\n 'PlayButton',\n);\n\n// NOTE: In this architecture it will be important to decouple component class definitions from their registration in the CustomElementsRegistry. (CJP)\nif (!globalThis.customElements.get('media-play-button')) {\n globalThis.customElements.define('media-play-button', PlayButton);\n}\n\nexport default PlayButton;\n","import type { Placement } from '@floating-ui/dom';\nimport { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';\nimport { uniqueId } from '@videojs/utils';\n\nimport { getDocument, getNextTabbable, getPreviousTabbable, isOutsideEvent } from '@videojs/utils/dom';\n\nexport class MediaPopoverRoot extends HTMLElement {\n #open = false;\n #hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n #cleanup: (() => void) | null = null;\n #transitionStatus: 'initial' | 'open' | 'close' | 'unmounted' = 'initial';\n #abortController: AbortController | null = null;\n\n connectedCallback(): void {\n this.#updateVisibility();\n\n this.#abortController ??= new AbortController();\n const { signal } = this.#abortController;\n\n this.addEventListener('mouseenter', this, { signal });\n this.addEventListener('mouseleave', this, { signal });\n this.addEventListener('focusin', this, { signal });\n this.addEventListener('focusout', this, { signal });\n\n getDocument(this).documentElement.addEventListener('mouseleave', this, { signal });\n }\n\n disconnectedCallback(): void {\n this.#clearHoverTimeout();\n this.#cleanup?.();\n\n this.#transitionStatus = 'unmounted';\n this.#updateVisibility();\n\n this.#abortController?.abort();\n this.#abortController = null;\n }\n\n handleEvent(event: Event): void {\n switch (event.type) {\n case 'mouseenter':\n this.#handleMouseEnter();\n break;\n case 'mouseleave':\n this.#handleMouseLeave(event as MouseEvent);\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'];\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 #triggerElement(): MediaPopoverTrigger | null {\n return this.querySelector('media-popover-trigger') as MediaPopoverTrigger | null;\n }\n\n get #portalElement(): MediaPopoverPortal | null {\n return this.querySelector('media-popover-portal') as MediaPopoverPortal | null;\n }\n\n get #positionerElement(): MediaPopoverPositioner | null {\n return this.#portalElement?.querySelector('media-popover-positioner') as MediaPopoverPositioner | null;\n }\n\n get #popupElement(): MediaPopoverPopup | null {\n return this.#portalElement?.querySelector('media-popover-popup') as MediaPopoverPopup | 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 this.#portalElement?.renderGuards();\n } else {\n this.#portalElement?.removeGuards();\n this.#cleanup?.();\n this.#cleanup = null;\n }\n\n if (open) {\n this.#transitionStatus = 'initial';\n requestAnimationFrame(() => {\n this.#transitionStatus = 'open';\n this.#updateVisibility();\n });\n } else {\n this.#transitionStatus = 'close';\n }\n\n this.#updateVisibility();\n }\n\n #updateVisibility(): void {\n this.style.display = 'contents';\n\n if (this.#popupElement) {\n const placement = this.#positionerElement?.side ?? 'top';\n this.#popupElement.setAttribute('data-side', placement);\n\n this.#popupElement.toggleAttribute('data-starting-style', this.#transitionStatus === 'initial');\n this.#popupElement.toggleAttribute('data-open', this.#transitionStatus === 'initial' || this.#transitionStatus === 'open');\n this.#popupElement.toggleAttribute('data-ending-style', this.#transitionStatus === 'close' || this.#transitionStatus === 'unmounted');\n this.#popupElement.toggleAttribute('data-closed', this.#transitionStatus === 'close' || this.#transitionStatus === 'unmounted');\n\n this.#abortController ??= new AbortController();\n const { signal } = this.#abortController;\n this.#popupElement.addEventListener('mouseleave', this, { signal });\n }\n\n const triggerElement = this.#triggerElement?.firstElementChild as HTMLElement;\n if (triggerElement) {\n triggerElement.setAttribute('aria-expanded', this.#open.toString());\n triggerElement.toggleAttribute('data-popup-open', this.#open);\n\n if (this.#popupElement?.id) {\n triggerElement.setAttribute('aria-controls', this.#popupElement?.id);\n }\n }\n }\n\n #setupFloating(): void {\n if (!this.#triggerElement || !this.#popupElement) return;\n\n const trigger = this.#triggerElement.firstElementChild as HTMLElement;\n const popup = this.#popupElement;\n\n if (!trigger || !popup) return;\n\n const placement = this.#positionerElement?.side ?? 'top';\n const sideOffset = this.#positionerElement?.sideOffset;\n\n const updatePosition = () => {\n computePosition(trigger, popup, {\n placement,\n middleware: [offset(sideOffset), flip(), shift()],\n }).then(({ x, y }: { x: number; y: number }) => {\n Object.assign(popup.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n });\n };\n\n updatePosition();\n this.#cleanup = autoUpdate(trigger, popup, updatePosition);\n }\n\n #clearHoverTimeout(): void {\n if (this.#hoverTimeout) {\n clearTimeout(this.#hoverTimeout);\n this.#hoverTimeout = null;\n }\n }\n\n #handleMouseEnter(): void {\n if (!this.openOnHover) return;\n\n this.#clearHoverTimeout();\n this.#hoverTimeout = globalThis.setTimeout(() => {\n this.setOpen(true);\n }, this.delay);\n }\n\n #handleMouseLeave(event: MouseEvent): void {\n if (!this.openOnHover) return;\n\n if (event.relatedTarget && this.#popupElement?.contains(event.relatedTarget as Node)) return;\n\n this.#clearHoverTimeout();\n this.#hoverTimeout = globalThis.setTimeout(() => {\n this.setOpen(false);\n }, this.closeDelay);\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 && relatedTarget.hasAttribute('data-focus-guard')) return;\n\n this.setOpen(false);\n };\n}\n\nexport class MediaPopoverTrigger extends HTMLElement {\n connectedCallback(): void {\n this.style.display = 'contents';\n\n const triggerElement = this.firstElementChild as HTMLElement;\n if (triggerElement) {\n triggerElement.setAttribute('aria-haspopup', 'true');\n triggerElement.setAttribute('aria-expanded', 'false');\n\n const mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes') {\n const rootElement = this.closest('media-popover-root') as MediaPopoverRoot;\n let popupElement = rootElement.querySelector('media-popover-popup') as MediaPopoverPopup;\n\n if (!popupElement) {\n const portalElement = rootElement.querySelector('media-popover-portal') as MediaPopoverPortal;\n if (!portalElement) {\n return;\n }\n\n popupElement = portalElement.querySelector('media-popover-popup') as MediaPopoverPopup;\n if (!popupElement) {\n return;\n }\n }\n\n const attributeName = mutation.attributeName;\n if (!attributeName || !attributeName.startsWith('data-')) {\n return;\n }\n\n const attributeValue = triggerElement.getAttribute(attributeName);\n if (attributeValue !== null) {\n popupElement.setAttribute(attributeName, attributeValue);\n } else {\n popupElement.removeAttribute(attributeName);\n }\n }\n });\n });\n\n mutationObserver.observe(triggerElement, {\n attributes: true,\n });\n }\n }\n}\n\nexport class MediaPopoverPortal extends HTMLElement {\n #portal: HTMLElement | null = null;\n #childrenArray: Element[] = [];\n #guards: HTMLElement[] = [];\n\n connectedCallback(): void {\n this.style.display = 'contents';\n this.#setupPortal();\n }\n\n disconnectedCallback(): void {\n this.#cleanupPortal();\n }\n\n querySelector(selector: string): HTMLElement | null {\n return this.#portal!.querySelector(selector);\n }\n\n querySelectorAll(selector: string): NodeListOf<Element> {\n return this.#portal!.querySelectorAll(selector);\n }\n\n handleEvent(event: Event): void {\n this.dispatchEvent(new Event(event.type, { bubbles: true }));\n }\n\n #setupPortal(): void {\n const portalId = this.getAttribute('root-id') ?? '@default_portal_id';\n if (!portalId) return;\n\n /* @TODO We need to make sure portal logic is non-brittle longer term (CJP) */\n // NOTE: Hacky solution in part to ensure styling propogates from skin to container's baked in portal (TL;DR - Shadow DOM vs. Light DOM CSS) (CJP)\n const portalContainer\n = ((this.getRootNode() as ShadowRoot | Document).getElementById(portalId)\n ?? (this.getRootNode() as ShadowRoot | Document)\n .querySelector('media-container')\n ?.shadowRoot\n ?.getElementById(portalId))\n ? (this.getRootNode() as ShadowRoot | Document).querySelector('media-container')\n : undefined;\n if (!portalContainer) return;\n\n this.#portal = document.createElement('div');\n this.#portal.slot = 'portal';\n this.#portal.id = uniqueId();\n\n this.#childrenArray = Array.from(this.children);\n this.#portal.append(...this.#childrenArray);\n portalContainer.append(this.#portal);\n }\n\n #cleanupPortal(): void {\n if (!this.#portal) return;\n\n this.removeGuards();\n\n this.append(...this.#childrenArray);\n this.#portal.remove();\n this.#portal = null;\n this.#childrenArray = [];\n }\n\n renderGuards(): void {\n if (!this.#portal) return;\n\n if (this.#guards.length === 0) {\n const beforeInsideGuard = createFocusGuard('inside');\n const afterInsideGuard = createFocusGuard('inside');\n const beforeOutsideGuard = createFocusGuard('outside');\n const afterOutsideGuard = createFocusGuard('outside');\n\n beforeOutsideGuard.addEventListener('focus', (event: FocusEvent) => {\n if (this.#portal && isOutsideEvent(event, this.#portal)) {\n beforeInsideGuard.focus();\n } else {\n getPreviousTabbable(this)?.focus();\n }\n });\n\n afterOutsideGuard.addEventListener('focus', (event: FocusEvent) => {\n if (this.#portal && isOutsideEvent(event, this.#portal)) {\n afterInsideGuard.focus();\n } else {\n getNextTabbable(this)?.focus();\n }\n });\n\n beforeInsideGuard.addEventListener('focus', (event: FocusEvent) => {\n if (this.#portal && isOutsideEvent(event, this.#portal)) {\n getNextTabbable(this.#portal)?.focus();\n } else {\n beforeOutsideGuard.focus();\n }\n });\n\n afterInsideGuard.addEventListener('focus', (event: FocusEvent) => {\n if (this.#portal && isOutsideEvent(event, this.#portal)) {\n getPreviousTabbable(this.#portal)?.focus();\n } else {\n afterOutsideGuard.focus();\n }\n });\n\n // Add guards to portal element (outside guards)\n this.prepend(beforeOutsideGuard);\n this.append(afterOutsideGuard);\n\n // Add guards to portal container (inside guards)\n this.#portal.prepend(beforeInsideGuard);\n this.#portal.append(afterInsideGuard);\n\n this.#guards = [beforeOutsideGuard, afterOutsideGuard, beforeInsideGuard, afterInsideGuard];\n }\n }\n\n removeGuards(): void {\n this.#guards.forEach(guard => guard.remove());\n this.#guards = [];\n }\n}\n\nfunction createFocusGuard(dataType: 'inside' | 'outside'): HTMLElement {\n const focusGuard = document.createElement('span');\n focusGuard.setAttribute('data-type', dataType);\n focusGuard.setAttribute('tabindex', '0');\n focusGuard.toggleAttribute('data-focus-guard', true);\n return focusGuard;\n}\n\nexport class MediaPopoverPositioner extends HTMLElement {\n connectedCallback(): void {\n this.style.display = 'contents';\n\n const popup = this.firstElementChild as HTMLElement;\n if (popup) {\n Object.assign(popup.style, {\n position: 'absolute',\n top: '0',\n left: '0',\n });\n }\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\nexport class MediaPopoverPopup extends HTMLElement {\n connectedCallback(): void {\n this.setAttribute('role', 'dialog');\n this.setAttribute('aria-modal', 'false');\n this.id = uniqueId();\n }\n}\n\nif (!globalThis.customElements.get('media-popover-root')) {\n globalThis.customElements.define('media-popover-root', MediaPopoverRoot);\n}\n\nif (!globalThis.customElements.get('media-popover-trigger')) {\n globalThis.customElements.define('media-popover-trigger', MediaPopoverTrigger);\n}\n\nif (!globalThis.customElements.get('media-popover-portal')) {\n globalThis.customElements.define('media-popover-portal', MediaPopoverPortal);\n}\n\nif (!globalThis.customElements.get('media-popover-positioner')) {\n globalThis.customElements.define('media-popover-positioner', MediaPopoverPositioner);\n}\n\nif (!globalThis.customElements.get('media-popover-popup')) {\n globalThis.customElements.define('media-popover-popup', MediaPopoverPopup);\n}\n\nexport const Popover: {\n Root: typeof MediaPopoverRoot;\n Trigger: typeof MediaPopoverTrigger;\n Portal: typeof MediaPopoverPortal;\n Positioner: typeof MediaPopoverPositioner;\n Popup: typeof MediaPopoverPopup;\n} = {\n Root: MediaPopoverRoot,\n Trigger: MediaPopoverTrigger,\n Portal: MediaPopoverPortal,\n Positioner: MediaPopoverPositioner,\n Popup: MediaPopoverPopup,\n};\n\nexport default Popover;\n","import type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { TimeSlider as CoreTimeSlider } from '@videojs/core';\nimport { timeSliderStateDefinition } from '@videojs/core/store';\n\nimport { setAttributes } from '@videojs/utils/dom';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\n\ninterface TimeSliderRootState {\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}\n\n/**\n * TimeSlider Root props hook - equivalent to React's useTimeSliderRootProps\n * Handles element attributes and properties based on state\n */\nexport const getTimeSliderRootProps: PropsHook<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}> = (state, element) => {\n const formatTime = (time: number) => {\n const minutes = Math.floor(time / 60);\n const seconds = Math.floor(time % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n };\n\n const currentTimeText = formatTime(state.currentTime);\n const durationText = formatTime(state.duration);\n\n const baseProps: Record<string, any> = {\n role: 'slider',\n tabindex: element.getAttribute('tabindex') ?? '0',\n 'data-current-time': state.currentTime.toString(),\n 'data-duration': state.duration.toString(),\n 'data-orientation': (element as any).orientation || 'horizontal',\n 'aria-label': 'Seek',\n 'aria-valuemin': '0',\n 'aria-valuemax': Math.round(state.duration).toString(),\n 'aria-valuenow': Math.round(state.currentTime).toString(),\n 'aria-valuetext': `${currentTimeText} of ${durationText}`,\n 'aria-orientation': (element as any).orientation || 'horizontal',\n };\n\n return baseProps;\n};\n\nexport class TimeSliderRootBase extends HTMLElement {\n static readonly observedAttributes: readonly string[] = ['orientation'];\n\n _state: TimeSliderRootState | undefined;\n _core: CoreTimeSlider | null = null;\n\n get currentTime(): number {\n return this._state?.currentTime ?? 0;\n }\n\n get duration(): number {\n return this._state?.duration ?? 0;\n }\n\n get orientation(): 'horizontal' | 'vertical' {\n return (this.getAttribute('orientation') as 'horizontal' | 'vertical') || 'horizontal';\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, _newValue: string | null): void {\n if (name === 'orientation' && this._state) {\n this._render(getTimeSliderRootProps(this._state, this), this._state);\n }\n }\n\n _update(_props: any, state: any): void {\n this._state = state;\n\n if (state && !this._core) {\n this._core = new CoreTimeSlider();\n this._core.subscribe(() => this._render(getTimeSliderRootProps(state, this), state));\n this._core.attach(this);\n state.core = this._core;\n }\n\n this._core?.setState(state);\n }\n\n _render(props: any, state: any): void {\n const coreState = state?.core?.getState();\n if (!coreState) return;\n\n this.style.setProperty('--slider-fill', `${Math.round(coreState._fillWidth)}%`);\n this.style.setProperty('--slider-pointer', `${Math.round(coreState._pointerWidth)}%`);\n\n setAttributes(this, props);\n }\n}\n\nexport class TimeSliderTrackBase extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback(): void {\n // Set this element as the track element in the core TimeSlider\n const rootElement = this.closest('media-time-slider-root') as any;\n if (rootElement?._state?.core) {\n rootElement._state.core.setState({ _trackElement: this });\n }\n }\n\n _update(props: any, _state: any): void {\n setAttributes(this, props);\n\n if (props['data-orientation'] === 'horizontal') {\n this.style.width = '100%';\n this.style.removeProperty('height');\n } else {\n this.style.height = '100%';\n this.style.removeProperty('width');\n }\n }\n}\n\nexport class TimeSliderProgressBase extends HTMLElement {\n constructor() {\n super();\n this.style.position = 'absolute';\n this.style.width = 'var(--slider-fill, 0%)';\n this.style.height = '100%';\n }\n\n _update(props: any, _state: any): void {\n setAttributes(this, props);\n\n if (props['data-orientation'] === 'horizontal') {\n this.style.width = 'var(--slider-fill, 0%)';\n this.style.height = '100%';\n this.style.top = '0';\n this.style.removeProperty('bottom');\n } else {\n this.style.height = 'var(--slider-fill, 0%)';\n this.style.width = '100%';\n this.style.bottom = '0';\n this.style.removeProperty('top');\n }\n }\n}\n\nexport class TimeSliderPointerBase extends HTMLElement {\n constructor() {\n super();\n this.style.position = 'absolute';\n this.style.width = 'var(--slider-pointer, 0%)';\n this.style.height = '100%';\n }\n\n _update(props: any, _state: any): void {\n setAttributes(this, props);\n\n if (props['data-orientation'] === 'horizontal') {\n this.style.width = 'var(--slider-pointer, 0%)';\n this.style.height = '100%';\n this.style.top = '0';\n this.style.removeProperty('bottom');\n } else {\n this.style.height = 'var(--slider-pointer, 0%)';\n this.style.width = '100%';\n this.style.bottom = '0';\n this.style.removeProperty('top');\n }\n }\n}\n\nexport class TimeSliderThumbBase extends HTMLElement {\n constructor() {\n super();\n this.style.position = 'absolute';\n }\n\n _update(props: any, _state: any): void {\n setAttributes(this, props);\n\n // Set appropriate positioning based on orientation\n if (props['data-orientation'] === 'horizontal') {\n this.style.left = 'var(--slider-fill, 0%)';\n this.style.top = '50%';\n this.style.transform = 'translate(-50%, -50%)';\n } else {\n this.style.bottom = 'var(--slider-fill, 0%)';\n this.style.left = '50%';\n this.style.transform = 'translate(-50%, 50%)';\n }\n }\n}\n\nexport const useTimeSliderRootState: StateHook<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}> = {\n keys: timeSliderStateDefinition.keys,\n transform: (rawState, mediaStore) => ({\n ...timeSliderStateDefinition.stateTransform(rawState),\n ...timeSliderStateDefinition.createRequestMethods(mediaStore.dispatch),\n core: null,\n }),\n};\n\nexport const getTimeSliderTrackProps: PropsHook<Record<string, never>> = (_state, element) => {\n const rootElement = element.closest('media-time-slider-root') as any;\n return {\n 'data-orientation': rootElement?.orientation || 'horizontal',\n };\n};\n\nexport const getTimeSliderProgressProps: PropsHook<Record<string, never>> = (_state, element) => {\n const rootElement = element.closest('media-time-slider-root') as any;\n return {\n 'data-orientation': rootElement?.orientation || 'horizontal',\n };\n};\n\nexport const getTimeSliderPointerProps: PropsHook<Record<string, never>> = (_state, element) => {\n const rootElement = element.closest('media-time-slider-root') as any;\n return {\n 'data-orientation': rootElement?.orientation || 'horizontal',\n };\n};\n\nexport const getTimeSliderThumbProps: PropsHook<Record<string, never>> = (_state, element) => {\n const rootElement = element.closest('media-time-slider-root') as any;\n return {\n 'data-orientation': rootElement?.orientation || 'horizontal',\n };\n};\n\nexport const TimeSliderRoot: ConnectedComponentConstructor<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}> = toConnectedHTMLComponent(TimeSliderRootBase, useTimeSliderRootState, getTimeSliderRootProps, 'TimeSliderRoot');\n\nexport const TimeSliderTrack: ConnectedComponentConstructor<any> = toConnectedHTMLComponent(\n TimeSliderTrackBase,\n { keys: [], transform: () => ({}) },\n getTimeSliderTrackProps,\n 'TimeSliderTrack',\n);\n\nexport const TimeSliderProgress: ConnectedComponentConstructor<any> = toConnectedHTMLComponent(\n TimeSliderProgressBase,\n { keys: [], transform: () => ({}) },\n getTimeSliderProgressProps,\n 'TimeSliderProgress',\n);\n\nexport const TimeSliderPointer: ConnectedComponentConstructor<any> = toConnectedHTMLComponent(\n TimeSliderPointerBase,\n { keys: [], transform: () => ({}) },\n getTimeSliderPointerProps,\n 'TimeSliderPointer',\n);\n\nexport const TimeSliderThumb: ConnectedComponentConstructor<any> = toConnectedHTMLComponent(\n TimeSliderThumbBase,\n { keys: [], transform: () => ({}) },\n getTimeSliderThumbProps,\n 'TimeSliderThumb',\n);\n\nexport const TimeSlider = Object.assign(\n {},\n {\n Root: TimeSliderRoot,\n Track: TimeSliderTrack,\n Progress: TimeSliderProgress,\n Pointer: TimeSliderPointer,\n Thumb: TimeSliderThumb,\n },\n) as {\n Root: typeof TimeSliderRoot;\n Track: typeof TimeSliderTrack;\n Progress: typeof TimeSliderProgress;\n Pointer: typeof TimeSliderPointer;\n Thumb: typeof TimeSliderThumb;\n};\n\nif (!globalThis.customElements.get('media-time-slider-root')) {\n globalThis.customElements.define('media-time-slider-root', TimeSliderRoot);\n}\n\nif (!globalThis.customElements.get('media-time-slider-track')) {\n globalThis.customElements.define('media-time-slider-track', TimeSliderTrack);\n}\n\nif (!globalThis.customElements.get('media-time-slider-progress')) {\n globalThis.customElements.define('media-time-slider-progress', TimeSliderProgress);\n}\n\nif (!globalThis.customElements.get('media-time-slider-pointer')) {\n globalThis.customElements.define('media-time-slider-pointer', TimeSliderPointer);\n}\n\nif (!globalThis.customElements.get('media-time-slider-thumb')) {\n globalThis.customElements.define('media-time-slider-thumb', TimeSliderThumb);\n}\n\nexport default TimeSlider;\n","import type { Placement } from '@floating-ui/dom';\nimport type { MediaContainer } from '@/media/media-container';\n\nimport { arrow, autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';\nimport { uniqueId } from '@videojs/utils';\n\nexport class MediaTooltipRoot extends HTMLElement {\n #open = false;\n #hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n #cleanup: (() => void) | null = null;\n #arrowElement: HTMLElement | null = null;\n #mousePosition = { x: 0, y: 0 };\n #transitionStatus: 'initial' | 'open' | 'close' | 'unmounted' = 'initial';\n\n constructor() {\n super();\n this.addEventListener('mouseenter', this);\n this.addEventListener('mouseleave', this);\n this.addEventListener('mousemove', this);\n }\n\n handleEvent(event: Event): void {\n if (event.type === 'mouseenter') {\n this.#handleMouseEnter();\n } else if (event.type === 'mouseleave') {\n this.#handleMouseLeave();\n } else if (event.type === 'mousemove') {\n this.#handleMouseMove(event as MouseEvent);\n }\n }\n\n connectedCallback(): void {\n this.#updateVisibility();\n }\n\n disconnectedCallback(): void {\n this.#clearHoverTimeout();\n this.#cleanup?.();\n\n this.#transitionStatus = 'unmounted';\n this.#updateVisibility();\n }\n\n static get observedAttributes(): string[] {\n return ['delay', 'close-delay', 'track-cursor-axis'];\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 trackCursorAxis(): 'x' | 'y' | 'both' | undefined {\n const value = this.getAttribute('track-cursor-axis');\n return value === 'x' || value === 'y' || value === 'both' ? value : undefined;\n }\n\n get #triggerElement(): MediaTooltipTrigger | null {\n return this.querySelector('media-tooltip-trigger') as MediaTooltipTrigger | null;\n }\n\n get #portalElement(): MediaTooltipPortal | null {\n return this.querySelector('media-tooltip-portal') as MediaTooltipPortal | null;\n }\n\n get #positionerElement(): MediaTooltipPositioner | null {\n return this.#portalElement?.querySelector('media-tooltip-positioner') as MediaTooltipPositioner | null;\n }\n\n get #popupElement(): MediaTooltipPopup | null {\n return this.#portalElement?.querySelector('media-tooltip-popup') as MediaTooltipPopup | 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.#transitionStatus = 'initial';\n requestAnimationFrame(() => {\n this.#transitionStatus = 'open';\n this.#updateVisibility();\n });\n } else {\n this.#transitionStatus = 'close';\n }\n\n this.#updateVisibility();\n\n if (open) {\n this.#setupFloating();\n } else {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n }\n\n #updateVisibility(): void {\n this.style.display = 'contents';\n\n if (this.#popupElement) {\n const placement = this.#positionerElement?.side ?? 'top';\n this.#popupElement.setAttribute('data-side', placement);\n\n this.#popupElement.toggleAttribute('data-starting-style', this.#transitionStatus === 'initial');\n this.#popupElement.toggleAttribute('data-open', this.#transitionStatus === 'initial' || this.#transitionStatus === 'open');\n this.#popupElement.toggleAttribute('data-ending-style', this.#transitionStatus === 'close' || this.#transitionStatus === 'unmounted');\n this.#popupElement.toggleAttribute('data-closed', this.#transitionStatus === 'close' || this.#transitionStatus === 'unmounted');\n }\n\n const triggerElement = this.#triggerElement?.firstElementChild as HTMLElement;\n if (triggerElement) {\n triggerElement.toggleAttribute('data-popup-open', this.#open);\n }\n }\n\n #setupFloating(): void {\n if (!this.#triggerElement || !this.#popupElement) return;\n\n const trigger = this.#triggerElement.firstElementChild as HTMLElement;\n const popup = this.#popupElement;\n\n if (!trigger || !popup) return;\n\n const placement = this.#positionerElement?.side ?? 'top';\n const sideOffset = this.#positionerElement?.sideOffset ?? 0;\n const collisionPadding = this.#positionerElement?.collisionPadding ?? 0;\n const mediaContainer = this.closest('media-container') as MediaContainer;\n\n this.#arrowElement = popup.querySelector('media-tooltip-arrow') as HTMLElement;\n\n const updatePosition = () => {\n const middleware = [\n offset(sideOffset),\n flip(),\n shift({\n boundary: mediaContainer,\n padding: collisionPadding,\n }),\n ];\n\n if (this.#arrowElement) {\n middleware.push(arrow({ element: this.#arrowElement }));\n }\n\n const referenceElement = this.trackCursorAxis\n ? {\n getBoundingClientRect: () => {\n const triggerRect = trigger.getBoundingClientRect();\n\n if (this.trackCursorAxis === 'x') {\n return {\n width: 0,\n height: 0,\n top: triggerRect.top,\n right: this.#mousePosition.x,\n bottom: triggerRect.bottom,\n left: this.#mousePosition.x,\n x: this.#mousePosition.x,\n y: triggerRect.top,\n };\n } else if (this.trackCursorAxis === 'y') {\n return {\n width: 0,\n height: 0,\n top: this.#mousePosition.y,\n right: triggerRect.right,\n bottom: this.#mousePosition.y,\n left: triggerRect.left,\n x: triggerRect.left,\n y: this.#mousePosition.y,\n };\n } else {\n // Track both axes (trackCursorAxis === 'both')\n return {\n width: 0,\n height: 0,\n top: this.#mousePosition.y,\n right: this.#mousePosition.x,\n bottom: this.#mousePosition.y,\n left: this.#mousePosition.x,\n x: this.#mousePosition.x,\n y: this.#mousePosition.y,\n };\n }\n },\n }\n : trigger;\n\n computePosition(referenceElement, popup, {\n placement,\n middleware,\n }).then(({ x, y, middlewareData, placement: computedPlacement }: { x: number; y: number; middlewareData: any; placement: Placement }) => {\n Object.assign(popup.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n\n popup.setAttribute('data-side', computedPlacement);\n\n if (this.#arrowElement && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n Object.assign(this.#arrowElement.style, {\n left: arrowX != null ? `${arrowX}px` : undefined,\n top: arrowY != null ? `${arrowY}px` : undefined,\n });\n }\n });\n };\n\n updatePosition();\n\n if (!this.trackCursorAxis) {\n this.#cleanup = autoUpdate(trigger, popup, updatePosition);\n }\n }\n\n #updatePosition(): void {\n if (this.#open && this.trackCursorAxis) {\n this.#setupFloating();\n }\n }\n\n #clearHoverTimeout(): void {\n if (this.#hoverTimeout) {\n clearTimeout(this.#hoverTimeout);\n this.#hoverTimeout = null;\n }\n }\n\n #handleMouseEnter(): void {\n this.#clearHoverTimeout();\n this.#hoverTimeout = globalThis.setTimeout(() => {\n this.#setOpen(true);\n }, this.delay);\n }\n\n #handleMouseLeave(): void {\n this.#clearHoverTimeout();\n this.#hoverTimeout = globalThis.setTimeout(() => {\n this.#setOpen(false);\n }, this.closeDelay);\n }\n\n #handleMouseMove(event: MouseEvent): void {\n if (this.trackCursorAxis) {\n this.#mousePosition = { x: event.clientX, y: event.clientY };\n\n if (this.#open) {\n this.#updatePosition();\n }\n }\n }\n}\n\nexport class MediaTooltipTrigger extends HTMLElement {\n connectedCallback(): void {\n this.style.display = 'contents';\n\n const triggerElement = this.firstElementChild as HTMLElement;\n if (triggerElement) {\n const mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes') {\n const rootElement = this.closest('media-tooltip-root') as MediaTooltipRoot;\n let popupElement = rootElement.querySelector('media-tooltip-popup') as MediaTooltipPopup;\n\n if (!popupElement) {\n const portalElement = rootElement.querySelector('media-tooltip-portal') as MediaTooltipPortal;\n if (!portalElement) {\n return;\n }\n\n popupElement = portalElement.querySelector('media-tooltip-popup') as MediaTooltipPopup;\n if (!popupElement) {\n return;\n }\n }\n\n const attributeName = mutation.attributeName;\n if (!attributeName || !attributeName.startsWith('data-')) {\n return;\n }\n\n const attributeValue = triggerElement.getAttribute(attributeName);\n if (attributeValue !== null) {\n popupElement.setAttribute(attributeName, attributeValue);\n } else {\n popupElement.removeAttribute(attributeName);\n }\n }\n });\n });\n\n mutationObserver.observe(triggerElement, {\n attributes: true,\n });\n }\n }\n}\n\nexport class MediaTooltipPortal extends HTMLElement {\n #portal: HTMLElement | null = null;\n\n connectedCallback(): void {\n this.style.display = 'contents';\n this.#setupPortal();\n }\n\n disconnectedCallback(): void {\n this.#cleanupPortal();\n }\n\n querySelector(selector: string): HTMLElement | null {\n return this.#portal?.querySelector(selector) ?? null;\n }\n\n #setupPortal(): void {\n const portalId = this.getAttribute('root-id') ?? '@default_portal_id';\n if (!portalId) return;\n\n /* @TODO We need to make sure portal logic is non-brittle longer term (CJP) */\n // NOTE: Hacky solution in part to ensure styling propogates from skin to container's baked in portal (TL;DR - Shadow DOM vs. Light DOM CSS) (CJP)\n const portalContainer\n = ((this.getRootNode() as ShadowRoot | Document).getElementById(portalId)\n ?? (this.getRootNode() as ShadowRoot | Document)\n .querySelector('media-container')\n ?.shadowRoot\n ?.getElementById(portalId))\n ? (this.getRootNode() as ShadowRoot | Document).querySelector('media-container')\n : undefined;\n if (!portalContainer) return;\n\n this.#portal = document.createElement('div');\n this.#portal.slot = 'portal';\n this.#portal.id = uniqueId();\n portalContainer.append(this.#portal);\n\n this.#portal.append(...this.children);\n }\n\n #cleanupPortal(): void {\n if (!this.#portal) return;\n\n // Move children back to the portal element\n this.append(...this.#portal.children);\n this.#portal.remove();\n this.#portal = null;\n }\n}\n\nexport class MediaTooltipPositioner extends HTMLElement {\n connectedCallback(): void {\n this.style.display = 'contents';\n\n const popup = this.firstElementChild as HTMLElement;\n if (popup) {\n Object.assign(popup.style, {\n position: 'absolute',\n top: '0',\n left: '0',\n });\n }\n }\n\n get side(): Placement {\n return (this.getAttribute('side') as Placement) ?? 'top';\n }\n\n get sideOffset(): number {\n return Number.parseInt(this.getAttribute('side-offset') ?? '0', 10);\n }\n\n get collisionPadding(): number {\n return Number.parseInt(this.getAttribute('collision-padding') ?? '0', 10);\n }\n}\n\nexport class MediaTooltipPopup extends HTMLElement {\n connectedCallback(): void {\n this.setAttribute('role', 'tooltip');\n }\n}\n\nexport class MediaTooltipArrow extends HTMLElement {\n connectedCallback(): void {\n this.setAttribute('aria-hidden', 'true');\n }\n}\n\nif (!globalThis.customElements.get('media-tooltip-root')) {\n globalThis.customElements.define('media-tooltip-root', MediaTooltipRoot);\n}\n\nif (!globalThis.customElements.get('media-tooltip-trigger')) {\n globalThis.customElements.define('media-tooltip-trigger', MediaTooltipTrigger);\n}\n\nif (!globalThis.customElements.get('media-tooltip-portal')) {\n globalThis.customElements.define('media-tooltip-portal', MediaTooltipPortal);\n}\n\nif (!globalThis.customElements.get('media-tooltip-positioner')) {\n globalThis.customElements.define('media-tooltip-positioner', MediaTooltipPositioner);\n}\n\nif (!globalThis.customElements.get('media-tooltip-popup')) {\n globalThis.customElements.define('media-tooltip-popup', MediaTooltipPopup);\n}\n\nif (!globalThis.customElements.get('media-tooltip-arrow')) {\n globalThis.customElements.define('media-tooltip-arrow', MediaTooltipArrow);\n}\n\nexport const Tooltip: {\n Root: typeof MediaTooltipRoot;\n Trigger: typeof MediaTooltipTrigger;\n Portal: typeof MediaTooltipPortal;\n Positioner: typeof MediaTooltipPositioner;\n Popup: typeof MediaTooltipPopup;\n Arrow: typeof MediaTooltipArrow;\n} = {\n Root: MediaTooltipRoot,\n Trigger: MediaTooltipTrigger,\n Portal: MediaTooltipPortal,\n Positioner: MediaTooltipPositioner,\n Popup: MediaTooltipPopup,\n Arrow: MediaTooltipArrow,\n};\n\nexport default Tooltip;\n","import type { ConnectedComponentConstructor, PropsHook, StateHook } from '../utils/component-factory';\n\nimport { VolumeSlider as CoreVolumeSlider } from '@videojs/core';\nimport { volumeSliderStateDefinition } from '@videojs/core/store';\n\nimport { setAttributes } from '@videojs/utils/dom';\nimport { toConnectedHTMLComponent } from '../utils/component-factory';\n\n/**\n * VolumeSlider Root props hook - equivalent to React's useVolumeSliderRootProps\n * Handles element attributes and properties based on state\n */\nexport const getVolumeSliderRootProps: PropsHook<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}> = (state, element) => {\n const volumeText = `${Math.round(state.muted ? 0 : state.volume * 100)}%`;\n\n const baseProps: Record<string, any> = {\n role: 'slider',\n tabindex: element.getAttribute('tabindex') ?? '0',\n 'data-muted': state.muted.toString(),\n 'data-volume-level': state.volumeLevel,\n 'data-orientation': (element as any).orientation || 'horizontal',\n 'aria-label': 'Volume',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'aria-valuetext': volumeText,\n 'aria-orientation': (element as any).orientation || 'horizontal',\n };\n\n return baseProps;\n};\n\n/**\n * VolumeSlider Root component - Main container with pointer event handling\n */\ninterface VolumeSliderRootState {\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}\n\nexport class VolumeSliderRootBase extends HTMLElement {\n static readonly observedAttributes: readonly string[] = ['orientation'];\n\n _state: VolumeSliderRootState | undefined;\n _core: CoreVolumeSlider | null = null;\n\n get volume(): number | undefined {\n return this._state?.volume;\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 get orientation(): 'horizontal' | 'vertical' {\n return (this.getAttribute('orientation') as 'horizontal' | 'vertical') || 'horizontal';\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, _newValue: string | null): void {\n if (name === 'orientation' && this._state) {\n this._render(getVolumeSliderRootProps(this._state, this), this._state);\n }\n }\n\n _update(_props: any, state: any): void {\n this._state = state;\n\n if (state && !this._core) {\n this._core = new CoreVolumeSlider();\n this._core.subscribe(() => this._render(getVolumeSliderRootProps(state, this), state));\n this._core.attach(this);\n state.core = this._core;\n }\n\n this._core?.setState(state);\n }\n\n _render(props: any, state: any): void {\n const coreState = state?.core?.getState();\n if (!coreState) return;\n\n this.style.setProperty('--slider-fill', `${coreState._fillWidth.toFixed(3)}%`);\n this.style.setProperty('--slider-pointer', `${coreState._pointerWidth.toFixed(3)}%`);\n\n props['aria-valuenow'] = coreState._fillWidth.toString();\n\n setAttributes(this, props);\n }\n}\n\n/**\n * VolumeSlider Track component - Track element that captures pointer events\n */\nexport class VolumeSliderTrackBase extends HTMLElement {\n constructor() {\n super();\n }\n\n connectedCallback(): void {\n // Set this element as the track element in the core VolumeSlider\n const rootElement = this.closest('media-volume-slider-root') as any;\n if (rootElement?._state?.core) {\n rootElement._state.core.setState({ _trackElement: this });\n }\n }\n\n _update(props: any, _state: any): void {\n setAttributes(this, props);\n\n if (props['data-orientation'] === 'horizontal') {\n this.style.width = '100%';\n this.style.removeProperty('height');\n } else {\n this.style.height = '100%';\n this.style.removeProperty('width');\n }\n }\n}\n\n/**\n * VolumeSlider Progress component - Shows current progress\n */\nexport class VolumeSliderProgressBase extends HTMLElement {\n constructor() {\n super();\n this.style.position = 'absolute';\n this.style.width = 'var(--slider-fill, 0%)';\n this.style.height = '100%';\n }\n\n _update(props: any, _state: any): void {\n setAttributes(this, props);\n\n if (props['data-orientation'] === 'horizontal') {\n this.style.width = 'var(--slider-fill, 0%)';\n this.style.height = '100%';\n this.style.top = '0';\n this.style.removeProperty('bottom');\n } else {\n this.style.height = 'var(--slider-fill, 0%)';\n this.style.width = '100%';\n this.style.bottom = '0';\n this.style.removeProperty('top');\n }\n }\n}\n\n/**\n * VolumeSlider Thumb component - Draggable thumb element\n */\nexport class VolumeSliderThumbBase extends HTMLElement {\n constructor() {\n super();\n this.style.position = 'absolute';\n }\n\n _update(props: any, _state: any): void {\n setAttributes(this, props);\n\n // Set appropriate positioning based on orientation\n if (props['data-orientation'] === 'horizontal') {\n this.style.left = 'var(--slider-fill, 0%)';\n this.style.top = '50%';\n this.style.transform = 'translate(-50%, -50%)';\n } else {\n this.style.bottom = 'var(--slider-fill, 0%)';\n this.style.left = '50%';\n this.style.transform = 'translate(-50%, 50%)';\n }\n }\n}\n\n/**\n * VolumeSlider Root state hook - equivalent to React's useVolumeSliderRootState\n * Handles media store state subscription and transformation\n */\nexport const useVolumeSliderRootState: StateHook<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}> = {\n keys: volumeSliderStateDefinition.keys,\n transform: (rawState, mediaStore) => ({\n ...volumeSliderStateDefinition.stateTransform(rawState),\n ...volumeSliderStateDefinition.createRequestMethods(mediaStore.dispatch),\n core: null,\n }),\n};\n\n/**\n * VolumeSlider Track props hook\n */\nexport const getVolumeSliderTrackProps: PropsHook<Record<string, never>> = (_state, element) => {\n const rootElement = element.closest('media-volume-slider-root') as any;\n return {\n 'data-orientation': rootElement?.orientation || 'horizontal',\n };\n};\n\n/**\n * VolumeSlider Progress props hook\n */\nexport const getVolumeSliderProgressProps: PropsHook<Record<string, never>> = (_state, element) => {\n const rootElement = element.closest('media-volume-slider-root') as any;\n return {\n 'data-orientation': rootElement?.orientation || 'horizontal',\n };\n};\n\n/**\n * VolumeSlider Thumb props hook\n */\nexport const getVolumeSliderThumbProps: PropsHook<Record<string, never>> = (_state, element) => {\n const rootElement = element.closest('media-volume-slider-root') as any;\n return {\n 'data-orientation': rootElement?.orientation || 'horizontal',\n };\n};\n\n/**\n * Connected VolumeSlider Root component using hook-style architecture\n */\nexport const VolumeSliderRoot: ConnectedComponentConstructor<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}> = toConnectedHTMLComponent(VolumeSliderRootBase, useVolumeSliderRootState, getVolumeSliderRootProps, 'VolumeSliderRoot');\n\n/**\n * Connected VolumeSlider Track component\n */\nexport const VolumeSliderTrack: ConnectedComponentConstructor<any> = toConnectedHTMLComponent(\n VolumeSliderTrackBase,\n { keys: [], transform: () => ({}) },\n getVolumeSliderTrackProps,\n 'VolumeSliderTrack',\n);\n\n/**\n * Connected VolumeSlider Progress component\n */\nexport const VolumeSliderProgress: ConnectedComponentConstructor<any> = toConnectedHTMLComponent(\n VolumeSliderProgressBase,\n { keys: [], transform: () => ({}) },\n getVolumeSliderProgressProps,\n 'VolumeSliderProgress',\n);\n\n/**\n * Connected VolumeSlider Thumb component\n */\nexport const VolumeSliderThumb: ConnectedComponentConstructor<any> = toConnectedHTMLComponent(\n VolumeSliderThumbBase,\n { keys: [], transform: () => ({}) },\n getVolumeSliderThumbProps,\n 'VolumeSliderThumb',\n);\n\n/**\n * Compound VolumeSlider component object\n */\nexport const VolumeSlider = Object.assign(\n {},\n {\n Root: VolumeSliderRoot,\n Track: VolumeSliderTrack,\n Progress: VolumeSliderProgress,\n Thumb: VolumeSliderThumb,\n },\n) as {\n Root: typeof VolumeSliderRoot;\n Track: typeof VolumeSliderTrack;\n Progress: typeof VolumeSliderProgress;\n Thumb: typeof VolumeSliderThumb;\n};\n\nif (!globalThis.customElements.get('media-volume-slider-root')) {\n globalThis.customElements.define('media-volume-slider-root', VolumeSliderRoot);\n}\n\nif (!globalThis.customElements.get('media-volume-slider-track')) {\n globalThis.customElements.define('media-volume-slider-track', VolumeSliderTrack);\n}\n\nif (!globalThis.customElements.get('media-volume-slider-progress')) {\n globalThis.customElements.define('media-volume-slider-progress', VolumeSliderProgress);\n}\n\nif (!globalThis.customElements.get('media-volume-slider-thumb')) {\n globalThis.customElements.define('media-volume-slider-thumb', VolumeSliderThumb);\n}\n\nexport default VolumeSlider;\n","import type { Constructor, CustomElement } from '@open-wc/context-protocol';\n\nimport { ConsumerMixin } from '@open-wc/context-protocol';\n\n/* @TODO We need to make sure portal logic is non-brittle longer term (CJP) */\nexport function getTemplateHTML() {\n return /* html */ `\n <slot name=\"media\"></slot>\n <slot></slot>\n <div id=\"@default_portal_id\" style={ position: absolute; zIndex: 10; }>\n <slot name=\"portal\"></slot>\n </div>\n `;\n}\n\nconst CustomElementConsumer: Constructor<CustomElement> = ConsumerMixin(HTMLElement);\n\nexport class MediaContainer extends CustomElementConsumer {\n static shadowRootOptions = { mode: 'open' as ShadowRootMode };\n static getTemplateHTML: () => string = getTemplateHTML;\n\n _mediaStore: any;\n _mediaSlot: HTMLSlotElement;\n _paused: boolean = true;\n contexts = {\n mediaStore: (mediaStore: any): void => {\n this._mediaStore = mediaStore;\n this._handleMediaSlotChange();\n this._registerContainerStateOwner();\n this._subscribeToPlayState();\n },\n };\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n this.attachShadow((this.constructor as typeof MediaContainer).shadowRootOptions);\n this.shadowRoot!.innerHTML = (this.constructor as typeof MediaContainer).getTemplateHTML();\n }\n\n this._mediaSlot = this.shadowRoot!.querySelector('slot[name=media]') as HTMLSlotElement;\n this._mediaSlot.addEventListener('slotchange', this._handleMediaSlotChange);\n\n // Add click handler for play/pause functionality\n this.addEventListener('click', this._handleClick);\n }\n\n connectedCallback(): void {\n super.connectedCallback?.();\n this._registerContainerStateOwner();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n this._unregisterContainerStateOwner();\n }\n\n _registerContainerStateOwner = (): void => {\n if (!this._mediaStore) return;\n this._mediaStore.dispatch({ type: 'containerstateownerchangerequest', detail: this });\n };\n\n _unregisterContainerStateOwner = (): void => {\n if (!this._mediaStore) return;\n this._mediaStore.dispatch({ type: 'containerstateownerchangerequest', detail: null });\n };\n\n _handleMediaSlotChange = (): void => {\n const media = this._mediaSlot.assignedElements({ flatten: true })[0];\n this._mediaStore.dispatch({ type: 'mediastateownerchangerequest', detail: media });\n };\n\n _handleClick = (event: Event): void => {\n if (!this._mediaStore) return;\n\n if (!['video', 'audio'].includes((event.target as HTMLElement).localName || '')) return;\n\n if (this._paused) {\n this._mediaStore.dispatch({ type: 'playrequest' });\n } else {\n this._mediaStore.dispatch({ type: 'pauserequest' });\n }\n };\n\n _subscribeToPlayState = (): void => {\n if (!this._mediaStore) return;\n\n // Subscribe to paused state changes\n this._mediaStore.subscribe((state: any) => {\n this._paused = state.paused ?? true;\n });\n };\n}\n\nif (!globalThis.customElements.get('media-container')) {\n // @ts-expect-error ts(2345)\n globalThis.customElements.define('media-container', MediaContainer);\n}\n","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> = ProviderMixin(HTMLElement);\n\nexport class MediaProvider extends ProviderHTMLElement {\n contexts = {\n mediaStore: (): MediaStore => {\n return createMediaStore();\n },\n };\n}\n\n// @ts-expect-error - fix types after (Rahim)\ncustomElements.define('media-provider', MediaProvider);\n","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 MediaSkin 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 MediaSkin).shadowRootOptions);\n this.shadowRoot!.innerHTML = (this.constructor as typeof MediaSkin).getTemplateHTML();\n }\n }\n}\n\nif (!customElements.get('media-skin')) {\n customElements.define('media-skin', MediaSkin);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-skin-CbuyuCb-.d.ts","names":["useCurrentTimeDisplayState: StateHook<{\n currentTime: number | undefined;\n duration: number | undefined;\n}>","getCurrentTimeDisplayProps: PropsHook<{\n currentTime: number | undefined;\n duration: number | undefined;\n}>","CurrentTimeDisplay: ConnectedComponentConstructor<CurrentTimeDisplayState>","useDurationDisplayState: StateHook<{\n duration: number | undefined;\n}>","getDurationDisplayProps: PropsHook<{\n duration: number | undefined;\n}>","DurationDisplay: ConnectedComponentConstructor<DurationDisplayState>","getFullscreenButtonState: StateHook<{ fullscreen: boolean }>","getFullscreenButtonProps: PropsHook<{ fullscreen: boolean }>","FullscreenButton: ConnectedComponentConstructor<FullscreenButtonState>","getMuteButtonState: StateHook<{\n muted: boolean;\n volumeLevel: string;\n}>","getMuteButtonProps: PropsHook<{\n muted: boolean;\n volumeLevel: string;\n}>","MuteButton: ConnectedComponentConstructor<MuteButtonState>","getPlayButtonState: StateHook<{ paused: boolean }>","getPlayButtonProps: PropsHook<{ paused: boolean }>","PlayButton: ConnectedComponentConstructor<PlayButtonState>","Popover: {\n Root: typeof MediaPopoverRoot;\n Trigger: typeof MediaPopoverTrigger;\n Portal: typeof MediaPopoverPortal;\n Positioner: typeof MediaPopoverPositioner;\n Popup: typeof MediaPopoverPopup;\n}","getTimeSliderRootProps: PropsHook<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}>","useTimeSliderRootState: StateHook<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}>","getTimeSliderTrackProps: PropsHook<Record<string, never>>","getTimeSliderProgressProps: PropsHook<Record<string, never>>","getTimeSliderPointerProps: PropsHook<Record<string, never>>","getTimeSliderThumbProps: PropsHook<Record<string, never>>","TimeSliderRoot: ConnectedComponentConstructor<{\n currentTime: number;\n duration: number;\n requestSeek: (time: number) => void;\n core: CoreTimeSlider | null;\n}>","TimeSliderTrack: ConnectedComponentConstructor<any>","TimeSliderProgress: ConnectedComponentConstructor<any>","TimeSliderPointer: ConnectedComponentConstructor<any>","TimeSliderThumb: ConnectedComponentConstructor<any>","Tooltip: {\n Root: typeof MediaTooltipRoot;\n Trigger: typeof MediaTooltipTrigger;\n Portal: typeof MediaTooltipPortal;\n Positioner: typeof MediaTooltipPositioner;\n Popup: typeof MediaTooltipPopup;\n Arrow: typeof MediaTooltipArrow;\n}","getVolumeSliderRootProps: PropsHook<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}>","useVolumeSliderRootState: StateHook<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}>","getVolumeSliderTrackProps: PropsHook<Record<string, never>>","getVolumeSliderProgressProps: PropsHook<Record<string, never>>","getVolumeSliderThumbProps: PropsHook<Record<string, never>>","VolumeSliderRoot: ConnectedComponentConstructor<{\n volume: number;\n muted: boolean;\n volumeLevel: string;\n requestVolumeChange: (volume: number) => void;\n core: CoreVolumeSlider | null;\n}>","VolumeSliderTrack: ConnectedComponentConstructor<any>","VolumeSliderProgress: ConnectedComponentConstructor<any>","VolumeSliderThumb: ConnectedComponentConstructor<any>","CustomElementConsumer: Constructor<CustomElement>","ProviderHTMLElement: Constructor<CustomElement>"],"sources":["../src/utils/component-factory.ts","../src/components/media-current-time-display.ts","../src/components/media-duration-display.ts","../src/components/media-fullscreen-button.ts","../src/components/media-mute-button.ts","../src/components/media-play-button.ts","../src/components/media-popover.ts","../src/components/media-time-slider.ts","../src/components/media-tooltip.ts","../src/components/media-volume-slider.ts","../src/media/media-container.ts","../src/media/media-provider.ts","../src/media/media-skin.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/skins/default.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import "../index-BtSCzZKn.js";
|
|
2
|
-
import { t as MediaSkin } from "../media-skin-CbuyuCb-.js";
|
|
3
|
-
|
|
4
|
-
//#region src/skins/default/index.d.ts
|
|
5
|
-
|
|
6
|
-
declare function getTemplateHTML(): string;
|
|
7
|
-
declare class MediaSkinDefault extends MediaSkin {
|
|
8
|
-
static getTemplateHTML: () => string;
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { MediaSkinDefault, getTemplateHTML };
|
|
12
|
-
//# sourceMappingURL=default.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","names":[],"sources":["../../src/skins/default/index.ts"],"sourcesContent":[],"mappings":";;;;;iBAegB,eAAA,CAAA;cAkXH,gBAAA,SAAyB,SAAA"}
|