furifont 0.0.0 → 0.0.1

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.
Files changed (39) hide show
  1. package/package.json +4 -4
  2. package/dist/cli.d.mts +0 -1
  3. package/dist/cli.mjs +0 -53
  4. package/dist/client/200.html +0 -1
  5. package/dist/client/404.html +0 -1
  6. package/dist/client/_nuxt/BCu5iiD7.js +0 -1
  7. package/dist/client/_nuxt/BOBgrQaV.js +0 -1
  8. package/dist/client/_nuxt/Bewt6owv.js +0 -27
  9. package/dist/client/_nuxt/Bfqhfmpc.js +0 -1
  10. package/dist/client/_nuxt/C1JLNGZo.js +0 -3
  11. package/dist/client/_nuxt/C8zfEgX9.js +0 -1
  12. package/dist/client/_nuxt/CL8LThiN.js +0 -1
  13. package/dist/client/_nuxt/CVJR3s5f.js +0 -1
  14. package/dist/client/_nuxt/D3cEssU1.js +0 -2
  15. package/dist/client/_nuxt/DUXhFGPZ.js +0 -3
  16. package/dist/client/_nuxt/DgMdSLZo.js +0 -1
  17. package/dist/client/_nuxt/FsEox2AS.js +0 -2
  18. package/dist/client/_nuxt/KJcTz4n2.js +0 -3
  19. package/dist/client/_nuxt/Qd5bher9.js +0 -5
  20. package/dist/client/_nuxt/TYlOgzbv.js +0 -1
  21. package/dist/client/_nuxt/builds/latest.json +0 -1
  22. package/dist/client/_nuxt/builds/meta/db23ca35-60ad-418c-a03a-6e9c9f356033.json +0 -1
  23. package/dist/client/_nuxt/entry.DvQk758Q.css +0 -1
  24. package/dist/client/_nuxt/error-404.8EQDbnY7.css +0 -1
  25. package/dist/client/_nuxt/error-500.D5h8Jj9a.css +0 -1
  26. package/dist/client/_nuxt/y07Wd5I9.js +0 -1
  27. package/dist/client/customize/index.html +0 -1
  28. package/dist/client/favicon.svg +0 -4
  29. package/dist/client/furifont.user.js +0 -98
  30. package/dist/client/index.html +0 -1
  31. package/dist/client/logo.svg +0 -4
  32. package/dist/client/reference/index.html +0 -1
  33. package/dist/config-Ds9VeO_z.mjs +0 -150
  34. package/dist/devframe.d.mts +0 -5
  35. package/dist/devframe.mjs +0 -24
  36. package/dist/index.d.mts +0 -147
  37. package/dist/index.mjs +0 -3
  38. package/dist/package-BBoYy61N.mjs +0 -7
  39. package/dist/studio-DpMyFQSO.mjs +0 -136
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "furifont",
3
3
  "type": "module",
4
- "version": "0.0.0",
4
+ "version": "0.0.1",
5
5
  "description": "Build Japanese fonts that show furigana by themselves, from the command line or a local studio",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -36,9 +36,9 @@
36
36
  "dist"
37
37
  ],
38
38
  "dependencies": {
39
- "@furifont/compiler": "0.0.0",
40
- "@furifont/core": "0.0.0",
41
- "@furifont/dictionary": "0.0.0",
39
+ "@furifont/compiler": "0.0.1",
40
+ "@furifont/core": "0.0.1",
41
+ "@furifont/dictionary": "0.0.1",
42
42
  "cac": "^7.1.0",
43
43
  "devframe": "^1.2.4",
44
44
  "valibot": "^1.5.0"
package/dist/cli.d.mts DELETED
@@ -1 +0,0 @@
1
- export {}
package/dist/cli.mjs DELETED
@@ -1,53 +0,0 @@
1
- import { i as buildFont, n as FurifontConfigSchema, r as loadConfig, t as CONFIG_FILE } from "./config-Ds9VeO_z.mjs";
2
- import { i as version } from "./package-BBoYy61N.mjs";
3
- import { relative } from "node:path";
4
- import process from "node:process";
5
- import { RUBY_SCRIPTS } from "@furifont/core";
6
- import * as v from "valibot";
7
- import { cac } from "cac";
8
- //#region src/cli.ts
9
- const STUDIO_PAGE = "studio";
10
- const cli = cac("furifont");
11
- cli.command("build", "Build a font into --out").option("--config <file>", `Config file`, { default: CONFIG_FILE }).option("--base <font>", "A font to download, such as \"Source Han Serif JP Bold\", or a font file").option("--family <name>", "Font family name").option("--script <script>", `Ruby script: ${RUBY_SCRIPTS.join(", ")}`).option("--nf <bucket>", "Annotate words up to this newspaper frequency bucket (1-48)").option("--out <dir>", "Output directory", { default: "fonts" }).action(async (flags) => {
12
- const cwd = process.cwd();
13
- const overrides = {
14
- ...flags.base && { base: flags.base },
15
- ...flags.family && { family: flags.family },
16
- ...flags.script && { rubyScript: v.parse(v.picklist(RUBY_SCRIPTS), flags.script) },
17
- ...flags.nf && { nfMax: Number(flags.nf) }
18
- };
19
- const config = v.parse(FurifontConfigSchema, {
20
- ...await loadConfig(cwd, flags.config),
21
- ...overrides
22
- });
23
- const { files, report } = await buildFont(config, {
24
- cwd,
25
- outDir: flags.out,
26
- onProgress: ({ step, done, total }) => process.stderr.write(`\r${step}${total ? ` ${done}/${total}` : ""}`.padEnd(24))
27
- });
28
- process.stderr.write("\r".padEnd(24));
29
- const { stats } = report;
30
- console.log(`\r${stats.patterns} words, ${stats.isolated} lone kanji, ${stats.glyphs} ruby glyphs`);
31
- for (const file of files) console.log(` ${relative(cwd, file.path)} ${(file.bytes / 1024 / 1024).toFixed(1)} MB`);
32
- });
33
- cli.command("dev", "Open the studio to customize, preview and build fonts").option("--port <port>", "Port to listen on").option("--host <host>", "Host to bind, 0.0.0.0 to reach it from another machine", { default: "localhost" }).option("--open", "Open the studio in a browser", { default: true }).option("--auth", "Ask for the one-time code printed here; --no-auth only on a machine you trust", { default: true }).action(async (flags) => {
34
- const [{ createDevServer }, { default: devframe }] = await Promise.all([import("devframe/adapters/dev"), import("./devframe.mjs")]);
35
- await createDevServer(devframe, {
36
- host: flags.host,
37
- port: flags.port ? Number(flags.port) : void 0,
38
- openBrowser: flags.open && STUDIO_PAGE,
39
- auth: flags.auth ? void 0 : false,
40
- allowedOrigins: flags.host === "localhost" ? void 0 : false,
41
- onReady: ({ origin }) => console.log(`Furifont studio: ${origin}/${STUDIO_PAGE}`)
42
- });
43
- });
44
- cli.help();
45
- cli.version(version);
46
- cli.parse(process.argv, { run: false });
47
- await cli.runMatchedCommand()?.catch((error) => {
48
- console.error(error.message);
49
- process.exitCode = 1;
50
- });
51
- if (!cli.matchedCommand && !cli.options.help && !cli.options.version) cli.outputHelp();
52
- //#endregion
53
- export {};
@@ -1 +0,0 @@
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/Qd5bher9.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DvQk758Q.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Qd5bher9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/KJcTz4n2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3cEssU1.js"><script type="module" src="/_nuxt/Qd5bher9.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/DgMdSLZo.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CL8LThiN.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BOBgrQaV.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.8EQDbnY7.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/C8zfEgX9.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.D5h8Jj9a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Bfqhfmpc.js"><meta name="description" content="A Japanese font that shows furigana by itself. The text does not change."><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:"db23ca35-60ad-418c-a03a-6e9c9f356033",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1791959524130,false]</script></body></html>
@@ -1 +0,0 @@
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/Qd5bher9.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DvQk758Q.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Qd5bher9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/KJcTz4n2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3cEssU1.js"><script type="module" src="/_nuxt/Qd5bher9.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/DgMdSLZo.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CL8LThiN.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BOBgrQaV.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.8EQDbnY7.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/C8zfEgX9.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.D5h8Jj9a.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Bfqhfmpc.js"><meta name="description" content="A Japanese font that shows furigana by itself. The text does not change."><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:"db23ca35-60ad-418c-a03a-6e9c9f356033",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1791959524131,false]</script></body></html>
@@ -1 +0,0 @@
1
- import{$ as e,A as t,C as n,E as r,Ht as i,N as a,S as o,Y as s,Z as c,_ as l,at as u,bt as d,gt as f,j as p,mt as m,ot as h,q as g,s as _,t as v,ut as y,w as b}from"./KJcTz4n2.js";import{o as x}from"./D3cEssU1.js";import{i as S}from"#entry";import{n as C,p as w,t as T}from"./CVJR3s5f.js";var E=917985;function D(e,t){let[n=``,...r]=[...e];return n+String.fromCodePoint(E+t)+r.join(``)}function O(e){return`VS${226+e}`}var k={class:`border-b border-base`},A={class:`px-6 pt-4 font-mono text-xs color-muted`},j={class:`flex flex-wrap`},M=[`title`,`onClick`],N=Object.assign(a({__name:`ReferenceEntry`,props:{text:{},readings:{},wordDefault:{type:Boolean,default:!1}},setup(e){let{copied:t,copy:a}=w();return(o,u)=>{let f=C;return s(),r(`article`,k,[n(`h3`,A,i(e.text),1),n(`ul`,j,[(s(!0),r(l,null,c(e.readings,(c,l)=>(s(),r(`li`,{key:c,class:`flex flex-col items-start gap-1 px-6 py-3`},[p(f,{text:(`withReading`in o?o.withReading:d(D))(e.text,l),size:30},null,8,[`text`]),n(`button`,{type:`button`,class:`focus-ring font-mono text-[11px] color-muted transition-colors hover:color-base`,title:o.$t(`reference.copyWith`,{text:e.text,selector:(`selectorName`in o?o.selectorName:d(O))(l)}),onClick:t=>d(a)((`withReading`in o?o.withReading:d(D))(e.text,l))},i(d(t)===(`withReading`in o?o.withReading:d(D))(e.text,l)?o.$t(`copied`):`${(`selectorName`in o?o.selectorName:d(O))(l)} ${c}${e.wordDefault&&l===0?` / ${o.$t(`reference.default`)}`:``}`),9,M)]))),128))])])}}}),{__name:`ReferenceEntry`});function P(){let e=_().app.baseURL,t=f(),n=m();return g(async()=>{try{let n=await fetch(`${e}fonts/${S[0].stem}-Regular.ivs.json`);if(!n.ok)throw Error(`${n.status} ${n.statusText}`);t.value=await n.json()}catch(e){n.value=e instanceof Error?e.message:String(e)}}),{reference:t,error:n}}var F={class:`flex flex-col gap-2 border-b border-base p-6`},I=[`placeholder`,`aria-label`],L={class:`text-xs color-muted`},R={key:1,class:`label p-6`},z={key:2,class:`grid lg:grid-cols-2`},B={class:`border-base lg:border-r`},V={class:`label border-b border-base px-6 py-3`},H={class:`label border-b border-base px-6 py-3`},U=60,W=Object.assign(a({__name:`ReferenceSearch`,setup(a){let{reference:f,error:p}=P(),g=m(``),_=o(()=>{let e=Object.entries(f.value?.words??{}),t=g.value.trim();return(t?e.filter(([e])=>e.includes(t)):e).slice(0,U)}),v=o(()=>{let e=Object.entries(f.value?.kanji??{}),t=g.value.trim();return(t?e.filter(([e])=>t.includes(e)):e.filter(([,e])=>e.length>2)).slice(0,U)});return(a,o)=>{let m=e(`i18n-t`),S=N;return s(),r(`div`,null,[n(`div`,F,[h(n(`input`,{"onUpdate:modelValue":o[0]||=e=>y(g)?g.value=e:null,type:`search`,lang:`ja`,placeholder:a.$t(`reference.search`),class:`input max-w-md text-base`,"aria-label":a.$t(`reference.searchLabel`)},null,8,I),[[x,d(g)]]),n(`p`,L,i(a.$t(`reference.hint`)),1)]),d(p)?(s(),b(m,{key:0,keypath:`reference.unavailable`,tag:`p`,class:`p-6 text-sm color-muted`},{error:u(()=>[t(i(d(p)),1)]),command:u(()=>[...o[1]||=[n(`code`,{class:`font-mono`},`pnpm fonts`,-1)]]),_:1})):d(f)?(s(),r(`div`,z,[n(`section`,B,[n(`h2`,V,i(a.$t(`reference.words`,{count:d(_).length})),1),(s(!0),r(l,null,c(d(_),([e,t])=>(s(),b(S,{key:e,text:e,readings:t,"word-default":``},null,8,[`text`,`readings`]))),128))]),n(`section`,null,[n(`h2`,H,i(a.$t(`reference.kanji`,{count:d(v).length})),1),(s(!0),r(l,null,c(d(v),([e,t])=>(s(),b(S,{key:e,text:e,readings:t},null,8,[`text`,`readings`]))),128))])])):(s(),r(`p`,R,i(a.$t(`reference.loading`)),1))])}}}),{__name:`ReferenceSearch`}),G={},K={class:`flex flex-col gap-4 px-6 py-12`},q={class:`label`},J={class:`display text-4xl font-semibold`},Y={class:`max-w-[60ch] text-[15px] leading-relaxed color-muted`};function X(e,t){let a=W,o=T;return s(),r(`div`,null,[n(`div`,K,[n(`span`,q,i(e.$t(`reference.eyebrow`)),1),n(`h1`,J,i(e.$t(`reference.title`)),1),n(`p`,Y,i(e.$t(`reference.body`)),1)]),p(o,null,{default:u(()=>[p(a)]),_:1})])}var Z=v(G,[[`render`,X]]);export{Z as default};
@@ -1 +0,0 @@
1
- var e={meta:{title:`Furifont:內建振假名的日文字型`,description:`自帶振假名的日語字型。`},nav:{demo:`簡介`,customize:`自訂`,github:`GitHub 儲存庫`,light:`切換為淺色`,dark:`切換為深色`,language:`語言`,rubyOff:`隱藏振假名`,rubyOn:`顯示振假名`},footer:{fonts:`字型採用{license},源自 Source Han Sans 和 Source Han Serif。`,data:`讀音資料來自 {jmdict}、{jmnedict}、{kanjidic}(EDRDG)和 {furigana},採用 CC BY-SA 4.0 授權。`,code:`工具採用 MIT 授權。`,source:`GitHub 上的原始碼`,made:`作者:{author}`,supported:`由 {vercel} 和{sponsors}支持`,sponsors:`贊助者`},copied:`已複製`,shuffle:`換一個例句`,editable:`範例文字,可以編輯。`,scripts:{hiragana:`平假名`,hepburn:`羅馬字`},faces:{sans:`黑體`,serif:`明體`},hero:{title1:`振假名,`,title2:`交給字型。`,body:`Furifont 是一款把振假名直接顯示在字型上的日語字型。它用連字(ligature)依詞語的讀音切換。只要支援自訂字型,哪裡都能用。`,download:`下載字型`,build:`自行建置`},sections:{try:`試試看`,how:`運作原理`,selectors:`選擇讀音`,download:`下載`,anyPage:`用於任何網頁`},playground:{script:`振假名所用文字`,face:`字型樣式`,size:`字級 / {size}px`,ruby:`振假名`,textHint:`點選文字即可編輯。`,copy:`複製文字`},how:{build:{title:`客製建置`,body:`Furifont 以思源黑體或思源宋體為基礎編譯而成。建置時會讀取包含數千個詞的辭典,並把振假名繪製成新的字形。得到的是普通的字型檔案,不需要 JavaScript,也不需要外掛。`},ligatures:{title:`由連字完成工作`,body:`字型中為每個詞準備了連字。今日 會變成上方帶有 きょう 的單個字形。替換發生在繪製文字時,所以文字本身不會改變。`},longest:{title:`長詞優先`,body:`Furifont 把每一組漢字與幾千個常用詞的清單對照,先試最長的詞。例如,會先選 日本語,再考慮 日本。今日 會當作一個詞,讀作 きょう。`},bare:{title:`拿不準就不加`,body:`只有一個漢字時,只有當某個讀音明顯最可能,才加振假名。大人気 可以讀作 だいにんき,也可以讀作 おとなげ,所以不加振假名。`}},selectors:{body:`有些詞有多個常用讀音。Furifont 顯示最常見的那個。要選其他讀音,就在第一個漢字後面緊接一個變體選擇器(看不見的字元)。VS226 是讀音 1,VS227 是讀音 2,依此類推。VS225 會移除振假名。`,lookUp:`查詢讀音`,default:`預設`,reading2:`讀音 2(VS227)`,none:`無振假名(VS225)`},downloads:{family:`字型家族`,ruby:`振假名`,buildOwn:`你也可以自己製作字型。可以選擇其他基礎字型、詞的數量、振假名所用文字或尺寸。`},anyPage:{body:`你可以在任何網站上使用 Furifont。有漢字的行會留出放振假名的空間。如果電腦上已安裝 Furifont,就不用下載。否則字型會從本站載入,第一次約 5 MB。`,bookmarklet:`書籤小工具`,bookmarkletHint:`把它拖到書籤列。在任何頁面點選它,就會開啟 Furifont;再點一次就會關閉。有些網站(如 X 和 GitHub)不允許載入其他網站的字型。在這些網站上,請在電腦上安裝 Furifont。`,userscript:`使用者腳本`,install:`安裝使用者腳本`,userscriptHint:`適用於 Tampermonkey 或 Violentmonkey(執行小腳本的瀏覽器擴充功能)。它會在日語頁面自動開啟 Furifont,在不允許載入其他網站字型的網站上也能用。你可以在它的選單裡切換到另一款 Furifont 字型,或將其關閉。`,toast:{message:`Furifont 無法在此頁面載入字型。有些網站(如 X 和 GitHub)不允許載入其他網站的字型。在這些網站上,需要在電腦上安裝 Furifont。`,download:`下載字型`,close:`關閉`}},reference:{eyebrow:`參考`,title:`選擇讀音`,body:`Furifont 顯示詞最常見的讀音。要顯示其他讀音,就在詞的第一個漢字後面緊接一個變體選擇器(看不見的字元)。VS226 是讀音 1,VS227 是讀音 2,依此類推。單個漢字後面的選擇器,選的是這個漢字的讀音。VS225 顯示不帶振假名的漢字。`,search:`搜尋詞語或漢字:市場、今日、生`,searchLabel:`搜尋讀音`,hint:`點選讀音即可複製帶有選擇器的詞語。`,unavailable:`參考表隨現成字型一起提供,但這裡沒能載入({error})。請用 {command} 製作字型,或開啟自訂。`,loading:`載入中`,words:`有多個讀音的詞 / {count}`,kanji:`漢字 / {count}`,copyWith:`複製帶有 {selector} 的「{text}」`,default:`預設`},customize:{connecting:`正在連線至 furifont dev`,title:`自訂`,offline:{eyebrow:`自訂 / 離線`,title:`建置你自己的 Furifont`,body:`自訂是執行在你電腦上的工具。它讀取基礎字型,並儲存製作好的字型。在任意資料夾中啟動它,本頁就會連線並開啟,提供即時預覽、辭典和建置按鈕。製作好的字型儲存在 {folder}。`,needs:`需要 Node 22.18 或更新版本(一個執行 JavaScript 工具的免費程式)。`,run:`在任意資料夾中啟動自訂`},auth:{eyebrow:`自訂 / 已鎖定`,title:`輸入終端機顯示的驗證碼`,body:`{command} 在你的終端機(輸入指令的視窗)中顯示了一個六位數驗證碼。`,code:`驗證碼`,failed:`驗證碼無效,請查看終端機後再試一次。`,unlock:`解鎖`},sections:{preview:`預覽`,build:`建置`,dictionary:`辭典`,words:`你的詞語`},options:{family:`字型名稱`,base:`基礎字型`,baseHint:`要加振假名的字型。可以是要下載的字型,如 Source Han Serif JP Bold,也可以是電腦上另一個字型檔案的路徑。`,script:`振假名所用文字`,hiragana:`平假名`,katakanaOn:`片假名`,hepburn:`羅馬字`,skip:`略過最常見的詞`,skipHint:`讀者已經認識這些詞,所以不加振假名。報紙詞表依出現頻率排序,每 500 個詞一級。`,words:`接著加振假名的詞數`,wordsHint:`詞表中接下來的詞。加上下方的詞表,共 {count} 個詞加振假名。`,jlpt:`略過 JLPT 詞彙`,jlptHint:`JLPT(日本語能力試驗)詞表中到這個級別為止的詞不加振假名。N5 是最簡單的級別。`,none:`無`,sources:`一併收錄來自以下來源的詞`,source:{spec1:{name:`日常詞`,hint:`JMdict「spec1」:其他詞表沒有收錄的常用詞,如 日本。`},ichi1:{name:`基礎詞`,hint:`JMdict「ichi1」:「一萬語」詞表(基礎詞彙表)中最常用的詞。`},news1:{name:`報紙用詞`,hint:`JMdict「news1」:報紙中出現最多的 12,000 個詞。`},gai1:{name:`外來語`,hint:`JMdict「gai1」:日語從其他語言借來的常用詞。`},places:{name:`地名`,hint:`JMnedict:站名和地名。在沒有常用詞符合的文字上使用。`}},isolated:`單個漢字也加振假名`,share:`單個漢字的把握度`,shareHint:`只有一個漢字時,只有當某個讀音在辭典中至少占這個比例,才加振假名。請輸入 0.5 到 1 之間的數。數字越大,加振假名的漢字越少。`,rubyScale:`振假名大小(漢字的幾倍)`,rubyGap:`漢字上方的間距(em)`,squeeze:`最窄壓縮到(正常寬度的幾倍)`,maxWidth:`振假名最大寬度(em)`,reset:`恢復預設`,resetHint:`回到自訂載入的設定。你加入的詞會保留。`},preview:{compiling:`正在製作預覽`,size:`預覽字級`,stats:`{glyphs} 個字形 / {ms} ms`},build:{words:`詞語`,places:`地名`,ambiguous:`多讀音`,lone:`單個漢字`,protected:`你的設定`,glyphs:`振假名字形`,rules:`規則`,planning:`規劃中`,estimate:`≈ {woff2} WOFF2 · {otf} OTF`,estimating:`正在估算大小`,run:`建置字型`,save:`儲存設定`},dictionary:{search:`搜尋辭典:今日、生`,results:`{count} 個詞`,hint:`這些詞有多個常用讀音。固定其中一個,它就成為預設讀音。`,noTag:`不是常用詞`,restore:`還原`,remove:`不加振假名`},custom:{placeholder:`日[に]本[ほん] 或 今日[きょう]`,label:`要新增的詞`,add:`新增詞語`,added:`已新增 / {count}`,pinned:`已固定 / {count}`,removed:`不加振假名 / {count}`,none:`無`,takeOut:`移除 {item}`}}};export{e as default};
@@ -1,27 +0,0 @@
1
- import{B as e,C as t,E as n,Ht as r,N as i,Q as a,S as o,T as s,Vt as c,Y as l,Z as u,_ as d,at as f,bt as p,ot as m,tt as h,w as g,zt as _}from"./KJcTz4n2.js";import{i as v,o as y}from"./D3cEssU1.js";import{c as b}from"#entry";var x=[{text:`ひさかたの
2
- 光のどけき
3
- 春の日に
4
- しづ心なく
5
- 花の散るらむ`,author:`紀友則`},{text:`花さそふ
6
- 嵐の庭の
7
- 雪ならで
8
- ふりゆくものは
9
- わが身なりけり`,author:`入道前太政大臣`},{text:`いのちなき
10
- 砂のかなしさよ
11
- さらさらと
12
- 握れば指の
13
- あひだより落つ`,author:`石川啄木`},{text:`かにかくに
14
- 祇園はこひし
15
- 寝るときも
16
- 枕のしたを
17
- 水のながるる`,author:`吉井勇`},{text:`この味が
18
- いいねと君が
19
- 言ったから
20
- 七月六日は
21
- サラダ記念日`,author:`俵万智`},{text:`柿くへば
22
- 鐘が鳴るなり
23
- 法隆寺`,author:`正岡子規`},{text:`菜の花や
24
- 月は東に
25
- 日は西に`,author:`与謝蕪村`},{text:`朝顔に
26
- つるべとられて
27
- もらひ水`,author:`加賀千代女`}];function S(e){let t=x.filter(t=>t.text!==e);return t[Math.floor(Math.random()*t.length)]}var C={class:`flex flex-col gap-1.5`},w={class:`label`},T={key:0,class:`text-xs color-muted`},E=Object.assign(i({__name:`UiField`,props:{label:{},hint:{}},setup(e){return(i,o)=>(l(),n(`label`,C,[t(`span`,w,r(e.label),1),a(i.$slots,`default`),e.hint?(l(),n(`span`,T,r(e.hint),1)):s(``,!0)]))}}),{__name:`UiField`}),D=[`aria-label`],O=[`aria-checked`,`onClick`],k=Object.assign(i({__name:`UiSegmented`,props:e({options:{},label:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=h(e,`modelValue`);return(i,a)=>(l(),n(`div`,{role:`radiogroup`,"aria-label":e.label,class:`inline-flex border border-strong w-fit`},[(l(!0),n(d,null,u(e.options,(e,i)=>(l(),n(`button`,{key:e.value,type:`button`,role:`radio`,"aria-checked":t.value===e.value,class:_([`focus-ring h-8 px-3 text-xs font-medium transition-colors`,[t.value===e.value?`bg-inverse color-inverse`:`color-muted hover:color-base hover:bg-hover`,i>0&&`border-l border-strong`]]),onClick:n=>t.value=e.value},r(e.label),11,O))),128))],8,D))}}),{__name:`UiSegmented`}),A=[`min`,`max`,`step`],j=Object.assign(i({__name:`UiSlider`,props:e({min:{},max:{},step:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=h(e,`modelValue`);return(r,i)=>m((l(),n(`input`,{"onUpdate:modelValue":i[0]||=e=>t.value=e,type:`range`,min:e.min,max:e.max,step:e.step,class:`slider`,style:c({"--slider-fraction":(t.value-e.min)/(e.max-e.min)})},null,12,A)),[[y,t.value,void 0,{number:!0}]])}}),{__name:`UiSlider`}),M={class:`inline-flex cursor-pointer items-center gap-2 text-sm select-none`},N=Object.assign(i({__name:`UiToggle`,props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:[`update:modelValue`],setup(e){let r=h(e,`modelValue`);return(e,i)=>(l(),n(`label`,M,[m(t(`input`,{"onUpdate:modelValue":i[0]||=e=>r.value=e,type:`checkbox`,class:`peer sr-only`},null,512),[[v,r.value]]),t(`span`,{class:_([`relative h-4 w-7 border border-strong transition-colors peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-[var(--ff-fg)]`,r.value?`bg-inverse`:`bg-base`])},[t(`span`,{class:_([`absolute top-[2px] size-[10px] transition-all`,r.value?`left-[14px] bg-base`:`left-[2px] bg-inverse`])},null,2)],2),a(e.$slots,`default`)]))}}),{__name:`UiToggle`}),P=[`href`],F=Object.assign(i({__name:`UiButton`,props:{variant:{default:`outline`},to:{},href:{},icon:{}},setup(e){let t=o(()=>[`btn-${e.variant}`,`focus-ring`]);return(r,i)=>{let o=b;return e.to?(l(),g(o,{key:0,to:e.to,class:_(p(t))},{default:f(()=>[e.icon?(l(),n(`span`,{key:0,class:_(e.icon)},null,2)):s(``,!0),a(r.$slots,`default`)]),_:3},8,[`to`,`class`])):e.href?(l(),n(`a`,{key:1,href:e.href,target:`_blank`,rel:`noopener`,class:_(p(t))},[e.icon?(l(),n(`span`,{key:0,class:_(e.icon)},null,2)):s(``,!0),a(r.$slots,`default`)],10,P)):(l(),n(`button`,{key:2,type:`button`,class:_(p(t))},[e.icon?(l(),n(`span`,{key:0,class:_(e.icon)},null,2)):s(``,!0),a(r.$slots,`default`)],2))}}}),{__name:`UiButton`});export{E as a,k as i,N as n,x as o,j as r,S as s,F as t};
@@ -1 +0,0 @@
1
- import{C as e,E as t,Ht as n,Y as r,t as i}from"./KJcTz4n2.js";import{r as a}from"#entry";var o={class:`antialiased bg-white dark:bg-neutral-950 dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-neutral-950 tracking-wide`},s={class:`max-w-520px text-center`},c=[`textContent`],l=[`textContent`],u=[`textContent`],d=i({__name:`error-500`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:500},statusText:{type:String,default:`Internal server error`},description:{type:String,default:`This page is temporarily unavailable.`},refresh:{type:String,default:`Refresh this page`}},setup(i){let d=i;return a({title:`${d.status} - ${d.statusText} | ${d.appName}`,script:[],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb);--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}`}]}),(a,d)=>(r(),t(`div`,o,[e(`div`,s,[e(`h1`,{class:`font-medium leading-none mb-4 sm:text-[72px] tabular-nums text-[56px]`,textContent:n(i.status)},null,8,c),e(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:n(i.statusText)},null,8,l),e(`p`,{class:`mb-4 px-2 text-md text-neutral-500`,textContent:n(i.description)},null,8,u)])]))}},[[`__scopeId`,`data-v-fb8fb98a`]]);export{d as default};
@@ -1,3 +0,0 @@
1
- import{t as e}from"./y07Wd5I9.js";import{l 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(`./TYlOgzbv.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};
@@ -1 +0,0 @@
1
- import{A as e,C as t,E as n,Ht as r,Y as i,at as a,j as o,t as s}from"./KJcTz4n2.js";import{c,r as l}from"#entry";var u={class:`antialiased bg-white dark:bg-neutral-950 dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-neutral-950 tracking-wide`},d={class:`max-w-520px text-center`},f=[`textContent`],p=[`textContent`],m=[`textContent`],h={class:`flex items-center justify-center w-full`},g=[`textContent`],_=s({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`},backToPrevious:{type:String,default:`Go back`}},setup(s){let _=s;return l({title:`${_.status} - ${_.statusText} | ${_.appName}`,script:[{innerHTML:`(()=>{if(!(window.history.state&&window.history.state.back||document.referrer.startsWith(window.location.origin+"/")))return;const t=document.querySelector("[data-back-home]"),e=document.querySelector("[data-back-previous]");t&&e&&(e.onclick=()=>window.history.back(),t.hidden=!0,e.hidden=!1)})();`,tagPosition:`bodyClose`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb);--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body,button{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{-webkit-text-decoration:inherit;text-decoration:inherit}a,button{color:inherit}button{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;padding:0;text-transform:none;cursor:pointer}[type=button],button{-webkit-appearance:button;background-color:#0000;background-image:none}h1,h2,p{margin:0}[hidden]:where(:not([hidden=until-found])){display:none}`}]}),(l,_)=>{let v=c;return i(),n(`div`,u,[t(`div`,d,[t(`h1`,{class:`font-medium leading-none mb-4 sm:text-[72px] tabular-nums text-[56px]`,textContent:r(s.status)},null,8,f),t(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:r(s.statusText)},null,8,p),t(`p`,{class:`mb-4 px-2 text-md text-neutral-500`,textContent:r(s.description)},null,8,m),t(`div`,h,[o(v,{to:`/`,"data-back-home":``,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:a(()=>[e(r(s.backHome),1)]),_:1}),_[0]||=e(),t(`button`,{type:`button`,"data-back-previous":``,hidden:``,class:`appearance-none bg-transparent border-0 cursor-pointer font-medium font-sans hover:text-[#00DC82] p-0 text-inherit text-sm underline underline-offset-3`,textContent:r(s.backToPrevious)},null,8,g)])])])}}},[[`__scopeId`,`data-v-517ed62e`]]);export{_ as default};
@@ -1 +0,0 @@
1
- var e={meta:{title:`Furifont:自带振假名的日文字体`,description:`自带振假名的日语字体。`},nav:{demo:`简介`,customize:`自定义`,github:`GitHub 仓库`,light:`切换到浅色`,dark:`切换到深色`,language:`语言`,rubyOff:`隐藏振假名`,rubyOn:`显示振假名`},footer:{fonts:`字体采用{license},源自 Source Han Sans 和 Source Han Serif。`,data:`读音数据来自 {jmdict}、{jmnedict}、{kanjidic}(EDRDG)和 {furigana},采用 CC BY-SA 4.0 许可。`,code:`工具采用 MIT 许可。`,source:`GitHub 上的源代码`,made:`作者:{author}`,supported:`由 {vercel} 和{sponsors}支持`,sponsors:`赞助者`},copied:`已复制`,shuffle:`换一个例句`,editable:`示例文字,可以编辑。`,scripts:{hiragana:`平假名`,hepburn:`罗马字`},faces:{sans:`黑体`,serif:`宋体`},hero:{title1:`振假名,`,title2:`交给字体。`,body:`Furifont 是一款把振假名直接显示在字体上的日语字体。它用连字(ligature)按词语的读音切换。只要支持自定义字体,哪里都能用。`,download:`下载字体`,build:`自己构建`},sections:{try:`试一试`,how:`原理`,selectors:`选择读音`,download:`下载`,anyPage:`用于任意网页`},playground:{script:`振假名所用文字`,face:`字体样式`,size:`字号 / {size}px`,ruby:`振假名`,textHint:`点击文字即可编辑。`,copy:`复制文本`},how:{build:{title:`定制构建`,body:`Furifont 以思源黑体或思源宋体为基础编译而成。构建时会读取包含数千个词的词典,并把振假名绘制成新的字形。得到的是普通的字体文件,不需要 JavaScript,也不需要插件。`},ligatures:{title:`由连字完成工作`,body:`字体中为每个词准备了连字。今日 会变成上方带有 きょう 的单个字形。替换发生在绘制文字时,所以文本本身不会改变。`},longest:{title:`长词优先`,body:`Furifont 把每一组汉字与几千个常用词的列表对照,先试最长的词。例如,会先选 日本語,再考虑 日本。今日 会当作一个词,读作 きょう。`},bare:{title:`拿不准就不加`,body:`只有一个汉字时,只有当某个读音明显最可能,才加振假名。大人気 可以读作 だいにんき,也可以读作 おとなげ,所以不加振假名。`}},selectors:{body:`有些词有多个常用读音。Furifont 显示最常见的那个。要选其他读音,就在第一个汉字后面紧跟一个变体选择器(看不见的字符)。VS226 是读音 1,VS227 是读音 2,依此类推。VS225 去掉振假名。`,lookUp:`查询读音`,default:`默认`,reading2:`读音 2(VS227)`,none:`无振假名(VS225)`},downloads:{family:`字体家族`,ruby:`振假名`,buildOwn:`你也可以自己制作字体。可以选择其他基础字体、词的数量、振假名所用文字或尺寸。`},anyPage:{body:`你可以在任何网站上使用 Furifont。有汉字的行会留出放振假名的空间。如果电脑上已安装 Furifont,就不用下载。否则字体会从本站加载,第一次约 5 MB。`,bookmarklet:`书签小工具`,bookmarkletHint:`把它拖到书签栏。在任何页面点击它,就会打开 Furifont;再点一次就会关闭。有些网站(如 X 和 GitHub)不允许加载其他网站的字体。在这些网站上,请在电脑上安装 Furifont。`,userscript:`用户脚本`,install:`安装用户脚本`,userscriptHint:`适用于 Tampermonkey 或 Violentmonkey(运行小脚本的浏览器扩展)。它会在日语页面自动打开 Furifont,在不允许加载其他网站字体的网站上也能用。你可以在它的菜单里切换到另一款 Furifont 字体,或将其关闭。`,toast:{message:`Furifont 无法在此页面加载字体。有些网站(如 X 和 GitHub)不允许加载其他网站的字体。在这些网站上,需要在电脑上安装 Furifont。`,download:`下载字体`,close:`关闭`}},reference:{eyebrow:`参考`,title:`选择读音`,body:`Furifont 显示词最常见的读音。要显示其他读音,就在词的第一个汉字后面紧跟一个变体选择器(看不见的字符)。VS226 是读音 1,VS227 是读音 2,依此类推。单个汉字后面的选择器,选的是这个汉字的读音。VS225 显示不带振假名的汉字。`,search:`搜索词语或汉字:市場、今日、生`,searchLabel:`搜索读音`,hint:`点击读音即可复制带选择器的词语。`,unavailable:`参考表随现成字体一起提供,但这里没能加载({error})。请用 {command} 制作字体,或打开自定义。`,loading:`加载中`,words:`有多个读音的词 / {count}`,kanji:`汉字 / {count}`,copyWith:`复制带 {selector} 的「{text}」`,default:`默认`},customize:{connecting:`正在连接 furifont dev`,title:`自定义`,offline:{eyebrow:`自定义 / 离线`,title:`构建你自己的 Furifont`,body:`自定义是运行在你电脑上的工具。它读取基础字体,并保存制作好的字体。在任意文件夹中启动它,本页就会连接上并打开,提供实时预览、词典和构建按钮。制作好的字体保存在 {folder}。`,needs:`需要 Node 22.18 或更高版本(一个运行 JavaScript 工具的免费程序)。`,run:`在任意文件夹中启动自定义`},auth:{eyebrow:`自定义 / 已锁定`,title:`输入终端中显示的验证码`,body:`{command} 在你的终端(输入命令的窗口)中显示了一个六位数验证码。`,code:`验证码`,failed:`验证码无效,请查看终端后重试。`,unlock:`解锁`},sections:{preview:`预览`,build:`构建`,dictionary:`词典`,words:`你的词语`},options:{family:`字体名称`,base:`基础字体`,baseHint:`要加振假名的字体。可以是要下载的字体,如 Source Han Serif JP Bold,也可以是电脑上另一个字体文件的路径。`,script:`振假名所用文字`,hiragana:`平假名`,katakanaOn:`片假名`,hepburn:`罗马字`,skip:`跳过最常见的词`,skipHint:`读者已经认识这些词,所以不加振假名。报纸词表按出现频率排序,每 500 个词一档。`,words:`接着加振假名的词数`,wordsHint:`词表中接下来的词。加上下方的词表,共 {count} 个词加振假名。`,jlpt:`跳过 JLPT 词汇`,jlptHint:`JLPT(日本语能力测试)词表中到这个级别为止的词不加振假名。N5 是最简单的级别。`,none:`无`,sources:`同时收录来自以下来源的词`,source:{spec1:{name:`日常词`,hint:`JMdict“spec1”:其他词表没有收录的常用词,如 日本。`},ichi1:{name:`基础词`,hint:`JMdict“ichi1”:“一万语”词表(基础词汇表)中最常用的词。`},news1:{name:`报纸用词`,hint:`JMdict“news1”:报纸中出现最多的 12,000 个词。`},gai1:{name:`外来语`,hint:`JMdict“gai1”:日语从其他语言借来的常用词。`},places:{name:`地名`,hint:`JMnedict:站名和地名。在没有常用词匹配的文字上使用。`}},isolated:`单个汉字也加振假名`,share:`单个汉字的把握度`,shareHint:`只有一个汉字时,只有当某个读音在词典中至少占这个比例,才加振假名。请输入 0.5 到 1 之间的数。数字越大,加振假名的汉字越少。`,rubyScale:`振假名大小(汉字的几倍)`,rubyGap:`汉字上方的间距(em)`,squeeze:`最窄压缩到(正常宽度的几倍)`,maxWidth:`振假名最大宽度(em)`,reset:`恢复默认`,resetHint:`回到自定义载入的设置。你添加的词会保留。`},preview:{compiling:`正在制作预览`,size:`预览字号`,stats:`{glyphs} 个字形 / {ms} ms`},build:{words:`词语`,places:`地名`,ambiguous:`多读音`,lone:`单个汉字`,protected:`你的设置`,glyphs:`振假名字形`,rules:`规则`,planning:`规划中`,estimate:`≈ {woff2} WOFF2 · {otf} OTF`,estimating:`正在估算大小`,run:`构建字体`,save:`保存设置`},dictionary:{search:`搜索词典:今日、生`,results:`{count} 个词`,hint:`这些词有多个常用读音。固定其中一个,它就成为默认读音。`,noTag:`不是常用词`,restore:`恢复`,remove:`不加振假名`},custom:{placeholder:`日[に]本[ほん] 或 今日[きょう]`,label:`要添加的词`,add:`添加词语`,added:`已添加 / {count}`,pinned:`已固定 / {count}`,removed:`不加振假名 / {count}`,none:`无`,takeOut:`移除 {item}`}}};export{e as default};
@@ -1 +0,0 @@
1
- import{B as e,C as t,E as n,Ht as r,N as i,Q as a,S as o,T as s,Vt as c,Y as l,bt as u,j as d,mt as f,nt as p,pt as m,rt as h,tt as g}from"./KJcTz4n2.js";import{i as _,t as ee}from"#entry";function te(){let e=f(),t;async function n(n){await navigator.clipboard?.writeText(n).then(()=>!0,()=>!1)&&(e.value=n,clearTimeout(t),t=setTimeout(()=>e.value=void 0,1200))}return{copied:m(e),copy:n}}var v={lang:void 0,message:void 0,abortEarly:void 0,abortPipeEarly:void 0};function y(e){return e?{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}:v}function b(e){let t=typeof e;return t===`string`?`"${e}"`:t===`number`||t===`bigint`||t===`boolean`?`${e}`:t===`object`||t===`function`?(e&&Object.getPrototypeOf(e)?.constructor?.name)??`null`:t}function x(e,t,n,r,i){let a=i&&`input`in i?i.input:n.value,o=i?.expected??e.expects??null,s=i?.received??b(a),c={kind:e.kind,type:e.type,input:a,expected:o,received:s,message:`Invalid ${t}: ${o?`Expected ${o} but r`:`R`}eceived ${s}`,requirement:e.requirement,path:i?.path,issues:i?.issues,lang:r.lang,abortEarly:r.abortEarly,abortPipeEarly:r.abortPipeEarly},l=e.kind===`schema`,u=i?.message??e.message??(e.reference,c.lang,void 0)??(l?(c.lang,void 0):null)??r.message??(c.lang,void 0);u!==void 0&&(c.message=typeof u==`function`?u(c):u),l&&(n.typed=!1),n.issues?n.issues.push(c):n.issues=[c]}function S(e,t){let n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??`never`}function C(e){return e[`~standard`]={version:1,vendor:`valibot`,validate:t=>e[`~run`]({value:t},y())},e}var w=class extends Error{constructor(e){super(e[0].message),this.name=`ValiError`,this.issues=e}};function T(e,t){return{kind:`validation`,type:`check`,reference:T,async:!1,expects:null,requirement:e,message:t,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&x(this,`input`,e,t),e}}}function E(e){return{kind:`validation`,type:`integer`,reference:E,async:!1,expects:null,requirement:Number.isInteger,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&x(this,`integer`,e,t),e}}}function D(e,t){return{kind:`validation`,type:`max_value`,reference:D,async:!1,expects:`<=${e instanceof Date?e.toJSON():b(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value<=this.requirement)&&x(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():b(e.value)}),e}}}function O(e,t){return{kind:`validation`,type:`min_value`,reference:O,async:!1,expects:`>=${e instanceof Date?e.toJSON():b(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value>=this.requirement)&&x(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():b(e.value)}),e}}}function k(e){return{kind:`validation`,type:`non_empty`,reference:k,async:!1,expects:`!0`,message:e,"~run"(e,t){return e.typed&&e.value.length===0&&x(this,`length`,e,t,{received:`0`}),e}}}function A(){return{kind:`transformation`,type:`trim`,reference:A,async:!1,"~run"(e){return e.value=e.value.trim(),e}}}function j(e,t,n){return typeof e.fallback==`function`?e.fallback(t,n):e.fallback}function M(e,t,n){return typeof e.default==`function`?e.default(t,n):e.default}function N(e,t){return C({kind:`schema`,type:`array`,reference:N,expects:`Array`,async:!1,item:e,message:t,"~run"(e,t){let n=e.value;if(Array.isArray(n)){e.typed=!0,e.value=[];for(let r=0;r<n.length;r++){let i=n[r],a=this.item[`~run`]({value:i},t);if(a.issues){let o={type:`array`,origin:`value`,input:n,key:r,value:i};for(let t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||=a.issues,t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value.push(a.value)}}else x(this,`type`,e,t);return e}})}function P(e){return C({kind:`schema`,type:`boolean`,reference:P,expects:`boolean`,async:!1,message:e,"~run"(e,t){return typeof e.value==`boolean`?e.typed=!0:x(this,`type`,e,t),e}})}function F(e){return C({kind:`schema`,type:`number`,reference:F,expects:`number`,async:!1,message:e,"~run"(e,t){return typeof e.value==`number`&&!isNaN(e.value)?e.typed=!0:x(this,`type`,e,t),e}})}function I(e,t){return C({kind:`schema`,type:`object`,reference:I,expects:`Object`,async:!1,entries:e,message:t,"~run"(e,t){let n=e.value;if(n&&typeof n==`object`){e.typed=!0,e.value={};for(let r in this.entries){let i=this.entries[r];if(r in n||(i.type===`exact_optional`||i.type===`optional`||i.type===`nullish`)&&i.default!==void 0){let a=r in n?n[r]:M(i),o=i[`~run`]({value:a},t);if(o.issues){let i={type:`object`,origin:`value`,input:n,key:r,value:a};for(let t of o.issues)t.path?t.path.unshift(i):t.path=[i],e.issues?.push(t);if(e.issues||=o.issues,t.abortEarly){e.typed=!1;break}}o.typed||(e.typed=!1),e.value[r]=o.value}else if(i.fallback!==void 0)e.value[r]=j(i);else if(i.type!==`exact_optional`&&i.type!==`optional`&&i.type!==`nullish`&&(x(this,`key`,e,t,{input:void 0,expected:`"${r}"`,path:[{type:`object`,origin:`key`,input:n,key:r,value:n[r]}]}),t.abortEarly))break}}else x(this,`type`,e,t);return e}})}function L(e,t){return C({kind:`schema`,type:`optional`,reference:L,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,"~run"(e,t){return e.value===void 0&&(this.default!==void 0&&(e.value=M(this,e,t)),e.value===void 0)?(e.typed=!0,e):this.wrapped[`~run`](e,t)}})}function R(e,t){return C({kind:`schema`,type:`picklist`,reference:R,expects:S(e.map(b),`|`),async:!1,options:e,message:t,"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:x(this,`type`,e,t),e}})}function z(e){return C({kind:`schema`,type:`string`,reference:z,expects:`string`,async:!1,message:e,"~run"(e,t){return typeof e.value==`string`?e.typed=!0:x(this,`type`,e,t),e}})}function B(e,t,n){let r=e[`~run`]({value:t},y(n));if(r.issues)throw new w(r.issues);return r.value}function V(...e){return C({...e[0],pipe:e,"~run"(t,n){for(let r of e)if(r.kind!==`metadata`){if(t.issues&&(r.kind===`schema`||r.kind===`transformation`)){t.typed=!1;break}(!t.issues||!n.abortEarly&&!n.abortPipeEarly)&&(t=r[`~run`](t,n))}return t}})}function H(e,t,n){let r=e[`~run`]({value:t},y(n));return{typed:r.typed,success:!r.issues,output:r.value,issues:r.issues}}var U=[`hiragana`,`katakanaOn`,`hepburn`],W=[`ichi1`,`ichi2`,`news1`,`news2`,`spec1`,`spec2`,`gai1`,`gai2`],G=[`N5`,`N4`,`N3`,`N2`,`N1`],K=I({rubyScale:L(V(F(),O(.2),D(.8)),.4),rubyGap:L(V(F(),O(0),D(.5)),.05),compressionFloor:L(V(F(),O(.3),D(1)),.6),maxRubyWidth:L(V(F(),O(1),D(3)),1.6)}),q=V(F(),E(),O(1),D(48));function J(e){return V(e,T(e=>e.nfMin<=e.nfMax,`nfMin must not exceed nfMax`))}var Y=J(I({family:L(V(z(),A(),k(),T(e=>!/source/i.test(e),`Source is a reserved font name of the base font`)),`Furifont Sans`),rubyScript:L(R(U),`hiragana`),nfMin:L(q,1),nfMax:L(q,30),selectTags:L(N(R(W)),[`spec1`]),skipJlpt:L(R(G)),places:L(P(),!0),isolated:L(P(),!0),isolatedMinShare:L(V(F(),O(.5),D(1)),.8),words:L(I({add:L(N(z()),[]),remove:L(N(z()),[]),pin:L(N(z()),[])}),{}),metrics:L(K,{})}));function X(e={}){return B(Y,e)}var{rubyScale:Z,rubyGap:ne}=X().metrics,Q=1.75,re=.88+ne+Z,$=1.255,ie={rubyTop:$-re,emTop:.3749999999999999,baseline:$,emBottom:1.375},ae=[`aria-label`],oe=Object.assign(i({__name:`FuriText`,props:e({family:{default:()=>_[0].family},ruby:{type:Boolean,default:!0},size:{default:32}},{text:{required:!0},textModifiers:{}}),emits:[`update:text`],setup(e){let t=g(e,`text`),r=o(()=>({fontFamily:`"${e.family}", sans-serif`,fontSize:`${e.size}px`,lineHeight:Q,fontFeatureSettings:e.ruby?`normal`:`"ss01"`})),i=p(`el`),a;h([i,t],([e,t])=>{e&&t!==a&&(e.textContent=t)},{immediate:!0});function s(){a=i.value.innerText,t.value=a}return(e,t)=>(l(),n(`p`,{ref_key:`el`,ref:i,lang:`ja`,contenteditable:`plaintext-only`,spellcheck:`false`,role:`textbox`,"aria-multiline":`true`,"aria-label":e.$t(`editable`),class:`cursor-text whitespace-pre-wrap break-words outline-1 outline-transparent outline-offset-4 transition-[outline-color] hover:outline-dashed hover:outline-[var(--ff-line)] focus:outline-dashed focus:outline-[var(--ff-fg)]`,style:c(u(r)),onInput:s},null,44,ae))}}),{__name:`FuriText`}),se={class:`relative border-t border-base`},ce={key:0,class:`flex items-baseline gap-3 border-b border-base px-6 py-3`},le={key:0,class:`label`},ue={class:`label color-base`},de=Object.assign(i({__name:`UiSection`,props:{index:{},title:{}},setup(e){return(i,o)=>{let c=ee;return l(),n(`section`,se,[d(c,{class:`-left-[6px] -top-[6px]`}),d(c,{class:`-right-[6px] -top-[6px]`}),e.title?(l(),n(`header`,ce,[e.index?(l(),n(`span`,le,r(e.index),1)):s(``,!0),t(`h2`,ue,r(e.title),1),a(i.$slots,`aside`)])):s(``,!0),a(i.$slots,`default`)])}}}),{__name:`UiSection`});export{G as a,k as c,H as d,z as f,Q as i,I as l,oe as n,Y as o,te as p,ie as r,J as s,de as t,V as u};
@@ -1,2 +0,0 @@
1
- import{At as e,Ct as t,D as n,Dt as r,Et as i,Ft as a,H as o,I as s,It as c,Lt as l,Mt as u,Nt as d,O as f,Ot as p,Pt as m,Rt as h,St as ee,Tt as g,Ut as _,g as v,h as y,jt as b,kt as x,wt as S,x as C,xt as w}from"./KJcTz4n2.js";var T=void 0,E=typeof window<`u`&&window.trustedTypes;if(E)try{T=E.createPolicy(`vue`,{createHTML:e=>e})}catch{}var D=T?e=>T.createHTML(e):e=>e,te=`http://www.w3.org/2000/svg`,ne=`http://www.w3.org/1998/Math/MathML`,O=typeof document<`u`?document:null,k=O&&O.createElement(`template`),re={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let i=t===`svg`?O.createElementNS(te,e):t===`mathml`?O.createElementNS(ne,e):n?O.createElement(e,{is:n}):O.createElement(e);return e===`select`&&r&&r.multiple!=null&&i.setAttribute(`multiple`,r.multiple),i},createText:e=>O.createTextNode(e),createComment:e=>O.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>O.querySelector(e),setScopeId(e,t){e.setAttribute(t,``)},insertStaticContent(e,t,n,r,i,a){let o=n?n.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),i!==a&&(i=i.nextSibling););else{k.innerHTML=D(r===`svg`?`<svg>${e}</svg>`:r===`mathml`?`<math>${e}</math>`:e);let i=k.content;if(r===`svg`||r===`mathml`){let e=i.firstChild;for(;e.firstChild;)i.appendChild(e.firstChild);i.removeChild(e)}t.insertBefore(i,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},A=`transition`,j=`animation`,M=Symbol(`_vtc`),N={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ie=t({},v,N),ae=(e=>(e.displayName=`Transition`,e.props=ie,e))((e,{slots:t})=>s(y,se(e),t)),P=(e,t=[])=>{r(e)?e.forEach(e=>e(...t)):e&&e(...t)},oe=e=>e?r(e)?e.some(e=>e.length>1):e.length>1:!1;function se(e){let n={};for(let t in e)t in N||(n[t]=e[t]);if(e.css===!1)return n;let{name:r=`v`,type:i,duration:a,enterFromClass:o=`${r}-enter-from`,enterActiveClass:s=`${r}-enter-active`,enterToClass:c=`${r}-enter-to`,appearFromClass:l=o,appearActiveClass:u=s,appearToClass:d=c,leaveFromClass:f=`${r}-leave-from`,leaveActiveClass:p=`${r}-leave-active`,leaveToClass:m=`${r}-leave-to`}=e,h=ce(a),ee=h&&h[0],g=h&&h[1],{onBeforeEnter:_,onEnter:v,onEnterCancelled:y,onLeave:b,onLeaveCancelled:x,onBeforeAppear:S=_,onAppear:C=v,onAppearCancelled:w=y}=n,T=(e,t,n,r)=>{e._enterCancelled=r,L(e,t?d:c),L(e,t?u:s),n&&n()},E=(e,t)=>{e._isLeaving=!1,L(e,f),L(e,m),L(e,p),t&&t()},D=e=>(t,n)=>{let r=e?C:v,a=()=>T(t,e,n);P(r,[t,a]),le(()=>{L(t,e?l:o),I(t,e?d:c),oe(r)||de(t,i,ee,a)})};return t(n,{onBeforeEnter(e){P(_,[e]),I(e,o),I(e,s)},onBeforeAppear(e){P(S,[e]),I(e,l),I(e,u)},onEnter:D(!1),onAppear:D(!0),onLeave(e,t){e._isLeaving=!0;let n=()=>E(e,t);I(e,f),e._enterCancelled?(I(e,p),he(e)):(he(e),I(e,p)),le(()=>{e._isLeaving&&(L(e,f),I(e,m),oe(b)||de(e,i,g,n))}),P(b,[e,n])},onEnterCancelled(e){T(e,!1,void 0,!0),P(y,[e])},onAppearCancelled(e){T(e,!0,void 0,!0),P(w,[e])},onLeaveCancelled(e){E(e),P(x,[e])}})}function ce(t){if(t==null)return null;if(e(t))return[F(t.enter),F(t.leave)];{let e=F(t);return[e,e]}}function F(e){return _(e)}function I(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.add(t)),(e[M]||(e[M]=new Set)).add(t)}function L(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.remove(t));let n=e[M];n&&(n.delete(t),n.size||(e[M]=void 0))}function le(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}var ue=0;function de(e,t,n,r){let i=e._endId=++ue,a=()=>{i===e._endId&&r()};if(n!=null)return setTimeout(a,n);let{type:o,timeout:s,propCount:c}=fe(e,t);if(!o)return r();let l=o+`end`,u=0,d=()=>{e.removeEventListener(l,f),a()},f=t=>{t.target===e&&++u>=c&&d()};setTimeout(()=>{u<c&&d()},s+1),e.addEventListener(l,f)}function fe(e,t){let n=window.getComputedStyle(e),r=e=>(n[e]||``).split(`, `),i=r(`${A}Delay`),a=r(`${A}Duration`),o=pe(i,a),s=r(`${j}Delay`),c=r(`${j}Duration`),l=pe(s,c),u=null,d=0,f=0;t===A?o>0&&(u=A,d=o,f=a.length):t===j?l>0&&(u=j,d=l,f=c.length):(d=Math.max(o,l),u=d>0?o>l?A:j:null,f=u?u===A?a.length:c.length:0);let p=u===A&&/\b(?:transform|all)(?:,|$)/.test(r(`${A}Property`).toString());return{type:u,timeout:d,propCount:f,hasTransform:p}}function pe(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((t,n)=>me(t)+me(e[n])))}function me(e){return e===`auto`?0:Number(e.slice(0,-1).replace(`,`,`.`))*1e3}function he(e){return(e?e.ownerDocument:document).body.offsetHeight}function ge(e,t,n){let r=e[M];r&&(t=(t?[t,...r]:[...r]).join(` `)),t==null?e.removeAttribute(`class`):n?e.setAttribute(`class`,t):e.className=t}var _e=Symbol(`_vod`),ve=Symbol(`_vsh`),ye=Symbol(``),be=/(?:^|;)\s*display\s*:/;function xe(e,t,n){let r=e.style,i=m(n),a=!1;if(n&&!i){if(t){if(m(t))for(let e of t.split(`;`)){let t=e.slice(0,e.indexOf(`:`)).trim();n[t]??z(r,t,``)}else for(let e in t)n[e]??z(r,e,``)}for(let i in n){i===`display`&&(a=!0);let o=n[i];o==null?z(r,i,``):Ce(e,i,!m(t)&&t?t[i]:void 0,o)||z(r,i,o)}}else if(i){if(t!==n){let e=r[ye];e&&(n+=`;`+e),r.cssText=n,a=be.test(n)}}else t&&e.removeAttribute(`style`);_e in e&&((!i||t!==n)&&(e[_e]=a?r.display:``),e[ve]&&(r.display=`none`))}var R=/\s*!important$/;function z(e,t,n){if(r(n))n.forEach(n=>z(e,t,n));else if(n??=``,t.startsWith(`--`))R.test(n)?e.setProperty(t,n.replace(R,``),`important`):e.setProperty(t,n);else{let r=Se(e,t);R.test(n)?e.setProperty(S(r),n.replace(R,``),`important`):e[r]=n}}var B=[`Webkit`,`Moz`,`ms`],V={};function Se(e,t){let n=V[t];if(n)return n;let r=w(t);if(r!==`filter`&&r in e)return V[t]=r;r=ee(r);for(let n=0;n<B.length;n++){let i=B[n]+r;if(i in e)return V[t]=i}return t}function Ce(e,t,n,r){return e.tagName===`TEXTAREA`&&(t===`width`||t===`height`)&&m(r)&&n===r}var H=`http://www.w3.org/1999/xlink`;function U(e,t,n,r,i,o=d(t)){r&&t.startsWith(`xlink:`)?n==null?e.removeAttributeNS(H,t.slice(6,t.length)):e.setAttributeNS(H,t,n):n==null||o&&!g(n)?e.removeAttribute(t):e.setAttribute(t,o?``:a(n)?String(n):n)}function W(e,t,n,r,i){if(t===`innerHTML`||t===`textContent`){n!=null&&(e[t]=t===`innerHTML`?D(n):n);return}let a=e.tagName;if(t===`value`&&a!==`PROGRESS`&&!a.includes(`-`)){let r=a===`OPTION`?e.getAttribute(`value`)||``:e.value,i=n==null?e.type===`checkbox`?`on`:``:String(n);(r!==i||!(`_value`in e))&&(e.value=i),n??e.removeAttribute(t),e._value=n;return}let o=!1;if(n===``||n==null){let r=typeof e[t];r===`boolean`?n=g(n):n==null&&r===`string`?(n=``,o=!0):r===`number`&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(i||t)}function G(e,t,n,r){e.addEventListener(t,n,r)}function we(e,t,n,r){e.removeEventListener(t,n,r)}var K=Symbol(`_vei`);function Te(e,t,n,r,i=null){let a=e[K]||(e[K]={}),o=a[t];if(r&&o)o.value=r;else{let[n,s]=Oe(t);r?G(e,n,a[t]=Me(r,i),s):o&&(we(e,n,o,s),a[t]=void 0)}}var Ee=/(Once|Passive|Capture)$/,De=/^on:?(?:Once|Passive|Capture)$/;function Oe(e){let t,n;for(;(n=e.match(Ee))&&!De.test(e);)t||={},e=e.slice(0,e.length-n[1].length),t[n[1].toLowerCase()]=!0;return[e[2]===`:`?e.slice(3):S(e.slice(2)),t]}var ke=0,Ae=Promise.resolve(),je=()=>ke||=(Ae.then(()=>ke=0),Date.now());function Me(e,t){let n=e=>{if(!e._vts)e._vts=Date.now();else if(e._vts<=n.attached)return;let i=n.value;if(r(i)){let n=e.stopImmediatePropagation;e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0};let r=i.slice(),a=[e];for(let n=0;n<r.length&&!e._stopped;n++){let e=r[n];e&&C(e,t,5,a)}}else C(i,t,5,[e])};return n.value=e,n.attached=je(),n}var Ne=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Pe=(e,t,n,r,i,a)=>{let o=i===`svg`;t===`class`?ge(e,r,o):t===`style`?xe(e,n,r):b(t)?x(t)||Te(e,t,n,r,a):(t[0]===`.`?(t=t.slice(1),1):t[0]===`^`?(t=t.slice(1),0):Fe(e,t,r,o))?(W(e,t,r),!e.tagName.includes(`-`)&&(t===`value`||t===`checked`||t===`selected`)&&U(e,t,r,o,a,t!==`value`)):e._isVueCE&&(Ie(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!m(r)))?W(e,w(t),r,a,t):(t===`true-value`?e._trueValue=r:t===`false-value`&&(e._falseValue=r),U(e,t,r,o))};function Fe(e,t,n,r){if(r)return!!(t===`innerHTML`||t===`textContent`||t in e&&Ne(t)&&p(n));if(t===`spellcheck`||t===`draggable`||t===`translate`||t===`autocorrect`||t===`sandbox`&&e.tagName===`IFRAME`||t===`form`||t===`list`&&e.tagName===`INPUT`||t===`type`&&e.tagName===`TEXTAREA`)return!1;if(t===`width`||t===`height`){let t=e.tagName;if(t===`IMG`||t===`VIDEO`||t===`CANVAS`||t===`SOURCE`)return!1}return Ne(t)&&m(n)?!1:t in e}function Ie(e,t){let n=e._def.props;if(!n)return!1;let r=w(t);return Array.isArray(n)?n.some(e=>w(e)===r):Object.keys(n).some(e=>w(e)===r)}var q=e=>{let t=e.props[`onUpdate:modelValue`]||!1;return r(t)?e=>i(t,e):t};function Le(e){e.target.composing=!0}function Re(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(`input`)))}var J=Symbol(`_assign`),Y=Symbol(`_initialValue`);function X(e,t,n){return t&&(e=e.trim()),n&&(e=h(e)),e}var ze={created(e,{modifiers:{lazy:t,trim:n,number:r}},i){e.parentNode&&(e.type===`text`?e[Y]=e.defaultValue.replace(/[\r\n]/g,``):e.type===`textarea`&&(e[Y]=e.defaultValue.replace(/\r\n?/g,`
2
- `))),e[J]=q(i);let a=r||i.props&&i.props.type===`number`;G(e,t?`change`:`input`,t=>{t.target.composing||e[J](X(e.value,n,a))}),(n||a)&&G(e,`change`,()=>{e.value=X(e.value,n,a)}),t||(G(e,`compositionstart`,Le),G(e,`compositionend`,Re),G(e,`change`,Re))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){let i=t??``,a=e[Y];delete e[Y],a!==void 0&&(e.type===`text`||e.type===`textarea`)&&e.value!==a?e[J](X(e.value,n,r)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:i,number:a}},o){if(e[J]=q(o),e.composing)return;let s=(a||e.type===`number`)&&!/^0\d/.test(e.value)?h(e.value):e.value,c=t??``;if(s===c)return;let l=e.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===e&&e.type!==`range`&&(r&&t===n||i&&e.value.trim()===c)||(e.value=c)}},Be={deep:!0,created(e,t,n){e[J]=q(n),G(e,`change`,()=>{let t=e._modelValue,n=Q(e),i=e.checked,a=e[J];if(r(t)){let e=l(t,n),r=e!==-1;if(i&&!r)a(t.concat(n));else if(!i&&r){let n=[...t];n.splice(e,1),a(n)}}else if(u(t)){let e=new Set(t);i?e.add(n):e.delete(n),a(e)}else a(We(e,i))})},mounted:Ve,beforeUpdate(e,t,n){e[J]=q(n),Ve(e,t,n)}};function Ve(e,{value:t,oldValue:n},i){e._modelValue=t;let a;if(r(t))a=l(t,i.props.value)>-1;else if(u(t))a=t.has(i.props.value);else{if(t===n)return;a=c(t,We(e,!0))}e.checked!==a&&(e.checked=a)}var He={deep:!0,created(e,{value:t,modifiers:{number:n}},i){e._modelValue=t,G(e,`change`,()=>{let t=Array.prototype.filter.call(e.options,e=>e.selected).map(e=>n?h(Q(e)):Q(e)),i=e.multiple,a=i?u(e._modelValue)?new Set(t):t:t[0],s=e._pendingValue=[i,i?r(a)?t.slice():t:a];try{e[J](a)}finally{o(()=>{e._pendingValue===s&&(e._pendingValue=void 0)})}}),e[J]=q(i)},mounted(e,{value:t}){Z(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[J]=q(n)},updated(e,{value:t}){let n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Ue(t,n[1],n[0]))&&Z(e,t)}};function Ue(e,t,n){if(!n||r(e))return c(e,t);if(u(e)){if(e.size!==t.length)return!1;for(let n of t)if(!e.has(n))return!1;return!0}return!1}function Z(e,t){let n=e.multiple,i=r(t);if(!n||i||u(t)){for(let r=0,a=e.options.length;r<a;r++){let a=e.options[r],o=Q(a);if(n){if(i){let e=typeof o;a.selected=e===`string`||e===`number`?t.some(e=>String(e)===String(o)):l(t,o)>-1}else a.selected=t.has(o)}else if(c(Q(a),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Q(e){return`_value`in e?e._value:e.value}function We(e,t){let n=t?`_trueValue`:`_falseValue`;return n in e?e[n]:t}var Ge=[`ctrl`,`shift`,`alt`,`meta`],Ke={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>`button`in e&&e.button!==0,middle:e=>`button`in e&&e.button!==1,right:e=>`button`in e&&e.button!==2,exact:(e,t)=>Ge.some(n=>e[`${n}Key`]&&!t.includes(n))},qe=(e,t)=>{if(!e)return e;let n=e._withMods||={},r=t.join(`.`);return n[r]||(n[r]=((n,...r)=>{for(let e=0;e<t.length;e++){let r=Ke[t[e]];if(r&&r(n,t))return}return e(n,...r)}))},Je=t({patchProp:Pe},re),$,Ye=!1;function Xe(){return $||=f(Je)}function Ze(){return $=Ye?$:n(Je),Ye=!0,$}var Qe=((...e)=>{let t=Xe().createApp(...e),{mount:n}=t;return t.mount=e=>{let r=tt(e);if(!r)return;let i=t._component;!p(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=``);let a=n(r,!1,et(r));return r instanceof Element&&(r.removeAttribute(`v-cloak`),r.setAttribute(`data-v-app`,``)),a},t}),$e=((...e)=>{let t=Ze().createApp(...e),{mount:n}=t;return t.mount=e=>{let t=tt(e);if(t)return n(t,!0,et(t))},t});function et(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function tt(e){return m(e)?document.querySelector(e):e}export{He as a,Be as i,Qe as n,ze as o,$e as r,qe as s,ae as t};
@@ -1,3 +0,0 @@
1
- import{A as e,C as t,E as n,Ht as r,N as i,S as a,T as o,Vt as s,Y as c,Z as l,_ as u,at as d,bt as f,j as p,mt as m,q as h,s as g,t as _,ut as v}from"./KJcTz4n2.js";import{a as y,i as b,n as x,o as S,s as C,u as w}from"#entry";import{i as T,n as E,p as D,r as O,t as k}from"./CVJR3s5f.js";import{a as A,i as j,n as ee,o as M,r as N,s as te,t as P}from"./Bewt6owv.js";var F=Object.assign(i({__name:`UiTypeGrid`,props:{size:{}},setup(e){let t=a(()=>{let t=Math.round(O.baseline*e.size),n=n=>`${Math.round(t+(n-O.baseline)*e.size)}px`,r=e=>`transparent ${n(e)}, var(--ff-line) ${n(e)} calc(${n(e)} + 1px), transparent calc(${n(e)} + 1px)`,{emTop:i,emBottom:a}=O;return{backgroundImage:[`linear-gradient(${[i,a].map(r).join(`, `)})`,`linear-gradient(90deg, var(--ff-line) 1px, transparent 1px)`].join(`, `),backgroundSize:`100% ${e.size*T}px, ${e.size}px 100%`,backgroundPosition:`100vmax 100vmax`}});return(e,r)=>(c(),n(`div`,{"aria-hidden":`true`,class:`pointer-events-none absolute -inset-[100vmax] -z-1`,style:s(f(t))},null,4))}}),{__name:`UiTypeGrid`}),I={class:`grid lg:grid-cols-2`},L={class:`flex flex-col gap-8 border-base px-6 py-16 lg:border-r lg:py-24`},R={class:`display hero-title font-semibold`},z={class:`max-w-[46ch] text-[15px] leading-relaxed color-muted`},B={class:`flex flex-wrap gap-3`},V={class:`relative isolate flex flex-col justify-center gap-4 overflow-hidden border-t border-base px-6 py-12 lg:border-t-0`},H={class:`relative`},U={key:0,class:`label no-ruby absolute right-3 bottom-3 border border-base bg-base px-2 py-1`},W=44,G=Object.assign(i({__name:`DemoHero`,emits:[`download`],setup(i,{emit:s}){let l=s,u=m(M[0].text),h=a(()=>M.find(e=>e.text===u.value)?.author);return(i,a)=>{let s=P,m=F,g=E;return c(),n(`div`,I,[t(`div`,L,[a[4]||=t(`span`,{class:`label`},`振り仮名 / furigana`,-1),t(`h1`,R,[e(r(i.$t(`hero.title1`)),1),a[3]||=t(`br`,null,null,-1),e(r(i.$t(`hero.title2`)),1)]),t(`p`,z,r(i.$t(`hero.body`)),1),t(`div`,B,[p(s,{variant:`solid`,icon:`i-ph-download-simple`,onClick:a[0]||=e=>l(`download`)},{default:d(()=>[e(r(i.$t(`hero.download`)),1)]),_:1}),p(s,{to:`/customize`,icon:`i-ph-sliders-horizontal`},{default:d(()=>[e(r(i.$t(`hero.build`)),1)]),_:1})])]),t(`div`,V,[p(s,{icon:`i-ph-shuffle`,class:`absolute right-3 top-3 w-9 bg-base px-0`,"aria-label":i.$t(`shuffle`),title:i.$t(`shuffle`),onClick:a[1]||=e=>u.value=(`otherSample`in i?i.otherSample:f(te))(f(u)).text},null,8,[`aria-label`,`title`]),t(`div`,H,[p(m,{size:W}),p(g,{text:f(u),"onUpdate:text":a[2]||=e=>v(u)?u.value=e:null,size:W},null,8,[`text`])]),f(h)?(c(),n(`span`,U,`⁄ `+r(f(h)),1)):o(``,!0),t(`span`,{class:`label absolute bottom-3 left-3 border border-base bg-base px-2 py-1`},`Furifont Sans Regular / `+r(W)+`px`)])])}}}),{__name:`DemoHero`});function K(){let{t:e}=x(),t=m(`sans`),n=m(`hiragana`);return{face:t,script:n,family:a(()=>b.find(e=>e.face===t.value&&e.script===n.value)),faces:a(()=>[`sans`,`serif`].map(t=>({value:t,label:e(`faces.${t}`)}))),scripts:a(()=>[`hiragana`,`hepburn`].map(t=>({value:t,label:e(`scripts.${t}`)})))}}var q={class:`grid lg:grid-cols-[340px_1fr]`},J={class:`flex flex-col gap-5 border-b border-base p-6 lg:border-b-0 lg:border-r`},Y={class:`text-xs color-muted`},X={class:`flex min-w-0 flex-col`},Z={class:`min-h-72 flex-1 px-6 py-8`},Q={class:`flex items-center gap-3 border-t border-base px-6 py-3`},ne=Object.assign(i({__name:`DemoPlayground`,setup(i){let a=m(`今日は日本語の勉強をします。
2
- 明日は東京の大学へ行きます。
3
- 私は毎朝新聞を読みます。桜が咲きました。`),{face:o,script:s,family:l,faces:u,scripts:h}=K(),g=m(!0),_=m(30),{copied:y,copy:b}=D();return(i,m)=>{let x=j,S=A,C=N,w=ee,T=E,D=P;return c(),n(`div`,q,[t(`div`,J,[p(S,{label:i.$t(`playground.script`)},{default:d(()=>[p(x,{modelValue:f(s),"onUpdate:modelValue":m[0]||=e=>v(s)?s.value=e:null,label:i.$t(`playground.script`),options:f(h)},null,8,[`modelValue`,`label`,`options`])]),_:1},8,[`label`]),p(S,{label:i.$t(`playground.face`)},{default:d(()=>[p(x,{modelValue:f(o),"onUpdate:modelValue":m[1]||=e=>v(o)?o.value=e:null,label:i.$t(`playground.face`),options:f(u)},null,8,[`modelValue`,`label`,`options`])]),_:1},8,[`label`]),p(S,{label:i.$t(`playground.size`,{size:f(_)})},{default:d(()=>[p(C,{modelValue:f(_),"onUpdate:modelValue":m[2]||=e=>v(_)?_.value=e:null,min:16,max:64},null,8,[`modelValue`])]),_:1},8,[`label`]),p(w,{modelValue:f(g),"onUpdate:modelValue":m[3]||=e=>v(g)?g.value=e:null},{default:d(()=>[e(r(i.$t(`playground.ruby`)),1)]),_:1},8,[`modelValue`]),t(`p`,Y,r(i.$t(`playground.textHint`)),1)]),t(`div`,X,[t(`div`,Z,[p(T,{text:f(a),"onUpdate:text":m[4]||=e=>v(a)?a.value=e:null,family:f(l).family,ruby:f(g),size:f(_)},null,8,[`text`,`family`,`ruby`,`size`])]),t(`div`,Q,[p(D,{variant:`ghost`,icon:f(y)?`i-ph-check`:`i-ph-copy`,onClick:m[5]||=e=>f(b)(f(a))},{default:d(()=>[e(r(f(y)?i.$t(`copied`):i.$t(`playground.copy`)),1)]),_:1},8,[`icon`])])])])}}}),{__name:`DemoPlayground`}),re={class:`grid sm:grid-cols-2 lg:grid-cols-4`},ie={class:`font-mono text-xs color-muted`},ae={class:`text-[15px] font-semibold tracking-tight`},oe={class:`text-sm leading-relaxed color-muted`},se=Object.assign(i({__name:`DemoHowItWorks`,setup(e){let i=[`build`,`ligatures`,`longest`,`bare`];return(e,a)=>(c(),n(`ol`,re,[(c(),n(u,null,l(i,(n,i)=>t(`li`,{key:n,class:`flex flex-col gap-3 border-base p-6 [&:not(:last-child)]:border-b sm:[&:nth-child(odd)]:border-r lg:border-b-0 lg:[&:not(:last-child)]:border-r`},[t(`span`,ie,r(String(i+1).padStart(2,`0`)),1),t(`h3`,ae,r(e.$t(`how.${n}.title`)),1),t(`p`,oe,r(e.$t(`how.${n}.body`)),1)])),64))]))}}),{__name:`DemoHowItWorks`}),ce={class:`grid sm:grid-cols-[1fr_2fr]`},le={class:`flex flex-col gap-4 border-b border-base p-6 sm:border-b-0 sm:border-r`},ue={class:`text-sm leading-relaxed color-muted`},de={class:`grid grid-cols-2 lg:grid-cols-5`},fe={class:`label`},pe=[`onClick`],me=Object.assign(i({__name:`DemoSelectors`,setup(i){let a=e=>String.fromCodePoint(917984+e),o=[{label:`selectors.default`,text:`市場`,code:`市場`},{label:`selectors.reading2`,text:`市${a(2)}場`,code:`市\\u{E01E2}場`},{label:`selectors.default`,text:`今日`,code:`今日`},{label:`selectors.reading2`,text:`今${a(2)}日`,code:`今\\u{E01E2}日`},{label:`selectors.none`,text:`今${a(0)}日`,code:`今\\u{E01E0}日`}],{copied:s,copy:m}=D();return(i,a)=>{let h=P,g=E;return c(),n(`div`,ce,[t(`div`,le,[t(`p`,ue,r(i.$t(`selectors.body`)),1),p(h,{to:`/reference`,icon:`i-ph-list-magnifying-glass`,class:`self-start`},{default:d(()=>[e(r(i.$t(`selectors.lookUp`)),1)]),_:1})]),t(`ul`,de,[(c(),n(u,null,l(o,e=>t(`li`,{key:e.code,class:`flex flex-col gap-2 border-b border-r border-base p-4 last:border-r-0`},[p(g,{text:e.text,size:36},null,8,[`text`]),t(`span`,fe,r(i.$t(e.label)),1),t(`button`,{type:`button`,class:`focus-ring self-start font-mono text-xs color-muted hover:color-base`,onClick:t=>f(m)(e.text)},r(f(s)===e.text?i.$t(`copied`):e.code),9,pe)])),64))])])}}}),{__name:`DemoSelectors`}),he={},ge={class:`grid lg:grid-cols-[2fr_1fr]`},_e={class:`w-full border-b border-base text-sm lg:border-b-0 lg:border-r`},ve={class:`border-b border-base text-left`},ye={class:`label px-6 py-3 font-normal`},be={class:`label px-3 py-3 font-normal`},xe={class:`px-6 py-3 font-medium`},Se={class:`px-3 py-3 color-muted`},Ce={class:`flex gap-3 font-mono text-xs`},we=[`href`],Te={class:`flex flex-col gap-4 p-6`},Ee={class:`text-sm color-muted`};function De(i,a){let o=P;return c(),n(`div`,ge,[t(`table`,_e,[t(`thead`,null,[t(`tr`,ve,[t(`th`,ye,r(i.$t(`downloads.family`)),1),t(`th`,be,r(i.$t(`downloads.ruby`)),1),(c(!0),n(u,null,l(`WEIGHTS`in i?i.WEIGHTS:f(y),e=>(c(),n(`th`,{key:e.style,class:`label px-3 py-3 font-normal`},r(e.style),1))),128))])]),t(`tbody`,null,[(c(!0),n(u,null,l(`FAMILIES`in i?i.FAMILIES:f(b),e=>(c(),n(`tr`,{key:e.stem,class:`border-b border-base last:border-b-0`},[t(`td`,xe,r(e.family),1),t(`td`,Se,r(i.$t(`scripts.${e.script}`)),1),(c(!0),n(u,null,l(`WEIGHTS`in i?i.WEIGHTS:f(y),a=>(c(),n(`td`,{key:a.style,class:`px-3 py-3`},[t(`span`,Ce,[(c(),n(u,null,l([`otf`,`woff2`],n=>t(`a`,{key:n,href:(`releaseUrl`in i?i.releaseUrl:f(S))(`${e.stem}-${a.style}.${n}`),class:`focus-ring underline underline-offset-3 hover:color-muted`},r(n),9,we)),64))])]))),128))]))),128))])]),t(`div`,Te,[t(`p`,Ee,r(i.$t(`downloads.buildOwn`)),1),p(o,{to:`/customize`,icon:`i-ph-sliders-horizontal`,class:`self-start`},{default:d(()=>[e(r(i.$t(`nav.customize`)),1)]),_:1})])])}var Oe=Object.assign(_(he,[[`render`,De]]),{__name:`DemoDownloads`});async function ke({family:e,face:t},n,r,i){let a=window.furifont;if(a?.family===e)a.sheet.disabled=!a.sheet.disabled;else{if(!a){a={sheet:new CSSStyleSheet,family:e},window.furifont=a,document.adoptedStyleSheets=[...document.adoptedStyleSheets,a.sheet];let t=e=>{let t=new Set;for(let n of e){let e=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(let n=e.currentNode;n;n=e.nextNode())n.parentElement&&/\p{sc=Han}/u.test(n.nodeValue??``)&&t.add(n.parentElement)}let n=[...t].filter(e=>{let{lineHeight:t,fontSize:n}=getComputedStyle(e);return Number.parseFloat(t)<1.6*Number.parseFloat(n)});for(let e of n)e.setAttribute(`data-furifont`,``)};t([document.body]),new MutationObserver(e=>t(e.flatMap(e=>e.type===`characterData`?[e.target]:[...e.addedNodes]))).observe(document.body,{childList:!0,characterData:!0,subtree:!0})}if(a.family=e,a.sheet.replaceSync(`*{font-family:"${e}",${t===`sans`?`sans-serif`:`serif`}!important}[data-furifont]{line-height:normal!important}`),a.sheet.disabled=!1,!await new FontFace(e,`local("${e} Regular"),local("${e}")`).load().then(()=>!0,()=>!1))try{document.fonts.add(await new FontFace(e,i?await i(n):`url("${n}")`).load())}catch{a.sheet.disabled=!0,a.family=``,document.querySelector(`furifont-toast`)?.remove();let e=document.createElement(`furifont-toast`),t=e.attachShadow({mode:`open`}),i=new CSSStyleSheet;i.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}button{padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}`),t.adoptedStyleSheets=[i];let o=Object.assign(document.createElement(`a`),{href:new URL(`/#downloads`,n).href,target:`_blank`,rel:`noopener`,textContent:r.download}),s=Object.assign(document.createElement(`button`),{ariaLabel:r.close,textContent:`×`,onclick:()=>e.remove()}),c=document.createElement(`p`);c.append(r.message,` `,o);let l=Object.assign(document.createElement(`div`),{role:`alert`});l.append(c,s),t.append(l),document.body.append(e),setTimeout(()=>e.remove(),1e4)}}}var Ae={class:`grid lg:grid-cols-[340px_1fr]`},je={class:`flex flex-col gap-5 border-b border-base p-6 lg:border-b-0 lg:border-r`},Me={class:`text-sm leading-relaxed color-muted`},Ne={class:`grid sm:grid-cols-2`},Pe={class:`flex flex-col gap-3 border-b border-base p-6 sm:border-b-0 sm:border-r`},$={class:`label`},Fe=[`href`],Ie={class:`text-sm leading-relaxed color-muted`},Le={class:`flex flex-col gap-3 p-6`},Re={class:`label`},ze={class:`text-sm leading-relaxed color-muted`},Be=Object.assign(i({__name:`DemoAnyPage`,setup(i){let{t:o}=x(),{face:s,script:l,family:u,faces:m,scripts:h}=K(),_=a(()=>{let e={message:o(`anyPage.toast.message`),download:o(`anyPage.toast.download`),close:o(`anyPage.toast.close`)};return`javascript:${encodeURIComponent(`void (${ke})(${JSON.stringify(u.value)},${JSON.stringify(C(u.value))},${JSON.stringify(e)})`)}`}),y=`${g().app.baseURL}furifont.user.js`;return(i,a)=>{let o=j,g=A,b=P;return c(),n(`div`,Ae,[t(`div`,je,[t(`p`,Me,r(i.$t(`anyPage.body`)),1),p(g,{label:i.$t(`playground.script`)},{default:d(()=>[p(o,{modelValue:f(l),"onUpdate:modelValue":a[0]||=e=>v(l)?l.value=e:null,label:i.$t(`playground.script`),options:f(h)},null,8,[`modelValue`,`label`,`options`])]),_:1},8,[`label`]),p(g,{label:i.$t(`playground.face`)},{default:d(()=>[p(o,{modelValue:f(s),"onUpdate:modelValue":a[1]||=e=>v(s)?s.value=e:null,label:i.$t(`playground.face`),options:f(m)},null,8,[`modelValue`,`label`,`options`])]),_:1},8,[`label`])]),t(`div`,Ne,[t(`div`,Pe,[t(`span`,$,r(i.$t(`anyPage.bookmarklet`)),1),t(`a`,{href:f(_),class:`btn-solid focus-ring self-start`},[a[2]||=t(`span`,{class:`i-ph-bookmark-simple`},null,-1),e(` `+r(f(u).family),1)],8,Fe),t(`p`,Ie,r(i.$t(`anyPage.bookmarkletHint`)),1)]),t(`div`,Le,[t(`span`,Re,r(i.$t(`anyPage.userscript`)),1),p(b,{href:y,icon:`i-ph-puzzle-piece`,class:`self-start`},{default:d(()=>[e(r(i.$t(`anyPage.install`)),1)]),_:1}),t(`p`,ze,r(i.$t(`anyPage.userscriptHint`)),1)])])])}}}),{__name:`DemoAnyPage`}),Ve=i({__name:`index`,setup(e){function t(){document.getElementById(`downloads`)?.scrollIntoView({behavior:`smooth`})}let r=w();return h(()=>{r.hash===`#downloads`&&t()}),(e,r)=>{let i=G,a=ne,o=k,s=se,l=me,u=Oe,f=Be;return c(),n(`div`,null,[p(i,{onDownload:t}),p(o,{index:`01`,title:e.$t(`sections.try`)},{default:d(()=>[p(a)]),_:1},8,[`title`]),p(o,{index:`02`,title:e.$t(`sections.how`)},{default:d(()=>[p(s)]),_:1},8,[`title`]),p(o,{index:`03`,title:e.$t(`sections.selectors`)},{default:d(()=>[p(l)]),_:1},8,[`title`]),p(o,{id:`downloads`,index:`04`,title:e.$t(`sections.download`)},{default:d(()=>[p(u)]),_:1},8,[`title`]),p(o,{index:`05`,title:e.$t(`sections.anyPage`)},{default:d(()=>[p(f)]),_:1},8,[`title`])])}}});export{Ve as default};
@@ -1 +0,0 @@
1
- var e={meta:{title:`Furifont:ふりがなを表示するフォント`,description:`ふりがなを自分で表示する日本語フォントです。`},nav:{demo:`はじめに`,customize:`カスタマイズ`,github:`GitHub リポジトリ`,light:`ライトモードに切り替え`,dark:`ダークモードに切り替え`,language:`言語`,rubyOff:`ふりがなを隠す`,rubyOn:`ふりがなを表示`},footer:{fonts:`フォントは{license}です。Source Han Sans と Source Han Serif から作りました。`,data:`読みのデータは {jmdict}、{jmnedict}、{kanjidic}(EDRDG)、{furigana} から取っています。ライセンスは CC BY-SA 4.0 です。`,code:`ツールは MIT ライセンスです。`,source:`GitHub のソースコード`,made:`制作:{author}`,supported:`{vercel} と{sponsors}の支援を受けています`,sponsors:`スポンサー`},copied:`コピーしました`,shuffle:`別の例文を表示`,editable:`サンプルの文章です。自由に書き換えられます。`,scripts:{hiragana:`ひらがな`,hepburn:`ローマ字`},faces:{sans:`ゴシック`,serif:`明朝`},hero:{title1:`ふりがなは、`,title2:`フォントが振る。`,body:`Furifont は、フォントそのものにふりがなを表示する日本語フォントです。言葉ごとの読み方に合わせて、リガチャで切り替えます。カスタムフォントに対応していれば、どこでも使えます。`,download:`フォントをダウンロード`,build:`自分でビルドする`},sections:{try:`試してみる`,how:`仕組み`,selectors:`読みを選ぶ`,download:`ダウンロード`,anyPage:`どのページでも`},playground:{script:`ふりがなの文字`,face:`フォントの種類`,size:`サイズ / {size}px`,ruby:`ふりがな`,textHint:`文章をクリックすると編集できます。`,copy:`テキストをコピー`},how:{build:{title:`カスタムビルド`,body:`Furifont は、源ノ角ゴシックまたは源ノ明朝を元に作ります。ビルドの工程で、数千の言葉の辞書を読み込み、ふりがなを新しいグリフとして描き込みます。出来上がるのは普通のフォントファイルです。JavaScript もプラグインも要りません。`},ligatures:{title:`仕事をするのはリガチャ`,body:`フォントには、言葉ごとにリガチャが入っています。今日は、上に「きょう」が付いた一つのグリフになります。置き換えは文字を描くときに行われるので、文章そのものは変わりません。`},longest:{title:`長い単語を優先`,body:`Furifont は、漢字のまとまりを、数千の一般的な言葉の一覧と照らし合わせます。長い言葉から順に試します。たとえば、日本語は日本より先に選ばれます。今日は一つの言葉として、きょうと読みます。`},bare:{title:`迷ったら付けない`,body:`漢字が一つだけのときは、読み方が一つにはっきり決まる場合だけ、ふりがなを付けます。大人気は、だいにんきとも、おとなげとも読めるので、ふりがなを付けません。`}},selectors:{body:`読み方が複数ある言葉があります。Furifont は、一番よく使う読み方を表示します。別の読み方にするには、最初の漢字のすぐ後ろに異体字セレクタ(目に見えない文字)を書きます。VS226 は読み 1、VS227 は読み 2 で、以降も同じです。VS225 はふりがなを消します。`,lookUp:`読みを調べる`,default:`既定`,reading2:`読み 2(VS227)`,none:`ルビなし(VS225)`},downloads:{family:`ファミリー`,ruby:`ルビ`,buildOwn:`自分でフォントを作ることもできます。元のフォント、言葉の数、ふりがなの文字、大きさを選べます。`},anyPage:{body:`どんなウェブサイトでも Furifont で表示できます。漢字がある行には、ふりがなのための余白が付きます。パソコンに Furifont が入っていれば、ダウンロードは要りません。入っていなければ、このサイトからフォントを読み込みます。初回は約 5 MB です。`,bookmarklet:`ブックマークレット`,bookmarkletHint:`ブックマークバーにドラッグしてください。好きなページでクリックすると、Furifont がオンになります。もう一度クリックすると、オフになります。X や GitHub のように、他のサイトのフォントを読み込めないサイトがあります。そのようなサイトでは、パソコンに Furifont をインストールしてください。`,userscript:`ユーザースクリプト`,install:`ユーザースクリプトをインストール`,userscriptHint:`Tampermonkey や Violentmonkey(小さなプログラムを動かすブラウザの拡張機能)で使えます。日本語のページで、Furifont が自動でオンになります。他のサイトのフォントを読み込めないサイトでも動きます。メニューから、別の Furifont に切り替えたり、オフにしたりできます。`,toast:{message:`このページでは Furifont のフォントを読み込めませんでした。X や GitHub のように、他のサイトのフォントを読み込めないサイトがあります。そのようなサイトでは、パソコンに Furifont をインストールする必要があります。`,download:`フォントをダウンロード`,close:`閉じる`}},reference:{eyebrow:`リファレンス`,title:`読みを選ぶ`,body:`Furifont は、言葉の一番よく使う読み方を表示します。別の読み方にするには、言葉の最初の漢字のすぐ後ろに異体字セレクタ(目に見えない文字)を書きます。VS226 は読み 1、VS227 は読み 2 で、以降も同じです。漢字が一つだけの場合は、その漢字の読み方を選びます。VS225 は、ふりがなのない漢字を表示します。`,search:`単語や漢字を検索:市場、今日、生`,searchLabel:`読みを検索`,hint:`読みをクリックすると、セレクタ付きの単語をコピーします。`,unavailable:`リファレンスは用意済みのフォントに入っていますが、ここでは読み込めませんでした({error})。{command} でフォントを作るか、カスタマイズを開いてください。`,loading:`読み込み中`,words:`複数の読みを持つ単語 / {count}`,kanji:`漢字 / {count}`,copyWith:`{text} を {selector} 付きでコピー`,default:`既定`},customize:{connecting:`furifont dev に接続しています`,title:`カスタマイズ`,offline:{eyebrow:`カスタマイズ / オフライン`,title:`自分だけの Furifont を作る`,body:`カスタマイズは、あなたのパソコンで動くツールです。元のフォントを読み込み、作ったフォントを保存します。好きなフォルダで起動すると、このページがつながった状態で開きます。ライブプレビュー、辞書、ビルドボタンが使えます。作ったフォントは {folder} に保存されます。`,needs:`Node 22.18 以上が必要です(JavaScript のツールを動かす無料のプログラムです)。`,run:`好きなフォルダでカスタマイズを起動する`},auth:{eyebrow:`カスタマイズ / ロック中`,title:`ターミナルのコードを入力`,body:`{command} は、起動したターミナル(コマンドを入力する画面)に 6 桁のコードを表示しました。`,code:`コード`,failed:`コードが一致しません。ターミナルを確認して、もう一度お試しください。`,unlock:`ロックを解除`},sections:{preview:`プレビュー`,build:`ビルド`,dictionary:`辞書`,words:`あなたの単語`},options:{family:`フォントの名前`,base:`ベースフォント`,baseHint:`ふりがなを付ける元のフォントです。Source Han Serif JP Bold のようにダウンロードするフォントか、パソコン上の別のフォントファイルのパスを指定します。`,script:`ふりがなの文字`,hiragana:`ひらがな`,katakanaOn:`カタカナ`,hepburn:`ローマ字`,skip:`よく出る言葉を除く`,skipHint:`読む人がすでに知っている言葉には、ふりがなを付けません。新聞の言葉の一覧を、よく出る順に 500 語ずつ数えます。`,words:`続けてふりがなを付ける言葉の数`,wordsHint:`一覧で次に来る言葉です。下の語彙と合わせて、{count} 語にふりがなが付きます。`,jlpt:`JLPT の言葉を除く`,jlptHint:`JLPT(日本語能力試験)の語彙リストで、この級までの言葉にはふりがなを付けません。N5 がいちばんやさしい級です。`,none:`なし`,sources:`次の語彙も含める`,source:{spec1:{name:`日常語`,hint:`JMdict「spec1」:他の一覧に載っていない、一般的な言葉です。例:日本。`},ichi1:{name:`基本の言葉`,hint:`JMdict「ichi1」:「一万語」リスト(基本の言葉の一覧)の中で、特によく使う言葉です。`},news1:{name:`新聞の言葉`,hint:`JMdict「news1」:新聞に最もよく出る 12,000 語です。`},gai1:{name:`外来語`,hint:`JMdict「gai1」:他の言語から入った、よく使う言葉です。`},places:{name:`地名`,hint:`JMnedict:駅名と地名です。一般的な言葉に当てはまらない部分で使います。`}},isolated:`漢字一文字にもふりがなを付ける`,share:`漢字一文字のときの確かさ`,shareHint:`漢字が一つだけのとき、辞書の中でその読み方が少なくともこの割合を占める場合だけ、ふりがなを付けます。0.5 から 1 の数を入れます。大きいほど、ふりがなが付く漢字は減ります。`,rubyScale:`ふりがなの大きさ(漢字の何倍か)`,rubyGap:`漢字の上の余白(em)`,squeeze:`最も狭くする幅(通常の何倍か)`,maxWidth:`ふりがなの最大幅(em)`,reset:`初期設定に戻す`,resetHint:`カスタマイズが読み込んだ設定に戻します。追加した言葉はそのまま残ります。`},preview:{compiling:`プレビューを作っています`,size:`プレビューのサイズ`,stats:`{glyphs} グリフ / {ms} ms`},build:{words:`単語`,places:`地名`,ambiguous:`複数の読み`,lone:`漢字一文字`,protected:`あなたの設定`,glyphs:`ルビのグリフ`,rules:`ルール`,planning:`計画中`,estimate:`≈ {woff2} WOFF2 · {otf} OTF`,estimating:`サイズを見積もり中`,run:`フォントをビルド`,save:`設定を保存`},dictionary:{search:`辞書を検索:今日、生`,results:`{count} 語`,hint:`これらの言葉には、よく使う読み方が複数あります。一つを固定すると、それが標準の読み方になります。`,noTag:`一般的な言葉ではない`,restore:`元に戻す`,remove:`ふりがなを付けない`},custom:{placeholder:`日[に]本[ほん] または 今日[きょう]`,label:`追加する単語`,add:`単語を追加`,added:`追加 / {count}`,pinned:`固定 / {count}`,removed:`ふりがなを付けない / {count}`,none:`なし`,takeOut:`{item} を外す`}}};export{e as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./C1JLNGZo.js","./y07Wd5I9.js","./KJcTz4n2.js","./D3cEssU1.js","./entry.DvQk758Q.css"])))=>i.map(i=>d[i]);
2
- import{$ as e,A as t,B as n,C as r,E as i,Ht as a,N as o,R as s,S as c,T as l,V as u,W as d,X as f,Y as p,Z as m,_ as h,_t as g,at as _,bt as v,ft as y,gt as b,j as x,mt as S,ot as C,q as w,rt as T,s as E,tt as D,ut as O,w as k,zt as A}from"./KJcTz4n2.js";import{o as j,s as M}from"./D3cEssU1.js";import{l as N,n as P}from"#entry";import{a as F,c as I,d as L,f as R,l as z,n as ee,o as te,p as ne,s as re,t as ie,u as ae}from"./CVJR3s5f.js";import{a as oe,i as se,n as ce,o as le,r as B,s as ue,t as V}from"./Bewt6owv.js";var de={class:`grid gap-8 px-6 py-16 lg:grid-cols-2`},fe={class:`flex flex-col gap-4`},pe={class:`label`},me={class:`display text-4xl font-semibold`},he={class:`flex flex-col justify-center gap-5`},ge={class:`text-xs color-muted`},_e={class:`flex flex-col gap-2`},ve={class:`label`},H=`npx furifont dev`,ye=Object.assign(o({__name:`CustomizeUnavailable`,setup(t){let{copied:n,copy:o}=ne();return(t,s)=>{let c=e(`i18n-t`);return p(),i(`div`,de,[r(`div`,fe,[r(`span`,pe,a(t.$t(`customize.offline.eyebrow`)),1),r(`h1`,me,a(t.$t(`customize.offline.title`)),1),x(c,{keypath:`customize.offline.body`,tag:`p`,class:`max-w-[52ch] text-[15px] leading-relaxed color-muted`},{folder:_(()=>[...s[1]||=[r(`code`,{class:`font-mono`},`./fonts`,-1)]]),_:1})]),r(`div`,he,[r(`p`,ge,a(t.$t(`customize.offline.needs`)),1),r(`div`,_e,[r(`span`,ve,a(t.$t(`customize.offline.run`)),1),r(`button`,{type:`button`,class:`focus-ring flex items-center justify-between gap-3 border border-strong px-4 py-3 text-left font-mono text-sm`,onClick:s[0]||=e=>v(o)(H)},[r(`span`,{class:`break-all`},`$ `+a(H)),r(`span`,{class:A([v(n)===H?`i-ph-check`:`i-ph-copy`,`shrink-0 color-muted`])},null,2)])])])])}}}),{__name:`CustomizeUnavailable`}),U=`furifont`,W=350,be=`furifont:customize:`;function G(e,t){let n;return()=>{clearTimeout(n),n=setTimeout(e,t)}}function K(e){return e instanceof Error?e.message:String(e)}var q=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function J(e,t){let n={};for(let r of new Set([...Object.keys(e),...Object.keys(t)])){let[i,a]=[e[r],t[r]];if(q(i)&&q(a)){let e=J(i,a);Object.keys(e).length&&(n[r]=e)}else JSON.stringify(i)!==JSON.stringify(a)&&(n[r]=i??null)}return n}function Y(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];r===null?delete n[e]:n[e]=q(r)&&q(t)?Y(t,r):r}return n}var xe=re(z({...te.entries,base:ae(R(),I())}));function Se(e,t){let n;try{n=L(xe,Y(t,JSON.parse(localStorage.getItem(e)??`{}`)))}catch{}return n?.success?n.output:(localStorage.removeItem(e),structuredClone(t))}function Ce(){let{devCustomizeBase:e}=E().public,t=S(`connecting`),n=b(),r=S({}),i=b(),a=S(le[0].text),o=y({loading:!1}),s=y({loading:!1}),c=y({running:!1,files:[]}),l=S(),u,f,p,m=0,h=0,_=0,v={},x=``;async function C(){i.value=await f.call(`report`,g(r.value)).catch(()=>i.value)}async function D(){let e=++_,t=await f.call(`estimate`,g(r.value)).catch(()=>void 0);e===_&&Object.assign(s,{size:t,loading:!1})}async function O(){let e=++m;o.loading=!0;try{let t=await f.call(`preview`,g(r.value),a.value);if(e!==m)return;let n=Uint8Array.from(atob(t.font),e=>e.charCodeAt(0)),i=new FontFace(`Furifont Preview ${e}`,n);await i.load(),document.fonts.add(i),p&&document.fonts.delete(p),p=i,Object.assign(o,{family:i.family,ms:t.ms,glyphs:t.stats.glyphs,error:void 0})}catch(t){e===m&&(o.error=K(t))}finally{e===m&&(o.loading=!1)}}let k=G(async()=>{let e=++h;s.loading=!0,await Promise.all([C(),O()]),e===h&&D()},W);T(r,k,{deep:!0}),T(a,G(O,W));function A(){let e=J(g(r.value),v);Object.keys(e).length?localStorage.setItem(x,JSON.stringify(e)):localStorage.removeItem(x)}T(r,A,{deep:!0});async function j(){try{let{connectDevframe:e}=await N(async()=>{let{connectDevframe:e}=await import(`./C1JLNGZo.js`);return{connectDevframe:e}},__vite__mapDeps([0,1,2,3,4]),import.meta.url);u=await e(void 0),f=u.scope(U).rpc}catch{t.value=`unavailable`;return}await u.ensureTrusted(1500).catch(()=>!1)?await P():t.value=`locked`}async function M(e){return!u||!await u.requestTrustWithCode(e)?!1:(await P(),!0)}async function P(){n.value=await f.call(`state`),v=n.value.config,x=be+n.value.configPath,r.value=Se(x,v),t.value=`ready`,k()}function F(){r.value={...structuredClone(v),words:g(r.value.words)}}async function I(){Object.assign(c,{running:!0,files:[],error:void 0,step:`plan`,done:null,total:null});try{let{streamId:e}=await f.call(`build`,g(r.value));for await(let t of u.scope(U).rpc.streaming.subscribe(`build`,e))t.type===`progress`?Object.assign(c,{step:t.step,done:t.done,total:t.total}):t.type===`done`?c.files=t.files:c.error=t.message}catch(e){c.error=K(e)}finally{c.running=!1}}async function L(){l.value=await f.call(`save`,g(r.value)),v=structuredClone(g(r.value)),A()}function R(e){return f.call(`search`,e)}function z(e,t){let n=r.value.words??={},i=n[e]??[];n[e]=i.includes(t)?i.filter(e=>e!==t):[...i,t]}return w(j),d(()=>{p&&document.fonts.delete(p)}),{status:t,state:n,config:r,report:i,text:a,preview:o,estimate:s,build:c,savedTo:l,unlock:M,runBuild:I,save:L,reset:F,search:R,toggleWord:z}}var X=Symbol(`customize`);function we(){let e=Ce();return f(X,e),e}function Z(){let e=s(X);if(!e)throw Error(`useCustomize() is only available inside the customize page`);return e}var Te={class:`label`},Ee={class:`text-2xl font-semibold tracking-tight`},De=[`aria-label`],Oe={key:0,class:`text-sm`},ke=[`disabled`],Ae=Object.assign(o({__name:`CustomizeAuth`,setup(t){let{unlock:n}=Z(),o=S(``),s=S(!1),c=S(!1);async function u(){c.value=!0,s.value=!await n(o.value.trim()),c.value=!1}return(t,n)=>{let d=e(`i18n-t`);return p(),i(`form`,{class:`mx-auto flex max-w-sm flex-col gap-4 px-6 py-24`,onSubmit:M(u,[`prevent`])},[r(`span`,Te,a(t.$t(`customize.auth.eyebrow`)),1),r(`h1`,Ee,a(t.$t(`customize.auth.title`)),1),x(d,{keypath:`customize.auth.body`,tag:`p`,class:`text-sm color-muted`},{command:_(()=>[...n[1]||=[r(`code`,{class:`font-mono`},`furifont dev`,-1)]]),_:1}),C(r(`input`,{"onUpdate:modelValue":n[0]||=e=>O(o)?o.value=e:null,inputmode:`numeric`,autocomplete:`one-time-code`,maxlength:`6`,"aria-label":t.$t(`customize.auth.code`),class:`input text-center font-mono text-xl tracking-[0.5em]`},null,8,De),[[j,v(o)]]),v(s)?(p(),i(`p`,Oe,a(t.$t(`customize.auth.failed`)),1)):l(``,!0),r(`button`,{type:`submit`,class:`btn-solid focus-ring`,disabled:v(c)||v(o).trim().length!==6},a(t.$t(`customize.auth.unlock`)),9,ke)],32)}}}),{__name:`CustomizeAuth`}),je={class:`flex flex-col gap-1.5`},Me={class:`label flex justify-between gap-3`},Ne={class:`color-base tabular-nums`},Pe={key:0,class:`text-xs color-muted`},Fe=Object.assign(o({__name:`UiRange`,props:n({label:{},display:{},hint:{},min:{},max:{},step:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=D(e,`modelValue`);return(n,o)=>{let s=B;return p(),i(`label`,je,[r(`span`,Me,[r(`span`,null,a(e.label),1),r(`span`,Ne,a(e.display),1)]),x(s,{modelValue:t.value,"onUpdate:modelValue":o[0]||=e=>t.value=e,min:e.min,max:e.max,step:e.step},null,8,[`modelValue`,`min`,`max`,`step`]),e.hint?(p(),i(`span`,Pe,a(e.hint),1)):l(``,!0)])}}}),{__name:`UiRange`}),Ie={id:`customize-base-fonts`},Le=[`value`],Re={class:`flex flex-col gap-2`},ze={class:`label mb-1.5`},Be={class:`flex flex-wrap gap-2`},Ve=[`title`,`aria-pressed`,`onClick`],He=[`disabled`],Ue={class:`grid grid-cols-2 gap-4`},Q=500,$=48,We=Object.assign(o({__name:`CustomizeOptions`,setup(e){let{t:n}=P(),{config:o,state:s,report:l,reset:u}=Z(),d=c(()=>o.value.nfMin??1),f=c(()=>o.value.nfMax??30),g=c({get:()=>(d.value-1)*Q,set:e=>{let t=f.value-d.value;o.value.nfMin=e/Q+1,o.value.nfMax=Math.min($,o.value.nfMin+t)}}),y=c({get:()=>(f.value-d.value+1)*Q,set:e=>o.value.nfMax=d.value+e/Q-1}),b=c(()=>l.value&&l.value.stats.patterns-l.value.stats.places),S=c({get:()=>o.value.skipJlpt?F.indexOf(o.value.skipJlpt)+1:0,set:e=>{o.value.skipJlpt=F[e-1]}}),w=c(()=>S.value>1?`N5–${F[S.value-1]}`:F[S.value-1]),T=c({get:()=>o.value.isolated??!0,set:e=>o.value.isolated=e}),E=c(()=>[`hiragana`,`katakanaOn`,`hepburn`].map(e=>({value:e,label:n(`customize.options.${e}`)}))),D=[`spec1`,`ichi1`,`news1`,`gai1`,`places`],k=c(()=>o.value.metrics??{}),N=c({get:()=>o.value.rubyScript??`hiragana`,set:e=>o.value.rubyScript=e});function I(e){return e===`places`?o.value.places??!0:(o.value.selectTags??[`spec1`]).includes(e)}function L(e){if(e===`places`){o.value.places=!I(e);return}let t=o.value.selectTags??[`spec1`];o.value.selectTags=t.includes(e)?t.filter(t=>t!==e):[...t,e]}return(e,n)=>{let c=oe,l=se,f=Fe,P=ce,R=V;return p(),i(`form`,{class:`flex flex-col gap-5 p-6`,onSubmit:n[12]||=M(()=>{},[`prevent`])},[x(c,{label:e.$t(`customize.options.family`)},{default:_(()=>[C(r(`input`,{"onUpdate:modelValue":n[0]||=e=>v(o).family=e,class:`input`,placeholder:`Furifont Sans`},null,512),[[j,v(o).family]])]),_:1},8,[`label`]),x(c,{label:e.$t(`customize.options.base`),hint:e.$t(`customize.options.baseHint`)},{default:_(()=>[C(r(`input`,{"onUpdate:modelValue":n[1]||=e=>v(o).base=e,class:`input`,list:`customize-base-fonts`,placeholder:`Source Han Sans JP Regular`},null,512),[[j,v(o).base]]),r(`datalist`,Ie,[(p(!0),i(h,null,m(v(s)?.baseFonts,e=>(p(),i(`option`,{key:e,value:e},null,8,Le))),128))])]),_:1},8,[`label`,`hint`]),x(c,{label:e.$t(`customize.options.script`)},{default:_(()=>[x(l,{modelValue:v(N),"onUpdate:modelValue":n[2]||=e=>O(N)?N.value=e:null,label:e.$t(`customize.options.script`),options:v(E)},null,8,[`modelValue`,`label`,`options`])]),_:1},8,[`label`]),n[13]||=r(`div`,{class:`h-px bg-[var(--ff-line)]`},null,-1),x(f,{modelValue:v(g),"onUpdate:modelValue":n[3]||=e=>O(g)?g.value=e:null,label:e.$t(`customize.options.skip`),display:v(g)?v(g).toLocaleString(`en`):e.$t(`customize.options.none`),hint:e.$t(`customize.options.skipHint`),min:0,max:47*Q,step:Q},null,8,[`modelValue`,`label`,`display`,`hint`,`max`]),x(f,{modelValue:v(y),"onUpdate:modelValue":n[4]||=e=>O(y)?y.value=e:null,label:e.$t(`customize.options.words`),display:v(y).toLocaleString(`en`),hint:v(b)===void 0?void 0:e.$t(`customize.options.wordsHint`,{count:v(b).toLocaleString(`en`)}),min:Q,max:($-v(d)+1)*Q,step:Q},null,8,[`modelValue`,`label`,`display`,`hint`,`max`]),x(f,{modelValue:v(S),"onUpdate:modelValue":n[5]||=e=>O(S)?S.value=e:null,label:e.$t(`customize.options.jlpt`),display:v(w)??e.$t(`customize.options.none`),hint:e.$t(`customize.options.jlptHint`),min:0,max:v(F).length},null,8,[`modelValue`,`label`,`display`,`hint`,`max`]),r(`fieldset`,Re,[r(`legend`,ze,a(e.$t(`customize.options.sources`)),1),r(`div`,Be,[(p(),i(h,null,m(D,t=>r(`button`,{key:t,type:`button`,class:A([`focus-ring border px-2 py-1 text-xs transition-colors`,I(t)?`border-strong bg-inverse color-inverse`:`border-base color-muted hover:border-strong`]),title:e.$t(`customize.options.source.${t}.hint`),"aria-pressed":I(t),onClick:e=>L(t)},a(e.$t(`customize.options.source.${t}.name`)),11,Ve)),64))])]),x(P,{modelValue:v(T),"onUpdate:modelValue":n[6]||=e=>O(T)?T.value=e:null},{default:_(()=>[t(a(e.$t(`customize.options.isolated`)),1)]),_:1},8,[`modelValue`]),x(c,{label:e.$t(`customize.options.share`),hint:e.$t(`customize.options.shareHint`)},{default:_(()=>[C(r(`input`,{"onUpdate:modelValue":n[7]||=e=>v(o).isolatedMinShare=e,type:`number`,min:`0.5`,max:`1`,step:`0.05`,class:`input font-mono disabled:opacity-40`,placeholder:`0.8`,disabled:!v(T)},null,8,He),[[j,v(o).isolatedMinShare,void 0,{number:!0}]])]),_:1},8,[`label`,`hint`]),n[14]||=r(`div`,{class:`h-px bg-[var(--ff-line)]`},null,-1),r(`div`,Ue,[x(c,{label:e.$t(`customize.options.rubyScale`)},{default:_(()=>[C(r(`input`,{"onUpdate:modelValue":n[8]||=e=>v(k).rubyScale=e,type:`number`,min:`0.2`,max:`0.8`,step:`0.05`,class:`input font-mono`,placeholder:`0.4`},null,512),[[j,v(k).rubyScale,void 0,{number:!0}]])]),_:1},8,[`label`]),x(c,{label:e.$t(`customize.options.rubyGap`)},{default:_(()=>[C(r(`input`,{"onUpdate:modelValue":n[9]||=e=>v(k).rubyGap=e,type:`number`,min:`0`,max:`0.5`,step:`0.01`,class:`input font-mono`,placeholder:`0.05`},null,512),[[j,v(k).rubyGap,void 0,{number:!0}]])]),_:1},8,[`label`]),x(c,{label:e.$t(`customize.options.squeeze`)},{default:_(()=>[C(r(`input`,{"onUpdate:modelValue":n[10]||=e=>v(k).compressionFloor=e,type:`number`,min:`0.3`,max:`1`,step:`0.05`,class:`input font-mono`,placeholder:`0.6`},null,512),[[j,v(k).compressionFloor,void 0,{number:!0}]])]),_:1},8,[`label`]),x(c,{label:e.$t(`customize.options.maxWidth`)},{default:_(()=>[C(r(`input`,{"onUpdate:modelValue":n[11]||=e=>v(k).maxRubyWidth=e,type:`number`,min:`1`,max:`3`,step:`0.1`,class:`input font-mono`,placeholder:`1.6`},null,512),[[j,v(k).maxRubyWidth,void 0,{number:!0}]])]),_:1},8,[`label`])]),x(R,{variant:`ghost`,icon:`i-ph-arrow-counter-clockwise`,class:`self-start`,title:e.$t(`customize.options.resetHint`),onClick:v(u)},{default:_(()=>[t(a(e.$t(`customize.options.reset`)),1)]),_:1},8,[`title`,`onClick`])],32)}}}),{__name:`CustomizeOptions`}),Ge={class:`relative min-h-56 px-6 py-8`},Ke={key:0,class:`mt-4 font-mono text-xs`},qe={class:`flex flex-wrap items-center gap-4 border-t border-base px-6 py-3`},Je={class:`text-xs color-muted`},Ye={class:`font-mono text-xs color-muted tabular-nums`},Xe=Object.assign(o({__name:`CustomizePreview`,setup(e){let{text:t,preview:n}=Z(),o=S(32);return(e,s)=>{let c=V,u=ee,d=B;return p(),i(`div`,null,[r(`div`,Ge,[x(c,{variant:`ghost`,icon:`i-ph-shuffle`,class:`absolute right-3 top-3 w-9 px-0`,"aria-label":e.$t(`shuffle`),title:e.$t(`shuffle`),onClick:s[0]||=n=>t.value=(`otherSample`in e?e.otherSample:v(ue))(v(t)).text},null,8,[`aria-label`,`title`]),x(u,{text:v(t),"onUpdate:text":s[1]||=e=>O(t)?t.value=e:null,family:v(n).family,size:v(o),class:A(v(n).loading&&`opacity-60`)},null,8,[`text`,`family`,`size`,`class`]),v(n).error?(p(),i(`p`,Ke,a(v(n).error),1)):l(``,!0)]),r(`div`,qe,[r(`span`,Je,a(v(n).loading?e.$t(`customize.preview.compiling`):e.$t(`playground.textHint`)),1),x(d,{modelValue:v(o),"onUpdate:modelValue":s[2]||=e=>O(o)?o.value=e:null,min:16,max:64,"aria-label":e.$t(`customize.preview.size`),class:`ml-auto w-28`},null,8,[`modelValue`,`aria-label`]),r(`span`,Ye,a(v(n).ms===void 0?``:e.$t(`customize.preview.stats`,{glyphs:v(n).glyphs??0,ms:v(n).ms})),1)])])}}}),{__name:`CustomizePreview`}),Ze={class:`flex flex-col gap-1 px-4 py-3`},Qe={class:`font-mono text-xl tabular-nums`},$e={class:`label`},et=Object.assign(o({__name:`UiStat`,props:{label:{},value:{}},setup(e){return(t,n)=>(p(),i(`div`,Ze,[r(`span`,Qe,a(typeof e.value==`number`?e.value.toLocaleString(`en`):e.value),1),r(`span`,$e,a(e.label),1)]))}}),{__name:`UiStat`}),tt={class:`grid grid-cols-3 border-b border-base lg:grid-cols-7`},nt={key:0,class:`label col-span-full px-6 py-4`},rt={key:0,class:`flex flex-wrap gap-3 px-6 pt-4 font-mono text-xs color-muted tabular-nums`},it={key:0},at={key:1},ot={class:`flex flex-wrap items-center gap-3 px-6 py-4`},st=[`disabled`],ct={key:0,class:`font-mono text-xs color-muted`},lt={key:1,class:`border-t border-base px-6 py-3 font-mono text-xs`},ut={key:2,class:`border-t border-base`},dt=[`href`],ft={class:`font-mono text-xs color-muted tabular-nums`},pt=Object.assign(o({__name:`CustomizeBuild`,setup(e){let{t:n}=P(),{report:o,estimate:s,build:d,savedTo:f,runBuild:g,save:_}=Z(),y=e=>`${(e/1024/1024).toFixed(2)} MB`,b=c(()=>{let e=o.value?.stats;return e?[{label:n(`customize.build.words`),value:e.patterns-e.places},{label:n(`customize.build.places`),value:e.places},{label:n(`customize.build.ambiguous`),value:e.ambiguous},{label:n(`customize.build.lone`),value:e.isolated},{label:n(`customize.build.protected`),value:e.protectedAnnotated+e.protectedBare},{label:n(`customize.build.glyphs`),value:e.glyphs},{label:n(`customize.build.rules`),value:e.rules}]:[]}),x=c(()=>d.total?`${d.step} ${d.done}/${d.total}`:d.step);return(e,n)=>{let o=et;return p(),i(`div`,null,[r(`div`,tt,[(p(!0),i(h,null,m(v(b),e=>(p(),k(o,u({key:e.label},{ref_for:!0},e,{class:`border-r border-base last:border-r-0`}),null,16))),128)),v(b).length?l(``,!0):(p(),i(`span`,nt,a(e.$t(`customize.build.planning`)),1))]),v(s).size||v(s).loading?(p(),i(`p`,rt,[v(s).size?(p(),i(`span`,it,a(e.$t(`customize.build.estimate`,{woff2:y(v(s).size.woff2),otf:y(v(s).size.otf)})),1)):l(``,!0),v(s).loading?(p(),i(`span`,at,a(e.$t(`customize.build.estimating`)),1)):l(``,!0)])):l(``,!0),r(`div`,ot,[r(`button`,{type:`button`,class:`btn-solid focus-ring`,disabled:v(d).running,onClick:n[0]||=(...e)=>v(g)&&v(g)(...e)},[r(`span`,{class:A(v(d).running?`i-ph-circle-notch animate-spin`:`i-ph-hammer`)},null,2),t(` `+a(v(d).running?v(x):e.$t(`customize.build.run`)),1)],8,st),r(`button`,{type:`button`,class:`btn-outline focus-ring`,onClick:n[1]||=(...e)=>v(_)&&v(_)(...e)},[n[2]||=r(`span`,{class:`i-ph-floppy-disk`},null,-1),t(` `+a(e.$t(`customize.build.save`)),1)]),v(f)?(p(),i(`span`,ct,a(v(f)),1)):l(``,!0)]),v(d).error?(p(),i(`p`,lt,a(v(d).error),1)):l(``,!0),v(d).files.length?(p(),i(`ul`,ut,[(p(!0),i(h,null,m(v(d).files,e=>(p(),i(`li`,{key:e.name,class:`flex items-center gap-4 border-b border-base px-6 py-2 last:border-b-0`},[r(`a`,{href:e.url,download:``,class:`focus-ring font-mono text-sm underline underline-offset-3`},a(e.name),9,dt),r(`span`,ft,a(y(e.bytes)),1)]))),128))])):l(``,!0)])}}}),{__name:`CustomizeBuild`}),mt={class:`flex flex-col gap-2 border-b border-base p-6`},ht=[`placeholder`,`aria-label`],gt={class:`text-xs color-muted`},_t={class:`max-h-[32rem] overflow-y-auto`},vt={lang:`ja`,class:`w-28 shrink-0 text-base`},yt=[`aria-pressed`,`title`,`onClick`],bt=[`onClick`],xt=Object.assign(o({__name:`CustomizeWords`,setup(e){let{config:t,report:n,search:o,toggleWord:s}=Z(),l=S(``),u=b([]);T(l,async e=>{let t=e.trim(),n=t?await o(t).catch(()=>[]):[];e===l.value&&(u.value=n)});let d=c(()=>new Set(t.value.words?.pin??[])),f=c(()=>new Set(t.value.words?.remove??[])),g=c(()=>l.value.trim()?u.value:Object.entries(n.value?.ivs.words??{}).map(([e,t])=>({form:e,readings:t.map(e=>({notation:e,nf:0,priority:``}))})));return(e,t)=>(p(),i(`div`,null,[r(`div`,mt,[C(r(`input`,{"onUpdate:modelValue":t[0]||=e=>O(l)?l.value=e:null,type:`search`,lang:`ja`,placeholder:e.$t(`customize.dictionary.search`),"aria-label":e.$t(`customize.dictionary.search`),class:`input max-w-md`},null,8,ht),[[j,v(l)]]),r(`p`,gt,a(v(l).trim()?e.$t(`customize.dictionary.results`,{count:v(u).length}):e.$t(`customize.dictionary.hint`)),1)]),r(`ul`,_t,[(p(!0),i(h,null,m(v(g),t=>(p(),i(`li`,{key:t.form,class:A([`flex flex-wrap items-center gap-2 border-b border-base px-6 py-2`,v(f).has(t.form)&&`opacity-40`])},[r(`span`,vt,a(t.form),1),(p(!0),i(h,null,m(t.readings,t=>(p(),i(`button`,{key:t.notation,type:`button`,lang:`ja`,class:A([`focus-ring border px-2 py-0.5 text-sm transition-colors`,v(d).has(t.notation)?`border-strong bg-inverse color-inverse`:`border-base hover:border-strong`]),"aria-pressed":v(d).has(t.notation),title:t.priority||e.$t(`customize.dictionary.noTag`),onClick:e=>v(s)(`pin`,t.notation)},a(t.notation),11,yt))),128)),r(`button`,{type:`button`,class:`btn-ghost focus-ring ml-auto h-7 px-2 text-xs`,onClick:e=>v(s)(`remove`,t.form)},a(v(f).has(t.form)?e.$t(`customize.dictionary.restore`):e.$t(`customize.dictionary.remove`)),9,bt)],2))),128))])]))}}),{__name:`CustomizeWords`}),St={class:`flex flex-col gap-4 p-6`},Ct=[`placeholder`,`aria-label`],wt={type:`submit`,class:`btn-outline focus-ring shrink-0`},Tt={class:`label`},Et={class:`flex flex-wrap gap-2`},Dt=[`aria-label`,`onClick`],Ot={key:0,class:`text-xs color-muted`},kt=Object.assign(o({__name:`CustomizeCustomWords`,setup(e){let{config:n,toggleWord:o}=Z(),s=S(``),u=c(()=>[{key:`add`,label:`customize.custom.added`,items:n.value.words?.add??[]},{key:`pin`,label:`customize.custom.pinned`,items:n.value.words?.pin??[]},{key:`remove`,label:`customize.custom.removed`,items:n.value.words?.remove??[]}]);function d(){/\[[^\]]+\]/.test(s.value)&&(o(`add`,s.value.trim()),s.value=``)}return(e,n)=>(p(),i(`div`,St,[r(`form`,{class:`flex gap-2`,onSubmit:M(d,[`prevent`])},[C(r(`input`,{"onUpdate:modelValue":n[0]||=e=>O(s)?s.value=e:null,lang:`ja`,placeholder:e.$t(`customize.custom.placeholder`),"aria-label":e.$t(`customize.custom.label`),class:`input font-mono`},null,8,Ct),[[j,v(s)]]),r(`button`,wt,a(e.$t(`customize.custom.add`)),1)],32),(p(!0),i(h,null,m(v(u),s=>(p(),i(`div`,{key:s.key,class:`flex flex-col gap-2`},[r(`span`,Tt,a(e.$t(s.label,{count:s.items.length})),1),r(`div`,Et,[(p(!0),i(h,null,m(s.items,c=>(p(),i(`button`,{key:c,type:`button`,lang:`ja`,class:`focus-ring group flex items-center gap-1.5 border border-base px-2 py-0.5 text-sm hover:border-strong`,"aria-label":e.$t(`customize.custom.takeOut`,{item:c}),onClick:e=>v(o)(s.key,c)},[t(a(c)+` `,1),n[1]||=r(`span`,{class:`i-ph-x text-xs color-muted group-hover:color-base`},null,-1)],8,Dt))),128)),s.items.length?l(``,!0):(p(),i(`span`,Ot,a(e.$t(`customize.custom.none`)),1))])]))),128))]))}}),{__name:`CustomizeCustomWords`}),At={key:0,class:`label px-6 py-24 text-center`},jt={key:3,class:`grid lg:grid-cols-[340px_1fr]`},Mt={class:`border-b border-base lg:border-b-0 lg:border-r`},Nt={class:`flex items-baseline justify-between border-b border-base px-6 py-3`},Pt={class:`label color-base`},Ft={class:`font-mono text-[11px] color-muted`},It={class:`min-w-0`},Lt=o({__name:`customize`,setup(e){let{status:t,state:n}=we();return(e,o)=>{let s=ye,c=Ae,l=We,u=Xe,d=ie,f=pt,m=xt,h=kt;return p(),i(`div`,null,[v(t)===`connecting`?(p(),i(`p`,At,a(e.$t(`customize.connecting`)),1)):v(t)===`unavailable`?(p(),k(s,{key:1})):v(t)===`locked`?(p(),k(c,{key:2})):(p(),i(`div`,jt,[r(`aside`,Mt,[r(`div`,Nt,[r(`h1`,Pt,a(e.$t(`customize.title`)),1),r(`span`,Ft,a(v(n)?.sources.JMdict),1)]),x(l)]),r(`div`,It,[x(d,{index:`01`,title:e.$t(`customize.sections.preview`),class:`border-t-0`},{default:_(()=>[x(u)]),_:1},8,[`title`]),x(d,{index:`02`,title:e.$t(`customize.sections.build`)},{default:_(()=>[x(f)]),_:1},8,[`title`]),x(d,{index:`03`,title:e.$t(`customize.sections.dictionary`)},{default:_(()=>[x(m)]),_:1},8,[`title`]),x(d,{index:`04`,title:e.$t(`customize.sections.words`)},{default:_(()=>[x(h)]),_:1},8,[`title`])])]))])}}});export{Lt as default};