From 20e45cff8ea75b7d5285ebb68c6bfaca7e78034a Mon Sep 17 00:00:00 2001 From: booxing1999 Date: Sat, 2 Aug 2025 17:53:19 +0800 Subject: [PATCH 1/4] feat: support pause=[1,2,3,'end'] in SlidevVideo --- README.md | 121 ++++++--------------- dev.md | 88 +++++++++++++++ packages/client/builtin/SlidevVideo.vue | 137 +++++++++++++++--------- 3 files changed, 206 insertions(+), 140 deletions(-) create mode 100644 dev.md diff --git a/README.md b/README.md index 705f342bdc..44d2dda9d1 100644 --- a/README.md +++ b/README.md @@ -1,103 +1,44 @@ -
-

- -Slidev - -

- -

-Presentation slides for developers 🧑‍💻👩‍💻👨‍💻 -

- -

-NPM version -NPM Downloads -Docs & Demos -Themes -
-GitHub stars -

- -

- Video Preview | Documentation -

- -
- - - - -
-
-Made possible by my Sponsor Program 💖
- -
-
- -## Features - -- 📝 [**Markdown-based**](https://sli.dev/guide/syntax) - focus on content and use your favorite editor -- 🧑‍💻 [**Developer Friendly**](https://sli.dev/guide/syntax#code-blocks) - built-in code highlighting, live coding, etc. -- 🎨 [**Themable**](https://sli.dev/resources/theme-gallery) - theme can be shared and used with npm packages -- 🌈 [**Stylish**](https://sli.dev/guide/syntax#embedded-styles) - on-demand utilities via [UnoCSS](https://github.com/unocss/unocss). -- 🤹 [**Interactive**](https://sli.dev/custom/directory-structure#components) - embedding Vue components seamlessly -- 🎙 [**Presenter Mode**](https://sli.dev/guide/ui#presenter-mode) - use another window, or even your phone to control your slides -- 🎨 [**Drawing**](https://sli.dev/features/drawing) - draw and annotate on your slides -- 🧮 [**LaTeX**](https://sli.dev/features/latex) - built-in LaTeX math equations support -- 📰 [**Diagrams**](https://sli.dev/guide/syntax#diagrams) - creates diagrams using textual descriptions with [Mermaid](https://mermaid.js.org/) -- 🌟 [**Icons**](https://sli.dev/features/icons) - access to icons from any icon set directly -- 💻 [**Editor**](https://sli.dev/guide/index#editor) - integrated editor, or the [VSCode extension](https://sli.dev/features/vscode-extension) -- 🎥 [**Recording**](https://sli.dev/features/recording) - built-in recording and camera view -- 📤 [**Portable**](https://sli.dev/guide/exporting) - export into PDF, PNGs, or PPTX -- ⚡️ [**Fast**](https://vitejs.dev) - instant reloading powered by [Vite](https://vitejs.dev) -- 🛠 [**Hackable**](https://sli.dev/custom/) - using Vite plugins, Vue components, or any npm packages - -## Getting Started - -### Try it Online ⚡️ - -[sli.dev/new](https://sli.dev/new) - -[![](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://sli.dev/new) - -### Init Project Locally - -Install [Node.js >=18](https://nodejs.org/) and run the following command: +# 🎬 SlidevVideo Playback Demo + +A simple demo showcasing **multi-step controlled video playback** using `pause` prop. + +透過 `pause` 參數控制影片分段播放,支援數值與 `'end'`,可用於教學投影片互動控制。 + +--- + +## 🚀 How to Run ```bash -npm init slidev +pnpm install +pnpm dev ``` -Documentation: -**[English](https://sli.dev)** | [中文文档](https://cn.sli.dev) | [Français](https://fr.sli.dev) | [Español](https://es.sli.dev) | [Русский](https://ru.sli.dev) | [Português-BR](https://br.sli.dev) +Then open [http://localhost:3030](http://localhost:3030) + +--- -Discord: [chat.sli.dev](https://chat.sli.dev) +## 🌐 Slide Demos | 投影片展示 -For a full example, you can check the [demo](https://github.com/slidevjs/slidev/blob/main/demo) folder, which is also the source file for [my previous talk](https://antfu.me/posts/composable-vue-vueday-2021). +- 👉 [Home Page](/dev.md) -## Tech Stack +--- -- [Vite](https://vitejs.dev) - An extremely fast frontend tooling -- [Vue 3](https://v3.vuejs.org/) powered [Markdown](https://daringfireball.net/projects/markdown/syntax) - Focus on the content while having the power of HTML and Vue components whenever needed -- [UnoCSS](https://github.com/unocss/unocss) - On-demand utility-first CSS engine, style your slides at ease -- [Shiki](https://github.com/shikijs/shiki), [Monaco Editor](https://github.com/Microsoft/monaco-editor) - First-class code snippets support with live coding capability -- [RecordRTC](https://recordrtc.org) - Built-in recording and camera view -- [VueUse](https://vueuse.org) family - [`@vueuse/core`](https://github.com/vueuse/vueuse), [`@vueuse/motion`](https://github.com/vueuse/motion), etc. -- [Iconify](https://iconify.design/) - Icon sets collection. -- [Drauu](https://github.com/antfu/drauu) - Drawing and annotations support -- [KaTeX](https://katex.org/) - LaTeX math rendering. -- [Mermaid](https://mermaid-js.github.io/mermaid) - Textual Diagrams. +## 💡 Example -## Sponsors +```vue + + + +``` + +Will play **3.5s**, then pause, then **2.5s**, then pause, then **3s**, then pause, then end. -This project is made possible by all the sponsors supporting my work: +--- -

- - Logos from Sponsors - -

+## 🧩 Credit -## License +Based on [`Slidev`](https://github.com/slidevjs/slidev), with custom `SlidevVideo` component. -MIT License © 2021 [Anthony Fu](https://github.com/antfu) +``` + +``` diff --git a/dev.md b/dev.md new file mode 100644 index 0000000000..77f97414f8 --- /dev/null +++ b/dev.md @@ -0,0 +1,88 @@ +# 🎬 SlidevVideo Demo + +> A demo for multi-step controlled playback using `pause=[1, 2, 3, 'end']` +> 使用 `pause=[1, 2, 3, 'end']` 控制多段播放的展示 + +
+
+
+ +### 🌐 Choose Language | 選擇語言 + +English +
+中文 + +--- + +# SlidevVideo 1.0 Test: Pause with Decimal Durations + +This slide demonstrates the new `pause` feature in `SlidevVideo`: + +- ✅ Supports multiple controlled playback segments +- ✅ Accepts decimal values for pause durations (e.g., `3.5` seconds) +- ✅ `'end'` is optional — without it, the last segment will stop naturally + +--- + +## Playback Test Example + + + + + +--- + +### ⏱️ Expected Playback Flow + +1. First click: plays 3.5 seconds, then auto-pauses +2. Second click: plays 2.5 seconds, then auto-pauses +3. Third click: plays 3 seconds, then auto-pauses +4. Fourth click: continues playing until the video ends + +--- + +### Notes + +- `'end'` is optional — if omitted, the last segment just ends playback naturally +- To force a final uninterrupted play-to-end segment, append `'end'` manually: + ```html + + ``` + +--- + +# 測試 SlidevVideo 1.0:Pause 支援小數點時間 + +這頁展示了 `SlidevVideo` 新增的 `pause` 支援: + +- ✅ 多段播放控制:每點一次播放指定秒數 +- ✅ 支援小數點秒數(例如 `3.5` 秒) +- ✅ 可選擇是否加入 `'end'`,若未加則播放到最後自動停止 + +--- + +## 播放測試範例 + + + + + +--- + +### ⏱️ 播放節奏預期 + +1. 點第一下:播放 3.5 秒後自動暫停 +2. 點第二下:播放 2.5 秒後自動暫停 +3. 點第三下:播放 3 秒後自動暫停 +4. 第四下:會繼續播放到結尾(或結束整段) + +--- + +### 備註 + +- 可以不必加 `'end'`,預設最後一段播放完就不會卡住 +- 若要強制到最後自動播放到結尾,可明確加 `'end'`: + ```html + + ``` diff --git a/packages/client/builtin/SlidevVideo.vue b/packages/client/builtin/SlidevVideo.vue index 0be737ffb8..08e081e8bc 100644 --- a/packages/client/builtin/SlidevVideo.vue +++ b/packages/client/builtin/SlidevVideo.vue @@ -1,74 +1,111 @@ From 849ff7a27f9536c3a26a6993fb7b4e8d6550a964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Js=E4=BF=A0?= <122903403+Jeffrey0117@users.noreply.github.com> Date: Sat, 2 Aug 2025 18:01:28 +0800 Subject: [PATCH 2/4] del br --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 44d2dda9d1..7dbaeae631 100644 --- a/README.md +++ b/README.md @@ -40,5 +40,3 @@ Will play **3.5s**, then pause, then **2.5s**, then pause, then **3s**, then pau Based on [`Slidev`](https://github.com/slidevjs/slidev), with custom `SlidevVideo` component. ``` - -``` From ec1e80ed56d95101a8093c79f55f715b59e25ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Js=E4=BF=A0?= <122903403+Jeffrey0117@users.noreply.github.com> Date: Sat, 2 Aug 2025 18:02:19 +0800 Subject: [PATCH 3/4] del garbege --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 7dbaeae631..c10f42b172 100644 --- a/README.md +++ b/README.md @@ -38,5 +38,3 @@ Will play **3.5s**, then pause, then **2.5s**, then pause, then **3s**, then pau ## 🧩 Credit Based on [`Slidev`](https://github.com/slidevjs/slidev), with custom `SlidevVideo` component. - -``` From e61afc0d05c69f292ce3f1444fe9df82c6322758 Mon Sep 17 00:00:00 2001 From: booxing1999 Date: Mon, 18 Aug 2025 14:47:06 +0800 Subject: [PATCH 4/4] docs: add SlidevVideo controlled playback demo --- README.md | 121 ++++++++++++++----- dev.md | 88 -------------- docs/guide/video-playback.md | 24 ++++ packages/client/setup/main.ts | 15 ++- playground/slides.md | 5 + pnpm-lock.yaml | 218 +++++++++++++++++++++++++++++----- 6 files changed, 318 insertions(+), 153 deletions(-) delete mode 100644 dev.md create mode 100644 docs/guide/video-playback.md create mode 100644 playground/slides.md diff --git a/README.md b/README.md index 44d2dda9d1..d1a91c3677 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,103 @@ -# 🎬 SlidevVideo Playback Demo - -A simple demo showcasing **multi-step controlled video playback** using `pause` prop. - -透過 `pause` 參數控制影片分段播放,支援數值與 `'end'`,可用於教學投影片互動控制。 - ---- - -## 🚀 How to Run +
+

+ +Slidev + +

+ +

+Presentation slides for developers 🧑‍💻👩‍💻👨‍💻 +

+ +

+NPM version +NPM Downloads +Docs & Demos +Themes +
+GitHub stars +

+ +

+ Video Preview | Documentation +

+ +
+ + + + +
+
+Made possible by my Sponsor Program 💖
+ +
+
+ +## Features + +- 📝 [**Markdown-based**](https://sli.dev/guide/syntax) - focus on content and use your favorite editor +- 🧑‍💻 [**Developer Friendly**](https://sli.dev/guide/syntax#code-blocks) - built-in code highlighting, live coding, etc. +- 🎨 [**Themable**](https://sli.dev/resources/theme-gallery) - theme can be shared and used with npm packages +- 🌈 [**Stylish**](https://sli.dev/guide/syntax#embedded-styles) - on-demand utilities via [UnoCSS](https://github.com/unocss/unocss). +- 🤹 [**Interactive**](https://sli.dev/custom/directory-structure#components) - embedding Vue components seamlessly +- 🎙 [**Presenter Mode**](https://sli.dev/guide/ui#presenter-mode) - use another window, or even your phone to control your slides +- 🎨 [**Drawing**](https://sli.dev/features/drawing) - draw and annotate on your slides +- 🧮 [**LaTeX**](https://sli.dev/features/latex) - built-in LaTeX math equations support +- 📰 [**Diagrams**](https://sli.dev/guide/syntax#diagrams) - creates diagrams using textual descriptions with [Mermaid](https://mermaid.js.org/) +- 🌟 [**Icons**](https://sli.dev/features/icons) - access to icons from any icon set directly +- 💻 [**Editor**](https://sli.dev/guide/index#editor) - integrated editor, or the [VSCode extension](https://sli.dev/features/vscode-extension) +- 🎥 [**Recording**](https://sli.dev/features/recording) - built-in recording and camera view +- 📤 [**Portable**](https://sli.dev/guide/exporting) - export into PDF, PNGs, or PPTX +- ⚡️ [**Fast**](https://vitejs.dev) - instant reloading powered by [Vite](https://vitejs.dev) +- 🛠 [**Hackable**](https://sli.dev/custom/) - using Vite plugins, Vue components, or any npm packages + +## Getting Started + +### Try it Online ⚡️ + +[sli.dev/new](https://sli.dev/new) + +[![](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://sli.dev/new) + +### Init Project Locally + +Install [Node.js >=18](https://nodejs.org/) and run the following command: ```bash -pnpm install -pnpm dev +npm init slidev ``` -Then open [http://localhost:3030](http://localhost:3030) - ---- +Documentation: +**[English](https://sli.dev)** | [中文文档](https://cn.sli.dev) | [Français](https://fr.sli.dev) | [Español](https://es.sli.dev) | [Русский](https://ru.sli.dev) | [Português-BR](https://br.sli.dev) -## 🌐 Slide Demos | 投影片展示 +Discord: [chat.sli.dev](https://chat.sli.dev) -- 👉 [Home Page](/dev.md) +For a full example, you can check the [demo](https://github.com/slidevjs/slidev/blob/main/demo) folder, which is also the source file for [my previous talk](https://antfu.me/posts/composable-vue-vueday-2021). ---- +## Tech Stack -## 💡 Example +- [Vite](https://vitejs.dev) - An extremely fast frontend tooling +- [Vue 3](https://v3.vuejs.org/) powered [Markdown](https://daringfireball.net/projects/markdown/syntax) - Focus on the content while having the power of HTML and Vue components whenever needed +- [UnoCSS](https://github.com/unocss/unocss) - On-demand utility-first CSS engine, style your slides at ease +- [Shiki](https://github.com/shikijs/shiki), [Monaco Editor](https://github.com/Microsoft/monaco-editor) - First-class code snippets support with live coding capability +- [RecordRTC](https://recordrtc.org) - Built-in recording and camera view +- [VueUse](https://vueuse.org) family - [`@vueuse/core`](https://github.com/vueuse/vueuse), [`@vueuse/motion`](https://github.com/vueuse/motion), etc. +- [Iconify](https://iconify.design/) - Icon sets collection. +- [Drauu](https://github.com/antfu/drauu) - Drawing and annotations support +- [KaTeX](https://katex.org/) - LaTeX math rendering. +- [Mermaid](https://mermaid-js.github.io/mermaid) - Textual Diagrams. -```vue - - - -``` - -Will play **3.5s**, then pause, then **2.5s**, then pause, then **3s**, then pause, then end. +## Sponsors ---- +This project is made possible by all the sponsors supporting my work: -## 🧩 Credit +

+ + Logos from Sponsors + +

-Based on [`Slidev`](https://github.com/slidevjs/slidev), with custom `SlidevVideo` component. +## License -``` - -``` +MIT License © 2021 [Anthony Fu](https://github.com/antfu) diff --git a/dev.md b/dev.md deleted file mode 100644 index 77f97414f8..0000000000 --- a/dev.md +++ /dev/null @@ -1,88 +0,0 @@ -# 🎬 SlidevVideo Demo - -> A demo for multi-step controlled playback using `pause=[1, 2, 3, 'end']` -> 使用 `pause=[1, 2, 3, 'end']` 控制多段播放的展示 - -
-
-
- -### 🌐 Choose Language | 選擇語言 - -English -
-中文 - ---- - -# SlidevVideo 1.0 Test: Pause with Decimal Durations - -This slide demonstrates the new `pause` feature in `SlidevVideo`: - -- ✅ Supports multiple controlled playback segments -- ✅ Accepts decimal values for pause durations (e.g., `3.5` seconds) -- ✅ `'end'` is optional — without it, the last segment will stop naturally - ---- - -## Playback Test Example - - - - - ---- - -### ⏱️ Expected Playback Flow - -1. First click: plays 3.5 seconds, then auto-pauses -2. Second click: plays 2.5 seconds, then auto-pauses -3. Third click: plays 3 seconds, then auto-pauses -4. Fourth click: continues playing until the video ends - ---- - -### Notes - -- `'end'` is optional — if omitted, the last segment just ends playback naturally -- To force a final uninterrupted play-to-end segment, append `'end'` manually: - ```html - - ``` - ---- - -# 測試 SlidevVideo 1.0:Pause 支援小數點時間 - -這頁展示了 `SlidevVideo` 新增的 `pause` 支援: - -- ✅ 多段播放控制:每點一次播放指定秒數 -- ✅ 支援小數點秒數(例如 `3.5` 秒) -- ✅ 可選擇是否加入 `'end'`,若未加則播放到最後自動停止 - ---- - -## 播放測試範例 - - - - - ---- - -### ⏱️ 播放節奏預期 - -1. 點第一下:播放 3.5 秒後自動暫停 -2. 點第二下:播放 2.5 秒後自動暫停 -3. 點第三下:播放 3 秒後自動暫停 -4. 第四下:會繼續播放到結尾(或結束整段) - ---- - -### 備註 - -- 可以不必加 `'end'`,預設最後一段播放完就不會卡住 -- 若要強制到最後自動播放到結尾,可明確加 `'end'`: - ```html - - ``` diff --git a/docs/guide/video-playback.md b/docs/guide/video-playback.md new file mode 100644 index 0000000000..fa8e29927f --- /dev/null +++ b/docs/guide/video-playback.md @@ -0,0 +1,24 @@ +# SlidevVideo Controlled Playback + +This demo shows how to use the `pause` prop on `` to control playback in steps. + +## Example + +```vue + +``` + +The video will: + +1. Pause at **1s** +2. Pause at **2s** +3. Pause at **3s** +4. Pause at the **end** + +## Usage + +Use `pause` to sync video playback with your slide steps or narration. + +```vue + +``` diff --git a/packages/client/setup/main.ts b/packages/client/setup/main.ts index 8e2abc73b1..1f79a99e67 100644 --- a/packages/client/setup/main.ts +++ b/packages/client/setup/main.ts @@ -3,12 +3,17 @@ import type { App } from 'vue' import setups from '#slidev/setups/main' import TwoSlashFloatingVue from '@shikijs/vitepress-twoslash/client' import { createHead } from '@unhead/vue/client' -import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router' +import { + createRouter, + createWebHashHistory, + createWebHistory, +} from 'vue-router' import { createVClickDirectives } from '../modules/v-click' import { createVDragDirective } from '../modules/v-drag' import { createVMarkDirective } from '../modules/v-mark' import { createVMotionDirectives } from '../modules/v-motion' import setupRoutes from '../setup/routes' +import 'video.js/dist/video-js.css' import '#slidev/styles' @@ -16,7 +21,10 @@ export default async function setupMain(app: App) { function setMaxHeight() { // disable the mobile navbar scroll // see https://css-tricks.com/the-trick-to-viewport-units-on-mobile/ - document.documentElement.style.setProperty('--vh', `${window.innerHeight * 0.01}px`) + document.documentElement.style.setProperty( + '--vh', + `${window.innerHeight * 0.01}px`, + ) } setMaxHeight() window.addEventListener('resize', setMaxHeight) @@ -41,6 +49,5 @@ export default async function setupMain(app: App) { router, } - for (const setup of setups) - await setup(context) + for (const setup of setups) await setup(context) } diff --git a/playground/slides.md b/playground/slides.md new file mode 100644 index 0000000000..f823c2c1e8 --- /dev/null +++ b/playground/slides.md @@ -0,0 +1,5 @@ +# 測試 SlidevVideo + + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 462d37276d..c6af3ed679 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -821,6 +821,9 @@ importers: unocss: specifier: catalog:prod version: 66.3.3(postcss@8.5.6)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.8.3)) + video.js: + specifier: ^8.23.3 + version: 8.23.3 vue: specifier: catalog:frontend version: 3.5.18(typescript@5.8.3) @@ -938,7 +941,7 @@ importers: version: 3.7.0 debug: specifier: catalog:prod - version: 4.4.1(supports-color@8.1.1) + version: 4.4.1(supports-color@5.5.0) fast-deep-equal: specifier: catalog:prod version: 3.1.3 @@ -2604,6 +2607,19 @@ packages: peerDependencies: vite: ^7.0.6 + '@videojs/http-streaming@3.17.2': + resolution: {integrity: sha512-VBQ3W4wnKnVKb/limLdtSD2rAd5cmHN70xoMf4OmuDd0t2kfJX04G+sfw6u2j8oOm2BXYM9E1f4acHruqKnM1g==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + video.js: ^8.19.0 + + '@videojs/vhs-utils@4.1.1': + resolution: {integrity: sha512-5iLX6sR2ownbv4Mtejw6Ax+naosGvoT9kY+gcuHzANyUZZ+4NpeNdKMUhb6ag0acYej1Y7cmr/F2+4PrggMiVA==} + engines: {node: '>=8', npm: '>=5'} + + '@videojs/xhr@2.7.0': + resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==} + '@vitejs/plugin-vue-jsx@5.0.1': resolution: {integrity: sha512-X7qmQMXbdDh+sfHUttXokPD0cjPkMFoae7SgbkF9vi3idGUKmxLcnU2Ug49FHwiKXebfzQRIm5yK3sfCJzNBbg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2863,6 +2879,10 @@ packages: peerDependencies: vue: ^3.5.0 + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2873,6 +2893,9 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + aes-decrypter@4.0.2: + resolution: {integrity: sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw==} + agent-base@7.1.1: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} @@ -3652,6 +3675,9 @@ packages: dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -4282,6 +4308,9 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -4535,6 +4564,9 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -4939,6 +4971,9 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + m3u8-parser@7.2.0: + resolution: {integrity: sha512-CRatFqpjVtMiMaKXxNvuI3I++vUumIXVVT/JpCpdU/FynV/ceVw1qpPyyBNindL+JlPMSesx+WX1QJaZEJSaMQ==} + magic-string-stack@1.0.0: resolution: {integrity: sha512-oTPJ8IL5FdB4bhiLeBc7HzrK6cbtcHuZeaNK0Uim9wkl/PnVH1gYConD+dmqJTCyMJ5NlsvICHLPD+ItGsJzyA==} @@ -5163,6 +5198,9 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -5221,6 +5259,10 @@ packages: monaco-editor@0.52.2: resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} + mpd-parser@1.3.1: + resolution: {integrity: sha512-1FuyEWI5k2HcmhS1HkKnUAQV7yFPfXPht2DnRRGtoiiAAW+ESTbtEXIDpRkwdU+XyrQuwrIym7UkoPKsZ0SyFw==} + hasBin: true + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -5241,6 +5283,11 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mux.js@7.1.0: + resolution: {integrity: sha512-NTxawK/BBELJrYsZThEulyUMDVlLizKdxyAsMuzoCD1eFj97BVaA8D/CvKsKu6FOLYkFojN5CbM9h++ZTZtknA==} + engines: {node: '>=8', npm: '>=5'} + hasBin: true + nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} @@ -5503,6 +5550,10 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + pkcs7@1.0.4: + resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==} + hasBin: true + pkg-types@1.3.0: resolution: {integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==} @@ -6504,6 +6555,21 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + video.js@8.23.3: + resolution: {integrity: sha512-Toe0VLlDZcUhiaWfcePS1OEdT3ATfktm0hk/PELfD7zUoPDHeT+cJf/wZmCy5M5eGVwtGUg25RWPCj1L/1XufA==} + + videojs-contrib-quality-levels@4.1.0: + resolution: {integrity: sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA==} + engines: {node: '>=16', npm: '>=8'} + peerDependencies: + video.js: ^8 + + videojs-font@4.2.0: + resolution: {integrity: sha512-YPq+wiKoGy2/M7ccjmlvwi58z2xsykkkfNMyIg4xb7EZQQNwB71hcSsB3o75CqQV7/y5lXkXhI/rsGAS7jfEmQ==} + + videojs-vtt.js@0.15.5: + resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==} + vite-dev-rpc@1.1.0: resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} peerDependencies: @@ -7053,7 +7119,7 @@ snapshots: '@babel/traverse': 7.27.7 '@babel/types': 7.28.2 convert-source-map: 2.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -7192,7 +7258,7 @@ snapshots: '@babel/parser': 7.28.0 '@babel/template': 7.27.2 '@babel/types': 7.28.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -7399,7 +7465,7 @@ snapshots: '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -7413,7 +7479,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -7519,7 +7585,7 @@ snapshots: '@antfu/install-pkg': 1.1.0 '@antfu/utils': 8.1.0 '@iconify/types': 2.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) globals: 15.15.0 kolorist: 1.8.0 local-pkg: 1.1.1 @@ -8213,7 +8279,7 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) eslint: 9.32.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: @@ -8223,7 +8289,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) '@typescript-eslint/types': 8.38.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -8242,7 +8308,7 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) eslint: 9.32.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 @@ -8257,7 +8323,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -8289,7 +8355,7 @@ snapshots: '@typescript/vfs@1.6.1(typescript@5.8.3)': dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -8456,6 +8522,28 @@ snapshots: transitivePeerDependencies: - vue + '@videojs/http-streaming@3.17.2(video.js@8.23.3)': + dependencies: + '@babel/runtime': 7.27.4 + '@videojs/vhs-utils': 4.1.1 + aes-decrypter: 4.0.2 + global: 4.4.0 + m3u8-parser: 7.2.0 + mpd-parser: 1.3.1 + mux.js: 7.1.0 + video.js: 8.23.3 + + '@videojs/vhs-utils@4.1.1': + dependencies: + '@babel/runtime': 7.27.4 + global: 4.4.0 + + '@videojs/xhr@2.7.0': + dependencies: + '@babel/runtime': 7.27.4 + global: 4.4.0 + is-function: 1.0.2 + '@vitejs/plugin-vue-jsx@5.0.1(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.8.3))': dependencies: '@babel/core': 7.27.7 @@ -8799,15 +8887,24 @@ snapshots: dependencies: vue: 3.5.18(typescript@5.8.3) + '@xmldom/xmldom@0.8.10': {} + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 acorn@8.15.0: {} + aes-decrypter@4.0.2: + dependencies: + '@babel/runtime': 7.27.4 + '@videojs/vhs-utils': 4.1.1 + global: 4.4.0 + pkcs7: 1.0.4 + agent-base@7.1.1: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -9657,6 +9754,8 @@ snapshots: domhandler: 5.0.3 entities: 4.5.0 + dom-walk@0.1.2: {} + domelementtype@2.3.0: {} domhandler@5.0.3: @@ -9872,7 +9971,7 @@ snapshots: '@es-joy/jsdoccomment': 0.52.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint: 9.32.0(jiti@2.5.1) espree: 10.4.0 @@ -9948,7 +10047,7 @@ snapshots: eslint-plugin-toml@0.12.0(eslint@9.32.0(jiti@2.5.1)): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) eslint: 9.32.0(jiti@2.5.1) eslint-compat-utils: 0.6.5(eslint@9.32.0(jiti@2.5.1)) lodash: 4.17.21 @@ -9999,7 +10098,7 @@ snapshots: eslint-plugin-yml@1.18.0(eslint@9.32.0(jiti@2.5.1)): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint: 9.32.0(jiti@2.5.1) eslint-compat-utils: 0.6.5(eslint@9.32.0(jiti@2.5.1)) @@ -10040,7 +10139,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -10397,6 +10496,11 @@ snapshots: dependencies: ini: 2.0.0 + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 + globals@11.12.0: {} globals@14.0.0: {} @@ -10532,7 +10636,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -10550,7 +10654,7 @@ snapshots: https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -10633,6 +10737,8 @@ snapshots: dependencies: get-east-asian-width: 1.2.0 + is-function@1.0.2: {} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -10914,7 +11020,7 @@ snapshots: dependencies: chalk: 5.4.1 commander: 14.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) lilconfig: 3.1.3 listr2: 8.3.3 micromatch: 4.0.8 @@ -11021,6 +11127,12 @@ snapshots: lz-string@1.5.0: {} + m3u8-parser@7.2.0: + dependencies: + '@babel/runtime': 7.27.4 + '@videojs/vhs-utils': 4.1.1 + global: 4.4.0 + magic-string-stack@1.0.0: dependencies: '@ampproject/remapping': 2.3.0 @@ -11399,7 +11511,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) decode-named-character-reference: 1.1.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -11446,6 +11558,10 @@ snapshots: mimic-response@4.0.0: {} + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 + min-indent@1.0.1: {} minimatch@10.0.3: @@ -11501,6 +11617,13 @@ snapshots: monaco-editor@0.52.2: {} + mpd-parser@1.3.1: + dependencies: + '@babel/runtime': 7.27.4 + '@videojs/vhs-utils': 4.1.1 + '@xmldom/xmldom': 0.8.10 + global: 4.4.0 + mri@1.2.0: optional: true @@ -11514,6 +11637,11 @@ snapshots: mute-stream@0.0.8: {} + mux.js@7.1.0: + dependencies: + '@babel/runtime': 7.27.4 + global: 4.4.0 + nano-spawn@1.0.2: {} nanoid@3.3.11: {} @@ -11772,6 +11900,10 @@ snapshots: pify@2.3.0: {} + pkcs7@1.0.4: + dependencies: + '@babel/runtime': 7.27.4 + pkg-types@1.3.0: dependencies: confbox: 0.1.8 @@ -12088,7 +12220,7 @@ snapshots: '@babel/types': 7.28.2 ast-kit: 2.1.1 birpc: 2.5.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) dts-resolver: 2.1.1 get-tsconfig: 4.10.1 rolldown: 1.0.0-beta.11-commit.f051675 @@ -12580,7 +12712,7 @@ snapshots: ansis: 4.1.0 cac: 6.7.14 chokidar: 4.0.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 @@ -12789,7 +12921,7 @@ snapshots: dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/utils': 2.3.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) local-pkg: 1.1.1 unplugin: 2.3.5 optionalDependencies: @@ -12805,7 +12937,7 @@ snapshots: unplugin-vue-components@28.8.0(@babel/parser@7.28.0)(@nuxt/kit@3.13.0(rollup@4.44.1))(vue@3.5.18(typescript@5.8.3)): dependencies: chokidar: 3.6.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) local-pkg: 1.1.1 magic-string: 0.30.17 mlly: 1.7.4 @@ -12902,6 +13034,32 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 + video.js@8.23.3: + dependencies: + '@babel/runtime': 7.27.4 + '@videojs/http-streaming': 3.17.2(video.js@8.23.3) + '@videojs/vhs-utils': 4.1.1 + '@videojs/xhr': 2.7.0 + aes-decrypter: 4.0.2 + global: 4.4.0 + m3u8-parser: 7.2.0 + mpd-parser: 1.3.1 + mux.js: 7.1.0 + videojs-contrib-quality-levels: 4.1.0(video.js@8.23.3) + videojs-font: 4.2.0 + videojs-vtt.js: 0.15.5 + + videojs-contrib-quality-levels@4.1.0(video.js@8.23.3): + dependencies: + global: 4.4.0 + video.js: 8.23.3 + + videojs-font@4.2.0: {} + + videojs-vtt.js@0.15.5: + dependencies: + global: 4.4.0 + vite-dev-rpc@1.1.0(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0)): dependencies: birpc: 2.5.0 @@ -12915,7 +13073,7 @@ snapshots: vite-node@3.2.4(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0): dependencies: cac: 6.7.14 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 2.0.3 vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0) @@ -12936,7 +13094,7 @@ snapshots: vite-plugin-inspect@11.3.2(@nuxt/kit@3.13.0(rollup@4.44.1))(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0)): dependencies: ansis: 4.1.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) error-stack-parser-es: 1.0.5 ohash: 2.0.11 open: 10.2.0 @@ -12952,7 +13110,7 @@ snapshots: vite-plugin-remote-assets@2.0.0(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0)): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) magic-string: 0.30.17 node-fetch-native: 1.6.6 ohash: 2.0.11 @@ -12971,7 +13129,7 @@ snapshots: vite-plugin-vue-server-ref@1.0.0(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.8.3)): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) klona: 2.0.6 mlly: 1.7.4 ufo: 1.5.4 @@ -13086,7 +13244,7 @@ snapshots: '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 chai: 5.2.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 @@ -13179,7 +13337,7 @@ snapshots: vue-eslint-parser@10.2.0(eslint@9.32.0(jiti@2.5.1)): dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.1(supports-color@5.5.0) eslint: 9.32.0(jiti@2.5.1) eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1