furifont 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +53 -0
- package/dist/client/200.html +1 -0
- package/dist/client/404.html +1 -0
- package/dist/client/_nuxt/5JUjClMv.js +3 -0
- package/dist/client/_nuxt/B8uEzYfq.js +1 -0
- package/dist/client/_nuxt/BGvM1Idk.js +2 -0
- package/dist/client/_nuxt/BI2Q9Enf.js +1 -0
- package/dist/client/_nuxt/Bo7DzF0m.js +1 -0
- package/dist/client/_nuxt/CkUAspOr.js +3 -0
- package/dist/client/_nuxt/Ckc75SSp.js +1 -0
- package/dist/client/_nuxt/D4ezFGbh.js +2 -0
- package/dist/client/_nuxt/D8T7CxEJ.js +1 -0
- package/dist/client/_nuxt/DBjETv8r.js +1 -0
- package/dist/client/_nuxt/IB1Ryazr.js +3 -0
- package/dist/client/_nuxt/IYM3Ipyg.js +1 -0
- package/dist/client/_nuxt/OTZjk4e0.js +75 -0
- package/dist/client/_nuxt/OoUlbf8J.js +1 -0
- package/dist/client/_nuxt/Sgj54NgJ.js +3 -0
- package/dist/client/_nuxt/VtV-OZNb.js +3 -0
- package/dist/client/_nuxt/builds/latest.json +1 -0
- package/dist/client/_nuxt/builds/meta/0a20d338-7497-4d3f-82e8-9f5ae0d7be3d.json +1 -0
- package/dist/client/_nuxt/entry.z8A6-8bZ.css +1 -0
- package/dist/client/_nuxt/error-404.DqUWOYf4.css +1 -0
- package/dist/client/_nuxt/error-500.BYTKxx4O.css +1 -0
- package/dist/client/_nuxt/y07Wd5I9.js +1 -0
- package/dist/client/customize/index.html +1 -0
- package/dist/client/favicon.svg +4 -0
- package/dist/client/furifont.user.js +69 -0
- package/dist/client/index.html +1 -0
- package/dist/client/logo.svg +4 -0
- package/dist/client/og.png +0 -0
- package/dist/client/okurigana.json +5339 -0
- package/dist/client/reference/index.html +1 -0
- package/dist/client/version.json +1 -0
- package/dist/config-B9fOD9wc.mjs +181 -0
- package/dist/devframe.d.mts +5 -0
- package/dist/devframe.mjs +24 -0
- package/dist/index.d.mts +164 -0
- package/dist/index.mjs +4 -0
- package/dist/studio-IpmE7PF6.mjs +137 -0
- package/package.json +5 -5
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{t as e}from"./y07Wd5I9.js";import{i as t}from"#entry";function n(e){return t=>{let n=`${e.bold(e.red(`[${t.name}]`))} ${t.message}`,r=[];return t.fix&&r.push(`${e.dim(`fix:`)} ${t.fix}`),t.sources?.length&&r.push(`${e.dim(`sources:`)} ${t.sources.join(`, `)}`),t.docs&&r.push(`${e.dim(`see:`)} ${e.cyan(t.docs)}`),r.length===0?n:[n,...r.map((t,n)=>`${e.dim(n<r.length-1?`├▶`:`╰▶`)} ${t}`)].join(`
|
|
2
|
+
`)}}var r=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function i(e=21){let t=``,n=e;for(;n--;)t+=r[Math.random()*64|0];return t}function a(e,t){let n=`\x1B[${e}m`,r=`\x1B[${t}m`;return((e,...t)=>{if(Array.isArray(e)&&`raw`in e){let i=e,a=``;for(let e=0;e<i.length;e++)a+=i[e],e<t.length&&(a+=String(t[e]));return`${n}${a}${r}`}return`${n}${String(e)}${r}`})}var o={blue:a(34,39),cyan:a(36,39),gray:a(90,39),green:a(32,39),red:a(31,39),yellow:a(33,39),bold:a(1,22),dim:a(2,22),reset:a(0,0),underline:a(4,24)},s={bus:{agentManifestChanged:`agent:manifest:changed`,agentToolRegistered:`agent:tool:registered`,agentToolUnregistered:`agent:tool:unregistered`,agentResourceRegistered:`agent:resource:registered`,agentResourceUnregistered:`agent:resource:unregistered`},client:{isTrustedUpdated:`rpc:is-trusted:updated`,error:`rpc:error`,connectionStatus:`connection:status`,connectionError:`connection:error`},broadcast:{authRevoked:`devframe:auth:revoked`,cacheInvalidate:`devframe:rpc:cache:invalidate`,clientStateUpdated:`devframe:rpc:client-state:updated`,clientStatePatch:`devframe:rpc:client-state:patch`,streamingChunk:`devframe:streaming:chunk`,streamingEnd:`devframe:streaming:end`,streamingUploadCancel:`devframe:streaming:upload-cancel`},inPageChannel:{panelStateUpdated:`devframe:in-page:panel-state:updated`,panelStatePatch:`devframe:in-page:panel-state:patch`},postMessage:{remoteAssetsError:`devframe:remote-assets-error`,inPageChannel:`devframe:in-page-channel`}},c=n(o);function l(e,{method:t=`warn`}={}){console[t](c(e))}function u(t){return e({...t,reporters:[l,...t.reporters??[]]})}function d(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var f=Math.random.bind(Math),p=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function m(e=21){let t=``,n=e;for(;n--;)t+=p[f()*64|0];return t}var h=6e4,g=e=>e,_=g,{clearTimeout:v,setTimeout:y}=globalThis;function b(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=g,deserialize:s=_,resolver:c,bind:l=`rpc`,timeout:u=h,proxify:f=!0}=t,p=!1,b=new Map,x,S;async function C(e,r,i,a){if(p)throw Error(`[birpc] rpc is closed, cannot call "${e}"`);let s={m:e,a:r,t:`q`};a&&(s.o=!0);let c=async e=>n(o(e));if(i){await c(s);return}if(x)try{await x}finally{x=void 0}let{promise:l,resolve:f,reject:h}=d(),g=m();s.i=g;let _;async function C(n=s){return u>=0&&(_=y(()=>{try{if(t.onTimeoutError?.call(S,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){h(e)}b.delete(g)},u),typeof _==`object`&&(_=_.unref?.())),b.set(g,{resolve:f,reject:h,timeoutId:_,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(S,s,C,f):await C()}catch(e){if(t.onGeneralError?.call(S,e)!==!0)throw e;return}finally{v(_),b.delete(g)}return l}let w={$call:(e,...t)=>C(e,t,!1),$callOptional:(e,...t)=>C(e,t,!1,!0),$callEvent:(e,...t)=>C(e,t,!0),$callRaw:e=>C(e.method,e.args,e.event,e.optional),$rejectPendingCalls:ee,get $closed(){return p},get $meta(){return t.meta},$close:T,$functions:e};S=f?new Proxy({},{get(t,n){if(Object.hasOwn(w,n))return w[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>C(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>C(n,e,!1);return i.asEvent=r,i}}):w;function T(e){p=!0,b.forEach(({reject:t,method:n})=>{let r=Error(`[birpc] rpc is closed, cannot call "${n}"`);if(e)return e.cause??=r,t(e);t(r)}),b.clear(),i(E)}function ee(e){let t=Array.from(b.values()).map(({method:t,reject:n})=>e?e({method:t,reject:n}):n(Error(`[birpc]: rejected pending call "${t}".`)));return b.clear(),t}async function E(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(S,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(S,r,e[r]):e[r]);if(u&&(p||=()=>void 0),!p)f=Error(`[birpc] function "${r}" not found`);else try{d=await p.apply(l===`rpc`?S:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(S,f,r,s)===!0)return;if(!f)try{await n(o({t:`s`,i:a.i,r:d}),...i);return}catch(e){if(f=e,t.onGeneralError?.call(S,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(S,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=b.get(e);r&&(v(r.timeoutId),n?r.reject(n):r.resolve(t)),b.delete(e)}}return x=r(E),S}function x(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var S=Object.freeze({type:`object`,additionalProperties:!0});function C(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return S}return S}function w(e){if(!e||e.length===0)return{type:`object`,properties:{}};let t={},n=[];for(let r=0;r<e.length;r++){let i=`arg${r}`;t[i]=C(e[r]),n.push(i)}return{type:`object`,properties:t,required:n,additionalProperties:!1}}function T(e,t){if(Array.isArray(e))return e;if(e==null)return[];if(typeof e!=`object`)return;let n=e;if(t!=null)return Array.from({length:t},(e,t)=>n[`arg${t}`]);if(`arg0`in n){let e=[];for(;`arg${e.length}`in n;)e.push(n[`arg${e.length}`]);return e}return Object.keys(n).length===0?[]:void 0}function ee(e,t){return T(e,t)??[e]}function E(e){return typeof e==`string`?`'${e}'`:new te().serialize(e)}var D=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,O=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[D.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function k(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length),r=0;for(let i=0;i<n;i++){let n=e.charCodeAt(i),a=t.charCodeAt(i);if(n===a)continue;let o=n<128&&O[n]?O[n]:n+128,s=a<128&&O[a]?O[a]:a+128;if(o!==s)return o<s?-1:1;r===0&&(r=n>a?-1:1)}return e.length===t.length?r:e.length<t.length?-1:1}var te=(function(){class e{#e=new Map;compare(e,t){let n=typeof e,r=typeof t;return n===`string`&&r===`string`?k(e,t):n===`number`&&r===`number`?e-t:k(this.serialize(e,!0),this.serialize(t,!0))}serialize(e,t){if(e===null)return`null`;switch(typeof e){case`string`:return t?e:`'${e}'`;case`bigint`:return`${e}n`;case`object`:return this.$object(e);case`function`:return this.$function(e)}return String(e)}serializeObject(e){let t=Object.prototype.toString.call(e);if(t!==`[object Object]`)return this.serializeBuiltInType(t.length<10?`unknown:${t}`:t.slice(8,-1),e);let n=e.constructor,r=n===Object||n===void 0?``:n.name;if(r!==``&&globalThis[r]===n)return this.serializeBuiltInType(r,e);if(`toJSON`in e&&typeof e.toJSON==`function`){let t=e.toJSON();return r+(typeof t==`object`&&t?this.$object(t):`(${this.serialize(t)})`)}let i=Object.keys(e).sort(k),a=`${r}{`;for(let t=0;t<i.length;t++){let n=i[t];a+=`${n}:${this.serialize(e[n])}`,t<i.length-1&&(a+=`,`)}return a+`}`}serializeBuiltInType(e,t){let n=this[`$`+e];if(n)return n.call(this,t);if(typeof t.entries==`function`)return this.serializeObjectEntries(e,t.entries());throw Error(`Cannot serialize ${e}`)}serializeObjectEntries(e,t){let n=Array.from(t).sort((e,t)=>this.compare(e[0],t[0])),r=`${e}{`;for(let e=0;e<n.length;e++){let[t,i]=n[e];r+=`${this.serialize(t,!0)}:${this.serialize(i)}`,e<n.length-1&&(r+=`,`)}return r+`}`}$object(e){let t=this.#e.get(e);return t===void 0&&(this.#e.set(e,`#${this.#e.size}`),t=this.serializeObject(e),this.#e.set(e,t)),t}$function(e){let t=Function.prototype.toString.call(e);return t.slice(-15)===`[native code] }`?`${e.name||``}()[native]`:`${e.name}(${e.length})${t.replace(/\s*\n\s*/g,``)}`}$Array(e){let t=`[`;for(let n=0;n<e.length;n++)t+=this.serialize(e[n]),n<e.length-1&&(t+=`,`);return t+`]`}$Date(e){try{return`Date(${e.toISOString()})`}catch{return`Date(null)`}}$ArrayBuffer(e){return`ArrayBuffer[${new Uint8Array(e).join(`,`)}]`}$Set(e){return`Set${this.$Array(Array.from(e).sort((e,t)=>this.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e})(),ne=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],A=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],re=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,j=[],ie=class{_data=new ae;_hash=new ae([...ne]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);let t=this._nDataBytes*8,n=this._data.sigBytes*8;return this._data.words[n>>>5]|=128<<24-n%32,this._data.words[(n+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(n+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,t){let n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7];for(let n=0;n<64;n++){if(n<16)j[n]=e[t+n]|0;else{let e=j[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=j[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;j[n]=t+j[n-7]+i+j[n-16]}let d=s&c^~s&l,f=r&i^r&a^i&a,p=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),m=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),h=u+m+d+A[n]+j[n],g=p+f;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+u|0}_append(e){typeof e==`string`&&(e=ae.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes}_process(e){let t,n=this._data.sigBytes/64;n=e?Math.ceil(n):Math.max((n|0)-this._minBufferSize,0);let r=n*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let e=0;e<r;e+=16)this._doProcessBlock(this._data.words,e);t=this._data.words.splice(0,r),this._data.sigBytes-=i}return new ae(t,i)}},ae=class e{words;sigBytes;constructor(e,t){e=this.words=e||[],this.sigBytes=t===void 0?e.length*4:t}static fromUtf8(t){let n=unescape(encodeURIComponent(t)),r=n.length,i=[];for(let e=0;e<r;e++)i[e>>>2]|=(n.charCodeAt(e)&255)<<24-e%4*8;return new e(i,r)}toBase64(){let e=[];for(let t=0;t<this.sigBytes;t+=3){let n=this.words[t>>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,a=n<<16|r<<8|i;for(let n=0;n<4&&t*8+n*6<this.sigBytes*8;n++)e.push(re.charAt(a>>>6*(3-n)&63))}return e.join(``)}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t<e.sigBytes;t++){let n=e.words[t>>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=n<<24-(this.sigBytes+t)%4*8}else for(let t=0;t<e.sigBytes;t+=4)this.words[this.sigBytes+t>>>2]=e.words[t>>>2];this.sigBytes+=e.sigBytes}};function oe(e){return new ie().finalize(e).toBase64()}function se(e){return oe(E(e))}function ce(e){return se(e)}function le(){let e={};function t(t,...n){let r=e[t]||[];for(let e=0,t=r.length;e<t;e++){let t=r[e];t&&t(...n)}}function n(n,...r){t(n,...r),delete e[n]}function r(t,n){return(e[t]||=[]).push(n),()=>{e[t]=e[t]?.filter(e=>n!==e)}}function i(e,t){let n=r(e,((...e)=>(n(),t(...e))));return n}return{_listeners:e,emit:t,emitOnce:n,on:r,once:i}}var ue=/^[\w+.-]{2,}:\/\//;function de(e){return e.endsWith(`/`)?e:`${e}/`}function fe(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function pe(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?de(n)+e.replace(/^\.?\//,``):e);return n}function me(e,t){if(!t||t===`/`||ue.test(e))return e;let n=fe(t);return e.startsWith(n)?e:pe(n,e)}function he(e,t){let n=e.match(ue);return t+(n?e.slice(n[0].length):e)}var ge=Symbol.for(`immer-nothing`),_e=Symbol.for(`immer-draftable`),M=Symbol.for(`immer-state`),ve=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function N(e,...t){{let n=ve[e],r=G(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var P=Object,F=P.getPrototypeOf,I=`constructor`,L=`prototype`,ye=`configurable`,be=`enumerable`,xe=`writable`,R=`value`,z=e=>!!e&&!!e[M];function B(e){return e?we(e)||Oe(e)||!!e[_e]||!!e[I]?.[_e]||ke(e)||Ae(e):!1}var Se=P[L][I].toString(),Ce=new WeakMap;function we(e){if(!e||!W(e))return!1;let t=F(e);if(t===null||t===P[L])return!0;let n=P.hasOwnProperty.call(t,I)&&t[I];if(n===Object)return!0;if(!G(n))return!1;let r=Ce.get(n);return r===void 0&&(r=Function.toString.call(n),Ce.set(n,r)),r===Se}function Te(e,t,n=!0){V(e)===0?(n?Reflect.ownKeys(e):P.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function V(e){let t=e[M];return t?t.type_:Oe(e)?1:ke(e)?2:Ae(e)?3:0}var H=(e,t,n=V(e))=>n===2?e.has(t):P[L].hasOwnProperty.call(e,t),U=(e,t,n=V(e))=>n===2?e.get(t):e[t],Ee=(e,t,n,r=V(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function De(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var Oe=Array.isArray,ke=e=>e instanceof Map,Ae=e=>e instanceof Set,W=e=>typeof e==`object`,G=e=>typeof e==`function`,je=e=>typeof e==`boolean`;function Me(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Ne=e=>W(e)?e?.[M]:null,K=e=>e.copy_||e.base_,Pe=e=>e.modified_?e.copy_:e.base_;function Fe(e,t){if(ke(e))return new Map(e);if(Ae(e))return new Set(e);if(Oe(e))return Array[L].slice.call(e);let n=we(e);if(t===!0||t===`class_only`&&!n){let t=P.getOwnPropertyDescriptors(e);delete t[M];let n=Reflect.ownKeys(t);for(let r=0;r<n.length;r++){let i=n[r],a=t[i];a[xe]===!1&&(a[xe]=!0,a[ye]=!0),(a.get||a.set)&&(t[i]={[ye]:!0,[xe]:!0,[be]:a[be],[R]:e[i]})}return P.create(F(e),t)}{let t=F(e);if(t!==null&&n)return{...e};let r=P.create(t);return P.assign(r,e)}}function Ie(e,t=!1){return ze(e)||z(e)||!B(e)||(V(e)>1&&P.defineProperties(e,{set:Re,add:Re,clear:Re,delete:Re}),P.freeze(e),t&&Te(e,(e,t)=>{Ie(t,!0)},!1)),e}function Le(){N(2)}var Re={[R]:Le};function ze(e){return e===null||!W(e)||P.isFrozen(e)}var Be=`MapSet`,Ve=`Patches`,He=`ArrayMethods`,Ue={};function q(e){let t=Ue[e];return t||N(0,e),t}var We=e=>!!Ue[e];function Ge(e,t){Ue[e]||(Ue[e]=t)}var Ke,qe=()=>Ke,Je=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:We(Be)?q(Be):void 0,arrayMethodsPlugin_:We(He)?q(He):void 0});function Ye(e,t){t&&(e.patchPlugin_=q(Ve),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Xe(e){Ze(e),e.drafts_.forEach($e),e.drafts_=null}function Ze(e){e===Ke&&(Ke=e.parent_)}var Qe=e=>Ke=Je(Ke,e);function $e(e){let t=e[M];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function et(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[M].modified_&&(Xe(t),N(4)),B(e)&&(e=tt(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[M].base_,e,t)}else e=tt(t,n);return nt(t,e,!0),Xe(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===ge?void 0:e}function tt(e,t){if(ze(t))return t;let n=t[M];if(!n)return ut(t,e.handledSet_,e);if(!it(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);ct(n,e)}return n.copy_}function nt(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Ie(t,n)}function rt(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var it=(e,t)=>e.scope_===t,at=[];function ot(e,t,n,r){let i=K(e),a=e.type_;if(r!==void 0&&U(i,r,a)===t){Ee(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;Te(i,(e,n)=>{if(z(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??at;for(let e of o)Ee(i,e,n,a)}function st(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!it(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Pe(i);ot(e,i.draft_??i,a,n),ct(i,r)})}function ct(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}rt(e)}}function lt(e,t,n){let{scope_:r}=e;if(z(n)){let i=n[M];it(i,r)&&i.callbacks_.push(function(){yt(e),ot(e,n,Pe(i),t)})}else B(n)&&e.callbacks_.push(function(){let i=K(e);e.type_===3?i.has(n)&&ut(n,r.handledSet_,r):U(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&ut(U(e.copy_,t,e.type_),r.handledSet_,r)})}function ut(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||z(e)||t.has(e)||!B(e)||ze(e)||(t.add(e),Te(e,(r,i)=>{if(z(i)){let t=i[M];it(t,n)&&(Ee(e,r,Pe(t),e.type_),rt(t))}else B(i)&&ut(i,t,n)})),e}function dt(e,t){let n=Oe(e),r={type_:+!!n,scope_:t?t.scope_:qe(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=ft;n&&(i=[r],a=pt);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var ft={get(e,t){if(t===M)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=K(e);if(!H(i,t,e.type_))return gt(e,i,t);let a=i[t];if(e.finalized_||!B(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Me(t))return a;if(a===mt(e.base_,t)||ht(e,t,a)){yt(e);let n=e.type_===1?+t:t,r=xt(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in K(e)},ownKeys(e){return Reflect.ownKeys(K(e))},set(e,t,n){let r=_t(K(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=mt(K(e),t),i=r?.[M];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(De(n,r)&&(n!==void 0||H(e.base_,t,e.type_)))return!0;yt(e),vt(e)}return e.copy_[t]===n&&(n!==void 0||H(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_.set(t,!0),lt(e,t,n)),!0},deleteProperty(e,t){return yt(e),mt(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),vt(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=K(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[xe]:!0,[ye]:e.type_!==1||t!==`length`,[be]:r[be],[R]:n[t]}},defineProperty(){N(11)},getPrototypeOf(e){return F(e.base_)},setPrototypeOf(){N(12)}},pt={};for(let e in ft){let t=ft[e];pt[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}pt.deleteProperty=function(e,t){return isNaN(parseInt(t))&&N(13),pt.set.call(this,e,t,void 0)},pt.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&N(14),ft.set.call(this,e[0],t,n,e[0])};function mt(e,t){let n=e[M];return(n?K(n):e)[t]}function ht(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!B(n)||n[M]?!1:e.baseRefs_.has(n)}function gt(e,t,n){let r=_t(t,n);return r?R in r?r[R]:r.get?.call(e.draft_):void 0}function _t(e,t){if(!(t in e))return;let n=F(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=F(n)}}function vt(e){e.modified_||(e.modified_=!0,e.parent_&&vt(e.parent_))}function yt(e){e.copy_||=(e.assigned_=new Map,Fe(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var bt=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(G(e)&&!G(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}G(t)||N(6),n!==void 0&&!G(n)&&N(7);let r;if(B(e)){let i=Qe(this),a=xt(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Xe(i):Ze(i)}return Ye(i,n),et(r,i)}if(!e||!W(e)){if(r=t(e),r===void 0&&(r=e),r===ge&&(r=void 0),this.autoFreeze_&&Ie(r,!0),n){let t=[],i=[];q(Ve).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}N(1,e)},this.produceWithPatches=(e,t)=>{if(G(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},je(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),je(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),je(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){B(e)||N(8),z(e)&&(e=St(e));let t=Qe(this),n=xt(t,e,void 0);return n[M].isManual_=!0,Ze(t),n}finishDraft(e,t){let n=e&&e[M];(!n||!n.isManual_)&&N(9);let{scope_:r}=n;return Ye(r,t),et(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=q(Ve).applyPatches_;return z(e)?r(e,t):this.produce(e,e=>r(e,t))}};function xt(e,t,n,r){let[i,a]=ke(t)?q(Be).proxyMap_(t,n):Ae(t)?q(Be).proxySet_(t,n):dt(t,n);return(n?.scope_??qe()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?st(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function St(e){return z(e)||N(10,e),Ct(e)}function Ct(e){if(!B(e)||ze(e))return e;let t=e[M],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Fe(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Fe(e,!0);return Te(n,(e,t)=>{Ee(n,e,Ct(t))},r),t&&(t.finalized_=!1),n}function wt(){ve.push(`Sets cannot have "replace" patches.`,function(e){return`Unsupported patch operation: `+e},function(e){return`Cannot apply patch, path doesn't resolve: `+e},`Patching reserved attributes like __proto__, prototype and constructor is not allowed`);function e(n,r=[]){if(n.key_!==void 0){let e=n.parent_.copy_??n.parent_.base_,t=Ne(U(e,n.key_)),i=U(e,n.key_);if(i===void 0||i!==n.draft_&&i!==n.base_&&i!==n.copy_||t!=null&&t.base_!==n.base_)return null;let a=n.parent_.type_===3,o;if(a){let e=n.parent_;o=Array.from(e.drafts_.keys()).indexOf(n.key_)}else o=n.key_;if(!(a&&e.size>o||H(e,o)))return null;r.push(o)}if(n.parent_)return e(n.parent_,r);r.reverse();try{t(n.copy_,r)}catch{return null}return r}function t(e,t){let n=e;for(let e=0;e<t.length-1;e++){let r=t[e];if(n=U(n,r),!W(n)||n===null)throw Error(`Cannot resolve path at '${t.join(`/`)}'`)}return n}let n=`replace`,r=`remove`;function i(e,t,n){if(e.scope_.processedForPatches_.has(e))return;e.scope_.processedForPatches_.add(e);let{patches_:r,inversePatches_:i}=n;switch(e.type_){case 0:case 2:return o(e,t,r,i);case 1:return a(e,t,r,i);case 3:return s(e,t,r,i)}}function a(e,t,i,a){let{base_:o,assigned_:s}=e,c=e.copy_;c.length<o.length&&([o,c]=[c,o],[i,a]=[a,i]);let l=e.allIndicesReassigned_===!0;for(let e=0;e<o.length;e++){let r=c[e],u=o[e];if((l||s?.get(e.toString()))&&r!==u){let o=r?.[M];if(o&&o.modified_)continue;let s=t.concat([e]);i.push({op:n,path:s,value:d(r)}),a.push({op:n,path:s,value:d(u)})}}for(let e=o.length;e<c.length;e++){let n=t.concat([e]);i.push({op:`add`,path:n,value:d(c[e])})}for(let e=c.length-1;o.length<=e;--e){let n=t.concat([e]);a.push({op:r,path:n})}}function o(e,t,i,a){let{base_:o,copy_:s,type_:c}=e;Te(e.assigned_,(e,l)=>{let u=U(o,e,c),f=U(s,e,c),p=l?H(o,e)?n:`add`:r;if(u===f&&p===n)return;let m=t.concat(e);i.push(p===r?{op:p,path:m}:{op:p,path:m,value:d(f)}),a.push(p===`add`?{op:r,path:m}:p===r?{op:`add`,path:m,value:d(u)}:{op:n,path:m,value:d(u)})})}function s(e,t,n,i){let{base_:a,copy_:o}=e,s=0;a.forEach(e=>{if(!o.has(e)){let a=t.concat([s]);n.push({op:r,path:a,value:e}),i.unshift({op:`add`,path:a,value:e})}s++}),s=0,o.forEach(e=>{if(!a.has(e)){let a=t.concat([s]);n.push({op:`add`,path:a,value:e}),i.unshift({op:r,path:a,value:e})}s++})}function c(e,t,r){let{patches_:i,inversePatches_:a}=r;i.push({op:n,path:[],value:t===ge?void 0:t}),a.push({op:n,path:[],value:e})}function l(e,t){return t.forEach(t=>{let{path:i,op:a}=t,o=e;for(let e=0;e<i.length-1;e++){let t=V(o),n=i[e];typeof n!=`string`&&typeof n!=`number`&&(n=``+n),(t===0||t===1)&&(n===`__proto__`||n===I)&&N(19),G(o)&&n===L&&N(19),o=U(o,n),(o===null||!W(o))&&N(18,i.join(`/`))}let s=V(o),c=u(t.value),l=i[i.length-1];switch(a){case n:switch(s){case 2:return o.set(l,c);case 3:N(16);default:return o[l]=c}case`add`:switch(s){case 1:return l===`-`?o.push(c):o.splice(l,0,c);case 2:return o.set(l,c);case 3:return o.add(c);default:return o[l]=c}case r:switch(s){case 1:return o.splice(l,1);case 2:return o.delete(l);case 3:return o.delete(t.value);default:return delete o[l]}default:N(17,a)}}),e}function u(e){if(!B(e))return e;if(Oe(e))return e.map(u);if(ke(e))return new Map(Array.from(e.entries()).map(([e,t])=>[e,u(t)]));if(Ae(e))return new Set(Array.from(e).map(u));let t=Object.create(F(e));for(let n in e)t[n]=u(e[n]);return H(e,_e)&&(t[_e]=e[_e]),t}function d(e){return z(e)?u(e):e}Ge(Ve,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var Tt=new bt,Et=Tt.produce,Dt=Tt.produceWithPatches.bind(Tt),Ot=Tt.applyPatches.bind(Tt),kt=1e3;function At(e,t){if(e.add(t),e.size>kt){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function jt(e){let{enablePatches:t=!1}=e;t&&wt();let n=le(),r=e.initialValue,a=new Set;return{on:n.on,value:()=>r,patch:(e,t=i())=>{a.has(t)||(wt(),r=Ot(r,e),At(a,t),n.emit(`updated`,r,void 0,t))},mutate:(e,o=i())=>{if(!a.has(o)){if(At(a,o),t){let[t,i]=Dt(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,o)}else{let t=Et(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,o)}}},syncIds:a}}var Mt=typeof self==`object`?self:globalThis,Nt=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Pt=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function Ft(e,t){let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o,r=Nt.has(e)?Mt[e]:void 0;return n(new(r??Mt.Error)(t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}if(typeof a==`string`&&Pt.has(a))return n(new Mt[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function It(e){return Ft(new Map,e)(0)}var J=``,{toString:Lt}={},{keys:Rt}=Object;function zt(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=Lt.call(e).slice(8,-1);switch(n){case`Array`:return[1,J];case`Object`:return[2,J];case`Date`:return[3,J];case`RegExp`:return[4,J];case`Map`:return[5,J];case`Set`:return[6,J];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Bt([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Vt(e,t,n,r){let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=zt(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize ${s}`);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of Rt(r))(e||!Bt(zt(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!(Bt(zt(n))||Bt(zt(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Bt(zt(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Ht(e,t={}){let n=[];return Vt(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:Ut,stringify:Wt}=JSON,Gt={json:!0,lossy:!0};function Kt(e){return It(Ut(e))}function qt(e){return Wt(Ht(e,Gt))}function Jt(e){return It(e)}function Yt(e){return qt(e)}function Xt(e){return Kt(e)}var Zt=256,Qt=class extends Error{name=`StreamClosedError`};function $t(e={}){let t=e.id??i(),n=Math.max(0,e.replayWindow??0),r=le(),a=new AbortController,o=[],s=!1,c=0;function l(e){if(s)throw new Qt(`Cannot write to a closed stream "${t}"`);c+=1,n>0&&(o.push({seq:c,chunk:e}),o.length>n&&(o.length-n===1?o.shift():o.splice(0,o.length-n))),r.emit(`chunk`,c,e)}function u(e){if(s)return;s=!0;let t=tn(e);a.abort(e),r.emit(`end`,t)}function d(){s||(s=!0,a.signal.aborted||a.abort(`stream closed`),r.emit(`end`,void 0))}function f(e){s||a.signal.aborted||a.abort(e??`aborted`)}let p=new WritableStream({write(e){l(e)},close(){d()},abort(e){u(e)}});return{id:t,signal:a.signal,get closed(){return s},get lastSeq(){return c},write:l,error:u,close:d,abort:f,writable:p,events:r,buffer:o}}function en(e={}){let t=e.id??i(),n=Math.max(1,e.highWaterMark??Zt),r=[],a=0,o=!1,s=!1,c,l,u,d;function f(){if(l){if(r.length>0){let e=r.shift(),t=l;l=void 0,t.resolve({value:e,done:!1})}else if(o){let e=l;if(l=void 0,c){let t=Error(c.message);t.name=c.name,e.reject(t)}else e.resolve({value:void 0,done:!0})}}}function p(){if(u){for(;r.length>0;){let e=r.shift();try{u.enqueue(e)}catch{break}}if(o&&u){try{if(c){let e=Error(c.message);e.name=c.name,u.error(e)}else u.close()}catch{}u=void 0}}}function m(t,i){if(!(o||s)&&!(t<=a)){if(a=t,r.push(i),r.length>n){let t=r.length-n;r.splice(0,t),e.onOverflow?.(t)}f(),d&&p()}}function h(e){o||(o=!0,c=e,f(),d&&p())}function g(){s||o||(s=!0,e.onCancel?.(),h(void 0))}function _(){return d||(d=new ReadableStream({start(e){u=e,p()},cancel(){g()}}),d)}return{id:t,get cancelled(){return s},get done(){return o},get lastSeenSeq(){return a},get readable(){return _()},cancel:g,_push:m,_end:h,[Symbol.asyncIterator](){return{next(){if(r.length>0)return Promise.resolve({value:r.shift(),done:!1});if(o){if(c){let e=Error(c.message);return e.name=c.name,Promise.reject(e)}return Promise.resolve({value:void 0,done:!0})}return new Promise((e,t)=>{l={resolve:e,reject:t}})},return(){return g(),Promise.resolve({value:void 0,done:!0})}}}}}function tn(e){if(e instanceof Error)return{name:e.name||`Error`,message:e.message};if(typeof e==`string`)return{name:`Error`,message:e};try{return{name:`Error`,message:JSON.stringify(e)}}catch{return{name:`Error`,message:String(e)}}}var nn=128;function rn(e){return e.replace(/[^\w-]+/g,`_`).slice(0,nn)}var an=`__connection.json`,on=`__DEVFRAME_CONNECTION__`,sn=`x-birpc-session`,cn=`__rpc-dump/index.json`,ln=`devframe:services`,un=`devframe_otp`,dn=`devframe_auth_token`;s.postMessage.remoteAssetsError;var fn=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>ce(e))}updateOptions(e){this.options={...this.options,...e}}cached(e,t){let n=this.cacheMap.get(e);if(n)return n.get(this.keySerializer(t))}has(e,t){return this.cacheMap.get(e)?.has(this.keySerializer(t))??!1}apply(e,t){let n=this.cacheMap.get(e.m)||new Map;n.set(this.keySerializer(e.a),t),this.cacheMap.set(e.m,n)}validate(e){return this.options.functions.includes(e)}clear(e){e?this.cacheMap.delete(e):this.cacheMap.clear()}},Y=u({docsBase:`https://devfra.me/errors`,codes:{DF0019:{why:e=>`RPC function "${e.name}" has \`agent\` set but \`jsonSerializable\` is \`false\`; MCP requires JSON-serializable data.`,fix:"Remove `jsonSerializable: false`, or remove `agent` to keep it RPC-only."},DF0020:{why:e=>`RPC function "${e.name}" declares \`jsonSerializable: true\` but the value at "${e.path}" is a ${e.type}.`,fix:"Either drop `jsonSerializable: true` (falls back to structured-clone) or change the value to a JSON-safe shape."},DF0021:{why:e=>`RPC function "${e.name}" is already registered`,fix:"Use the `force` parameter to overwrite an existing registration."},DF0022:{why:e=>`RPC function "${e.name}" is not registered. Use register() to add new functions.`},DF0023:{why:e=>`RPC function "${e.name}" is not registered`},DF0024:{why:e=>`Either handler or setup function must be provided for RPC function "${e.name}"`},DF0025:{why:e=>`Function "${e.name}" not found in dump store`},DF0026:{why:e=>`No dump match for "${e.name}" with args: ${e.args}`},DF0027:{why:e=>`Function "${e.name}" with type "${e.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`},DF0028:{why:e=>`Function "${e.name}" with type "${e.type}" cannot use \`snapshot: true\`. Only "query" functions support this sugar; "static" functions have equivalent default behavior already.`,fix:"Remove `snapshot: true`, or change the function type to `query`."},DF0043:{why:e=>`RPC function "${e.name}" received an invalid argument at position ${e.index}: ${e.issues}`,fix:"Pass a value that satisfies the `args` schema declared for this function."},DF0044:{why:e=>`RPC function "${e.name}" returned a value that failed its \`returns\` schema: ${e.issues}`,fix:"Make the handler return a value that satisfies the `returns` schema, or relax the schema."}}});function pn(e){if(e.agent&&e.jsonSerializable===!1)throw Y.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function mn(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function hn(e){return e.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `)}async function gn(e,t,n){let r=n.slice();if(!t||t.length===0)return r;for(let r=0;r<t.length;r++){let i=t[r];if(!i)continue;let a=await mn(i,n[r]);if(a.issues)throw Y.DF0043({name:e,index:r,issues:hn(a.issues)})}return r}async function _n(e,t,n){if(!t)return n;let r=await mn(t,n);if(r.issues)throw Y.DF0044({name:e,issues:hn(r.issues)});return n}async function vn(e,t){if(!e.setup)return{};if(typeof t==`object`&&t){e.__cache??=new WeakMap;let n=e.__cache,r=n.get(t);return r||(r=Promise.resolve(e.setup(t)),r.catch(()=>{n.get(t)===r&&n.delete(t)}),n.set(t,r)),await r}if(!e.__promise){let n=Promise.resolve(e.setup(t));n.catch(()=>{e.__promise===n&&(e.__promise=void 0)}),e.__promise=n}return await e.__promise}async function yn(e,t){let n=e.handler;if(!n){let r=await vn(e,t);if(!r.handler)throw Y.DF0024({name:e.name});n=r.handler}let r=e.args,i=e.returns;if(!r&&!i)return n;let a=n;return async(...t)=>{let n=await gn(e.name,r,t),o=await a(...n);return await _n(e.name,i,o)}}var bn=class{context;definitions=new Map;functions;_onChanged=[];constructor(e){this.context=e;let t=this.definitions,n=this;this.functions=new Proxy({},{get(e,r){let i=t.get(r);if(i)return yn(i,n.context)},has(e,n){return t.has(n)},getOwnPropertyDescriptor(e,n){return{value:t.get(n)?.handler,configurable:!0,enumerable:!0}},ownKeys(){return Array.from(t.keys())}})}register(e,t=!1){if(this.definitions.has(e.name)&&!t)throw Y.DF0021({name:e.name});pn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}update(e,t=!1){if(!this.definitions.has(e.name)&&!t)throw Y.DF0022({name:e.name});pn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}onChanged(e){return this._onChanged.push(e),()=>{let t=this._onChanged.indexOf(e);t!==-1&&this._onChanged.splice(t,1)}}async getHandler(e){return await yn(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw Y.DF0023({name:String(e)});return{args:t.args,returns:t.returns}}has(e){return this.definitions.has(e)}get(e){return this.definitions.get(e)}list(){return Array.from(this.definitions.keys())}};function xn(e,t=``){return JSON.stringify(e,function(e,n){let r=this,i=r==null?n:r[e];if(i===void 0){if(Array.isArray(r))throw X(t,`undefined`,r,e);return n}return i!==null&&Sn(i,r,e,t),n})}function Sn(e,t,n,r){if(typeof e==`bigint`)throw X(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw X(r,`Map`,t,n);if(e instanceof Set)throw X(r,`Set`,t,n);if(e instanceof Date)throw X(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw X(r,e.constructor?.name??`class instance`,t,n)}function X(e,t,n,r){let i=Cn(n,r);return Y.DF0020({name:e||`<anonymous>`,type:t,path:i})}function Cn(e,t){return Array.isArray(e)?`[${t}]`:t===``?`<root>`:t}var wn=`__DEVFRAME_CONNECTION_META__`,Tn=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function En(e){let t=[()=>window?.[e],()=>globalThis?.[e],()=>parent.window?.[e]];for(let e of t)try{let t=e();if(t)return t}catch{}}function Dn(){return En(on)}function On(){return En(wn)}function Z(e){if(e)return e;try{let e=localStorage.getItem(Tn);if(e)return e}catch{}return En(Tn)}function kn(e){globalThis[on]=e,globalThis[wn]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&An(e.authToken)}function An(e){try{localStorage.setItem(Tn,e)}catch{}globalThis[Tn]=e;let t=Dn();t&&(globalThis[on]={...t,authToken:e})}function jn(e){let t=me(an,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Mn(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Nn(){let e=Dn();if(e)return Mn(e,Z()??e.authToken??e.connectionMeta.authToken);let t=On();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??jn(`./`),authToken:Z(t.authToken)}}async function Pn(e={}){if(e.connection){let t=Mn(e.connection,Z(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return kn(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:jn(t[0]??`./`),authToken:Z(e.authToken??e.connectionMeta.authToken)};return kn(n),n}let n=Nn();if(n){let t=Mn(n,Z(e.authToken??n.authToken??n.connectionMeta.authToken));return kn(t),t}let r=[];for(let n of t){let t=me(an,n),i=jn(n);try{let n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch connection meta from ${i}: ${n.status}`);let r=await n.json(),a=n.url||i,o={connectionMeta:r,metaBaseUrl:r.baseUrl?new URL(r.baseUrl,a).href:a,authToken:Z(e.authToken??r.authToken)};return kn(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Q=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function Fn(e=un){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function In(e){try{let t=new URL(globalThis.location.href),n=new URLSearchParams(t.hash.replace(/^#/,``));if(!n.has(e))return;n.delete(e),t.hash=n.toString(),globalThis.history?.replaceState(globalThis.history.state,``,t.href)}catch{}}function Ln(e=un){let t=Fn(e);return t&&In(e),t}async function Rn(e,t={}){let n=Ln(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function zn(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(ln,{initialValue:{}}).then(e=>(t=e.value(),e.on(`updated`,e=>{t=e}),e)),r);return i(),{state:i,has:e=>e in t,keys:()=>Object.keys(t),get:r=>{let i=t[r];if(!i)return;let a=n.get(i);return a||(a={...i,rpc:e.scope(i.scope).rpc},n.set(i,a)),a}}}function Bn(e){let t=new Map,n=new Map,r=new Map,i=new Set,a=e.connectionMeta.backend===`static`;function o(e,t){let n=r.get(e);return n&&typeof n==`object`&&!Array.isArray(n)&&typeof t==`object`&&!Array.isArray(t)?{...n,...t}:t}e.client.register({name:s.broadcast.clientStateUpdated,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.mutate(()=>o(e,n),r)}}),e.client.register({name:s.broadcast.clientStatePatch,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.patch(n,r)}});function c(t,n){let r=[];return r.push(n.on(`updated`,(n,r,i)=>{a||(r?e.callEvent(`devframe:rpc:server-state:patch`,t,r,i):e.callEvent(`devframe:rpc:server-state:set`,t,n,i))})),()=>{for(let e of r)e()}}return{keys:()=>Array.from(t.keys()),onKeyAdded(e){return i.add(e),()=>{i.delete(e)}},delete(e){let i=n.get(e);n.delete(e);let a=t.delete(e);return r.delete(e),i?.(),a},get:async(l,u)=>{if(u?.initialValue!==void 0&&r.set(l,u.initialValue),t.has(l))return t.get(l);let d=jt({initialValue:u?.initialValue,enablePatches:!1});async function f(){if(a||e.callEvent(`devframe:rpc:server-state:subscribe`,l),u?.initialValue!==void 0){t.set(l,d);for(let e of i)e(l);return e.call(`devframe:rpc:server-state:get`,l).then(e=>{e!==void 0&&d.mutate(()=>o(l,e))}).catch(e=>{console.error(`Error getting server state`,e)}),n.set(l,c(l,d)),d}{let r=await e.call(`devframe:rpc:server-state:get`,l);d.mutate(()=>o(l,r)),t.set(l,d);for(let e of i)e(l);return n.set(l,c(l,d)),d}}return new Promise((t,n)=>{if(e.isTrusted)f().then(t,n);else{t(d);let n=!1;e.events.on(s.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,f())})}})}}}var Vn=new Map;function Hn(e=Vn){let t=new Map;return{serialize:n=>{let r;return n.t===`q`?r=n.m:(r=t.get(n.i),t.delete(n.i)),!(n.t===`s`&&`e`in n)&&r&&e.get(r)?.jsonSerializable===!0?xn(n,r??``):`s:${Yt(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Xt(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Un(){}function Wn(e){let t=e.search(/\n\n|\r\n\r\n/);if(!(t<0))return{frame:e.slice(0,t),rest:e.slice(t+(e[t]===`\r`?4:2))}}function Gn(e){let t=`message`,n=[];for(let r of e.split(/\r?\n/))r.startsWith(`:`)||(r.startsWith(`event:`)?t=r.slice(6).trimStart():r.startsWith(`data:`)&&n.push(r.slice(5).replace(/^ /,``)));return{event:t,data:n}}function Kn(e){let{onConnected:t=Un,onError:n=Un,onDisconnected:r=Un,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${dn}=${encodeURIComponent(e.authToken)}`);let s=Hn(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function h(e){l||(l=!0,p(e),n(e),r())}function g(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function _(e,n){e===`session`?(f(n),t()):u?.(n)}async function v(e){let t=e.getReader();d=t;let n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;for(r+=n.decode(i,{stream:!0});;){let e=Wn(r);if(!e)break;r=e.rest;let{event:t,data:n}=Gn(e.frame);n.length>0&&_(t,n.join(`
|
|
3
|
+
`))}}g()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await v(e.body)}catch(e){if(c.signal.aborted){g();return}h(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l)n(Error(`Devframe SSE channel is closed; message dropped`));else try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,[sn]:t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function qn(e,t){let{channel:n,rpcOptions:r={}}=t;return b(e,{...n,timeout:-1,...r,proxify:!1})}function Jn(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:c=0}=e,l=!1,u=`connecting`,d=null,f=Promise.withResolvers();function p(e,t=null){if(t?d=t:e===`connected`&&(d=null),e===u)return;let n=u;u=e,i.emit(s.client.connectionStatus,e,n)}let m=new Set;function h(e){for(let t of[...m])t.reject(e)}function g(){return u===`disconnected`||u===`error`?new Q(`connection`,`[devframe] Not connected to the devframe server`,{cause:d??void 0}):u===`unauthorized`?new Q(`auth`,`[devframe] Not authorized by the devframe server`,{cause:d??void 0}):null}function _(e,t){return new Promise((n,r)=>{let a=!1,o,l={reject(e){a||(u(),i.emit(s.client.error,e,t),r(e))}};function u(){a=!0,m.delete(l),o&&clearTimeout(o)}m.add(l),c>0&&(o=setTimeout(()=>{l.reject(new Q(`timeout`,`[devframe] RPC call "${t}" timed out after ${c}ms`))},c)),e.then(e=>{a||(u(),n(e))},e=>{if(a)return;u();let n=e instanceof Error?e:Error(String(e));i.emit(s.client.error,n,t),r(n)})})}let v=new Map;for(let e of r.jsonSerializableMethods??[])v.set(e,{jsonSerializable:!0});let y=e.createChannel({definitions:v,onError(e){p(`error`,e),i.emit(s.client.connectionError,e),h(new Q(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){u!==`error`&&p(`disconnected`),h(new Q(`connection`,`[devframe] Disconnected from the devframe server`,{cause:d??void 0}))}}),b=qn(a.functions,{channel:y,rpcOptions:o});a.register({name:s.broadcast.authRevoked,type:`event`,handler:()=>{l=!1;let e=new Q(`auth`,`[devframe] The devframe server revoked this client's trust`);p(`unauthorized`,e),i.emit(s.client.connectionError,e),h(e),i.emit(s.client.isTrustedUpdated,!1)}});let x=n;async function S(e){x=e;let t=await b.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(l=t.isTrusted,l)f.resolve(!0),p(`connected`);else{let e=new Q(`auth`,`[devframe] The devframe server refused this client's credentials`);p(`unauthorized`,e),i.emit(s.client.connectionError,e)}return i.emit(s.client.isTrustedUpdated,l),t.isTrusted}async function C(e){let t=(await b.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(x=t,l=!0,f.resolve(!0),p(`connected`),i.emit(s.client.isTrustedUpdated,!0)),t}async function w(e={}){await b.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function T(){return l?!0:S(x??``)}async function ee(e=6e4){if(l&&f.resolve(!0),e<=0)return f.promise;let t;try{return await Promise.race([f.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),l}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return l},get status(){return u},get connectionError(){return d},requestTrust:T,requestTrustWithToken:S,requestTrustWithCode:C,requestAuthCode:w,ensureTrusted:ee,call:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(s.client.error,n,t),Promise.reject(n)):_(b.$call(...e),t)},callEvent:(...e)=>{let t=g();if(t)i.emit(s.client.error,t,String(e[0]));else return b.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(s.client.error,n,t),Promise.reject(n)):_(b.$callOptional(...e),t)},close:()=>{y.close()}}}function Yn(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function Xn(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Yn(n.sse,r??`./`,location);return Jn({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>Kn({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function Zn(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:Qn(r)?Zn(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function Qn(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function $n(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function er(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function tr(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function nr(e){if(e.error)throw Zn(e.error);return e.output}function rr(e){return e.some(e=>e!=null)}function ir(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function ar(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Jt(e):e}function a(e,t){return i(ir(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return tr(r)?nr(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if($n(r)){if(rr(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(er(r)){let e=ce(n),i=r.records[e];if(i)return nr(await s(i,r.serialization));if(r.fallback)return nr(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!rr(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function or(e){let t=ar(await e.fetchJsonFromBases(cn),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}var sr=``;function cr(e,t){return`${e}${sr}${t}`}function lr(e){let t=new Map,n=new Map;e.client.register({name:s.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(cr(e,n))?._push(r,i)}}),e.client.register({name:s.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=cr(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:s.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=cr(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(s.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(sr);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=cr(n,r),o=t.get(a);if(o)return o;let c=en({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,c),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(s.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!c.cancelled&&!c.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:c.lastSeenSeq}))})}return c}function i(t,r){let i=cr(t,r),a=n.get(i);if(a)return a;let o=$t({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function ur(){}var dr=new Map;function fr(e){let t=e.url;e.authToken&&(t=`${t}?${dn}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=ur,onError:i=ur,onDisconnected:a=ur,definitions:o=dr}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=Hn(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN)n.send(e);else if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r)}else i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function pr(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return he(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function mr(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=pr(n.websocket,r??`./`,location);return Jn({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>fr({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function hr(e){return e.includes(`:`)}function $(e,t){return hr(t)?t:`${e}:${t}`}function gr(e){return{async get(t){return(await e()).value()?.[t]},async set(t,n){(await e()).mutate(e=>{if(e===void 0)return{[t]:n};e[t]=n})},async delete(t){(await e()).mutate(e=>{e!==void 0&&delete e[t]})},async all(){return(await e()).value()??{}},async onChange(t){return(await e()).on(`updated`,e=>t(e??{}))}}}function _r(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=(async()=>(await e.ensureTrusted(),e.sharedState.get(r)))().catch(e=>{throw i=void 0,e}),i}return gr(a)}function vr(e,t){return{global:_r(e,t,`global`),project:_r(e,t,`project`)}}function yr(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(hr(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call($(t,n),...r)),callEvent:((n,...r)=>e.callEvent($(t,n),...r)),callOptional:((n,...r)=>e.callOptional($(t,n),...r)),sharedState:((n,r)=>e.sharedState.get($(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe($(t,n),r,i),upload:(n,r)=>e.streaming.upload($(t,n),r)}},settings:vr(e,t),scope:e.scope}}function br(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function xr(e,t={}){let n=t.modelContext??br();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=rn(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=x(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:w(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>Sr(t,e.context,n)},{signal:c.signal});u&&`then`in u&&u.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),u&&`unregister`in u&&typeof u.unregister==`function`&&u.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}async function Sr(e,t,n){try{let r=ee(n,e.args?.length);return{content:[{type:`text`,text:Cr(await(await yn(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:wr(e)}]}}}function Cr(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function wr(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function Tr(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function Er(e={}){let{baseURL:n=`./`,rpcOptions:r={},cacheOptions:i=!1}=e,a=le(),o=Array.isArray(n)?n:[n],c=await Pn(e),{connectionMeta:l,metaBaseUrl:u,authToken:d}=c,f=o[0]??`./`;try{f=new URL(`.`,u).href}catch{}let p=new fn({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),m={rpc:void 0},h=new bn(m),g=e.webmcp===!1?void 0:xr(h),_,v=!1,y=0,b;function x(){y++,b=void 0,p.clear(),i===!0&&p.updateOptions({functions:[]})}i&&(h.register({name:s.broadcast.cacheInvalidate,type:`event`,handler:x}),a.on(s.client.connectionStatus,x),a.on(s.client.isTrustedUpdated,x));async function S(e){let t=[f,...o.filter(e=>e!==f)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(me(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let C=e.callTimeout??0,w=C>0?C:1/0,T,ee={authToken:d,connectionMeta:l,metaBaseUrl:u,events:a,clientRpc:h,callTimeout:e.callTimeout,rpcOptions:{...r,async onRequest(e,t,n){let a=performance.now()+w;if(await r.onRequest?.call(this,e,t,n),i===!0&&e.i&&T.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new Q(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${C}ms`)}for(;!b&&(t(),!(v||T.status!==`connected`));){let e=y;b=T.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===y&&p.updateOptions({functions:t??[]})}).catch(t=>{throw e===y&&(b=void 0),t}),await b}await b,t()}let o=y;if(i&&e.i&&!v&&T.isTrusted&&p.validate(e.m)){if(p.has(e.m,e.a))return n(p.cached(e.m,e.a));let r=await t(e);o===y&&!v&&p.apply(e,r)}else await t(e)}}},E=Tr(e.transport??`auto`,l);T=E===`static`?await or({fetchJsonFromBases:S}):E===`sse`?Xn({...ee,sseOptions:e.sseOptions}):mr({...ee,wsOptions:e.wsOptions});let D;try{D=new BroadcastChannel(`devframe-auth`)}catch{}let O,k=!1;function te(e){return((...t)=>k||!O?e(...t):O.then(()=>e(...t)))}function ne(){v=!0,x();try{_?.(),g?.()}finally{try{D?.close()}finally{T.close?.()}}}let A={events:a,get isTrusted(){return T.isTrusted},get status(){return T.status},get connectionError(){return T.connectionError},get transport(){return T.transport??E},get connection(){return c},connectionMeta:l,ensureTrusted:T.ensureTrusted,requestTrust:T.requestTrust,requestTrustWithToken:async e=>(An(e),c={...c,authToken:e},T.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await T.requestTrustWithCode(e);if(!t)return!1;An(t),c={...c,authToken:t};try{D?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>T.requestAuthCode(e),call:te(T.call),callEvent:te(T.callEvent),callOptional:te(T.callOptional),client:h,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:p,scope:void 0,close:ne};A.sharedState=Bn(A),A.streaming=lr(A),A.services=zn(A);let re=new Map;A.scope=(e=>{if(!e)return A;let t=re.get(e);return t||(t=yr(A,e),re.set(e,t)),t}),m.rpc=A;function j(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ie(){if(e.simpleAuth!==!1&&j()&&typeof globalThis.prompt==`function`)for(await A.requestAuthCode().catch(()=>{});!A.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await A.requestTrustWithCode(t))return}}async function ae(){let t=await T.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await Rn(A,{param:n}):!1;t||r||A.isTrusted||await ie()}return O=ae().then(()=>{k=!0},()=>{k=!0}),l.mcp&&t(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./D8T7CxEJ.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{v||(_=e(A))}).catch(()=>{}),D&&(D.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&A.requestTrustWithToken(e.data.authToken)}),A}var Dr=Er;export{Dr as connectDevframe,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d","timestamp":1792055145245}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d","timestamp":1792055145245,"prerendered":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--ff-bg:#fff;--ff-fg:#0a0a0a;--ff-muted:#0a0a0a9e;--ff-line:#0a0a0a1f;--ff-line-strong:#0a0a0a66;--ff-hover:#0a0a0a0d;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html.dark{--ff-bg:#0a0a0a;--ff-fg:#fafafa;--ff-muted:#fafafa9e;--ff-line:#fafafa2b;--ff-line-strong:#fafafa66;--ff-hover:#fafafa12;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html{scrollbar-gutter:stable}body,html{background:var(--ff-bg);color:var(--ff-fg)}body{-webkit-font-smoothing:antialiased}:lang(ja) body{font-family:var(--ff-font),ui-sans-serif,system-ui,sans-serif;font-feature-settings:var(--ff-features);line-height:1.8}::selection{background:var(--ff-fg);color:var(--ff-bg)}.display{letter-spacing:-.045em;text-wrap:balance;line-height:.95}:lang(ja) .display,:lang(zh) .display{letter-spacing:0;word-break:auto-phrase;line-height:1.2}.hero-title{font-size:calc(clamp(2.75rem,6vw,4.75rem))}:lang(ja) .hero-title,:lang(zh) .hero-title{font-size:calc(clamp(2.25rem,4.4vw,3.5rem))}@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--un-bg-opacity:100%;--un-border-opacity:100%;--un-leading:initial;--un-outline-opacity:100%;--un-outline-style:solid;--un-text-opacity:100%}}@property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-leading{syntax:"*";inherits:false}@property --un-outline-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-inset-ring-color{syntax:"*";inherits:false}@property --un-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow-color{syntax:"*";inherits:false}@property --un-ring-color{syntax:"*";inherits:false}@property --un-ring-inset{syntax:"*";inherits:false}@property --un-ring-offset-color{syntax:"*";inherits:false}@property --un-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --un-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow-color{syntax:"*";inherits:false}@property --un-blur{syntax:"*";inherits:false}@property --un-brightness{syntax:"*";inherits:false}@property --un-contrast{syntax:"*";inherits:false}@property --un-drop-shadow{syntax:"*";inherits:false}@property --un-grayscale{syntax:"*";inherits:false}@property --un-hue-rotate{syntax:"*";inherits:false}@property --un-invert{syntax:"*";inherits:false}@property --un-saturate{syntax:"*";inherits:false}@property --un-sepia{syntax:"*";inherits:false}@property --un-numeric-figure{syntax:"*";inherits:false}@property --un-numeric-fraction{syntax:"*";inherits:false}@property --un-numeric-spacing{syntax:"*";inherits:false}@property --un-ordinal{syntax:"*";inherits:false}@property --un-slashed-zero{syntax:"*";inherits:false}:host,:root{--spacing:.25rem;--colors-amber-DEFAULT:oklch(82.8% .189 84.429);--fontWeight-semibold:600;--leading-relaxed:1.625;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--container-6xl:72rem;--container-md:28rem;--default-transition-timingFunction:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--container-sm:24rem;--tracking-tight:-.025em;--fontWeight-normal:400;--fontWeight-medium:500;--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--tracking-wide:.025em;--leading-none:1;--radius-none:0;--colors-white:#fff;--colors-neutral-950:oklch(14.5% 0 0);--colors-neutral-500:oklch(55.6% 0 0);--text-xs-fontSize:.75rem;--text-xs-lineHeight:1rem;--text-base-fontSize:1rem;--text-base-lineHeight:1.5rem;--text-4xl-fontSize:2.25rem;--text-4xl-lineHeight:2.5rem;--text-sm-fontSize:.875rem;--text-sm-lineHeight:1.25rem;--text-2xl-fontSize:1.5rem;--text-2xl-lineHeight:2rem;--text-xl-fontSize:1.25rem;--text-xl-lineHeight:1.75rem;--text-3xl-fontSize:1.875rem;--text-3xl-lineHeight:2.25rem;--default-font-family:var(--font-sans);--default-monoFont-family:var(--font-mono)}*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-featureSettings,normal);font-variation-settings:var(--default-font-variationSettings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-monoFont-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-monoFont-featureSettings,normal);font-variation-settings:var(--default-monoFont-variationSettings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden~=until-found])){display:none!important}.i-ph-arrow-counter-clockwise{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M224%20128a96%2096%200%200%201-94.71%2096H128a95.38%2095.38%200%200%201-65.9-26.2%208%208%200%200%201%2011-11.63%2080%2080%200%201%200-1.67-114.78%203%203%200%200%201-.26.25L44.59%2096H72a8%208%200%200%201%200%2016H24a8%208%200%200%201-8-8V56a8%208%200%200%201%2016%200v29.8L60.25%2060A96%2096%200%200%201%20224%20128%22%2F%3E%3C%2Fsvg%3E)}.i-ph-arrow-counter-clockwise,.i-ph-bookmark-simple,.i-ph-check,.i-ph-circle-notch,.i-ph-copy,.i-ph-download-simple,.i-ph-floppy-disk,.i-ph-github-logo,.i-ph-hammer,.i-ph-list-magnifying-glass,.i-ph-moon,.i-ph-puzzle-piece,.i-ph-shuffle,.i-ph-sliders-horizontal,.i-ph-sun,.i-ph-translate,.i-ph-warning,.i-ph-x{-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.15em;height:1.15em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-bookmark-simple{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M184%2032H72a16%2016%200%200%200-16%2016v176a8%208%200%200%200%2012.24%206.78L128%20193.43l59.77%2037.35A8%208%200%200%200%20200%20224V48a16%2016%200%200%200-16-16m0%20177.57-51.77-32.35a8%208%200%200%200-8.48%200L72%20209.57V48h112Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-check{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m229.66%2077.66-128%20128a8%208%200%200%201-11.32%200l-56-56a8%208%200%200%201%2011.32-11.32L96%20188.69%20218.34%2066.34a8%208%200%200%201%2011.32%2011.32%22%2F%3E%3C%2Fsvg%3E)}.i-ph-circle-notch{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M232%20128a104%20104%200%200%201-208%200c0-41%2023.81-78.36%2060.66-95.27a8%208%200%200%201%206.68%2014.54C60.15%2061.59%2040%2093.27%2040%20128a88%2088%200%200%200%20176%200c0-34.73-20.15-66.41-51.34-80.73a8%208%200%200%201%206.68-14.54C208.19%2049.64%20232%2087%20232%20128%22%2F%3E%3C%2Fsvg%3E)}.i-ph-copy{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M216%2032H88a8%208%200%200%200-8%208v40H40a8%208%200%200%200-8%208v128a8%208%200%200%200%208%208h128a8%208%200%200%200%208-8v-40h40a8%208%200%200%200%208-8V40a8%208%200%200%200-8-8m-56%20176H48V96h112Zm48-48h-32V88a8%208%200%200%200-8-8H96V48h112Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-download-simple{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M224%20144v64a8%208%200%200%201-8%208H40a8%208%200%200%201-8-8v-64a8%208%200%200%201%2016%200v56h160v-56a8%208%200%200%201%2016%200m-101.66%205.66a8%208%200%200%200%2011.32%200l40-40a8%208%200%200%200-11.32-11.32L136%20124.69V32a8%208%200%200%200-16%200v92.69L93.66%2098.34a8%208%200%200%200-11.32%2011.32Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-floppy-disk{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M219.31%2072%20184%2036.69A15.86%2015.86%200%200%200%20172.69%2032H48a16%2016%200%200%200-16%2016v160a16%2016%200%200%200%2016%2016h160a16%2016%200%200%200%2016-16V83.31A15.86%2015.86%200%200%200%20219.31%2072M168%20208H88v-56h80Zm40%200h-24v-56a16%2016%200%200%200-16-16H88a16%2016%200%200%200-16%2016v56H48V48h124.69L208%2083.31ZM160%2072a8%208%200%200%201-8%208H96a8%208%200%200%201%200-16h56a8%208%200%200%201%208%208%22%2F%3E%3C%2Fsvg%3E)}.i-ph-github-logo{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M208.31%2075.68A59.78%2059.78%200%200%200%20202.93%2028a8%208%200%200%200-6.93-4%2059.75%2059.75%200%200%200-48%2024h-24a59.75%2059.75%200%200%200-48-24%208%208%200%200%200-6.93%204%2059.78%2059.78%200%200%200-5.38%2047.68A58.14%2058.14%200%200%200%2056%20104v8a56.06%2056.06%200%200%200%2048.44%2055.47A39.8%2039.8%200%200%200%2096%20192v8H72a24%2024%200%200%201-24-24%2040%2040%200%200%200-40-40%208%208%200%200%200%200%2016%2024%2024%200%200%201%2024%2024%2040%2040%200%200%200%2040%2040h24v16a8%208%200%200%200%2016%200v-40a24%2024%200%200%201%2048%200v40a8%208%200%200%200%2016%200v-40a39.8%2039.8%200%200%200-8.44-24.53A56.06%2056.06%200%200%200%20216%20112v-8a58.14%2058.14%200%200%200-7.69-28.32M200%20112a40%2040%200%200%201-40%2040h-48a40%2040%200%200%201-40-40v-8a41.74%2041.74%200%200%201%206.9-22.48%208%208%200%200%200%201.1-7.69%2043.8%2043.8%200%200%201%20.79-33.58%2043.88%2043.88%200%200%201%2032.32%2020.06%208%208%200%200%200%206.71%203.69h32.35a8%208%200%200%200%206.74-3.69%2043.87%2043.87%200%200%201%2032.32-20.06%2043.8%2043.8%200%200%201%20.77%2033.58%208.09%208.09%200%200%200%201%207.65%2041.7%2041.7%200%200%201%207%2022.52Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-hammer{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m251.34%20112-67.46-67.92a96.1%2096.1%200%200%200-135.77%200l-.09.09L34.25%2058.4a8%208%200%200%200%2011.49%2011.13l13.73-14.18a80%2080%200%200%201%2018.71-13.9L124.68%2088l-96%2096a16%2016%200%200%200%200%2022.63l20.69%2020.69a16%2016%200%200%200%2022.63%200l96-96%2014.34%2014.34L200%20163.3a16%2016%200%200%200%2022.63%200l28.69-28.69a16%2016%200%200%200%20.02-22.61M60.68%20216%2040%20195.31l68-68L128.68%20148Zm101.66-101.68L140%20136.67%20119.31%20116l22.35-22.35a8%208%200%200%200%200-11.32L94.32%2035a80%2080%200%200%201%2078.23%2020.41l44.22%2044.51L188%20128.66l-14.34-14.34a8%208%200%200%200-11.32%200m49%2037.66-12-12L228%20111.25l12%2012Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-list-magnifying-glass{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M32%2064a8%208%200%200%201%208-8h176a8%208%200%200%201%200%2016H40a8%208%200%200%201-8-8m8%2072h72a8%208%200%200%200%200-16H40a8%208%200%200%200%200%2016m88%2048H40a8%208%200%200%200%200%2016h88a8%208%200%200%200%200-16m109.66%2013.66a8%208%200%200%201-11.32%200L206%20177.36A40%2040%200%201%201%20217.36%20166l20.3%2020.3a8%208%200%200%201%200%2011.36M184%20168a24%2024%200%201%200-24-24%2024%2024%200%200%200%2024%2024%22%2F%3E%3C%2Fsvg%3E)}.i-ph-moon{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M233.54%20142.23a8%208%200%200%200-8-2%2088.08%2088.08%200%200%201-109.8-109.8%208%208%200%200%200-10-10%20104.84%20104.84%200%200%200-52.91%2037A104%20104%200%200%200%20136%20224a103.1%20103.1%200%200%200%2062.52-20.88%20104.84%20104.84%200%200%200%2037-52.91%208%208%200%200%200-1.98-7.98m-44.64%2048.11A88%2088%200%200%201%2065.66%2067.11a89%2089%200%200%201%2031.4-26A106%20106%200%200%200%2096%2056a104.11%20104.11%200%200%200%20104%20104%20106%20106%200%200%200%2014.92-1.06%2089%2089%200%200%201-26.02%2031.4%22%2F%3E%3C%2Fsvg%3E)}.i-ph-puzzle-piece{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M220.27%20158.54a8%208%200%200%200-7.7-.46%2020%2020%200%201%201%200-36.16%208%208%200%200%200%2011.43-7.23V72a16%2016%200%200%200-16-16h-36.22a35%2035%200%200%200%20.22-4%2036.1%2036.1%200%200%200-11.36-26.24%2036%2036%200%200%200-60.55%2023.62%2036.6%2036.6%200%200%200%20.14%206.62H64a16%2016%200%200%200-16%2016v32.22a35%2035%200%200%200-4-.22%2036.12%2036.12%200%200%200-26.24%2011.36%2035.7%2035.7%200%200%200-9.69%2027%2036.08%2036.08%200%200%200%2033.31%2033.6%2035.7%2035.7%200%200%200%206.62-.14V208a16%2016%200%200%200%2016%2016h144a16%2016%200%200%200%2016-16v-42.69a8%208%200%200%200-3.73-6.77M208%20208H64v-42.69a8%208%200%200%200-11.43-7.23%2020%2020%200%201%201%200-36.16A8%208%200%200%200%2064%20114.69V72h46.69a8%208%200%200%200%207.23-11.43%2020%2020%200%201%201%2036.16%200A8%208%200%200%200%20161.31%2072H208v32.23a35.7%2035.7%200%200%200-6.62-.14A36%2036%200%200%200%20204%20176a35%2035%200%200%200%204-.22Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-shuffle{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M237.66%20178.34a8%208%200%200%201%200%2011.32l-24%2024a8%208%200%200%201-11.32-11.32L212.69%20192h-11.75a72.12%2072.12%200%200%201-58.59-30.15l-41.72-58.4A56.1%2056.1%200%200%200%2055.06%2080H32a8%208%200%200%201%200-16h23.06a72.12%2072.12%200%200%201%2058.59%2030.15l41.72%2058.4A56.1%2056.1%200%200%200%20200.94%20176h11.75l-10.35-10.34a8%208%200%200%201%2011.32-11.32ZM143%20107a8%208%200%200%200%2011.16-1.86l1.2-1.67A56.1%2056.1%200%200%201%20200.94%2080h11.75l-10.35%2010.34a8%208%200%200%200%2011.32%2011.32l24-24a8%208%200%200%200%200-11.32l-24-24a8%208%200%200%200-11.32%2011.32L212.69%2064h-11.75a72.12%2072.12%200%200%200-58.59%2030.15l-1.2%201.67A8%208%200%200%200%20143%20107m-30%2042a8%208%200%200%200-11.16%201.86l-1.2%201.67A56.1%2056.1%200%200%201%2055.06%20176H32a8%208%200%200%200%200%2016h23.06a72.12%2072.12%200%200%200%2058.59-30.15l1.2-1.67A8%208%200%200%200%20113%20149%22%2F%3E%3C%2Fsvg%3E)}.i-ph-sliders-horizontal{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M40%2088h33a32%2032%200%200%200%2062%200h81a8%208%200%200%200%200-16h-81a32%2032%200%200%200-62%200H40a8%208%200%200%200%200%2016m64-24a16%2016%200%201%201-16%2016%2016%2016%200%200%201%2016-16m112%20104h-17a32%2032%200%200%200-62%200H40a8%208%200%200%200%200%2016h97a32%2032%200%200%200%2062%200h17a8%208%200%200%200%200-16m-48%2024a16%2016%200%201%201%2016-16%2016%2016%200%200%201-16%2016%22%2F%3E%3C%2Fsvg%3E)}.i-ph-sun{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M120%2040V16a8%208%200%200%201%2016%200v24a8%208%200%200%201-16%200m72%2088a64%2064%200%201%201-64-64%2064.07%2064.07%200%200%201%2064%2064m-16%200a48%2048%200%201%200-48%2048%2048.05%2048.05%200%200%200%2048-48M58.34%2069.66a8%208%200%200%200%2011.32-11.32l-16-16a8%208%200%200%200-11.32%2011.32Zm0%20116.68-16%2016a8%208%200%200%200%2011.32%2011.32l16-16a8%208%200%200%200-11.32-11.32M192%2072a8%208%200%200%200%205.66-2.34l16-16a8%208%200%200%200-11.32-11.32l-16%2016A8%208%200%200%200%20192%2072m5.66%20114.34a8%208%200%200%200-11.32%2011.32l16%2016a8%208%200%200%200%2011.32-11.32ZM48%20128a8%208%200%200%200-8-8H16a8%208%200%200%200%200%2016h24a8%208%200%200%200%208-8m80%2080a8%208%200%200%200-8%208v24a8%208%200%200%200%2016%200v-24a8%208%200%200%200-8-8m112-88h-24a8%208%200%200%200%200%2016h24a8%208%200%200%200%200-16%22%2F%3E%3C%2Fsvg%3E)}.i-ph-translate{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m247.15%20212.42-56-112a8%208%200%200%200-14.31%200l-21.71%2043.43A88%2088%200%200%201%20108%20126.93%20103.65%20103.65%200%200%200%20135.69%2064H160a8%208%200%200%200%200-16h-56V32a8%208%200%200%200-16%200v16H32a8%208%200%200%200%200%2016h87.63A87.76%2087.76%200%200%201%2096%20116.35a87.7%2087.7%200%200%201-19-31%208%208%200%201%200-15.08%205.34A103.6%20103.6%200%200%200%2084%20127a87.55%2087.55%200%200%201-52%2017%208%208%200%200%200%200%2016%20103.46%20103.46%200%200%200%2064-22.08%20104.2%20104.2%200%200%200%2051.44%2021.31l-26.6%2053.19a8%208%200%200%200%2014.31%207.16L148.94%20192h70.11l13.79%2027.58A8%208%200%200%200%20240%20224a8%208%200%200%200%207.15-11.58M156.94%20176%20184%20121.89%20211.05%20176Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-warning{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M236.8%20188.09%20149.35%2036.22a24.76%2024.76%200%200%200-42.7%200L19.2%20188.09a23.51%2023.51%200%200%200%200%2023.72A24.35%2024.35%200%200%200%2040.55%20224h174.9a24.35%2024.35%200%200%200%2021.33-12.19%2023.51%2023.51%200%200%200%20.02-23.72m-13.87%2015.71a8.5%208.5%200%200%201-7.48%204.2H40.55a8.5%208.5%200%200%201-7.48-4.2%207.59%207.59%200%200%201%200-7.72l87.45-151.87a8.75%208.75%200%200%201%2015%200l87.45%20151.87a7.59%207.59%200%200%201-.04%207.72M120%20144v-40a8%208%200%200%201%2016%200v40a8%208%200%200%201-16%200m20%2036a12%2012%200%201%201-12-12%2012%2012%200%200%201%2012%2012%22%2F%3E%3C%2Fsvg%3E)}.i-ph-x{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M205.66%20194.34a8%208%200%200%201-11.32%2011.32L128%20139.31l-66.34%2066.35a8%208%200%200%201-11.32-11.32L116.69%20128%2050.34%2061.66a8%208%200%200%201%2011.32-11.32L128%20116.69l66.34-66.35a8%208%200%200%201%2011.32%2011.32L139.31%20128Z%22%2F%3E%3C%2Fsvg%3E)}.btn-ghost{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent);border-color:#0000}.btn-ghost,.btn-outline{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 4);gap:calc(var(--spacing) * 2);height:calc(var(--spacing) * 9);-webkit-user-select:none;user-select:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.15s;border-width:1px;justify-content:center;align-items:center;transition-duration:.15s;display:inline-flex}.btn-outline{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent)}.btn-solid{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent);--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 4);border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent);background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent);gap:calc(var(--spacing) * 2);height:calc(var(--spacing) * 9);-webkit-user-select:none;user-select:none;transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.15s;justify-content:center;align-items:center;transition-duration:.15s;display:inline-flex}.btn-solid,.input{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));border-width:1px}.input{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);--un-outline-style:none;border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent);border-radius:var(--radius-none);width:100%;transition-duration:var(--un-duration,var(--default-transition-duration));background-color:#0000;outline-style:none}.\!color-base{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)!important}.color-base,.group:hover .group-hover\:color-base{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)}.color-inverse{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent)}.color-muted,.label{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.label{--un-leading:calc(var(--spacing) * 4);font-size:11px;line-height:calc(var(--spacing) * 4);--un-tracking:.12em;letter-spacing:.12em;font-family:var(--font-mono);text-transform:uppercase}.btn-ghost:hover{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);background-color:color-mix(in oklab,var(--ff-hover) var(--un-bg-opacity),transparent)}.btn-outline:hover{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent);border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent);background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent)}.hover\:color-base:hover{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)}.hover\:color-muted:hover{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.input::placeholder{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.slider::-webkit-slider-thumb{appearance:none;border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent);width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5);box-sizing:border-box;border-style:solid;margin-top:-5px}.slider{appearance:none;height:calc(var(--spacing) * 3.5);cursor:pointer;background-color:#0000;width:100%}.slider:focus-visible{outline-style:var(--un-outline-style);outline-width:2px;outline-color:color-mix(in oklab,var(--ff-fg) var(--un-outline-opacity),transparent);outline-offset:2px}.slider::-moz-range-thumb{border-radius:var(--radius-none);background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent);width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.slider::-moz-range-thumb{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;box-sizing:border-box;border-style:solid}.slider::-moz-range-track{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;box-sizing:border-box;border-style:solid}.slider::-moz-range-track{height:calc(var(--spacing) * 1.5)}.slider::-webkit-slider-runnable-track{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;height:calc(var(--spacing) * 1.5);background:linear-gradient(var(--ff-fg),var(--ff-fg)) 0 0/calc(7px + var(--slider-fraction) * (100% - 14px)) 100% no-repeat;box-sizing:border-box;border-style:solid}.border-base{border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent)}.border-inverse{border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent)}.border-strong,.hover\:border-strong:hover{border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent)}.input:focus{border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent)}.bg-base{background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent)}.bg-inverse{background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent)}.slider::-moz-range-progress{background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent);height:calc(var(--spacing) * 1.5)}.hover\:bg-hover:hover{background-color:color-mix(in oklab,var(--ff-hover) var(--un-bg-opacity),transparent)}.btn-solid:hover{opacity:.85}.btn-ghost:disabled,.btn-outline:disabled,.btn-solid:disabled{opacity:.4;cursor:not-allowed}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.text-2xl{font-size:var(--text-2xl-fontSize);line-height:var(--un-leading,var(--text-2xl-lineHeight))}.text-4xl{font-size:var(--text-4xl-fontSize);line-height:var(--un-leading,var(--text-4xl-lineHeight))}.text-base{font-size:var(--text-base-fontSize);line-height:var(--un-leading,var(--text-base-lineHeight))}.text-sm{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight))}.text-xl{font-size:var(--text-xl-fontSize);line-height:var(--un-leading,var(--text-xl-lineHeight))}.text-xs{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight))}.dark .dark\:text-white{color:color-mix(in srgb,var(--colors-white) var(--un-text-opacity),transparent)}.text-\[11px\]{font-size:11px}.text-\[15px\]{font-size:15px}.text-\[56px\]{font-size:56px}.text-amber{color:color-mix(in srgb,var(--colors-amber-DEFAULT) var(--un-text-opacity),transparent)}.text-neutral-500{color:color-mix(in srgb,var(--colors-neutral-500) var(--un-text-opacity),transparent)}.text-neutral-950{color:color-mix(in srgb,var(--colors-neutral-950) var(--un-text-opacity),transparent)}.hover\:text-\[\#00DC82\]:hover{color:color-mix(in oklab,#00dc82 var(--un-text-opacity),transparent)}.text-inherit{color:inherit}.leading-none{--un-leading:var(--leading-none);line-height:var(--leading-none)}.leading-relaxed{--un-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.tracking-\[0\.04em\]{--un-tracking:.04em;letter-spacing:.04em}.tracking-\[0\.5em\]{--un-tracking:.5em;letter-spacing:.5em}.tracking-tight{--un-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--un-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.font-medium{--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium)}.font-mono{font-family:var(--font-mono)}.font-normal{--un-font-weight:var(--fontWeight-normal);font-weight:var(--fontWeight-normal)}.font-sans{font-family:var(--font-sans)}.font-semibold{--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.mx-auto{margin-inline:auto}.-mb-px{margin-bottom:-1px}.-mr-px{margin-right:-1px}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.ms{margin-inline-start:calc(var(--spacing) * 4)}.mt-4{margin-top:calc(var(--spacing) * 4)}.p-0{padding:calc(var(--spacing) * 0)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px,.px-4{padding-inline:calc(var(--spacing) * 4)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing))}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing))}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-24{padding-block:calc(var(--spacing) * 24)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.appearance-none{appearance:none}.outline,.outline-1{outline-style:var(--un-outline-style);outline-width:1px}.outline-transparent{outline-color:#0000}.hover\:outline-\[var\(--ff-line\)\]:hover{outline-color:color-mix(in oklab,var(--ff-line) var(--un-outline-opacity),transparent)}.focus\:outline-\[var\(--ff-fg\)\]:focus,.peer:focus-visible~.peer-focus-visible\:outline-\[var\(--ff-fg\)\]{outline-color:color-mix(in oklab,var(--ff-fg) var(--un-outline-opacity),transparent)}.peer:focus-visible~.peer-focus-visible\:outline-2{outline-style:var(--un-outline-style);outline-width:2px}.outline-offset-4{outline-offset:4px}.peer:focus-visible~.peer-focus-visible\:outline-offset-2{outline-offset:2px}.focus\:outline-dashed:focus,.hover\:outline-dashed:hover{--un-outline-style:dashed;outline-style:dashed}.border{border-width:1px}.border-x{border-inline-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-0{border-width:0}.border-t-0{border-top-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.last\:border-r-0:last-child{border-right-width:0}.rounded-none{border-radius:var(--radius-none)}.bg-\[var\(--ff-line\)\]{background-color:color-mix(in oklab,var(--ff-line) var(--un-bg-opacity),transparent)}.bg-amber\:5{background-color:color-mix(in srgb,var(--colors-amber-DEFAULT) 5%,transparent)}.bg-transparent{background-color:#0000}.bg-white{background-color:color-mix(in srgb,var(--colors-white) var(--un-bg-opacity),transparent)}.dark .dark\:bg-neutral-950{background-color:color-mix(in srgb,var(--colors-neutral-950) var(--un-bg-opacity),transparent)}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.underline{text-decoration-line:underline}.underline-offset-3{text-underline-offset:3px}.flex{display:flex}.inline-flex{display:inline-flex}.flex-1{flex:1}.flex-auto{flex:auto}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.gap-1{gap:calc(var(--spacing))}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-x-2{-moz-column-gap:calc(var(--spacing) * 2);column-gap:calc(var(--spacing) * 2)}.gap-x-6{-moz-column-gap:calc(var(--spacing) * 6);column-gap:calc(var(--spacing) * 6)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.grid{display:grid}.col-span-full{grid-column:1/-1}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.size-\[10px\]{width:10px;height:10px}.size-\[11px\]{width:11px;height:11px}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-14{height:calc(var(--spacing) * 14)}.h-4{height:calc(var(--spacing) * 4)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-px{height:1px}.h1{height:calc(var(--spacing))}.h2{height:calc(var(--spacing) * 2)}.h3{height:calc(var(--spacing) * 3)}.max-h-\[32rem\]{max-height:32rem}.max-w-\[46ch\]{max-width:46ch}.max-w-\[52ch\]{max-width:52ch}.max-w-\[60ch\]{max-width:60ch}.max-w-520px{max-width:520px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-h-56{min-height:calc(var(--spacing) * 56)}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-screen{min-height:100vh}.min-w-0{min-width:calc(var(--spacing) * 0)}.w-28{width:calc(var(--spacing) * 28)}.w-7{width:calc(var(--spacing) * 7)}.w-9{width:calc(var(--spacing) * 9)}.w-fit{width:fit-content}.w-full{width:100%}.hidden{display:none}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.pointer-events-none{pointer-events:none}.select-none{-webkit-user-select:none;user-select:none}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.uppercase{text-transform:uppercase}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.focus-ring:focus{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(1px + var(--un-ring-offset-width)) var(--un-ring-color,currentColor);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.transition-\[outline-color\]{transition-property:outline-color}.transition-\[outline-color\],.transition-all,.transition-colors{transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.transition-all{transition-property:all}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.self-start{align-self:flex-start}.-inset-\[100vmax\]{inset:-100vmax}.-bottom-\[6px\]{bottom:-6px}.-left-\[6px\]{left:-6px}.-right-\[6px\]{right:-6px}.-top-\[6px\]{top:-6px}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-\[14px\]{left:14px}.left-\[2px\]{left:2px}.left-2{left:calc(var(--spacing) * 2)}.left-4{left:calc(var(--spacing) * 4)}.right-3{right:calc(var(--spacing) * 3)}.top-\[2px\]{top:2px}.top-0{top:calc(var(--spacing) * 0)}.top-3{top:calc(var(--spacing) * 3)}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-content-center{place-content:center}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-z-1{z-index:-1}.z-1{z-index:1}.z-10{z-index:10}.overflow-hidden{overflow:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-auto{overflow-y:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.animate-spin{animation:1s linear infinite spin}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.isolate{isolation:isolate}.invert{--un-invert:invert(100%);filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,)}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal,) var(--un-slashed-zero,) var(--un-numeric-figure,) var(--un-numeric-spacing,) var(--un-numeric-fraction,)}.no-ruby{font-feature-settings:"ss01";line-height:1}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white{color:color-mix(in oklab,var(--colors-white) var(--un-text-opacity),transparent)}.text-amber{color:color-mix(in oklab,var(--colors-amber-DEFAULT) var(--un-text-opacity),transparent)}.text-neutral-500{color:color-mix(in oklab,var(--colors-neutral-500) var(--un-text-opacity),transparent)}.text-neutral-950{color:color-mix(in oklab,var(--colors-neutral-950) var(--un-text-opacity),transparent)}.bg-amber\:5{background-color:color-mix(in oklab,var(--colors-amber-DEFAULT) 5%,transparent)}.bg-white{background-color:color-mix(in oklab,var(--colors-white) var(--un-bg-opacity),transparent)}.dark .dark\:bg-neutral-950{background-color:color-mix(in oklab,var(--colors-neutral-950) var(--un-bg-opacity),transparent)}}@media (width>=40rem){.sm\:text-3xl{font-size:var(--text-3xl-fontSize);line-height:var(--un-leading,var(--text-3xl-lineHeight))}.sm\:text-\[72px\]{font-size:72px}.sm\:tracking-\[0\.12em\]{--un-tracking:.12em;letter-spacing:.12em}.sm\:px-2{padding-inline:calc(var(--spacing) * 2)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:border-r{border-right-width:1px}.sm\:border-b-0{border-bottom-width:0}.sm\:inline-flex{display:inline-flex}.sm\:gap-6{gap:calc(var(--spacing) * 6)}.sm\:grid-cols-\[1fr_2fr\]{grid-template-columns:1fr 2fr}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:inline{display:inline}}@media (width>=64rem){.lg\:py-24{padding-block:calc(var(--spacing) * 24)}.lg\:border-b{border-bottom-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-b-0{border-bottom-width:0}.lg\:border-t-0{border-top-width:0}.lg\:grid-cols-\[340px_1fr\]{grid-template-columns:340px 1fr}.lg\:grid-cols-\[5fr_4fr\]{grid-template-columns:5fr 4fr}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:top-14{top:calc(var(--spacing) * 14)}.lg\:sticky{position:sticky}.lg\:z-1{z-index:1}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-dcde585a]{display:grid}.mb-2[data-v-dcde585a]{margin-bottom:.5rem}.mb-4[data-v-dcde585a]{margin-bottom:1rem}.max-w-520px[data-v-dcde585a]{max-width:520px}.min-h-screen[data-v-dcde585a]{min-height:100vh}.w-full[data-v-dcde585a]{width:100%}.flex[data-v-dcde585a]{display:flex}.cursor-pointer[data-v-dcde585a]{cursor:pointer}.appearance-none[data-v-dcde585a]{appearance:none}.place-content-center[data-v-dcde585a]{place-content:center}.items-center[data-v-dcde585a]{align-items:center}.justify-center[data-v-dcde585a]{justify-content:center}.overflow-hidden[data-v-dcde585a]{overflow:hidden}.border-0[data-v-dcde585a]{border-width:0}.bg-transparent[data-v-dcde585a]{background-color:#0000}.bg-white[data-v-dcde585a]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.p-0[data-v-dcde585a]{padding:0}.px-2[data-v-dcde585a]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-dcde585a]{text-align:center}.text-\[56px\][data-v-dcde585a]{font-size:56px}.text-2xl[data-v-dcde585a]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-dcde585a]{font-size:.875rem;line-height:1.25rem}.text-neutral-500[data-v-dcde585a]{--un-text-opacity:1;color:rgb(115 115 115/var(--un-text-opacity))}.text-neutral-950[data-v-dcde585a]{--un-text-opacity:1;color:rgb(10 10 10/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-dcde585a]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.text-inherit[data-v-dcde585a]{color:inherit}.font-medium[data-v-dcde585a]{font-weight:500}.font-semibold[data-v-dcde585a]{font-weight:600}.leading-none[data-v-dcde585a]{line-height:1}.tracking-wide[data-v-dcde585a]{letter-spacing:.025em}.font-sans[data-v-dcde585a]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-dcde585a]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-dcde585a]{text-decoration-line:underline}.underline-offset-3[data-v-dcde585a]{text-underline-offset:3px}.antialiased[data-v-dcde585a]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-neutral-950[data-v-dcde585a]{--un-bg-opacity:1;background-color:rgb(10 10 10/var(--un-bg-opacity))}.dark\:text-white[data-v-dcde585a]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[72px\][data-v-dcde585a]{font-size:72px}.sm\:text-3xl[data-v-dcde585a]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-287a4e3d]{display:grid}.mb-2[data-v-287a4e3d]{margin-bottom:.5rem}.mb-4[data-v-287a4e3d]{margin-bottom:1rem}.max-w-520px[data-v-287a4e3d]{max-width:520px}.min-h-screen[data-v-287a4e3d]{min-height:100vh}.place-content-center[data-v-287a4e3d]{place-content:center}.overflow-hidden[data-v-287a4e3d]{overflow:hidden}.bg-white[data-v-287a4e3d]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-287a4e3d]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-287a4e3d]{text-align:center}.text-\[56px\][data-v-287a4e3d]{font-size:56px}.text-2xl[data-v-287a4e3d]{font-size:1.5rem;line-height:2rem}.text-neutral-500[data-v-287a4e3d]{--un-text-opacity:1;color:rgb(115 115 115/var(--un-text-opacity))}.text-neutral-950[data-v-287a4e3d]{--un-text-opacity:1;color:rgb(10 10 10/var(--un-text-opacity))}.font-medium[data-v-287a4e3d]{font-weight:500}.font-semibold[data-v-287a4e3d]{font-weight:600}.leading-none[data-v-287a4e3d]{line-height:1}.tracking-wide[data-v-287a4e3d]{letter-spacing:.025em}.font-sans[data-v-287a4e3d]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-287a4e3d]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-287a4e3d]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-neutral-950[data-v-287a4e3d]{--un-bg-opacity:1;background-color:rgb(10 10 10/var(--un-bg-opacity))}.dark\:text-white[data-v-287a4e3d]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[72px\][data-v-287a4e3d]{font-size:72px}.sm\:text-3xl[data-v-287a4e3d]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,...t){return typeof e==`function`?e(...t):e}var t=Error.captureStackTrace,n=class e extends Error{name;code;docs;fix;sources;data;get why(){return this.message}constructor(n,r=e){super(n.why,{cause:n.cause}),this.code=this.name=n.code,this.fix=n.fix,this.docs=n.docs,this.sources=n.sources,this.data=n.data,t?.(this,r)}toJSON(){return{name:this.name,why:this.why,fix:this.fix,docs:this.docs,sources:this.sources,cause:this.cause,data:this.data,stack:this.stack}}};function r(e,t){return typeof e==`string`?`${e}/${t.toLowerCase()}`:e?.(t)}function i(t){let i=t.reporters??[],a={},{docsBase:o}=t;for(let s of Object.keys(t.codes)){let c=t.codes[s],l=c.docs===!1?void 0:c.docs||r(o,s),u=(t={},r={})=>{let a=new n({code:s,why:e(c.why,t),fix:e(c.fix,t),docs:l,cause:t.cause,sources:t.sources,data:e(c.data,t)},u);for(let e of i)e(a,r);return a};a[s]=u}return a}function a(e={}){let{docsBase:t,reporters:i=[]}=e;return new Proxy({},{get(e,a){if(typeof a!=`string`)return;let o=(e={},s={})=>{let c=r(t,a),l=new n({code:a,why:c??``,docs:c,cause:e.cause,sources:e.sources},o);for(let e of i)e(l,s);return l};return o}})}export{a as n,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/IB1Ryazr.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.z8A6-8bZ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/IB1Ryazr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkUAspOr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D4ezFGbh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Sgj54NgJ.js"><script type="module" src="/_nuxt/IB1Ryazr.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/OoUlbf8J.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DBjETv8r.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Bo7DzF0m.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.DqUWOYf4.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BI2Q9Enf.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BYTKxx4O.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8uEzYfq.js"><meta name="description" content="A Japanese font that shows furigana by itself."><meta property="og:type" content="website"><meta property="og:url" content="https://furifont.antfu.me"><meta property="og:title" content="Furifont: furigana built into the font"><meta property="og:description" content="A Japanese font that shows furigana by itself."><meta property="og:image" content="https://furifont.antfu.me/og.png"><meta property="og:image:width" content="2400"><meta property="og:image:height" content="1260"><meta property="og:image:alt" content="Furifont: furigana built into the font"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Furifont: furigana built into the font"><meta name="twitter:description" content="A Japanese font that shows furigana by itself."><meta name="twitter:image" content="https://furifont.antfu.me/og.png"><link rel="icon" type="image/svg+xml" href="favicon.svg"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{devCustomizeBase:"/__furifont/"},app:{baseURL:"/",buildId:"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792055149747,false]</script></body></html>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="200" height="200" fill="black"/>
|
|
3
|
+
<path d="M100.475 116.282C101.89 115.363 103.269 114.408 104.613 113.417C105.957 112.356 107.018 111.508 107.796 110.871C106.31 109.598 104.294 108.218 101.748 106.733C99.2016 105.248 96.4784 103.762 93.5783 102.277C90.6782 100.791 87.8842 99.5182 85.1963 98.4572L90.0769 92.3034C92.7648 93.4351 95.7357 94.8144 98.9894 96.4413C102.243 97.9975 105.391 99.6243 108.432 101.322C111.545 103.02 114.162 104.646 116.284 106.203L118.194 111.72C117.628 112.215 116.814 112.887 115.753 113.736C114.763 114.514 113.667 115.363 112.464 116.282C111.332 117.131 110.165 118.015 108.963 118.935C107.831 119.783 106.77 120.562 105.78 121.269L100.475 116.282ZM79.9974 166.998C82.6853 167.706 85.3731 168.272 88.061 168.696C90.7489 169.12 93.7551 169.333 97.0796 169.333C98.7065 169.333 100.333 169.085 101.96 168.59C103.658 168.095 105.037 167.211 106.098 165.937C107.23 164.593 107.796 162.79 107.796 160.526C107.796 158.687 107.371 156.777 106.523 154.797C105.674 152.745 104.577 150.694 103.233 148.643C101.89 146.592 100.404 144.611 98.7772 142.701C97.2211 140.721 95.7003 138.917 94.2149 137.29C93.0831 136.017 91.7746 134.673 90.2891 133.258C88.8037 131.844 87.283 130.535 85.7268 129.333L91.9868 123.815C93.3307 125.159 94.6393 126.539 95.9125 127.953C97.2564 129.297 98.565 130.677 99.8382 132.091C103.163 135.486 106.098 138.846 108.645 142.171C111.191 145.425 113.172 148.643 114.586 151.826C116.001 155.009 116.708 158.227 116.708 161.481C116.708 164.664 116.107 167.317 114.905 169.439C113.773 171.561 112.287 173.188 110.448 174.319C108.609 175.451 106.629 176.229 104.507 176.654C102.385 177.149 100.369 177.396 98.4589 177.396C95.1344 177.396 92.0221 177.219 89.122 176.866C86.2219 176.583 83.5694 176.194 81.1645 175.699L79.9974 166.998ZM141.218 170.924C140.439 168.378 139.414 165.619 138.141 162.648C136.938 159.607 135.523 156.565 133.897 153.524C132.34 150.411 130.678 147.476 128.91 144.717C127.142 141.888 125.338 139.448 123.499 137.396L130.395 133.471C132.234 135.663 134.073 138.174 135.913 141.004C137.752 143.762 139.52 146.698 141.218 149.81C142.915 152.852 144.436 155.822 145.78 158.723C147.124 161.623 148.22 164.24 149.069 166.574L141.218 170.924ZM83.4987 150.234C81.5181 152.356 79.0778 154.691 76.1777 157.237C73.2776 159.784 70.13 162.33 66.7348 164.876C63.3395 167.423 59.9089 169.722 56.443 171.773L51.4562 164.664C53.649 163.462 55.9832 162.047 58.4589 160.42C61.0053 158.723 63.5164 156.919 65.9921 155.009C68.5385 153.099 70.8727 151.189 72.9947 149.28C75.1875 147.299 77.0619 145.495 78.6181 143.868L83.4987 150.234Z" fill="white"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// ==UserScript==
|
|
2
|
+
// @name Furifont
|
|
3
|
+
// @namespace https://furifont.antfu.me
|
|
4
|
+
// @version 0.2.0
|
|
5
|
+
// @description Furigana on any page: Furifont turns on by itself on Japanese pages, and the menu switches family, turns it off, or turns okurigana readings (来る, 来ない) off.
|
|
6
|
+
// @homepageURL https://furifont.antfu.me
|
|
7
|
+
// @downloadURL https://furifont.antfu.me/furifont.user.js
|
|
8
|
+
// @match *://*/*
|
|
9
|
+
// @run-at document-idle
|
|
10
|
+
// @noframes
|
|
11
|
+
// @grant GM_getValue
|
|
12
|
+
// @grant GM_setValue
|
|
13
|
+
// @grant GM_registerMenuCommand
|
|
14
|
+
// @grant GM_xmlhttpRequest
|
|
15
|
+
// @connect furifont.antfu.me
|
|
16
|
+
// ==/UserScript==
|
|
17
|
+
|
|
18
|
+
(() => {
|
|
19
|
+
var Furifont=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let t={fonts:[{family:`Furifont Sans`,base:`Source Han Sans JP`,face:`sans`,rubyScript:`hiragana`},{family:`Furifont Sans Romaji`,base:`Source Han Sans JP`,face:`sans`,rubyScript:`hepburn`},{family:`Furifont Serif`,base:`Source Han Serif JP`,face:`serif`,rubyScript:`hiragana`},{family:`Furifont Serif Romaji`,base:`Source Han Serif JP`,face:`serif`,rubyScript:`hepburn`}],weights:[{style:`Regular`,weight:400}],variable:{style:`VF`,weights:[250,900]},options:{}},n={base:12290,selector:65024},r=`U+2E80-2FDF,U+3000-30FF,U+3190-319F,U+31F0-31FF,U+3400-4DBF,U+4E00-9FFF,U+F900-FAFF,U+FE00-FE0F,U+FF00-FFEF,U+20000-3FFFF,U+E0100-E01EF`,i=/[\p{sc=Han}\p{sc=Hiragana}\p{sc=Katakana}]/u;function a(e){return(e.match(/\s*(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|[^,]+)/g)??[]).map(e=>e.trim()).filter(Boolean)}function o(e){return e.replace(/^(["'])(.*)\1$/,`$2`)}let s=/mono|courier|consol|menlo|monaco|等幅/i;function c(e){let t=e.map(o);return t.some(e=>e===`monospace`||e===`ui-monospace`)||s.test(t[0]??``)}async function l({family:e,url:n,fetchFont:i}){let a=(t,n=`400`)=>new FontFace(e,t,{unicodeRange:r,weight:n}).load().catch(()=>void 0),o=await Promise.all(t.weights.map(({style:t,weight:n})=>a(`local("${e} ${t}")${n===400?`,local("${e}")`:``}`,String(n)))),s=t.variable.weights.join(` `),c=o.some(Boolean)?o:[await(i?i(n).then(e=>a(e,s),()=>void 0):a(`url("${n}")`,s))];for(let e of c)e&&document.fonts.add(e);return c.some(Boolean)}function u(e){let t=/* @__PURE__ */ new Map,n=/(?<!\p{sc=Han})\p{sc=Han}+(?=\p{sc=Hiragana})/gu,r=n=>{if(!t.has(n)){let r=/* @__PURE__ */ new Map;for(let[t,i]of Object.entries(e.pairs[n]??{}))for(let e of i)r.set(e,t||null);t.set(n,r.size?{reading:r,longest:Math.max(...[...r.keys()].map(e=>e.length))}:void 0)}return t.get(n)},i=(t,n)=>{let r=t.length>[...t][0].length,i=(r?e.words[t]?.map(e=>[...e.matchAll(/\[([^\]]*)\]/g)].map(e=>e[1]).join(``)):e.readings[t])?.indexOf(n)??-1;return i>=+!!r&&i<15&&e.lone[t]!==n?i+1:0};return{find:e=>{let t=[];for(let{0:a,index:o}of e.matchAll(n)){let n=r(a),s=e.slice(o+a.length,o+a.length+(n?.longest??0)),c;for(let e=s.length;e>0&&c===void 0;e--)c=n?.reading.get(s.slice(0,e));let l=c?i(a,c):0;c&&l&&t.push({at:o,length:a.length,reading:c,salt:l})}return t},saltOf:i}}let d=/* @__PURE__ */ new Map;function f(e,t){let n=d.get(e);return n||(n=(t?t(e):fetch(e).then(t=>t.ok?t.text():Promise.reject(Error(e)))).then(JSON.parse),n.catch(()=>d.delete(e)),d.set(e,n)),n}async function p({readings:e,pairs:t,fetchText:n}){try{let[r,i]=await Promise.all([f(e,n),f(t,n)]);return r.salt===!0?u({pairs:i,readings:r.kanji,words:r.words,lone:r.lone}):void 0}catch{return}}function m(e,t){return{href:new URL(`/#downloads`,e).href,text:t.download}}function h(e,t,n){document.querySelector(`furifont-toast`)?.remove();let r=document.createElement(`furifont-toast`),i=r.attachShadow({mode:`open`}),a=new CSSStyleSheet;a.replaceSync(`:host{all:initial}div{position:fixed;z-index:2147483647;right:16px;bottom:16px;display:flex;gap:16px;align-items:start;max-width:360px;padding:12px 16px;border:1px solid #fafafa2b;background:#0a0a0a;color:#fafafa;font:14px/1.5 system-ui,sans-serif}p{margin:0}a{color:inherit;margin-right:12px}button{padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}`),i.adoptedStyleSheets=[a];let o=document.createElement(`p`);o.append(e,` `,...t.map(({href:e,text:t})=>Object.assign(document.createElement(`a`),{href:e,target:`_blank`,rel:`noopener`,textContent:t})));let s=Object.assign(document.createElement(`button`),{ariaLabel:n,textContent:`×`,onclick:()=>r.remove()}),c=Object.assign(document.createElement(`div`),{role:`alert`});c.append(o,s),i.append(c),document.body.append(r),setTimeout(()=>r.remove(),1e4)}function g(e){let[t=0,n=0,r=0]=e.split(`.`).map(Number);return t*1e3+n*100+r}function _(e){let t=document.createElement(`canvas`).getContext(`2d`);return t.font=`1000px "${e}"`,Math.round(t.measureText(String.fromCodePoint(n.base,n.selector)).width)-2e3}async function v({family:e,url:t,toast:n},r){let i=new URL(`/version.json`,t).href,a;try{a=g(JSON.parse(await(r.fetchText?r.fetchText(i):fetch(i).then(e=>e.text()))).version)}catch{return}let o=[...g(r.version)<a?[r]:[],..._(e)<a?[m(t,n)]:[]];o.length&&h(n.outdated,o,n.close)}function y(e){let t=[];for(let n of e.filter(e=>e.isConnected)){let e=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(let n=e.currentNode;n;n=e.nextNode())n.nodeType===Node.TEXT_NODE&&n.parentElement&&t.push(n)}return t}function b(e){let t=new Set(y(e).filter(e=>i.test(e.nodeValue??``)).map(e=>e.parentElement));for(let n of e){if(n.nodeType!==Node.ELEMENT_NODE)continue;let e=n;e.matches(`input,textarea`)&&t.add(e);for(let n of e.querySelectorAll(`input,textarea`))t.add(n)}return t}function x(e){let t=new CSSStyleSheet,n=[],r,i=0,s=()=>{for(let e of document.querySelectorAll(`[data-furifont-reading]`)){let t=r?r.saltOf(e.textContent??``,e.dataset.furifontReading):0;t?e.dataset.furifontSalt=String(t):delete e.dataset.furifontSalt}},l=e=>{if(!r)return;let t=y(e).filter(e=>/\p{sc=Han}\p{sc=Hiragana}/u.test(e.nodeValue??``)&&!e.parentElement.closest(`script,style,textarea,noscript,[contenteditable]:not([contenteditable=false]),[data-furifont-reading]`));for(let e of t)for(let{at:t,length:n,reading:i,salt:a}of r.find(e.nodeValue??``).reverse()){let r=t?e.splitText(t):e;r.length>n&&r.splitText(n);let o=document.createElement(`span`);o.dataset.furifontReading=i,o.dataset.furifontSalt=String(a),r.replaceWith(o),o.append(r)}},u={dispose:()=>{},sheet:t,family:e,restyle:()=>{let e=Array.from({length:15},(e,t)=>`[data-furifont-salt="${t+1}"]{font-feature-settings:"salt" ${t+1}!important}`).join(``),r=n.map((e,t)=>`[data-furifont="${t}"]{font-family:"${u.family}",${e}!important}`).join(``);t.replaceSync(`${r}[data-furifont-tight]{line-height:normal!important}${e}`)},okurigana:e=>{let n=++i;r=void 0,s(),e&&!t.disabled&&p(e).then(e=>{n===i&&e&&(r=e,s(),l([document.body]))})}},d=e=>{let t=[...b(e)].filter(e=>!e.hasAttribute(`data-furifont`)).map(e=>{let{fontFamily:t,lineHeight:n,fontSize:r}=getComputedStyle(e),i=a(t);return o(i[0]??``)===u.family&&i.shift(),{element:e,stack:i,tight:Number.parseFloat(n)<1.6*Number.parseFloat(r)}}).filter(({stack:e})=>e.length&&!c(e)),r=n.length;for(let{element:e,stack:r,tight:i}of t){let t=r.join(`,`),a=n.includes(t)?n.indexOf(t):n.push(t)-1;e.setAttribute(`data-furifont`,String(a)),i&&e.setAttribute(`data-furifont-tight`,``)}n.length>r&&u.restyle()},f=new MutationObserver(e=>{let t=e.flatMap(e=>e.type===`characterData`?[e.target]:[...e.addedNodes]);d(t),l(t)});return u.dispose=()=>{f.disconnect(),i++,r=void 0,document.adoptedStyleSheets=document.adoptedStyleSheets.filter(e=>e!==t);for(let e of document.querySelectorAll(`[data-furifont],[data-furifont-tight]`))e.removeAttribute(`data-furifont`),e.removeAttribute(`data-furifont-tight`);for(let e of document.querySelectorAll(`[data-furifont-reading]`))e.replaceWith(...e.childNodes);window.furifont===u&&delete window.furifont},window.furifont=u,document.adoptedStyleSheets=[...document.adoptedStyleSheets,t],d([document.body]),f.observe(document.body,{childList:!0,characterData:!0,subtree:!0}),u}async function S(e){let{family:t,url:n,toast:r,okurigana:i,update:a}=e,o=window.furifont;o?.family===t?(o.sheet.disabled=!o.sheet.disabled,o.sheet.disabled||o.okurigana(i)):(o??=x(t),o.family=t,o.restyle(),o.sheet.disabled=!1,await l(e)?(o.okurigana(i),a&&await v(e,a)):(o.sheet.disabled=!0,o.family=``,h(r.message,[m(n,r)],r.close)))}return e.JAPANESE=i,e.UNICODE_RANGE=r,e.createOkuriganaReader=u,e.isMonospace=c,e.loadFurifont=l,e.loadOkuriganaReader=p,e.parseFontStack=a,e.showToast=h,e.toggleFurifont=S,e})({});
|
|
20
|
+
;(function start(manager, toggle, fonts, pairs, script, toasts, menus, detect) {
|
|
21
|
+
var _a;
|
|
22
|
+
const locale = detect(navigator.languages);
|
|
23
|
+
const toast = toasts[locale];
|
|
24
|
+
const menu = menus[locale];
|
|
25
|
+
const fetchBytes = (url, responseType) => new Promise((resolve, reject) => manager.xmlHttpRequest({ url, responseType, onload: (r) => resolve(r.response), onerror: reject }));
|
|
26
|
+
const fetchFont = (url) => fetchBytes(url, "arraybuffer");
|
|
27
|
+
const fetchText = (url) => fetchBytes(url, "text");
|
|
28
|
+
const update = () => {
|
|
29
|
+
if (Date.now() - Number(manager.getValue("checked", "0")) < 864e5)
|
|
30
|
+
return void 0;
|
|
31
|
+
manager.setValue("checked", String(Date.now()));
|
|
32
|
+
return { ...script, text: toast.userscript, fetchText };
|
|
33
|
+
};
|
|
34
|
+
let okurigana = manager.getValue("okurigana", "on") !== "off";
|
|
35
|
+
const options = ({ family, url, readings }) => ({ family, url, toast, fetchFont, okurigana: okurigana ? { readings, pairs, fetchText } : void 0 });
|
|
36
|
+
const saved = (_a = fonts.find((f) => f.family === manager.getValue("family", ""))) != null ? _a : fonts[0];
|
|
37
|
+
for (const font of fonts) {
|
|
38
|
+
manager.registerMenuCommand(font.family, () => {
|
|
39
|
+
manager.setValue("family", font.family);
|
|
40
|
+
toggle({ ...options(font), update: update() });
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const registerOkurigana = () => manager.registerMenuCommand(okurigana ? menu.okuriganaOn : menu.okuriganaOff, () => {
|
|
44
|
+
var _a2;
|
|
45
|
+
okurigana = !okurigana;
|
|
46
|
+
manager.setValue("okurigana", okurigana ? "on" : "off");
|
|
47
|
+
const font = fonts.find((f) => {
|
|
48
|
+
var _a3;
|
|
49
|
+
return f.family === ((_a3 = window.furifont) == null ? void 0 : _a3.family);
|
|
50
|
+
});
|
|
51
|
+
if (font)
|
|
52
|
+
(_a2 = window.furifont) == null ? void 0 : _a2.okurigana(options(font).okurigana);
|
|
53
|
+
registerOkurigana();
|
|
54
|
+
}, { id: "okurigana", autoClose: false });
|
|
55
|
+
registerOkurigana();
|
|
56
|
+
if (/^ja(?:-|$)/i.test(document.documentElement.lang))
|
|
57
|
+
toggle({ ...options(saved), update: update() });
|
|
58
|
+
})({ getValue: GM_getValue, setValue: GM_setValue, registerMenuCommand: GM_registerMenuCommand, xmlHttpRequest: GM_xmlhttpRequest }, Furifont.toggleFurifont, [{"family":"Furifont Sans","url":"https://furifont.antfu.me/fonts/FurifontSansVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSansVF.ivs.json?v=0.2.0"},{"family":"Furifont Sans Romaji","url":"https://furifont.antfu.me/fonts/FurifontSansRomajiVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSansRomajiVF.ivs.json?v=0.2.0"},{"family":"Furifont Serif","url":"https://furifont.antfu.me/fonts/FurifontSerifVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSerifVF.ivs.json?v=0.2.0"},{"family":"Furifont Serif Romaji","url":"https://furifont.antfu.me/fonts/FurifontSerifRomajiVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSerifRomajiVF.ivs.json?v=0.2.0"}], "https://furifont.antfu.me/okurigana.json", {"version":"0.2.0","href":"https://furifont.antfu.me/furifont.user.js"}, {"en":{"message":"Furifont could not load its font on this page. Some sites, such as X and GitHub, do not let fonts load from other sites. On those sites, you must install Furifont on your computer.","download":"Download the fonts","close":"Close","outdated":"A newer version of Furifont is out.","userscript":"Update the userscript","bookmarklet":"Get the new bookmarklet"},"ja":{"message":"このページでは Furifont のフォントを読み込めませんでした。X や GitHub のように、他のサイトのフォントを読み込めないサイトがあります。そのようなサイトでは、パソコンに Furifont をインストールする必要があります。","download":"フォントをダウンロード","close":"閉じる","outdated":"Furifont の新しいバージョンがあります。","userscript":"ユーザースクリプトを更新","bookmarklet":"新しいブックマークレットを入手"},"zh-Hans":{"message":"Furifont 无法在此页面加载字体。有些网站(如 X 和 GitHub)不允许加载其他网站的字体。在这些网站上,需要在电脑上安装 Furifont。","download":"下载字体","close":"关闭","outdated":"Furifont 有新版本了。","userscript":"更新用户脚本","bookmarklet":"获取新的书签小工具"},"zh-Hant":{"message":"Furifont 無法在此頁面載入字型。有些網站(如 X 和 GitHub)不允許載入其他網站的字型。在這些網站上,需要在電腦上安裝 Furifont。","download":"下載字型","close":"關閉","outdated":"Furifont 有新版本了。","userscript":"更新使用者腳本","bookmarklet":"取得新的書籤小工具"}}, {"en":{"okuriganaOn":"Okurigana readings: on","okuriganaOff":"Okurigana readings: off"},"ja":{"okuriganaOn":"送り仮名の読み:オン","okuriganaOff":"送り仮名の読み:オフ"},"zh-Hans":{"okuriganaOn":"送假名读音:开","okuriganaOff":"送假名读音:关"},"zh-Hant":{"okuriganaOn":"送假名讀音:開","okuriganaOff":"送假名讀音:關"}}, function detectLocale(languages) {
|
|
59
|
+
for (const tag of languages.map((l) => l.toLowerCase())) {
|
|
60
|
+
if (tag.startsWith("zh"))
|
|
61
|
+
return /-(?:tw|hk|mo|hant)\b/.test(tag) ? "zh-Hant" : "zh-Hans";
|
|
62
|
+
if (tag.startsWith("ja"))
|
|
63
|
+
return "ja";
|
|
64
|
+
if (tag.startsWith("en"))
|
|
65
|
+
return "en";
|
|
66
|
+
}
|
|
67
|
+
return "en";
|
|
68
|
+
})
|
|
69
|
+
})()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/IB1Ryazr.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.z8A6-8bZ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/IB1Ryazr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkUAspOr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D4ezFGbh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Sgj54NgJ.js"><script type="module" src="/_nuxt/IB1Ryazr.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/OoUlbf8J.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DBjETv8r.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Bo7DzF0m.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.DqUWOYf4.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BI2Q9Enf.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BYTKxx4O.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8uEzYfq.js"><meta name="description" content="A Japanese font that shows furigana by itself."><meta property="og:type" content="website"><meta property="og:url" content="https://furifont.antfu.me"><meta property="og:title" content="Furifont: furigana built into the font"><meta property="og:description" content="A Japanese font that shows furigana by itself."><meta property="og:image" content="https://furifont.antfu.me/og.png"><meta property="og:image:width" content="2400"><meta property="og:image:height" content="1260"><meta property="og:image:alt" content="Furifont: furigana built into the font"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Furifont: furigana built into the font"><meta name="twitter:description" content="A Japanese font that shows furigana by itself."><meta name="twitter:image" content="https://furifont.antfu.me/og.png"><link rel="icon" type="image/svg+xml" href="favicon.svg"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{devCustomizeBase:"/__furifont/"},app:{baseURL:"/",buildId:"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792055149749,false]</script></body></html>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="200" height="200" fill="black"/>
|
|
3
|
+
<path d="M100.475 116.282C101.89 115.363 103.269 114.408 104.613 113.417C105.957 112.356 107.018 111.508 107.796 110.871C106.31 109.598 104.294 108.218 101.748 106.733C99.2016 105.248 96.4784 103.762 93.5783 102.277C90.6782 100.791 87.8842 99.5182 85.1963 98.4572L90.0769 92.3034C92.7648 93.4351 95.7357 94.8144 98.9894 96.4413C102.243 97.9975 105.391 99.6243 108.432 101.322C111.545 103.02 114.162 104.646 116.284 106.203L118.194 111.72C117.628 112.215 116.814 112.887 115.753 113.736C114.763 114.514 113.667 115.363 112.464 116.282C111.332 117.131 110.165 118.015 108.963 118.935C107.831 119.783 106.77 120.562 105.78 121.269L100.475 116.282ZM79.9974 166.998C82.6853 167.706 85.3731 168.272 88.061 168.696C90.7489 169.12 93.7551 169.333 97.0796 169.333C98.7065 169.333 100.333 169.085 101.96 168.59C103.658 168.095 105.037 167.211 106.098 165.937C107.23 164.593 107.796 162.79 107.796 160.526C107.796 158.687 107.371 156.777 106.523 154.797C105.674 152.745 104.577 150.694 103.233 148.643C101.89 146.592 100.404 144.611 98.7772 142.701C97.2211 140.721 95.7003 138.917 94.2149 137.29C93.0831 136.017 91.7746 134.673 90.2891 133.258C88.8037 131.844 87.283 130.535 85.7268 129.333L91.9868 123.815C93.3307 125.159 94.6393 126.539 95.9125 127.953C97.2564 129.297 98.565 130.677 99.8382 132.091C103.163 135.486 106.098 138.846 108.645 142.171C111.191 145.425 113.172 148.643 114.586 151.826C116.001 155.009 116.708 158.227 116.708 161.481C116.708 164.664 116.107 167.317 114.905 169.439C113.773 171.561 112.287 173.188 110.448 174.319C108.609 175.451 106.629 176.229 104.507 176.654C102.385 177.149 100.369 177.396 98.4589 177.396C95.1344 177.396 92.0221 177.219 89.122 176.866C86.2219 176.583 83.5694 176.194 81.1645 175.699L79.9974 166.998ZM141.218 170.924C140.439 168.378 139.414 165.619 138.141 162.648C136.938 159.607 135.523 156.565 133.897 153.524C132.34 150.411 130.678 147.476 128.91 144.717C127.142 141.888 125.338 139.448 123.499 137.396L130.395 133.471C132.234 135.663 134.073 138.174 135.913 141.004C137.752 143.762 139.52 146.698 141.218 149.81C142.915 152.852 144.436 155.822 145.78 158.723C147.124 161.623 148.22 164.24 149.069 166.574L141.218 170.924ZM83.4987 150.234C81.5181 152.356 79.0778 154.691 76.1777 157.237C73.2776 159.784 70.13 162.33 66.7348 164.876C63.3395 167.423 59.9089 169.722 56.443 171.773L51.4562 164.664C53.649 163.462 55.9832 162.047 58.4589 160.42C61.0053 158.723 63.5164 156.919 65.9921 155.009C68.5385 153.099 70.8727 151.189 72.9947 149.28C75.1875 147.299 77.0619 145.495 78.6181 143.868L83.4987 150.234Z" fill="white"/>
|
|
4
|
+
</svg>
|
|
Binary file
|