Files
ArtPlayer/docs/document/assets/en_plugin_jassub.md.B3qYHOri.js

46 lines
25 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{_ as e,o as i,c as n,ak as a,j as t}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"ASS Subtitles with JASSUB","description":"","frontmatter":{},"headers":[],"relativePath":"en/plugin/jassub.md","filePath":"en/plugin/jassub.md","lastUpdated":1789501055000}'),r={name:"en/plugin/jassub.md"};function l(d,s,p,o,h,c){return i(),n("div",null,s[0]||(s[0]=[a(`<h1 id="ass-subtitles-with-jassub" tabindex="-1">ASS Subtitles with JASSUB <a class="header-anchor" href="#ass-subtitles-with-jassub" aria-label="Permalink to &quot;ASS Subtitles with JASSUB&quot;">​</a></h1><p><a href="./../../plugin/jassub.html">简体中文</a></p><p>Render ASS subtitles on Canvas using the JASSUB Worker and WASM. The plugin returns the actual JASSUB instance with its methods/events rather than converting ASS to plain VTT. This describes the unreleased branch; Worker, WASM, fonts and actual playback require deployment-specific validation.</p><h2 id="installation-and-example" tabindex="-1">Installation and example <a class="header-anchor" href="#installation-and-example" aria-label="Permalink to &quot;Installation and example&quot;">​</a></h2><div class="language-sh vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> artplayer</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> artplayer-plugin-jassub</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Artplayer </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;artplayer&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> artplayerPluginJassub </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;artplayer-plugin-jassub&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>For scripts, load ArtPlayer before <code>dist/artplayer-plugin-jassub.js</code>; the global is <code>artplayerPluginJassub</code>. This preserves the <a href="https://artplayer.org/?libs=./uncompiled/artplayer-plugin-jassub/index.js&amp;example=jassub" target="_blank" rel="noreferrer">original example</a>. Its Worker/WASM/font URLs are site assets, not paths automatically created in your application by installing the plugin.</p>`,7),t("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-jassub/index.js"},"▶ Run Code",-1),a(`<div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// https://github.com/ThaUnknown/jassub</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// npm i artplayer-plugin-jassub</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// import artplayerPluginJassub from &#39;artplayer-plugin-jassub&#39;;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> art </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Artplayer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> container: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;.artplayer-app&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> url: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/FGOBD.mp4&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> autoSize: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fullscreen: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fullscreenWeb: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> plugins: [</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> artplayerPluginJassub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> subUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/FGOBD.ass&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> workerUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/jassub-worker.js&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> wasmUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/jassub-worker.wasm&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> modernWasmUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/jassub-worker-modern.wasm&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> availableFonts: {</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;liberation sans&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/default.woff2&#39;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fonts: [</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;/assets/jassub/fonts/Averia Sans Libre Light.ttf&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;/assets/jassub/fonts/Averia Serif Simple Light.ttf&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;/assets/jassub/fonts/Gramond.ttf&#39;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> timeOffset: </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0.041</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }),</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br></div></div><p>Host matching Worker, WASM and fonts with correct paths, access policies and font usage rights. Missing fonts affect layout. Default relative URLs do not establish that files are deployed.</p><h2 id="resource-and-rendering-options" tabindex="-1">Resource and rendering options <a class="header-anchor" href="#resource-and-rendering-options" aria-label="Permalink to &quot;Resource and rendering options&quot;">​</a></h2><p>Runtime options are optional and default to art.video. They are read at registration; an explicit video overrides the host video. These are current local implementation defaults, including differences from old upstream comments.</p><table tabindex="0"><thead><tr><th>Field</th><th>Actual default or meaning</th></tr></thead><tbody><tr><td><code>video</code> / <code>canvas</code></td><td>Video defaults to art.video; caller canvas allows manual DOM handling; a usable rendering target is required</td></tr><tr><td><code>workerUrl</code></td><td><code>&#39;jassub-worker.js&#39;</code></td></tr><tr><td><code>wasmUrl</code></td><td><code>&#39;jassub-worker.wasm&#39;</code></td></tr><tr><td><code>legacyWasmUrl</code></td><td><code>&#39;jassub-worker.wasm.js&#39;</code></td></tr><tr><td><code>modernWasmUrl</code></td><td>Used when supplied and SIMD is detected; otherwise wasmUrl</td></tr><tr><td><code>subUrl</code> / <code>subContent</code></td><td>Subtitle URL or ASS text sent to the Worker</td></tr><tr><td><code>fonts</code></td><td>Empty array by default; entries can be URLs or Uint8Array</td></tr><tr><td><code>availableFonts</code></td><td>Defaults to <code>{ &#39;liberation sans&#39;: &#39;./default.woff2&#39; }</code>; font-name-to-URL/bytes map</td></tr><tr><td><code>fallbackFont</code></td><td><code>&#39;liberation sans&#39;</code></td></tr><tr><td><code>useLocalFonts</code></td><td>Enabled only when queryLocalFonts exists; current code defaults to true when available, with explicit false supported; permissions still apply</td></tr><tr><td><code>blendMode</code></td><td><code>&#39;js&#39;</code>, with <code>&#39;wasm&#39;</code> also accepted</td></tr><tr><td><code>asyncRender</code></td><td>Defaults true, subject to createImageBitmap availability</td></tr><tr><td><code>offscreenRender</code></td><td>Defaults true, requiring transferControlToOffscreen and no caller canvas</td></tr><tr><td><code>onDemandRender</code></td><td>Defaults true, subject to requestVideoFrameCallback availability</td></tr><tr><td><code>targetFps</code></td><td>Defaults 24; not a fixed update guarantee in on-demand mode</td></tr><tr><td><code>timeOffset</code></td><td>Defaults 0 seconds</td></tr><tr><td><code>debug</code></td><td>Defaults false</td></tr><tr><td><code>prescaleFactor</code> / <code>prescaleHeightLimit</code> / <code>maxRenderHeight</code></td><td>Defaults 1 / 1080 / 0; rendering size controls, with no maximum imposed by a zero maxRenderHeight</td></tr><tr><td><code>dropAllAnimations</code> / <code>dropAllBlur</code></td><td>Simplification options forwarded to the Worker; not set to true by the wrapper when omitted</td></tr><tr><td><code>libassMemoryLimit</code> / <code>libassGlyphLimit</code></td><td>Defaults 0; libass cache limits in MiB, not a total browser-memory cap</td></tr></tbody></table><p>Capabilities can change the chosen rendering path. Async/offscreen/backend options are not universal performance guarantees. Do not mix incompatible Worker and wrapper versions.</p><h2 id="instance-and-methods" tabindex="-1">Instance and methods <a class="header-anchor" href="#instance-and-methods" aria-label="Permalink to &quot;Instance and methods&quot;">​</a></h2><p>Registration synchronously returns <code>{ name: &#39;artplayerPluginJassub&#39;, instance }</code>, not a Worker-ready Promise. Access it at <code>art.plugins.artplayerPluginJassub.instance</code>. It is an EventTarget: query after ready, and observe its error event rather than assuming a same-named player event.</p><table tabindex="0"><thead><tr><th>Method</th><th>Behavior and units</th></tr></thead><tbody><tr><td><code>resize(width?, height?, top?, left?, force?)</code></td><td>Synchronous void; force is last, with omitted dimensions derived from video</td></tr><tr><td><code>setVideo(video)</code></td><td>Rebind video, observation and the owned container position synchronously</td></tr><tr><td><code>setTrackByUrl(url)</code> / <code>setTrack(content)</code> / <code>freeTrack()</code></td><td>Set subtitle URL/text or release the track</td></tr><tr><td><code>setIsPaused(boolean)</code> / <code>setRate(number)</code></td><td>Manually update Worker playback state/rate</td></tr><tr><td><code>setCurrentTime(isPaused?, currentTime?, rate?)</code></td><td>currentTime uses seconds</td></tr><tr><td><code>createEvent(event)</code> / <code>setEvent(event, index)</code> / <code>removeEvent(index)</code></td><td>Mutate ASS events, accepting partial fields</td></tr><tr><td><code>getEvents(callback)</code></td><td>Callback-based event query, not a Promise</td></tr><tr><td><code>createStyle(style)</code> / <code>setStyle(style, index)</code> / <code>removeStyle(index)</code></td><td>Mutate styles, accepting partial fields</td></tr><tr><td><code>getStyles(callback)</code></td><td>Callback-based style query, not a Promise</td></tr><tr><td><code>styleOverride(style)</code> / <code>disableStyleOverride()</code></td><td>Enable/disable style override</td></tr><tr><td><code>setDefaultFont(font)</code> / <code>addFont(font)</code></td><td>Set the default font or add a URL/byte font</td></tr><tr><td><code>runBenchmark()</code></td><td>Request the Worker benchmark; not an end-to-end performance conclusion</td></tr><tr><td><code>sendMessage(target, data?, transferable?)</code></td><td>Promise resolves after posting, or without posting after destroy; not a Worker acknowledgement</td></tr><tr><td><code>destroy()</code></td><td>Synchronous, idempotent cleanup; no resource-reclamation Promise</td></tr></tbody></table><p>Except sendMessage, ordinary control methods above return void; queries supply callback data. The historical destroy(error) overload returns an original Error, converts a nonempty string to Error, or retains an empty string. Normal cleanup uses no-argument destroy.</p><p>AssEvent Start/Duration use milliseconds and Style is a numeric style index. Other fields are Name, MarginL/MarginR/MarginV, Effect, Text, ReadOrder and Layer. AssStyle includes Name/FontName/FontSize, PrimaryColour/SecondaryColour/OutlineColour/BackColour, Bold/Italic/Underline/StrikeOut, ScaleX/ScaleY/Spacing/Angle, BorderStyle/Outline/Shadow/Alignment, MarginL/MarginR/MarginV, Encoding, treat_fontname_as_pattern, Blur and Justify. Query results have no <code>_index</code>; the ASS text-format style name is not the runtime numeric Style.</p><p>Successful queries call <code>(null, array)</code>; failures supply an Error or native Event without data. Destroy fails pending queries after releasing their listeners/timers. The protocol matches by response target, without a new request ID; do not assume simultaneous same-target queries have independently correlated responses.</p><h2 id="lifecycle-and-types" tabindex="-1">Lifecycle and types <a class="header-anchor" href="#lifecycle-and-types" aria-label="Permalink to &quot;Lifecycle and types&quot;">​</a></h2><p>The plugin-owned <code>.JASSUB</code> container uses z-index20 and is removed on destruction; caller canvas/video nodes remain. Player destruction calls the instance&#39;s current destroy method; direct destruction is also idempotent. setVideo/destroy invalidate old frame callbacks and clean Worker/observer ownership. Late bitmaps must not restart rendering. Actual offscreen stalls, browser differences and physical devices retain separate acceptance requirements.</p><p>Root and <code>/legacy</code> retain historical JassubOption/JassubInstance: three required URLs, force-first resize, inaccurate Promise method returns and open extension indexes. Use <code>/runtime</code> for accurate types with the same implementation:</p><div class="language-ts vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Artplayer </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;artplayer&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> jassub </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;artplayer-plugin-jassub/runtime&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> attachSubtitles</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">art</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Artplayer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">instance</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> jassub</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> workerUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/jassub-worker.js&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> wasmUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/assets/jassub/jassub-worker.wasm&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> subUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/subtitles.ass&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> })(art);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> instance.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">addEventListener</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;ready&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> instance.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getEvents</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">events</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (error) console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(error);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(events);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> });</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> instance;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br></div></div><p>Runtime exports FontSource, RuntimeOption, AssEvent, AssStyle, AssEventInput, AssStyleInput, WorkerRequestError, EventsCallback, StylesCallback, RuntimeEventMap, RuntimeInstance, RuntimeResult and RuntimeFactory. Precise instance fields include timeOffset, debug, the three sizing settings, optional busy and historical public <code>_canvas/_ctx</code>; <code>_ctx</code> may be false/null. There is no runtime factory <code>.default</code> self-alias. The old root&#39;s NodeNext namespace does not create one. Runtime supports an accurate ESM default and CommonJS <code>import = require</code>.</p>`,17)]))}const E=e(r,[["render",l]]);export{u as __pageData,E as default};