@ -805,7 +805,7 @@ export class MediaPlayerProvider {
// the chrome inherits. Without it the `dir` PROP reached only the composed
// Sliders and the player laid its own controls out the other way round.
// data-dir is contract-only in the morfo (declared with `values`, no
// resolvable `value`), so renderProps doesn't emit it — soma owns it.
// resolvable `value`), so the render bag doesn't emit it — soma owns it.
'data-dir' : this . resolvedDir ,
onkeydown : this.onkeydown
} as const )
@ -843,9 +843,9 @@ export class MediaPlayerMediaProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// data-media is morfo-declared (propRef('media')), resolved by renderProps
// data-media is morfo-declared (propRef('media')), resolved by the render bag
// against the component-level `media` source.
. . . this . runtimePart . renderProps( ) ,
. . . this . runtimePart . props ,
// Tap-to-toggle-play gesture on the video surface (YouTube convention);
// the audio element is 0-height, so this only fires for video.
onclick : ( ) = > this . provider . togglePlay ( )
@ -877,8 +877,8 @@ export class MediaPlayerPosterProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// aria-hidden is morfo-declared (literal), resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// aria-hidden is morfo-declared (literal), resolved by the render bag .
. . . this . runtimePart . props ,
// data-hidden is contract-only in the morfo (presence flag) — soma owns it.
'data-hidden' : boolToEmptyStrOrUndef ( this . provider . started )
} as const )
@ -909,8 +909,8 @@ export class MediaPlayerBufferingIndicatorProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// aria-hidden is morfo-declared (literal), resolved by renderProps .
. . . this . runtimePart . renderProps( )
// aria-hidden is morfo-declared (literal), resolved by the render bag .
. . . this . runtimePart . props
} as const )
) ;
}
@ -963,8 +963,8 @@ export class MediaPlayerCaptionsProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// aria-hidden is morfo-declared (literal), resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// aria-hidden is morfo-declared (literal), resolved by the render bag .
. . . this . runtimePart . props ,
// data-captions is contract-only in the morfo (presence flag) — soma
// owns it. Present only while there is something to read.
'data-captions' : boolToEmptyStrOrUndef ( this . provider . captionsOn )
@ -1021,7 +1021,7 @@ export class MediaPlayerPlayButtonProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Source so renderProps resolves the morfo's aria-label (propRef('label')).
// Source so the render bag resolves the morfo's aria-label (propRef('label')).
props : { label : ( ) = > this . label }
} ) ;
}
@ -1032,8 +1032,8 @@ export class MediaPlayerPlayButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// type/role/aria-label/aria-keyshortcuts are morfo-declared, resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// type/role/aria-label/aria-keyshortcuts are morfo-declared, resolved by the render bag .
. . . this . runtimePart . props ,
// data-state is contract-only in the morfo (no resolvable value) — soma owns it.
'data-state' : this . provider . paused ? 'paused' : 'playing' ,
onclick : ( ) = > this . provider . togglePlay ( )
@ -1061,7 +1061,7 @@ export class MediaPlayerSeekButtonProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Sources so renderProps resolves aria-label (propRef('label')) and
// Sources so the render bag resolves aria-label (propRef('label')) and
// data-direction (propRef('direction')).
props : {
label : ( ) = > this . label ,
@ -1083,8 +1083,8 @@ export class MediaPlayerSeekButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// type/role/aria-label/data-direction are morfo-declared, resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// type/role/aria-label/data-direction are morfo-declared, resolved by the render bag .
. . . this . runtimePart . props ,
onclick : this.onclick
} as const )
) ;
@ -1118,7 +1118,7 @@ export class MediaPlayerRestartButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
. . . this . runtimePart . renderProps( ) ,
. . . this . runtimePart . props ,
'data-disabled' : boolToEmptyStrOrUndef ( this . opts . disabled . current ) ,
disabled : this.opts.disabled.current || undefined ,
// Seeking to 0 also clears the skip flag through `seek` — a restart is
@ -1173,7 +1173,7 @@ export class MediaPlayerSkipButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
. . . this . runtimePart . renderProps( ) ,
. . . this . runtimePart . props ,
'data-disabled' : boolToEmptyStrOrUndef ( this . unavailable ) ,
disabled : this.unavailable || undefined ,
onclick : ( ) = > {
@ -1204,7 +1204,7 @@ export class MediaPlayerMuteButtonProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Sources so renderProps resolves aria-label (propRef('label')) and the
// Sources so the render bag resolves aria-label (propRef('label')) and the
// on-state pair (data-state + aria-pressed via stateRef('on')).
props : { label : ( ) = > this . label } ,
states : { on : ( ) = > this . provider . muted }
@ -1233,8 +1233,8 @@ export class MediaPlayerMuteButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// type/role/aria-label/aria-keyshortcuts/aria-pressed/data-state are
// morfo-declared, resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// morfo-declared, resolved by the render bag .
. . . this . runtimePart . props ,
// data-level is contract-only in the morfo (an enum with no resolvable
// source) — soma owns the value.
'data-level' : this . level ,
@ -1262,7 +1262,7 @@ export class MediaPlayerFullscreenButtonProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Sources so renderProps resolves aria-label (propRef('label')) and the
// Sources so the render bag resolves aria-label (propRef('label')) and the
// on-state pair (data-state + aria-pressed via stateRef('on')).
props : { label : ( ) = > this . label } ,
states : { on : ( ) = > this . provider . fullscreen }
@ -1278,8 +1278,8 @@ export class MediaPlayerFullscreenButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// type/role/aria-label/aria-keyshortcuts/aria-pressed/data-state are
// morfo-declared, resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// morfo-declared, resolved by the render bag .
. . . this . runtimePart . props ,
onclick : ( ) = > void this . provider . toggleFullscreen ( )
} as const )
) ;
@ -1305,7 +1305,7 @@ export class MediaPlayerTimeProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Source so renderProps resolves the morfo's data-type (propRef('type')).
// Source so the render bag resolves the morfo's data-type (propRef('type')).
props : { type : ( ) = > this . opts . type . current }
} ) ;
}
@ -1323,8 +1323,8 @@ export class MediaPlayerTimeProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// data-type is morfo-declared (propRef('type')), resolved by renderProps .
. . . this . runtimePart . renderProps( )
// data-type is morfo-declared (propRef('type')), resolved by the render bag .
. . . this . runtimePart . props
} as const )
) ;
}
@ -1421,7 +1421,7 @@ export class MediaPlayerPipButtonProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Sources so renderProps resolves aria-label (propRef('label')) and the
// Sources so the render bag resolves aria-label (propRef('label')) and the
// on-state pair (data-state + aria-pressed via stateRef('on')).
props : { label : ( ) = > this . label } ,
states : { on : ( ) = > this . provider . pip }
@ -1435,8 +1435,8 @@ export class MediaPlayerPipButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// type/role/aria-label/aria-pressed/data-state are morfo-declared,
// resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// resolved by the render bag .
. . . this . runtimePart . props ,
onclick : ( ) = > void this . provider . togglePip ( )
} as const )
) ;
@ -1462,7 +1462,7 @@ export class MediaPlayerCaptionButtonProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Sources so renderProps resolves aria-label (propRef('label')), the
// Sources so the render bag resolves aria-label (propRef('label')), the
// on-state pair (data-state + aria-pressed via stateRef('on')) and the
// prop-falsy gate that sheds aria-pressed on a menu-trigger composition.
props : { label : ( ) = > this . label , menuTrigger : ( ) = > this . opts . menuTrigger . current } ,
@ -1477,8 +1477,8 @@ export class MediaPlayerCaptionButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// type/role/aria-label/aria-keyshortcuts/aria-pressed/data-state are
// morfo-declared, resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// morfo-declared, resolved by the render bag .
. . . this . runtimePart . props ,
// data-disabled is contract-only in the morfo (presence flag) — soma owns
// it; `disabled` is the native attr. Disabled until the media exposes at
// least one caption/subtitle track.
@ -1641,7 +1641,7 @@ export class MediaPlayerRateButtonProvider {
id : opts.id ,
ref : opts.ref ,
owner : this ,
// Sources so renderProps resolves aria-label (propRef('label')) and
// Sources so the render bag resolves aria-label (propRef('label')) and
// data-rate (propRef('rate')).
props : {
label : ( ) = > this . label ,
@ -1654,8 +1654,8 @@ export class MediaPlayerRateButtonProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// type/aria-label/data-rate are morfo-declared, resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// type/aria-label/data-rate are morfo-declared, resolved by the render bag .
. . . this . runtimePart . props ,
onclick : ( ) = > this . provider . cycleRate ( 1 )
} as const )
) ;
@ -1686,8 +1686,8 @@ export class MediaPlayerLiveIndicatorProvider {
readonly props = $derived . by ( ( ) = >
this . runtimePart . assert ( {
// aria-hidden is morfo-declared (literal), resolved by renderProps .
. . . this . runtimePart . renderProps( ) ,
// aria-hidden is morfo-declared (literal), resolved by the render bag .
. . . this . runtimePart . props ,
// data-live is contract-only in the morfo (presence flag) — soma owns it.
'data-live' : boolToEmptyStrOrUndef ( this . provider . live )
} as const )