diff --git a/README.md b/README.md index d56e3be5..02869708 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ ⚡ Oh! Another HTML5 video player. +[Documentation](https://oplayer.vercel.app) | +[Donate](#support) | [Checkout the demo](https://oplayer.vercel.app/ohls.html?playlist=%5B%7B"title"%3A"Disney%27s+Oceans+-+MP4"%2C"src"%3A"https%3A%2F%2Fvjs.zencdn.net%2Fv%2Foceans.mp4"%2C"poster"%3A"https%3A%2F%2Fvjs.zencdn.net%2Fv%2Foceans.png"%2C"duration"%3A"00%3A46"%7D%2C%7B"title"%3A"Big+Buck+Bunny+-+HLS"%2C"src"%3A"https%3A%2F%2Ftest-streams.mux.dev%2Fx36xhzz%2Fx36xhzz.m3u8"%2C"poster"%3A"https%3A%2F%2Fd2zihajmogu5jn.cloudfront.net%2Fbig-buck-bunny%2Fbbb.png"%2C"duration"%3A"10%3A34"%7D%2C%7B"title"%3A"Big+Buck+Bunny+-+DASH"%2C"src"%3A"https%3A%2F%2Fdash.akamaized.net%2Fakamai%2Fbbb_30fps%2Fbbb_30fps.mpd"%2C"poster"%3A"https%3A%2F%2Fd2zihajmogu5jn.cloudfront.net%2Fbig-buck-bunny%2Fbbb.png"%2C"duration"%3A"10%3A34"%7D%5D) + [![npm](https://img.shields.io/npm/v/@oplayer/core?style=flat-square)](https://www.npmjs.com/package/@oplayer/core) [![npm dt](https://img.shields.io/npm/dm/@oplayer/core?style=flat-square)](https://www.npmjs.com/package/@oplayer/core) [![jsdelivr](https://data.jsdelivr.com/v1/package/npm/@oplayer/core/badge)](https://www.jsdelivr.com/package/npm/@oplayer/core) @@ -9,11 +12,20 @@ ![oplayer](./oplayer.png) -## Documentation +## Feature -- https://oplayer.vercel.app -- https://ohplayer.netlify.app -- [Standalone Demo](https://oplayer.vercel.app/ohls.html?playlist=%5B%7B"title"%3A"Disney%27s+Oceans+-+MP4"%2C"src"%3A"https%3A%2F%2Fvjs.zencdn.net%2Fv%2Foceans.mp4"%2C"poster"%3A"https%3A%2F%2Fvjs.zencdn.net%2Fv%2Foceans.png"%2C"duration"%3A"00%3A46"%7D%2C%7B"title"%3A"Big+Buck+Bunny+-+HLS"%2C"src"%3A"https%3A%2F%2Ftest-streams.mux.dev%2Fx36xhzz%2Fx36xhzz.m3u8"%2C"poster"%3A"https%3A%2F%2Fd2zihajmogu5jn.cloudfront.net%2Fbig-buck-bunny%2Fbbb.png"%2C"duration"%3A"10%3A34"%7D%2C%7B"title"%3A"Big+Buck+Bunny+-+DASH"%2C"src"%3A"https%3A%2F%2Fdash.akamaized.net%2Fakamai%2Fbbb_30fps%2Fbbb_30fps.mpd"%2C"poster"%3A"https%3A%2F%2Fd2zihajmogu5jn.cloudfront.net%2Fbig-buck-bunny%2Fbbb.png"%2C"duration"%3A"10%3A34"%7D%5D) +- **Streaming** - support for [hls.js](https://oplayer.vercel.app/plugins/hls), [flv,mpegts](https://oplayer.vercel.app/plugins/mpegts), [webtorrent](https://oplayer.vercel.app/plugins/torrent), [dash.js](https://oplayer.vercel.app/plugins/dash) and any other custom streaming playback +- **Fullscreen** - supports native fullscreen with fallback to "full window" modes +- **Shortcuts** - supports keyboard shortcuts +- **Picture-in-Picture** - supports picture-in-picture mode +- **Multiple captions** - support for multiple caption tracks(SRT, WEBVTT) +- **i18n support** - support for internationalization of controls +- **Preview thumbnails** - support for displaying preview thumbnails (spirit or [vtt](https://oplayer.vercel.app/plugins/vtt-thumbnails)) +- **No frameworks** - written in "vanilla" JavaScript, no dependencies required +- **[Chromecast](https://oplayer.vercel.app/plugins/chromecast)** - cast video to your device +- **[Playlist](https://oplayer.vercel.app/plugins/playlist)** - supports playlist list ui +- **[Danmaku](./packages/danmaku/)** - biu biu biu ~ +- **... and much more!** ## Who use OPlayer? @@ -22,29 +34,10 @@ - [Animex](https://www.animex.live/) : Watch Anime for free in HD quality with English subbed or dubbed. - ~~[NGEWIBU.TV](https://ngewibu.tv/) : Nonton Anime Sub Indo | Nonton Anime Subtitle Indonesia Gratis~~ -## Feature - -- Streaming formats - - [HLS](./packages/hls) (track, subtitles, audio track selection) - - [MPEG DASH](./packages/dash) (track, subtitles (also segmented), audio track selection) - - [FLV](./packages/mpegts) - - [WebTorrent](./packages/torrent) - - Any other custom streaming formats -- Features - - Danmaku - - Screenshot - - Hotkeys - - Thumbnails (spirit or [vtt](https://oplayer.vercel.app/plugins/vtt-thumbnails)) - - Subtitles (formats: SRT, WEBVTT with HTML tags support; subtitles from HLS; multiple subtitles for video) - - [Chromecast](https://oplayer.vercel.app/plugins/chromecast) - - [Playlist](https://oplayer.vercel.app/plugins/playlist) - - ... and much more! - ## Support If you think this is super cool, or useful, and want to donate a little, then you are also super cool! -- PR WELCOME ! - [Paypal](https://www.paypal.com/paypalme/ShiYiYa) - [WeChat Pay](https://www.oaii.me/wechat_donate.png) diff --git a/examples/standalone/main.ts b/examples/standalone/main.ts index 3f93e55a..2ffd9ea7 100644 --- a/examples/standalone/main.ts +++ b/examples/standalone/main.ts @@ -15,7 +15,7 @@ import POSTER from '../../packages/docs/public/poster.png' import THUMB from '../../packages/docs/public/thumbnails.jpg' import SRT from '../../packages/docs/public/君の名は.srt' import JPSRT from '../../packages/docs/public/君の名は-jp.srt' -// import SUPER_DANMAKU from '../../packages/docs/public/天气之子.xml' +import SUPER_DANMAKU from '../../packages/docs/public/天气之子.xml' import FLV from '../../packages/docs/public/op.flv' import MP4 from '../../packages/docs/public/君の名は.mp4' import vercel from '../../packages/docs/public/vercel.svg' @@ -66,15 +66,20 @@ const player = Player.make('#player', { class: 'watermark', crossOrigin: 'anonymous' } + }, + primaryColor: '#6668ab', + progress: {}, + controller: { + setting: 'auto', + display: 'always', + coverButton: true, + displayBehavior: 'hover', + header: { back: 'always' }, + slideToSeek: 'always' } }, - controlBar: { back: 'always' }, - topSetting: isMobile, - slideToSeek: 'always', - // miniProgressBar: false, // autoFocus: true, keyboard: { global: true }, - // speed: [], screenshot: true, settings: ['loop'], pictureInPicture: true, @@ -106,6 +111,7 @@ const player = Player.make('#player', { poster: POSTER, src: MP4, duration: '01:32', + danmaku: SUPER_DANMAKU, thumbnails: { src: THUMB, number: 100 @@ -140,8 +146,9 @@ const player = Player.make('#player', { duration: '10:34' }, { - title: 'BROKEN SOURCE', + title: 'BROKEN SOURCE & POSTER', src: '//', + poster: '//', duration: '00:00' }, { diff --git a/examples/standalone/package-lock.json b/examples/standalone/package-lock.json index 04f3681d..0c5ce531 100644 --- a/examples/standalone/package-lock.json +++ b/examples/standalone/package-lock.json @@ -24,12 +24,10 @@ } }, "../../packages/core": { - "name": "@oplayer/core", - "version": "1.2.32", + "version": "1.2.33-beta.3", "license": "MIT" }, "../../packages/danmaku": { - "name": "@oplayer/danmaku", "version": "1.2.24", "license": "MIT", "dependencies": { @@ -43,7 +41,6 @@ } }, "../../packages/dash": { - "name": "@oplayer/dash", "version": "1.2.24", "license": "MIT", "devDependencies": { @@ -56,7 +53,6 @@ } }, "../../packages/hls": { - "name": "@oplayer/hls", "version": "1.2.24", "license": "MIT", "devDependencies": { @@ -69,7 +65,6 @@ } }, "../../packages/mpegts": { - "name": "@oplayer/mpegts", "version": "1.2.23", "license": "MIT", "devDependencies": { @@ -82,9 +77,8 @@ } }, "../../packages/plugins": { - "name": "@oplayer/plugins", - "version": "1.0.10-beta.0", - "license": "ISC", + "version": "1.0.11-alpha.1", + "license": "MIT", "devDependencies": { "@oplayer/core": "workspace:*", "@oplayer/ui": "workspace:*", @@ -92,7 +86,7 @@ "chokidar": "^3.6.0", "glob": "^10.3.10", "m3u8-parser": "^7.1.0", - "vite-plugin-css-injected-by-js": "^3.4.0" + "vite-plugin-css-injected-by-js": "^3.5.0" }, "peerDependencies": { "@oplayer/core": ">=1.0.0", @@ -101,7 +95,6 @@ } }, "../../packages/torrent": { - "name": "@oplayer/torrent", "version": "1.2.25-beta.0", "license": "MIT", "devDependencies": { @@ -116,8 +109,7 @@ } }, "../../packages/ui": { - "name": "@oplayer/ui", - "version": "1.2.35", + "version": "1.2.37-alpha.2", "license": "MIT", "devDependencies": { "@oplayer/core": "workspace:*" @@ -127,14 +119,14 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz", - "integrity": "sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", + "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" }, "node_modules/@lit/reactive-element": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.1.tgz", - "integrity": "sha512-va15kYZr7KZNNPZdxONGQzpUr+4sxVu7V/VG7a8mRfPPXUyhEYj5RzXCQmGrlP3tAh0L3HHm5AjBMFYRqlM9SA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.0.0" } @@ -172,9 +164,9 @@ "link": true }, "node_modules/@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" }, "node_modules/@webtorrent/http-node": { "version": "1.3.0", @@ -195,6 +187,12 @@ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" }, + "node_modules/bare-events": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "optional": true + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -640,9 +638,9 @@ } }, "node_modules/codem-isoboxer": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.6.tgz", - "integrity": "sha512-LuO8/7LW6XuR5ERn1yavXAfodGRhuY2yP60JTZIw5yNYMCE5lUVbk3NFUCJxjnphQH+Xemp5hOGb1LgUXm00Xw==" + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.9.tgz", + "integrity": "sha512-4XOTqEzBWrGOZaMd+sTED2hLpzfBbiQCf1W6OBGkIHqk1D8uwy8WFLazVbdQwfDpQ+vf39lqTGPa9IhWW0roTA==" }, "node_modules/compact2string": { "version": "1.4.1", @@ -710,20 +708,20 @@ } }, "node_modules/dashjs": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/dashjs/-/dashjs-4.6.0.tgz", - "integrity": "sha512-0PDoSBM9PXb+Io0pRnw2CmO7aV9W8FC/BqBRNhLxzM3/e5Kfj7BLy0OWkkSB58ULg6Md6r+6jkGOTUhut/35rg==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/dashjs/-/dashjs-4.7.4.tgz", + "integrity": "sha512-+hldo25QPP3H/NOwqUrvt4uKdMse60/Gsz9AUAnoYfhga8qHWq4nWiojUosOiigbigkDTCAn9ORcvUaKCvmfCA==", "dependencies": { "bcp-47-match": "^1.0.3", "bcp-47-normalize": "^1.1.1", - "codem-isoboxer": "0.3.6", + "codem-isoboxer": "0.3.9", "es6-promise": "^4.2.8", "fast-deep-equal": "2.0.1", "html-entities": "^1.2.1", - "imsc": "^1.0.2", + "imsc": "^1.1.5", "localforage": "^1.7.1", "path-browserify": "^1.0.1", - "ua-parser-js": "^1.0.2" + "ua-parser-js": "^1.0.37" } }, "node_modules/debug": { @@ -802,9 +800,9 @@ "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" }, "node_modules/fast-fifo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.2.0.tgz", - "integrity": "sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-readable-async-iterator": { "version": "1.1.2", @@ -859,9 +857,9 @@ } }, "node_modules/hls.js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.4.0.tgz", - "integrity": "sha512-VEjg7Rx5FlE9TB3MIn0HPgq3J+vR7EoQnjaqMCk/ISEaCOSZlAFh4g867f1QkSxZiq9kHeUZo+iH16X7VS3jKA==" + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.7.tgz", + "integrity": "sha512-Hnyf7ojTBtXHeOW1/t6wCBJSiK1WpoKF9yg7juxldDx8u3iswrkPt2wbOA/1NiwU4j27DSIVoIEJRAhcdMef/A==" }, "node_modules/html-entities": { "version": "1.4.0", @@ -920,9 +918,9 @@ } }, "node_modules/imsc": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/imsc/-/imsc-1.1.3.tgz", - "integrity": "sha512-IY0hMkVTNoqoYwKEp5UvNNKp/A5jeJUOrIO7judgOyhHT+xC6PA4VBOMAOhdtAYbMRHx9DTgI8p6Z6jhYQPFDA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/imsc/-/imsc-1.1.5.tgz", + "integrity": "sha512-V8je+CGkcvGhgl2C1GlhqFFiUOIEdwXbXLiu1Fcubvvbo+g9inauqT3l0pNYXGoLPBj3jxtZz9t+wCopMkwadQ==", "dependencies": { "sax": "1.2.1" } @@ -1072,29 +1070,29 @@ "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" }, "node_modules/lit": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.7.3.tgz", - "integrity": "sha512-0a+u+vVbmgSfPu+fyvqjMPBX0Kwbyj9QOv9MbQFZhWGlV2cyk3lEwgfUQgYN+i/lx++1Z3wZknSIp3QCKxHLyg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", "dependencies": { "@lit/reactive-element": "^1.6.0", "lit-element": "^3.3.0", - "lit-html": "^2.7.0" + "lit-html": "^2.8.0" } }, "node_modules/lit-element": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.2.tgz", - "integrity": "sha512-xXAeVWKGr4/njq0rGC9dethMnYCq5hpKYrgQZYTzawt9YQhMiXfD+T1RgrdY3NamOxwq2aXlb0vOI6e29CKgVQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.1.0", "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.7.0" + "lit-html": "^2.8.0" } }, "node_modules/lit-html": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.7.3.tgz", - "integrity": "sha512-9DyLzcn/kbRGowz2vFmSANFbRZTxYUgYYFqzie89w6GLpPUiBCDHfcdeRUV/k3Q2ueYxNjfv46yPCtKAEAPOVw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -1301,9 +1299,9 @@ "integrity": "sha512-IXGPhl/yAiUU597gz+k5OYxYZkmLSWTcPPcpQjWABud9OK6m/ZNLrVdcEu4e7NgmOObFIhgZVg1jecPYT/6AoA==" }, "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "optional": true, "bin": { "node-gyp-build": "bin.js", @@ -1821,12 +1819,15 @@ } }, "node_modules/streamx": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.13.2.tgz", - "integrity": "sha512-+TWqixPhGDXEG9L/XczSbhfkmwAtGs3BJX5QNU6cvno+pOLKeszByWcnaTu6dg8efsTYqR8ZZuXWHhZfgrxMvA==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", + "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -1926,9 +1927,9 @@ ] }, "node_modules/ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", "funding": [ { "type": "opencollective", @@ -1937,6 +1938,10 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "engines": { diff --git a/package.json b/package.json index 05a9e291..a0ede979 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,11 @@ "start": "pnpm run watch", "dev": "pnpm --filter=!@oplayer/docs --parallel run start", "dev:exam": "cd examples/standalone && pnpm run start", + "build": "pnpm --filter=!@oplayer/docs run build", "build:packs": "pnpm --filter=@oplayer/* run build", "build:core": "pnpm --filter=@oplayer/core run build", "build:plugins": "pnpm --filter=@oplayer/plugins run build", + "build:ui": "pnpm --filter=@oplayer/ui run build", "build:cache": "nx run-many --target=build --all --parallel", "build:affected": "nx Affected --target=build", "graph": "nx dep-graph", @@ -31,18 +33,18 @@ "lint": "prettier -w ./packages/*/**/*.ts" }, "devDependencies": { - "@babel/core": "^7.24.0", + "@babel/core": "^7.24.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", "@changesets/cli": "^2.27.1", "@rollup/plugin-babel": "^6.0.4", - "@types/node": "^20.11.29", + "@types/node": "^20.11.30", "@vitejs/plugin-react": "^4.2.1", "babel-plugin-syntax-trailing-function-commas": "^6.22.0", "concurrently": "^8.2.2", @@ -54,8 +56,8 @@ "rimraf": "^5.0.5", "terser": "^5.29.2", "tslib": "^2.6.2", - "typescript": "^5.4.2", - "vite": "^5.1.6", + "typescript": "^5.4.3", + "vite": "^5.2.3", "vite-plugin-banner": "^0.7.1", "vitest": "^1.4.0" }, diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 2e00aefa..d3805389 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -2,7 +2,7 @@ ## UnRelease -## [1.2.33-beta.3] +## [1.2.33] - pause before source changeing. - single apply plugin. diff --git a/packages/core/package.json b/packages/core/package.json index b306cd5d..8f8f30a6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@oplayer/core", - "version": "1.2.33-beta.3", + "version": "1.2.33", "description": "Oh! Another HTML5 video player.", "type": "module", "main": "./dist/index.es.js", diff --git a/packages/docs/package.json b/packages/docs/package.json index fcb49a72..b5b3242e 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -19,14 +19,14 @@ "@oplayer/torrent": "workspace:*", "@oplayer/ui": "workspace:*", "mdx-embed": "^1.1.2", - "next": "^14.1.3", + "next": "^14.1.4", "nextra": "^2.13.4", "nextra-theme-docs": "^2.13.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "@types/react": "^18.2.67", + "@types/react": "^18.2.69", "@types/react-dom": "^18.2.22", "sass": "^1.72.0" } diff --git a/packages/docs/public/ohls.html b/packages/docs/public/ohls.html index 62014c39..baba673a 100644 --- a/packages/docs/public/ohls.html +++ b/packages/docs/public/ohls.html @@ -1,4 +1,4 @@ - + @@ -212,7 +212,7 @@
- + - - - - - - - - - diff --git a/packages/docs/src/pages/preview.mdx b/packages/docs/src/pages/preview.mdx index 81e3ebac..84bb9e34 100644 --- a/packages/docs/src/pages/preview.mdx +++ b/packages/docs/src/pages/preview.mdx @@ -15,60 +15,40 @@ import { PlaylistPlugin, chromecast } from '@oplayer/plugins' }} plugins={[ ui({ + theme: { + controller: { header: true }, + progress: { position: 'top' } + }, pictureInPicture: true, - controlBar: { back: 'fullscreen' }, menu: [ { - name: '❤❤', + name: '❤', position: 'top', onClick() { - alert('❤❤') + alert('你也喜欢我么?') } }, { - name: 'Custom', + name: '💕', position: 'top', children: [ { - name: 'Custom 1', - default: true, - value: 1 + name: '🍓', + value: '🍓' }, { - name: 'Custom 2', - value: 2 + name: '🍉', + value: '🍉' }, { - name: 'Custom 3', - value: 3 + name: '🍎', + value: '🍎' } ], - onChange({ value, name }, elm) { + onChange({ value }) { alert(`${value}`) } }, - !isMobile && { - name: 'Custom', - position: 'bottom', - children: [ - { - name: 'Custom 1', - default: true, - value: 1 - }, - { - name: 'Custom 2', - value: 2 - }, - { - name: 'Custom 3', - value: 3 - } - ], - onChange({ value, name }, elm) { - alert(`${value}`) - } - } ].filter(Boolean) }), hls({ forceHLS: true }), @@ -139,5 +119,7 @@ import { PlaylistPlugin, chromecast } from '@oplayer/plugins' }), chromecast ].filter((it) => it?.apply)} - /> + +/> + diff --git a/packages/docs/src/pages/ui.mdx b/packages/docs/src/pages/ui.mdx index d10686c5..75e01c5a 100644 --- a/packages/docs/src/pages/ui.mdx +++ b/packages/docs/src/pages/ui.mdx @@ -34,45 +34,138 @@ const player = Player.make('#player', { ## Full-Options -```js -OUI({ - /* Default value, Optional */ - fullscreen: true, - coverButton: true, - miniProgressBar: true, - autoFocus: true, - forceLandscapeOnFullscreen: true, - screenshot: false, - pictureInPicture: false, - showControls: 'always', // 'played' - keyboard: { focused: true, global: false }, - settings: ['loop'], - theme: { primaryColor: '#6668ab' }, - speeds: ['2.0', '1.75', '1.25', '1.0', '0.75', '0.5'], - slideToSeek: 'none', // 'always' | 'long-touch' - controlBar: false, // | { back: 'always' | 'fullscreen' } // appbar - topSetting: false, //show setting icon on appbar - /* Default value, Optional */ - - /* Custom options */ - subtitle: { - color: 'hotpink', - fontSize: 20, - fontFamily: '', - background: true, - source: [ - { - name: 'Japanese', - default: true, - src: 'https://oplayer.vercel.app/君の名は-jp.srt' - }, - { - name: 'CH & JP', - src: 'https://oplayer.vercel.app/君の名は.srt' - } - ] +```typescript +export type UiConfig = { + theme?: { + primaryColor?: string + watermark?: { + /** img or svg */ + src: string + // make screenshot include watermark? + // set positioning here [top, left, right, bottom] + style?: Record + attrs?: Record + } + + progress?: { + /** + * default: 'auto' + * auto: mobile->top pc->top + */ + position?: 'auto' | 'top' | 'center' + backward?: number + forward?: number + /** + * default: true + * work only top + */ + mini?: boolean + } + + controller?: { + /** + * default: 'always' + */ + display?: 'always' | 'played' + /** + * default: if(source.title) + */ + header?: boolean | { back?: 'always' | 'fullscreen' } + /** + * default: true + */ + coverButton?: boolean + /** + * default: hover + * + */ + displayBehavior?: 'hover' | 'delay' | 'none' + /** + * default: 'none' + */ + slideToSeek?: 'none' | 'always' | 'long-touch' + } + + setting?: { + /** + * default: 'auto' + * auto: mobile->top pc->top + */ + postion?: 'auto' | 'top' | 'bottom' + } } -}) + /** + * default: false + */ + autoFocus?: boolean + + /** + * default: false + */ + screenshot?: boolean + /** + * default: true + * 全屏(如果不可用将会降级为网页全屏) + */ + fullscreen?: boolean + /** + * default: false + */ + pictureInPicture?: boolean + + /** + * default: true + * Whether or not the device should rotate to landscape mode when the video + * enters fullscreen. Note that this behavior is based on an experimental + * browser API, and may not work on all platforms. + * Defaults to true. + */ + forceLandscapeOnFullscreen?: boolean + + /** + * PC only - default: { focused: true } + */ + keyboard?: { focused?: boolean; global?: boolean } + + /** + * default: ['2.0', '1.75', '1.25', '1.0', '0.75', '0.5'] + */ + speeds?: string[] + + subtitle?: Subtitle + + /** + * default: ['loop', 'speed'] + */ + settings?: (Setting | 'loop')[] | false + + thumbnails?: Thumbnails + + highlight?: { + color?: string + source?: Highlight[] + } + + menu?: MenuBar[] + + errorBuilder?: (error: ErrorPayload, target: HTMLDivElement, cb: (error: ErrorPayload) => void) => void + + icons?: { + play?: string + pause?: string + volume?: [string, string] //on off + fullscreen?: [string, string] + pip?: [string, string] + setting?: string + screenshot?: string + playbackRate?: string + loop?: string + progressIndicator?: string + loadingIndicator?: string + next?: string + previous?: string + } +} ``` ## Thumbnails @@ -92,28 +185,6 @@ thumbnails = { } ``` -## Custom icons - -```js -{ - icons: { - play: '', - pause: '', - volume: ['', ''], //on off - fullscreen: ['', ''], //on off - pip: '', - setting: '', - screenshot: '', - playbackRate: '', - loop: '', - progressIndicator: '', - loadingIndicator: '', - previous: '',// enable previous,next button - next: '' - } -} -``` - ## Add custom menu ```js @@ -233,6 +304,7 @@ player.context.ui.notice('hello') - `f` toggle full-screen - `w` toggle full-screen web - `m` toggle mute +- `c` toggle setting panel ## watermark diff --git a/packages/plugins/CHANGELOG.md b/packages/plugins/CHANGELOG.md index 6db6332f..ae087b48 100644 --- a/packages/plugins/CHANGELOG.md +++ b/packages/plugins/CHANGELOG.md @@ -2,6 +2,14 @@ ## UnRelease +## 1.0.11 + +- support danmaku + +## 1.0.11-alpha.1 + +- add error fallback for poster + ## 1.0.10-beta.3 - playlist diff --git a/packages/plugins/package.json b/packages/plugins/package.json index 84bcd147..5174dac1 100644 --- a/packages/plugins/package.json +++ b/packages/plugins/package.json @@ -1,6 +1,6 @@ { "name": "@oplayer/plugins", - "version": "1.0.10-beta.3", + "version": "1.0.11", "author": "shiyiya", "description": "oplayer's plugin", "homepage": "https://github.com/shiyiya/oplayer", @@ -28,6 +28,6 @@ "chokidar": "^3.6.0", "glob": "^10.3.10", "m3u8-parser": "^7.1.0", - "vite-plugin-css-injected-by-js": "^3.4.0" + "vite-plugin-css-injected-by-js": "^3.5.0" } } diff --git a/packages/plugins/src/playlist.css b/packages/plugins/src/playlist.css index 79205b79..abe943f2 100644 --- a/packages/plugins/src/playlist.css +++ b/packages/plugins/src/playlist.css @@ -138,6 +138,7 @@ display: flex; justify-content: center; align-items: center; + position: relative; } .playlist-list-item-img { @@ -146,6 +147,19 @@ object-fit: cover; } +.playlist-list-item-img__error::after { + content: 'ERROR'; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: #000; + display: flex; + justify-content: center; + align-items: center; +} + .playlist-list-item-desc { width: 100%; font-size: 14px; diff --git a/packages/plugins/src/playlist.ts b/packages/plugins/src/playlist.ts index b4340c97..ac646b91 100644 --- a/packages/plugins/src/playlist.ts +++ b/packages/plugins/src/playlist.ts @@ -5,6 +5,7 @@ import './playlist.css' interface Ctx { ui: UIInterface + danmaku?: any } interface Segment { @@ -32,6 +33,8 @@ export interface PlaylistSource extends Omit { subtitles?: SubtitleSource[] thumbnails?: Thumbnails highlights?: Highlight[] + // see @oplayer/danmaku + danmaku?: string | Function | any[] } export default class PlaylistPlugin implements PlayerPlugin { @@ -136,7 +139,7 @@ export default class PlaylistPlugin implements PlayerPlugin { throw new Error('Empty Source') } - const { src, poster, format, title, subtitles, thumbnails, highlights } = source + const { src, poster, format, title, subtitles, thumbnails, highlights, danmaku } = source return this.player.changeSource({ src, poster, format, title }).then(() => { if (subtitles) { @@ -148,6 +151,9 @@ export default class PlaylistPlugin implements PlayerPlugin { if (highlights) { this.player.context.ui.changHighlightSource(highlights) } + if (danmaku) { + this.player.context.danmaku?.bootstrap(danmaku) + } }) }) .then(() => { @@ -155,7 +161,7 @@ export default class PlaylistPlugin implements PlayerPlugin { if (this.options.autoHide) { setTimeout(() => { this.hideUI() - }, 500) + }, 300) } }) .catch((error) => { @@ -164,14 +170,13 @@ export default class PlaylistPlugin implements PlayerPlugin { .finally(() => { this.currentIndex = idx this._updateHeader() - console.log(this.$root.querySelector('.playlist-source__active')) this.$root.querySelector('.playlist-source__active')?.classList.remove('playlist-source__active') $target?.classList.add('playlist-source__active') setTimeout(() => { this.$root.classList.remove('playlist__wait') $target?.classList.remove('playlist-source__progress') - }, 500) + }, 300) }) } @@ -253,7 +258,7 @@ export default class PlaylistPlugin implements PlayerPlugin { source.poster ? `${
             source.title || ''
-          }` + }" loading="lazy" onerror="this.classList.add('playlist-list-item-img__error');"/>` : 'EMPTY' } @@ -276,5 +281,9 @@ export default class PlaylistPlugin implements PlayerPlugin { )} (${this.currentIndex !== undefined ? `${this.currentIndex + 1}/` : ''}${this.options.sources.length})` } - destroy() {} + destroy() { + this.currentIndex = undefined + this.options.sources = [] + this.renderList([]) + } } diff --git a/packages/react/package.json b/packages/react/package.json index 04e2be0e..fc360835 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -28,7 +28,7 @@ }, "devDependencies": { "@oplayer/core": "workspace:*", - "@types/react": "^18.2.67", + "@types/react": "^18.2.69", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 0f372654..333553e6 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -2,6 +2,20 @@ ## UnRelease +## [1.3.0] + +- beta and alpha + +## [1.2.37-alpha.2] + +- fix ios subtitle not hidden + +## [1.2.37-alpha.0] Break Changes + +- redefine config. +- center progress. +- auto position (menu, setting). + ## [1.2.36-beta.4] - no repeat menu/setting. diff --git a/packages/ui/package.json b/packages/ui/package.json index 061d4d88..6ff0af3c 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@oplayer/ui", - "version": "1.2.36-beta.4", + "version": "1.3.0", "description": "ui plugin for oplayer", "type": "module", "main": "./dist/index.es.js", diff --git a/packages/ui/src/components/Controller.ts b/packages/ui/src/components/Controller.ts index 656814d0..ec45e3e3 100644 --- a/packages/ui/src/components/Controller.ts +++ b/packages/ui/src/components/Controller.ts @@ -15,7 +15,9 @@ const render = (it: UIInterface) => { renderControllerBar(it, $controller) renderControllerBottom(it, $controller) - if (config.showControls == 'played') { + const { display: showControls, displayBehavior: ctrlHideBehavior } = config.theme.controller || {} + + if (showControls == 'played') { addClass($controller, hidden) player.once('play', () => { @@ -49,7 +51,7 @@ const render = (it: UIInterface) => { } } - if (config.ctrlHideBehavior != 'none') { + if (ctrlHideBehavior != 'none') { player.on('play', debounceHideCtrl) player.on(['pause', 'videosourcechange'], showCtrl) player.on('destroy', cancelHideCtrl) @@ -62,8 +64,8 @@ const render = (it: UIInterface) => { debounceHideCtrl() } }) - if (config.ctrlHideBehavior == 'delay') player.$root.addEventListener('mouseleave', debounceHideCtrl) - if (config.ctrlHideBehavior == 'hover') player.$root.addEventListener('mouseleave', hideCtrl) + if (ctrlHideBehavior == 'delay') player.$root.addEventListener('mouseleave', debounceHideCtrl) + if (ctrlHideBehavior == 'hover') player.$root.addEventListener('mouseleave', hideCtrl) } it.toggleController = function toggle() { diff --git a/packages/ui/src/components/ControllerBar.ts b/packages/ui/src/components/ControllerBar.ts index b7d9e347..ddc778d3 100644 --- a/packages/ui/src/components/ControllerBar.ts +++ b/packages/ui/src/components/ControllerBar.ts @@ -2,7 +2,7 @@ import { $, isMobile } from '@oplayer/core' import type { UIInterface } from '../types' import { controllerHidden, hidden } from '../style' -import { controllers, dropdown, expand } from './ControllerBottom.style' +import { controllers, dropdown, expand, withIcon } from './ControllerBottom.style' import { arrowSvg } from './Setting' export const controlBar = $.css({ @@ -11,7 +11,7 @@ export const controlBar = $.css({ left: 0, right: 0, 'z-index': 7, - padding: '0.5em 1em 0', + padding: '0.5em 0.5em 0', transition: 'transform 0.3s ease', height: 'var(--control-bar-height)', @@ -55,10 +55,11 @@ const controlBarTitle = $.css( const render = (it: UIInterface, el: HTMLDivElement) => { const { player, config } = it + const header = config.theme.controller?.header - if (!config.controlBar) return + if (!header) return - const back = config.controlBar.back + const back = (header as any)?.back const backEnabled = back && isMobile const $dom = (it.$controllerBar = $.create( @@ -66,7 +67,7 @@ const render = (it: UIInterface, el: HTMLDivElement) => { { class: `${controlBar} ${controllers}` }, - `
+ `
${ backEnabled ? `
-
` +
` )) const $controlBarTitle = $dom.querySelector(`.${controlBarTitle}`)! diff --git a/packages/ui/src/components/ControllerBottom.style.ts b/packages/ui/src/components/ControllerBottom.style.ts index 56338804..aa91c15c 100644 --- a/packages/ui/src/components/ControllerBottom.style.ts +++ b/packages/ui/src/components/ControllerBottom.style.ts @@ -4,7 +4,6 @@ import { icon } from '../style' export const time = $.css` font-variant-numeric: tabular-nums; font-size: 0.875em; - margin-top: 2px; ` export const live = $.css( @@ -89,28 +88,25 @@ export const dropItem = $.css({ export const textIcon = $.cls('textIcon') +export const withIcon = $.css({ + display: 'flex', + 'align-items': 'center', + + [`& > .${icon}:last-child${ + isMobile ? `, & > .${icon}[aria-label="Play"], & > .${icon}[aria-label="Pause"]` : '' + }`]: { + 'margin-right': 0 + } +}) + export const controllers = $.css({ color: '#fff', - fill: '#fff', height: '2.375em', display: 'flex', 'box-sizing': 'border-box', 'justify-content': 'space-between', 'align-items': 'center', - 'padding-bottom': isMobile ? 0 : '4px', - - // left & right - '> div': { - display: 'flex', - 'align-items': 'center', - margin: '0 -.5em', - - [`& > .${icon}:last-child${ - isMobile ? `, & > .${icon}[aria-label="Play"], & > .${icon}[aria-label="Pause"]` : '' - }`]: { - 'margin-right': 0 - } - }, + 'padding-bottom': isMobile ? 0 : '0.25em', [`& .${icon}.${textIcon}`]: { width: 'auto', @@ -142,3 +138,14 @@ export const controllers = $.css({ : { '&:hover': { 'background-color': 'rgb(255 255 255 / .2)' } } ) }) + +export const centerProgressWrap = $.css({ + flex: 1, + height: '100%', + 'padding-left': '0.5em', + '> div': { + height: '100%', + display: 'flex', + 'align-items': 'center' + } +}) diff --git a/packages/ui/src/components/ControllerBottom.ts b/packages/ui/src/components/ControllerBottom.ts index c5fdd6d6..e5c6fd01 100644 --- a/packages/ui/src/components/ControllerBottom.ts +++ b/packages/ui/src/components/ControllerBottom.ts @@ -8,7 +8,17 @@ import { isFullscreen, isWebFullscreen } from '../listeners/fullscreen' import type { UIInterface } from '../types' -import { controllers, dropdown, dropdownHoverable, expand, time, live } from './ControllerBottom.style' +import { + controllers, + dropdown, + dropdownHoverable, + expand, + time, + live, + withIcon, + centerProgressWrap +} from './ControllerBottom.style' +import { progress } from './Progress.style' export const controllerBottomWrap = $.css({ position: 'absolute', @@ -16,8 +26,9 @@ export const controllerBottomWrap = $.css({ right: 0, bottom: 0, 'z-index': 7, - padding: '0 1em', + padding: '0 0.5em', transition: 'transform 0.3s ease, padding 0.3s ease', + 'min-height': 'var(--control-bar-height)', '&::before': { position: 'absolute', content: "''", @@ -38,10 +49,15 @@ export const controllerBottomWrap = $.css({ // }, [`@global .${controllerHidden} &`]: { - padding: 0, 'pointer-events': 'none', - transform: 'translateY(calc(100% - 8px))', + transform: 'translateY(calc(100% - 0.55em))', + padding: 0, '&::before': { opacity: 0 } + }, + + [`@global .${controllerHidden} .${progress}`]: { + 'padding-left': 0, + 'padding-right': 0 } }) @@ -50,7 +66,7 @@ const render = (it: UIInterface, $el: HTMLDivElement) => { const el = $.render($.create(`div.${controllerBottomWrap}`), $el) - if (!config.miniProgressBar) { + if (!config.theme.progress?.mini) { $.css({ [`@global .${controllerHidden} .${controllerBottomWrap}`]: { transform: 'translateY(100%)' @@ -58,8 +74,6 @@ const render = (it: UIInterface, $el: HTMLDivElement) => { }) } - renderProgress(it, el) - const [playLabel, pauseLabel, screenshotLabel, pipLabel, fullscreenLabel, previousLabel, nextLabel] = [ player.locales.get('Play'), player.locales.get('Pause'), @@ -74,7 +88,7 @@ const render = (it: UIInterface, $el: HTMLDivElement) => { const $dom = (it.$controllerBottom = $.create( `div.${controllers}`, {}, - `
+ `
${ previousSvg && @@ -94,11 +108,13 @@ const render = (it: UIInterface, $el: HTMLDivElement) => { ${player.options.isLive ? `` : ''} ${ - player.options.isLive || player.$video.preload == 'none' ? '00:00' : '00:00 / --:--' - } + player.options.isLive || player.$video.preload == 'none' ? '00:00' : '00:00 / --:--' + }
-
+
+ +
` )) + if ( + (config.theme.progress?.position == 'auto' && isMobile) || + config.theme.progress?.position == 'center' + ) { + renderProgress(it, $dom.querySelector(`.${centerProgressWrap}`)!) + } else { + renderProgress(it, el) + } + const $volume = $dom.querySelector('button[aria-label=Volume]')! // IOS只能使用物理按键控制音量大小 if (!isIOS) renderVolumeBar(player, $volume.nextElementSibling! as HTMLDivElement) diff --git a/packages/ui/src/components/Menubar.ts b/packages/ui/src/components/Menubar.ts index 73867783..863a7296 100644 --- a/packages/ui/src/components/Menubar.ts +++ b/packages/ui/src/components/Menubar.ts @@ -19,8 +19,8 @@ const setChecked = (elm: HTMLElement) => { export default (it: UIInterface) => { const initialState = it.config.menu const menus: MenuBar[] = [] - const $top = it.$controllerBar?.children[1] - const $end = it.$controllerBottom.children[1]! + const $top = it.$controllerBar?.lastElementChild + const $end = it.$controllerBottom.lastElementChild! const $targets = [$top, $end].filter(Boolean) as HTMLDivElement[] function clickHandler(e: Event) { diff --git a/packages/ui/src/components/Progress.style.ts b/packages/ui/src/components/Progress.style.ts index 804c927e..a778bdd6 100644 --- a/packages/ui/src/components/Progress.style.ts +++ b/packages/ui/src/components/Progress.style.ts @@ -11,19 +11,17 @@ export const played = $.css({ }) export const dot = $.css({ - width: '100%', 'pointer-events': 'none', position: 'relative', '& > *': { - content: "''", display: 'block', position: 'absolute', width: '1.4em', height: '1.4em', - top: 'calc(-0.7em + 2px)', - left: '-0.7em', - bottom: '0', + top: '0', + left: '0', + margin: '-0.5em 0 0 -0.5em', transform: isMobile ? 'none' : 'scale(0)', transition: 'transform 0.3s ease', 'z-index': '1' @@ -32,8 +30,7 @@ export const dot = $.css({ '& > *:not(svg)': { width: '1em', height: '1em', - top: 'calc(-0.5em + 2px)', - left: '-0.5em', + margin: '-0.4em 0 0 -0.4em', 'border-radius': '50%', 'background-color': '#fff' } @@ -60,10 +57,11 @@ export const progress = $.css( { position: 'relative', 'box-sizing': 'border-box', - padding: '0.5em 0px', + padding: '0.5em', cursor: 'pointer', width: '100%', 'font-size': '0.75em', + transition: 'padding 0.3s ease', [`&.${progressDragging} .${hit}, &.${progressDragging} .${thumbnailCls}, &.${progressDragging} .${vttThumbnailsCls}`]: { @@ -86,11 +84,14 @@ export const progress = $.css( export const progressInner = $.css({ position: 'relative', - height: '4px', + height: '0.33em', width: '100%', 'background-color': 'hsla(0, 0%, 100%, 0.2)', + 'border-radius': '1em', [`& .${buffered}, & .${played}`]: { + 'border-radius': '1em', + overflow: 'hidden', position: 'absolute', left: '0', top: '0', diff --git a/packages/ui/src/components/Setting.style.ts b/packages/ui/src/components/Setting.style.ts index 46230c08..be4311e7 100644 --- a/packages/ui/src/components/Setting.style.ts +++ b/packages/ui/src/components/Setting.style.ts @@ -2,7 +2,7 @@ import { $ } from '@oplayer/core' export const activeCls = $.css('display: block;') -export const setting = (position: 'top' | 'bottom') => +export const settingCls = (position: 'top' | 'bottom') => $.css({ 'z-index': '8', 'max-height': '75%', diff --git a/packages/ui/src/components/Setting.ts b/packages/ui/src/components/Setting.ts index 9ece5d66..c96e9cde 100644 --- a/packages/ui/src/components/Setting.ts +++ b/packages/ui/src/components/Setting.ts @@ -1,4 +1,4 @@ -import Player, { $ } from '@oplayer/core' +import Player, { $, isMobile } from '@oplayer/core' import { Icons } from '../functions/icons' import { icon, settingShown, tooltip } from '../style' import type { Setting, UIInterface } from '../types' @@ -7,7 +7,7 @@ import { nextIcon, nextLabelText, panelCls, - setting, + settingCls, settingItemCls, settingItemLeft, settingItemRight, @@ -254,13 +254,18 @@ export default function (it: UIInterface) { if (config.settings === false) return - const topEnabled = config.controlBar && config.topSetting + const position = config.theme.controller?.setting const options = config.settings || [] - const $dom = $.create(`div.${setting(topEnabled ? 'top' : 'bottom')}`, { + + const isTop = config.theme.controller?.header && (position == 'top' || (isMobile && position == 'auto')) + + const $dom = $.create(`div.${settingCls(isTop ? 'top' : 'bottom')}`, { 'aria-label': 'Setting' }) + let panels: Panel[] = [] let hasRendered = false + const defaultSettingMap = { loop: { name: player.locales.get('Loop'), @@ -328,47 +333,52 @@ export default function (it: UIInterface) { hasRendered = true $.render($dom, $el) renderSettingMenu() + it.keyboard?.register({ c: showSetting }) } createPanel(player, panels, settings, { target: $dom }) } + function showSetting() { + player.$root.classList.add(settingShown) + panels[0]!.$ref.classList.add(activeCls) + + function outClickListener(e: Event) { + if (!$dom.contains(e.target)) { + player.$root.classList.remove(settingShown) + panels.forEach(($p) => $p.$ref.classList.remove(activeCls)) + document.removeEventListener('click', outClickListener) + } + } + + setTimeout(() => { + document.addEventListener('click', outClickListener) + }) + } + function renderSettingMenu() { const settingButton = $.create( 'button', { class: `${icon} ${tooltip}`, 'aria-label': player.locales.get('Settings'), - 'data-tooltip-pos': config.topSetting ? 'down' : undefined + 'data-tooltip-pos': position == 'top' ? 'down' : '' }, `${Icons.get('setting')}` ) settingButton.addEventListener('click', (e) => { e.stopPropagation() - player.$root.classList.add(settingShown) - panels[0]!.$ref.classList.add(activeCls) - - function outClickListener(e: Event) { - if (!$dom.contains(e.target)) { - player.$root.classList.remove(settingShown) - panels.forEach(($p) => $p.$ref.classList.remove(activeCls)) - document.removeEventListener('click', outClickListener) - } - } - - setTimeout(() => { - document.addEventListener('click', outClickListener) - }) + showSetting() }) const index = [config.pictureInPicture && player.isPipEnabled, config.fullscreen].filter(Boolean).length - if (topEnabled) { - const parent = it.$controllerBar!.children[1]! + if (isTop) { + const parent = it.$controllerBar!.lastElementChild! parent.insertBefore(settingButton, parent.children[parent.children.length]!) } else { - const parent = it.$controllerBottom!.children[1]! + const parent = it.$controllerBottom!.lastElementChild! parent.insertBefore(settingButton, parent.children[parent.children.length - index]!) } } diff --git a/packages/ui/src/components/Subtitle.ts b/packages/ui/src/components/Subtitle.ts index 948f87de..ae2ecd60 100644 --- a/packages/ui/src/components/Subtitle.ts +++ b/packages/ui/src/components/Subtitle.ts @@ -123,55 +123,53 @@ export class Subtitle { } createTrack() { + const { $video } = this.player + this.$track = $.render( $.create('track', { default: true, - kind: 'metadata' + kind: 'metadata', + id: 'primary' }), - this.player.$video + $video ) // video fullscreen if (!this.player._requestFullscreen) { - this.$iosTrack = $.render( - $.create('track', { - default: false, - kind: 'captions' - }), - this.player.$video - ) - this.player.$video.textTracks[1]!.mode = 'hidden' + const { track } = (this.$iosTrack = $.create('track', { + default: false, + kind: 'captions', + id: '__Orz__' + })) + + track.mode = 'hidden' + $.render(this.$iosTrack, $video) this.player.on('fullscreenchange', ({ payload }) => { if (payload.isWeb) return - if (this.player.isFullScreen) { - if (this.isShow) this.player.$video.textTracks[1]!.mode = 'showing' - } else { - this.player.$video.textTracks[1]!.mode = 'hidden' - } + + setTimeout(() => { + const display = this.player.isFullScreen && this.isShow + track.mode = display ? 'showing' : 'hidden' + }) }) } } changeOffset() { - const offset = this.currentSubtitle!.offset + const offset = this.currentSubtitle?.offset if (offset) { - const cues = this.player.$video.textTracks[0]?.cues - const duration = this.player.duration + ;([this.$track, this.$iosTrack] as const).forEach(($track) => { + if (!$track) return + const cues = $track.track.cues + const duration = this.player.duration - Array.from(cues || []).forEach((cue) => { - cue.startTime = clamp(cue.startTime + offset, 0, duration) - cue.endTime = clamp(cue.endTime + offset, 0, duration) - }) - - //ios - if (this.$iosTrack) { - Array.from(this.player.$video.textTracks[1]?.cues || []).forEach((cue) => { + Array.from(cues || []).forEach((cue) => { cue.startTime = clamp(cue.startTime + offset, 0, duration) cue.endTime = clamp(cue.endTime + offset, 0, duration) }) - } + }) } } @@ -181,11 +179,9 @@ export class Subtitle { } update = () => { - const { $dom, player } = this - const activeCues = player.$video.textTracks[0]?.activeCues - + let html = '' + const activeCues = this.$track.track.activeCues if (activeCues?.length) { - let html = '' for (let i = 0; i < activeCues.length; i++) { const activeCue = activeCues[i] as VTTCue | undefined if (activeCue) { @@ -200,10 +196,8 @@ export class Subtitle { .join('') } } - $dom.innerHTML = html - } else { - $dom.innerHTML = '' } + this.$dom.innerHTML = html } show() { diff --git a/packages/ui/src/components/highlight.ts b/packages/ui/src/components/highlight.ts index 67ecc752..d21b92da 100644 --- a/packages/ui/src/components/highlight.ts +++ b/packages/ui/src/components/highlight.ts @@ -16,8 +16,8 @@ export const highlightTextCls = $.css(` export const highlightCls = $.css({ position: 'absolute', - width: '8px', - height: '4px', + width: '0.8em', + height: '0.33em', 'background-color': 'var(--highlight-color)', transform: 'translateX(-3px)', transition: 'all 0.2s', diff --git a/packages/ui/src/components/layer.ts b/packages/ui/src/components/layer.ts index cd615b6c..8c05a460 100644 --- a/packages/ui/src/components/layer.ts +++ b/packages/ui/src/components/layer.ts @@ -1,7 +1,7 @@ -import { UIInterface, UiConfig } from '../types' +import { UIInterface } from '../types' -export const render = (it: UIInterface, config: UiConfig) => { - const watermark = config.theme?.watermark +export const render = (it: UIInterface, config: UIInterface['config']) => { + const watermark = config.theme.watermark if (!watermark) return const wm = (it.$watermark = document.createElement('img')) diff --git a/packages/ui/src/functions/keyboard.ts b/packages/ui/src/functions/keyboard.ts index b0707136..8c5fdcd2 100644 --- a/packages/ui/src/functions/keyboard.ts +++ b/packages/ui/src/functions/keyboard.ts @@ -3,11 +3,12 @@ import { isFocused } from '../listeners/focus' import { webFullScreen } from '../style' import { UIInterface } from '../types' import { formatTime, screenShot } from '../utils' +import { isMobile } from '@oplayer/core' const VOLUME_SETUP = 10 const SEEK_SETUP = 5 -const KEY_FN: Record void> = { +const KEY_FN: Record void> = { ArrowUp: (player: Player) => { const nextVolume = player.volume * 100 + VOLUME_SETUP player.setVolume(nextVolume / 100) @@ -19,13 +20,13 @@ const KEY_FN: Record void> = { player.emit('notice', { text: player.locales.get('Volume: %s', `${~~(player.volume * 100)}%`) }) }, - ArrowLeft: (player: Player) => { + ArrowLeft: (player: Player, config) => { if (player.options.isLive || player.hasError) return - const tar = player.currentTime - SEEK_SETUP + const tar = player.currentTime - (config.theme.progress?.backward || SEEK_SETUP) if (tar < 0) { player.seek(0) } else { - player.seek(player.currentTime - SEEK_SETUP) + player.seek(player.currentTime - (config.theme.progress?.forward || SEEK_SETUP)) } player.emit('notice', { @@ -64,6 +65,10 @@ const KEY_FN: Record void> = { export default function (it: UIInterface) { const { player, config } = it + if (isMobile && !config.keyboard?.focused && !config.keyboard?.global) { + return + } + function keydown(e: KeyboardEvent) { if ( document.activeElement?.tagName == 'INPUT' || @@ -82,7 +87,7 @@ export default function (it: UIInterface) { if (KEY_FN[key]) { e.preventDefault() - KEY_FN[key]!(player) + KEY_FN[key]!(player, config) } } diff --git a/packages/ui/src/functions/slide.ts b/packages/ui/src/functions/slide.ts index 34acfd3b..80eaa5e7 100644 --- a/packages/ui/src/functions/slide.ts +++ b/packages/ui/src/functions/slide.ts @@ -6,9 +6,15 @@ import { settingShown } from '../style' const FULL_SLIDE_DURATION = 60 export default function (it: UIInterface) { - const { player, config, $mask: $dom } = it + const { + player, + config: { theme }, + $mask: $dom + } = it - if (isMobile && !player.options.isLive && config.slideToSeek && config.slideToSeek != 'none') { + const slideToSeek = theme.controller?.slideToSeek + + if (isMobile && !player.options.isLive && slideToSeek && slideToSeek != 'none') { player.once('loadedmetadata', () => { let startX = 0 let startY = 0 @@ -17,7 +23,7 @@ export default function (it: UIInterface) { let touchedTimer: number const rect = player.$root.getBoundingClientRect() - if (config.slideToSeek == 'always') { + if (slideToSeek == 'always') { $dom.addEventListener('touchstart', (e) => { if (hasClass(player.$root, settingShown)) return const { clientX, clientY } = e.changedTouches[0]! @@ -27,7 +33,7 @@ export default function (it: UIInterface) { $dom.addEventListener('touchend', end) } - if (config.slideToSeek == 'long-touch') { + if (slideToSeek == 'long-touch') { $dom.addEventListener('touchstart', (e) => { if (hasClass(player.$root, settingShown)) return const { clientX, clientY } = e.changedTouches[0]! @@ -72,7 +78,7 @@ export default function (it: UIInterface) { function end() { if (startX == 0 && startY == 0) return - if (config.slideToSeek == 'long-touch' && touchedTime < 1000) { + if (slideToSeek == 'long-touch' && touchedTime < 1000) { if (touchedTimer) clearInterval(touchedTimer) $dom.removeEventListener('touchmove', moving) } diff --git a/packages/ui/src/icons/settings.svg b/packages/ui/src/icons/settings.svg index 456f4545..e2be5af0 100644 --- a/packages/ui/src/icons/settings.svg +++ b/packages/ui/src/icons/settings.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 6fdebd0d..feaff045 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -1,4 +1,4 @@ -import { $, isMobile, mergeDeep } from '@oplayer/core' +import { $, mergeDeep } from '@oplayer/core' import { root } from './style' import { @@ -20,24 +20,29 @@ import renderNotice from './components/Notice' import renderSetting from './components/Setting' import renderSubtitle, { Subtitle } from './components/Subtitle' import { render as renderLayer } from './components/layer' +import { ICONS_MAP } from './functions/icons' -import type { Player } from '@oplayer/core' +import type { PartialRequired, Player } from '@oplayer/core' import type { Highlight, MenuBar, Setting, Thumbnails, UiConfig, UIInterface } from './types' -import { ICONS_MAP } from './functions/icons' const defaultConfig: UiConfig = { + theme: { + primaryColor: '#6668ab', + progress: { position: 'top', mini: true }, + controller: { + setting: 'auto', + display: 'always', + coverButton: true, + displayBehavior: 'hover' + } + }, + fullscreen: true, - coverButton: true, - miniProgressBar: true, autoFocus: true, forceLandscapeOnFullscreen: true, - settings: ['loop'], - showControls: 'always', keyboard: { focused: true }, - theme: { primaryColor: '#6668ab' }, - speeds: ['2.0', '1.5', '1.25', '1.0', '0.75', '0.5'], - ctrlHideBehavior: 'hover' + speeds: ['2.0', '1.5', '1.25', '1.0', '0.75', '0.5'] } class UI implements UIInterface { @@ -105,8 +110,10 @@ class UI implements UIInterface { progressHoverCallback: ((rate?: number /** 0 ~ 1 */) => void)[] = [] - constructor(public config: UiConfig) { - this.config = mergeDeep({}, defaultConfig, config) + config: PartialRequired + + constructor(config: UiConfig) { + this.config = mergeDeep({}, defaultConfig, config) as any if (this.config.keyboard?.global) { this.config.keyboard!.focused = false } @@ -129,13 +136,17 @@ class UI implements UIInterface { } this.icons = Icons.setupIcons(config.icons) + startListening(player, config) + registerKeyboard(this) renderError(player, $root, config) renderNotice(this) renderLoading(player, $root) - if (config.coverButton) this.$coverButton = renderCoverButton(player, $root) + if (config.theme.controller?.coverButton) { + this.$coverButton = renderCoverButton(player, $root) + } renderController(this) @@ -149,23 +160,12 @@ class UI implements UIInterface { registerSlide(this) registerFullScreenRotation(player, config) - if (!isMobile && (config.keyboard?.focused || config.keyboard?.global)) { - registerKeyboard(this) - } - $.render($root, player.$root) return this } destroy() {} - - /** - * @deprecated use changHighlightSource - */ - highlight(highlights: Highlight[]) { - return this.changHighlightSource(highlights) - } } export default function create(config?: UiConfig) { diff --git a/packages/ui/src/listeners/fullscreen.ts b/packages/ui/src/listeners/fullscreen.ts index a44b9a57..32d8033d 100644 --- a/packages/ui/src/listeners/fullscreen.ts +++ b/packages/ui/src/listeners/fullscreen.ts @@ -6,6 +6,7 @@ export default (player: Player) => { if (payload.isWeb) { player.$root.classList.toggle(webFullScreen) } else { + if (!player._requestFullscreen) return player.$root.classList.toggle(fullscreen) } }) diff --git a/packages/ui/src/style.ts b/packages/ui/src/style.ts index fed08e6a..ee3c4e6a 100644 --- a/packages/ui/src/style.ts +++ b/packages/ui/src/style.ts @@ -35,7 +35,7 @@ export const root = (config: UiConfig) => { { '--primary-color': `${config.theme!.primaryColor}`, '--shadow-background-color': 'rgba(28 ,28 ,28 , .9)', - '--control-bar-height': config.controlBar ? '2.5em' : 0, + '--control-bar-height': config.theme!.controller?.display ? '2.5em' : 0, position: 'absolute', top: '0', @@ -79,6 +79,7 @@ export const icon = $.css({ outline: 'none', font: 'inherit', color: 'inherit', + fill: '#fff', 'line-height': 'inherit', 'text-align': 'inherit', width: '100%', diff --git a/packages/ui/src/types.ts b/packages/ui/src/types.ts index ee51025a..f817e358 100644 --- a/packages/ui/src/types.ts +++ b/packages/ui/src/types.ts @@ -1,4 +1,4 @@ -import Player, { PlayerPlugin } from '@oplayer/core' +import Player, { PartialRequired, PlayerPlugin } from '@oplayer/core' import type { ICONS_MAP } from './functions/icons' import type { Subtitle as SubtitleInstance } from './components/Subtitle' @@ -81,19 +81,56 @@ export type UiConfig = { style?: Record attrs?: Record } + + progress?: { + /** + * default: 'auto' + * auto: mobile->top pc->top + */ + position?: 'auto' | 'top' | 'center' + backward?: number + forward?: number + /** + * default: true + * work only top + */ + mini?: boolean + } + + controller?: { + /** + * default: 'always' + */ + display?: 'always' | 'played' + /** + * default: false | only mobile + */ + header?: boolean | { back?: 'always' | 'fullscreen' } + /** + * default: true + */ + coverButton?: boolean + /** + * default: hover + * + */ + displayBehavior?: 'hover' | 'delay' | 'none' + /** + * default: 'none' + */ + slideToSeek?: 'none' | 'always' | 'long-touch' + /** + * default: 'auto' + * auto: mobile->top pc->top + */ + setting?: 'auto' | 'top' | 'bottom' + } } /** * default: false */ autoFocus?: boolean - /** - * PC only - default: { focused: true } - */ - keyboard?: { focused?: boolean; global?: boolean } - /** - * default: ['2.0', '1.75', '1.25', '1.0', '0.75', '0.5'] - */ - speeds?: string[] + /** * default: false */ @@ -107,25 +144,6 @@ export type UiConfig = { * default: false */ pictureInPicture?: boolean - /** - * default: true - */ - miniProgressBar?: boolean - - /** - * default: true - */ - coverButton?: boolean - - /** - * default: 'always' - */ - showControls?: 'always' | 'played' - - /** - * default: 'none' - */ - slideToSeek?: 'none' | 'always' | 'long-touch' /** * default: true @@ -136,25 +154,22 @@ export type UiConfig = { */ forceLandscapeOnFullscreen?: boolean - subtitle?: Subtitle /** - * default: ['loop', 'speed'] + * PC only - default: { focused: true } */ - settings?: (Setting | 'loop')[] | false + keyboard?: { focused?: boolean; global?: boolean } /** - * default: false - * back only work on mobile + * default: ['2.0', '1.75', '1.25', '1.0', '0.75', '0.5'] */ - controlBar?: { back?: 'always' | 'fullscreen' } // | boolean + speeds?: string[] - ctrlHideBehavior?: 'hover' | 'delay' | 'none' + subtitle?: Subtitle /** - * default: false - * required -> controlBar: true + * default: ['loop', 'speed'] */ - topSetting?: boolean + settings?: (Setting | 'loop')[] | false thumbnails?: Thumbnails @@ -172,7 +187,7 @@ export type UiConfig = { pause?: string volume?: [string, string] //on off fullscreen?: [string, string] - pip?: string + pip?: [string, string] setting?: string screenshot?: string playbackRate?: string @@ -185,7 +200,7 @@ export type UiConfig = { /* --- WIP --- */ - contextmenu?: [] + // contextmenu?: [] } export type ErrorPayload = @@ -196,7 +211,7 @@ export type ErrorPayload = } export interface UIInterface extends PlayerPlugin { - config: UiConfig + config: PartialRequired player: Player diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0e30f50..b5ee5a2c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,44 +14,44 @@ importers: .: devDependencies: '@babel/core': - specifier: ^7.24.0 - version: 7.24.0 + specifier: ^7.24.3 + version: 7.24.3 '@babel/plugin-syntax-dynamic-import': specifier: ^7.8.3 - version: 7.8.3(@babel/core@7.24.0) + version: 7.8.3(@babel/core@7.24.3) '@babel/plugin-transform-destructuring': - specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.24.0) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.3) '@babel/plugin-transform-logical-assignment-operators': - specifier: ^7.23.4 - version: 7.23.4(@babel/core@7.24.0) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.3) '@babel/plugin-transform-nullish-coalescing-operator': - specifier: ^7.23.4 - version: 7.23.4(@babel/core@7.24.0) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.3) '@babel/plugin-transform-object-rest-spread': - specifier: ^7.24.0 - version: 7.24.0(@babel/core@7.24.0) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.3) '@babel/plugin-transform-parameters': - specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.24.0) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.3) '@babel/plugin-transform-spread': - specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.24.0) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.3) '@babel/plugin-transform-template-literals': - specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.24.0) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.3) '@changesets/cli': specifier: ^2.27.1 version: 2.27.1 '@rollup/plugin-babel': specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.0) + version: 6.0.4(@babel/core@7.24.3) '@types/node': - specifier: ^20.11.29 - version: 20.11.29 + specifier: ^20.11.30 + version: 20.11.30 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.6) + version: 4.2.1(vite@5.2.3) babel-plugin-syntax-trailing-function-commas: specifier: ^6.22.0 version: 6.22.0 @@ -83,17 +83,17 @@ importers: specifier: ^2.6.2 version: 2.6.2 typescript: - specifier: ^5.4.2 - version: 5.4.2 + specifier: ^5.4.3 + version: 5.4.3 vite: - specifier: ^5.1.6 - version: 5.1.6(@types/node@20.11.29)(terser@5.29.2) + specifier: ^5.2.3 + version: 5.2.3(@types/node@20.11.30)(terser@5.29.2) vite-plugin-banner: specifier: ^0.7.1 version: 0.7.1 vitest: specifier: ^1.4.0 - version: 1.4.0(@types/node@20.11.29)(jsdom@24.0.0)(terser@5.29.2) + version: 1.4.0(@types/node@20.11.30)(jsdom@24.0.0)(terser@5.29.2) packages/core: {} @@ -149,14 +149,14 @@ importers: specifier: ^1.1.2 version: 1.1.2(@mdx-js/mdx@1.6.22)(@mdx-js/react@1.6.22)(react-dom@18.2.0)(react@18.2.0) next: - specifier: ^14.1.3 - version: 14.1.3(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) + specifier: ^14.1.4 + version: 14.1.4(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) nextra: specifier: ^2.13.4 - version: 2.13.4(patch_hash=lzd3lp6asxwn5o55s2tjjsvp3q)(next@14.1.3)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.4(patch_hash=lzd3lp6asxwn5o55s2tjjsvp3q)(next@14.1.4)(react-dom@18.2.0)(react@18.2.0) nextra-theme-docs: specifier: ^2.13.4 - version: 2.13.4(next@14.1.3)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.4(next@14.1.4)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -165,8 +165,8 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@types/react': - specifier: ^18.2.67 - version: 18.2.67 + specifier: ^18.2.69 + version: 18.2.69 '@types/react-dom': specifier: ^18.2.22 version: 18.2.22 @@ -213,8 +213,8 @@ importers: specifier: ^7.1.0 version: 7.1.0 vite-plugin-css-injected-by-js: - specifier: ^3.4.0 - version: 3.4.0(vite@5.1.6) + specifier: ^3.5.0 + version: 3.5.0(vite@5.2.3) packages/react: devDependencies: @@ -222,8 +222,8 @@ importers: specifier: workspace:* version: link:../core '@types/react': - specifier: ^18.2.67 - version: 18.2.67 + specifier: ^18.2.69 + version: 18.2.69 react: specifier: ^18.2.0 version: 18.2.0 @@ -259,15 +259,15 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.24.1: + resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} engines: {node: '>=6.9.0'} dev: true @@ -275,13 +275,13 @@ packages: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.12.9) - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/helpers': 7.24.1 + '@babel/parser': 7.24.1 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 1.9.0 debug: 4.3.4 @@ -295,19 +295,19 @@ packages: - supports-color dev: false - /@babel/core@7.24.0: - resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} + /@babel/core@7.24.3: + resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/helpers': 7.24.1 + '@babel/parser': 7.24.1 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 @@ -318,8 +318,8 @@ packages: - supports-color dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.24.1: + resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 @@ -331,7 +331,7 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.1 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 @@ -355,8 +355,8 @@ packages: dependencies: '@babel/types': 7.24.0 - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 @@ -369,21 +369,21 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 dev: false - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 @@ -416,8 +416,8 @@ packages: dependencies: '@babel/types': 7.24.0 - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.22.20: @@ -429,26 +429,27 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.24.0: - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} + /@babel/helpers@7.24.1: + resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 - /@babel/parser@7.24.0: - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + /@babel/parser@7.24.1: + resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: @@ -456,22 +457,21 @@ packages: /@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9): resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.10.4 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.12.9) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.12.9) dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.3): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true @@ -484,21 +484,21 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.3): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.3): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true @@ -511,63 +511,62 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.3): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.24.0): - resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.3) dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.24.0): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.3) dev: true - /@babel/plugin-transform-object-rest-spread@7.24.0(@babel/core@7.24.0): - resolution: {integrity: sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==} + /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.3) dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.12.9): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.12.9): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -576,59 +575,59 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: false - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + /@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + /@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.3): + resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/runtime@7.24.0: - resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} + /@babel/runtime@7.24.1: + resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -637,21 +636,21 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 - /@babel/traverse@7.24.0: - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 @@ -662,7 +661,7 @@ packages: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 @@ -673,7 +672,7 @@ packages: /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/config': 3.0.0 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 @@ -691,7 +690,7 @@ packages: /@changesets/assemble-release-plan@6.0.0: resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.0.0 '@changesets/types': 6.0.0 @@ -709,7 +708,7 @@ packages: resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/apply-release-plan': 7.0.0 '@changesets/assemble-release-plan': 6.0.0 '@changesets/changelog-git': 0.2.0 @@ -774,7 +773,7 @@ packages: /@changesets/get-release-plan@4.0.0: resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/assemble-release-plan': 6.0.0 '@changesets/config': 3.0.0 '@changesets/pre': 2.0.0 @@ -790,7 +789,7 @@ packages: /@changesets/git@3.0.0: resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -815,7 +814,7 @@ packages: /@changesets/pre@2.0.0: resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -825,7 +824,7 @@ packages: /@changesets/read@0.6.0: resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -846,15 +845,15 @@ packages: /@changesets/write@0.3.0: resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 dev: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -862,8 +861,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -871,8 +870,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -880,8 +879,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -889,8 +888,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -898,8 +897,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -907,8 +906,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -916,8 +915,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -925,8 +924,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -934,8 +933,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -943,8 +942,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -952,8 +951,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -961,8 +960,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -970,8 +969,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -979,8 +978,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -988,8 +987,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -997,8 +996,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1006,8 +1005,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1015,8 +1014,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1024,8 +1023,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1033,8 +1032,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1042,8 +1041,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1051,8 +1050,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1127,7 +1126,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -1136,7 +1135,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -1174,7 +1173,7 @@ packages: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: '@types/estree-jsx': 1.0.5 - '@types/mdx': 2.0.11 + '@types/mdx': 2.0.12 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 @@ -1207,8 +1206,8 @@ packages: peerDependencies: react: '>=16' dependencies: - '@types/mdx': 2.0.11 - '@types/react': 18.2.67 + '@types/mdx': 2.0.12 + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -1332,12 +1331,12 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.16 dev: false - /@next/env@14.1.3: - resolution: {integrity: sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ==} + /@next/env@14.1.4: + resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} dev: false - /@next/swc-darwin-arm64@14.1.3: - resolution: {integrity: sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==} + /@next/swc-darwin-arm64@14.1.4: + resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1345,8 +1344,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@14.1.3: - resolution: {integrity: sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==} + /@next/swc-darwin-x64@14.1.4: + resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1354,8 +1353,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@14.1.3: - resolution: {integrity: sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==} + /@next/swc-linux-arm64-gnu@14.1.4: + resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1363,8 +1362,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@14.1.3: - resolution: {integrity: sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==} + /@next/swc-linux-arm64-musl@14.1.4: + resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1372,8 +1371,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@14.1.3: - resolution: {integrity: sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==} + /@next/swc-linux-x64-gnu@14.1.4: + resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1381,8 +1380,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@14.1.3: - resolution: {integrity: sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==} + /@next/swc-linux-x64-musl@14.1.4: + resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1390,8 +1389,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@14.1.3: - resolution: {integrity: sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==} + /@next/swc-win32-arm64-msvc@14.1.4: + resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1399,8 +1398,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@14.1.3: - resolution: {integrity: sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==} + /@next/swc-win32-ia32-msvc@14.1.4: + resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1408,8 +1407,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@14.1.3: - resolution: {integrity: sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==} + /@next/swc-win32-x64-msvc@14.1.4: + resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1551,7 +1550,7 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@rollup/plugin-babel@6.0.4(@babel/core@7.24.0): + /@rollup/plugin-babel@6.0.4(@babel/core@7.24.3): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1564,8 +1563,8 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.24.0 - '@babel/helper-module-imports': 7.22.15 + '@babel/core': 7.24.3 + '@babel/helper-module-imports': 7.24.3 '@rollup/pluginutils': 5.1.0 dev: true @@ -1740,7 +1739,7 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -1756,7 +1755,7 @@ packages: /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 dev: true @@ -1769,13 +1768,13 @@ packages: /@types/bittorrent-protocol@3.1.6: resolution: {integrity: sha512-hqiRctJX9t9kknr6nn0q7UlcWHKvw2gSnPc/4jxt7Q/T0RP9txNv27Djue9ZjCNlAJ+irqAnCxtb+TcSpMyhtA==} dependencies: - '@types/node': 20.11.29 + '@types/node': 20.11.30 dev: true /@types/chrome@0.0.263: resolution: {integrity: sha512-As0vzv99ov3M6ZR7R6VzhMWFZXkPMrFrCEXXVrMN576Cm70fTkj7Df2CF+qEo170JepX50pd11cX6O4DSAtl2Q==} dependencies: - '@types/filesystem': 0.0.35 + '@types/filesystem': 0.0.36 '@types/har-format': 1.2.15 dev: true @@ -1814,8 +1813,8 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/filesystem@0.0.35: - resolution: {integrity: sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==} + /@types/filesystem@0.0.36: + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} dependencies: '@types/filewriter': 0.0.33 dev: true @@ -1851,7 +1850,7 @@ packages: /@types/magnet-uri@5.1.5: resolution: {integrity: sha512-SbBjlb1KGe38VfjRR+mwqztJd/4skhdKkRbIzPDhTy7IAeEAPZWIVSEkZw00Qr4ZZOGR3/ATJ20WWPBfrKHGdA==} dependencies: - '@types/node': 20.11.29 + '@types/node': 20.11.30 dev: true /@types/mdast@3.0.15: @@ -1866,8 +1865,8 @@ packages: '@types/unist': 3.0.2 dev: false - /@types/mdx@2.0.11: - resolution: {integrity: sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==} + /@types/mdx@2.0.12: + resolution: {integrity: sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==} dev: false /@types/minimist@1.2.5: @@ -1882,8 +1881,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@20.11.29: - resolution: {integrity: sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==} + /@types/node@20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} dependencies: undici-types: 5.26.5 dev: true @@ -1895,14 +1894,14 @@ packages: /@types/parse-torrent-file@4.0.6: resolution: {integrity: sha512-SxqVth0Iv0WuEkqWS5MaY4S4Tlyi+QHkElQREvsUPw2xHcPgKyQ2dkJRRv5vAxmLzH+tnMdOj1Nws/wsenbzUw==} dependencies: - '@types/node': 20.11.29 + '@types/node': 20.11.30 dev: true /@types/parse-torrent@5.8.7: resolution: {integrity: sha512-vZtYe450hO+KL7B5fejM8CHWg1LPZKeVXlolphPsWf6n4H0ZUlI6ICbqHoaFmH7JQmU2yRbGgyvqqizdFuGPFQ==} dependencies: '@types/magnet-uri': 5.1.5 - '@types/node': 20.11.29 + '@types/node': 20.11.30 '@types/parse-torrent-file': 4.0.6 dev: true @@ -1910,19 +1909,19 @@ packages: resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} dev: false - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} /@types/react-dom@18.2.22: resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==} dependencies: - '@types/react': 18.2.67 + '@types/react': 18.2.69 dev: true - /@types/react@18.2.67: - resolution: {integrity: sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==} + /@types/react@18.2.69: + resolution: {integrity: sha512-W1HOMUWY/1Yyw0ba5TkCV+oqynRjG7BnteBB+B7JmAK7iw3l2SW+VGOxL+akPweix6jk2NNJtyJKpn4TkpfK3Q==} dependencies: - '@types/prop-types': 15.7.11 + '@types/prop-types': 15.7.12 '@types/scheduler': 0.16.8 csstype: 3.1.3 @@ -1936,7 +1935,7 @@ packages: /@types/simple-peer@9.11.8: resolution: {integrity: sha512-rvqefdp2rvIA6wiomMgKWd2UZNPe6LM2EV5AuY3CPQJF+8TbdrL5TjYdMf0VAjGczzlkH4l1NjDkihwbj3Xodw==} dependencies: - '@types/node': 20.11.29 + '@types/node': 20.11.30 dev: true /@types/unist@2.0.10: @@ -1951,7 +1950,7 @@ packages: resolution: {integrity: sha512-Ms8xQNWioakNmWCEI7P4upO76KfbjZ8iszWWdNfq2iS02CKz9s5nzdRp9eb53aMvjgqNYqMw/jZ6yhIJwOc4HQ==} dependencies: '@types/bittorrent-protocol': 3.1.6 - '@types/node': 20.11.29 + '@types/node': 20.11.30 '@types/parse-torrent': 5.8.7 '@types/simple-peer': 9.11.8 dev: true @@ -1964,23 +1963,23 @@ packages: resolution: {integrity: sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==} engines: {node: '>=8', npm: '>=5'} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 global: 4.4.0 url-toolkit: 2.2.5 dev: true - /@vitejs/plugin-react@4.2.1(vite@5.1.6): + /@vitejs/plugin-react@4.2.1(vite@5.2.3): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.24.0) + '@babel/core': 7.24.3 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.3) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.3) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.6(@types/node@20.11.29)(terser@5.29.2) + vite: 5.2.3(@types/node@20.11.30)(terser@5.29.2) transitivePeerDependencies: - supports-color dev: true @@ -2172,7 +2171,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 es-shim-unscopables: 1.0.2 dev: true @@ -2183,7 +2182,7 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -2261,8 +2260,8 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /bare-events@2.2.1: - resolution: {integrity: sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==} + /bare-events@2.2.2: + resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} requiresBuild: true dev: true optional: true @@ -2452,8 +2451,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001599 - electron-to-chromium: 1.4.710 + caniuse-lite: 1.0.30001600 + electron-to-chromium: 1.4.715 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true @@ -2548,8 +2547,8 @@ packages: engines: {node: '>=6'} dev: true - /caniuse-lite@1.0.30001599: - resolution: {integrity: sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==} + /caniuse-lite@1.0.30001600: + resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} /ccount@1.1.0: resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} @@ -3293,7 +3292,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 dev: true /dayjs@1.11.10: @@ -3431,8 +3430,8 @@ packages: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} dev: true - /dompurify@3.0.9: - resolution: {integrity: sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ==} + /dompurify@3.0.11: + resolution: {integrity: sha512-Fan4uMuyB26gFV3ovPoEoQbxRRPfTu3CvImyZnhGq5fsIEO+gEFLp45ISFt+kQBWsK5ulDdT0oV28jS1UrwQLg==} dev: false /dotenv-expand@10.0.0: @@ -3453,8 +3452,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.710: - resolution: {integrity: sha512-w+9yAVHoHhysCa+gln7AzbO9CdjFcL/wN/5dd+XW/Msl2d/4+WisEaCF1nty0xbAKaxdaJfgLB2296U7zZB7BA==} + /electron-to-chromium@1.4.715: + resolution: {integrity: sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==} dev: true /elkjs@0.9.2: @@ -3508,53 +3507,6 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.5: - resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.5 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true - /es-abstract@1.23.2: resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} engines: {node: '>= 0.4'} @@ -3598,11 +3550,11 @@ packages: safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.7 + string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.5 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 dev: true @@ -3654,35 +3606,35 @@ packages: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 dev: true /escalade@3.1.2: @@ -3997,7 +3949,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.2 functions-have-names: 1.2.3 dev: true @@ -5236,7 +5188,7 @@ packages: /m3u8-parser@7.1.0: resolution: {integrity: sha512-7N+pk79EH4oLKPEYdgRXgAsKDyA/VCo0qCHlUwacttQA0WqsjZQYmNfywMvjlY9MpEBVZEt0jKFd73Kv15EBYQ==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@videojs/vhs-utils': 3.0.5 global: 4.4.0 dev: true @@ -5281,7 +5233,7 @@ packages: /match-sorter@6.3.4: resolution: {integrity: sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 remove-accents: 0.5.0 dev: false @@ -5588,7 +5540,7 @@ packages: d3-sankey: 0.12.3 dagre-d3-es: 7.0.10 dayjs: 1.11.10 - dompurify: 3.0.9 + dompurify: 3.0.11 elkjs: 0.9.2 katex: 0.16.9 khroma: 2.1.0 @@ -6068,7 +6020,7 @@ packages: acorn: 8.11.3 pathe: 1.1.2 pkg-types: 1.0.3 - ufo: 1.5.2 + ufo: 1.5.3 dev: true /mp4-box-encoding@1.4.1: @@ -6138,32 +6090,32 @@ packages: - supports-color dev: false - /next-seo@6.5.0(next@14.1.3)(react-dom@18.2.0)(react@18.2.0): + /next-seo@6.5.0(next@14.1.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-MfzUeWTN/x/rsKp/1n0213eojO97lIl0unxqbeCY+6pAucViHDA8GSLRRcXpgjsSmBxfCFdfpu7LXbt4ANQoNQ==} peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 14.1.3(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) + next: 14.1.4(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-themes@0.2.1(next@14.1.3)(react-dom@18.2.0)(react@18.2.0): + /next-themes@0.2.1(next@14.1.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: next: '*' react: '*' react-dom: '*' dependencies: - next: 14.1.3(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) + next: 14.1.4(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@14.1.3(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0): - resolution: {integrity: sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==} + /next@14.1.4(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0): + resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -6177,10 +6129,10 @@ packages: sass: optional: true dependencies: - '@next/env': 14.1.3 + '@next/env': 14.1.4 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001599 + caniuse-lite: 1.0.30001600 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 @@ -6188,21 +6140,21 @@ packages: sass: 1.72.0 styled-jsx: 5.1.1(@babel/core@7.12.9)(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.3 - '@next/swc-darwin-x64': 14.1.3 - '@next/swc-linux-arm64-gnu': 14.1.3 - '@next/swc-linux-arm64-musl': 14.1.3 - '@next/swc-linux-x64-gnu': 14.1.3 - '@next/swc-linux-x64-musl': 14.1.3 - '@next/swc-win32-arm64-msvc': 14.1.3 - '@next/swc-win32-ia32-msvc': 14.1.3 - '@next/swc-win32-x64-msvc': 14.1.3 + '@next/swc-darwin-arm64': 14.1.4 + '@next/swc-darwin-x64': 14.1.4 + '@next/swc-linux-arm64-gnu': 14.1.4 + '@next/swc-linux-arm64-musl': 14.1.4 + '@next/swc-linux-x64-gnu': 14.1.4 + '@next/swc-linux-x64-musl': 14.1.4 + '@next/swc-win32-arm64-msvc': 14.1.4 + '@next/swc-win32-ia32-msvc': 14.1.4 + '@next/swc-win32-x64-msvc': 14.1.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /nextra-theme-docs@2.13.4(next@14.1.3)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0): + /nextra-theme-docs@2.13.4(next@14.1.4)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2XOoMfwBCTYBt8ds4ZHftt9Wyf2XsykiNo02eir/XEYB+sGeUoE77kzqfidjEOKCSzOHYbK9BDMcg2+B/2vYRw==} peerDependencies: next: '>=9.5.3' @@ -6219,17 +6171,17 @@ packages: git-url-parse: 13.1.1 intersection-observer: 0.12.2 match-sorter: 6.3.4 - next: 14.1.3(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) - next-seo: 6.5.0(next@14.1.3)(react-dom@18.2.0)(react@18.2.0) - next-themes: 0.2.1(next@14.1.3)(react-dom@18.2.0)(react@18.2.0) - nextra: 2.13.4(patch_hash=lzd3lp6asxwn5o55s2tjjsvp3q)(next@14.1.3)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.4(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) + next-seo: 6.5.0(next@14.1.4)(react-dom@18.2.0)(react@18.2.0) + next-themes: 0.2.1(next@14.1.4)(react-dom@18.2.0)(react@18.2.0) + nextra: 2.13.4(patch_hash=lzd3lp6asxwn5o55s2tjjsvp3q)(next@14.1.4)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 zod: 3.22.4 dev: false - /nextra@2.13.4(patch_hash=lzd3lp6asxwn5o55s2tjjsvp3q)(next@14.1.3)(react-dom@18.2.0)(react@18.2.0): + /nextra@2.13.4(patch_hash=lzd3lp6asxwn5o55s2tjjsvp3q)(next@14.1.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7of2rSBxuUa3+lbMmZwG9cqgftcoNOVQLTT6Rxf3EhBR9t1EI7b43dted8YoqSNaigdE3j1CoyNkX8N/ZzlEpw==} engines: {node: '>=16'} peerDependencies: @@ -6249,7 +6201,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.9 lodash.get: 4.4.2 - next: 14.1.3(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) + next: 14.1.4(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.72.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -6555,7 +6507,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -6703,16 +6655,16 @@ packages: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.1.0 + source-map-js: 1.2.0 dev: false - /postcss@8.4.36: - resolution: {integrity: sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.1.0 + source-map-js: 1.2.0 dev: true /preferred-pm@3.1.3: @@ -7261,7 +7213,7 @@ packages: dependencies: chokidar: 3.6.0 immutable: 4.3.5 - source-map-js: 1.1.0 + source-map-js: 1.2.0 /sax@1.2.1: resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} @@ -7493,8 +7445,8 @@ packages: is-plain-obj: 4.1.0 dev: false - /source-map-js@1.1.0: - resolution: {integrity: sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} /source-map-support@0.5.21: @@ -7630,7 +7582,7 @@ packages: fast-fifo: 1.3.2 queue-tick: 1.0.1 optionalDependencies: - bare-events: 2.2.1 + bare-events: 2.2.2 dev: true /string-argv@0.3.2: @@ -7683,12 +7635,13 @@ packages: es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-object-atoms: 1.0.0 dev: true /string2compact@1.3.2: @@ -8100,8 +8053,8 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.5: - resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -8112,8 +8065,8 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -8122,8 +8075,8 @@ packages: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} dev: true - /ufo@1.5.2: - resolution: {integrity: sha512-eiutMaL0J2MKdhcOM1tUy13pIrYnyR87fEd8STJQFrrAwImwvlXkxlZEjaKah8r2viPohld08lt73QfLG1NxMg==} + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} dev: true /uint64be@2.0.2: @@ -8538,7 +8491,7 @@ packages: range-slice-stream: 2.0.0 dev: true - /vite-node@1.4.0(@types/node@20.11.29)(terser@5.29.2): + /vite-node@1.4.0(@types/node@20.11.30)(terser@5.29.2): resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -8547,7 +8500,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.6(@types/node@20.11.29)(terser@5.29.2) + vite: 5.2.3(@types/node@20.11.30)(terser@5.29.2) transitivePeerDependencies: - '@types/node' - less @@ -8563,16 +8516,16 @@ packages: resolution: {integrity: sha512-Bww2Xd5tOGsZ1yZ9rQiGneryvsL1u86znPrqeQjCsXPsG72pnSdV5lcQA+cy8UNDguMqyTJiCevlNUbLnT85UA==} dev: true - /vite-plugin-css-injected-by-js@3.4.0(vite@5.1.6): - resolution: {integrity: sha512-wS5+UYtJXQ/vNornsqTQxOLBVO/UjXU54ZsYMeX0mj2OrbStMQ4GLgvneVDQGPwyGJcm/ntBPawc2lA7xx+Lpg==} + /vite-plugin-css-injected-by-js@3.5.0(vite@5.2.3): + resolution: {integrity: sha512-d0QaHH9kS93J25SwRqJNEfE29PSuQS5jn51y9N9i2Yoq0FRO7rjuTeLvjM5zwklZlRrIn6SUdtOEDKyHokgJZg==} peerDependencies: vite: '>2.0.0-0' dependencies: - vite: 5.1.6(@types/node@20.11.29)(terser@5.29.2) + vite: 5.2.3(@types/node@20.11.30)(terser@5.29.2) dev: true - /vite@5.1.6(@types/node@20.11.29)(terser@5.29.2): - resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==} + /vite@5.2.3(@types/node@20.11.30)(terser@5.29.2): + resolution: {integrity: sha512-+i1oagbvkVIhEy9TnEV+fgXsng13nZM90JQbrcPrf6DvW2mXARlz+DK7DLiDP+qeKoD1FCVx/1SpFL1CLq9Mhw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8599,16 +8552,16 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.29 - esbuild: 0.19.12 - postcss: 8.4.36 + '@types/node': 20.11.30 + esbuild: 0.20.2 + postcss: 8.4.38 rollup: 4.13.0 terser: 5.29.2 optionalDependencies: fsevents: 2.3.3 dev: true - /vitest@1.4.0(@types/node@20.11.29)(jsdom@24.0.0)(terser@5.29.2): + /vitest@1.4.0(@types/node@20.11.30)(jsdom@24.0.0)(terser@5.29.2): resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -8633,7 +8586,7 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.11.29 + '@types/node': 20.11.30 '@vitest/expect': 1.4.0 '@vitest/runner': 1.4.0 '@vitest/snapshot': 1.4.0 @@ -8652,8 +8605,8 @@ packages: strip-literal: 2.0.0 tinybench: 2.6.0 tinypool: 0.8.2 - vite: 5.1.6(@types/node@20.11.29)(terser@5.29.2) - vite-node: 1.4.0(@types/node@20.11.29)(terser@5.29.2) + vite: 5.2.3(@types/node@20.11.30)(terser@5.29.2) + vite-node: 1.4.0(@types/node@20.11.30)(terser@5.29.2) why-is-node-running: 2.2.2 transitivePeerDependencies: - less