diff --git a/.babelrc b/.babelrc index 89fc744927..861a7d12f2 100644 --- a/.babelrc +++ b/.babelrc @@ -3,6 +3,18 @@ [ "@babel/preset-env", { + "targets": [ + "last 3 major versions", + "Firefox ESR", + "Chrome >= 53", + "not dead", + "not ie 11", + "not baidu 7", + "not and_qq 11", + "not and_uc 12", + "not op_mini all" + ], + "bugfixes": true, "loose": true } ] diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000000..be059124aa --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,11 @@ +# Browsers that we support + +last 3 major versions +Firefox ESR +Chrome >= 53 +not dead +not ie 11 +not baidu 7 +not and_qq 11 +not and_uc 12 +not op_mini all diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 9f6fd185d9..0000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,31 +0,0 @@ -## Description -Briefly describe the issue. -Include a [reduced test case](https://css-tricks.com/reduced-test-cases/), we have a [starter template](https://codepen.io/gkatsev/pen/GwZegv?editors=1000#0) on JSBin you can use. - -## Steps to reproduce -Explain in detail the exact steps necessary to reproduce the issue. -1. -2. -3. - -## Results -### Expected -Please describe what you expected to see. - -### Actual -Please describe what actually happened. - -### Error output -If there are any errors at all, please include them here. - -## Additional Information -Please include any additional information necessary here. Including the following: -### versions -#### videojs -what version of videojs does this occur with? -#### browsers -what browser are affected? -#### OSes -what platforms (operating systems and devices) are affected? -### plugins -are any videojs plugins being used on the page? If so, please list them below. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 0000000000..a89d04c203 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,78 @@ +name: General issue +description: Report a general issue with Video.js +labels: "needs: triage" +body: + - type: markdown + attributes: + value: | + Thank you for using Video.js and contributing by opening an issue. Before you start, please check this list: + * If you are not reporting a bug, but want to ask a general question, use [discussions](https://github.com/videojs/video.js/discussions) instead. + * Check the [FAQ](https://videojs.com/guides/faqs) and [troubleshooting guides](https://videojs.com/guides/troubleshooting). + * If there is an existing open issue for exactly the same problem, comment there instead. + * However, be careful not to comment on old and closed issues. Your new comment is unlikely to be noticed. + * Take care to make sure it is really the exact same issue. Conflating tangentially related issues is counterproductive. If in doubt, open as a new issue. + * Add useful new information, such as a new reproducible case to help narrow down the issue. + * If the issue is with a specific plugin, it's generally better to open an issue on the plugin repository instead. + * Please do take the time to give detailed information, and include a test case. A detailed issue with actionable information will get a better response than a vague anecdote. + - type: textarea + id: description + attributes: + label: Description + description: | + Please give a detailed description of the issue. + What did you expect to happen, and what happened? + validations: + required: true + - type: input + id: testcase + validations: + required: true + attributes: + label: Reduced test case + description: | + Please add a URL to a [reduced test case](https://stackoverflow.com/help/minimal-reproducible-example) where the issue can be observed. We have a [starter template](https://codepen.io/gkatsev/pen/GwZegv?editors=1000#0) on Codepen. + **Without a test case** it's unlikely your issue can be actioned. + For a playback problem, including the stream URL is _essential._ + placeholder: https:// + - type: textarea + id: str + attributes: + label: Steps to reproduce + description: Detailed steps to reproduce the issue. + value: | + 1. + 2. + 3. + validations: + required: true + - type: textarea + id: errors + attributes: + label: Errors + description: If there is an error displayed in the player or in the console, please include them here. + - type: input + id: version + attributes: + label: What version of Video.js are you using? + description: Please include all relevant versions. If not using the latest version, explain why not in the description above. + placeholder: e.g. vX.Y.Z + validations: + required: true + - type: input + id: plugins + attributes: + label: Video.js plugins used. + - type: input + id: browser + attributes: + label: What browser(s) including version(s) does this occur with? + placeholder: e.g. Chrome 100 + validations: + required: true + - type: input + id: os + attributes: + label: What OS(es) and version(s) does this occur with? + placeholder: e.g. Windows 11 + validations: + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 0b6b880545..657703f717 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -9,8 +9,10 @@ Please list the specific changes involved in this pull request. ## Requirements Checklist - [ ] Feature implemented / Bug fixed - [ ] If necessary, more likely in a feature request than a bug fix - - [ ] Change has been verified in an actual browser (Chome, Firefox, IE) + - [ ] Change has been verified in an actual browser (Chrome, Firefox, IE) - [ ] Unit Tests updated or fixed - [ ] Docs/guides updated - [ ] Example created ([starter template on JSBin](https://codepen.io/gkatsev/pen/GwZegv?editors=1000#0)) + - [ ] Has no DOM changes which impact accessiblilty or trigger warnings (e.g. Chrome issues tab) + - [ ] Has no changes to JSDoc which cause `npm run docs:api` to error - [ ] Reviewed by Two Core Contributors diff --git a/.github/actions/pr-titles.js b/.github/actions/pr-titles.js new file mode 100644 index 0000000000..35b76047d1 --- /dev/null +++ b/.github/actions/pr-titles.js @@ -0,0 +1,13 @@ +const core = require('@actions/core'); +const github = require('@actions/github'); + +(async function run() { + const title = github.context.payload.pull_request?.title; + const titleRegex = /^(chore|ci|docs|feat|fix|refactor|revert|test)(\(.+\))?!?: (.+)/; + + if (!!title.match(titleRegex)) { + core.info('Pull request title is OK'); + } else { + core.setFailed('Please use conventional commit style for the PR title so the merged change appears in the changelog. See https://www.conventionalcommits.org/.'); + } +})(); diff --git a/.github/config.yml b/.github/config.yml index 6e298ec548..f01798c2c0 100644 --- a/.github/config.yml +++ b/.github/config.yml @@ -30,3 +30,5 @@ newPRWelcomeComment: | firstPRMergeComment: > Congrats on merging your first pull request! 🎉🎉🎉 +# Prevent issues being created without using the template +blank_issues_enabled: false diff --git a/.github/stale.yml b/.github/stale.yml index beda70e0d7..dded02a44e 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -11,6 +11,7 @@ daysUntilClose: 7 exemptLabels: - pinned - a11y + - "Affects: a11y" - confirmed - security - "[Status] Maybe Later" @@ -22,7 +23,7 @@ exemptProjects: false exemptMilestones: false # Label to use when marking as stale -staleLabel: wontfix +staleLabel: outdated # Comment to post when marking as stale. Set to `false` to disable markComment: > diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..c61b30ecc5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,72 @@ +name: ci + +on: [push, pull_request] + +jobs: + should-skip: + continue-on-error: true + runs-on: ubuntu-latest + # Map a step output to a job output + outputs: + should-skip-job: ${{steps.skip-check.outputs.should_skip}} + steps: + - id: skip-check + uses: fkirc/skip-duplicate-actions@v5.3.1 + with: + github_token: ${{github.token}} + + ci: + needs: should-skip + if: ${{needs.should-skip.outputs.should-skip-job != 'true' || github.ref == 'refs/heads/main'}} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + test-type: [unit, coverage] + env: + BROWSER_STACK_USERNAME: ${{secrets.BROWSER_STACK_USERNAME}} + BROWSER_STACK_ACCESS_KEY: ${{secrets.BROWSER_STACK_ACCESS_KEY}} + CI_TEST_TYPE: ${{matrix.test-type}} + runs-on: ${{matrix.os}} + steps: + - name: checkout code + uses: actions/checkout@v4 + + - name: read node version from .nvmrc + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + shell: bash + id: nvm + + - name: update apt cache on linux w/o browserstack + run: sudo apt-get update + + - name: install ffmpeg/pulseaudio for firefox on linux w/o browserstack + run: sudo apt-get install ffmpeg pulseaudio + + - name: start pulseaudio for firefox on linux w/o browserstack + run: pulseaudio -D + + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: '${{steps.nvm.outputs.NVMRC}}' + cache: npm + + # turn off the default setup-node problem watchers... + - run: echo "::remove-matcher owner=eslint-compact::" + - run: echo "::remove-matcher owner=eslint-stylish::" + - run: echo "::remove-matcher owner=tsc::" + + - name: npm install + run: npm i --prefer-offline --no-audit + + - name: run npm test + run: npm run test + + - name: coverage + uses: codecov/codecov-action@v4 + with: + token: ${{secrets.CODECOV_TOKEN}} + files: './test/dist/coverage/coverage-final.json' + fail_ci_if_error: true + if: ${{startsWith(env.CI_TEST_TYPE, 'coverage')}} diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml new file mode 100644 index 0000000000..bb58205146 --- /dev/null +++ b/.github/workflows/lock.yml @@ -0,0 +1,22 @@ +name: 'Lock Threads' + +on: + schedule: + - cron: '0 1 * * 1,4' + workflow_dispatch: + +permissions: + issues: write + +concurrency: + group: lock + +jobs: + action: + if: ${{ github.repository_owner == 'videojs' }} + runs-on: ubuntu-latest + steps: + - uses: dessant/lock-threads@v4 + with: + issue-inactive-days: '60' + process-only: 'issues' diff --git a/.github/workflows/pr-titles.yml b/.github/workflows/pr-titles.yml new file mode 100644 index 0000000000..6ec3a61f6b --- /dev/null +++ b/.github/workflows/pr-titles.yml @@ -0,0 +1,22 @@ +name: PR title check + +on: + pull_request: + types: [opened, reopened, edited, synchronize] + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.number }} + cancel-in-progress: true + +jobs: + pr-title-lint: + name: Should follow conventional commit spec + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '20' + - run: npm i @actions/core @actions/github + - run: node .github/actions/pr-titles.js diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..1ceec61d61 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,98 @@ +name: release +on: + push: + tags: + # match semver versions + - "v[0-9]+.[0-9]+.[0-9]+" + # match semver pre-releases + - "v[0-9]+.[0-9]+.[0-9]+-*" +jobs: + release: + env: + NETLIFY_BASE: 'videojs-preview.netlify.app' + runs-on: ubuntu-latest + permissions: + contents: write # Required for creating a release + discussions: write # Required for creating a release + id-token: write # Required for provenance + packages: write # Required for publishing + steps: + - name: Checkout + uses: actions/checkout@v3 + # We need to fetch the entire history as conventional-changelog needs + # access to any number of git commits to build the changelog. + with: + fetch-depth: 0 + + - name: read node version from .nvmrc + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + shell: bash + id: nvm + + - name: setup node + uses: actions/setup-node@v3 + with: + node-version: '${{steps.nvm.outputs.NVMRC}}' + cache: npm + # this line is required for the setup-node action to be able to run the npm publish below. + registry-url: 'https://registry.npmjs.org' + + - name: npm install + run: npm i --prefer-offline --no-audit + + # publish runs build for us via a prepublishOnly script + - name: npm release + run: npm publish --provenance --tag next + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: get current changelog + run: node -e "console.log(require('./build/current-changelog.js')())" > CHANGELOG-LATEST.md + + - name: get dashed package version for netlify + run: echo "VERSION=$(node -e "process.stdout.write(require('./package.json').version.split('.').join('-'))")" >> $GITHUB_OUTPUT + id: get-version + shell: bash + if: env.NETLIFY_BASE != '' + + - name: add netlify preview to release notes + run: | + echo "" >> CHANGELOG-LATEST.md + echo "[netlify preview for this version](https://v${{steps.get-version.outputs.VERSION}}--${{env.NETLIFY_BASE}})" >> CHANGELOG-LATEST.md + if: env.NETLIFY_BASE != '' + + - name: Create Github release + uses: softprops/action-gh-release@v1 + with: + body_path: CHANGELOG-LATEST.md + token: ${{github.token}} + prerelease: true + files: dist/*.zip + discussion_category_name: Releases + + deploy: + needs: release + runs-on: ubuntu-latest + environment: Deploy + env: + VJS_VERSION: ${{ github.event.head_commit.message }} + S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + S3_ACCESS: ${{ secrets.AWS_S3_ACCESS }} + S3_KEY: ${{ secrets.AWS_S3_KEY }} + steps: + - name: setup node + uses: actions/setup-node@v3 + + - name: npm install video.js + run: npm install "video.js@$VJS_VERSION" + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_S3_SECRET }} + aws-region: us-east-1 + + - name: Copy files to the CDN with the AWS CLI + run: | + aws s3 cp node_modules/video.js/dist s3://${S3_BUCKET}/${S3_KEY}/${VJS_VERSION}/ --acl ${S3_ACCESS} --recursive diff --git a/.gitignore b/.gitignore index f8efa50217..ba6e2ee836 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ build/files/* build/temp/* docs/api/* +docs/apistyles dev.html projects .zenflow-log @@ -34,3 +35,10 @@ es5/* .idea/ core.js +core.es.js + +# Ignore Chinese clones for now. +lang/zh-Han*.json + +# netlify deploy +deploy/ diff --git a/.jsdoc.js b/.jsdoc.js new file mode 100644 index 0000000000..748795bb23 --- /dev/null +++ b/.jsdoc.js @@ -0,0 +1,70 @@ +"use strict"; + +const pkg = require('./package.json'); + +module.exports = { + source: { + include: ['src/js/'], + includePattern: '.js$', + }, + opts: { + destination: 'docs/api', + readme: 'docs/index.md', + template: 'node_modules/clean-jsdoc-theme', + package: '', + recurse: true, + encoding: 'utf8', + theme_opts: { + homepageTitle: 'Video.js API docs', + menu: [ + { + title: 'Video.js website', + link: 'https://videojs.com', + class: 'link-vjs', + }, + { + title: `v${pkg.version} source`, + link: 'https://github.com/videojs/video.js', + class: 'link-gh', + }, + { + title: 'Twitter', + link: 'https://twitter.com/videojs', + class: 'link-tw', + }, + ], + favicon: 'https://videojs.com/favicon.ico', + footer: + 'Video.js is a free and open source HTML5 video player. © Brightcove, Inc. View license', + include_css: ['./build/docs/styles/videojs.css'], + displayModuleHeade: true, + meta: [ + { + name: 'name', + content: 'Video.js API documentation', + }, + { + name: 'description', + content: + `Generated API documentation for the latest version of Video.js (${pkg.version}).`, + }, + ], + }, + }, + templates: { + default: { + staticFiles: { + include: ['build/docs/'], + }, + }, + }, + plugins: [ + 'plugins/markdown', + 'build/jsdoc-typeof-plugin', + 'build/jsdoc-workarounds', + ], + markdown: { + tags: ['example'], + idInHeadings: true, + }, +}; diff --git a/.jsdoc.json b/.jsdoc.json deleted file mode 100644 index dd3e8070ac..0000000000 --- a/.jsdoc.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "source": { - "include": [ "src/js/" ], - "includePattern": ".js$" - }, - "opts": { - "destination": "docs/api", - "readme": "docs/index.md", - "template": "node_modules/tui-jsdoc-template", - "package": "package.json", - "recurse": true, - "tutorials": "docs/guides", - "encoding": "utf8" - }, - "templates": { - "default": { - "staticFiles": { - "include": ["build/docs/"] - } - }, - "logo": { - "url": "https://videojs.com/img/logo.png", - "height": "30px", - "width": "214px" - }, - "name": "Video.js Documentation", - "tabNames": { - "tutorials": "Guides" - }, - "footerText": "Video.js is a free and open source HTML5 video player. © Brightcove, Inc. View license
", - "css": [ - "styles/videojs.css", - "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" - ] - }, - "plugins": ["plugins/markdown"], - "markdown": { - "tags": ["example"], - "idInHeadings": true - } -} diff --git a/.npmignore b/.npmignore index 3f605a5676..90669108ee 100644 --- a/.npmignore +++ b/.npmignore @@ -5,3 +5,4 @@ dist/video-js-*.zip !es5/** !src/css/** !core.js +!core.es.js diff --git a/.nvmrc b/.nvmrc index b009dfb9d9..8351c19397 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -lts/* +14 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5b39f9b41c..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,33 +0,0 @@ -dist: xenial -language: node_js -cache: npm -before_install: - - npm install -g greenkeeper-lockfile@1 -before_script: - - greenkeeper-lockfile-update -after_script: greenkeeper-lockfile-upload -after_failure: - - npm ls --depth=1 -after_success: - - npm run assets -addons: - chrome: stable -services: - - xvfb - -env: - global: - - secure: K6JpKwMkfNaJix3Bb0tLjVMzHMJgtBXdd/dvfw1BMb9DCBpd81PqXbDs7yXCddUxnUPTBPxZCrQgWsw71Wn+qEoIG5MU3uOT5A2rBbx/yZonVAGv5ed/9w0xk0OzO383CmPMFqwqtp9YmdmqGjQBkYXVXJjTvNTOAExFSdhO+3U= - - secure: GIbhjUJapvC70nIZVlhVyK+3KAD2TVKpiY/q412OO7V2izbvcM1tvU3LBoMZbROzrt5TT84tCoJDvHnrpL0OvxPwrzL5CUU7h4UTxhTOyQkEinbYAnWlW9wdrvtdczsEvANkFPqBZ53B3hVHZHMLOG8QRWaTBicF68vSHEJFqb4= - -notifications: - irc: - channels: - - chat.freenode.net#videojs - use_notice: true - on_success: never - webhooks: - - http://pam.videojs.com/savage/travis - slack: - secure: LrF8K6mCYWlUt6SvdbGHazyQZSk/opKoiB/wgoGYaGc9+3wYXkVexY0WkO1m6wBKhUqXRAMVMFszr1wqKgdcxtItmFMMj8HqTLI1MVqgKqYX4Ux3CnEHJQiwxIk0aVL7lHLsZTXV/2Y0QIOYmAnCrgy46klETrk0ZuXf5okpu2Q= - diff --git a/CHANGELOG.md b/CHANGELOG.md index a5c43aa451..3e42dc6fba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,2005 @@ + +## [8.23.3](https://github.com/videojs/video.js/compare/v8.23.2...v8.23.3) (2025-04-16) + +### Bug Fixes + +* update release workflow `discussion` permission ([#9031](https://github.com/videojs/video.js/issues/9031)) ([1a09554](https://github.com/videojs/video.js/commit/1a09554)) + + +## [8.23.2](https://github.com/videojs/video.js/compare/v8.23.1...v8.23.2) (2025-04-16) + +### Bug Fixes + +* update release workfow permissions ([#9027](https://github.com/videojs/video.js/issues/9027)) ([e0b2521](https://github.com/videojs/video.js/commit/e0b2521)) + + +## [8.23.1](https://github.com/videojs/video.js/compare/v8.23.0...v8.23.1) (2025-04-15) + +### Bug Fixes + +* controlText for text track modal ([#8989](https://github.com/videojs/video.js/issues/8989)) ([751ac56](https://github.com/videojs/video.js/commit/751ac56)) +* only change focus from BPB if not tap or mouse click ([#9015](https://github.com/videojs/video.js/issues/9015)) ([76aadfe](https://github.com/videojs/video.js/commit/76aadfe)) +* update text-track-cue styles on useractive ([#9023](https://github.com/videojs/video.js/issues/9023)) ([8e1889c](https://github.com/videojs/video.js/commit/8e1889c)) + + +# [8.23.0](https://github.com/videojs/video.js/compare/v8.22.0...v8.23.0) (2025-03-11) + +### Features + +* Improve SmartTV scrubbing behavior ([#8988](https://github.com/videojs/video.js/issues/8988)) ([77c99d2](https://github.com/videojs/video.js/commit/77c99d2)) +* toJSON methods for text track serialization ([#8998](https://github.com/videojs/video.js/issues/8998)) ([1c282a3](https://github.com/videojs/video.js/commit/1c282a3)) + +### Bug Fixes + +* Improve getFileExtension() readability and handle leading dot extensions. ([#8980](https://github.com/videojs/video.js/issues/8980)) ([5b9795d](https://github.com/videojs/video.js/commit/5b9795d)) + +### Code Refactoring + +* **types:** track and track list types generation ([#8978](https://github.com/videojs/video.js/issues/8978)) ([8842d37](https://github.com/videojs/video.js/commit/8842d37)), closes [#8486](https://github.com/videojs/video.js/issues/8486) [/github.com/videojs/video.js/pull/8486/files#r1635782771](https://github.com//github.com/videojs/video.js/pull/8486/files/issues/r1635782771) + + +# [8.22.0](https://github.com/videojs/video.js/compare/v8.21.1...v8.22.0) (2025-02-05) + +### Features + +* Make seek bar keyboard skip increment configurable ([#8919](https://github.com/videojs/video.js/issues/8919)) ([f2311c8](https://github.com/videojs/video.js/commit/f2311c8)), closes [1000#0](https://github.com/1000/issues/0) +* **package:** Update to [@videojs](https://github.com/videojs)/http-streaming v3.17.0 ([#8976](https://github.com/videojs/video.js/issues/8976)) ([88aa1e7](https://github.com/videojs/video.js/commit/88aa1e7)) + +### Bug Fixes + +* hide mouse tooltip on touch devices when not scrubbing ([#8945](https://github.com/videojs/video.js/issues/8945)) ([4661aa7](https://github.com/videojs/video.js/commit/4661aa7)) +* registering new player component ([#8932](https://github.com/videojs/video.js/issues/8932)) ([f8e9bfc](https://github.com/videojs/video.js/commit/f8e9bfc)), closes [#8925](https://github.com/videojs/video.js/issues/8925) + +### Chores + +* Enable supply chain security through npm provenance attestation ([#8911](https://github.com/videojs/video.js/issues/8911)) ([c1a8cbf](https://github.com/videojs/video.js/commit/c1a8cbf)), closes [1000#0](https://github.com/1000/issues/0) +* Update sass and change colour syntax ([#8894](https://github.com/videojs/video.js/issues/8894)) ([55bb0fd](https://github.com/videojs/video.js/commit/55bb0fd)) + + +## [8.21.1](https://github.com/videojs/video.js/compare/v8.21.0...v8.21.1) (2024-12-05) + +### Chores + +* **lang:** update zh-TW translations ([#8929](https://github.com/videojs/video.js/issues/8929)) ([b6cec4f](https://github.com/videojs/video.js/commit/b6cec4f)), closes [1000#0](https://github.com/1000/issues/0) +* update Occitan locale file ([#8927](https://github.com/videojs/video.js/issues/8927)) ([a0ca168](https://github.com/videojs/video.js/commit/a0ca168)) + + +# [8.21.0](https://github.com/videojs/video.js/compare/v8.20.0...v8.21.0) (2024-12-05) + +### Features + +* Add option to disable seeking while scrubbing on mobile ([#8903](https://github.com/videojs/video.js/issues/8903)) ([57d6ab6](https://github.com/videojs/video.js/commit/57d6ab6)) + +### Bug Fixes + +* update vhs version ([#8930](https://github.com/videojs/video.js/issues/8930)) ([f87a699](https://github.com/videojs/video.js/commit/f87a699)) + +### Chores + +* update VHS version ([#8933](https://github.com/videojs/video.js/issues/8933)) ([a7ba9f2](https://github.com/videojs/video.js/commit/a7ba9f2)) + + +# [8.20.0](https://github.com/videojs/video.js/compare/v8.19.2...v8.20.0) (2024-11-19) + +### Chores + +* Correct changelog for 8.19.2 ([#8918](https://github.com/videojs/video.js/issues/8918)) ([964c40e](https://github.com/videojs/video.js/commit/964c40e)) +* **package:** Update [@videojs](https://github.com/videojs)/http-streaming to 3.16.0 ([#8921](https://github.com/videojs/video.js/issues/8921)) ([7420467](https://github.com/videojs/video.js/commit/7420467)), closes [1000#0](https://github.com/1000/issues/0) + + +## [8.19.2](https://github.com/videojs/video.js/compare/v8.19.1...v8.19.2) (2024-11-14) + +### Bug Fixes + +* change http to https in examples ([#8905](https://github.com/videojs/video.js/issues/8905)) ([079cbe1](https://github.com/videojs/video.js/commit/079cbe1)) +* Fix Escape handling in menus ([#8916](https://github.com/videojs/video.js/issues/8916)) ([d0cf139](https://github.com/videojs/video.js/commit/d0cf139)) +* **text-track-settings:** localization not correctly applied ([#8904](https://github.com/videojs/video.js/issues/8904)) ([ecef37c](https://github.com/videojs/video.js/commit/ecef37c)) + + +## [8.19.1](https://github.com/videojs/video.js/compare/v8.19.0...v8.19.1) (2024-10-10) + +### Chores + +* **package:** update http-streaming to v3.15.0 ([#8889](https://github.com/videojs/video.js/issues/8889)) ([84f4905](https://github.com/videojs/video.js/commit/84f4905)) +* update mpd-parser to v1.3.1 ([#8888](https://github.com/videojs/video.js/issues/8888)) ([7c17d75](https://github.com/videojs/video.js/commit/7c17d75)) + + +# [8.19.0](https://github.com/videojs/video.js/compare/v8.18.0...v8.19.0) (2024-10-09) + +### Features + +* Add methods to add and remove