Open
Description
Using local fonts in Compose Multiplatform on WasmJs requires Permissions API, Local Font Access API and Blob.arrayBuffer()
abstract external class FontData : JsAny {
val family: String
val fullName: String
val postscriptName: String
val style: String
fun blob(): Promise<Blob>
}
fun Window.queryLocalFontsOrNull(): Promise<JsArray<FontData>>? {
return if (supportedLocalFont().toBoolean()) queryLocalFonts() else null
}
fun Window.queryLocalFonts(): Promise<JsArray<FontData>> {
return queryLocalFonts(this)
}
private fun supportedLocalFont(): JsBoolean =
js("\"queryLocalFonts\" in window")
@Suppress("UNUSED_PARAMETER")
private fun queryLocalFonts(windowArg: Window): Promise<JsArray<FontData>> =
js("windowArg.queryLocalFonts()")
abstract external class Permissions : JsAny {
fun query(permissionDescriptor: JsAny): Promise<PermissionStatus>
}
abstract external class PermissionStatus : JsAny {
val name: String
val state: String
}
val Navigator.permissions: Permissions
get() = permissions(this)
fun Permissions.query(name: String): Promise<PermissionStatus> =
query(permissionDescriptor(name))
@Suppress("UNUSED_PARAMETER")
private fun permissions(navigatorArg: Navigator): Permissions =
js("navigatorArg.permissions")
@Suppress("UNUSED_PARAMETER")
private fun permissionDescriptor(name: String): JsAny =
js("({ name: name })")
fun Blob.arrayBuffer(): Promise<ArrayBuffer> {
return arrayBuffer(this)
}
@Suppress("UNUSED_PARAMETER")
private fun arrayBuffer(blobArg: Blob): Promise<ArrayBuffer> =
js("blobArg.arrayBuffer()")
And another commonly used API is missing: Picture-in-Picture API
abstract external class PictureInPictureWindow : JsAny {
val height: Int
val width: Int
var onresize: ((Event) -> Unit)?
}
fun HTMLVideoElement.requestPictureInPicture(): Promise<PictureInPictureWindow> =
requestPictureInPicture(this)
fun Document.exitPictureInPicture(): Promise<Nothing?> =
exitPictureInPicture(this)
@Suppress("UNUSED_PARAMETER")
private fun requestPictureInPicture(videoArg: HTMLVideoElement): Promise<PictureInPictureWindow> =
js("videoArg.requestPictureInPicture()")
@Suppress("UNUSED_PARAMETER")
private fun exitPictureInPicture(documentArg: Document): Promise<Nothing?> =
js("documentArg.exitPictureInPicture()")
Metadata
Metadata
Assignees
Labels
No labels