A design system in a box. hip-ui.tngl.io/docs/introduction
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

add format support

+347 -109
+91 -11
apps/docs/src/components/video/index.tsx
··· 1 1 "use client"; 2 - 3 - import type { ElementRef } from "react"; 4 - 5 2 import * as stylex from "@stylexjs/stylex"; 6 3 import { 7 4 MediaControlBar, ··· 20 17 MediaCaptionsMenu, 21 18 MediaCaptionsMenuButton, 22 19 } from "media-chrome/react/menu"; 23 - import { useRef } from "react"; 24 20 25 21 import type { StyleXComponentProps } from "../theme/types"; 26 22 ··· 40 36 | "descriptions" 41 37 | "metadata" 42 38 | "subtitles"; 39 + type VideoMediaTag = 40 + | "cloudflare-video" 41 + | "dash-video" 42 + | "hls-video" 43 + | "jwplayer-video" 44 + | "mux-video" 45 + | "shaka-video" 46 + | "video" 47 + | "video-js-video" 48 + | "vimeo-video" 49 + | "wistia-video" 50 + | "youtube-video"; 43 51 44 52 const styles = stylex.create({ 45 53 root: { ··· 74 82 "--media-control-padding": verticalSpace.lg, 75 83 "--media-icon-color": uiColor.text1, 76 84 "--media-primary-color": primaryColor.solid1, 77 - "--media-range-track-background": uiColor.border1, 85 + "--media-range-track-background": uiColor.border3, 78 86 "--media-range-track-height": "4px", 79 87 "--media-secondary-color": uiColor.bgSubtle, 80 88 "--media-text-color": uiColor.text2, ··· 94 102 }), 95 103 }); 96 104 105 + function getMediaTag(src?: string, mediaType?: VideoMediaTag): VideoMediaTag { 106 + if (mediaType) { 107 + return mediaType; 108 + } 109 + 110 + if (!src) { 111 + return "video"; 112 + } 113 + 114 + const normalizedSrc = src.toLowerCase(); 115 + 116 + if ( 117 + normalizedSrc.includes("iframe.videodelivery.net") || 118 + (normalizedSrc.includes("customer-") && 119 + normalizedSrc.includes(".cloudflarestream.com")) 120 + ) { 121 + return "cloudflare-video"; 122 + } 123 + 124 + if (normalizedSrc.includes(".mpd")) { 125 + return "dash-video"; 126 + } 127 + 128 + if ( 129 + normalizedSrc.includes(".m3u8") || 130 + normalizedSrc.includes("getvideoplaylist") 131 + ) { 132 + return "hls-video"; 133 + } 134 + 135 + if ( 136 + normalizedSrc.includes("jwplayer.com") || 137 + normalizedSrc.includes("jwplatform.com") 138 + ) { 139 + return "jwplayer-video"; 140 + } 141 + 142 + if (normalizedSrc.includes("stream.mux.com")) { 143 + return "mux-video"; 144 + } 145 + 146 + if ( 147 + normalizedSrc.includes("player.vimeo.com") || 148 + normalizedSrc.includes("vimeo.com") 149 + ) { 150 + return "vimeo-video"; 151 + } 152 + 153 + if ( 154 + normalizedSrc.includes("fast.wistia.com") || 155 + normalizedSrc.includes("wistia.com") || 156 + normalizedSrc.includes("wistia.net") 157 + ) { 158 + return "wistia-video"; 159 + } 160 + 161 + if ( 162 + normalizedSrc.includes("youtube.com") || 163 + normalizedSrc.includes("youtube-nocookie.com") || 164 + normalizedSrc.includes("youtu.be") 165 + ) { 166 + return "youtube-video"; 167 + } 168 + 169 + return "video"; 170 + } 171 + 97 172 /** 98 173 * A subtitle or caption track rendered as a native `<track>` element. 99 174 */ ··· 187 262 * Subtitle and caption tracks rendered inside the media element. 188 263 */ 189 264 subtitleTracks?: Array<VideoSubtitleTrack>; 265 + /** 266 + * Override the Media Chrome media element used by the player. 267 + * When omitted, the component will infer common providers from `src` 268 + * and otherwise fall back to the native `video` element. 269 + */ 270 + mediaType?: VideoMediaTag; 190 271 } 191 272 192 273 export function Video({ ··· 196 277 seekOffset = DEFAULT_SEEK_OFFSET, 197 278 style, 198 279 aspectRatio = 16 / 9, 280 + mediaType, 199 281 subtitleTracks = [], 200 282 ...props 201 283 }: VideoProps) { 202 284 const { src, ...videoProps } = props; 203 - const controllerRef = useRef<ElementRef<typeof MediaController> | null>(null); 204 - const videoRef = useRef<HTMLVideoElement | null>(null); 205 285 const hasSubtitleTracks = subtitleTracks.length > 0; 286 + const mediaTag = getMediaTag(src, mediaType); 287 + const MediaTag = mediaTag as unknown as React.ElementType; 206 288 207 289 return ( 208 290 <div 209 291 {...stylex.props(styles.root, rounded && styles.rounded, ui.bgDim, style)} 210 292 > 211 293 <MediaController 212 - ref={controllerRef} 213 294 {...stylex.props(styles.controller, styles.controllerTheme)} 214 295 > 215 296 {/* oxlint-disable-next-line jsx_a11y/media-has-caption */} 216 - <video 297 + <MediaTag 217 298 {...videoProps} 218 - ref={videoRef} 219 299 preload={preload} 220 300 slot="media" 221 301 src={src} ··· 231 311 srcLang={track.srcLang} 232 312 /> 233 313 ))} 234 - </video> 314 + </MediaTag> 235 315 {hasSubtitleTracks ? <MediaCaptionsMenu anchor="auto" hidden /> : null} 236 316 {children ?? ( 237 317 <MediaControlBar>
+50 -8
apps/docs/src/docs/components/content/video.mdx
··· 6 6 import { PropDocs } from "../../../lib/PropDocs"; 7 7 import { Example } from "../../../lib/Example"; 8 8 import { Basic } from "../../../examples/video/basic"; 9 + import { CustomControls } from "../../../examples/video/custom-controls"; 9 10 import { Tracks } from "../../../examples/video/tracks"; 10 11 11 12 <Example src={Basic} /> ··· 20 21 21 22 ## Features 22 23 23 - ### Default controls 24 + ### Media Types 24 25 25 - The component ships with play, seek, timeline, volume, and fullscreen controls. 26 + The default player renders a native `video` element. 27 + Pass `mediaType` when you want to target another Media Chrome media element directly. 28 + When `src` contains a recognizable provider URL, the component also auto-detects common media types. 29 + This currently covers HLS, DASH, Cloudflare Stream, JW Player, Mux, Vimeo, Wistia, and YouTube. 30 + For wrappers like Shaka and Video.js, pass `mediaType` explicitly. 26 31 27 - ### Layout stability 32 + Supported media tags: 28 33 29 - The player reserves space with an aspect ratio by default. 30 - This helps avoid layout shift while the media metadata loads. 34 + - [Cloudflare](https://www.media-chrome.org/docs/en/media-elements/cloudflare-video) 35 + - [DASH](https://www.media-chrome.org/docs/en/media-elements/dash-video) 36 + - [HLS](https://www.media-chrome.org/docs/en/media-elements/hls-video) 37 + - [JWPlayer](https://www.media-chrome.org/docs/en/media-elements/jwplayer-video) 38 + - [Mux](https://www.media-chrome.org/docs/en/media-elements/mux-video) 39 + - [Shaka](https://www.media-chrome.org/docs/en/media-elements/shaka-video) 40 + - [Video.js](https://www.media-chrome.org/docs/en/media-elements/video-js-video) 41 + - [Vimeo](https://www.media-chrome.org/docs/en/media-elements/vimeo-video) 42 + - [Wistia](https://www.media-chrome.org/docs/en/media-elements/wistia-video) 43 + - [YouTube](https://www.media-chrome.org/docs/en/media-elements/youtube-video) 31 44 32 - ### Custom controls 45 + #### Setup 33 46 34 - Pass custom Media Chrome children when you need a different control layout. 35 - If you do not pass children, the default control bar is rendered automatically. 47 + Install and register the media element package that matches the provider you want to use. 48 + For example, HLS playback uses `hls-video-element`. 49 + 50 + ```bash 51 + pnpm i hls-video-element 52 + ``` 53 + 54 + Import the package in the app where you render `Video`. 55 + Then either let the component infer the media element from `src`, or set `mediaType` explicitly. 56 + 57 + ```tsx 58 + import "hls-video-element"; 59 + 60 + function Example() { 61 + return ( 62 + <Video 63 + mediaType="hls-video" 64 + src="https://example.com/video.m3u8" 65 + /> 66 + ); 67 + } 68 + ``` 69 + 70 + The same pattern applies to the other Media Chrome media elements listed above. 36 71 37 72 ### Tracks 38 73 ··· 40 75 Pass `audioTracks` to show the audio track menu and expose alternate selections in the default controls. 41 76 42 77 <Example src={Tracks} /> 78 + 79 + ### Custom controls 80 + 81 + Pass custom Media Chrome children when you need a different control layout. 82 + If you do not pass children, the default control bar is rendered automatically. 83 + 84 + <Example src={CustomControls} /> 43 85 44 86 ## Props 45 87
+34
apps/docs/src/examples/video/custom-controls.tsx
··· 1 + import * as stylex from "@stylexjs/stylex"; 2 + import { 3 + MediaControlBar, 4 + MediaSeekBackwardButton, 5 + MediaSeekForwardButton, 6 + MediaTimeRange, 7 + } from "media-chrome/react"; 8 + 9 + import { Video } from "@/components/video"; 10 + 11 + const styles = stylex.create({ 12 + example: { 13 + maxWidth: 720, 14 + width: "100%", 15 + }, 16 + }); 17 + 18 + export function CustomControls() { 19 + return ( 20 + <Video 21 + crossOrigin="" 22 + playsInline 23 + poster="https://image.mux.com/DS00Spx1CV902MCtPj5WknGlR102V5HFkDe/thumbnail.webp?width=1280" 24 + src="https://stream.mux.com/DS00Spx1CV902MCtPj5WknGlR102V5HFkDe/high.mp4" 25 + style={styles.example} 26 + > 27 + <MediaControlBar> 28 + <MediaSeekBackwardButton seekOffset={5} /> 29 + <MediaTimeRange /> 30 + <MediaSeekForwardButton seekOffset={5} /> 31 + </MediaControlBar> 32 + </Video> 33 + ); 34 + }
+92 -10
packages/hip-ui/src/components/video/index.tsx
··· 1 1 "use client"; 2 2 3 - import type { ElementRef } from "react"; 4 - 5 3 import * as stylex from "@stylexjs/stylex"; 6 4 import { 7 5 MediaControlBar, ··· 20 18 MediaCaptionsMenu, 21 19 MediaCaptionsMenuButton, 22 20 } from "media-chrome/react/menu"; 23 - import { useRef } from "react"; 24 21 25 22 import type { StyleXComponentProps } from "../theme/types"; 26 23 ··· 40 37 | "descriptions" 41 38 | "metadata" 42 39 | "subtitles"; 40 + type VideoMediaTag = 41 + | "cloudflare-video" 42 + | "dash-video" 43 + | "hls-video" 44 + | "jwplayer-video" 45 + | "mux-video" 46 + | "shaka-video" 47 + | "video" 48 + | "video-js-video" 49 + | "vimeo-video" 50 + | "wistia-video" 51 + | "youtube-video"; 43 52 44 53 const styles = stylex.create({ 45 54 root: { ··· 74 83 "--media-control-padding": verticalSpace.lg, 75 84 "--media-icon-color": uiColor.text1, 76 85 "--media-primary-color": primaryColor.solid1, 77 - "--media-range-track-background": uiColor.border1, 86 + "--media-range-track-background": uiColor.border3, 78 87 "--media-range-track-height": "4px", 79 88 "--media-secondary-color": uiColor.bgSubtle, 80 89 "--media-text-color": uiColor.text2, ··· 94 103 }), 95 104 }); 96 105 106 + function getMediaTag(src?: string, mediaType?: VideoMediaTag): VideoMediaTag { 107 + if (mediaType) { 108 + return mediaType; 109 + } 110 + 111 + if (!src) { 112 + return "video"; 113 + } 114 + 115 + const normalizedSrc = src.toLowerCase(); 116 + 117 + if ( 118 + normalizedSrc.includes("iframe.videodelivery.net") || 119 + (normalizedSrc.includes("customer-") && 120 + normalizedSrc.includes(".cloudflarestream.com")) 121 + ) { 122 + return "cloudflare-video"; 123 + } 124 + 125 + if (normalizedSrc.includes(".mpd")) { 126 + return "dash-video"; 127 + } 128 + 129 + if ( 130 + normalizedSrc.includes(".m3u8") || 131 + normalizedSrc.includes("getvideoplaylist") 132 + ) { 133 + return "hls-video"; 134 + } 135 + 136 + if ( 137 + normalizedSrc.includes("jwplayer.com") || 138 + normalizedSrc.includes("jwplatform.com") 139 + ) { 140 + return "jwplayer-video"; 141 + } 142 + 143 + if (normalizedSrc.includes("stream.mux.com")) { 144 + return "mux-video"; 145 + } 146 + 147 + if ( 148 + normalizedSrc.includes("player.vimeo.com") || 149 + normalizedSrc.includes("vimeo.com") 150 + ) { 151 + return "vimeo-video"; 152 + } 153 + 154 + if ( 155 + normalizedSrc.includes("fast.wistia.com") || 156 + normalizedSrc.includes("wistia.com") || 157 + normalizedSrc.includes("wistia.net") 158 + ) { 159 + return "wistia-video"; 160 + } 161 + 162 + if ( 163 + normalizedSrc.includes("youtube.com") || 164 + normalizedSrc.includes("youtube-nocookie.com") || 165 + normalizedSrc.includes("youtu.be") 166 + ) { 167 + return "youtube-video"; 168 + } 169 + 170 + return "video"; 171 + } 172 + 97 173 /** 98 174 * A subtitle or caption track rendered as a native `<track>` element. 99 175 */ ··· 187 263 * Subtitle and caption tracks rendered inside the media element. 188 264 */ 189 265 subtitleTracks?: Array<VideoSubtitleTrack>; 266 + /** 267 + * Override the Media Chrome media element used by the player. 268 + * When omitted, the component will infer common providers from `src` 269 + * and otherwise fall back to the native `video` element. 270 + */ 271 + mediaType?: VideoMediaTag; 190 272 } 191 273 192 274 export function Video({ ··· 196 278 seekOffset = DEFAULT_SEEK_OFFSET, 197 279 style, 198 280 aspectRatio = 16 / 9, 281 + mediaType, 199 282 subtitleTracks = [], 200 283 ...props 201 284 }: VideoProps) { 202 285 const { src, ...videoProps } = props; 203 - const controllerRef = useRef<ElementRef<typeof MediaController> | null>(null); 204 - const videoRef = useRef<HTMLVideoElement | null>(null); 205 286 const hasSubtitleTracks = subtitleTracks.length > 0; 287 + const mediaTag = getMediaTag(src, mediaType); 288 + const MediaTag = mediaTag as unknown as React.ElementType; 206 289 207 290 return ( 208 291 <div 209 292 {...stylex.props(styles.root, rounded && styles.rounded, ui.bgDim, style)} 210 293 > 211 294 <MediaController 212 - ref={controllerRef} 213 295 {...stylex.props(styles.controller, styles.controllerTheme)} 214 296 > 297 + {/* Caption tracks are app-specific, so the wrapper forwards native video props instead of forcing a track API. */} 215 298 {/* oxlint-disable-next-line jsx_a11y/media-has-caption */} 216 - <video 299 + <MediaTag 217 300 {...videoProps} 218 - ref={videoRef} 219 301 preload={preload} 220 302 slot="media" 221 303 src={src} ··· 231 313 srcLang={track.srcLang} 232 314 /> 233 315 ))} 234 - </video> 316 + </MediaTag> 235 317 {hasSubtitleTracks ? <MediaCaptionsMenu anchor="auto" hidden /> : null} 236 318 {children ?? ( 237 319 <MediaControlBar>
+80 -80
pnpm-lock.yaml
··· 100 100 version: 61.0.2(eslint@9.38.0(jiti@2.6.1)) 101 101 oxfmt: 102 102 specifier: latest 103 - version: 0.42.0 103 + version: 0.43.0 104 104 oxlint: 105 105 specifier: ^1.48.0 106 106 version: 1.50.0 ··· 1372 1372 '@oxc-project/types@0.122.0': 1373 1373 resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} 1374 1374 1375 - '@oxfmt/binding-android-arm-eabi@0.42.0': 1376 - resolution: {integrity: sha512-dsqPTYsozeokRjlrt/b4E7Pj0z3eS3Eg74TWQuuKbjY4VttBmA88rB7d50Xrd+TZ986qdXCNeZRPEzZHAe+jow==} 1375 + '@oxfmt/binding-android-arm-eabi@0.43.0': 1376 + resolution: {integrity: sha512-CgU2s+/9hHZgo0IxVxrbMPrMj+tJ6VM3mD7Mr/4oiz4FNTISLoCvRmB5nk4wAAle045RtRjd86m673jwPyb1OQ==} 1377 1377 engines: {node: ^20.19.0 || >=22.12.0} 1378 1378 cpu: [arm] 1379 1379 os: [android] 1380 1380 1381 - '@oxfmt/binding-android-arm64@0.42.0': 1382 - resolution: {integrity: sha512-t+aAjHxcr5eOBphFHdg1ouQU9qmZZoRxnX7UOJSaTwSoKsb6TYezNKO0YbWytGXCECObRqNcUxPoPr0KaraAIg==} 1381 + '@oxfmt/binding-android-arm64@0.43.0': 1382 + resolution: {integrity: sha512-T9OfRwjA/EdYxAqbvR7TtqLv5nIrwPXuCtTwOHtS7aR9uXyn74ZYgzgTo6/ZwvTq9DY4W+DsV09hB2EXgn9EbA==} 1383 1383 engines: {node: ^20.19.0 || >=22.12.0} 1384 1384 cpu: [arm64] 1385 1385 os: [android] 1386 1386 1387 - '@oxfmt/binding-darwin-arm64@0.42.0': 1388 - resolution: {integrity: sha512-ulpSEYMKg61C5bRMZinFHrKJYRoKGVbvMEXA5zM1puX3O9T6Q4XXDbft20yrDijpYWeuG59z3Nabt+npeTsM1A==} 1387 + '@oxfmt/binding-darwin-arm64@0.43.0': 1388 + resolution: {integrity: sha512-o3i49ZUSJWANzXMAAVY1wnqb65hn4JVzwlRQ5qfcwhRzIA8lGVaud31Q3by5ALHPrksp5QEaKCQF9aAS3TXpZA==} 1389 1389 engines: {node: ^20.19.0 || >=22.12.0} 1390 1390 cpu: [arm64] 1391 1391 os: [darwin] 1392 1392 1393 - '@oxfmt/binding-darwin-x64@0.42.0': 1394 - resolution: {integrity: sha512-ttxLKhQYPdFiM8I/Ri37cvqChE4Xa562nNOsZFcv1CKTVLeEozXjKuYClNvxkXmNlcF55nzM80P+CQkdFBu+uQ==} 1393 + '@oxfmt/binding-darwin-x64@0.43.0': 1394 + resolution: {integrity: sha512-vWECzzCFkb0kK6jaHjbtC5sC3adiNWtqawFCxhpvsWlzVeKmv5bNvkB4nux+o4JKWTpHCM57NDK/MeXt44txmA==} 1395 1395 engines: {node: ^20.19.0 || >=22.12.0} 1396 1396 cpu: [x64] 1397 1397 os: [darwin] 1398 1398 1399 - '@oxfmt/binding-freebsd-x64@0.42.0': 1400 - resolution: {integrity: sha512-Og7QS3yI3tdIKYZ58SXik0rADxIk2jmd+/YvuHRyKULWpG4V2fR5V4hvKm624Mc0cQET35waPXiCQWvjQEjwYQ==} 1399 + '@oxfmt/binding-freebsd-x64@0.43.0': 1400 + resolution: {integrity: sha512-rgz8JpkKiI/umOf7fl9gwKyQasC8bs5SYHy6g7e4SunfLBY3+8ATcD5caIg8KLGEtKFm5ujKaH8EfjcmnhzTLg==} 1401 1401 engines: {node: ^20.19.0 || >=22.12.0} 1402 1402 cpu: [x64] 1403 1403 os: [freebsd] 1404 1404 1405 - '@oxfmt/binding-linux-arm-gnueabihf@0.42.0': 1406 - resolution: {integrity: sha512-jwLOw/3CW4H6Vxcry4/buQHk7zm9Ne2YsidzTL1kpiMe4qqrRCwev3dkyWe2YkFmP+iZCQ7zku4KwjcLRoh8ew==} 1405 + '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': 1406 + resolution: {integrity: sha512-nWYnF3vIFzT4OM1qL/HSf1Yuj96aBuKWSaObXHSWliwAk2rcj7AWd6Lf7jowEBQMo4wCZVnueIGw/7C4u0KTBQ==} 1407 1407 engines: {node: ^20.19.0 || >=22.12.0} 1408 1408 cpu: [arm] 1409 1409 os: [linux] 1410 1410 1411 - '@oxfmt/binding-linux-arm-musleabihf@0.42.0': 1412 - resolution: {integrity: sha512-XwXu2vkMtiq2h7tfvN+WA/9/5/1IoGAVCFPiiQUvcAuG3efR97KNcRGM8BetmbYouFotQ2bDal3yyjUx6IPsTg==} 1411 + '@oxfmt/binding-linux-arm-musleabihf@0.43.0': 1412 + resolution: {integrity: sha512-sFg+NWJbLfupYTF4WELHAPSnLPOn1jiDZ33Z1jfDnTaA+cC3iB35x0FMMZTFdFOz3icRIArncwCcemJFGXu6TQ==} 1413 1413 engines: {node: ^20.19.0 || >=22.12.0} 1414 1414 cpu: [arm] 1415 1415 os: [linux] 1416 1416 1417 - '@oxfmt/binding-linux-arm64-gnu@0.42.0': 1418 - resolution: {integrity: sha512-ea7s/XUJoT7ENAtUQDudFe3nkSM3e3Qpz4nJFRdzO2wbgXEcjnchKLEsV3+t4ev3r8nWxIYr9NRjPWtnyIFJVA==} 1417 + '@oxfmt/binding-linux-arm64-gnu@0.43.0': 1418 + resolution: {integrity: sha512-MelWqv68tX6wZEILDrTc9yewiGXe7im62+5x0bNXlCYFOZdA+VnYiJfAihbROsZ5fm90p9C3haFrqjj43XnlAA==} 1419 1419 engines: {node: ^20.19.0 || >=22.12.0} 1420 1420 cpu: [arm64] 1421 1421 os: [linux] 1422 1422 1423 - '@oxfmt/binding-linux-arm64-musl@0.42.0': 1424 - resolution: {integrity: sha512-+JA0YMlSdDqmacygGi2REp57c3fN+tzARD8nwsukx9pkCHK+6DkbAA9ojS4lNKsiBjIW8WWa0pBrBWhdZEqfuw==} 1423 + '@oxfmt/binding-linux-arm64-musl@0.43.0': 1424 + resolution: {integrity: sha512-ROaWfYh+6BSJ1Arwy5ujijTlwnZetxDxzBpDc1oBR4d7rfrPBqzeyjd5WOudowzQUgyavl2wEpzn1hw3jWcqLA==} 1425 1425 engines: {node: ^20.19.0 || >=22.12.0} 1426 1426 cpu: [arm64] 1427 1427 os: [linux] 1428 1428 1429 - '@oxfmt/binding-linux-ppc64-gnu@0.42.0': 1430 - resolution: {integrity: sha512-VfnET0j4Y5mdfCzh5gBt0NK28lgn5DKx+8WgSMLYYeSooHhohdbzwAStLki9pNuGy51y4I7IoW8bqwAaCMiJQg==} 1429 + '@oxfmt/binding-linux-ppc64-gnu@0.43.0': 1430 + resolution: {integrity: sha512-PJRs/uNxmFipJJ8+SyKHh7Y7VZIKQicqrrBzvfyM5CtKi8D7yZKTwUOZV3ffxmiC2e7l1SDJpkBEOyue5NAFsg==} 1431 1431 engines: {node: ^20.19.0 || >=22.12.0} 1432 1432 cpu: [ppc64] 1433 1433 os: [linux] 1434 1434 1435 - '@oxfmt/binding-linux-riscv64-gnu@0.42.0': 1436 - resolution: {integrity: sha512-gVlCbmBkB0fxBWbhBj9rcxezPydsQHf4MFKeHoTSPicOQ+8oGeTQgQ8EeesSybWeiFPVRx3bgdt4IJnH6nOjAA==} 1435 + '@oxfmt/binding-linux-riscv64-gnu@0.43.0': 1436 + resolution: {integrity: sha512-j6biGAgzIhj+EtHXlbNumvwG7XqOIdiU4KgIWRXAEj/iUbHKukKW8eXa4MIwpQwW1YkxovduKtzEAPnjlnAhVQ==} 1437 1437 engines: {node: ^20.19.0 || >=22.12.0} 1438 1438 cpu: [riscv64] 1439 1439 os: [linux] 1440 1440 1441 - '@oxfmt/binding-linux-riscv64-musl@0.42.0': 1442 - resolution: {integrity: sha512-zN5OfstL0avgt/IgvRu0zjQzVh/EPkcLzs33E9LMAzpqlLWiPWeMDZyMGFlSRGOdDjuNmlZBCgj0pFnK5u32TQ==} 1441 + '@oxfmt/binding-linux-riscv64-musl@0.43.0': 1442 + resolution: {integrity: sha512-RYWxAcslKxvy7yri24Xm9cmD0RiANaiEPs007EFG6l9h1ChM69Q5SOzACaCoz4Z9dEplnhhneeBaTWMEdpgIbA==} 1443 1443 engines: {node: ^20.19.0 || >=22.12.0} 1444 1444 cpu: [riscv64] 1445 1445 os: [linux] 1446 1446 1447 - '@oxfmt/binding-linux-s390x-gnu@0.42.0': 1448 - resolution: {integrity: sha512-9X6+H2L0qMc2sCAgO9HS03bkGLMKvOFjmEdchaFlany3vNZOjnVui//D8k/xZAtQv2vaCs1reD5KAgPoIU4msA==} 1447 + '@oxfmt/binding-linux-s390x-gnu@0.43.0': 1448 + resolution: {integrity: sha512-DT6Q8zfQQy3jxpezAsBACEHNUUixKSYTwdXeXojNHe4DQOoxjPdjr3Szu6BRNjxLykZM/xMNmp9ElOIyDppwtw==} 1449 1449 engines: {node: ^20.19.0 || >=22.12.0} 1450 1450 cpu: [s390x] 1451 1451 os: [linux] 1452 1452 1453 - '@oxfmt/binding-linux-x64-gnu@0.42.0': 1454 - resolution: {integrity: sha512-BajxJ6KQvMMdpXGPWhBGyjb2Jvx4uec0w+wi6TJZ6Tv7+MzPwe0pO8g5h1U0jyFgoaF7mDl6yKPW3ykWcbUJRw==} 1453 + '@oxfmt/binding-linux-x64-gnu@0.43.0': 1454 + resolution: {integrity: sha512-R8Yk7iYcuZORXmCfFZClqbDxRZgZ9/HEidUuBNdoX8Ptx07cMePnMVJ/woB84lFIDjh2ROHVaOP40Ds3rBXFqg==} 1455 1455 engines: {node: ^20.19.0 || >=22.12.0} 1456 1456 cpu: [x64] 1457 1457 os: [linux] 1458 1458 1459 - '@oxfmt/binding-linux-x64-musl@0.42.0': 1460 - resolution: {integrity: sha512-0wV284I6vc5f0AqAhgAbHU2935B4bVpncPoe5n/WzVZY/KnHgqxC8iSFGeSyLWEgstFboIcWkOPck7tqbdHkzA==} 1459 + '@oxfmt/binding-linux-x64-musl@0.43.0': 1460 + resolution: {integrity: sha512-F2YYqyvnQNvi320RWZNAvsaWEHwmW3k4OwNJ1hZxRKXupY63expbBaNp6jAgvYs7y/g546vuQnGHQuCBhslhLQ==} 1461 1461 engines: {node: ^20.19.0 || >=22.12.0} 1462 1462 cpu: [x64] 1463 1463 os: [linux] 1464 1464 1465 - '@oxfmt/binding-openharmony-arm64@0.42.0': 1466 - resolution: {integrity: sha512-p4BG6HpGnhfgHk1rzZfyR6zcWkE7iLrWxyehHfXUy4Qa5j3e0roglFOdP/Nj5cJJ58MA3isQ5dlfkW2nNEpolw==} 1465 + '@oxfmt/binding-openharmony-arm64@0.43.0': 1466 + resolution: {integrity: sha512-OE6TdietLXV3F6c7pNIhx/9YC1/2YFwjU9DPc/fbjxIX19hNIaP1rS0cFjCGJlGX+cVJwIKWe8Mos+LdQ1yAJw==} 1467 1467 engines: {node: ^20.19.0 || >=22.12.0} 1468 1468 cpu: [arm64] 1469 1469 os: [openharmony] 1470 1470 1471 - '@oxfmt/binding-win32-arm64-msvc@0.42.0': 1472 - resolution: {integrity: sha512-mn//WV60A+IetORDxYieYGAoQso4KnVRRjORDewMcod4irlRe0OSC7YPhhwaexYNPQz/GCFk+v9iUcZ2W22yxQ==} 1471 + '@oxfmt/binding-win32-arm64-msvc@0.43.0': 1472 + resolution: {integrity: sha512-0nWK6a7pGkbdoypfVicmV9k/N1FwjPZENoqhlTU+5HhZnAhpIO3za30nEE33u6l6tuy9OVfpdXUqxUgZ+4lbZw==} 1473 1473 engines: {node: ^20.19.0 || >=22.12.0} 1474 1474 cpu: [arm64] 1475 1475 os: [win32] 1476 1476 1477 - '@oxfmt/binding-win32-ia32-msvc@0.42.0': 1478 - resolution: {integrity: sha512-3gWltUrvuz4LPJXWivoAxZ28Of2O4N7OGuM5/X3ubPXCEV8hmgECLZzjz7UYvSDUS3grfdccQwmjynm+51EFpw==} 1477 + '@oxfmt/binding-win32-ia32-msvc@0.43.0': 1478 + resolution: {integrity: sha512-9aokTR4Ft+tRdvgN/pKzSkVy2ksc4/dCpDm9L/xFrbIw0yhLtASLbvoG/5WOTUh/BRPPnfGTsWznEqv0dlOmhA==} 1479 1479 engines: {node: ^20.19.0 || >=22.12.0} 1480 1480 cpu: [ia32] 1481 1481 os: [win32] 1482 1482 1483 - '@oxfmt/binding-win32-x64-msvc@0.42.0': 1484 - resolution: {integrity: sha512-Wg4TMAfQRL9J9AZevJ/ZNy3uyyDztDYQtGr4P8UyyzIhLhFrdSmz1J/9JT+rv0fiCDLaFOBQnj3f3K3+a5PzDQ==} 1483 + '@oxfmt/binding-win32-x64-msvc@0.43.0': 1484 + resolution: {integrity: sha512-4bPgdQux2ZLWn3bf2TTXXMHcJB4lenmuxrLqygPmvCJ104Yqzj1UctxSRzR31TiJ4MLaG22RK8dUsVpJtrCz5g==} 1485 1485 engines: {node: ^20.19.0 || >=22.12.0} 1486 1486 cpu: [x64] 1487 1487 os: [win32] ··· 6120 6120 resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 6121 6121 engines: {node: '>= 0.4'} 6122 6122 6123 - oxfmt@0.42.0: 6124 - resolution: {integrity: sha512-QhejGErLSMReNuZ6vxgFHDyGoPbjTRNi6uGHjy0cvIjOQFqD6xmr/T+3L41ixR3NIgzcNiJ6ylQKpvShTgDfqg==} 6123 + oxfmt@0.43.0: 6124 + resolution: {integrity: sha512-KTYNG5ISfHSdmeZ25Xzb3qgz9EmQvkaGAxgBY/p38+ZiAet3uZeu7FnMwcSQJg152Qwl0wnYAxDc+Z/H6cvrwA==} 6125 6125 engines: {node: ^20.19.0 || >=22.12.0} 6126 6126 hasBin: true 6127 6127 ··· 8492 8492 8493 8493 '@oxc-project/types@0.122.0': {} 8494 8494 8495 - '@oxfmt/binding-android-arm-eabi@0.42.0': 8495 + '@oxfmt/binding-android-arm-eabi@0.43.0': 8496 8496 optional: true 8497 8497 8498 - '@oxfmt/binding-android-arm64@0.42.0': 8498 + '@oxfmt/binding-android-arm64@0.43.0': 8499 8499 optional: true 8500 8500 8501 - '@oxfmt/binding-darwin-arm64@0.42.0': 8501 + '@oxfmt/binding-darwin-arm64@0.43.0': 8502 8502 optional: true 8503 8503 8504 - '@oxfmt/binding-darwin-x64@0.42.0': 8504 + '@oxfmt/binding-darwin-x64@0.43.0': 8505 8505 optional: true 8506 8506 8507 - '@oxfmt/binding-freebsd-x64@0.42.0': 8507 + '@oxfmt/binding-freebsd-x64@0.43.0': 8508 8508 optional: true 8509 8509 8510 - '@oxfmt/binding-linux-arm-gnueabihf@0.42.0': 8510 + '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': 8511 8511 optional: true 8512 8512 8513 - '@oxfmt/binding-linux-arm-musleabihf@0.42.0': 8513 + '@oxfmt/binding-linux-arm-musleabihf@0.43.0': 8514 8514 optional: true 8515 8515 8516 - '@oxfmt/binding-linux-arm64-gnu@0.42.0': 8516 + '@oxfmt/binding-linux-arm64-gnu@0.43.0': 8517 8517 optional: true 8518 8518 8519 - '@oxfmt/binding-linux-arm64-musl@0.42.0': 8519 + '@oxfmt/binding-linux-arm64-musl@0.43.0': 8520 8520 optional: true 8521 8521 8522 - '@oxfmt/binding-linux-ppc64-gnu@0.42.0': 8522 + '@oxfmt/binding-linux-ppc64-gnu@0.43.0': 8523 8523 optional: true 8524 8524 8525 - '@oxfmt/binding-linux-riscv64-gnu@0.42.0': 8525 + '@oxfmt/binding-linux-riscv64-gnu@0.43.0': 8526 8526 optional: true 8527 8527 8528 - '@oxfmt/binding-linux-riscv64-musl@0.42.0': 8528 + '@oxfmt/binding-linux-riscv64-musl@0.43.0': 8529 8529 optional: true 8530 8530 8531 - '@oxfmt/binding-linux-s390x-gnu@0.42.0': 8531 + '@oxfmt/binding-linux-s390x-gnu@0.43.0': 8532 8532 optional: true 8533 8533 8534 - '@oxfmt/binding-linux-x64-gnu@0.42.0': 8534 + '@oxfmt/binding-linux-x64-gnu@0.43.0': 8535 8535 optional: true 8536 8536 8537 - '@oxfmt/binding-linux-x64-musl@0.42.0': 8537 + '@oxfmt/binding-linux-x64-musl@0.43.0': 8538 8538 optional: true 8539 8539 8540 - '@oxfmt/binding-openharmony-arm64@0.42.0': 8540 + '@oxfmt/binding-openharmony-arm64@0.43.0': 8541 8541 optional: true 8542 8542 8543 - '@oxfmt/binding-win32-arm64-msvc@0.42.0': 8543 + '@oxfmt/binding-win32-arm64-msvc@0.43.0': 8544 8544 optional: true 8545 8545 8546 - '@oxfmt/binding-win32-ia32-msvc@0.42.0': 8546 + '@oxfmt/binding-win32-ia32-msvc@0.43.0': 8547 8547 optional: true 8548 8548 8549 - '@oxfmt/binding-win32-x64-msvc@0.42.0': 8549 + '@oxfmt/binding-win32-x64-msvc@0.43.0': 8550 8550 optional: true 8551 8551 8552 8552 '@oxlint/binding-android-arm-eabi@1.50.0': ··· 14289 14289 object-keys: 1.1.1 14290 14290 safe-push-apply: 1.0.0 14291 14291 14292 - oxfmt@0.42.0: 14292 + oxfmt@0.43.0: 14293 14293 dependencies: 14294 14294 tinypool: 2.1.0 14295 14295 optionalDependencies: 14296 - '@oxfmt/binding-android-arm-eabi': 0.42.0 14297 - '@oxfmt/binding-android-arm64': 0.42.0 14298 - '@oxfmt/binding-darwin-arm64': 0.42.0 14299 - '@oxfmt/binding-darwin-x64': 0.42.0 14300 - '@oxfmt/binding-freebsd-x64': 0.42.0 14301 - '@oxfmt/binding-linux-arm-gnueabihf': 0.42.0 14302 - '@oxfmt/binding-linux-arm-musleabihf': 0.42.0 14303 - '@oxfmt/binding-linux-arm64-gnu': 0.42.0 14304 - '@oxfmt/binding-linux-arm64-musl': 0.42.0 14305 - '@oxfmt/binding-linux-ppc64-gnu': 0.42.0 14306 - '@oxfmt/binding-linux-riscv64-gnu': 0.42.0 14307 - '@oxfmt/binding-linux-riscv64-musl': 0.42.0 14308 - '@oxfmt/binding-linux-s390x-gnu': 0.42.0 14309 - '@oxfmt/binding-linux-x64-gnu': 0.42.0 14310 - '@oxfmt/binding-linux-x64-musl': 0.42.0 14311 - '@oxfmt/binding-openharmony-arm64': 0.42.0 14312 - '@oxfmt/binding-win32-arm64-msvc': 0.42.0 14313 - '@oxfmt/binding-win32-ia32-msvc': 0.42.0 14314 - '@oxfmt/binding-win32-x64-msvc': 0.42.0 14296 + '@oxfmt/binding-android-arm-eabi': 0.43.0 14297 + '@oxfmt/binding-android-arm64': 0.43.0 14298 + '@oxfmt/binding-darwin-arm64': 0.43.0 14299 + '@oxfmt/binding-darwin-x64': 0.43.0 14300 + '@oxfmt/binding-freebsd-x64': 0.43.0 14301 + '@oxfmt/binding-linux-arm-gnueabihf': 0.43.0 14302 + '@oxfmt/binding-linux-arm-musleabihf': 0.43.0 14303 + '@oxfmt/binding-linux-arm64-gnu': 0.43.0 14304 + '@oxfmt/binding-linux-arm64-musl': 0.43.0 14305 + '@oxfmt/binding-linux-ppc64-gnu': 0.43.0 14306 + '@oxfmt/binding-linux-riscv64-gnu': 0.43.0 14307 + '@oxfmt/binding-linux-riscv64-musl': 0.43.0 14308 + '@oxfmt/binding-linux-s390x-gnu': 0.43.0 14309 + '@oxfmt/binding-linux-x64-gnu': 0.43.0 14310 + '@oxfmt/binding-linux-x64-musl': 0.43.0 14311 + '@oxfmt/binding-openharmony-arm64': 0.43.0 14312 + '@oxfmt/binding-win32-arm64-msvc': 0.43.0 14313 + '@oxfmt/binding-win32-ia32-msvc': 0.43.0 14314 + '@oxfmt/binding-win32-x64-msvc': 0.43.0 14315 14315 14316 14316 oxlint@1.50.0: 14317 14317 optionalDependencies: