furifont 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +3 -3
- package/dist/client/200.html +1 -1
- package/dist/client/404.html +1 -1
- package/dist/client/_nuxt/3AsBWvce.js +3 -0
- package/dist/client/_nuxt/B2JUvp84.js +1 -0
- package/dist/client/_nuxt/{lFAKI2D3.js → BClhblIx.js} +1 -1
- package/dist/client/_nuxt/B_yYcKkt.js +3 -0
- package/dist/client/_nuxt/BaBNBiev.js +1 -0
- package/dist/client/_nuxt/BmkgJMJq.js +1 -0
- package/dist/client/_nuxt/BuNmJC0Q.js +3 -0
- package/dist/client/_nuxt/CHjPDtV4.js +4 -0
- package/dist/client/_nuxt/CUHATrYY.js +1 -0
- package/dist/client/_nuxt/DAxBBWm2.js +2 -0
- package/dist/client/_nuxt/DgjW2lPh.js +1 -0
- package/dist/client/_nuxt/Kki0DvjP.js +1 -0
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/5ad83f05-1bf5-46a5-b89b-625cf86451d1.json +1 -0
- package/dist/client/_nuxt/entry.CZW0K6xF.css +1 -0
- package/dist/client/customize/index.html +1 -1
- package/dist/client/furifont.user.js +3 -3
- package/dist/client/index.html +1 -1
- package/dist/client/okurigana.json +774 -4191
- package/dist/client/reference/index.html +1 -1
- package/dist/client/report/index.html +1 -1
- package/dist/client/version.json +1 -1
- package/dist/{config-NmS4azuQ.mjs → config-C-xeUzoA.mjs} +4 -4
- package/dist/devframe.mjs +2 -2
- package/dist/index.d.mts +9 -39
- package/dist/index.mjs +2 -2
- package/dist/{studio-CJIk4xnE.mjs → studio-BmCyOlBh.mjs} +27 -20
- package/package.json +4 -4
- package/dist/client/_nuxt/B7HtXrdR.js +0 -1
- package/dist/client/_nuxt/BT-EKmMU.js +0 -1
- package/dist/client/_nuxt/Bkx7_K1f.js +0 -3
- package/dist/client/_nuxt/Bzck4lmu.js +0 -1
- package/dist/client/_nuxt/Cax8MU2E.js +0 -1
- package/dist/client/_nuxt/Cj8LKW1j.js +0 -2
- package/dist/client/_nuxt/CmFwbX1G.js +0 -1
- package/dist/client/_nuxt/DAr951Yq.js +0 -1
- package/dist/client/_nuxt/DFtcLD73.js +0 -3
- package/dist/client/_nuxt/DHMCzW9E.js +0 -3
- package/dist/client/_nuxt/D_G0KgX8.js +0 -1
- package/dist/client/_nuxt/builds/meta/82c26edb-3432-469a-acfa-8475fa64227b.json +0 -1
- package/dist/client/_nuxt/entry.D1RJUMvH.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
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/BuNmJC0Q.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CZW0K6xF.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuNmJC0Q.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkUAspOr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D4ezFGbh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cl84O_XS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/3AsBWvce.js"><script type="module" src="/_nuxt/BuNmJC0Q.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CHjPDtV4.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B2JUvp84.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Kki0DvjP.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CaT3AK-0.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B4Fx_Djw.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WL1uhYQu.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/X45Acd-Y.js"><meta name="description" content="A Japanese font that shows furigana by itself."><meta property="og:type" content="website"><meta property="og:url" content="https://furifont.antfu.me"><meta property="og:title" content="Furifont: furigana built into the font"><meta property="og:description" content="A Japanese font that shows furigana by itself."><meta property="og:image" content="https://furifont.antfu.me/og.png"><meta property="og:image:width" content="2400"><meta property="og:image:height" content="1260"><meta property="og:image:alt" content="Furifont: furigana built into the font"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Furifont: furigana built into the font"><meta name="twitter:description" content="A Japanese font that shows furigana by itself."><meta name="twitter:image" content="https://furifont.antfu.me/og.png"><link rel="icon" type="image/svg+xml" href="favicon.svg"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{devCustomizeBase:"/__furifont/"},app:{baseURL:"/",buildId:"5ad83f05-1bf5-46a5-b89b-625cf86451d1",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792113341561,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
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/BuNmJC0Q.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CZW0K6xF.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuNmJC0Q.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkUAspOr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D4ezFGbh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cl84O_XS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/3AsBWvce.js"><script type="module" src="/_nuxt/BuNmJC0Q.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CHjPDtV4.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B2JUvp84.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Kki0DvjP.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CaT3AK-0.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B4Fx_Djw.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WL1uhYQu.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/X45Acd-Y.js"><meta name="description" content="A Japanese font that shows furigana by itself."><meta property="og:type" content="website"><meta property="og:url" content="https://furifont.antfu.me"><meta property="og:title" content="Furifont: furigana built into the font"><meta property="og:description" content="A Japanese font that shows furigana by itself."><meta property="og:image" content="https://furifont.antfu.me/og.png"><meta property="og:image:width" content="2400"><meta property="og:image:height" content="1260"><meta property="og:image:alt" content="Furifont: furigana built into the font"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Furifont: furigana built into the font"><meta name="twitter:description" content="A Japanese font that shows furigana by itself."><meta name="twitter:image" content="https://furifont.antfu.me/og.png"><link rel="icon" type="image/svg+xml" href="favicon.svg"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{devCustomizeBase:"/__furifont/"},app:{baseURL:"/",buildId:"5ad83f05-1bf5-46a5-b89b-625cf86451d1",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792113341561,false]</script></body></html>
|
package/dist/client/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.
|
|
1
|
+
{"version":"0.4.0"}
|
|
@@ -4,13 +4,13 @@ import { basename, join, resolve } from "node:path";
|
|
|
4
4
|
import process from "node:process";
|
|
5
5
|
import { BASE_FONTS, FONT_VERSION, compileFont, readFontInfo, toWoff2 } from "@furifont/compiler";
|
|
6
6
|
import { brotli, subsetWasm } from "@furifont/compiler/node";
|
|
7
|
-
import { DEFAULTS, PlanOptionsSchema, createFontPlanner
|
|
7
|
+
import { DEFAULTS, PlanOptionsSchema, createFontPlanner } from "@furifont/core";
|
|
8
8
|
import { loadDictionary } from "@furifont/dictionary";
|
|
9
9
|
import { randomUUID } from "node:crypto";
|
|
10
10
|
import * as v from "valibot";
|
|
11
11
|
//#region package.json
|
|
12
12
|
var name = "furifont";
|
|
13
|
-
var version = "0.
|
|
13
|
+
var version = "0.4.0";
|
|
14
14
|
var description = "Build Japanese fonts that show furigana by themselves, from the command line or a local studio";
|
|
15
15
|
var homepage = "https://github.com/antfu/furifont#readme";
|
|
16
16
|
//#endregion
|
|
@@ -154,7 +154,7 @@ async function estimateFont(config, cwd) {
|
|
|
154
154
|
const CONFIG_FILE = "furifont.config.json";
|
|
155
155
|
/** The fonts a build can write. */
|
|
156
156
|
const FONT_FORMATS = ["otf", "woff2"];
|
|
157
|
-
const FurifontConfigSchema =
|
|
157
|
+
const FurifontConfigSchema = v.object({
|
|
158
158
|
...PlanOptionsSchema.entries,
|
|
159
159
|
/** A Source Han Sans JP weight (downloaded once), or the path of another OpenType font. */
|
|
160
160
|
base: v.optional(v.pipe(v.string(), v.nonEmpty()), DEFAULTS.build.base),
|
|
@@ -165,7 +165,7 @@ const FurifontConfigSchema = withNfWindow(v.object({
|
|
|
165
165
|
* Left out, it is Furifont's own at build time, so a saved config does not pin it.
|
|
166
166
|
*/
|
|
167
167
|
version: v.optional(v.pipe(v.string(), v.regex(FONT_VERSION, "version must be major.minor.patch, with a minor below 10 and a patch below 100")))
|
|
168
|
-
})
|
|
168
|
+
});
|
|
169
169
|
/** Reads `furifont.config.json` from `cwd` (or `path`), filling in every default. */
|
|
170
170
|
async function loadConfig(cwd, path = CONFIG_FILE) {
|
|
171
171
|
const file = resolve(cwd, path);
|
package/dist/devframe.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as homepage, f as name, p as version, u as description } from "./config-
|
|
2
|
-
import { n as STUDIO_ID, r as setupStudio } from "./studio-
|
|
1
|
+
import { d as homepage, f as name, p as version, u as description } from "./config-C-xeUzoA.mjs";
|
|
2
|
+
import { n as STUDIO_ID, r as setupStudio } from "./studio-BmCyOlBh.mjs";
|
|
3
3
|
import { defineDevframe } from "devframe";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
//#region src/devframe.ts
|
package/dist/index.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { CompileProgress } from "@furifont/compiler";
|
|
2
|
-
import { DEFAULTS, PREBUILT, PlanReport, PlanReport as PlanReport$1 } from "@furifont/core";
|
|
2
|
+
import { DEFAULTS, PREBUILT, PlanReport, PlanReport as PlanReport$1, Source } from "@furifont/core";
|
|
3
3
|
import * as v from "valibot";
|
|
4
4
|
import "devframe";
|
|
5
5
|
//#region src/config.d.ts
|
|
6
6
|
export declare const CONFIG_FILE = "furifont.config.json";
|
|
7
|
-
export declare const FurifontConfigSchema: v.
|
|
7
|
+
export declare const FurifontConfigSchema: v.ObjectSchema<{
|
|
8
8
|
/** A Source Han Sans JP weight (downloaded once), or the path of another OpenType font. */
|
|
9
9
|
readonly base: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.NonEmptyAction<string, undefined>]>, "Source Han Sans JP VF">;
|
|
10
10
|
/** The fonts a build writes, beside the selector reference `.ivs.json`. */
|
|
@@ -16,14 +16,10 @@ export declare const FurifontConfigSchema: v.SchemaWithPipe<readonly [v.ObjectSc
|
|
|
16
16
|
readonly version: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "version must be major.minor.patch, with a minor below 10 and a patch below 100">]>, undefined>;
|
|
17
17
|
readonly family: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.NonEmptyAction<string, undefined>, v.CheckAction<string, "Source is a reserved font name of the base font">]>, "Furifont Sans">;
|
|
18
18
|
readonly rubyScript: v.OptionalSchema<v.PicklistSchema<readonly ["hiragana", "katakanaOn", "hepburn"], undefined>, "hiragana">;
|
|
19
|
-
readonly
|
|
20
|
-
readonly
|
|
21
|
-
readonly
|
|
22
|
-
readonly minTatoeba: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, 3>;
|
|
19
|
+
readonly sources: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["jmdict", "ichi", "news", "spec", "gai", "nf", "tatoeba", "place", "mahjong-yaku", "jr-stations", "yojijukugo", "japan-post"], undefined>, undefined>, () => ("jmdict" | "ichi" | "news" | "spec" | "gai" | "nf" | "tatoeba" | "place" | "mahjong-yaku" | "jr-stations" | "yojijukugo" | "japan-post")[]>;
|
|
20
|
+
readonly skip: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, 0>;
|
|
21
|
+
readonly take: v.OptionalSchema<v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, v.MinValueAction<number, 1, undefined>]>, undefined>;
|
|
23
22
|
readonly skipJlpt: v.OptionalSchema<v.PicklistSchema<readonly ["N5", "N4", "N3", "N2", "N1"], undefined>, undefined>;
|
|
24
|
-
readonly places: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
25
|
-
readonly untagged: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
26
|
-
readonly manual: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["mahjong-yaku", "jr-stations", "yojijukugo"], undefined>, undefined>, undefined>;
|
|
27
23
|
readonly isolated: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
28
24
|
readonly isolatedMinShare: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0.5, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0.8>;
|
|
29
25
|
readonly words: v.OptionalSchema<v.ObjectSchema<{
|
|
@@ -37,34 +33,7 @@ export declare const FurifontConfigSchema: v.SchemaWithPipe<readonly [v.ObjectSc
|
|
|
37
33
|
readonly compressionFloor: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0.3, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0.8>;
|
|
38
34
|
readonly maxRubyWidth: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 3, undefined>]>, 1.5>;
|
|
39
35
|
}, undefined>, {}>;
|
|
40
|
-
}, undefined
|
|
41
|
-
base: string;
|
|
42
|
-
formats: ("otf" | "woff2")[];
|
|
43
|
-
version?: string | undefined;
|
|
44
|
-
family: string;
|
|
45
|
-
rubyScript: "hiragana" | "katakanaOn" | "hepburn";
|
|
46
|
-
nfMin: number;
|
|
47
|
-
nfMax: number;
|
|
48
|
-
selectTags: ("ichi1" | "news1" | "spec1" | "gai1" | "ichi2" | "news2" | "spec2" | "gai2")[];
|
|
49
|
-
minTatoeba: number;
|
|
50
|
-
skipJlpt?: "N5" | "N4" | "N3" | "N2" | "N1" | undefined;
|
|
51
|
-
places: boolean;
|
|
52
|
-
untagged: boolean;
|
|
53
|
-
manual?: ("mahjong-yaku" | "jr-stations" | "yojijukugo")[] | undefined;
|
|
54
|
-
isolated: boolean;
|
|
55
|
-
isolatedMinShare: number;
|
|
56
|
-
words: {
|
|
57
|
-
add: string[];
|
|
58
|
-
remove: string[];
|
|
59
|
-
pin: string[];
|
|
60
|
-
};
|
|
61
|
-
metrics: {
|
|
62
|
-
rubyScale: number;
|
|
63
|
-
rubyGap: number;
|
|
64
|
-
compressionFloor: number;
|
|
65
|
-
maxRubyWidth: number;
|
|
66
|
-
};
|
|
67
|
-
}, string>]>;
|
|
36
|
+
}, undefined>;
|
|
68
37
|
type FurifontConfig = v.InferOutput<typeof FurifontConfigSchema>;
|
|
69
38
|
type FurifontConfigInput = v.InferInput<typeof FurifontConfigSchema>;
|
|
70
39
|
/** Reads `furifont.config.json` from `cwd` (or `path`), filling in every default. */
|
|
@@ -143,10 +112,11 @@ type BuildEvent = {
|
|
|
143
112
|
};
|
|
144
113
|
interface WordMatch {
|
|
145
114
|
form: string;
|
|
115
|
+
/** Each reading with its score and its sources, as `SOURCES` names them. */
|
|
146
116
|
readings: {
|
|
147
117
|
notation: string;
|
|
148
|
-
|
|
149
|
-
|
|
118
|
+
score: number;
|
|
119
|
+
sources: Source[];
|
|
150
120
|
}[];
|
|
151
121
|
}
|
|
152
122
|
/** The wire contract of the functions below, as the studio page calls them. */
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as buildFont, i as loadConfig, l as previewFont, o as estimateFont, r as FurifontConfigSchema, t as CONFIG_FILE } from "./config-
|
|
2
|
-
import { n as STUDIO_ID, t as BUILD_CHANNEL } from "./studio-
|
|
1
|
+
import { a as buildFont, i as loadConfig, l as previewFont, o as estimateFont, r as FurifontConfigSchema, t as CONFIG_FILE } from "./config-C-xeUzoA.mjs";
|
|
2
|
+
import { n as STUDIO_ID, t as BUILD_CHANNEL } from "./studio-BmCyOlBh.mjs";
|
|
3
3
|
import { DEFAULTS, PREBUILT } from "@furifont/core";
|
|
4
4
|
export { BUILD_CHANNEL, CONFIG_FILE, DEFAULTS, FurifontConfigSchema, PREBUILT, STUDIO_ID, buildFont, estimateFont, loadConfig, previewFont };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as buildFont, c as planWithBase, i as loadConfig, l as previewFont, o as estimateFont, r as FurifontConfigSchema, s as getDictionary, t as CONFIG_FILE } from "./config-
|
|
1
|
+
import { a as buildFont, c as planWithBase, i as loadConfig, l as previewFont, o as estimateFont, r as FurifontConfigSchema, s as getDictionary, t as CONFIG_FILE } from "./config-C-xeUzoA.mjs";
|
|
2
2
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { BASE_FONTS } from "@furifont/compiler";
|
|
5
|
-
import { formatNotation,
|
|
5
|
+
import { formatNotation, parseFurigana, sourceBit, sourcesIn } from "@furifont/core";
|
|
6
6
|
import * as v from "valibot";
|
|
7
7
|
import { Buffer } from "node:buffer";
|
|
8
8
|
import { defineRpcFunction } from "devframe";
|
|
@@ -14,26 +14,33 @@ const BUILD_CHANNEL = "build";
|
|
|
14
14
|
/** Where built fonts are served from, relative to the studio. */
|
|
15
15
|
const FONTS_PATH = "/fonts/";
|
|
16
16
|
const SEARCH_LIMIT = 40;
|
|
17
|
+
function wordReading(form, spans, [score, sources]) {
|
|
18
|
+
return {
|
|
19
|
+
notation: formatNotation(form, spans),
|
|
20
|
+
score,
|
|
21
|
+
sources: sourcesIn(sources)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
17
24
|
async function searchWords(query) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
const { runs, kanji } = await getDictionary();
|
|
26
|
+
const matches = [];
|
|
27
|
+
for (const form of Object.keys(kanji).filter((k) => k.includes(query))) matches.push({
|
|
28
|
+
form,
|
|
29
|
+
readings: Object.entries(kanji[form]).map(([ruby, sources]) => wordReading(form, [{
|
|
30
|
+
start: 0,
|
|
31
|
+
end: 1,
|
|
32
|
+
ruby
|
|
33
|
+
}], sources))
|
|
34
|
+
});
|
|
35
|
+
for (const form of Object.keys(runs).filter((k) => k.includes(query))) {
|
|
36
|
+
if (matches.length >= SEARCH_LIMIT) break;
|
|
37
|
+
const readings = Object.entries(runs[form]).filter(([, [, sources]]) => sources & sourceBit("jmdict"));
|
|
38
|
+
if (readings.length) matches.push({
|
|
39
|
+
form,
|
|
40
|
+
readings: readings.map(([furigana, sources]) => wordReading(form, parseFurigana(furigana), sources))
|
|
34
41
|
});
|
|
35
42
|
}
|
|
36
|
-
return
|
|
43
|
+
return matches.slice(0, SEARCH_LIMIT).sort((a, b) => a.form.length - b.form.length);
|
|
37
44
|
}
|
|
38
45
|
/** Every function the studio page calls; registered under {@link STUDIO_ID}. */
|
|
39
46
|
async function setupStudio(ctx) {
|
|
@@ -54,7 +61,7 @@ async function setupStudio(ctx) {
|
|
|
54
61
|
config: await loadConfig(ctx.cwd),
|
|
55
62
|
configPath: join(ctx.cwd, CONFIG_FILE),
|
|
56
63
|
outDir,
|
|
57
|
-
sources: (await getDictionary()).
|
|
64
|
+
sources: (await getDictionary()).versions,
|
|
58
65
|
baseFonts: BASE_FONTS.map((f) => f.name)
|
|
59
66
|
})
|
|
60
67
|
}),
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "furifont",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
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.
|
|
40
|
-
"@furifont/core": "0.
|
|
41
|
-
"@furifont/dictionary": "0.
|
|
39
|
+
"@furifont/compiler": "0.4.0",
|
|
40
|
+
"@furifont/core": "0.4.0",
|
|
41
|
+
"@furifont/dictionary": "0.4.0",
|
|
42
42
|
"cac": "^7.1.0",
|
|
43
43
|
"devframe": "^1.2.5",
|
|
44
44
|
"valibot": "^1.5.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e,E as t,Ht as n,N as r,Q as i,T as a,Y as o,j as s}from"./CkUAspOr.js";import{t as c}from"./DHMCzW9E.js";var l={lang:void 0,message:void 0,abortEarly:void 0,abortPipeEarly:void 0};function u(e){return e?{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}:l}function d(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 f(e,t,n,r,i){let a=i&&`input`in i?i.input:n.value,o=i?.expected??e.expects??null,s=i?.received??d(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 p(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function m(e,t){let n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??`never`}function h(e){return e[`~standard`]={version:1,vendor:`valibot`,validate:t=>e[`~run`]({value:t},u())},e}var g=class extends Error{constructor(e){super(e[0].message),this.name=`ValiError`,this.issues=e}};function _(e,t){return{kind:`validation`,type:`check`,reference:_,async:!1,expects:null,requirement:e,message:t,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&f(this,`input`,e,t),e}}}function v(e){return{kind:`validation`,type:`empty`,reference:v,async:!1,expects:`0`,message:e,"~run"(e,t){return e.typed&&e.value.length>0&&f(this,`length`,e,t,{received:`${e.value.length}`}),e}}}function y(e){return{kind:`validation`,type:`integer`,reference:y,async:!1,expects:null,requirement:Number.isInteger,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&f(this,`integer`,e,t),e}}}function b(e,t){return{kind:`validation`,type:`max_length`,reference:b,async:!1,expects:`<=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length>this.requirement&&f(this,`length`,e,t,{received:`${e.value.length}`}),e}}}function x(e,t){return{kind:`validation`,type:`max_value`,reference:x,async:!1,expects:`<=${e instanceof Date?e.toJSON():d(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value<=this.requirement)&&f(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():d(e.value)}),e}}}function S(e,t){return{kind:`validation`,type:`min_length`,reference:S,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&f(this,`length`,e,t,{received:`${e.value.length}`}),e}}}function C(e,t){return{kind:`validation`,type:`min_value`,reference:C,async:!1,expects:`>=${e instanceof Date?e.toJSON():d(e)}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!(e.value>=this.requirement)&&f(this,`value`,e,t,{received:e.value instanceof Date?e.value.toJSON():d(e.value)}),e}}}function w(e){return{kind:`validation`,type:`non_empty`,reference:w,async:!1,expects:`!0`,message:e,"~run"(e,t){return e.typed&&e.value.length===0&&f(this,`length`,e,t,{received:`0`}),e}}}function T(e,t){return{kind:`validation`,type:`regex`,reference:T,async:!1,expects:`${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&!this.requirement.test(e.value)&&f(this,`format`,e,t),e}}}function E(e){return{kind:`transformation`,type:`transform`,reference:E,async:!1,operation:e,"~run"(e){return e.value=this.operation(e.value),e}}}function D(){return{kind:`transformation`,type:`trim`,reference:D,async:!1,"~run"(e){return e.value=e.value.trim(),e}}}function O(e,t,n){return typeof e.fallback==`function`?e.fallback(t,n):e.fallback}function k(e,t,n){return typeof e.default==`function`?e.default(t,n):e.default}function A(e,t){return h({kind:`schema`,type:`array`,reference:A,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 f(this,`type`,e,t);return e}})}function j(e){return h({kind:`schema`,type:`boolean`,reference:j,expects:`boolean`,async:!1,message:e,"~run"(e,t){return typeof e.value==`boolean`?e.typed=!0:f(this,`type`,e,t),e}})}function M(e,t){return h({kind:`schema`,type:`literal`,reference:M,expects:d(e),async:!1,literal:e,message:t,"~run"(e,t){return p(e.value,this.literal)?e.typed=!0:f(this,`type`,e,t),e}})}function N(e){return h({kind:`schema`,type:`number`,reference:N,expects:`number`,async:!1,message:e,"~run"(e,t){return typeof e.value==`number`&&!isNaN(e.value)?e.typed=!0:f(this,`type`,e,t),e}})}function P(e,t){return h({kind:`schema`,type:`object`,reference:P,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]:k(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]=O(i);else if(i.type!==`exact_optional`&&i.type!==`optional`&&i.type!==`nullish`&&(f(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 f(this,`type`,e,t);return e}})}function F(e,t){return h({kind:`schema`,type:`optional`,reference:F,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,"~run"(e,t){return e.value===void 0&&(this.default!==void 0&&(e.value=k(this,e,t)),e.value===void 0)?(e.typed=!0,e):this.wrapped[`~run`](e,t)}})}function I(e,t){return h({kind:`schema`,type:`picklist`,reference:I,expects:m(e.map(d),`|`),async:!1,options:e,message:t,"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:f(this,`type`,e,t),e}})}function L(e){return h({kind:`schema`,type:`string`,reference:L,expects:`string`,async:!1,message:e,"~run"(e,t){return typeof e.value==`string`?e.typed=!0:f(this,`type`,e,t),e}})}function R(e,t,n){let r=e[`~run`]({value:t},u(n));if(r.issues)throw new g(r.issues);return r.value}function z(...e){return h({...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 B(e,t,n){let r=e[`~run`]({value:t},u(n));return{typed:r.typed,success:!r.issues,output:r.value,issues:r.issues}}var V={class:`relative border-t border-base`},H={key:0,class:`flex items-baseline gap-3 border-b border-base px-6 py-3`},U={key:0,class:`label`},W={class:`label color-base`},G=Object.assign(r({__name:`UiSection`,props:{index:{},title:{}},setup(r){return(l,u)=>{let d=c;return o(),t(`section`,V,[s(d,{class:`-left-[6px] -top-[6px]`}),s(d,{class:`-right-[6px] -top-[6px]`}),r.title?(o(),t(`header`,H,[r.index?(o(),t(`span`,U,n(r.index),1)):a(``,!0),e(`h2`,W,n(r.title),1),i(l.$slots,`aside`)])):a(``,!0),i(l.$slots,`default`)])}}}),{__name:`UiSection`});export{D as C,E as S,I as _,v as a,B as b,b as c,C as d,w as f,R as g,F as h,_ as i,x as l,P as m,A as n,y as o,N as p,j as r,M as s,G as t,S as u,z as v,L as x,T as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e,E as t,Ht as n,N as r,Q as i,S as a,T as o,Y as s,at as c,bt as l,w as u,zt as d}from"./CkUAspOr.js";import{t as f}from"./Cl84O_XS.js";var p={class:`flex flex-col gap-1.5`},m={class:`label`},h={key:0,class:`text-xs color-muted`},g=Object.assign(r({__name:`UiField`,props:{label:{},hint:{}},setup(r){return(a,c)=>(s(),t(`label`,p,[e(`span`,m,n(r.label),1),i(a.$slots,`default`),r.hint?(s(),t(`span`,h,n(r.hint),1)):o(``,!0)]))}}),{__name:`UiField`}),_=[`href`],v=Object.assign(r({__name:`UiButton`,props:{variant:{default:`outline`},to:{},href:{},icon:{}},setup(e){let n=a(()=>[`btn-${e.variant}`,`focus-ring`]);return(r,a)=>{let p=f;return e.to?(s(),u(p,{key:0,to:e.to,class:d(l(n))},{default:c(()=>[e.icon?(s(),t(`span`,{key:0,class:d(e.icon)},null,2)):o(``,!0),i(r.$slots,`default`)]),_:3},8,[`to`,`class`])):e.href?(s(),t(`a`,{key:1,href:e.href,target:`_blank`,rel:`noopener`,class:d(l(n))},[e.icon?(s(),t(`span`,{key:0,class:d(e.icon)},null,2)):o(``,!0),i(r.$slots,`default`)],10,_)):(s(),t(`button`,{key:2,type:`button`,class:d(l(n))},[e.icon?(s(),t(`span`,{key:0,class:d(e.icon)},null,2)):o(``,!0),i(r.$slots,`default`)],2))}}}),{__name:`UiButton`});export{g as n,v as t};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Cj8LKW1j.js","./CkUAspOr.js","./y07Wd5I9.js","./D4ezFGbh.js","./DHMCzW9E.js","./B7HtXrdR.js","./CmFwbX1G.js","./BJuAqPpj.js","./BT-EKmMU.js","./Cl84O_XS.js","./lFAKI2D3.js","./Cax8MU2E.js","./DFtcLD73.js","./B4Fx_Djw.js","./error-404.CaT3AK-0.css","./X45Acd-Y.js","./error-500.WL1uhYQu.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e}from"./y07Wd5I9.js";import{$ as t,A as n,Bt as r,C as i,E as a,F as o,G as s,Gt as c,H as l,Ht as u,I as d,K as f,Kt as p,L as m,M as h,N as g,P as _,R as v,S as y,T as b,U as x,W as S,Wt as C,X as w,Y as T,Z as E,_ as D,at as O,bt as k,c as ee,ct as te,et as ne,f as A,ft as re,gt as ie,ht as ae,i as j,it as M,j as N,k as oe,lt as se,m as ce,mt as le,n as ue,o as P,ot as F,p as I,pt as L,r as de,rt as fe,s as pe,u as me,ut as he,v as ge,vt as _e,w as R,y as ve,yt as ye,z as be,zt as z}from"./CkUAspOr.js";import{a as xe,n as Se,r as Ce}from"./D4ezFGbh.js";import{$ as we,A as Te,B,C as Ee,Ct as De,D as Oe,E as V,F as ke,G as H,H as U,I as Ae,J as je,K as W,L as Me,M as Ne,N as Pe,O as Fe,P as Ie,Q as Le,R as Re,S as ze,St as Be,T as Ve,U as He,V as Ue,W as We,X as Ge,Y as G,Z as Ke,_ as qe,_t as Je,a as Ye,at as Xe,b as Ze,bt as Qe,c as $e,ct as K,d as et,dt as tt,et as nt,f as rt,ft as it,g as at,gt as ot,h as st,ht as ct,it as lt,j as ut,k as dt,l as q,lt as ft,m as J,mt as pt,nt as mt,o as ht,ot as gt,p as _t,pt as vt,q as yt,r as bt,rt as xt,s as St,st as Ct,t as wt,tt as Tt,u as Et,ut as Dt,v as Ot,vt as kt,w as Y,x as At,xt as jt,y as Mt,yt as Nt,z as Pt}from"./Cl84O_XS.js";import{c as Ft,f as It,i as Lt,n as Rt,r as zt,s as Bt,t as Vt}from"./DHMCzW9E.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Ht=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,Ut=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,Wt=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function Gt(e,t){if(e===`__proto__`||e===`constructor`&&t&&typeof t==`object`&&`prototype`in t)Kt(e);else return t}function Kt(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function qt(e,t={}){if(typeof e!=`string`)return e;if(e[0]===`"`&&e[e.length-1]===`"`&&e.indexOf(`\\`)===-1)return e.slice(1,-1);let n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case`true`:return!0;case`false`:return!1;case`undefined`:return;case`null`:return null;case`nan`:return NaN;case`infinity`:return 1/0;case`-infinity`:return-1/0}if(!Wt.test(e)){if(t.strict)throw SyntaxError(`[destr] Invalid JSON`);return e}try{if(Ht.test(e)||Ut.test(e)){if(t.strict)throw Error(`[destr] Possible prototype pollution`);return JSON.parse(e,Gt)}return JSON.parse(e)}catch(n){if(t.strict)throw n;return e}}var Jt=class extends Error{constructor(e,t){super(e,t),this.name=`FetchError`,t?.cause&&!this.cause&&(this.cause=t.cause)}};function Yt(e){let t=e.error?.message||e.error?.toString()||``,n=e.request?.method||e.options?.method||`GET`,r=e.request?.url||String(e.request)||`/`,i=new Jt(`${`[${n}] ${JSON.stringify(r)}`}: ${e.response?`${e.response.status} ${e.response.statusText}`:`<no response>`}${t?` ${t}`:``}`,e.error?{cause:e.error}:void 0);for(let t of[`request`,`options`,`response`])Object.defineProperty(i,t,{get(){return e[t]}});for(let[t,n]of[[`data`,`_data`],[`status`,`status`],[`statusCode`,`status`],[`statusText`,`statusText`],[`statusMessage`,`statusText`]])Object.defineProperty(i,t,{get(){return e.response&&e.response[n]}});return i}var Xt=new Set(Object.freeze([`PATCH`,`POST`,`PUT`,`DELETE`]));function Zt(e=`GET`){return Xt.has(e.toUpperCase())}function Qt(e){if(e===void 0)return!1;let t=typeof e;return t===`string`||t===`number`||t===`boolean`||t===null?!0:t===`object`?Array.isArray(e)?!0:e.buffer||e instanceof FormData||e instanceof URLSearchParams?!1:e.constructor&&e.constructor.name===`Object`||typeof e.toJSON==`function`:!1}var $t=new Set([`image/svg`,`application/xml`,`application/xhtml`,`application/html`]),en=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function tn(e=``){if(!e)return`json`;let t=e.split(`;`).shift()||``;return en.test(t)?`json`:t===`text/event-stream`?`stream`:$t.has(t)||t.startsWith(`text/`)?`text`:`blob`}function nn(e,t,n,r){let i=rn(t?.headers??e?.headers,n?.headers,r),a;return(n?.query||n?.params||t?.params||t?.query)&&(a={...n?.params,...n?.query,...t?.params,...t?.query}),{...n,...t,query:a,params:a,headers:i}}function rn(e,t,n){if(!t)return new n(e);let r=new n(t);if(e)for(let[t,i]of Symbol.iterator in e||Array.isArray(e)?e:new n(e))r.set(t,i);return r}async function an(e,t){if(t){if(Array.isArray(t))for(let n of t)await n(e);else await t(e)}}var on=new Set([408,409,425,429,500,502,503,504]),sn=new Set([101,204,205,304]);function cn(e={}){let{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:r=globalThis.AbortController}=e;async function i(e){let t=e.error&&e.error.name===`AbortError`&&!e.options.timeout||!1;if(e.options.retry!==!1&&!t){let t;t=typeof e.options.retry==`number`?e.options.retry:+!Zt(e.options.method);let n=e.response&&e.response.status||500;if(t>0&&(Array.isArray(e.options.retryStatusCodes)?e.options.retryStatusCodes.includes(n):on.has(n))){let n=typeof e.options.retryDelay==`function`?e.options.retryDelay(e):e.options.retryDelay||0;return n>0&&await new Promise(e=>setTimeout(e,n)),a(e.request,{...e.options,retry:t-1})}}let n=Yt(e);throw Error.captureStackTrace&&Error.captureStackTrace(n,a),n}let a=async function(a,o={}){let s={request:a,options:nn(a,o,e.defaults,n),response:void 0,error:void 0};if(s.options.method&&(s.options.method=s.options.method.toUpperCase()),s.options.onRequest&&(await an(s,s.options.onRequest),s.options.headers instanceof n||(s.options.headers=new n(s.options.headers||{}))),typeof s.request==`string`&&(s.options.baseURL&&(s.request=jt(s.request,s.options.baseURL)),s.options.query&&(s.request=Be(s.request,s.options.query),delete s.options.query),`query`in s.options&&delete s.options.query,`params`in s.options&&delete s.options.params),s.options.body&&Zt(s.options.method)){if(Qt(s.options.body)){let e=s.options.headers.get(`content-type`);typeof s.options.body!=`string`&&(s.options.body=e===`application/x-www-form-urlencoded`?new URLSearchParams(s.options.body).toString():JSON.stringify(s.options.body)),e||s.options.headers.set(`content-type`,`application/json`),s.options.headers.has(`accept`)||s.options.headers.set(`accept`,`application/json`)}else(`pipeTo`in s.options.body&&typeof s.options.body.pipeTo==`function`||typeof s.options.body.pipe==`function`)&&(`duplex`in s.options||(s.options.duplex=`half`))}let c;if(!s.options.signal&&s.options.timeout){let e=new r;c=setTimeout(()=>{let t=Error(`[TimeoutError]: The operation was aborted due to timeout`);t.name=`TimeoutError`,t.code=23,e.abort(t)},s.options.timeout),s.options.signal=e.signal}try{s.response=await t(s.request,s.options)}catch(e){return s.error=e,s.options.onRequestError&&await an(s,s.options.onRequestError),await i(s)}finally{c&&clearTimeout(c)}if((s.response.body||s.response._bodyInit)&&!sn.has(s.response.status)&&s.options.method!==`HEAD`){let e=(s.options.parseResponse?`json`:s.options.responseType)||tn(s.response.headers.get(`content-type`)||``);switch(e){case`json`:{let e=await s.response.text(),t=s.options.parseResponse||qt;s.response._data=t(e);break}case`stream`:s.response._data=s.response.body||s.response._bodyInit;break;default:s.response._data=await s.response[e]()}}return s.options.onResponse&&await an(s,s.options.onResponse),!s.options.ignoreResponseError&&s.response.status>=400&&s.response.status<600?(s.options.onResponseError&&await an(s,s.options.onResponseError),await i(s)):s.response},o=async function(e,t){return(await a(e,t))._data};return o.raw=a,o.native=(...e)=>t(...e),o.create=(t={},n={})=>cn({...e,...n,defaults:{...e.defaults,...n.defaults,...t}}),o}var ln=(function(){if(typeof globalThis<`u`)return globalThis;if(typeof self<`u`)return self;if(typeof window<`u`)return window;if(typeof global<`u`)return global;throw Error(`unable to locate global object`)})(),un=ln.fetch?(...e)=>ln.fetch(...e):()=>Promise.reject(Error(`[ofetch] global.fetch is not supported!`)),dn=ln.Headers,fn=ln.AbortController,pn=cn({fetch:un,Headers:dn,AbortController:fn}),mn=()=>window?.__NUXT__?.config||window?.useNuxtApp?.().payload?.config,hn=()=>mn().app,gn=()=>hn().baseURL,_n=()=>hn().buildAssetsDir,vn=(...e)=>Nt(yn(),_n(),...e),yn=(...e)=>{let t=hn(),n=t.cdnURL||t.baseURL;return e.length?Nt(n,...e):n};globalThis.__buildAssetsURL=vn,globalThis.__publicAssetsURL=yn,globalThis.$fetch||(globalThis.$fetch=pn.create({baseURL:gn()}));var bn=globalThis.$fetch;`global`in globalThis||(globalThis.global=globalThis);function xn(e,t){t.push(ee),e.vueApp.use(t);let n=!0,r=()=>{n=!1,t.render()};t.hooks?.hook(`dom:beforeRender`,e=>{e.shouldRender=!n}),e.hooks.hook(`page:start`,()=>{n=!0}),e.hooks.hook(`page:finish`,()=>{e.isHydrating||r()}),e.hooks.hook(`app:error`,r),e.hooks.hook(`app:suspense:resolve`,r);let i=t.push.bind(t);t.push=((t,n)=>{let r=i(t,n),a=r.dispose.bind(r);return r.dispose=()=>{let t=e[`~transitionPromise`];t?t.finally(a):a()},r})}function Sn(e,t){if(typeof t==`function`&&t.key&&e.plugins.has(t.key))return;let n=typeof t==`function`?t(e):t,r=n.key||String(e.plugins.size+1);if(!e.plugins.get(r)){e.plugins.set(r,n);for(let t in n.hooks||{})e.hooks?.hook(t,n.hooks[t])}}function Cn(e,t={}){let n=!t.document,r=new Map,i={_entryCount:1,_h:0,plugins:new Map,resolvedOptions:t,ssr:n,entries:r,hooks:void 0,render:()=>e(i),use:e=>Sn(i,e),push(e,t){let a=t?._index??i._entryCount++,o=t?{...t}:{};delete o.head,delete o.onRendered,delete o._index;let s={_i:a,input:e,options:o};return r.set(a,s),{_i:a,dispose(){r.delete(a)},patch(e){n?(s.input=e,delete s._tags):s._pending=e,r.has(a)||r.set(a,s)}}}};return t.init?.forEach(e=>e&&i.push(e)),i}var wn=new Set([`link`,`style`,`script`,`noscript`]),Tn=new Set([`title`,`titleTemplate`,`script`,`style`,`noscript`]),En=new Set([`base`,`meta`,`link`,`style`,`script`,`noscript`]),Dn=new Set([`title`,`base`,`htmlAttrs`,`bodyAttrs`,`meta`,`link`,`style`,`script`,`noscript`]),On=new Set([`base`,`title`,`titleTemplate`,`bodyAttrs`,`htmlAttrs`,`templateParams`]),kn=new Set([`key`,`tagPosition`,`tagPriority`,`tagDuplicateStrategy`,`innerHTML`,`textContent`,`processTemplateParams`]),An=new Set([`templateParams`,`htmlAttrs`,`bodyAttrs`]),jn=new Set([`theme-color`,`google-site-verification`,`author`,`og:locale:alternate`,`og:image`,`og:video`,`og:audio`,`article:author`,`article:tag`,`book:author`,`book:tag`,`twitter:image`]),Mn={critical:-8,high:-1,low:2},Nn=e=>typeof e==`number`?Number.isFinite(e):e;function Pn(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function Fn(e){let t=new ce;for(let n in e||{})t.hook(n,e[n]);return t}function X(e,t,n){if(e.hooks?._hooks?.[t]?.length)return e.hooks?.callHook(t,n)}function In(e,t,n){let r=e.push,i=e;i.ssr=!1,i.hooks=t,i.dirty=!!i.dirty,i.use=e=>Sn(i,e),i.render=()=>n(i);function a(){t.callHook(`entries:updated`,i),i._b||i.render()}return i.invalidate=()=>{for(let e of i.entries.values())delete e._tags;i.dirty=!0,a()},i.push=(n,o)=>{let s=o?.onRendered?t.hook(`dom:rendered`,o.onRendered):void 0,c=r(n,o),l=e.entries.get(c._i);return l&&(l._o=n),i.dirty=!0,a(),{_i:c._i,patch(e){c.patch(e),i.dirty=!0,a()},dispose(){s?.(),e.entries.has(c._i)&&(c.dispose(),i.invalidate())}}},i}var Ln=/^(?:viewport|description|keywords|robots)$/,Rn=[`name`,`property`,`http-equiv`];function zn(e){let t=e.indexOf(`:`);if(t===-1)return!1;let n=e.slice(t+1);return jn.has(n)||n.startsWith(`og:image:`)||n.startsWith(`og:video:`)||n.startsWith(`og:audio:`)||n.startsWith(`twitter:image:`)}function Bn(e){let{props:t,tag:n,key:r}=e;if(On.has(n))return n;if(n===`link`){if(t.rel===`canonical`)return`canonical`;if(t.rel===`alternate`&&t.hreflang)return`alternate:${t.hreflang}`}if(t.charset)return`charset`;if(n===`meta`)for(let e of Rn){let n=t[e];if(n!==void 0)return`meta:${n}${(typeof n!=`string`||!n.includes(`:`))&&!Ln.test(n)&&r?`:key:${r}`:``}`}return r?`${n}:key:${r}`:t.id?`${n}:id:${t.id}`:n===`link`&&t.rel&&t.href?`link:${t.rel}:${t.href}`:Tn.has(n)&&(e.textContent||e.innerHTML)?`${n}:content:${e.textContent||e.innerHTML}`:void 0}function Vn(e){let t=e._h||e._d||e.textContent||e.innerHTML;if(t)return t;let n=Object.keys(e.props).sort(),r=`${e.tag}:`,i=``;for(let t of n)r+=`${i}${t}:${String(e.props[t])}`,i=`,`;return r}function Hn(e,t,n){if(n===`_resolver`)return e;typeof e==`function`&&(!n||n!==`titleTemplate`&&!n.startsWith(`on`))&&(e=e());let r=t?t(n,e):e;if(Array.isArray(r)){let e;for(let n=0;n<r.length;n++){let i=Hn(r[n],t);e?e[n]=i:i!==r[n]&&(e=r.slice(0,n),e[n]=i)}return e||r}if(r?.constructor===Object){let e;for(let n in r){let i=Pn(n),a=i?void 0:Hn(r[n],t,n);if(!e&&(i||a!==r[n])){e={};for(let t in r){if(t===n)break;e[t]=r[t]}}e&&!i&&(e[n]=a)}return e||r}return r}var Un=/[\s"'<>/=\x00-\x1F\x7F]/;function Wn(e,t){let n=e===`style`,r=n?new Map:new Set,i=e=>{if(e){if(n){let t=e.indexOf(`:`);t>0&&r.set(e.slice(0,t).trim(),e.slice(t+1).trim())}else e.split(` `).forEach(e=>e&&r.add(e))}};if(typeof t==`string`)(n?t.split(`;`):[t]).forEach(i);else if(Array.isArray(t))t.forEach(i);else if(t&&typeof t==`object`)for(let e in t){let a=t[e];a&&a!==`false`&&(n?r.set(e.trim(),String(a)):i(e))}return r}function Gn(e,t){if(e.props=e.props||{},!t)return e;if(e.tag===`templateParams`)return e.props=t,e;let n=En.has(e.tag)||e.tag===`htmlAttrs`||e.tag===`bodyAttrs`;for(let r in t){if(Pn(r))continue;let i=r.startsWith(`data-`),a=n&&!kn.has(r),o=a&&!i?r.toLowerCase():r;if(a&&(!o||Un.test(o)))continue;let s=t[r];if(s===null)e.props[o]=null;else if(r===`class`||r===`style`)e.props[r]=Wn(r,s);else if(kn.has(r)){if((r===`textContent`||r===`innerHTML`)&&typeof s==`object`){let n=t.type||`application/json`;(n.endsWith(`json`)||n===`speculationrules`||n===`importmap`)&&(e.props.type=n,e[r]=JSON.stringify(s))}else e[r]=s}else if(s!==void 0){let t=String(s),n=e.tag===`meta`&&o===`content`;e.props[o]=t===`true`||t===``?i||n?t:!0:!s&&i&&t===`false`?`false`:s}}return e}function Kn(e,t){let n;return t.length&&(n=(e,n)=>{for(let r=0;r<t.length;r++)n=t[r](e,n);return n},e=n(void 0,e)),Hn(e,n)}function qn(e,t){let n=Gn({tag:e,props:{}},typeof t==`object`&&typeof t!=`function`?t:{[e===`script`||e===`noscript`||e===`style`?`innerHTML`:`textContent`]:t});if(n.key&&wn.has(n.tag)&&(n.props[`data-hid`]=n._h=n.key),n.tag===`script`&&typeof n.innerHTML==`object`&&(n.innerHTML=JSON.stringify(n.innerHTML),n.props.type=n.props.type||`application/json`),Array.isArray(n.props.content)){let e=[];for(let t of n.props.content)e.push({...n,props:{...n.props,content:t}});return e}return n}function Jn(e,t){if(Array.isArray(t))for(let n of t)e.push(n);else e.push(t)}function Yn(e,t){if(!e)return[];typeof e==`function`&&(e=e()),e=Kn(e,t);let n=[];for(let t in e){let r=e[t];if(r!==void 0){if(Array.isArray(r))for(let e of r)Jn(n,qn(t,e));else Jn(n,qn(t,r))}}return n}var Xn=/</g,Zn=/<\/script/g,Qn=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,$n=()=>100;function er(e){for(let t in e)return!1;return!0}var tr=/^tags:|:render/;function nr(e,t){let n=(t[`entries:resolve`]?.length||0)+(t[`entries:normalize`]?.length||0);if(e._h!==n){e._h=n;for(let t of e.entries.values())delete t._tags}}function rr(e){for(let t=0;t<e.length;t++){let n=e[t],r={...n.props};r.class instanceof Set&&(r.class=new Set(r.class)),r.style instanceof Map&&(r.style=new Map(r.style)),e[t]={...n,props:r}}}function ir(e,t){let n=e.tags,r=0;for(let t of e.tagMap.values())if(Array.isArray(t))for(let e of t)n[r++]=e;else n[r++]=t;n.length=r,t&&n.sort(Qn)}function ar(e){let t=!1;for(let n of e.tags.sort(Qn)){let r=n._d||Vn(n);if(!r)continue;let i=e.tagMap.get(r);if(!i)e.tagMap.set(r,n);else if((n.tagDuplicateStrategy||(An.has(n.tag)?`merge`:null)||(n.key&&n.key===i.key?`merge`:null))===`merge`){let t={...i.props};for(let e in n.props)t[e]=e===`style`?new Map([...i.props.style||new Map,...n.props[e]]):e===`class`?new Set([...i.props.class||[],...n.props[e]]):n.props[e];e.tagMap.set(r,{...n,props:t})}else n._p>>10==i._p>>10&&n.tag===`meta`&&zn(r)?(e.tagMap.set(r,Object.assign([...Array.isArray(i)?i:[i],n],n)),t=!0):(n._w===i._w?n._p>i._p:n._w<i._w)&&e.tagMap.set(r,n)}return t}function or(e,t){let n=e.tagMap.get(`title`),r=e.tagMap.get(`titleTemplate`);if(t._title=n?.textContent,!r)return;let i=r.textContent;if(t._titleTemplate=i,!i)return;let a=typeof i==`function`?i(n?.textContent):i;typeof a==`string`&&!t.plugins.has(`template-params`)&&(a=a.replace(`%s`,n?.textContent||``)),n?a===null?e.tagMap.delete(`title`):e.tagMap.set(`title`,{...n,textContent:a}):e.tagMap.set(`titleTemplate`,{...r,tag:`title`,textContent:a})}function sr(e){let t=0;for(let n of e){let{innerHTML:r,tag:i,props:a}=n;if(Dn.has(i)&&(!er(a)||Nn(r)||Nn(n.textContent))&&(i!==`meta`||Nn(a.content)||a[`http-equiv`]||a.charset)){if(i===`script`&&(r||n.textContent)){let e=String(a.type),t=e.endsWith(`json`)||e===`importmap`||e===`speculationrules`,i=e=>t?(typeof e==`string`?e:JSON.stringify(e)).replace(Xn,`\\u003C`):typeof e==`string`?e.replace(Zn,`<\\/script`):e;n={...n},r&&(n.innerHTML=i(r)),n.textContent&&(n.textContent=i(n.textContent)),n._d=Bn(n)}e[t++]=n}}return e.length=t,e}function cr(e,t){let n=t?.tagWeight??e.resolvedOptions._tagWeight??$n,r={tagMap:new Map,tags:[]},i=e.hooks?._hooks||{};nr(e,i);for(let t of e.entries.values())t._pending!==void 0&&(t.input=t._pending,delete t._pending,delete t._tags,delete t._precomputedTags);let a;(i[`entries:resolve`]?.length||i[`entries:normalize`]?.length)&&(a=[...e.entries.values()],i[`entries:resolve`]?.length&&X(e,`entries:resolve`,{entries:a,...r})),nr(e,i);for(let t of a||e.entries.values()){let a=t._tags;if(!a){if(t._precomputedTags&&n===e.resolvedOptions._tagWeight&&!i[`entries:normalize`]?.length&&!i[`entries:resolve`]?.length&&(!t.options||er(t.options)))a=t._precomputedTags;else{if(a=Yn(t.input,e.resolvedOptions.propResolvers||[]),t.options&&!er(t.options))for(let e of a)Object.assign(e,t.options);if(i[`entries:normalize`]?.length){let n={tags:a,entry:t};X(e,`entries:normalize`,n),a=n.tags}for(let e=0;e<a.length;e++){let r=a[e];r._w=n(r),r._p=(t._i<<10)+e,r._d=Bn(r),r._d||(r._h=Vn(r))}t._tags=a}}r.tags.push(...a)}for(let e in i)if(i[e]?.length&&tr.test(e)){rr(r.tags);break}let o=ar(r);return or(r,e),ir(r,o),X(e,`tags:beforeResolve`,r),X(e,`tags:resolve`,r),X(e,`tags:afterResolve`,r),sr(r.tags)}var lr=/\s+/;function ur(e={}){return t=>pr(t,e)}function dr(e){for(let t of e.entries.values())if(t._pending!==void 0)return!0;return!1}function fr(e,t){let n={_d:t,_t:t.title,_e:new Map([[`htmlAttrs`,t.documentElement],[`bodyAttrs`,t.body]]),_p:{},_s:{},_l:new Map};for(let t of e.entries.values())if(t._o!==void 0){let e=t._o;for(let t of[`bodyAttrs`,`htmlAttrs`]){let r=e[t]?.class;if(typeof r==`string`){let e=n._e.get(t);for(let i of r.split(lr))i&&(n._p[`${t}:attr:class:${i}`]=()=>e.classList.remove(i))}}}return n}function pr(e,t={}){let n=t.document||e.resolvedOptions.document,r=e._dom;if(!n||e._du||r&&r._d===n&&!e.dirty&&!dr(e))return!1;let i=n.defaultView;e._du=!0;let a=!1;try{let o=function(e,t,n){d._s[e]=!n&&f[e]||t,delete f[e]},s=function(e,t,n,r,i,a){let s=`${e}:event:${t}`,c=d._l.get(s);if(c&&c[0]===a&&c[1]===n&&c[2]===r){o(s,c[4]);return}c?.[4]();let l=`data-${t}`,u=(e=>r.call(i,e)),f=()=>{a.removeEventListener(n,u),i.getAttribute(l)===``&&i.removeAttribute(l),d._l.get(s)?.[3]===u&&d._l.delete(s)};a.addEventListener(n,u),d._l.set(s,[a,n,r,u,f]),i.setAttribute(l,``),o(s,f,!0)},c=function({id:e,$el:t,tag:n}){if(d._e.set(e,t),!n.tag.endsWith(`Attrs`)){let r=n.textContent;r!=null&&r!==``&&(r!==t.textContent&&(t.textContent=r),o(`${e}:text`,()=>{t.textContent===r&&(t.textContent=``)},!0));let i=n.innerHTML;i!=null&&i!==``&&(i!==t.innerHTML&&(t.innerHTML=i),o(`${e}:html`,()=>{t.innerHTML===i&&(t.innerHTML=``)},!0));let a=`${e}:el`;o(a,f[a]||(()=>{t?.remove(),d._e.delete(e)}))}for(let r in n.props){let a=n.props[r];if(r[0]===`o`&&r[1]===`n`&&typeof a==`function`){let o=r.slice(2);t?.dataset?.[`${r}fired`]&&a.call(t,new((i?.Event)||Event)(o)),s(e,r,o,a,t,n.tag===`bodyAttrs`&&i?i:t);continue}let c=`${e}:attr:${r}`;if(r===`class`&&a)for(let e of a){let n=`${c}:${e}`;o(n,f[n]||(()=>t.classList.remove(e))),t.classList.contains(e)||t.classList.add(e)}else if(r===`style`&&a)for(let[e,n]of a){let r=`${c}:${e}`;o(r,f[r]||(()=>t.style.removeProperty(e))),t.style.setProperty(e,n)}else a!==!1&&a!==null&&(t.getAttribute(r)!==a&&t.setAttribute(r,a===!0?``:String(a)),o(c,f[c]||(()=>t.removeAttribute(r))))}},l={shouldRender:!0,tags:[]};if(X(e,`dom:beforeRender`,l),!l.shouldRender)return!1;let u=r;if(u?._d!==n){if(u){for(let e in u._s)u._s[e]();for(let e in u._p)u._p[e]();u._s=u._p={},u._e.clear(),u._l.clear()}u=void 0}u?u._p=u._s:u=fr(e,n),u._s={};let d=u,f=d._p,p=[],m={};e.dirty=!1;let h=cr(e,t.tagWeight?{tagWeight:t.tagWeight}:void 0),g=[],_={};for(let e of h){let t=_[e._d]||0,r=(t?`${e._d}:${t}`:e._d)||e._h,i={tag:e,id:r,shouldRender:!0};e.tag===`meta`&&e._d&&zn(e._d)&&(_[e._d]=t+1),g.push(i),e.tag===`title`?(n.title=e.textContent,o(`title:`,()=>n.title=d._t)):(i.$el=d._e.get(r),i.$el?c(i):En.has(e.tag)&&p.push(i))}if(p.length){let e=new Set(d._e.values());for(let t of[...n.body.children,...n.head.children]){let n=t.tagName.toLowerCase();if(!En.has(n)||e.has(t))continue;let r={innerHTML:t.innerHTML};for(let e of t.getAttributeNames())r[e]=t.getAttribute(e);let i=Gn({tag:n,props:{}},r);i.key=t.getAttribute(`data-hid`)||void 0;let a=Bn(i)||Vn(i),o=a,s=1;for(;d._e.has(o);)o=`${a}:${s++}`;d._e.set(o,t)}}for(let e of p){let t=d._e.get(e.id);e.$el=t||n.createElement(e.tag.tag),c(e),t||(m[e.tag.tagPosition||`head`]??=n.createDocumentFragment()).appendChild(e.$el)}m.head&&n.head.appendChild(m.head),m.bodyOpen&&n.body.insertBefore(m.bodyOpen,n.body.firstChild),m.bodyClose&&n.body.appendChild(m.bodyClose);for(let e in f)f[e]();e._dom=d,a=!0,X(e,`dom:rendered`,{renders:g})}catch(t){throw e.dirty=!0,t}finally{e._du=!1}return a&&(e.dirty||dr(e))&&pr(e,t),a}var mr=e=>typeof e.tagPriority==`number`?e.tagPriority:100+(Mn[e.tagPriority]||0);function hr(e={}){e.document=e.document||(typeof window<`u`?document:void 0);let t=e.render||ur({document:e.document}),n=In(Cn(t,{document:e.document,propResolvers:e.propResolvers,_tagWeight:mr,init:[]}),Fn(e.hooks),t);return e.plugins?.forEach(e=>n.use(e)),e.init?.forEach(e=>e&&n.push(e)),n}var gr=`usehead`;function _r(){if(m()){let e=v(gr);if(e)return e}throw Error(`useHead() was called without provide context, ensure you call it through the setup() function.`)}function vr(e){return{install(t){t.config.globalProperties.$unhead=e,t.config.globalProperties.$head=e,t.provide(gr,e)}}.install}function yr(e,t){return t&&typeof e==`function`&&(e.key=t),e}var br=/\\/g,xr=/</g,Sr=/"/g,Cr=/%\w+(?:\.\w+)?/g,wr=`%separator`;function Tr(e,t,n=!1){let r;if(t===`s`||t===`pageTitle`)r=e.pageTitle;else if(t.includes(`.`)){let n=t.indexOf(`.`);r=e[t.substring(0,n)]?.[t.substring(n+1)]}else r=e[t];if(r!==void 0)return n?(r||``).replace(br,`\\\\`).replace(xr,`\\u003C`).replace(Sr,`\\"`):r||``}function Er(e,t,n,r=!1){if(typeof e!=`string`||!e.includes(`%`))return e;let i=e;try{i=decodeURI(e)}catch{}let a=i.match(Cr);if(!a)return e;let o=e.includes(wr);return e=e.replace(Cr,e=>{if(e===wr||!a.includes(e))return e;let n=Tr(t,e.slice(1),r);return n===void 0?e:n}).trim(),o&&(e=e.split(wr).map(e=>e.trim()).filter(e=>e!==``).join(n?` ${n} `:` `)),e}var Dr=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,Or=e=>e.includes(`:key`)?e:e.split(`:`).join(`:key:`),kr=yr({key:`aliasSorting`,hooks:{"tags:resolve":e=>{let t=!1;for(let n of e.tags){let r=n.tagPriority;if(!r)continue;let i=String(r);if(i.startsWith(`before:`)){let r=Or(i.slice(7)),a=e.tagMap.get(r);a&&(typeof a.tagPriority==`number`&&(n.tagPriority=a.tagPriority),n._p=a._p-1,t=!0)}else if(i.startsWith(`after:`)){let r=Or(i.slice(6)),a=e.tagMap.get(r);a&&(typeof a.tagPriority==`number`&&(n.tagPriority=a.tagPriority),n._p=a._p+1,t=!0)}}t&&(e.tags=e.tags.sort(Dr))}}}),Ar=yr({key:`deprecations`,hooks:{"entries:normalize":({tags:e})=>{for(let t of e)t.props.children&&(t.innerHTML=t.props.children,delete t.props.children),t.props.hid&&(t.key=t.props.hid,delete t.props.hid),t.props.vmid&&(t.key=t.props.vmid,delete t.props.vmid),`body`in t.props&&(t.props.body&&(t.tagPosition=`bodyClose`),delete t.props.body),t.props.renderPriority!=null&&(t.tagPriority=t.props.renderPriority,delete t.props.renderPriority)}}});function Z(e){return typeof e?.then==`function`}var jr=256;function Mr(e,t){if(t===e.length)return;if(t===jr){let n=Array(e.length),r=!1;for(;t<e.length;t++){let i=Q(e[t]);n[t]=i,r||=Z(i)}return r?n:void 0}let n=Q(e[t]);if(Z(n)){let r=Array(e.length);r[t]=n;for(let n=t+1;n<e.length;n++)r[n]=Q(e[n]);return r}let r=Mr(e,t+1);return r&&(r[t]=n),r}function Nr(e,t,n){if(n===t.length)return;if(n===jr){let r=Array(t.length),i=!1;for(;n<t.length;n++){let a=Q(e[t[n]]);r[n]=a,i||=Z(a)}return i?r:void 0}let r=Q(e[t[n]]);if(Z(r)){let i=Array(t.length);i[n]=r;for(let r=n+1;r<t.length;r++)i[r]=Q(e[t[r]]);return i}let i=Nr(e,t,n+1);return i&&(i[n]=r),i}function Q(e){if(typeof e==`function`)return e;if(Z(e))return Promise.resolve(e).then(Q);if(Array.isArray(e)){let t=Mr(e,0);return t?Promise.all(t):e}if(e?.constructor===Object){let t=Object.keys(e),n=Nr(e,t,0);if(n)return Promise.all(n).then(e=>Object.fromEntries(t.map((t,n)=>[t,e[n]])))}return e}var Pr=yr(e=>{let t=new WeakMap;return{key:`promises`,hooks:{"entries:resolve":n=>{for(let r=n.entries.length-1;r>=0;r--){let i=n.entries[r],a=i.input;if(t.get(i)===a){n.entries.splice(r,1);continue}let o=Q(a);Z(o)?(t.set(i,a),n.entries.splice(r,1),Promise.resolve(o).then(n=>{t.get(i)===a&&(t.delete(i),i.input=n,delete i._tags,e.invalidate?.())},()=>{t.get(i)===a&&t.delete(i)})):t.delete(i)}}}}},`promises`),Fr={meta:`content`,link:`href`,htmlAttrs:`lang`},Ir=[`innerHTML`,`textContent`];function Lr(e,t,n,r=!1){return typeof e==`string`&&e.includes(`%`)?Er(e,t,n,r):e}var Rr=yr(e=>({key:`template-params`,hooks:{"tags:resolve":({tagMap:t,tags:n})=>{let r=t.get(`templateParams`)?.props||{},i=r.separator||`|`;delete r.separator,r.pageTitle=Lr(r.pageTitle||e._title||``,r,i);for(let e of n){if(e.processTemplateParams===!1)continue;let t=Fr[e.tag];if(t&&typeof e.props[t]==`string`)e.props[t]=Lr(e.props[t],r,i);else if(e.processTemplateParams||e.tag===`titleTemplate`||e.tag===`title`)for(let t of Ir)typeof e[t]==`string`&&(e[t]=Lr(e[t],r,i,e.tag===`script`&&typeof e.props.type==`string`&&e.props.type.endsWith(`json`)))}e._templateParams=r,e._separator=i},"tags:afterResolve":({tagMap:t})=>{let n=t.get(`title`);n?.textContent&&n.processTemplateParams!==!1&&(n.textContent=Lr(n.textContent,e._templateParams,e._separator))}}}),`template-params`),zr=Object.assign((e,t)=>he(t)?ye(t):t,{_static:!0});function Br(e,t={}){let n=t.head||_r();return n.ssr?n.push(e||{},t):Vr(n,e,t)}function Vr(e,t,n={}){let r=te();if(r&&!r.active)return{patch(){},dispose(){},_i:-1};let i=le(!1);if(n.onRendered&&r){let e=n.onRendered;n={...n,onRendered:t=>r.run(()=>e(t))}}let a;return M(()=>{let r=i.value?{}:Hn(t,zr);a?a.patch(r):a=e.push(r,n)}),_()&&(S(()=>{a.dispose()}),s(()=>{i.value=!0}),x(()=>{i.value=!1})),a}function Hr(e={}){let t=ur(),n,r=0;return n=hr({render:()=>{let e=++r;setTimeout(()=>{e===r&&t(n)},0)},...e}),n.install=vr(n),n}var Ur={disableDefaults:!0,plugins:[Ar,Pr,Rr,kr]},Wr=j({name:`nuxt:head`,enforce:`pre`,setup(e){xn(e,Hr(Ur))}}),Gr=/(:\w+)\([^)]+\)/g,Kr=/(:\w+)[?+*]/g,qr=/:\w+/g,Jr=(e,t)=>t.path.replace(Gr,`$1`).replace(Kr,`$1`).replace(qr,t=>e.params[t.slice(1)]?.toString()||``),Yr=(e,t)=>{let n=e.route.matched.find(t=>t.components?.default===e.Component.type),r=t??n?.meta.key??(n&&Jr(e.route,n));return typeof r==`function`?r(e.route):r},Xr=(e,t)=>({default:()=>e?d(ge,e===!0?{}:e,t):t});function Zr(e){return Array.isArray(e)?e:[e]}var Qr=()=>({}),$r=()=>location.protocol+`//`+location.host;function ei(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Pt(n,``)}return Pt(n,e)+r+i}function ti(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=ei(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:`pop`,direction:u?u>0?`forward`:`back`:``})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){let{history:e}=window;e.state&&e.replaceState(U({},e.state,{scroll:st()}),``)}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),{pauseListeners:c,listen:l,destroy:d}}function ni(e,t,n,r=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:null}}function ri(e){let{history:t,location:n}=window,r={value:ei(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:$r()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){let o=U({},t.state,ni(i.value.back,e,i.value.forward,!0),n,{position:i.value.position});a(e,o,!0),Ve(o.position,!0),r.value=e}function s(e,n){let o=U({},i.value,t.state,{forward:e,scroll:st()});a(o.current,o,!0),a(e,U({},ni(r.value,e,null),{position:o.position+1},n),!1),Ve(o.position),r.value=e}return{location:r,state:i,push:s,replace:o}}function ii(e){e=ut(e);let t=ri(e),n=ti(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=U({location:``,base:e,go:r,createHref:at.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}var ai={type:0,value:``},oi=/[a-zA-Z0-9_]/;function si(e){if(!e)return[[]];if(e===`/`)return[[ai]];if(!We(e))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=0,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;)switch(c=e[s++],n){case 0:c===`\\`?(r=n,n=4):c===`/`?(l&&d(),o()):c===`:`?(d(),n=1):f();break;case 4:f(),n=r;break;case 1:c===`(`?n=2:oi.test(c)?f():(d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case 2:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=3:u+=c;break;case 3:d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}return n===2&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var ci=`[^/]+?`,li={sensitive:!1,strict:!1,start:!0,end:!0},ui=/[.+*?^${}()[\]/\\]/g;function di(e,t){let n=U({},li,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[90];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=40+(n.sensitive?.25:0);if(o.type===0)r||(i+=`/`),i+=o.value.replace(ui,`\\$&`),s+=40;else if(o.type===1){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||ci;if(u!==ci){s+=10;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=20,c&&(s+=-8),n&&(s+=-20),u===`.*`&&(s+=-50)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=.7000000000000001}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===0)n+=e.value;else if(e.type===1){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(H(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=H(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function fi(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function pi(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=fi(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(mi(r))return 1;if(mi(i))return-1}return i.length-r.length}function mi(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var hi={strict:!1,end:!0,sensitive:!1};function gi(e,t,n){let r=di(si(e.path),n),i=U(r,{record:e,parent:t,children:[],alias:[]});return t&&!i.record.aliasOf==!t.record.aliasOf&&t.children.push(i),i}function _i(e,t){let n=[],r=new Map;t=je(hi,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=yi(e);s.aliasOf=r&&r.record;let l=je(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(yi(U({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&!We(u)){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=gi(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!xi(d)&&o(e.name)),Ti(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:G}function o(e){if(Oe(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=Ci(e,n);n.splice(t,0,e),e.record.name&&!xi(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw He(1,{location:e});s=i.record.name,a=U(vi(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&vi(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name,i.keys.forEach(e=>{e.optional&&!a[e.name]&&delete a[e.name]}));else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw He(1,{location:e,currentLocation:t});s=i.record.name,a=U({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:Si(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function vi(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function yi(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:bi(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function bi(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function xi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Si(e){return e.reduce((e,t)=>U(e,t.meta),{})}function Ci(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;pi(e,t[i])<0?r=i:n=i+1}let i=wi(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function wi(e){let t=e;for(;t=t.parent;)if(Ti(t)&&pi(e,t)===0)return t}function Ti({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ei(e){let t=v(Ke),n=v(Ge),r=y(()=>{let n=k(e.to);return t.resolve(n)}),i=y(()=>{let{matched:e}=r.value,{length:t}=e,i=e[t-1],a=n.matched;if(!i||!a.length)return-1;let o=a.findIndex(Te.bind(null,i));if(o>-1)return o;let s=ji(e[t-2]);return t>1&&ji(i)===s&&a[a.length-1].path!==s?a.findIndex(Te.bind(null,e[t-2])):o}),a=y(()=>i.value>-1&&Ai(n.params,r.value.params)),o=y(()=>i.value>-1&&i.value===n.matched.length-1&&dt(n.params,r.value.params));function s(n={}){if(ki(n)){let n=t[k(e.replace)?`replace`:`push`](k(e.to)).catch(G);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:r,href:y(()=>r.value.href),isActive:a,isExactActive:o,navigate:s}}function Di(e){return e.length===1?e[0]:e}var Oi=g({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:Ei,setup(e,{slots:t}){let n=re(Ei(e)),{options:r}=v(Ke),i=y(()=>({[Mi(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[Mi(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&Di(t.default(n));return e.custom?r:d(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function ki(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Ai(e,t){for(let n in t){let r=t[n],i=e[n];if(H(r)){if(!H(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}else if(r!==i)return!1}return!0}function ji(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var Mi=(e,t,n)=>e??t??n,Ni=g({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let r=v(Le),i=y(()=>e.route||r.value),a=v(nt,0),o=y(()=>{let e=k(a),{matched:t}=i.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),s=y(()=>i.value.matched[o.value]);w(nt,y(()=>o.value+1)),w(yt,s),w(Le,i);let c=new Set;w(we,c);let u=le(),f=J,{app:p}=_().appContext;return fe(()=>[u.value,s.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!Te(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=i.value,a=e.name,o=s.value,m=o&&o.components[a];if(!m)return Pi(n.default,{Component:m,route:r});let h=o.props[a],g=h?h===!0?r.params:typeof h==`function`?h(r):h:null,_=e=>{e.component.isUnmounted&&(o.instances[a]=null)},v=e=>l(()=>{if(f===r||i.value!==r||e.el.getRootNode()!==p._container.getRootNode())return;let t=f;f=r;for(let e of c)e(r,t)}),y=d(m,U({},g,t,{onVnodeUnmounted:_,onVnodeMounted:v,onVnodeUpdated:v,ref:u}));return Pi(n.default,{Component:y,route:r})||y}}});function Pi(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var Fi=Ni;function Ii(e){let t=e.matcher||_i(e.routes,e),n=e.parseQuery||Pe,r=e.stringifyQuery||Me,i=e.history,a=B(),o=B(),s=B(),c=ie(J),u=ie(0),d=J;V&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let f=Ue.bind(null,e=>``+e),p=Ue.bind(null,Mt),m=Ue.bind(null,qe);function h(e,n){let r,i;Oe(e)?(r=t.getRecordMatcher(e),i=n):i=e;let a=t.addRoute(i,r);return u.value++,()=>{a(),u.value++}}function g(e){let n=t.getRecordMatcher(e);n&&(t.removeRoute(n),u.value++)}function _(){t.clearRoutes(),u.value++}function v(){return t.getRoutes().map(e=>e.record)}function y(e){return!!t.getRecordMatcher(e)}function b(e,a){if(u.value,typeof e==`string`){a||=e.startsWith(`/`)?J:c.value;let r=Ie(n,e,a.path),o=t.resolve({path:r.path},a),s=i.createHref(r.fullPath);return U(r,o,{params:m(o.params),redirectedFrom:void 0,href:s})}a=U({},a||(e.path!=null&&e.path.startsWith(`/`)&&!(`name`in e&&e.name)?J:c.value));let o;if(e.path!=null)o=U({},e,{path:Ie(n,e.path,a.path).path});else{let t=U({},e.params);for(let e in t)t[e]??delete t[e];o=U({},e,{params:p(t)}),a.params=p(a.params)}let s=t.resolve(o,a),l=e.hash||``;s.params=f(m(s.params));let d=Re(r,U({},e,{hash:Ot(l),path:s.path})),h=i.createHref(d);return U({fullPath:d,hash:l,query:r===Me?Ne(e.query):e.query||{}},s,{redirectedFrom:void 0,href:h})}function x(e){return typeof e==`string`?Ie(n,e,c.value.path):U({},e)}function S(e,t){if(d!==e)return He(8,{from:t,to:e})}function C(e){return E(e)}function w(e){return C(U(x(e),{replace:!0}))}function T(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=x(i):{path:i},i.params={}),U({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function E(e,t){let n=d=b(e),i=c.value,a=e.state,o=e.force,s=e.replace===!0,l=T(n,i);if(l)return E(U(x(l),{state:typeof l==`object`?U({},a,l.state):a,force:o,replace:s}),t||n);let u=n;u.redirectedFrom=t;let f;return!o&&Fe(r,i,n)&&(f=He(16,{to:u,from:i}),le(i,i,!0,!1)),(f?Promise.resolve(f):ee(u,i)).catch(e=>W(e)?W(e,2)?e:ce(e):oe(e,u,i)).then(e=>{if(e){if(W(e,2))return E(U({replace:s},x(e.to),{state:typeof e.to==`object`?U({},a,e.to.state):a,force:o}),t||u)}else e=ne(u,i,!0,s,a);return te(u,i,e),e})}function D(e,t){let n=S(e,t);return n?Promise.reject(n):Promise.resolve()}function O(e){let t=F.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function ee(e,t){let n,[r,i,s]=Ze(e,t);n=At(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(Y(r,e,t))});let c=D.bind(null,e,t);return n.push(c),L(n).then(()=>{n=[];for(let r of a.list())n.push(Y(r,e,t));return n.push(c),L(n)}).then(()=>{n=At(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(Y(r,e,t))});return n.push(c),L(n)}).then(()=>{n=[];for(let r of s)if(r.beforeEnter){if(H(r.beforeEnter))for(let i of r.beforeEnter)n.push(Y(i,e,t));else n.push(Y(r.beforeEnter,e,t))}return n.push(c),L(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=At(s,`beforeRouteEnter`,e,t,O),n.push(c),L(n))).then(()=>{n=[];for(let r of o.list())n.push(Y(r,e,t));return n.push(c),L(n)}).catch(e=>W(e,8)?e:Promise.reject(e))}function te(e,t,n){s.list().forEach(r=>O(()=>r(e,t,n)))}function ne(e,t,n,r,a){let o=S(e,t);if(o)return o;let s=t===J,l=V?history.state:{};n&&(r||s?i.replace(e.fullPath,U({scroll:s&&l&&l.scroll},a)):i.push(e.fullPath,a)),c.value=e,le(e,t,n,s),ce()}let A;function re(){A||=i.listen((e,t,n)=>{if(!I.listening)return;let r=b(e),a=T(r,I.currentRoute.value);if(a){E(U(a,{replace:!0,force:!0}),r).catch(G);return}d=r;let o=c.value;V&&n.delta&&ke(Ee(o.fullPath,n.delta)),ee(r,o).catch(e=>W(e,12)?e:W(e,2)?(E(U(x(e.to),{force:!0}),r).then(e=>{W(e,20)&&!n.delta&&n.type===`pop`&&i.go(-1,!1)}).catch(G),Promise.reject()):(n.delta&&i.go(-n.delta,!1),oe(e,r,o))).then(e=>{e||=ne(r,o,!1),e&&(n.delta&&!W(e,8)?i.go(-n.delta,!1):n.type===`pop`&&W(e,20)&&i.go(-1,!1)),te(r,o,e)}).catch(G)})}let j=B(),M=B(),N;function oe(e,t,n){ce(e);let r=M.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function se(){return N&&c.value!==J?Promise.resolve():new Promise((e,t)=>{j.add([e,t])})}function ce(e){return N||(N=!e,re(),j.list().forEach(([t,n])=>e?n(e):t()),j.reset()),e}function le(t,n,r,i){let{scrollBehavior:a}=e;if(!V||!a)return Promise.resolve();let o=!r&&ze(Ee(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return l().then(()=>a(t,n,o)).then(e=>t===c.value&&e&&Ae(e)).catch(e=>t===c.value&&oe(e,t,n))}let ue=e=>i.go(e),P,F=new Set,I={currentRoute:c,listening:!0,addRoute:h,removeRoute:g,clearRoutes:_,hasRoute:y,getRoutes:v,resolve:b,options:e,push:C,replace:w,go:ue,back:()=>ue(-1),forward:()=>ue(1),beforeEach:a.add,beforeResolve:o.add,afterEach:s.add,onError:M.add,isReady:se,install(e){e.component(`RouterLink`,Oi),e.component(`RouterView`,Fi),e.config.globalProperties.$router=I,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>k(c)}),V&&!P&&c.value===J&&(P=!0,C(i.location).catch(e=>{}));let t={};for(let e in J)Object.defineProperty(t,e,{get:()=>c.value[e],enumerable:!0});e.provide(Ke,I),e.provide(Ge,ae(t)),e.provide(Le,c);let n=e.unmount;F.add(e),e.unmount=function(){F.delete(e),F.size<1&&(d=J,A&&A(),A=null,c.value=J,P=!1,N=!1),n()}}};function L(e){return e.reduce((e,t)=>e.then(()=>O(t)),Promise.resolve())}return I}var Li=gt(async e=>{if(!e.meta?.validate)return;let t=await Promise.resolve(e.meta.validate(e));if(t!==!0)return pt({fatal:!0,status:t&&(t.status||t.statusCode)||404,statusText:t&&(t.statusText||t.statusMessage)||`Page Not Found: ${e.fullPath}`,data:{path:e.fullPath}})}),Ri=e({docsBase:c,reporters:p}),zi=`modulepreload`,Bi=function(e,t){return new URL(e,t).href},Vi={},Hi=function(e){return e.pathname.endsWith(`.css`)},Ui=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},$=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Bi(t,n);let r=s(t),i=Hi(r);return Ui(Vi,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:zi,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Wi=bn;function Gi(e){return Qr(e)}var Ki;function qi(){let e;return e=Wi(vn(`builds/meta/${pe().app.buildId}.json`),{responseType:`json`}).then(e=>{if(!e||typeof e!=`object`||!Array.isArray(e.prerendered))throw Ri.NUXT_E5004();return e}),Ki=e,e.catch(t=>{Ki===e&&(Ki=void 0),Ri.NUXT_E5002({cause:t})}),e}function Ji(){return Ki||qi()}function Yi(e){let t=typeof e==`string`?e:e.path;try{return Gi(t)}catch(e){return Ri.NUXT_E5003({path:t,cause:e}),{}}}var Xi=[Li,gt(e=>{let t=Yi({path:e.path});if(t.redirect){let n=t.redirect.includes(`#`)?t.redirect:t.redirect+e.hash;return it(n)?(window.location.href=n,!1):n}})],Zi={},Qi=[{name:`customize`,path:`/customize`,component:()=>$(()=>import(`./Cj8LKW1j.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url)},{name:`reference`,path:`/reference`,component:()=>$(()=>import(`./lFAKI2D3.js`),__vite__mapDeps([10,1,2,3,4,5,6]),import.meta.url)},{name:`report`,path:`/report`,component:()=>$(()=>import(`./Cax8MU2E.js`),__vite__mapDeps([11,1,2,3,4,5,8,9]),import.meta.url)},{name:`index`,path:`/`,component:()=>$(()=>import(`./DFtcLD73.js`),__vite__mapDeps([12,1,2,9,3,4,5,6,7,8]),import.meta.url)}],$i=/\/(?=$|[?#])/;function ea(e,t,n){let{pathname:r,search:i,hash:a}=t,o=e.indexOf(`#`);if(o>-1){let t=a.includes(e.slice(o))?e.slice(o).length:1,n=a.slice(t);return n[0]!==`/`&&(n=`/`+n),De(n,``)}let s=De(r,e),c=!n||Je(s,n)?s:n;return c+(c.includes(`?`)?``:i)+a}var ta=j({name:`nuxt:router`,enforce:`pre`,async setup(e){let t=pe().app.baseURL,n=q.history?.(t)??ii(t),r=q.routes?await q.routes(Qi)??Qi:Qi,i,a=Ii({...q,scrollBehavior:(e,t,n)=>{if(t===J)i=n;else if(q.scrollBehavior){if(a.options.scrollBehavior=q.scrollBehavior,`scrollRestoration`in window.history){let e=a.beforeEach(()=>{e(),window.history.scrollRestoration=`manual`})}return q.scrollBehavior(e,J,i||n)}},history:n,routes:r});`scrollRestoration`in window.history&&(window.history.scrollRestoration=`auto`),e.vueApp.use(a);let o=ie(a.currentRoute.value);a.afterEach((e,t)=>{o.value=t}),Object.defineProperty(e.vueApp.config.globalProperties,"previousRoute",{get:()=>o.value});let s=ea(t,window.location,e.payload.path),c=De(window.location.pathname,t),l=ie(a.currentRoute.value),u=()=>{l.value=a.currentRoute.value};a.afterEach((e,t)=>{let n=e.matched.at(-1)?.components?.default,r=t.matched.at(-1)?.components?.default;n===r?Yr({route:e,Component:{type:n}})===Yr({route:t,Component:{type:r}})&&u():e.matched.length<t.matched.length&&e.matched.every((e,n)=>e.components?.default===t.matched[n]?.components?.default)&&u()});let d={sync:u};for(let e in l.value)Object.defineProperty(d,e,{get:()=>l.value[e],enumerable:!0});e._route=ae(d),e._middleware||={global:[],named:{}};let f=Xe();a.afterEach(async(t,n,r)=>{delete e._processingMiddleware,!e.isHydrating&&f.value&&await e.runWithContext(xt),r&&await e.callHook(`page:loading:end`)}),a.onError(async()=>{delete e._processingMiddleware,await e.callHook(`page:loading:end`)});try{await a.isReady()}catch(t){await mt(e,t)}let p=s===a.currentRoute.value.fullPath?a.currentRoute.value:a.resolve(s),m=a.currentRoute.value.fullPath,h=e.isHydrating&&e.payload.prerenderedAt&&e.payload.path&&s.replace($i,``)!==e.payload.path.replace($i,``)&&Je(a.currentRoute.value.path,e.payload.path);u();function g(r){!e.isHydrating&&r.fullPath!==ea(t,window.location)&&n.push(r.fullPath)}a.beforeEach(t=>{if(!e.isHydrating&&Qr(t.path).noScripts)return window.location.assign(a.resolve(t.fullPath).href),!1}),a.beforeResolve(e=>{if(e.matched.length||Je(e.path,c))return;let n=new URL(jt(e.fullPath,t),window.location.href);if(n.origin===window.location.origin)return window.location.assign(n),!1});let _=e.payload.state._layout;return a.beforeEach(async(t,n)=>{await e.callHook(`page:loading:start`),t.meta=re(t.meta),e.isHydrating&&_&&!se(t.meta.layout)&&(t.meta.layout=_),e._processingMiddleware=!0;{let r=new Set([...Xi,...e._middleware.global]);for(let e of t.matched){let t=e.meta.middleware;if(t)for(let e of Zr(t))r.add(e)}let i=Yi({path:t.path});if(i.appMiddleware)for(let e in i.appMiddleware)i.appMiddleware[e]?r.add(e):r.delete(e);for(let i of r){let r=typeof i==`string`?e._middleware.named[i]||await Zi[i]?.().then(e=>e.default||e):i;if(!r)throw ft.NUXT_E2004({entry:String(i),validMiddleware:void 0});try{let i=await e.runWithContext(()=>r(t,n));if(!e.payload.serverRendered&&e.isHydrating&&(i===!1||i instanceof Error)){let t=i||pt({status:404,statusText:`Page Not Found: ${s}`});return await e.runWithContext(()=>lt(t)),!1}if(i===!0)continue;if(i===!1)return i;if(i)return ct(i)&&i.fatal&&(await e.runWithContext(()=>lt(i)),g(t)),i}catch(n){let r=pt(n);return r.fatal&&(await e.runWithContext(()=>lt(r)),g(t)),r}}}}),a.afterEach(t=>{if(t.matched.length===0&&!f.value)return e.runWithContext(()=>lt(pt({status:404,fatal:!1,statusText:`Page not found: ${t.fullPath}`,data:{path:t.fullPath}})))}),e.hooks.hookOnce(`app:created`,async()=>{try{if(`name`in p&&(p.name=void 0),a.currentRoute.value.fullPath===m){if(h){let t=a.resolve(e.payload.path);`name`in t&&(t.name=void 0),await a.replace({...t,force:!0});let n=()=>{e[`~restoreDeferredRoute`]&&(e[`~restoreDeferredRoute`]=void 0,a.currentRoute.value=a.resolve(s),u(),a.replace({...p,force:!0}).catch(()=>{}))};e[`~restoreDeferredRoute`]=n,e.hooks.hookOnce(`app:suspense:resolve`,n)}else await a.replace({...p,force:!0})}a.options.scrollBehavior=q.scrollBehavior}catch(t){await mt(e,t)}}),{provide:{router:a}}}}),na=j(()=>{let e=K();St(()=>{e.beforeResolve(async()=>{await new Promise(e=>{setTimeout(e,100),requestAnimationFrame(()=>{setTimeout(e,0)})})})})}),ra=j(e=>{let t;async function n(){let r;try{r=await Ji()}catch(e){let t=e;if(!(`status`in t&&(t.status===404||t.status===403)))throw t}t&&clearTimeout(t),t=setTimeout(n,A);try{let n=await bn(vn(`builds/latest.json`)+`?${Date.now()}`);n.id!==r?.id&&(e.hooks.callHook(`app:manifest:update`,n),t&&clearTimeout(t))}catch{}}St(()=>{t=setTimeout(n,A)})});function ia(e={}){let t=e.path||window.location.pathname,n=new URL(t,window.location.href);if(n.host!==window.location.host)throw ft.NUXT_E2010({path:t});if(n.protocol&&kt(n.protocol))throw ft.NUXT_E2002({toPath:t,protocol:n.protocol});let r={};try{r=JSON.parse(sessionStorage.getItem(`nuxt:reload`)||`{}`)}catch{}if(e.force||r?.path!==t||r?.expires<Date.now()){try{sessionStorage.setItem(`nuxt:reload`,JSON.stringify({path:t,expires:Date.now()+(e.ttl??1e4)}))}catch{}if(e.persistState)try{sessionStorage.setItem(`nuxt:reload:state`,JSON.stringify({state:P().payload.state}))}catch{}window.location.pathname===t?window.location.reload():window.location.href=t}}var aa=j({name:`nuxt:chunk-reload-crawler`,setup(e){let t=!0;e.hooks.hookOnce(`app:suspense:resolve`,()=>{t=!1}),e.hook(`app:chunkError`,()=>{t&&vt(navigator.userAgent)&&ia()})}}),oa=j({name:`nuxt:chunk-reload`,setup(e){let t=K(),n=pe(),r=new Set;t.beforeEach(()=>{r.clear()}),e.hook(`app:chunkError`,({error:e})=>{r.add(e)});function i(e){ia({path:Qe(n.app.baseURL,e.fullPath),persistState:!0})}e.hook(`app:manifest:update`,()=>{t.beforeResolve(i)}),t.onError((e,t)=>{r.has(e)&&i(t)})}}),sa=j({name:`nuxt:island-link-navigation`,setup(e){}}),ca=j({name:`nuxt:global-components`}),la={},ua=[`route`,`payload`,`island`,`hint`],da=12,fa={route:8,payload:8,island:4,hint:8};function pa(e={}){let t={...fa,...e.concurrency},n=e.total??da,r=e.canPrefetch,i=e.defer,a={route:[],payload:[],island:[],hint:[]},o=ua.map(e=>a[e]),s=new WeakSet,c=new Map,l={route:0,payload:0,island:0,hint:0},u=0,d=new Map,f=new AbortController,p=new AbortController;p.abort();function m(e){c.get(e.key)===e&&c.delete(e.key)}function h(e){m(e),Promise.resolve().then(()=>e.run(p.signal,!1)).catch(()=>{})}function g(){if(!r||r())for(;u<n;){let e=ua.find(e=>a[e].length&&l[e]<t[e]);if(!e)return;let n=a[e].shift();_(n,s.delete(n))}}function _(e,t){let n=e.scope===`app`?f:new AbortController;e.scope===`navigation`&&d.set(e,n),l[e.priority]++,u++;let r=!1,a=()=>{r||(r=!0,l[e.priority]--,u--,d.delete(e),m(e),g())};n.signal.addEventListener(`abort`,a,{once:!0});let o=()=>Promise.resolve().then(()=>e.run(n.signal,t)).then(a,a);i?i(o,t,e.priority):o()}let v=(e,t)=>t!==void 0&&e.group===t&&e.priority!==`hint`;return{schedule(e){let t=[];for(let n of Array.isArray(e)?e:[e])c.has(n.key)?h(n):(c.set(n.key,n),t.push(n));for(let e=t.length-1;e>=0;e--)a[t[e].priority].unshift(t[e]);g()},promote(e){for(let t of o){let n=[],r=[];for(let i of t)i.group===e&&s.add(i),(i.group===e?n:r).push(i);t.length=0,t.push(...n,...r)}g()},reset(e){for(let t of o)for(let n=t.length-1;n>=0;n--){let r=t[n];r.scope===`navigation`&&!v(r,e)&&(t.splice(n,1),h(r))}for(let[t,n]of[...d])v(t,e)||n.abort();g()},resume:g}}var ma=1e3;function ha(e,t,n){if(t||n===`route`)return e();let r=globalThis.scheduler;r?.postTask?r.postTask(e,{priority:`background`}).catch(()=>{}):$e(e,{timeout:ma})}function ga(e=P()){if(e._prefetch)return e._prefetch;let t=!1,n=pa({canPrefetch:()=>Ye()&&!t&&document.visibilityState!==`hidden`,defer:ha});e._prefetch=n,navigator.connection?.addEventListener?.(`change`,()=>n.resume()),document.addEventListener(`visibilitychange`,()=>n.resume());let r=e.$router;return r.beforeEach(()=>{t=!0}),r.afterEach(e=>{t=!1,n.reset(ht(e.fullPath))}),r.onError(()=>{t=!1,n.resume()}),n}var _a=j({name:`nuxt:prefetch`,setup(e){let t=K();e.hooks.hook(`app:mounted`,()=>{t.beforeEach(async e=>{let t=e?.meta?.layout;typeof t==`string`&&t in la&&await bt(la[t])})});let{schedule:n}=ga(e);e.hooks.hook(`link:prefetch`,async e=>{if(ot(e))return;let r=t.resolve(e);if(!r)return;let i=r.meta.layout,a=Zr(r.meta.middleware).filter(e=>typeof e==`string`);n({key:`route:chunks:${e}`,priority:`route`,scope:`navigation`,group:ht(e),run:e=>{if(e.aborted)return;let t=[];for(let e of a){let n=Zi[e];typeof n==`function`&&t.push(n())}return typeof i==`string`&&i in la&&t.push(bt(la[i])),Promise.all(t).catch(()=>{})}})})}}),va=j(()=>{}),ya=e({docsBase:c,reporters:p});function ba(e){let t=e||P();return t.ssrContext?.head||t.runWithContext(()=>{if(m()){let e=v(`usehead`);if(!e)throw ya.NUXT_E6001();return e}})}function xa(e,t={}){return Br(e,{head:t.head||ba(t.nuxt),...t})}var Sa=j(()=>{let e=pe().app.baseURL;xa({style:[{key:`furifont-faces`,innerHTML:Lt.map(t=>`@font-face{font-family:"${t.family}";font-display:swap;font-weight:250 900;ascent-override:88%;descent-override:12%;line-gap-override:0%;src:url("${e}${It(t,`woff2`)}") format("woff2")}`).join(`
|
|
3
|
-
`)}]})}),Ca=[{code:`en`,name:`English`},{code:`ja`,name:`日本語`},{code:`zh-Hans`,name:`简体中文`},{code:`zh-Hant`,name:`繁體中文`}],wa=`furifont:locale`;function Ta(e){return Ca.some(t=>t.code===e)}function Ea(e){for(let t of e.map(e=>e.toLowerCase())){if(t.startsWith(`zh`))return/-(?:tw|hk|mo|hant)\b/.test(t)?`zh-Hant`:`zh-Hans`;if(t.startsWith(`ja`))return`ja`;if(t.startsWith(`en`))return`en`}return`en`}var Da={meta:{title:`Furifont: furigana built into the font`,description:`A Japanese font that shows furigana by itself.`},nav:{demo:`Intro`,docs:`Docs`,customize:`Customize`,report:`Report`,github:`GitHub repository`,light:`Switch to light`,dark:`Switch to dark`,language:`Language`,rubyOff:`Hide the ruby`,rubyOn:`Show the ruby`},footer:{fonts:`The fonts use the {license}. They come from Source Han Sans and Source Han Serif.`,data:`The readings come from {jmdict}, {jmnedict}, {kanjidic} (EDRDG) and {furigana}. They use the CC BY-SA 4.0 license.`,code:`The tools use the MIT license.`,report:`Report a wrong reading`,source:`Source on GitHub`,made:`Made by {author}`,supported:`Supported by {vercel} and {sponsors}`,sponsors:`sponsors`},copied:`Copied`,shuffle:`Show another sample`,editable:`Sample text. You can edit it.`,scripts:{hiragana:`Hiragana`,hepburn:`Romaji`},faces:{sans:`Sans`,serif:`Serif`},hero:{title1:`Furigana,`,title2:`set by the font.`,body:`Furifont is a Japanese font that shows furigana on the font itself. With the ligatures to adopt to pronunciation of words. Works everywhere supporting custom fonts.`,download:`Download the fonts`,build:`Build your own`},notice:`Furigana might be incorrect due to the limits of fonts, so keep that in mind.`,sections:{try:`Try it`,how:`How it works`,selectors:`Choosing a reading`,download:`Download`,anyPage:`On Websites`},playground:{script:`Ruby letters`,face:`Font style`,size:`Size / {size}px`,weight:`Weight / {weight}`,ruby:`Furigana`,okurigana:`Okurigana readings`,okuriganaHint:`This requires JavaScript. Font cannot handle okurigana due to browser's limitations.`,textHint:`Click the text to edit it.`,copy:`Copy the text`},how:{build:{title:`Customized build`,body:`Furifont is compiled from a base font, Source Han Sans or Serif. A build step reads a dictionary of thousands of words and draws the ruby into new glyphs. The result is a normal font file. It needs no JavaScript and no plugin.`},ligatures:{title:`Ligatures do the work`,body:`For each word, the font holds a ligature. For example, 今日 becomes one glyph with きょう above it. The swap happens when the text is drawn, so the text itself does not change.`},longest:{title:`Longest word first`,body:`Furifont compares each group of kanji with a list of thousands of common words. It tries the longest word first. For example, it picks 日本語 before 日本. It reads 今日 as one word, きょう.`},bare:{title:`No ruby when unsure`,body:`A single kanji gets ruby only when one reading is clearly the most likely. 大人気 can be read だいにんき or おとなげ, so Furifont shows no ruby.`},okurigana:{title:`Opt-in Okurigana`,body:`Browsers shape each font script separately, so the font cannot see the kana after a kanji (which is called okurigana). We provide optional support for it through JavaScript annotation.`}},selectors:{body:`Some words have more than one common reading. Furifont shows the most common one. To choose another, put a variation selector (an invisible character) right after the first kanji. VS226 gives reading 1, VS227 gives reading 2, and so on. VS225 removes the ruby.`,lookUp:`Look up readings`,default:`Default`,reading2:`Reading 2 (VS227)`,none:`No ruby (VS225)`},downloads:{all:`Download all as zip`,family:`Family`,ruby:`Ruby`,variable:`Variable`,formats:`OTF and TTF are commonly used for installing on your computer. WOFF2 is optimized for websites. We recommend the variable fonts for the best experience. In some cases you may need the static weights for compatibility.`,buildOwn:`Or build your own font. You can choose another base font, a list with fewer or more words, other ruby letters, or other sizes.`},anyPage:{body:`You can use Furifont on any website. Lines with kanji get extra space for the ruby. If Furifont is installed on your computer, nothing downloads. If it is not, the font loads from this site.`,bookmarklet:`Bookmarklet`,bookmarkletHint:`Drag it to your bookmarks bar. On any page, click it to turn Furifont on. Click it again to turn Furifont off. Some sites, such as X and GitHub, do not let fonts load from other sites. On those sites, install Furifont on your computer.`,okurigana:`Okurigana readings`,okuriganaHint:`Picks the right reading of a kanji before its okurigana, such as 来 in 来る and 来ない.`,userscript:`Userscript`,install:`Install the userscript`,userscriptHint:`This works with Tampermonkey or Violentmonkey (browser add-ons that run small scripts). It turns Furifont on by itself on Japanese pages. It also works on sites that do not let fonts load from other sites. Its menu lets you switch to another Furifont font or turn it off.`,toast:{message:`Furifont could not load its font on this page. Some sites, such as X and GitHub, do not let fonts load from other sites. On those sites, you must install Furifont on your computer.`,download:`Download the fonts`,close:`Close`,outdated:`A newer version of Furifont is out.`,userscript:`Update the userscript`,bookmarklet:`Get the new bookmarklet`},menu:{okuriganaOn:`Okurigana readings: on`,okuriganaOff:`Okurigana readings: off`}},reference:{eyebrow:`Reference`,title:`Pick a reading`,body:`Furifont shows the most common reading of a word. To show another reading, put a variation selector (an invisible character) right after the first kanji of the word. VS226 gives reading 1, VS227 gives reading 2, and so on. After a single kanji, the selector chooses the reading of that kanji. VS225 shows the kanji with no ruby.`,search:`Search a word or kanji: 市場, 今日, 生`,searchLabel:`Search readings`,hint:`Click a reading to copy the word with its selector.`,unavailable:`The reference comes with the ready-made fonts, and it could not load here ({error}). Build the fonts with {command}, or open Customize.`,loading:`Loading`,words:`Words with several readings / {count}`,kanji:`Kanji / {count}`,copyWith:`Copy {text} with {selector}`,default:`default`},report:{eyebrow:`Report`,title:`Report a wrong reading`,body:`Did Furifont show the wrong furigana, or none where a word needs it? Tell us the words and the readings they should have. You can report several words at once. We go through the reports to fix the dictionary.`,link:`Report a wrong reading.`,sections:{words:`Words / {count}`,environment:`Where you saw it`,note:`Anything else`},word:`Word`,expected:`Correct reading`,shown:`Reading shown (optional)`,context:`Sentence (optional)`,remove:`Remove {word}`,add:`Add another word`,environment:`Environment`,environments:{playground:`The playground on this site`,website:`Another website`,desktop:`Desktop app`,mobile:`Mobile app`},family:`Font`,url:`Page address (optional)`,app:`App (optional)`,appPlaceholder:{desktop:`Word, Pages, VS Code`,mobile:`Notes, Kindle`},os:`System (optional)`,notePlaceholder:`Anything that helps, for example the browser, or why the reading is wrong.`,name:`Your name (optional)`,nameHint:`To credit you when the reading is fixed. Leave it empty to stay anonymous.`,send:`Send the report`,sending:`Sending`,sent:`Thanks for your report.`,again:`Report more words`,failed:`The report could not be sent. Try again later.`,limited:`You sent many reports in a short time. Try again in an hour.`,privacy:`We store what you enter here, the font version and your browser name. We do not store your IP address.`},docs:{install:`Install the font`,website:`Use on your website`,readings:`Choose a reading`},customize:{connecting:`Connecting to furifont dev`,title:`Customize`,offline:{eyebrow:`Customize / offline`,title:`Build your own Furifont`,body:`Customize is a tool that runs on your computer. It reads your base fonts and saves the fonts that it builds. Start it in any folder. Then this page opens with a live preview, the dictionary, and a Build button. The new fonts go in {folder}.`,needs:`You need Node 22.18 or later (a free program that runs JavaScript tools).`,run:`Start Customize in any folder`},auth:{eyebrow:`Customize / locked`,title:`Enter the code from your terminal`,body:`{command} showed a six-digit code in your terminal (the window where you started it).`,code:`Code`,failed:`That code did not work. Check the terminal and try again.`,unlock:`Unlock`},sections:{preview:`Preview`,build:`Build`,dictionary:`Dictionary`,words:`Your words`},options:{family:`Font name`,base:`Base font`,baseHint:`The font to add ruby to. Use a font to download, such as Source Han Serif JP Bold, or the path to another font file on your computer.`,script:`Ruby letters`,hiragana:`Hiragana`,katakanaOn:`Kata on`,hepburn:`Romaji`,skip:`Skip the most common words`,skipHint:`These words get no ruby, because a reader already knows them. The newspaper word list is sorted by how often the words appear, in steps of 500 words.`,words:`Then add ruby to`,wordsHint:`The next words in the list. With the word lists below, {count} words get ruby.`,jlpt:`Skip JLPT words`,jlptHint:`Words on the JLPT lists (for the Japanese-Language Proficiency Test) up to this level get no ruby. N5 is the easiest level.`,none:`None`,sources:`Also include words from`,source:{spec1:{name:`Everyday words`,hint:`JMdict "spec1": common words that the other lists miss, such as 日本.`},ichi1:{name:`Basic words`,hint:`JMdict "ichi1": the most common words from the Ichimango list (a list of basic words).`},news1:{name:`Newspaper words`,hint:`JMdict "news1": the 12,000 words that appear most often in newspapers.`},gai1:{name:`Loanwords`,hint:`JMdict "gai1": common words that Japanese borrowed from other languages.`},tatoeba:{name:`Tatoeba sentences`,hint:`Tatoeba: words that its example sentences use often, such as 留守中, even when no list above has them, and how a kanji alone reads, such as 箱.`},places:{name:`Place names`,hint:`JMnedict: stations and places. Furifont uses them where no common word matches the text.`},untagged:{name:`Unranked words`,hint:`JMdict: words that no list ranks, such as 四字熟語. Furifont uses them where nothing else matches the text. This adds about 700 KB to the font.`},"mahjong-yaku":{name:`Mahjong yaku`,hint:`Names of the scoring hands and tiles of mahjong, such as 立直. Furifont uses them where no common word matches the text.`},"jr-stations":{name:`JR stations`,hint:`Names of JR stations, such as 阿蘇, from the Desktop Tetsu list. Furifont uses them where no common word matches the text.`},yojijukugo:{name:`Four-character idioms`,hint:`JMdict: yojijukugo, such as 阿鼻叫喚. Furifont uses them where no common word matches the text.`}},isolated:`Ruby on single kanji`,share:`Single kanji: how sure`,shareHint:`A single kanji gets ruby only when one reading makes up at least this share of its uses in the dictionary. Use a number from 0.5 to 1. A higher number gives ruby to fewer kanji.`,rubyScale:`Ruby size (× kanji)`,rubyGap:`Space above kanji (em)`,squeeze:`Narrowest squeeze (× normal)`,maxWidth:`Widest ruby (em)`,reset:`Reset to defaults`,resetHint:`Go back to the settings that Customize loaded. Your words stay.`},preview:{compiling:`Making a preview`,weight:`Preview weight`,size:`Preview size`,stats:`{glyphs} glyphs / {ms} ms`},build:{words:`Words`,places:`Places`,ambiguous:`Several readings`,lone:`Single kanji`,protected:`Your changes`,glyphs:`Ruby glyphs`,rules:`Rules`,planning:`Planning`,estimate:{woff2:`≈ {size} WOFF2`,otf:`{size} OTF`},formats:`Formats`,estimating:`Estimating the size`,run:`Build font`,save:`Save settings`},dictionary:{search:`Search the dictionary: 今日, 生`,results:`{count} words`,hint:`These words have several common readings. Pin one to make it the default reading.`,noTag:`not a common word`,restore:`Restore`,remove:`Never add ruby`},custom:{placeholder:`日[に]本[ほん] or 今日[きょう]`,label:`Word to add`,add:`Add word`,added:`Added / {count}`,pinned:`Pinned / {count}`,removed:`Never given ruby / {count}`,none:`None`,takeOut:`Remove {item}`}}},Oa=Da,ka={en:async()=>Da,ja:async()=>(await $(async()=>{let{default:e}=await import(`./D_G0KgX8.js`);return{default:e}},[],import.meta.url)).default,"zh-Hans":async()=>(await $(async()=>{let{default:e}=await import(`./Bzck4lmu.js`);return{default:e}},[],import.meta.url)).default,"zh-Hant":async()=>(await $(async()=>{let{default:e}=await import(`./DAr951Yq.js`);return{default:e}},[],import.meta.url)).default},Aa=[Wr,ta,na,ra,aa,oa,sa,ca,_a,va,Sa,j(async e=>{let t=localStorage.getItem(wa),n=Ta(t)?t:Ea(navigator.languages);e.vueApp.use(Rt({legacy:!1,locale:n,fallbackLocale:`en`,messages:{en:Oa,[n]:await ka[n]()}}))})];function ja(e=_()){let t=e;t&&!t.sp&&(t.sp=[])}function Ma(){let{locale:e,availableLocales:t,setLocaleMessage:n}=zt();return y({get:()=>e.value,set:async r=>{Ta(r)&&(t.includes(r)||n(r,await ka[r]()),e.value=r,localStorage.setItem(wa,r))}})}var Na={class:`relative flex items-center`},Pa=[`aria-label`],Fa=[`value`,`lang`],Ia=Object.assign(g({__name:`AppLanguageSelect`,setup(e){let t=Ma();return(e,n)=>(T(),a(`label`,Na,[n[1]||=i(`span`,{class:`i-ph-translate pointer-events-none absolute left-2 text-sm color-muted`},null,-1),F(i(`select`,{"onUpdate:modelValue":n[0]||=e=>he(t)?t.value=e:null,"aria-label":e.$t(`nav.language`),class:`focus-ring no-ruby h-8 appearance-none rounded-none border border-base bg-base pl-7 pr-2 text-xs color-base transition-colors hover:border-strong`},[(T(!0),a(D,null,E(`LOCALES`in e?e.LOCALES:k(Ca),e=>(T(),a(`option`,{key:e.code,value:e.code,lang:e.code},u(e.name),9,Fa))),128))],8,Pa),[[xe,k(t)]])]))}}),{__name:`AppLanguageSelect`}),La=e({docsBase:c,reporters:p}),Ra=`$s`;function za(...e){let t=typeof e[e.length-1]==`string`?e.pop():void 0;typeof e[0]!=`string`&&e.unshift(t);let[n,r]=e;if(!n||typeof n!=`string`)throw La.NUXT_E7009({key:n});if(r!==void 0&&typeof r!=`function`)throw La.NUXT_E7007({type:typeof r});let i=Ra+n,a=P(),o=_e(a.payload.state,i);if(r&&(a._state[i]??={_default:r}),o.value===void 0&&r){let e=r();if(he(e))return a.payload.state[i]=e,o;o.value=e}return o}var Ba=`furifont:dark`;function Va(){let e=za(`dark-mode`,()=>{let e=localStorage.getItem(Ba);return e?e===`true`:matchMedia(`(prefers-color-scheme: dark)`).matches});M(()=>document.documentElement.classList.toggle(`dark`,e.value));function t(){e.value=!e.value,localStorage.setItem(Ba,String(e.value))}return{dark:L(e),toggle:t}}var Ha=yn(`/logo.svg`),Ua={class:`sticky top-0 z-10 border-b border-base bg-base`},Wa={class:`relative mx-auto flex h-14 max-w-6xl items-center gap-3 border-x border-base px-3 sm:gap-6 sm:px-6`},Ga=[`href`,`target`],Ka={class:`flex items-center gap-1`},qa={class:`ml-auto flex items-center gap-1`},Ja=[`href`,`aria-label`],Ya=[`aria-label`],Xa=Object.assign(g({__name:`AppHeader`,setup(e){let{dark:t,toggle:r}=Va(),o=[{to:`/`,label:`nav.demo`}];return o.push({to:`/customize`,label:`nav.customize`}),o.push({to:`/report`,label:`nav.report`,class:`hidden sm:block`}),(e,s)=>{let c=Vt,l=wt,d=Ia;return T(),a(`header`,Ua,[i(`nav`,Wa,[N(c,{class:`-bottom-[6px] -left-[6px]`}),N(c,{class:`-bottom-[6px] -right-[6px]`}),i(`a`,{href:`SITE`in e?e.SITE:k(Ft),target:k(`_blank`),class:`focus-ring flex items-center gap-2.5 font-mono text-sm font-medium`},[i(`img`,{src:Ha,alt:``,class:z([`size-6`,{invert:k(t)}]),"aria-hidden":`true`},null,2),s[1]||=i(`span`,{class:`hidden sm:inline`},`furifont`,-1)],8,Ga),i(`div`,Ka,[(T(),a(D,null,E(o,t=>N(l,{key:t.to,to:t.to,class:z([t.class,`focus-ring whitespace-nowrap px-1 py-1 font-mono text-xs uppercase tracking-[0.04em] color-muted transition-colors hover:color-base sm:px-2 sm:tracking-[0.12em]`]),"active-class":`!color-base`},{default:O(()=>[n(u(e.$t(t.label)),1)]),_:2},1032,[`to`,`class`])),64))]),i(`div`,qa,[N(d),i(`a`,{href:`REPOSITORY`in e?e.REPOSITORY:k(Bt),target:`_blank`,rel:`noopener`,class:`btn-ghost focus-ring hidden w-9 px-0 sm:inline-flex`,"aria-label":e.$t(`nav.github`)},[...s[2]||=[i(`span`,{class:`i-ph-github-logo`},null,-1)]],8,Ja),i(`button`,{type:`button`,class:`btn-ghost focus-ring w-9 px-0`,"aria-label":k(t)?e.$t(`nav.light`):e.$t(`nav.dark`),onClick:s[0]||=(...e)=>k(r)&&k(r)(...e)},[i(`span`,{class:z(k(t)?`i-ph-sun`:`i-ph-moon`)},null,2)],8,Ya)])])])}}}),{__name:`AppHeader`}),Za=(e=`RouteProvider`)=>g({name:e,props:{route:{type:Object,required:!0},vnode:Object,vnodeRef:Object,renderKey:String,trackRootNodes:Boolean,routeRecord:Object},setup(e){let t=e.renderKey,n=e.route,r={};for(let i in e.route)Object.defineProperty(r,i,{get:()=>t===e.renderKey?e.route[i]:n[i],enumerable:!0});return w(tt,ae(r)),()=>e.vnode?d(e.vnode,{ref:e.vnodeRef}):e.vnode}}),Qa=Za(),$a=new WeakMap,eo=g({name:`NuxtPage`,inheritAttrs:!1,props:{name:{type:String},transition:{type:[Boolean,Object],default:void 0},keepalive:{type:[Boolean,Object],default:void 0},route:{type:Object},pageKey:{type:[Function,String],default:null}},setup(e,{attrs:t,slots:n,expose:r}){let i=P(),a=le(),o=v(tt,null),s=new Set,c;r({pageRef:a});let u=v(Dt,null),f,p=i.deferHydration(),m=!1,h=!1,g,_=0;if(i.isHydrating){let e=i.hooks.hookOnce(`app:error`,p),t=K().beforeEach(()=>{e(),t()})}e.pageKey&&fe(()=>e.pageKey,(e,t)=>{e!==t&&i.callHook(`page:loading:start`)});let y=!1;{let e=K().beforeResolve(()=>{y=!1});S(()=>{e(),p()})}return()=>d(Fi,{name:e.name,route:e.route,...t},{default:ro(t=>{let r=to(o,t.route,t.Component),v=o&&o.matched.length===t.route.matched.length;if(!t.Component)return f&&!v&&!ao(f)?f:(p(),e.transition??t.route.meta.pageTransition??!1?_t(et([e.transition,t.route.meta.pageTransition,!1]),null).default():void 0);if(f&&u&&!ao(f)&&!u.isCurrent(t.route))return f;if(r&&o&&(!u||u?.isCurrent(o)))return(v||f)&&!ao(f)?f:null;let b=Yr(t,e.pageKey),x=no(o,t.route,t.Component);!i.isHydrating&&c===b&&!x&&l(()=>{y||(y=!0,i.callHook(`page:loading:end`))}),m&&c!==b&&h&&_++,c=b;let S=!!(e.transition??t.route.meta.pageTransition??!1),C=S&&et([e.transition,t.route.meta.pageTransition,!1,{onAfterLeave(){Et(i),i.callHook(`page:transition:finish`,t.Component)}}]),w=e.keepalive??t.route.meta.keepalive??!1,T=t.Component.type,E=T.name||T.__name;t.route.meta.keepalive&&E&&s.add(E);let D;if(s.size>0&&e.keepalive==null&&(!w||typeof w==`object`&&w&&w.include)){let e=typeof w==`object`&&w?{...w}:{},t=e.include?Array.isArray(e.include)?e.include:[e.include]:[];D={...e,include:Array.from(new Set([...t,...s]))}}else D=w;return f=_t(S&&C,Xr(D,d(ve,{key:_,suspensible:!0,onPending:()=>{m=!0,S&&rt(i),g=i.callHook(`page:start`,t.Component)},onResolve:async()=>{m=!1,h=!0,i.isHydrating&&i[`~restoreDeferredRoute`]?.();try{await l(),i._route.sync?.(),await g,await i.callHook(`page:finish`,t.Component),!y&&!x&&(y=!0,await i.callHook(`page:loading:end`))}finally{p()}}},{default:()=>{let e={key:b||void 0,vnode:n.default?io(n.default,t):t.Component,route:t.route,renderKey:b||void 0,trackRootNodes:S,vnodeRef:a,routeRecord:void 0};if(!D)return d(Qa,e);let r=T,i=$a.get(r);return i||(i=Za(E),$a.set(r,i)),d(i,e)}}))).default(),f})})}});function to(e,t,n){if(!e)return!1;let r=t.matched.findIndex(e=>e.components?.default===n?.type);if(r===-1)return!1;let i=t.matched.slice(0,r).filter(e=>e.components?.default);if(!i.length)return!1;let a=e.matched.filter(e=>e.components?.default);return i.some((e,t)=>e.components?.default!==a[t]?.components?.default)||n&&Yr({route:t,Component:n})!==Yr({route:e,Component:n})}function no(e,t,n){return e?t.matched.findIndex(e=>e.components?.default===n?.type)<t.matched.length-1:!1}function ro(e){let t=(t=>{let n=e(t);return Array.isArray(n)?n:n==null||!be(n)?[b()]:[n]});return t._n=!0,t}function io(e,t){let n=e(t);return n.length===1?d(n[0]):d(D,void 0,n)}function ao(e){return!!e&&(!!e.suspense?.isUnmounted||!!e.component?.isUnmounted)}var oo={class:`border-t border-base text-xs color-muted`},so={class:`relative mx-auto max-w-6xl border-x border-base`},co={class:`flex flex-wrap items-center justify-between gap-x-6 gap-y-3 px-6 py-5`},lo={class:`flex flex-wrap items-center gap-x-2`},uo={class:`flex flex-wrap items-center gap-x-4 gap-y-2`},fo=[`href`],po={class:`flex flex-col gap-3 border-t border-base px-6 py-5`},mo=[`href`],ho=`underline underline-offset-3 hover:color-base`,go=Object.assign(g({__name:`AppFooter`,setup(e){let r={jmdict:[`JMdict`,`https://www.edrdg.org/jmdict/j_jmdict.html`],jmnedict:[`JMnedict`,`https://www.edrdg.org/enamdict/enamdict_doc.html`],kanjidic:[`KANJIDIC2`,`https://www.edrdg.org/wiki/index.php/KANJIDIC_Project`],furigana:[`JmdictFurigana`,`https://github.com/Doublevil/JmdictFurigana`]};return(e,o)=>{let s=Vt,c=t(`i18n-t`),l=wt;return T(),a(`footer`,oo,[i(`div`,so,[N(s,{class:`-left-[6px] -top-[6px]`}),N(s,{class:`-right-[6px] -top-[6px]`}),i(`div`,co,[i(`p`,lo,[N(c,{keypath:`footer.made`,tag:`span`},{author:O(()=>[i(`a`,{class:z(ho),href:`https://github.com/antfu`,target:`_blank`,rel:`noopener`},`@antfu`)]),_:1}),o[0]||=i(`span`,{"aria-hidden":`true`},`·`,-1),N(c,{keypath:`footer.supported`,tag:`span`},{vercel:O(()=>[i(`a`,{class:z(ho),href:`https://vercel.com`,target:`_blank`,rel:`noopener`},`▲ Vercel`)]),sponsors:O(()=>[i(`a`,{class:z(ho),href:`https://github.com/sponsors/antfu`,target:`_blank`,rel:`noopener`},u(e.$t(`footer.sponsors`)),1)]),_:1})]),i(`div`,uo,[N(l,{to:`/report`,class:`inline-flex items-center gap-1.5 hover:color-base`},{default:O(()=>[o[1]||=i(`span`,{class:`i-ph-flag`},null,-1),n(` `+u(e.$t(`footer.report`)),1)]),_:1}),i(`a`,{class:`inline-flex items-center gap-1.5 hover:color-base`,href:`REPOSITORY`in e?e.REPOSITORY:k(Bt),target:`_blank`,rel:`noopener`},[o[2]||=i(`span`,{class:`i-ph-github-logo`},null,-1),n(` `+u(e.$t(`footer.source`)),1)],8,fo)])]),i(`div`,po,[N(c,{keypath:`footer.fonts`,tag:`p`},{license:O(()=>[i(`a`,{class:z(ho),href:`https://openfontlicense.org`,target:`_blank`,rel:`noopener`},`SIL Open Font License`)]),_:1}),N(c,{keypath:`footer.data`,tag:`p`},oe({_:2},[E(r,(e,t)=>({name:t,fn:O(()=>[i(`a`,{class:z(ho),href:e[1],target:`_blank`,rel:`noopener`},u(e[0]),9,mo)])}))]),1024),i(`p`,null,u(e.$t(`footer.code`)),1)])])])}}}),{__name:`AppFooter`});function _o(e,t){let n=za(e,()=>t(localStorage.getItem(e)));return y({get:()=>n.value,set:t=>{n.value=t,localStorage.setItem(e,String(t))}})}function vo(){let{t:e}=zt(),t=_o(`furifont:face`,e=>e===`serif`?`serif`:`sans`),n=_o(`furifont:script`,e=>e===`hepburn`?`hepburn`:`hiragana`);return{face:t,script:n,ruby:_o(`furifont:ruby`,e=>e!==`false`),okurigana:_o(`furifont:okurigana`,e=>e!==`false`),family:y(()=>Lt.find(e=>e.face===t.value&&e.script===n.value)),faces:y(()=>[`sans`,`serif`].map(t=>({value:t,label:e(`faces.${t}`)}))),scripts:y(()=>[`hiragana`,`hepburn`].map(t=>({value:t,label:e(`scripts.${t}`)})))}}var yo={class:`min-h-screen flex flex-col overflow-x-clip bg-base color-base`},bo={class:`mx-auto w-full max-w-6xl flex-1 border-x border-base`},xo=g({__name:`app`,setup(e){let{t,locale:n}=zt();xa({htmlAttrs:{lang:n},title:()=>t(`meta.title`),meta:[{name:`description`,content:()=>t(`meta.description`)}]});let{family:r,ruby:o}=vo();return M(()=>{let{style:e}=document.documentElement;e.setProperty(`--ff-font`,`"${r.value.family}"`),e.setProperty(`--ff-features`,o.value?`normal`:`"ss01"`)}),(e,t)=>{let n=Xa,r=eo,o=go;return T(),a(`div`,yo,[N(n),i(`main`,bo,[N(r)]),N(o)])}}}),So={__name:`nuxt-error-page`,props:{error:Object},setup(e){let t=e.error,n=Number(t.statusCode||500),i=n===404,a=t.statusMessage??(i?`Page Not Found`:`Internal Server Error`),s=t.message||t.toString(),c=h(()=>$(()=>import(`./B4Fx_Djw.js`),__vite__mapDeps([13,1,2,9,3,14]),import.meta.url)),l=h(()=>$(()=>import(`./X45Acd-Y.js`),__vite__mapDeps([15,1,2,16]),import.meta.url)),u=i?c:l;return(e,t)=>(T(),R(k(u),r(o({status:k(n),statusText:k(a),statusCode:k(n),statusMessage:k(a),description:k(s),stack:k(void 0)})),null,16))}},Co=()=>null,wo={key:0},To={__name:`nuxt-root`,setup(e){let t=P(),n=t.deferHydration();if(t.isHydrating){let e=t.hooks.hookOnce(`app:error`,n),r=K().beforeEach(()=>{e(),r()})}window.location.pathname,w(tt,Ct()),t.hooks.callHookWith(e=>e.map(e=>e()),`vue:setup`,[]);let r=Xe();function i(e,n,r){let i=t.vueApp.config.errorHandler;if(i&&!i.__nuxt_default)try{i(e,n,r)}catch(e){console.error("[nuxt] Error in `app.config.errorHandler`",e)}}return f((e,n,r)=>{if(t.hooks.callHook(`vue:error`,e,n,r)?.catch(e=>console.error("[nuxt] Error in `vue:error` hook",e)),vt(navigator.userAgent))return Tt(t,e),!1;if(ct(e)&&(e.fatal||e.unhandled))return t.runWithContext(()=>lt(e)),ja(),i(e,n,r),!1}),(e,t)=>(T(),R(ve,{onResolve:k(n)},{default:O(()=>[k(!1)?(T(),a(`div`,wo)):k(r)?(T(),R(k(So),{key:1,error:k(r)},null,8,[`error`])):k(!1)?(T(),R(k(Co),{key:2,context:k(!1)},null,8,[`context`])):k(!1)?(T(),R(ne(k(!1)),{key:3})):(T(),R(k(xo),{key:4}))]),_:1},8,[`onResolve`]))}},Eo;{let e;Eo=async function(){if(e)return e;let t=!!(window.__NUXT__?.serverRendered??document.getElementById(`__NUXT_DATA__`)?.dataset.ssr===`true`),n=t?Ce(To):Se(To),r=de({vueApp:n});async function i(e){await r.callHook(`app:error`,e),r.payload.error||=pt(e)}i.__nuxt_default=!0,n.config.errorHandler=i,r.hook(`app:suspense:resolve`,()=>{n.config.errorHandler===i&&(n.config.errorHandler=void 0)}),!t&&me.id&&r.hook(`app:suspense:resolve`,()=>{document.getElementById(me.id)?.remove()});try{await ue(r,Aa)}catch(e){i(e)}try{await r.hooks.callHook(`app:created`,n),await r.hooks.callHook(`app:beforeMount`,n),n.mount(I),await r.hooks.callHook(`app:mounted`,n),await l()}catch(e){i(e)}return n},e=Eo().catch(e=>{throw C.NUXT_E1009({cause:e}),e})}export{bn as i,xa as n,$ as r,vo as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={meta:{title:`Furifont:自带振假名的日文字体`,description:`自带振假名的日语字体。`},nav:{demo:`简介`,docs:`文档`,customize:`自定义`,report:`报告`,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 许可。`,report:`报告错误读音`,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:`自己构建`},notice:`受字体限制,振假名可能不正确,请留意。`,sections:{try:`试一试`,how:`原理`,selectors:`选择读音`,download:`下载`,anyPage:`用于网站`},playground:{script:`振假名所用文字`,face:`字体样式`,size:`字号 / {size}px`,weight:`字重 / {weight}`,ruby:`振假名`,okurigana:`送假名读音`,okuriganaHint:`需要 JavaScript。受浏览器限制,字体无法自行处理送假名。`,textHint:`点击文字即可编辑。`,copy:`复制文本`},how:{build:{title:`定制构建`,body:`Furifont 以思源黑体或思源宋体为基础编译而成。构建时会读取包含数千个词的词典,并把振假名绘制成新的字形。得到的是普通的字体文件,不需要 JavaScript,也不需要插件。`},ligatures:{title:`由连字完成工作`,body:`字体中为每个词准备了连字。今日 会变成上方带有 きょう 的单个字形。替换发生在绘制文字时,所以文本本身不会改变。`},longest:{title:`长词优先`,body:`Furifont 把每一组汉字与几千个常用词的列表对照,先试最长的词。例如,会先选 日本語,再考虑 日本。今日 会当作一个词,读作 きょう。`},bare:{title:`拿不准就不加`,body:`只有一个汉字时,只有当某个读音明显最可能,才加振假名。大人気 可以读作 だいにんき,也可以读作 おとなげ,所以不加振假名。`},okurigana:{title:`可选的送假名支持`,body:`浏览器按字体的文字种类分别排版,所以字体看不到汉字后面的假名(称为送假名)。我们通过 JavaScript 标注,提供可选的支持。`}},selectors:{body:`有些词有多个常用读音。Furifont 显示最常见的那个。要选其他读音,就在第一个汉字后面紧跟一个变体选择器(看不见的字符)。VS226 是读音 1,VS227 是读音 2,依此类推。VS225 去掉振假名。`,lookUp:`查询读音`,default:`默认`,reading2:`读音 2(VS227)`,none:`无振假名(VS225)`},downloads:{all:`全部下载为 ZIP`,family:`字体家族`,ruby:`振假名`,variable:`可变`,formats:`OTF 和 TTF 常用于安装到电脑上。WOFF2 针对网站做了优化。我们推荐使用可变字体,体验最佳。在某些情况下,为了兼容性,你可能需要固定字重的版本。`,buildOwn:`你也可以自己制作字体。可以选择其他基础字体、词的数量、振假名所用文字或尺寸。`},anyPage:{body:`你可以在任何网站上使用 Furifont。有汉字的行会留出放振假名的空间。如果电脑上已安装 Furifont,就不用下载。否则字体会从本站加载。`,bookmarklet:`书签小工具`,bookmarkletHint:`把它拖到书签栏。在任何页面点击它,就会打开 Furifont;再点一次就会关闭。有些网站(如 X 和 GitHub)不允许加载其他网站的字体。在这些网站上,请在电脑上安装 Furifont。`,okurigana:`送假名读音`,okuriganaHint:`为送假名前的汉字选出正确的读音,例如「来る」「来ない」中的「来」。`,userscript:`用户脚本`,install:`安装用户脚本`,userscriptHint:`适用于 Tampermonkey 或 Violentmonkey(运行小脚本的浏览器扩展)。它会在日语页面自动打开 Furifont,在不允许加载其他网站字体的网站上也能用。你可以在它的菜单里切换到另一款 Furifont 字体,或将其关闭。`,toast:{message:`Furifont 无法在此页面加载字体。有些网站(如 X 和 GitHub)不允许加载其他网站的字体。在这些网站上,需要在电脑上安装 Furifont。`,download:`下载字体`,close:`关闭`,outdated:`Furifont 有新版本了。`,userscript:`更新用户脚本`,bookmarklet:`获取新的书签小工具`},menu:{okuriganaOn:`送假名读音:开`,okuriganaOff:`送假名读音:关`}},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:`默认`},report:{eyebrow:`报告`,title:`报告错误读音`,body:`如果 Furifont 显示了错误的假名注音,或该有注音的词没有注音,请告诉我们这些词和正确的读音。可以一次报告多个词。我们会根据报告修正词典。`,link:`报告错误读音。`,sections:{words:`词语 / {count}`,environment:`出现的位置`,note:`其他`},word:`词语`,expected:`正确读音`,shown:`显示的读音(可选)`,context:`句子(可选)`,remove:`删除 {word}`,add:`添加词语`,environment:`环境`,environments:{playground:`本站的试用区`,website:`其他网站`,desktop:`桌面应用`,mobile:`移动应用`},family:`字体`,url:`页面地址(可选)`,app:`应用(可选)`,appPlaceholder:{desktop:`Word、Pages、VS Code`,mobile:`备忘录、Kindle`},os:`系统(可选)`,notePlaceholder:`任何有帮助的信息,例如浏览器,或读音错误的原因。`,name:`你的名字(可选)`,nameHint:`修正读音时用于致谢。留空即可匿名。`,send:`发送报告`,sending:`发送中`,sent:`感谢你的报告。`,again:`继续报告`,failed:`报告发送失败,请稍后再试。`,limited:`你在短时间内发送了太多报告,请一小时后再试。`,privacy:`我们会保存你填写的内容、字体版本和浏览器名称,不会保存你的 IP 地址。`},docs:{install:`安装字体`,website:`在网站上使用`,readings:`选择读音`},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”:日语从其他语言借来的常用词。`},tatoeba:{name:`Tatoeba 例句`,hint:`Tatoeba:在例句中经常出现的词语,例如 留守中,即使上面的列表都没有收录;也决定单个汉字(如 箱)的读音。`},places:{name:`地名`,hint:`JMnedict:站名和地名。在没有常用词匹配的文字上使用。`},untagged:{name:`无排名词语`,hint:`JMdict:任何列表都没有排名的词语,例如 四字熟語。在没有其他内容匹配的文字上使用。会使字体增大约 700 KB。`},"mahjong-yaku":{name:`麻将役种`,hint:`麻将的役种和牌名,例如 立直。在没有常用词匹配的文字上使用。`},"jr-stations":{name:`JR 站名`,hint:`Desktop Tetsu 列表中的 JR 站名,例如 阿蘇。在没有常用词匹配的文字上使用。`},yojijukugo:{name:`四字熟语`,hint:`JMdict:四字熟语,例如 阿鼻叫喚。在没有常用词匹配的文字上使用。`}},isolated:`单个汉字也加振假名`,share:`单个汉字的把握度`,shareHint:`只有一个汉字时,只有当某个读音在词典中至少占这个比例,才加振假名。请输入 0.5 到 1 之间的数。数字越大,加振假名的汉字越少。`,rubyScale:`振假名大小(汉字的几倍)`,rubyGap:`汉字上方的间距(em)`,squeeze:`最窄压缩到(正常宽度的几倍)`,maxWidth:`振假名最大宽度(em)`,reset:`恢复默认`,resetHint:`回到自定义载入的设置。你添加的词会保留。`},preview:{compiling:`正在制作预览`,weight:`预览字重`,size:`预览字号`,stats:`{glyphs} 个字形 / {ms} ms`},build:{words:`词语`,places:`地名`,ambiguous:`多读音`,lone:`单个汉字`,protected:`你的设置`,glyphs:`振假名字形`,rules:`规则`,planning:`规划中`,estimate:{woff2:`≈ {size} WOFF2`,otf:`{size} OTF`},formats:`格式`,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{A as e,C as t,E as n,Ht as r,N as i,S as a,T as o,Y as s,Z as c,_ as l,at as u,bt as d,ft as f,j as p,mt as m,ot as h,t as g,ut as _,w as v}from"./CkUAspOr.js";import{a as y,o as b,s as x}from"./D4ezFGbh.js";import{c as S,i as C,r as ee,u as w}from"./DHMCzW9E.js";import{C as T,S as E,_ as D,a as O,c as k,f as A,h as j,m as M,n as N,t as P,u as F,v as I,x as L}from"./B7HtXrdR.js";import{i as R,t as z}from"#entry";import{n as B,t as V}from"./BT-EKmMU.js";var H=[`playground`,`website`,`desktop`,`mobile`];function U(e){return I(L(),T(),k(e))}function W(e){return I(U(e),A())}function G(e){return I(j(U(e)),E(e=>e||void 0))}var K=M({word:W(32),expected:W(64),shown:G(64),context:G(200)});M({words:I(N(K),F(1),k(20)),environment:M({type:D(H),url:G(500),app:G(100),os:G(100)}),family:W(100),version:W(32),locale:W(16),note:G(2e3),name:G(100),nickname:j(I(L(),O()))});var q={role:`status`,class:`flex flex-col items-center gap-6 px-6 py-24 text-center`},J={class:`display text-2xl font-semibold`},Y=[`onUpdate:modelValue`],X=[`onUpdate:modelValue`],Z=[`onUpdate:modelValue`],Q={class:`flex items-end gap-2 sm:col-span-3`},$=[`onUpdate:modelValue`],te=[`aria-label`,`onClick`],ne={class:`px-6 py-3`},re={class:`grid gap-4 p-6 sm:grid-cols-2`},ie=[`value`],ae={id:`report-families`},oe=[`value`],se=[`placeholder`],ce={class:`flex flex-col gap-4 p-6`},le=[`placeholder`,`aria-label`],ue={class:`flex flex-wrap items-center gap-4`},de=[`disabled`],fe={key:0,role:`alert`,class:`text-xs color-muted`},pe={class:`text-xs color-muted`},me=Object.assign(i({__name:`ReportForm`,setup(i){let g=`${S}/api/report`,{t:T,locale:E}=ee(),{family:D}=z(),O=()=>({word:``,expected:``,shown:``,context:``}),k=m([O()]),A=f({type:`playground`,url:``,app:``,os:``}),j=m(D.value.family),M=m(``),N=m(``),F=m(``),I=m(`idle`),L=a(()=>H.map(e=>({value:e,label:T(`report.environments.${e}`)})));async function U(){I.value=`sending`;let e={words:k.value,environment:A,family:j.value,version:w,locale:E.value,note:M.value,name:N.value,nickname:F.value};try{await R(g,{method:`POST`,body:e}),I.value=`sent`}catch(e){I.value=e instanceof Error&&`statusCode`in e&&e.statusCode===429?`limited`:`failed`}}function W(){k.value=[O()],M.value=``,I.value=`idle`}return(i,a)=>{let f=V,m=P,g=B;return d(I)===`sent`?(s(),v(m,{key:0},{default:u(()=>[t(`div`,q,[a[9]||=t(`span`,{class:`i-ph-check-circle-light text-7xl`,"aria-hidden":`true`},null,-1),t(`p`,J,r(i.$t(`report.sent`)),1),p(f,{icon:`i-ph-plus`,onClick:W},{default:u(()=>[e(r(i.$t(`report.again`)),1)]),_:1})])]),_:1})):(s(),n(`form`,{key:1,onSubmit:x(U,[`prevent`])},[p(m,{index:`01`,title:i.$t(`report.sections.words`,{count:d(k).length})},{default:u(()=>[(s(!0),n(l,null,c(d(k),(e,r)=>(s(),n(`div`,{key:r,class:`grid gap-4 border-b border-base p-6 sm:grid-cols-3`},[p(g,{label:i.$t(`report.word`)},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":t=>e.word=t,required:``,maxlength:`32`,lang:`ja`,placeholder:`市場`,class:`input`},null,8,Y),[[b,e.word]])]),_:2},1032,[`label`]),p(g,{label:i.$t(`report.expected`)},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":t=>e.expected=t,required:``,maxlength:`64`,lang:`ja`,placeholder:`いちば`,class:`input`},null,8,X),[[b,e.expected]])]),_:2},1032,[`label`]),p(g,{label:i.$t(`report.shown`)},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":t=>e.shown=t,maxlength:`64`,lang:`ja`,placeholder:`しじょう`,class:`input`},null,8,Z),[[b,e.shown]])]),_:2},1032,[`label`]),t(`div`,Q,[p(g,{label:i.$t(`report.context`),class:`flex-1`},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":t=>e.context=t,maxlength:`200`,lang:`ja`,placeholder:`駅前の市場で魚を買った。`,class:`input`},null,8,$),[[b,e.context]])]),_:2},1032,[`label`]),d(k).length>1?(s(),n(`button`,{key:0,type:`button`,class:`btn-ghost focus-ring w-9 shrink-0 px-0`,"aria-label":i.$t(`report.remove`,{word:e.word||r+1}),onClick:e=>d(k).splice(r,1)},[...a[10]||=[t(`span`,{class:`i-ph-trash`},null,-1)]],8,te)):o(``,!0)])]))),128)),t(`div`,ne,[p(f,{variant:`ghost`,icon:`i-ph-plus`,disabled:d(k).length>=(`MAX_REPORT_WORDS`in i?i.MAX_REPORT_WORDS:d(20)),onClick:a[0]||=e=>d(k).push(O())},{default:u(()=>[e(r(i.$t(`report.add`)),1)]),_:1},8,[`disabled`])])]),_:1},8,[`title`]),p(m,{index:`02`,title:i.$t(`report.sections.environment`)},{default:u(()=>[t(`div`,re,[p(g,{label:i.$t(`report.environment`)},{default:u(()=>[h(t(`select`,{"onUpdate:modelValue":a[1]||=e=>d(A).type=e,class:`input`},[(s(!0),n(l,null,c(d(L),e=>(s(),n(`option`,{key:e.value,value:e.value},r(e.label),9,ie))),128))],512),[[y,d(A).type]])]),_:1},8,[`label`]),p(g,{label:i.$t(`report.family`)},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":a[2]||=e=>_(j)?j.value=e:null,required:``,maxlength:`100`,list:`report-families`,class:`input`},null,512),[[b,d(j)]]),t(`datalist`,ae,[(s(!0),n(l,null,c(`FAMILIES`in i?i.FAMILIES:d(C),e=>(s(),n(`option`,{key:e.family,value:e.family},null,8,oe))),128))])]),_:1},8,[`label`]),d(A).type===`website`?(s(),v(g,{key:0,label:i.$t(`report.url`)},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":a[3]||=e=>d(A).url=e,type:`url`,maxlength:`500`,placeholder:`https://`,class:`input`},null,512),[[b,d(A).url]])]),_:1},8,[`label`])):o(``,!0),d(A).type===`desktop`||d(A).type===`mobile`?(s(),v(g,{key:1,label:i.$t(`report.app`)},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":a[4]||=e=>d(A).app=e,maxlength:`100`,placeholder:i.$t(`report.appPlaceholder.${d(A).type}`),class:`input`},null,8,se),[[b,d(A).app]])]),_:1},8,[`label`])):o(``,!0),p(g,{label:i.$t(`report.os`)},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":a[5]||=e=>d(A).os=e,maxlength:`100`,placeholder:`macOS 26, Windows 11, iOS 26`,class:`input`},null,512),[[b,d(A).os]])]),_:1},8,[`label`])])]),_:1},8,[`title`]),p(m,{index:`03`,title:i.$t(`report.sections.note`)},{default:u(()=>[t(`div`,ce,[h(t(`textarea`,{"onUpdate:modelValue":a[6]||=e=>_(M)?M.value=e:null,maxlength:`2000`,rows:`4`,placeholder:i.$t(`report.notePlaceholder`),"aria-label":i.$t(`report.sections.note`),class:`input resize-y`},null,8,le),[[b,d(M)]]),p(g,{label:i.$t(`report.name`),hint:i.$t(`report.nameHint`),class:`sm:max-w-sm`},{default:u(()=>[h(t(`input`,{"onUpdate:modelValue":a[7]||=e=>_(N)?N.value=e:null,maxlength:`100`,autocomplete:`nickname`,class:`input`},null,512),[[b,d(N)]])]),_:1},8,[`label`,`hint`]),h(t(`input`,{"onUpdate:modelValue":a[8]||=e=>_(F)?F.value=e:null,name:`nickname`,tabindex:`-1`,autocomplete:`off`,"aria-hidden":`true`,class:`sr-only`},null,512),[[b,d(F)]]),t(`div`,ue,[t(`button`,{type:`submit`,class:`btn-solid focus-ring`,disabled:d(I)===`sending`},[a[11]||=t(`span`,{class:`i-ph-paper-plane-tilt`},null,-1),e(` `+r(d(I)===`sending`?i.$t(`report.sending`):i.$t(`report.send`)),1)],8,de),d(I)===`failed`||d(I)===`limited`?(s(),n(`p`,fe,r(i.$t(`report.${d(I)}`)),1)):o(``,!0),t(`p`,pe,r(i.$t(`report.privacy`)),1)])])]),_:1},8,[`title`])],32))}}}),{__name:`ReportForm`}),he={},ge={class:`flex flex-col gap-4 px-6 py-12`},_e={class:`label`},ve={class:`display text-4xl font-semibold`},ye={class:`max-w-[60ch] text-[15px] leading-relaxed color-muted`};function be(e,i){let a=me;return s(),n(`div`,null,[t(`div`,ge,[t(`span`,_e,r(e.$t(`report.eyebrow`)),1),t(`h1`,ve,r(e.$t(`report.title`)),1),t(`p`,ye,r(e.$t(`report.body`)),1)]),p(a)])}var xe=g(he,[[`render`,be]]);export{xe as default};
|