@cardenelabs/dragon 0.36.3 → 0.37.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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/look/palettes.json","../src/look/fonts.ts","../src/look/values.ts","../src/figure-text.ts","../src/layout/measure.ts","../src/layout/scene.ts","../src/layout/architecture.ts","../src/layout/sequence.ts","../src/field-messages.ts","../src/schemas/validate-diagram.js","../src/schema.ts","../src/version.ts","../src/timeline.ts","../src/render/icons.ts","../src/render/parts.ts","../src/render/motion.ts","../src/render/svg.ts","../src/view.ts","../src/player.ts","../src/export/capture.ts","../src/export/fonts.ts","../src/export/html.ts","../src/export/index.ts","../src/words.ts","../src/messages.ts","../src/tokenize.ts","../src/parser.ts","../src/cli.ts"],"names":["detail","text","edge","pad","label","action","badge","box","at","band","right","lane","strip","y","lifeline","read","list","ranges","ja","S","vh","mw","k","mh","bw","r","t","stage","plan","width","height","png","i","require_","createRequire","dirname","readFileSync","join","en","rest"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"clear\": {\n \"name\": \"澄んだ色\",\n \"note\": \"白い地に、中くらいの明るさの鮮やかな 6 色。今の見本帳の色\",\n \"light\": {\n \"page\": \"#f3f4f7\",\n \"bg\": \"#ffffff\",\n \"surf\": \"#ffffff\",\n \"sunk\": \"#f5f6f8\",\n \"ink\": \"#12141a\",\n \"ink2\": \"#3f4451\",\n \"mute\": \"#6b7180\",\n \"hair\": \"#12141a1c\",\n \"line\": \"#12141a40\",\n \"sh\": \"#101828\",\n \"on-c\": \"#ffffff\",\n \"c-blue\": \"#467deb\",\n \"t-blue\": \"#2e62ce\",\n \"c-amber\": \"#d28008\",\n \"t-amber\": \"#975b04\",\n \"c-green\": \"#0ea886\",\n \"t-green\": \"#07775e\",\n \"c-violet\": \"#6c3bb2\",\n \"t-violet\": \"#6c3bb2\",\n \"c-rose\": \"#ba3e40\",\n \"t-rose\": \"#b83c3f\",\n \"c-slate\": \"#5d6677\",\n \"t-slate\": \"#5d6677\",\n \"coin\": \"#e9b114\",\n \"coint\": \"#856300\",\n \"coinin\": \"#a8740c\",\n \"tint\": \"5%\",\n \"edge\": \"20%\",\n \"shA\": \".05\",\n \"shB\": \".08\",\n \"carry\": \"#65686f\"\n },\n \"dark\": {\n \"page\": \"#08090c\",\n \"bg\": \"#0d0e12\",\n \"surf\": \"#17191f\",\n \"sunk\": \"#121419\",\n \"ink\": \"#eceef3\",\n \"ink2\": \"#c4c8d2\",\n \"mute\": \"#9198a6\",\n \"hair\": \"#eceef31f\",\n \"line\": \"#eceef340\",\n \"sh\": \"#000000\",\n \"on-c\": \"#0d0e12\",\n \"c-blue\": \"#7e7ef6\",\n \"t-blue\": \"#989cfd\",\n \"c-amber\": \"#c78135\",\n \"t-amber\": \"#dd954b\",\n \"c-green\": \"#20ac7a\",\n \"t-green\": \"#35b986\",\n \"c-violet\": \"#695b9f\",\n \"t-violet\": \"#a79ae3\",\n \"c-rose\": \"#bc434b\",\n \"t-rose\": \"#fd7d81\",\n \"c-slate\": \"#9ba3b2\",\n \"t-slate\": \"#9da5b4\",\n \"coin\": \"#f0c040\",\n \"coint\": \"#f0c040\",\n \"coinin\": \"#9a6a0c\",\n \"tint\": \"6%\",\n \"edge\": \"19%\",\n \"shA\": \".45\",\n \"shB\": \".35\"\n }\n },\n \"paper\": {\n \"name\": \"紙と墨\",\n \"note\": \"生成りの紙の地に、藍 / 黄土 / 苔 / 葡萄 / 朱 / 鈍のくすんだ 6 色\",\n \"light\": {\n \"page\": \"#ece7dd\",\n \"bg\": \"#f9f6f0\",\n \"surf\": \"#fffcf6\",\n \"sunk\": \"#f2ede4\",\n \"ink\": \"#221e18\",\n \"ink2\": \"#4b453b\",\n \"mute\": \"#7b7366\",\n \"hair\": \"#221e181f\",\n \"line\": \"#221e1847\",\n \"sh\": \"#3a2a10\",\n \"on-c\": \"#fffcf6\",\n \"c-blue\": \"#487dd5\",\n \"t-blue\": \"#2d60b5\",\n \"c-amber\": \"#c38405\",\n \"t-amber\": \"#885a01\",\n \"c-green\": \"#57a271\",\n \"t-green\": \"#237143\",\n \"c-violet\": \"#904698\",\n \"t-violet\": \"#904698\",\n \"c-rose\": \"#a9513e\",\n \"t-rose\": \"#9f4836\",\n \"c-slate\": \"#6a645a\",\n \"t-slate\": \"#696359\",\n \"coin\": \"#d4a52a\",\n \"coint\": \"#7d5e05\",\n \"coinin\": \"#9a7016\",\n \"tint\": \"6%\",\n \"edge\": \"22%\",\n \"shA\": \".06\",\n \"shB\": \".07\",\n \"carry\": \"#68635c\"\n },\n \"dark\": {\n \"page\": \"#0e0d0b\",\n \"bg\": \"#15130f\",\n \"surf\": \"#1e1b17\",\n \"sunk\": \"#191612\",\n \"ink\": \"#ede6d8\",\n \"ink2\": \"#cbc2b1\",\n \"mute\": \"#9c9283\",\n \"hair\": \"#ede6d81f\",\n \"line\": \"#ede6d842\",\n \"sh\": \"#000000\",\n \"on-c\": \"#15130f\",\n \"c-blue\": \"#5785d5\",\n \"t-blue\": \"#76a6f9\",\n \"c-amber\": \"#be8802\",\n \"t-amber\": \"#d59e2f\",\n \"c-green\": \"#52aa71\",\n \"t-green\": \"#61b87e\",\n \"c-violet\": \"#90529b\",\n \"t-violet\": \"#d08edb\",\n \"c-rose\": \"#bb4e3d\",\n \"t-rose\": \"#f98672\",\n \"c-slate\": \"#a9a295\",\n \"t-slate\": \"#aca598\",\n \"coin\": \"#dcb24e\",\n \"coint\": \"#dcb24e\",\n \"coinin\": \"#8a6a14\",\n \"tint\": \"6%\",\n \"edge\": \"19%\",\n \"shA\": \".45\",\n \"shB\": \".35\"\n }\n },\n \"night\": {\n \"name\": \"夜の計器\",\n \"note\": \"青みの黒の地に、光る水色 / 琥珀 / 若緑 / 菫 / 桃 の 6 色。明るい側は青灰の地\",\n \"light\": {\n \"page\": \"#e9eef5\",\n \"bg\": \"#f6f9fc\",\n \"surf\": \"#ffffff\",\n \"sunk\": \"#eef3f8\",\n \"ink\": \"#0b1424\",\n \"ink2\": \"#34425a\",\n \"mute\": \"#64748b\",\n \"hair\": \"#0b14241c\",\n \"line\": \"#0b142440\",\n \"sh\": \"#0b1424\",\n \"on-c\": \"#ffffff\",\n \"c-blue\": \"#0385cd\",\n \"t-blue\": \"#086aa3\",\n \"c-amber\": \"#ba8e0f\",\n \"t-amber\": \"#7f5f04\",\n \"c-green\": \"#0a8857\",\n \"t-green\": \"#027449\",\n \"c-violet\": \"#5839ba\",\n \"t-violet\": \"#5839ba\",\n \"c-rose\": \"#dd4a94\",\n \"t-rose\": \"#b82375\",\n \"c-slate\": \"#64748b\",\n \"t-slate\": \"#56667c\",\n \"coin\": \"#eab308\",\n \"coint\": \"#7e6005\",\n \"coinin\": \"#a16207\",\n \"tint\": \"5%\",\n \"edge\": \"22%\",\n \"shA\": \".06\",\n \"shB\": \".09\",\n \"carry\": \"#596579\"\n },\n \"dark\": {\n \"page\": \"#060a12\",\n \"bg\": \"#0a101c\",\n \"surf\": \"#111a2a\",\n \"sunk\": \"#0d1522\",\n \"ink\": \"#e6edf7\",\n \"ink2\": \"#b8c4d6\",\n \"mute\": \"#8090a8\",\n \"hair\": \"#e6edf71c\",\n \"line\": \"#9fb3d145\",\n \"sh\": \"#000000\",\n \"on-c\": \"#0a101c\",\n \"c-blue\": \"#3884b6\",\n \"t-blue\": \"#62ace1\",\n \"c-amber\": \"#be8533\",\n \"t-amber\": \"#d59b4b\",\n \"c-green\": \"#3ba774\",\n \"t-green\": \"#4fb884\",\n \"c-violet\": \"#7d4ecd\",\n \"t-violet\": \"#b494fd\",\n \"c-rose\": \"#bc3a74\",\n \"t-rose\": \"#ff77ad\",\n \"c-slate\": \"#96a3b5\",\n \"t-slate\": \"#99a6b8\",\n \"coin\": \"#facc15\",\n \"coint\": \"#facc15\",\n \"coinin\": \"#a16207\",\n \"tint\": \"6%\",\n \"edge\": \"19%\",\n \"shA\": \".5\",\n \"shB\": \".4\"\n }\n }\n}\n","/**\n * 図が使う 2 つの字。どちらも package の依存として同梱する。\n *\n * 描いた SVG は字をこの 2 つの名前でしか名指さない。端末の字の名前を持たないので、\n * 同梱した字が読み込まれていない時に、端末の字へ黙って落ちて幅が変わることが無い。\n * 頁に字を読み込むのは `@cardenelabs/dragon/fonts` の入口 (`load-fonts.ts`) が持つ。\n */\nexport const FONTS = { sans: \"Noto Sans JP Variable\", mono: \"JetBrains Mono Variable\" } as const;\n\n/**\n * 和文の字の英数字と記号の幅 (1000 分率)。使う太さ (500 / 600 / 650 / 700) のうち一番広い値。\n * `scripts/font-widths.mjs` が同梱の字をブラウザに読ませて測った値で、字を上げた時は測り直して貼る。\n * 表に無い字のうち U+2E80 以降 (仮名と漢字と全角の記号) は全角 (1000) とする。\n */\nexport const SANS_ADVANCE: Readonly<Record<string, number>> = {\"0\":590,\"1\":590,\"2\":590,\"3\":590,\"4\":590,\"5\":590,\"6\":590,\"7\":590,\"8\":590,\"9\":590,\" \":228,\"!\":371,\"\\\"\":575,\"#\":590,\"$\":590,\"%\":963,\"&\":740,\"'\":325,\"(\":378,\")\":378,\"*\":507,\"+\":590,\",\":325,\"-\":371,\".\":325,\"/\":390,\":\":325,\";\":325,\"<\":590,\"=\":590,\">\":590,\"?\":514,\"@\":1007,\"A\":642,\"B\":682,\"C\":657,\"D\":715,\"E\":616,\"F\":586,\"G\":718,\"H\":758,\"I\":330,\"J\":568,\"K\":686,\"L\":579,\"M\":854,\"N\":750,\"O\":771,\"P\":668,\"Q\":771,\"R\":682,\"S\":624,\"T\":626,\"U\":748,\"V\":619,\"W\":915,\"X\":627,\"Y\":581,\"Z\":614,\"[\":378,\"\\\\\":390,\"]\":378,\"^\":590,\"_\":568,\"`\":626,\"a\":591,\"b\":644,\"c\":528,\"d\":645,\"e\":581,\"f\":372,\"g\":598,\"h\":640,\"i\":305,\"j\":306,\"k\":605,\"l\":315,\"m\":964,\"n\":641,\"o\":626,\"p\":645,\"q\":645,\"r\":437,\"s\":495,\"t\":421,\"u\":638,\"v\":576,\"w\":863,\"x\":562,\"y\":575,\"z\":512,\"{\":378,\"|\":297,\"}\":378,\"~\":590,\"…\":1000,\"−\":590,\"×\":1000,\"→\":1000,\"←\":1000,\"↑\":1000,\"↓\":1000,\"–\":545,\"—\":908,\"‘\":325,\"’\":325,\"“\":575,\"”\":575,\"°\":404,\"±\":1000,\"·\":593,\"•\":379};\n\n/** 等幅の字の幅 (1000 分率)。どの字も同じ幅。 */\nexport const MONO_ADVANCE = 600;\n\n/** 全角として数える字の始まり。仮名と漢字と全角の記号はここから後ろにある。 */\nexport const WIDE_FROM = 0x2e80;\n\nexport type Family = keyof typeof FONTS;\n\n/** 字の大きさを 1000 とした時の幅。上の表はこの単位で持つ。 */\nexport const EM = 1000;\n\n/** 1 字の幅 (1000 分率)。表に無い字は全角とする。 */\nexport function advance(ch: string, family: Family): number {\n if ((ch.codePointAt(0) ?? 0) >= WIDE_FROM) return EM;\n if (family === \"mono\") return MONO_ADVANCE;\n return SANS_ADVANCE[ch] ?? EM;\n}\n","/**\n * 図の見た目の値の表。色、字の大きさ、余白、動きの長さをここに 1 つにまとめる。\n *\n * 描く file (`layout/`、`render/`、`timeline.ts`、`view.ts`、`player.ts`) は色の値と字の大きさを\n * 直接書かず、この表から読む。値は見本帳 (`docs/design/base/`) の部品と同じにしてある。\n * 色味の値は見本帳の `palettes.json` の写しで、色味ごとに明るい背景と暗い背景で別の値を持つ。\n */\nimport palettes from \"./palettes.json\";\nimport { FONTS, type Family } from \"./fonts\";\n\nexport type Theme = \"light\" | \"dark\";\n\nexport interface Palette {\n id: string;\n name: string;\n note: string;\n light: Record<string, string>;\n dark: Record<string, string>;\n}\n\n/** 色味を指定しない時と、知らない名前を渡した時に使う色味。 */\nexport const DEFAULT_PALETTE = \"paper\";\n\nexport const PALETTES: Readonly<Record<string, Palette>> = Object.fromEntries(\n Object.entries(palettes as Record<string, Omit<Palette, \"id\">>).map(([id, p]) => [id, { id, ...p }]),\n);\n\n/** 名前から色味を引く。指定が無いか、知らない名前 (外した墨と朱の `ink` を含む) なら紙と墨。 */\nexport function resolvePalette(id?: string): Palette {\n const found = id !== undefined && Object.hasOwn(PALETTES, id) ? PALETTES[id] : undefined;\n return found ?? (PALETTES[DEFAULT_PALETTE] as Palette);\n}\n\n/** 色味の値を CSS の変数として並べる。 */\nexport function paletteVars(palette: Palette, theme: Theme): string {\n return Object.entries(palette[theme])\n .map(([key, value]) => `--${key}:${value}`)\n .join(\";\");\n}\n\n/** 字の変数。同梱した 2 つの字を 1 度だけ名指し、字を使う所はどれもこの変数を読む。 */\nexport const FONT_VARS = `--sans:\"${FONTS.sans}\";--mono:\"${FONTS.mono}\"`;\n\n/** 区画や箱を分ける色の役。灰 (slate) と硬貨 (coin) は分類の色として順に配らない。 */\nexport const COLOR_ORDER = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\"] as const;\nexport type ColorKey = (typeof COLOR_ORDER)[number] | \"slate\" | \"coin\";\n\nexport interface TextStyle {\n size: number;\n weight: number;\n family: Family;\n}\n\nconst text = (size: number, weight: number, family: Family = \"sans\"): TextStyle => ({ size, weight, family });\n\n/** 字の大きさと太さ。どれも 10.5 以上にする。 */\nexport const TYPE = {\n boxName: text(13, 650),\n boxSub: text(11, 500),\n boxSubStrong: text(11, 700),\n regionName: text(12.5, 700),\n regionNote: text(11, 500),\n label: text(11, 600, \"mono\"),\n labelJa: text(11, 650),\n action: text(11, 650),\n badge: text(10.5, 700, \"mono\"),\n carrier: text(10.5, 700, \"mono\"),\n carrierJa: text(10.5, 700),\n stripTitle: text(12.5, 700),\n fieldName: text(10.5, 600),\n fieldValue: text(12, 600, \"mono\"),\n fieldValueJa: text(12, 600),\n tag: text(10.5, 700),\n miniTitle: text(10.5, 700),\n stepTitle: text(15, 700),\n stepBody: text(13.5, 500),\n stepNo: text(13, 700, \"mono\"),\n button: text(14, 700),\n} as const;\n\n/** 置き場所と部品の大きさ。単位は図の座標 (字が原寸の時の px)。 */\nexport const LOOK = {\n /** 部品どうしの最小の隙間 */\n gap: 10,\n /** 図の外周の余白 */\n margin: 14,\n box: { h: 72, minW: 92, padX: 12, radius: 12, icon: 24, iconRadius: 7, iconY: -16, iconScale: 0.74, nameY: 12, subY: 27 },\n region: { pad: 18, gap: 10, radius: 14, inset: 14, icon: 24, iconRadius: 7, iconScale: 0.68, nameY: 58, line: 16, minH: 108 },\n architecture: { columns: 4, columnGap: 56, maxColumnGap: 160, rowGap: 44, labelRoom: 16 },\n sequence: { columnGap: 40, labelRoom: 16, firstRow: 22, rowGap: 14, stepGap: 8, minPitch: 40, tail: 18, selfW: 34, selfH: 18 },\n edge: { inset: 3, arrow: 6, arrowHalf: 3.5, parallel: 5, ghostDash: 5, flowDash: 9 },\n label: { h: 20, padX: 9, radius: 10, offset: 22, side: 14, search: 4, searchMax: 400, soft: 6 },\n action: { h: 22, padX: 10, radius: 11 },\n badge: { r: 9.5, ring: 9, inset: 4, along: 14, short: 44 },\n carrier: { envW: 24, envH: 17, coinR: 6.5, coinIn: 3.8, tagH: 18, tagPadX: 8, samples: 16 },\n strip: { h: 72, line: 44, pad: 12, icon: 24, titleX: 44, fieldGap: 22, sepInset: 14, tagGap: 6, tagH: 15, tagPadX: 7, nameY: 22, valueY: 43 },\n stroke: { hair: 1, edge: 1.7, edgeOn: 2.25, arrow: 1.5, flow: 1.3, halo: 7, on: 1.75, glyph: 2, lifeline: 1.2, envelope: 1.5, badgeRing: 1.5 },\n shadow: { near: 0.8, far: 4, nearY: 1, farY: 3 },\n mini: { w: 168, pad: 8, title: 14, inset: 12, radius: 10 },\n /**\n * 寄って追う見せ方の窓の高さの、幅に対する割合と下限。\n * `fitMinH` は見える高さに収める時 (#3047) の窓の高さの下限で、これより低い枠では収めずに枠の中で送る。\n * `narrow` は縦長の全体図を出す枠の幅の下限で、これより狭い枠 (携帯の幅) では全体図を出さずに窓へ幅を渡す (#3055)。\n * `badgeRoom` は番号の丸が窓から外れる段で窓を寄せ直す時に、丸の周りに空ける幅 (#3046)。\n * `headRoom` は時系列図の図の頭の箱の下端から、窓に線を見せ始める所までの幅 (#3118)。\n * `head` は時系列図の窓の上端に貼る頭の列の頭の箱で、アイコンを外した名前と下の字の 2 段 (#3120)。\n * `pad` は頭の列の上下の余白、`h` は箱の高さ、`nameY` と `subY` は箱の上端から名前と下の字の基準線まで\n */\n follow: { aspect: 0.75, minH: 320, fitMinH: 160, ease: 0.6, narrow: 440, badgeRoom: 8, headRoom: 10, head: { pad: 8, h: 40, nameY: 17, subY: 31 } },\n /** 色を混ぜる割合 (%) */\n mix: { icon: 14, regionIcon: 16, regionIconEdge: 34, cap: 12, capEdge: 42, badgePast: 14, badgePastEdge: 70, mini: 62, miniBand: 16, miniBandEdge: 36, view: 6 },\n /** 字の並びの基準線を、置きたい高さの真ん中からどれだけ下げるか */\n baseline: { label: 3.8, badge: 3.5, carrier: 3.7, stripTitle: 4.5, tag: 3.6, action: 3.8 },\n /** 浮いて出る物が下から上がる長さと、弾んで出る物の始まりの大きさ */\n rise: 5,\n popFrom: 0.4,\n /**\n * 動きを嫌わない人の頁の部品。\n * `narrow` は段の本文の帯を横 1 列に並べる帯の中身の幅の下限で、これより狭い帯 (携帯の幅) では題と本文を釦と番号の段の下に置く (#3057、#3069)。\n * `touch` はその狭い帯で段を送る釦の縦横で、指で押せる大きさにする (#3069)\n */\n player: { gap: 10, radius: 12, button: 36, touch: 44, hidden: 1, focus: 2, narrow: 440 },\n} as const;\n\n/** 動きの長さ (秒)。 */\nexport const MOTION = {\n /** 最初の段の前に全体を見せる長さ */\n intro: 1.4,\n /** 最後の段の後に全体を見せる長さ */\n outro: 4.6,\n /** 繰り返す前に消えていく長さ */\n tail: 0.6,\n /** 段の長さ。本文の字数で伸ばし、段で起きることが全部見えてから dwell 秒は留める */\n stepBase: 1.2,\n perChar: 0.025,\n stepMin: 2.2,\n stepMax: 5,\n dwell: 1.2,\n /** 段の中で最初の線を引き始めるまでと、続く線を引き始める間 */\n edgeAt: 0.1,\n stagger: 0.5,\n /** 線を引く長さ。運ぶ物を載せた線は運ぶ物が走るので長い */\n draw: 0.55,\n drawCarry: 0.9,\n /** 処理を読む間 (次の線と書き換えはこれだけ待つ) と、書き換えが続く間 */\n action: 0.9,\n change: 0.12,\n /** 箱の下の字が見えている短さの下限。これより早く次の字に替わる字は出さない */\n minShow: 0.8,\n /** 線の名前が線より遅れて出る長さと、出入りの長さ */\n labelDelay: 0.15,\n fade: 0.3,\n popFade: 0.4,\n untilFade: 0.2,\n /** 段の止め絵を撮る時刻を、段の終わりからどれだけ前にするか */\n still: 0.45,\n} as const;\n\n/** 見せ方を決める字の大きさ。全体を枠に収めた時の箱の名前がこれを下回ると寄って追う。 */\nexport const READABLE_PX = 10.5;\n\n/** 動きの緩急。 */\nexport const EASE = {\n inOut: \"cubic-bezier(.65,0,.35,1)\",\n out: \"cubic-bezier(.22,1,.36,1)\",\n pop: \"cubic-bezier(.34,1.56,.64,1)\",\n} as const;\n","/**\n * 描く部品が出す字 (#3001)。\n *\n * 図の原本は語を持たないので、呼ぶ側が言葉を渡す。渡さなければ日本語で出す。\n * 頁は頁の言葉を、`dragon export` は `--lang` の言葉 (渡さなければ日本語) を渡す。\n */\nimport type { NotationLang } from \"./words\";\n\nexport interface FigureText {\n /** 描けない時の断りの文。`detail` は誤りの場所と文を並べた物 */\n cannotDraw: (detail: string) => string;\n /** 寄って動かす見せ方の、隅の全体図の札 */\n overview: string;\n /** 再生の釦の読み上げの名前 */\n prev: string;\n pause: string;\n play: string;\n next: string;\n /** 段の一覧の読み上げの名前 */\n steps: (title: string) => string;\n}\n\nexport const FIGURE_TEXT: Record<NotationLang, FigureText> = {\n ja: {\n cannotDraw: (detail) => `図を描けない: ${detail}`,\n overview: \"全体図\",\n prev: \"前の段\",\n pause: \"止める\",\n play: \"動かす\",\n next: \"次の段\",\n steps: (title) => `${title} の段`,\n },\n en: {\n cannotDraw: (detail) => `Cannot draw the diagram: ${detail}`,\n overview: \"Overview\",\n prev: \"Previous step\",\n pause: \"Pause\",\n play: \"Play\",\n next: \"Next step\",\n steps: (title) => `Steps of ${title}`,\n },\n};\n","/**\n * 字の幅を、同梱した字の送り幅の表で測る。描かずに測るので、頁の無い所 (node) でも同じ値になる。\n */\nimport { advance, EM, type Family } from \"../look/fonts\";\nimport type { TextStyle } from \"../look/values\";\n\n/** 和文 (CJK) の字を含むか。等幅の字は和文を持たないので、含む字は Noto Sans JP で描く。 */\nexport const hasWide = (text: string): boolean => [...text].some((ch) => (ch.codePointAt(0) ?? 0) >= 0x2e80);\n\n/** 等幅を望む字でも、和文を含めば和文の字で描く。 */\nexport function familyFor(text: string, preferred: Family): Family {\n return preferred === \"mono\" && hasWide(text) ? \"sans\" : preferred;\n}\n\n/** 1 行の字の幅。 */\nexport function textWidth(text: string, style: TextStyle): number {\n const family = familyFor(text, style.family);\n let sum = 0;\n for (const ch of text) sum += advance(ch, family);\n return (sum * style.size) / EM;\n}\n","/**\n * 置き場所を決めた結果 (場面) の形と、図の種類に依らず使う置き方。\n *\n * 座標は字が原寸の時の px で、左上を (0, 0) にする。線の名前は線の脇から箱を避けて置き、\n * 中身の帯は図の下に横いっぱいに置く。\n */\nimport type { Family } from \"../look/fonts\";\nimport { COLOR_ORDER, type ColorKey, LOOK, TYPE } from \"../look/values\";\nimport type { Carry, Diagram, DiagramEvent, LabelSide } from \"../schema\";\nimport { hasWide, textWidth } from \"./measure\";\n\nexport type Point = [number, number];\n\nexport interface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface SceneBox extends Rect {\n id: string;\n name: string;\n sub?: string;\n icon?: string;\n color: ColorKey;\n cx: number;\n cy: number;\n}\n\nexport interface SceneRegion extends Rect {\n id: string;\n /** 名前を折り返した行 */\n lines: string[];\n note?: string;\n icon?: string;\n color: ColorKey;\n /** 名前と印が占める所 */\n header: Rect;\n}\n\n/** 線。`step` と `event` は原本の `steps[step].events[event]` を指す。 */\nexport interface SceneEdge {\n step: number;\n event: number;\n from: string;\n to: string;\n points: Point[];\n color: ColorKey;\n carry: Carry;\n /** 着いた運ぶ物が留まる点。無ければ線の終わり */\n settle?: Point;\n}\n\nexport interface SceneLabel extends Rect {\n step: number;\n event: number;\n text: string;\n family: Family;\n color: ColorKey;\n}\n\n/** 時系列図の箱の中の処理。生存線の上に札で出す。 */\nexport interface SceneAction extends Rect {\n step: number;\n event: number;\n box: string;\n text: string;\n color: ColorKey;\n}\n\nexport interface SceneBadge {\n step: number;\n x: number;\n y: number;\n color: ColorKey;\n}\n\nexport interface SceneLifeline {\n id: string;\n x: number;\n y1: number;\n y2: number;\n}\n\nexport interface SceneField {\n name: string;\n x: number;\n y: number;\n w: number;\n}\n\nexport interface SceneStrip extends Rect {\n title: string;\n fields: SceneField[];\n}\n\nexport interface Layout {\n kind: Diagram[\"kind\"];\n width: number;\n height: number;\n regions: SceneRegion[];\n boxes: SceneBox[];\n lifelines: SceneLifeline[];\n edges: SceneEdge[];\n labels: SceneLabel[];\n actions: SceneAction[];\n badges: SceneBadge[];\n strip?: SceneStrip;\n}\n\nexport type EdgeEvent = Extract<DiagramEvent, { type: \"edge\" }>;\n\n/** 段と線の位置を添えた線の並び。段の順、段の中は起きる順。 */\nexport function edgesOf(diagram: Diagram): { step: number; event: number; edge: EdgeEvent }[] {\n return diagram.steps.flatMap((step, s) =>\n step.events.flatMap((event, e) => (event.type === \"edge\" ? [{ step: s, event: e, edge: event }] : [])),\n );\n}\n\n/** 箱の色。書いていなければ区画の色、区画も無ければ並んだ順に分類の色を配る。 */\nexport function boxColors(diagram: Diagram): Map<string, ColorKey> {\n const regions = regionColors(diagram);\n const colors = new Map<string, ColorKey>();\n diagram.boxes.forEach((box, i) => {\n const fromRegion = box.region === undefined ? undefined : regions.get(box.region);\n colors.set(box.id, box.color ?? fromRegion ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey));\n });\n return colors;\n}\n\nexport function regionColors(diagram: Diagram): Map<string, ColorKey> {\n const colors = new Map<string, ColorKey>();\n (diagram.regions ?? []).forEach((region, i) => colors.set(region.id, region.color ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey)));\n return colors;\n}\n\n/** 線の色。硬貨を運ぶ線は硬貨の色、それ以外は送る側の箱の色。 */\nexport const edgeColor = (edge: EdgeEvent, colors: Map<string, ColorKey>): ColorKey =>\n edge.carry.kind === \"coin\" ? \"coin\" : (colors.get(edge.from) ?? \"slate\");\n\n/** 箱の幅。名前、下の小さな字、書き換わる字、中で出す処理のどれもが収まる幅。 */\nexport function boxWidth(diagram: Diagram, id: string, withActions: boolean): number {\n const box = diagram.boxes.find((b) => b.id === id);\n if (!box) return LOOK.box.minW;\n const lines = [textWidth(box.name, TYPE.boxName), textWidth(box.sub ?? \"\", TYPE.boxSub)];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type === \"swap\" && event.box === id) lines.push(textWidth(event.text, TYPE.boxSubStrong));\n if (withActions && event.type === \"action\" && event.box === id) lines.push(textWidth(event.label, TYPE.boxSubStrong));\n }\n }\n return Math.max(LOOK.box.minW, Math.max(...lines) + LOOK.box.padX * 2);\n}\n\n/** 2 つの四角の隙間。重なる時は負。縦か横のどちらかで離れていれば、その離れ方の大きい方。 */\nexport function gapBetween(a: Rect, b: Rect): number {\n const dx = Math.max(b.x - (a.x + a.w), a.x - (b.x + b.w));\n const dy = Math.max(b.y - (a.y + a.h), a.y - (b.y + b.h));\n return Math.max(dx, dy);\n}\n\n/** 折れ線のうち一番長い区間。 */\nexport function longest(points: Point[]): { a: Point; b: Point; vertical: boolean } {\n let best = { a: points[0] as Point, b: (points[1] ?? points[0]) as Point, length: -1 };\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (length > best.length) best = { a, b, length };\n }\n return { a: best.a, b: best.b, vertical: Math.abs(best.b[0] - best.a[0]) < Math.abs(best.b[1] - best.a[1]) };\n}\n\n/** 折れ線の長さと、始まりから `distance` 進んだ点。 */\nexport function along(points: Point[], distance: number): Point {\n let left = distance;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (left <= length && length > 0) return [a[0] + ((b[0] - a[0]) * left) / length, a[1] + ((b[1] - a[1]) * left) / length];\n left -= length;\n }\n return points[points.length - 1] as Point;\n}\n\nexport function pathLength(points: Point[]): number {\n let sum = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n sum += Math.hypot(b[0] - a[0], b[1] - a[1]);\n }\n return sum;\n}\n\n/** 段の番号を置く点。線の始まりから少し進んだ所。短い線は始まりに置くと箱と重なるので中ほど。 */\nexport function badgeOnPath(points: Point[]): Point {\n const length = pathLength(points);\n return along(points, length < LOOK.badge.short ? length / 2 : LOOK.badge.along);\n}\n\nexport interface LabelRequest {\n step: number;\n event: number;\n text: string;\n points: Point[];\n side?: LabelSide;\n color: ColorKey;\n}\n\nexport interface Obstacles {\n /** 10px 以上離す物 (箱) */\n hard: Rect[];\n /** 重ならなければよい物 (区画の名前、同じ段の線の名前) */\n soft: Rect[];\n}\n\nexport const labelStyle = (text: string) => (hasWide(text) ? TYPE.labelJa : TYPE.label);\n\n/**\n * 線の名前を置く。線の一番長い区間の中ほどから、寄せの指示の側 (無ければ横の線は上、縦の線は右) へ\n * 離して置く。箱や区画の名前に掛かる時は、指示の側へさらに離し、線に沿ってもずらして空きを探す。\n */\nexport function placeLabel(request: LabelRequest, obstacles: Obstacles): SceneLabel {\n const w = textWidth(request.text, labelStyle(request.text)) + LOOK.label.padX * 2;\n const h = LOOK.label.h;\n const segment = longest(request.points);\n const mx = (segment.a[0] + segment.b[0]) / 2;\n const my = (segment.a[1] + segment.b[1]) / 2;\n const side = request.side ?? (segment.vertical ? \"right\" : \"above\");\n const { offset, side: sideGap } = LOOK.label;\n const base: Rect =\n side === \"above\"\n ? { x: mx - w / 2, y: my - offset - h / 2, w, h }\n : side === \"below\"\n ? { x: mx - w / 2, y: my + offset - h / 2, w, h }\n : side === \"left\"\n ? { x: mx - sideGap - w, y: my - h / 2, w, h }\n : { x: mx + sideGap, y: my - h / 2, w, h };\n // 離す向き (指示の側) と、ずらす向き (それに直交する向き)\n const away: Point = side === \"above\" ? [0, -1] : side === \"below\" ? [0, 1] : side === \"left\" ? [-1, 0] : [1, 0];\n const slideAxis: Point = [Math.abs(away[1]), Math.abs(away[0])];\n const slideMax = side === \"above\" || side === \"below\" ? w : h * 4;\n const clear = (rect: Rect): boolean =>\n obstacles.hard.every((box) => gapBetween(rect, box) >= LOOK.gap) && obstacles.soft.every((other) => gapBetween(rect, other) >= LOOK.label.soft);\n const { search, searchMax } = LOOK.label;\n for (let d = 0; d <= searchMax; d += search) {\n for (let s = 0; s <= slideMax; s += search) {\n for (const sign of s === 0 ? [1] : [1, -1]) {\n const rect = { x: base.x + away[0] * d + slideAxis[0] * s * sign, y: base.y + away[1] * d + slideAxis[1] * s * sign, w, h };\n if (clear(rect)) return { ...rect, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n }\n }\n }\n return { ...base, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n}\n\n/** 中身の帯の欄の幅。欄の名前と、入る値と札を並べた最も長い形が収まる幅。 */\nfunction fieldWidth(diagram: Diagram, name: string): number {\n let value = 0;\n let tag = 0;\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"strip\" || event.field !== name) continue;\n if (event.value !== undefined) value = Math.max(value, textWidth(event.value, hasWide(event.value) ? TYPE.fieldValueJa : TYPE.fieldValue));\n if (event.tag !== undefined) tag = Math.max(tag, textWidth(event.tag, TYPE.tag) + LOOK.strip.tagPadX * 2);\n }\n }\n const both = value + (tag > 0 ? (value > 0 ? LOOK.strip.tagGap : 0) + tag : 0);\n return Math.max(textWidth(name, TYPE.fieldName), both);\n}\n\n/** 1 行に並べた時に帯が要る幅。 */\nexport function stripNeed(diagram: Diagram): number {\n if (!diagram.strip) return 0;\n const { titleX, fieldGap, pad } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n return start + diagram.strip.fields.reduce((sum, name) => sum + fieldWidth(diagram, name) + fieldGap, 0) - fieldGap + pad;\n}\n\n/** 中身の帯。欄は左から並べ、幅に収まらない欄は次の行へ送る。 */\nexport function layoutStrip(diagram: Diagram, x: number, y: number, width: number): SceneStrip | undefined {\n if (!diagram.strip) return undefined;\n const { titleX, fieldGap, pad, line, h } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n const fields: SceneField[] = [];\n let cx = start;\n let row = 0;\n for (const name of diagram.strip.fields) {\n const w = fieldWidth(diagram, name);\n if (cx > start && cx + w > width - pad) {\n cx = start;\n row++;\n }\n fields.push({ name, x: x + cx, y: y + row * line, w });\n cx += w + fieldGap;\n }\n return { x, y, w: width, h: h + row * line, title: diagram.strip.title, fields };\n}\n\n/** 場面の全ての物を (dx, dy) だけ動かす。区画と帯は動かさず、横いっぱいの形を保つ。 */\nexport function shiftContent(layout: Layout, dx: number, dy: number): void {\n const move = (rect: Rect): void => {\n rect.x += dx;\n rect.y += dy;\n };\n for (const box of layout.boxes) {\n move(box);\n box.cx += dx;\n box.cy += dy;\n }\n for (const region of layout.regions) {\n region.y += dy;\n move(region.header);\n }\n for (const line of layout.lifelines) {\n line.x += dx;\n line.y1 += dy;\n line.y2 += dy;\n }\n for (const edge of layout.edges) {\n edge.points = edge.points.map(([px, py]) => [px + dx, py + dy]);\n if (edge.settle) edge.settle = [edge.settle[0] + dx, edge.settle[1] + dy];\n }\n for (const label of layout.labels) move(label);\n for (const action of layout.actions) move(action);\n for (const badge of layout.badges) {\n badge.x += dx;\n badge.y += dy;\n }\n if (layout.strip) {\n layout.strip.y += dy;\n for (const field of layout.strip.fields) {\n field.x += dx;\n field.y += dy;\n }\n }\n}\n\n/** 線も処理も無い段の番号。書き換わる箱の左上か、中身の帯の左上か、最初の箱の左上。 */\nexport function cornerBadge(events: DiagramEvent[], step: number, layout: Layout): SceneBadge {\n const { inset } = LOOK.badge;\n for (const event of events) {\n const id = event.type === \"swap\" || event.type === \"action\" ? event.box : undefined;\n const box = layout.boxes.find((b) => b.id === id);\n if (box) return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n }\n if (layout.strip && events.some((event) => event.type === \"strip\")) return { step, x: layout.strip.x + inset, y: layout.strip.y + inset, color: \"slate\" };\n const box = layout.boxes[0] as SceneBox;\n return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n}\n","/**\n * 構成図の置き場所。\n *\n * 区画を上から帯に積み、帯の左に区画の名前を置く。箱は全ての帯で共通の列に並べるので、\n * 区画をまたぐ線は縦にまっすぐ走る。箱の並びは線を辿って決める。前の区画の箱から線が来る箱を\n * その箱の列に置き、そこから線で繋がる箱を隣の列へ (寄せの指示が左か右なら下の行へ) 置いていく。\n * 線は縦と横の折れ線で、間にある箱を避ける。名前が箱に掛かる時は帯を広げて名前の場所を空ける。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram, LabelSide, Region } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n boxWidth,\n cornerBadge,\n edgeColor,\n edgesOf,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type Rect,\n regionColors,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n type SceneRegion,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\ninterface Group {\n region?: Region;\n members: string[];\n}\n\ninterface Slot {\n group: number;\n col: number;\n row: number;\n}\n\ninterface Room {\n top: number;\n bottom: number;\n}\n\nexport function layoutArchitecture(diagram: Diagram): Layout {\n const groups = groupsOf(diagram);\n const slots = placeBoxes(diagram, groups);\n const rooms = groups.map(() => ({ top: 0, bottom: 0 }));\n let layout = arrange(diagram, groups, slots, rooms);\n // 名前を置く場所が帯の外へ出たら、その帯を広げて置き直す\n for (let pass = 0; pass < 3 && grow(layout, groups, slots, rooms); pass++) layout = arrange(diagram, groups, slots, rooms);\n return layout;\n}\n\nfunction groupsOf(diagram: Diagram): Group[] {\n const regions = diagram.regions ?? [];\n const known = new Set(regions.map((r) => r.id));\n const groups: Group[] = regions.map((region) => ({ region, members: diagram.boxes.filter((b) => b.region === region.id).map((b) => b.id) }));\n const loose = diagram.boxes.filter((b) => b.region === undefined || !known.has(b.region)).map((b) => b.id);\n if (loose.length > 0) groups.push({ members: loose });\n return groups;\n}\n\nconst vertical = (side: LabelSide | undefined): boolean => side === \"left\" || side === \"right\";\n\n/** 箱を列と行へ置く。列は全ての区画で共通。 */\nfunction placeBoxes(diagram: Diagram, groups: Group[]): Map<string, Slot> {\n const columns = LOOK.architecture.columns;\n const edges = edgesOf(diagram).map((e) => e.edge);\n const slots = new Map<string, Slot>();\n groups.forEach((group, g) => {\n const inGroup = new Set(group.members);\n const taken = new Set<string>();\n const free = (col: number, row: number): boolean => col >= 0 && col < columns && !taken.has(`${col},${row}`);\n const near = (col: number, row: number): [number, number] => {\n const start = Math.min(columns - 1, Math.max(0, col));\n for (let r = row; ; r++) {\n for (let d = 0; d < columns; d++) {\n for (const c of [start + d, start - d]) if (free(c, r)) return [c, r];\n }\n }\n };\n const put = (id: string, col: number, row: number): void => {\n slots.set(id, { group: g, col, row });\n taken.add(`${col},${row}`);\n };\n let dir = 1;\n const visit = (id: string): void => {\n for (const edge of edges) {\n const partner = edge.from === id ? edge.to : edge.to === id ? edge.from : undefined;\n if (partner === undefined || !inGroup.has(partner) || slots.has(partner)) continue;\n const me = slots.get(id) as Slot;\n const [c, r] = vertical(edge.labelSide) ? near(me.col, me.row + 1) : free(me.col + dir, me.row) ? [me.col + dir, me.row] : near(me.col + dir, me.row);\n put(partner, c, r);\n visit(partner);\n }\n };\n // 前の区画の箱と線で繋がる箱 (起きる順に早い線から) をその箱の列に置き、そこから辿る\n const anchorOf = (id: string): { order: number; col: number } | undefined => {\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i];\n const partner = edge?.from === id ? edge.to : edge?.to === id ? edge.from : undefined;\n const slot = partner === undefined ? undefined : slots.get(partner);\n if (slot && slot.group < g) return { order: i, col: slot.col };\n }\n return undefined;\n };\n let placed = 0;\n for (;;) {\n const rest = group.members.filter((id) => !slots.has(id));\n if (rest.length === 0) break;\n const anchored = rest.map((id) => ({ id, anchor: anchorOf(id) })).filter((a) => a.anchor !== undefined);\n anchored.sort((a, b) => (a.anchor?.order ?? 0) - (b.anchor?.order ?? 0));\n const pick = anchored[0] ?? { id: rest[0] as string, anchor: undefined };\n const want = pick.anchor?.col ?? 0;\n if (placed === 0) dir = want >= (columns - 1) / 2 ? -1 : 1;\n const [c, r] = free(want, 0) ? [want, 0] : near(want, 0);\n put(pick.id, c, r);\n visit(pick.id);\n placed++;\n }\n });\n // 使っていない列を詰める\n const used = [...new Set([...slots.values()].map((s) => s.col))].sort((a, b) => a - b);\n for (const slot of slots.values()) slot.col = used.indexOf(slot.col);\n return slots;\n}\n\n/** 区画の名前の行。空白があれば真ん中に近い空白で 2 行に折る。 */\nfunction nameLines(name: string): string[] {\n const spaces = [...name.matchAll(/ /g)].map((m) => m.index);\n if (spaces.length === 0) return [name];\n const at = spaces.reduce((best, i) => (Math.abs(i - name.length / 2) < Math.abs(best - name.length / 2) ? i : best));\n return [name.slice(0, at), name.slice(at + 1)];\n}\n\nfunction headerSize(region: Region): { w: number; h: number; lines: string[] } {\n const { icon, nameY, line, inset } = LOOK.region;\n const lines = nameLines(region.name);\n const w = Math.max(icon, ...lines.map((l) => textWidth(l, TYPE.regionName)), textWidth(region.note ?? \"\", TYPE.regionNote));\n // 名前の最後の行の下と、添え書きの下まで\n const h = nameY - inset + (lines.length - 1) * line + (region.note ? line : 0) + LOOK.gap / 2;\n return { w, h, lines };\n}\n\nfunction arrange(diagram: Diagram, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): Layout {\n const { box: B, region: R, architecture: A, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const regionColor = regionColors(diagram);\n const edges = edgesOf(diagram);\n\n // 列の幅と列の間。隣の列を横に結ぶ名前のある線は、名前が収まるまで間を広げる (広げすぎる時は脇へ寄せる)\n const columnCount = Math.max(1, ...[...slots.values()].map((s) => s.col + 1));\n const widths = new Map(diagram.boxes.map((b) => [b.id, boxWidth(diagram, b.id, true)]));\n const colW = Array.from({ length: columnCount }, (_, c) => Math.max(B.minW, ...[...slots].filter(([, s]) => s.col === c).map(([id]) => widths.get(id) ?? B.minW)));\n const between = Array.from({ length: Math.max(0, columnCount - 1) }, () => A.columnGap as number);\n for (const { edge } of edges) {\n const a = slots.get(edge.from);\n const b = slots.get(edge.to);\n if (!a || !b || edge.label === undefined || a.group !== b.group || a.row !== b.row || Math.abs(a.col - b.col) !== 1 || vertical(edge.labelSide)) continue;\n const need = textWidth(edge.label, labelStyle(edge.label)) + LOOK.label.padX * 2 + A.labelRoom * 2;\n const i = Math.min(a.col, b.col);\n if (need <= A.maxColumnGap) between[i] = Math.max(between[i] ?? 0, need);\n }\n const headers = groups.map((g) => (g.region ? headerSize(g.region) : undefined));\n const headerW = Math.max(0, ...headers.map((h) => (h ? h.w + R.inset * 2 : 0)));\n const colLeft: number[] = [];\n for (let c = 0; c < columnCount; c++) colLeft.push(c === 0 ? margin + (headerW > 0 ? headerW : R.pad) : (colLeft[c - 1] as number) + (colW[c - 1] as number) + (between[c - 1] as number));\n const center = (c: number): number => (colLeft[c] as number) + (colW[c] as number) / 2;\n\n // 帯を上から積む\n const boxes: SceneBox[] = [];\n const bands: { group: number; y: number; h: number; rows: number }[] = [];\n let cursor = margin;\n groups.forEach((group, g) => {\n const rows = Math.max(1, ...group.members.map((id) => (slots.get(id)?.row ?? 0) + 1));\n const room = rooms[g] as Room;\n const top = cursor + R.pad + room.top;\n for (const id of group.members) {\n const slot = slots.get(id) as Slot;\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths.get(id) ?? B.minW;\n const cx = center(slot.col);\n const y = top + slot.row * (B.h + A.rowGap);\n boxes.push({\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y,\n w,\n h: B.h,\n cx,\n cy: y + B.h / 2,\n });\n }\n const contentBottom = top + rows * B.h + (rows - 1) * A.rowGap;\n const header = headers[g];\n const h = Math.max(contentBottom + R.pad + room.bottom - cursor, header ? header.h + R.inset * 2 : 0, group.region ? R.minH : 0);\n bands.push({ group: g, y: cursor, h, rows });\n cursor += h + R.gap;\n });\n const bandsBottom = cursor - R.gap;\n\n const byId = new Map(boxes.map((b) => [b.id, b]));\n const bandOf = (id: string) => bands[slots.get(id)?.group ?? 0] as (typeof bands)[number];\n const blocked = (points: Point[], a: string, b: string): boolean =>\n boxes.some((box) => {\n if (box.id === a || box.id === b) return false;\n const pad = LOOK.label.search;\n for (let i = 1; i < points.length; i++) {\n const [x1, y1] = points[i - 1] as Point;\n const [x2, y2] = points[i] as Point;\n if (Math.min(x1, x2) <= box.x + box.w + pad && Math.max(x1, x2) >= box.x - pad && Math.min(y1, y2) <= box.y + box.h + pad && Math.max(y1, y2) >= box.y - pad) return true;\n }\n return false;\n });\n // 箱の下 (上) の、次の行か次の帯との間の真ん中\n const laneBelow = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) < band.rows - 1 ? box.y + box.h + A.rowGap / 2 : Math.min(box.y + box.h + R.pad / 2, band.y + band.h - LOOK.edge.inset);\n };\n const laneAbove = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) > 0 ? box.y - A.rowGap / 2 : Math.max(box.y - R.pad / 2, band.y + LOOK.edge.inset);\n };\n const inset = LOOK.edge.inset;\n const route = (from: string, to: string): Point[] => {\n const a = byId.get(from) as SceneBox;\n const b = byId.get(to) as SceneBox;\n const sa = slots.get(from) as Slot;\n const sb = slots.get(to) as Slot;\n if (sa.group === sb.group && sa.row === sb.row) {\n const right = b.cx > a.cx;\n const straight: Point[] = [\n [right ? a.x + a.w : a.x, a.cy],\n [right ? b.x - inset : b.x + b.w + inset, b.cy],\n ];\n if (!blocked(straight, from, to)) return straight;\n const lane = laneBelow(from);\n return [\n [a.cx, a.y + a.h],\n [a.cx, lane],\n [b.cx, lane],\n [b.cx, b.y + b.h + inset],\n ];\n }\n const down = b.cy > a.cy;\n const leave: Point = [a.cx, down ? a.y + a.h : a.y];\n const enter: Point = [b.cx, down ? b.y - inset : b.y + b.h + inset];\n if (sa.col === sb.col) {\n const straight: Point[] = [leave, enter];\n if (!blocked(straight, from, to)) return straight;\n const x = a.x + a.w + (between[sa.col] ?? A.columnGap) / 2;\n return [\n [a.x + a.w, a.cy],\n [x, a.cy],\n [x, b.cy],\n [b.x + b.w + inset, b.cy],\n ];\n }\n const right = b.cx > a.cx;\n const lane = down ? laneBelow(from) : laneAbove(from);\n const candidates: Point[][] = [\n [leave, [a.cx, b.cy], [right ? b.x - inset : b.x + b.w + inset, b.cy]],\n [[right ? a.x + a.w : a.x, a.cy], [b.cx, a.cy], enter],\n [leave, [a.cx, lane], [b.cx, lane], enter],\n ];\n return candidates.find((points) => !blocked(points, from, to)) ?? (candidates[2] as Point[]);\n };\n\n const sceneEdges: SceneEdge[] = edges.map(({ step, event, edge }) => {\n const target = byId.get(edge.to) as SceneBox;\n return {\n step,\n event,\n from: edge.from,\n to: edge.to,\n points: route(edge.from, edge.to),\n color: edgeColor(edge, colors),\n carry: edge.carry,\n settle: [target.cx, target.cy + B.iconY],\n };\n });\n // 同じ 2 つの箱を行きと帰りで結ぶまっすぐな線は、少しずらして重ならないようにする\n for (const edge of sceneEdges) {\n if (edge.points.length !== 2) continue;\n const back = sceneEdges.some((other) => other.from === edge.to && other.to === edge.from && other.points.length === 2);\n if (!back) continue;\n const [p, q] = edge.points as [Point, Point];\n const flat = Math.abs(q[1] - p[1]) < Math.abs(q[0] - p[0]);\n const d = (edge.from < edge.to ? 1 : -1) * LOOK.edge.parallel;\n edge.points = edge.points.map(([x, y]) => (flat ? [x, y + d] : [x + d, y]));\n }\n\n const regions: SceneRegion[] = [];\n groups.forEach((group, g) => {\n const band = bands[g] as (typeof bands)[number];\n const header = headers[g];\n if (!group.region || !header) return;\n regions.push({\n id: group.region.id,\n lines: header.lines,\n ...(group.region.note !== undefined ? { note: group.region.note } : {}),\n ...(group.region.icon !== undefined ? { icon: group.region.icon } : {}),\n color: regionColor.get(group.region.id) ?? \"slate\",\n x: margin,\n y: band.y,\n w: 0,\n h: band.h,\n header: { x: margin + R.inset, y: band.y + R.inset, w: header.w, h: header.h },\n });\n });\n\n const labels: SceneLabel[] = [];\n for (const edge of sceneEdges) {\n const source = diagram.steps[edge.step]?.events[edge.event];\n if (source?.type !== \"edge\" || source.label === undefined) continue;\n const soft: Rect[] = [...regions.map((r) => r.header), ...labels.filter((l) => l.step === edge.step)];\n labels.push(\n placeLabel(\n { step: edge.step, event: edge.event, text: source.label, points: edge.points, color: edge.color, ...(source.labelSide ? { side: source.labelSide } : {}) },\n { hard: boxes, soft },\n ),\n );\n }\n\n const layout: Layout = { kind: \"architecture\", width: 0, height: 0, regions, boxes, lifelines: [], edges: sceneEdges, labels, actions: [], badges: [] };\n // 名前が左へ出たら、帯の中身を右へ寄せる。帯は図の幅いっぱいに引き直す\n const shift = labels.length > 0 ? Math.max(0, margin + LOOK.label.soft - Math.min(...labels.map((l) => l.x))) : 0;\n if (shift > 0) shiftContent(layout, shift, 0);\n const contentRight = Math.max(...boxes.map((b) => b.x + b.w + R.pad), ...labels.map((l) => l.x + l.w + LOOK.label.soft), ...sceneEdges.flatMap((e) => e.points.map((p) => p[0] + R.pad)));\n const width = Math.max(contentRight + margin, stripNeed(diagram) + margin * 2);\n for (const region of regions) region.w = width - margin * 2;\n const strip = layoutStrip(diagram, margin, bandsBottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bandsBottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = diagram.steps.map((step, s) => {\n const edge = sceneEdges.find((e) => e.step === s);\n if (!edge) return cornerBadge(step.events, s, layout);\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n });\n return layout;\n}\n\n/** 区画の中を結ぶ線の名前が帯の外へ出ていたら、その分だけ帯の上か下を広げる。広げたら true。 */\nfunction grow(layout: Layout, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): boolean {\n let grown = false;\n const soft = LOOK.label.soft;\n for (const label of layout.labels) {\n const edge = layout.edges.find((e) => e.step === label.step && e.event === label.event);\n const a = edge && slots.get(edge.from);\n const b = edge && slots.get(edge.to);\n if (!a || !b || a.group !== b.group || !groups[a.group]?.region) continue;\n const region = layout.regions.find((r) => r.id === groups[a.group]?.region?.id);\n const room = rooms[a.group];\n if (!region || !room) continue;\n const over = region.y + soft - label.y;\n const under = label.y + label.h - (region.y + region.h - soft);\n if (over > 0) {\n room.top += over;\n grown = true;\n }\n if (under > 0) {\n room.bottom += under;\n grown = true;\n }\n }\n return grown;\n}\n","/**\n * 時系列図の置き場所。\n *\n * 生存線の頭の箱を上に横 1 列に並べ、段で起きる線と処理を起きる順に 1 行ずつ下へ積む。\n * 生存線の間は、箱の幅と、その間を走る線の名前が収まる幅を取る。中身の帯は一番下に置く。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n cornerBadge,\n boxWidth,\n edgeColor,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type SceneAction,\n type SceneBadge,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\nexport function layoutSequence(diagram: Diagram): Layout {\n const { box: B, sequence: Q, label: L, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const listed = diagram.sequence?.lifelines ?? [];\n const order = [...listed, ...diagram.boxes.map((b) => b.id).filter((id) => !listed.includes(id))];\n const column = new Map(order.map((id, i) => [id, i]));\n const widths = order.map((id) => boxWidth(diagram, id, false));\n\n // 生存線の間。隣の箱どうしの隙間を取り、名前のある線が走る間は名前が収まるまで広げる\n const spacing = widths.slice(1).map((w, i) => (widths[i] as number) / 2 + w / 2 + Q.columnGap);\n const needs: { from: number; to: number; need: number }[] = [];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"edge\" || event.label === undefined) continue;\n const a = column.get(event.from) ?? 0;\n const b = column.get(event.to) ?? 0;\n const w = textWidth(event.label, labelStyle(event.label)) + L.padX * 2;\n if (a === b) {\n // 自分へ戻る線は名前を右に置くので、右の生存線までに輪と名前が収まる幅を取る\n if (a < spacing.length) needs.push({ from: a, to: a + 1, need: Q.selfW + L.side + w + Q.labelRoom });\n } else {\n needs.push({ from: Math.min(a, b), to: Math.max(a, b), need: w + Q.labelRoom * 2 });\n }\n }\n }\n needs.sort((x, y) => x.to - x.from - (y.to - y.from));\n for (const { from, to, need } of needs) {\n let have = 0;\n for (let i = from; i < to; i++) have += spacing[i] ?? 0;\n if (have >= need) continue;\n const add = (need - have) / (to - from);\n for (let i = from; i < to; i++) spacing[i] = (spacing[i] ?? 0) + add;\n }\n const xs: number[] = [];\n order.forEach((_, i) => xs.push(i === 0 ? margin + (widths[0] as number) / 2 : (xs[i - 1] as number) + (spacing[i - 1] as number)));\n\n const boxes: SceneBox[] = order.map((id, i) => {\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths[i] as number;\n const cx = xs[i] as number;\n return {\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y: margin,\n w,\n h: B.h,\n cx,\n cy: margin + B.h / 2,\n };\n });\n const headBottom = margin + B.h;\n\n // 行を積む。線は上か下に名前を、処理は札を持つので、行ごとに上下に要る高さが違う\n const edges: SceneEdge[] = [];\n const actions: SceneAction[] = [];\n const requests: Parameters<typeof placeLabel>[0][] = [];\n let y = headBottom + Q.firstRow;\n let below = 0;\n let first = true;\n diagram.steps.forEach((step, s) => {\n step.events.forEach((event, e) => {\n if (event.type !== \"edge\" && event.type !== \"action\") return;\n let above: number;\n let under: number;\n if (event.type === \"edge\") {\n const side = event.labelSide ?? \"above\";\n const self = event.from === event.to;\n const named = event.label !== undefined;\n above = named && side === \"above\" ? L.offset + L.h / 2 : gap;\n under = self ? Q.selfH + gap : named && side === \"below\" ? L.offset + L.h / 2 : gap;\n } else {\n above = LOOK.action.h / 2;\n under = LOOK.action.h / 2;\n }\n y = first ? y + above : y + Math.max(Q.minPitch, below + Q.rowGap + above) + (e === 0 && s > 0 ? Q.stepGap : 0);\n first = false;\n below = under;\n\n if (event.type === \"edge\") {\n const xf = xs[column.get(event.from) ?? 0] as number;\n const xt = xs[column.get(event.to) ?? 0] as number;\n const dir = Math.sign(xt - xf) || 1;\n const points: Point[] =\n xf === xt\n ? [\n [xf, y],\n [xf + Q.selfW, y],\n [xf + Q.selfW, y + Q.selfH],\n [xf + LOOK.edge.inset, y + Q.selfH],\n ]\n : [\n [xf, y],\n [xt - dir * LOOK.edge.inset, y],\n ];\n const color = edgeColor(event, colors);\n edges.push({ step: s, event: e, from: event.from, to: event.to, points, color, carry: event.carry });\n if (event.label !== undefined) {\n requests.push({\n step: s,\n event: e,\n text: event.label,\n points,\n color,\n ...(event.labelSide ? { side: event.labelSide } : xf === xt ? { side: \"right\" as const } : {}),\n });\n }\n } else {\n // 札は生存線の上の番号の丸を隠さないよう、丸の右に出す (#3017)\n const x = xs[column.get(event.box) ?? 0] as number;\n const w = textWidth(event.label, TYPE.action) + LOOK.action.padX * 2;\n actions.push({ step: s, event: e, box: event.box, text: event.label, color: colors.get(event.box) ?? \"slate\", x: x + LOOK.badge.r + 4, y: y - LOOK.action.h / 2, w, h: LOOK.action.h });\n }\n });\n });\n const bottom = (first ? headBottom : y + below) + Q.tail;\n const lifelines = order.map((id, i) => ({ id, x: xs[i] as number, y1: headBottom, y2: bottom }));\n\n const labels: SceneLabel[] = [];\n for (const request of requests) {\n const soft = [...labels.filter((l) => l.step === request.step), ...actions];\n labels.push(placeLabel(request, { hard: boxes, soft }));\n }\n\n const layout: Layout = { kind: \"sequence\", width: 0, height: 0, regions: [], boxes, lifelines, edges, labels, actions, badges: [] };\n\n // 図の幅。名前が左に出たら全体を右へ寄せ、右端は一番右の物に余白を足した所\n const lefts = [...boxes.map((b) => b.x), ...labels.map((l) => l.x), ...actions.map((a) => a.x)];\n const shift = Math.max(0, margin - Math.min(...lefts));\n if (shift > 0) shiftContent(layout, shift, 0);\n const rights = [...boxes.map((b) => b.x + b.w), ...labels.map((l) => l.x + l.w), ...actions.map((a) => a.x + a.w), ...edges.flatMap((edge) => edge.points.map((p) => p[0]))];\n const width = Math.max(Math.max(...rights) + margin, stripNeed(diagram) + margin * 2);\n const strip = layoutStrip(diagram, margin, bottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = badges(diagram, layout);\n return layout;\n}\n\n/**\n * 段の番号。その段の最初の線の始まりに置き、線が無ければ処理する箱の生存線の上、無ければ書き換わる箱の角。\n * 処理の札はその段の終わりに消えるので、札に付けると止め絵で丸だけが浮く (#3017)。\n */\nfunction badges(diagram: Diagram, layout: Layout): SceneBadge[] {\n return diagram.steps.map((step, s) => {\n const edge = layout.edges.find((e) => e.step === s);\n if (edge) {\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n }\n const action = layout.actions.find((a) => a.step === s);\n const lifeline = action && layout.lifelines.find((l) => l.id === action.box);\n if (action && lifeline) return { step: s, x: lifeline.x, y: action.y + action.h / 2, color: action.color };\n return cornerBadge(step.events, s, layout);\n });\n}\n","/**\n * 原本の JSON の誤りの文 (#2999)。\n *\n * JSON は語を持たず file から言葉を決められないので、呼ぶ側 (頁なら頁の言葉) が言葉を渡す。\n * 文は schema が使う決まり (JSON Schema の keyword) ごとに持ち、ajv の英語の文はそのまま出さない。\n * schema に決まりを足して文が無い時は、`every-schema-keyword-has-messages` の検査が落ちる。\n */\nimport type { NotationLang } from \"./words\";\n\n/** `^[^…]+$` の形の決まりが書けないとする字。`space` は空白 (`\\s`) */\nexport interface Forbidden {\n space: boolean;\n chars: string[];\n}\n\n/** 書けない組み合わせ (`not`) の欄と、その欄を書ける時の `kind` の値 */\nexport interface Allowed {\n field: string;\n kind: string;\n}\n\nexport interface FieldMessages {\n additionalProperties: (key: string) => string;\n required: (key: string) => string;\n enum: (values: readonly string[]) => string;\n type: (type: string) => string;\n minLength: (limit: number) => string;\n /** 書けない字を読めない形の決まりでは `undefined` */\n pattern: (forbidden: Forbidden | undefined) => string;\n minItems: (limit: number) => string;\n minimum: (limit: number) => string;\n const: (value: string) => string;\n /** どの欄の組み合わせか判らない場所では `undefined` */\n not: (allowed: Allowed | undefined) => string;\n /** 選べる決まりがどれも欄が足りない時の、足りない欄。それ以外の時は空 */\n anyOf: (fields: readonly string[]) => string;\n oneOf: string;\n discriminator: (tag: string, values: readonly string[]) => string;\n /** 道具より新しい版の図 */\n newer: (version: number, tool: number) => string;\n}\n\nconst TYPES_JA: Record<string, string> = {\n string: \"文字列にする\",\n integer: \"整数にする\",\n number: \"数にする\",\n object: \"オブジェクトにする\",\n array: \"配列にする\",\n boolean: \"true か false にする\",\n null: \"null にする\",\n};\n\nconst TYPES_EN: Record<string, string> = {\n string: \"Use a string\",\n integer: \"Use an integer\",\n number: \"Use a number\",\n object: \"Use an object\",\n array: \"Use an array\",\n boolean: \"Use true or false\",\n null: \"Use null\",\n};\n\nconst plural = (count: number, word: string): string => `${count} ${word}${count === 1 ? \"\" : \"s\"}`;\n\nconst ja: FieldMessages = {\n additionalProperties: (key) => `${key} という欄は書けない`,\n required: (key) => `${key} の欄が要る`,\n enum: (values) => `${values.join(\" / \")} のどれかにする`,\n type: (type) => TYPES_JA[type] ?? `${type} にする`,\n minLength: (limit) => `${limit} 字以上書く`,\n pattern: (forbidden) =>\n forbidden ? `${forbidden.space ? \"空白と \" : \"\"}${forbidden.chars.join(\" \")} は使えない` : \"使えない字が入っている\",\n minItems: (limit) => `${limit} つ以上書く`,\n minimum: (limit) => `${limit} 以上にする`,\n const: (value) => `${value} にする`,\n not: (allowed) => (allowed ? `${allowed.field} の欄は kind が ${allowed.kind} の時だけ書ける` : \"この欄の組み合わせは書けない\"),\n anyOf: (fields) =>\n fields.length > 0 ? `${fields.join(\" か \")} の${fields.length === 2 ? \"どちらか\" : \"どれか\"}の欄が要る` : \"書ける形のどれにも合わない\",\n oneOf: \"書ける形のどれか 1 つだけに合わせる\",\n discriminator: (tag, values) => `${tag} は ${values.join(\" / \")} のどれかにする`,\n newer: (version, tool) => `版 ${version} の図は、この道具 (版 ${tool}) より新しいので読めない。道具を新しくする`,\n};\n\nconst en: FieldMessages = {\n additionalProperties: (key) => `The ${key} field is not allowed`,\n required: (key) => `The ${key} field is required`,\n enum: (values) => `Use one of ${values.join(\" / \")}`,\n type: (type) => TYPES_EN[type] ?? `Use ${type}`,\n minLength: (limit) => `Write at least ${plural(limit, \"character\")}`,\n pattern: (forbidden) =>\n forbidden\n ? `Cannot contain ${forbidden.space ? \"spaces or \" : \"\"}${forbidden.chars.join(\" \")}`\n : \"Contains characters that are not allowed\",\n minItems: (limit) => `Write at least ${plural(limit, \"item\")}`,\n minimum: (limit) => `Use ${limit} or greater`,\n const: (value) => `Use ${value}`,\n not: (allowed) => (allowed ? `The ${allowed.field} field is allowed only when kind is ${allowed.kind}` : \"This combination of fields is not allowed\"),\n anyOf: (fields) => (fields.length > 0 ? `Write one of the ${fields.join(\" or \")} fields` : \"Does not match any of the allowed shapes\"),\n oneOf: \"Match exactly one of the allowed shapes\",\n discriminator: (tag, values) => `${tag} is one of ${values.join(\" / \")}`,\n newer: (version, tool) => `Version ${version} diagrams are newer than this tool (version ${tool}) and cannot be read. Update the tool`,\n};\n\nexport const FIELD_MESSAGES: Record<NotationLang, FieldMessages> = { ja, en };\n","/* eslint-disable */\n// packages/dragon/scripts/build-validator.mjs が diagram.schema.json から書き出した。手で直さない\nfunction ucs2length(str) {\n let length = 0;\n for (const _ of str) length++;\n return length;\n}\nexport const validate = validate10;export default validate10;const schema11 = {\"title\":\"dragon の図の原本\",\"description\":\"区画、箱、線、運ぶ物、段、中身の帯の 6 部品を共通の骨組みに置き、図の種類だけの物は種類の欄に置く。座標は持たない。\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"version\",\"kind\",\"title\",\"boxes\",\"steps\"],\"properties\":{\"version\":{\"description\":\"形式の版\",\"type\":\"integer\",\"minimum\":1},\"kind\":{\"description\":\"図の種類\",\"enum\":[\"sequence\",\"architecture\"]},\"title\":{\"$ref\":\"#/definitions/text\"},\"view\":{\"description\":\"見せ方。書かなければ字の大きさで選ぶ。fixed は全体を止めて中だけ動かし、follow は寄って動かし全体図で今どこかを示す\",\"enum\":[\"fixed\",\"follow\"]},\"regions\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/region\"}},\"boxes\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/box\"}},\"strip\":{\"$ref\":\"#/definitions/strip\"},\"steps\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/step\"}},\"sequence\":{\"$ref\":\"#/definitions/sequence\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"sequence\"}}},\"then\":{\"required\":[\"sequence\"]},\"else\":{\"not\":{\"required\":[\"sequence\"]}},\"definitions\":{\"text\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"},\"color\":{\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]},\"region\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}},\"box\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}},\"strip\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}},\"step\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}},\"event\":{\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]},\"carry\":{\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}},\"sequence\":{\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}}}};const schema12 = {\"type\":\"string\",\"minLength\":1};const func2 = Object.prototype.hasOwnProperty;const func3 = ucs2length;const schema13 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}};const schema14 = {\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"};const schema17 = {\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]};const pattern0 = new RegExp(\"^[^\\\\s\\\\[\\\\]「」=:]+$\", \"u\");function validate11(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!(((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"note\")) || (key0 === \"color\")) || (key0 === \"icon\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.note !== undefined){let data2 = data.note;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}else {const err12 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}validate11.errors = vErrors;return errors === 0;}const schema19 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}};function validate13(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"sub\")) || (key0 === \"color\")) || (key0 === \"icon\")) || (key0 === \"region\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.sub !== undefined){let data2 = data.sub;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.region !== undefined){let data5 = data.region;if(typeof data5 === \"string\"){if(!pattern0.test(data5)){const err12 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}validate13.errors = vErrors;return errors === 0;}const schema26 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}};function validate15(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.fields === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"fields\"},message:\"must have required property '\"+\"fields\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"title\") || (key0 === \"fields\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err3 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.fields !== undefined){let data1 = data.fields;if(Array.isArray(data1)){if(data1.length < 1){const err5 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const len0 = data1.length;for(let i0=0; i0<len0; i0++){let data2 = data1[i0];if(typeof data2 === \"string\"){if(func3(data2) < 1){const err6 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}else {const err8 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}else {const err9 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}validate15.errors = vErrors;return errors === 0;}const schema29 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}};const schema33 = {\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]};const schema37 = {\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}};function validate19(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"tag\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.text === undefined){const err2 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs5 = errors;const _errs6 = errors;const _errs7 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.text === undefined) && (missing1 = \"text\")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var valid2 = _errs7 === errors;if(valid2){const err4 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}var _valid0 = _errs5 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err5 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.kind === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}for(const key0 in data){if(!((key0 === \"kind\") || (key0 === \"text\"))){const err7 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.kind !== undefined){let data1 = data.kind;if(!((((data1 === \"envelope\") || (data1 === \"tag\")) || (data1 === \"coin\")) || (data1 === \"none\"))){const err8 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema37.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.text !== undefined){let data2 = data.text;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err9 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate19.errors = vErrors;return errors === 0;}function validate18(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}const tag0 = data.type;if(typeof tag0 == \"string\"){if(tag0 === \"edge\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err1 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.from === undefined){const err2 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"from\"},message:\"must have required property '\"+\"from\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.to === undefined){const err3 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"to\"},message:\"must have required property '\"+\"to\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.carry === undefined){const err4 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"carry\"},message:\"must have required property '\"+\"carry\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}for(const key0 in data){if(!((((((key0 === \"type\") || (key0 === \"from\")) || (key0 === \"to\")) || (key0 === \"label\")) || (key0 === \"carry\")) || (key0 === \"labelSide\"))){const err5 = {instancePath,schemaPath:\"#/oneOf/0/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.type !== undefined){if(\"edge\" !== data.type){const err6 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/0/properties/type/const\",keyword:\"const\",params:{allowedValue: \"edge\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.from !== undefined){let data1 = data.from;if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err7 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.to !== undefined){let data2 = data.to;if(typeof data2 === \"string\"){if(!pattern0.test(data2)){const err9 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.label !== undefined){let data3 = data.label;if(typeof data3 === \"string\"){if(func3(data3) < 1){const err11 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.carry !== undefined){if(!(validate19(data.carry, {instancePath:instancePath+\"/carry\",parentData:data,parentDataProperty:\"carry\",rootData}))){vErrors = vErrors === null ? validate19.errors : vErrors.concat(validate19.errors);errors = vErrors.length;}}if(data.labelSide !== undefined){let data5 = data.labelSide;if(!((((data5 === \"above\") || (data5 === \"below\")) || (data5 === \"left\")) || (data5 === \"right\"))){const err13 = {instancePath:instancePath+\"/labelSide\",schemaPath:\"#/oneOf/0/properties/labelSide/enum\",keyword:\"enum\",params:{allowedValues: schema33.oneOf[0].properties.labelSide.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/oneOf/0/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else if(tag0 === \"action\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err15 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.box === undefined){const err16 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data.label === undefined){const err17 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"label\"},message:\"must have required property '\"+\"label\"+\"'\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}for(const key1 in data){if(!(((key1 === \"type\") || (key1 === \"box\")) || (key1 === \"label\"))){const err18 = {instancePath,schemaPath:\"#/oneOf/1/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.type !== undefined){if(\"action\" !== data.type){const err19 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/1/properties/type/const\",keyword:\"const\",params:{allowedValue: \"action\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data.box !== undefined){let data7 = data.box;if(typeof data7 === \"string\"){if(!pattern0.test(data7)){const err20 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}else {const err21 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.label !== undefined){let data8 = data.label;if(typeof data8 === \"string\"){if(func3(data8) < 1){const err22 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath,schemaPath:\"#/oneOf/1/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}else if(tag0 === \"swap\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err25 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}if(data.box === undefined){const err26 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}if(data.text === undefined){const err27 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}for(const key2 in data){if(!(((key2 === \"type\") || (key2 === \"box\")) || (key2 === \"text\"))){const err28 = {instancePath,schemaPath:\"#/oneOf/2/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.type !== undefined){if(\"swap\" !== data.type){const err29 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/2/properties/type/const\",keyword:\"const\",params:{allowedValue: \"swap\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.box !== undefined){let data10 = data.box;if(typeof data10 === \"string\"){if(!pattern0.test(data10)){const err30 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data.text !== undefined){let data11 = data.text;if(typeof data11 === \"string\"){if(func3(data11) < 1){const err32 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}}else {const err34 = {instancePath,schemaPath:\"#/oneOf/2/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}else if(tag0 === \"strip\"){const _errs39 = errors;let valid15 = false;const _errs40 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.value === undefined){const err35 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/0/required\",keyword:\"required\",params:{missingProperty: \"value\"},message:\"must have required property '\"+\"value\"+\"'\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}var _valid0 = _errs40 === errors;valid15 = valid15 || _valid0;if(!valid15){const _errs41 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.tag === undefined){const err36 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/1/required\",keyword:\"required\",params:{missingProperty: \"tag\"},message:\"must have required property '\"+\"tag\"+\"'\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}var _valid0 = _errs41 === errors;valid15 = valid15 || _valid0;}if(!valid15){const err37 = {instancePath,schemaPath:\"#/oneOf/3/anyOf\",keyword:\"anyOf\",params:{},message:\"must match a schema in anyOf\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err38 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}if(data.field === undefined){const err39 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"field\"},message:\"must have required property '\"+\"field\"+\"'\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}for(const key3 in data){if(!((((key3 === \"type\") || (key3 === \"field\")) || (key3 === \"value\")) || (key3 === \"tag\"))){const err40 = {instancePath,schemaPath:\"#/oneOf/3/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key3},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}}if(data.type !== undefined){if(\"strip\" !== data.type){const err41 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/3/properties/type/const\",keyword:\"const\",params:{allowedValue: \"strip\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}if(data.field !== undefined){let data13 = data.field;if(typeof data13 === \"string\"){if(func3(data13) < 1){const err42 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}else {const err43 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}if(data.value !== undefined){let data14 = data.value;if(typeof data14 === \"string\"){if(func3(data14) < 1){const err44 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data.tag !== undefined){let data15 = data.tag;if(typeof data15 === \"string\"){if(func3(data15) < 1){const err46 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}else {const err47 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}}}else {const err48 = {instancePath,schemaPath:\"#/oneOf/3/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"mapping\", tag: \"type\", tagValue: tag0},message:\"value of tag \\\"type\\\" must be in oneOf\"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}else {const err50 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"tag\", tag: \"type\", tagValue: tag0},message:\"tag \\\"type\\\" must be string\"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}else {const err51 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}validate18.errors = vErrors;return errors === 0;}function validate17(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.body === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"body\"},message:\"must have required property '\"+\"body\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.events === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"events\"},message:\"must have required property '\"+\"events\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!((((key0 === \"title\") || (key0 === \"body\")) || (key0 === \"code\")) || (key0 === \"events\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}else {const err5 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.body !== undefined){let data1 = data.body;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err6 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.code !== undefined){let data2 = data.code;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err8 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.events !== undefined){let data3 = data.events;if(Array.isArray(data3)){const len0 = data3.length;for(let i0=0; i0<len0; i0++){if(!(validate18(data3[i0], {instancePath:instancePath+\"/events/\" + i0,parentData:data3,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate18.errors : vErrors.concat(validate18.errors);errors = vErrors.length;}}}else {const err10 = {instancePath:instancePath+\"/events\",schemaPath:\"#/properties/events/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate17.errors = vErrors;return errors === 0;}const schema46 = {\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}};function validate23(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.lifelines === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"lifelines\"},message:\"must have required property '\"+\"lifelines\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"lifelines\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.lifelines !== undefined){let data0 = data.lifelines;if(Array.isArray(data0)){if(data0.length < 1){const err2 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err3 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}else {const err5 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}validate23.errors = vErrors;return errors === 0;}function validate10(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"sequence\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.sequence === undefined){const err2 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"sequence\"},message:\"must have required property '\"+\"sequence\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs5 = errors;const _errs6 = errors;const _errs7 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.sequence === undefined) && (missing1 = \"sequence\")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var valid2 = _errs7 === errors;if(valid2){const err4 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}var _valid0 = _errs5 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err5 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.version === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"version\"},message:\"must have required property '\"+\"version\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data.kind === undefined){const err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data.title === undefined){const err8 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data.boxes === undefined){const err9 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"boxes\"},message:\"must have required property '\"+\"boxes\"+\"'\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data.steps === undefined){const err10 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"steps\"},message:\"must have required property '\"+\"steps\"+\"'\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key0 in data){if(!(func2.call(schema11.properties, key0))){const err11 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.version !== undefined){let data1 = data.version;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err12 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 < 1 || isNaN(data1)){const err13 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}if(data.kind !== undefined){let data2 = data.kind;if(!((data2 === \"sequence\") || (data2 === \"architecture\"))){const err14 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data.title !== undefined){let data3 = data.title;if(typeof data3 === \"string\"){if(func3(data3) < 1){const err15 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data.view !== undefined){let data4 = data.view;if(!((data4 === \"fixed\") || (data4 === \"follow\"))){const err17 = {instancePath:instancePath+\"/view\",schemaPath:\"#/properties/view/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.view.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data.regions !== undefined){let data5 = data.regions;if(Array.isArray(data5)){const len0 = data5.length;for(let i0=0; i0<len0; i0++){if(!(validate11(data5[i0], {instancePath:instancePath+\"/regions/\" + i0,parentData:data5,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate11.errors : vErrors.concat(validate11.errors);errors = vErrors.length;}}}else {const err18 = {instancePath:instancePath+\"/regions\",schemaPath:\"#/properties/regions/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.boxes !== undefined){let data7 = data.boxes;if(Array.isArray(data7)){if(data7.length < 1){const err19 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}const len1 = data7.length;for(let i1=0; i1<len1; i1++){if(!(validate13(data7[i1], {instancePath:instancePath+\"/boxes/\" + i1,parentData:data7,parentDataProperty:i1,rootData}))){vErrors = vErrors === null ? validate13.errors : vErrors.concat(validate13.errors);errors = vErrors.length;}}}else {const err20 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}if(data.strip !== undefined){if(!(validate15(data.strip, {instancePath:instancePath+\"/strip\",parentData:data,parentDataProperty:\"strip\",rootData}))){vErrors = vErrors === null ? validate15.errors : vErrors.concat(validate15.errors);errors = vErrors.length;}}if(data.steps !== undefined){let data10 = data.steps;if(Array.isArray(data10)){if(data10.length < 1){const err21 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}const len2 = data10.length;for(let i2=0; i2<len2; i2++){if(!(validate17(data10[i2], {instancePath:instancePath+\"/steps/\" + i2,parentData:data10,parentDataProperty:i2,rootData}))){vErrors = vErrors === null ? validate17.errors : vErrors.concat(validate17.errors);errors = vErrors.length;}}}else {const err22 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}if(data.sequence !== undefined){if(!(validate23(data.sequence, {instancePath:instancePath+\"/sequence\",parentData:data,parentDataProperty:\"sequence\",rootData}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}}}else {const err23 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}validate10.errors = vErrors;return errors === 0;}\n","/**\n * 図の原本の形と、原本を JSON Schema で検査する命令。\n *\n * 形の正は `schemas/diagram.schema.json` の 1 本で、下の型はその写し。\n * 誤りは JSON Pointer で場所を示す。欄が足りない時と知らない欄がある時は、その欄の場所まで示す。\n * 誤りの文は呼ぶ側が渡した言葉 (渡さなければ日本語) で出す。文の表は `field-messages.ts` が持つ (#2999)。\n *\n * 検査の関数は schema から前もって書き出した物 (`schemas/validate-diagram.js`) を使う。\n * ajv に schema をその場で組み立てさせると `new Function` を使い、`eval` を許さない頁の CSP で止まる。\n * 書き出しは `scripts/build-validator.mjs` が ajv の設定 `{ allErrors: true, discriminator: true, strictTypes: false }` で行う。\n */\nimport type { ErrorObject } from \"ajv\";\nimport { type Allowed, FIELD_MESSAGES, type FieldMessages, type Forbidden } from \"./field-messages\";\nimport validate from \"./schemas/validate-diagram.js\";\nimport type { NotationLang } from \"./words\";\n\nexport type Color = \"blue\" | \"amber\" | \"green\" | \"violet\" | \"rose\" | \"slate\" | \"coin\";\n/** 色の役の一覧。記法の `color:` に書ける値と、誤りの文に並べる値 */\nexport const COLORS: readonly Color[] = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\", \"slate\", \"coin\"];\n\nexport interface Region {\n id: string;\n name: string;\n note?: string;\n color?: Color;\n icon?: string;\n}\n\nexport interface Box {\n id: string;\n name: string;\n sub?: string;\n color?: Color;\n icon?: string;\n region?: string;\n}\n\nexport type Carry = { kind: \"envelope\" } | { kind: \"tag\"; text: string } | { kind: \"coin\" } | { kind: \"none\" };\n\nexport type LabelSide = \"above\" | \"below\" | \"left\" | \"right\";\n\n/** 見せ方。`fixed` は全体を止めて中だけ動かし、`follow` は寄って動かし全体図で今どこかを示す。 */\nexport type ViewMode = \"fixed\" | \"follow\";\n\nexport type DiagramEvent =\n | { type: \"edge\"; from: string; to: string; label?: string; carry: Carry; labelSide?: LabelSide }\n | { type: \"action\"; box: string; label: string }\n | { type: \"swap\"; box: string; text: string }\n | { type: \"strip\"; field: string; value?: string; tag?: string };\n\nexport interface Step {\n title: string;\n body: string;\n code?: string;\n events: DiagramEvent[];\n}\n\nexport interface Diagram {\n version: number;\n kind: \"sequence\" | \"architecture\";\n title: string;\n view?: ViewMode;\n regions?: Region[];\n boxes: Box[];\n strip?: { title: string; fields: string[] };\n steps: Step[];\n sequence?: { lifelines: string[] };\n}\n\nexport interface FieldError {\n /** 誤った欄の場所 (JSON Pointer) */\n pointer: string;\n message: string;\n}\n\nexport type Checked = { ok: true } | { ok: false; errors: FieldError[] };\n\nexport interface CheckOptions {\n /** 誤りの文の言葉。渡さなければ日本語 */\n lang?: NotationLang;\n}\n\n/** 段の中で起きることの種類。schema の event の `discriminator` が見る `type` の値 */\nconst EVENT_TYPES = [\"edge\", \"action\", \"swap\", \"strip\"] as const satisfies readonly DiagramEvent[\"type\"][];\n\n/**\n * schema の書けない組み合わせ (`else: { not: { required: [欄] } }`) の 2 か所。誤りの場所の最後の欄で引き、根は \"\" で引く。\n * 2 か所とも ajv の誤りでは決まりの場所 (`#/else/not`) が同じになるので、誤りの場所で分ける\n */\nconst NOT_ALLOWED: Record<string, Allowed> = {\n \"\": { field: \"sequence\", kind: \"sequence\" },\n carry: { field: \"text\", kind: \"tag\" },\n};\n\nconst escape = (key: string): string => key.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n\n/** `^[^…]+$` の形の決まりから書けない字を読む。違う形の決まりでは `undefined` */\nfunction forbiddenOf(pattern: string): Forbidden | undefined {\n const inside = /^\\^\\[\\^(.+)\\]\\+\\$$/u.exec(pattern)?.[1];\n if (inside === undefined) return undefined;\n const chars: string[] = inside.match(/\\\\.|[^\\\\]/gu) ?? [];\n return { space: chars.includes(\"\\\\s\"), chars: chars.filter((char) => char !== \"\\\\s\").map((char) => char.replace(/^\\\\/u, \"\")) };\n}\n\n/** `anyOf` の中の決まりが出した誤り。`anyOf` の誤り 1 つにまとめて出す */\nconst branchesOf = (anyOf: ErrorObject, errors: readonly ErrorObject[]): ErrorObject[] =>\n errors.filter(\n (error) =>\n error !== anyOf &&\n error.schemaPath.startsWith(`${anyOf.schemaPath}/`) &&\n (error.instancePath === anyOf.instancePath || error.instancePath.startsWith(`${anyOf.instancePath}/`)),\n );\n\nfunction toFieldError(error: ErrorObject, errors: readonly ErrorObject[], m: FieldMessages): FieldError {\n const params = error.params as Record<string, unknown>;\n const at = error.instancePath;\n switch (error.keyword) {\n case \"additionalProperties\": {\n const key = String(params.additionalProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.additionalProperties(key) };\n }\n case \"required\": {\n const key = String(params.missingProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.required(key) };\n }\n case \"not\": {\n const allowed = NOT_ALLOWED[at.slice(at.lastIndexOf(\"/\") + 1)];\n return { pointer: allowed ? `${at}/${allowed.field}` : at, message: m.not(allowed) };\n }\n case \"anyOf\": {\n const branches = branchesOf(error, errors);\n const missing = branches.every((branch) => branch.keyword === \"required\") ? branches.map((branch) => String(branch.params.missingProperty)) : [];\n return { pointer: at, message: m.anyOf(missing) };\n }\n case \"discriminator\": {\n const tag = String(params.tag);\n return { pointer: `${at}/${escape(tag)}`, message: m.discriminator(tag, EVENT_TYPES) };\n }\n case \"enum\":\n return { pointer: at, message: m.enum((params.allowedValues as unknown[]).map(String)) };\n case \"type\":\n return { pointer: at, message: m.type(String(params.type)) };\n case \"minLength\":\n return { pointer: at, message: m.minLength(Number(params.limit)) };\n case \"pattern\":\n return { pointer: at, message: m.pattern(forbiddenOf(String(params.pattern))) };\n case \"minItems\":\n return { pointer: at, message: m.minItems(Number(params.limit)) };\n case \"minimum\":\n return { pointer: at, message: m.minimum(Number(params.limit)) };\n case \"const\":\n return { pointer: at, message: m.const(String(params.allowedValue)) };\n case \"oneOf\":\n return { pointer: at, message: m.oneOf };\n default:\n return { pointer: at, message: error.message ?? error.keyword };\n }\n}\n\n/** 原本の JSON を検査する。版が道具より新しいかは見ない (`readDiagram` が見る)。 */\nexport function validateDiagram(input: unknown, options: CheckOptions = {}): Checked {\n if (validate(input)) return { ok: true };\n const all = validate.errors ?? [];\n const inBranch = new Set(all.filter((error) => error.keyword === \"anyOf\").flatMap((anyOf) => branchesOf(anyOf, all)));\n const m = FIELD_MESSAGES[options.lang ?? \"ja\"];\n // 条件付きの決まり (if / then) は中で落ちた決まりの誤りを別に出すので、包む側の if の誤りは出さない\n const errors = all.filter((error) => error.keyword !== \"if\" && !inBranch.has(error)).map((error) => toFieldError(error, all, m));\n return { ok: false, errors };\n}\n","/**\n * 原本の形式の版。\n *\n * 道具より新しい版の図は描かずに断る。古い版の図は、版を 1 つずつ上げる変換を通して読み、\n * 原本の file を書き換えるのは移行の命令 (`migrateFile`) だけにする。\n * 今は版 1 しか無いため、版を上げる変換はまだ持たない。版 2 を作る時に、版 1 から 2 への変換と\n * 古い版を読んだ時の警告をここに足す。\n */\nimport { FIELD_MESSAGES } from \"./field-messages\";\nimport { type CheckOptions, type Diagram, type FieldError, validateDiagram } from \"./schema\";\nimport type { NotationLang } from \"./words\";\n\n/** この道具が読める原本の版 */\nexport const FORMAT_VERSION = 1;\n\nexport type Read = { ok: true; diagram: Diagram; warnings: string[] } | { ok: false; errors: FieldError[] };\n\nexport interface Migrated {\n changed: boolean;\n from: number;\n to: number;\n}\n\nfunction newerThanTool(input: unknown): number | undefined {\n if (typeof input !== \"object\" || input === null) return undefined;\n const version = (input as { version?: unknown }).version;\n return typeof version === \"number\" && version > FORMAT_VERSION ? version : undefined;\n}\n\nconst newerError = (version: number, lang: NotationLang): FieldError => ({\n pointer: \"/version\",\n message: FIELD_MESSAGES[lang].newer(version, FORMAT_VERSION),\n});\n\n/** 原本を読む。道具より新しい版は描かずに断り、形の誤りは検査の誤りとして返す。誤りの文は `options.lang` (渡さなければ日本語) で出す。 */\nexport function readDiagram(input: unknown, options: CheckOptions = {}): Read {\n const newer = newerThanTool(input);\n if (newer !== undefined) return { ok: false, errors: [newerError(newer, options.lang ?? \"ja\")] };\n const checked = validateDiagram(input, options);\n if (!checked.ok) return checked;\n return { ok: true, diagram: input as Diagram, warnings: [] };\n}\n\n/**\n * 原本の file を今の版へ移す。今の版の file には触れない。\n *\n * file を読むので、画面で描く入口からは呼ばない。node の file の命令は呼んだ時に初めて読み込む。\n */\nexport async function migrateFile(path: string): Promise<Migrated> {\n const { readFile } = await import(\"node:fs/promises\");\n const input: unknown = JSON.parse(await readFile(path, \"utf8\"));\n const read = readDiagram(input);\n if (!read.ok) throw new Error(`${path} を移せない: ${read.errors.map((error) => `${error.pointer} ${error.message}`).join(\" / \")}`);\n return { changed: false, from: read.diagram.version, to: FORMAT_VERSION };\n}\n","/**\n * 段ごとの始まりと長さと、線、運ぶ物、線の名前、段の番号が見える時刻の表。SVG の動きはこの表から組む。\n *\n * 段の長さは本文の字数で決め、段で起きることが全部済んでから少し留まる長さを下限にする。\n * 運ぶ物は主役 (封筒と札は 1 つ、硬貨は別の 1 つ) ごとに途切れず見え続ける。着いた後は\n * 次の同じ主役が出発するまで着いた先に留まり、次が無ければ終わりまで留まる。\n * 線の名前はその段の間だけ出し、同じ段に何本あっても同時に見えるのは 2 つまでにする。\n */\nimport { MOTION } from \"./look/values\";\nimport type { Diagram } from \"./schema\";\n\n/** 秒で表した、見えている間。`end` の時刻は含まない。 */\nexport interface Span {\n start: number;\n end: number;\n}\n\n/** 線を引いている間。`start` で引き始め、`drawn` で引き終わり、`end` (段の終わり) まで濃く残す。 */\nexport interface EdgeTime extends Span {\n step: number;\n event: number;\n drawn: number;\n}\n\n/** 運ぶ物が見えている間。`depart` に出発し `arrive` に着く。出発を待つ間と、着いた先で留まる間も含む。 */\nexport interface CarrierTime extends Span {\n step: number;\n event: number;\n who: \"main\" | \"coin\";\n depart: number;\n arrive: number;\n}\n\nexport interface LabelTime extends Span {\n step: number;\n event: number;\n}\n\n/** 処理、箱の字の書き換え、中身の帯の値が起きる時刻。 */\nexport interface EventTime {\n step: number;\n event: number;\n at: number;\n}\n\nexport interface Timeline {\n /** 1 周の長さ */\n total: number;\n /** 繰り返す前に消えていく所の始まり */\n last: number;\n steps: Span[];\n edges: EdgeTime[];\n carriers: CarrierTime[];\n labels: LabelTime[];\n badges: { step: number; appears: number }[];\n events: EventTime[];\n /** 段ごとの止め絵の時刻。その段で起きることが全部見えている */\n stills: number[];\n}\n\ninterface Planned {\n edges: { event: number; a: number; b: number; carries: boolean; coin: boolean; named: boolean }[];\n events: { event: number; at: number }[];\n busy: number;\n}\n\n/** 段の中で起きることの時刻 (段の始まりから)。線は少しずつずらして引き、書き換えは直前の線が着いてから起こす。 */\nfunction plan(step: Diagram[\"steps\"][number]): Planned {\n const out: Planned = { edges: [], events: [], busy: 0 };\n let cursor = MOTION.edgeAt;\n let arrived: number | undefined;\n let changes = 0;\n step.events.forEach((event, e) => {\n if (event.type === \"edge\") {\n const carries = event.carry.kind !== \"none\";\n const a = cursor;\n const b = a + (carries ? MOTION.drawCarry : MOTION.draw);\n out.edges.push({ event: e, a, b, carries, coin: event.carry.kind === \"coin\", named: event.label !== undefined });\n cursor = a + MOTION.stagger;\n arrived = b;\n changes = 0;\n out.busy = Math.max(out.busy, b);\n } else if (event.type === \"action\") {\n out.events.push({ event: e, at: cursor });\n out.busy = Math.max(out.busy, cursor + MOTION.action);\n cursor += MOTION.action;\n changes = 0;\n } else {\n const at = (arrived ?? cursor) + MOTION.change * changes++;\n out.events.push({ event: e, at });\n out.busy = Math.max(out.busy, at);\n }\n });\n return out;\n}\n\nexport function buildTimeline(diagram: Diagram): Timeline {\n const plans = diagram.steps.map(plan);\n const steps: Span[] = [];\n let t = MOTION.intro;\n diagram.steps.forEach((step, s) => {\n const read = Math.min(MOTION.stepMax, Math.max(MOTION.stepMin, MOTION.stepBase + [...step.body].length * MOTION.perChar));\n const length = Math.max(read, (plans[s]?.busy ?? 0) + MOTION.dwell);\n steps.push({ start: t, end: t + length });\n t += length;\n });\n const end = t;\n const total = Math.ceil(end + MOTION.outro);\n const last = total - MOTION.tail;\n\n const edges: EdgeTime[] = [];\n const labels: LabelTime[] = [];\n const events: EventTime[] = [];\n const departures: { step: number; event: number; who: \"main\" | \"coin\"; a: number; b: number }[] = [];\n plans.forEach((p, s) => {\n const span = steps[s] as Span;\n const named: LabelTime[] = [];\n for (const edge of p.edges) {\n const a = span.start + edge.a;\n edges.push({ step: s, event: edge.event, start: a, drawn: span.start + edge.b, end: span.end });\n if (edge.carries) departures.push({ step: s, event: edge.event, who: edge.coin ? \"coin\" : \"main\", a, b: span.start + edge.b });\n if (edge.named) named.push({ step: s, event: edge.event, start: a + MOTION.labelDelay, end: span.end });\n }\n // 3 つ目の名前が出る時に 1 つ目を消す\n named.forEach((label, k) => {\n const later = named[k + 2];\n if (later) label.end = Math.min(label.end, later.start);\n });\n labels.push(...named);\n for (const event of p.events) events.push({ step: s, event: event.event, at: span.start + event.at });\n });\n\n const first = steps[0]?.start ?? 0;\n const hasMain = departures.some((d) => d.who === \"main\");\n const carriers: CarrierTime[] = [];\n for (const who of [\"main\", \"coin\"] as const) {\n const list = departures.filter((d) => d.who === who);\n list.forEach((d, k) => {\n const next = list[k + 1];\n // 主役の最初の運ぶ物は、最初の段の始まりから出発点で待つ (何も見えない時間を作らないため)\n const waits = k === 0 && (who === \"main\" || !hasMain);\n carriers.push({\n step: d.step,\n event: d.event,\n who,\n depart: d.a,\n arrive: d.b,\n start: waits ? Math.min(first, d.a) : d.a,\n end: next ? Math.max(next.a, d.b) : last,\n });\n });\n }\n carriers.sort((x, y) => x.depart - y.depart);\n\n return {\n total,\n last,\n steps,\n edges,\n carriers,\n labels,\n badges: steps.map((span, s) => ({ step: s, appears: span.start })),\n events,\n stills: steps.map((span) => span.end - MOTION.still),\n };\n}\n","/**\n * 箱と区画の印の形。どれも (0, 0) を中心に 20 四方へ収める。\n *\n * 見本帳 (`docs/design/base/engine.js` の `G`) と同じ形を持つ。`block` だけは見本帳が絵を手で描いていたので、ここで足した。\n */\nexport const ICONS: Readonly<Record<string, string>> = {\n app: \"M -9 -7 h18 a2 2 0 0 1 2 2 v10 a2 2 0 0 1 -2 2 h-18 a2 2 0 0 1 -2 -2 v-10 a2 2 0 0 1 2 -2 z M -11 -2 h22\",\n router: \"M -9 -4 h16 M 3 -8 l4 4 l-4 4 M 9 5 h-16 M -3 1 l-4 4 l4 4\",\n on: \"M -7 7 L 7 -7 M -1 -7 h8 v8\",\n off: \"M -7 -7 L 7 7 M 7 -1 v8 h-8\",\n pool: \"M -9 -5 a9 3.5 0 1 0 18 0 a9 3.5 0 1 0 -18 0 M -9 -5 v10 a9 3.5 0 0 0 18 0 v-10 M -9 0 a9 3.5 0 0 0 18 0\",\n db: \"M -9 -5 a9 3.5 0 1 0 18 0 a9 3.5 0 1 0 -18 0 M -9 -5 v10 a9 3.5 0 0 0 18 0 v-10 M -9 0 a9 3.5 0 0 0 18 0\",\n exe: \"M -5 -8 L 7 0 L -5 8 Z\",\n idx: \"M -9 -7 h18 M -9 -2 h18 M -9 3 h18 M -9 8 h11\",\n sign: \"M -9 4 c 3 -9 5 -9 6 0 s 3 7 6 -2 s 3 -6 6 0\",\n env: \"M -8 -5.5 h16 v11 h-16 z M -8 -5.5 l8 6 l8 -6\",\n lock: \"M -5.5 -1 h11 v8 h-11 z M -3.5 -1 v-3 a3.5 3.5 0 0 1 7 0 v3\",\n check: \"M -5 0 l3.5 3.5 l6.5 -7\",\n x: \"M -5 -5 l10 10 M 5 -5 l-10 10\",\n chain: \"M -1.5 4.5 l-2 2 a3.5 3.5 0 0 1 -5 -5 l3 -3 a3.5 3.5 0 0 1 5 0 M 1.5 -4.5 l2 -2 a3.5 3.5 0 0 1 5 5 l-3 3 a3.5 3.5 0 0 1 -5 0 M -2.5 2.5 l5 -5\",\n net: \"M -1.3 -4.6 L -5.8 3 M 1.3 -4.6 L 5.8 3 M -4.3 5.5 H 4.3 M -2.2 -7 a 2.2 2.2 0 1 0 4.4 0 a 2.2 2.2 0 1 0 -4.4 0 M -9.2 5.5 a 2.2 2.2 0 1 0 4.4 0 a 2.2 2.2 0 1 0 -4.4 0 M 4.8 5.5 a 2.2 2.2 0 1 0 4.4 0 a 2.2 2.2 0 1 0 -4.4 0\",\n user: \"M -4 -4.5 a4 4 0 1 0 8 0 a4 4 0 1 0 -8 0 M -8 9 c0 -5 3.6 -7.5 8 -7.5 s8 2.5 8 7.5\",\n server: \"M -9 -8 h18 v7 h-18 z M -9 1 h18 v7 h-18 z M -5 -4.5 h0.01 M -5 4.5 h0.01\",\n key: \"M -9 0 a3.5 3.5 0 1 0 7 0 a3.5 3.5 0 1 0 -7 0 M -2 0 h10 M 5 0 v3.5 M 8 0 v2.5\",\n shield: \"M 0 -9 l8 3 v5 c0 5 -3.5 8 -8 10 c-4.5 -2 -8 -5 -8 -10 v-5 z\",\n globe: \"M -9 0 a9 9 0 1 0 18 0 a9 9 0 1 0 -18 0 M -9 0 h18 M 0 -9 c-4.5 4 -4.5 14 0 18 M 0 -9 c4.5 4 4.5 14 0 18\",\n bolt: \"M 2 -9 L -5 1 h5 l-2 8 l7 -10 h-5 z\",\n doc: \"M -6 -9 h8 l5 5 v13 h-13 z M 2 -9 v5 h5 M -3 1 h7 M -3 5 h5\",\n box: \"M -9 -4.5 l9 -4.5 l9 4.5 v9 l-9 4.5 l-9 -4.5 z M -9 -4.5 l9 4.5 l9 -4.5 M 0 0 v9\",\n truck: \"M -10 -6 h11 v10 h-11 z M 1 -2 h5 l3.5 3.5 v2.5 h-8.5 M -7.5 6.5 a1.8 1.8 0 1 0 3.6 0 a1.8 1.8 0 1 0 -3.6 0 M 3 6.5 a1.8 1.8 0 1 0 3.6 0 a1.8 1.8 0 1 0 -3.6 0\",\n card: \"M -9 -6.5 h18 a2 2 0 0 1 2 2 v9 a2 2 0 0 1 -2 2 h-18 a2 2 0 0 1 -2 -2 v-9 a2 2 0 0 1 2 -2 z M -11 -2 h22 M -7 3 h5\",\n cart: \"M -10 -8 h3 l3 11 h11 l2.5 -8 h-15.5 M -4.5 7.5 a1.5 1.5 0 1 0 3 0 a1.5 1.5 0 1 0 -3 0 M 5 7.5 a1.5 1.5 0 1 0 3 0 a1.5 1.5 0 1 0 -3 0\",\n clock: \"M -9 0 a9 9 0 1 0 18 0 a9 9 0 1 0 -18 0 M 0 -5 v5 l3.5 2.5\",\n branch: \"M -4 -4.5 v9 M 5 0.5 c0 4 -9 3 -9 6.5 M -6.2 -7 a2.2 2.2 0 1 0 4.4 0 a2.2 2.2 0 1 0 -4.4 0 M -6.2 7 a2.2 2.2 0 1 0 4.4 0 a2.2 2.2 0 1 0 -4.4 0 M 2.8 -2 a2.2 2.2 0 1 0 4.4 0 a2.2 2.2 0 1 0 -4.4 0\",\n cloud: \"M -7 6 h13 a4.5 4.5 0 0 0 0.5 -9 a6 6 0 0 0 -11.5 -1 a4.5 4.5 0 0 0 -2 10 z\",\n refresh: \"M 7 -3 a7.5 7.5 0 1 0 0.5 5 M 7.5 -8 v5 h-5\",\n layers: \"M 0 -8 l9 4.5 l-9 4.5 l-9 -4.5 z M -9 2.5 l9 4.5 l9 -4.5\",\n code: \"M -4 -6 l-5 6 l5 6 M 4 -6 l5 6 l-5 6\",\n paint: \"M -8 8 c 0 -3 2 -5 4.5 -5 l 9 -9 l 3.5 3.5 l -9 9 c 0 2.5 -2 4.5 -5 4.5 z\",\n block: \"M -9 -7 h18 a2 2 0 0 1 2 2 v10 a2 2 0 0 1 -2 2 h-18 a2 2 0 0 1 -2 -2 v-10 a2 2 0 0 1 2 -2 z M -11 -2.5 h22 M -6 2.5 h8\",\n};\n","/**\n * 区画、箱、線、線の名前、運ぶ物、段の番号、中身の帯を SVG に描く部品。見本帳の `engine.js` の部品を写す。\n *\n * どの部品も、置き場所は場面 (`layout/scene.ts`) から、いつ見えるかは時刻の表 (`timeline.ts`) から読む。\n * 色は色の役の変数 (`--c` と `--ct`) だけを渡し、値は色味の表が持つ。\n */\nimport { hasWide, textWidth } from \"../layout/measure\";\nimport { along, type Point, pathLength, type SceneAction, type SceneBadge, type SceneBox, type SceneEdge, type SceneLabel, type SceneRegion, type SceneStrip } from \"../layout/scene\";\nimport { type ColorKey, EASE, LOOK, MOTION, TYPE } from \"../look/values\";\nimport type { CarrierTime, EdgeTime, LabelTime, Span, Timeline } from \"../timeline\";\nimport { ICONS } from \"./icons\";\nimport type { Frame, Motion } from \"./motion\";\n\nexport const esc = (s: string): string => s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\nconst r1 = (v: number): number => Math.round(v * 100) / 100;\n\n/** 色の役を部品へ渡す変数。 */\nexport const cs = (k: ColorKey): string => (k === \"coin\" ? \"--c:var(--coin);--ct:var(--coint)\" : `--c:var(--c-${k});--ct:var(--t-${k})`);\n\nexport function glyph(name: string | undefined, x: number, y: number, scale: number, cls = \"dg-gl\"): string {\n const d = name === undefined ? undefined : ICONS[name];\n return d ? `<path class=\"${cls}\" transform=\"translate(${r1(x)} ${r1(y)}) scale(${scale})\" d=\"${d}\"/>` : \"\";\n}\n\nexport const pathOf = (points: Point[]): string => points.map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"} ${r1(x)} ${r1(y)}`).join(\" \");\n\n/** 矢じり。線の最後の 2 点の向きに開く。 */\nexport function arrowHead(points: Point[]): string {\n const [ex, ey] = points[points.length - 1] as Point;\n const [px, py] = points[points.length - 2] as Point;\n const len = Math.hypot(ex - px, ey - py) || 1;\n const dx = (ex - px) / len;\n const dy = (ey - py) / len;\n const { arrow: a, arrowHalf: h } = LOOK.edge;\n return `M ${r1(ex - dx * a - dy * h)} ${r1(ey - dy * a + dx * h)} L ${r1(ex)} ${r1(ey)} L ${r1(ex - dx * a + dy * h)} ${r1(ey - dy * a - dx * h)}`;\n}\n\nexport interface Ctx {\n m: Motion;\n t: Timeline;\n /** 影の filter を付ける属性 */\n sh: string;\n /** 最後の段の終わり */\n end: number;\n}\n\n/** 時刻の範囲 `[[a, b], ...]` の間だけ出る。 */\nfunction rangeKf(m: Motion, ranges: [number, number][]): string {\n const pts: Frame[] = [[0, { opacity: 0 }]];\n for (const [a, b] of ranges) pts.push([a, { opacity: 0 }, EASE.out], [a + MOTION.fade, { opacity: 1 }], [b - 0.1, { opacity: 1 }, EASE.inOut], [b + 0.25, { opacity: 0 }]);\n pts.push([m.total, { opacity: 0 }]);\n return m.kf(pts);\n}\n\n/** 箱が動く段の並びを、続いた段は 1 つの範囲にまとめて出す。 */\nexport function activeKf(ctx: Ctx, on: number[]): string {\n const ranges: [number, number][] = [];\n for (let k = 0; k < on.length; ) {\n let e = k;\n while (e + 1 < on.length && on[e + 1] === (on[e] as number) + 1) e++;\n ranges.push([(ctx.t.steps[on[k] as number] as Span).start, (ctx.t.steps[on[e] as number] as Span).end]);\n k = e + 1;\n }\n return rangeKf(ctx.m, ranges);\n}\n\nexport function band(region: SceneRegion): string {\n const { radius, icon, iconRadius, iconScale, nameY, line } = LOOK.region;\n const { x, y } = region.header;\n const lines = region.lines.map((t, k) => `<text class=\"dg-bz\" x=\"${r1(x)}\" y=\"${r1(region.y + nameY + k * line)}\">${esc(t)}</text>`).join(\"\");\n const note = region.note ? `<text class=\"dg-bx\" x=\"${r1(x)}\" y=\"${r1(region.y + nameY + region.lines.length * line + 1)}\">${esc(region.note)}</text>` : \"\";\n const mark = region.icon && ICONS[region.icon] ? `<rect class=\"dg-bi\" x=\"${r1(x)}\" y=\"${r1(y)}\" width=\"${icon}\" height=\"${icon}\" rx=\"${iconRadius}\"/>${glyph(region.icon, x + icon / 2, y + icon / 2, iconScale)}` : \"\";\n return `<g style=\"${cs(region.color)}\"><rect class=\"dg-band\" x=\"${r1(region.x + 0.5)}\" y=\"${r1(region.y + 0.5)}\" width=\"${r1(region.w - 1)}\" height=\"${r1(region.h - 1)}\" rx=\"${radius}\"/>${mark}${lines}${note}</g>`;\n}\n\n/** 箱の下の小さな字の移り変わり。`[時刻, 字, class]` の並びで、最初は元の字。 */\nexport type SubChange = [number, string, string];\n\n/** 箱の下の小さな字。基準線を `y` に置き、起きたことに合わせて書き換わる。 */\nfunction subLines(box: SceneBox, m: Motion, changes: SubChange[], y: number): string {\n const seq: SubChange[] = [[0, box.sub ?? \"\", \"dg-ss\"], ...changes];\n return seq\n .map(([t, text, cls], k) => {\n const next = seq[k + 1]?.[0];\n const anim = k === 0 ? (next === undefined ? \"\" : m.until(next - MOTION.untilFade)) : next === undefined ? m.rise(t) : m.rise(t, next - MOTION.untilFade);\n if (text === \"\") return \"\";\n return `<g${anim ? ` class=\"dg-a\" style=\"${anim}\"` : \"\"}><text class=\"${cls}\" x=\"${r1(box.cx)}\" y=\"${r1(y)}\" text-anchor=\"middle\">${esc(text)}</text></g>`;\n })\n .join(\"\");\n}\n\n/** 箱の地と縁。上端 `y` から高さ `h`。動く段 (`act` の間) は縁に色を付け、外側に淡い光を足す。 */\nfunction cardFrame(box: SceneBox, ctx: Ctx, act: string | undefined, y: number, h: number): string {\n const rect = (cls: string, extra = \"\"): string => `<rect class=\"${cls}\" x=\"${r1(box.x)}\" y=\"${r1(y)}\" width=\"${r1(box.w)}\" height=\"${h}\" rx=\"${LOOK.box.radius}\"${extra}/>`;\n return `${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-halo\")}</g>` : \"\"}${rect(\"dg-st\", ` ${ctx.sh}`)}${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-on\")}</g>` : \"\"}`;\n}\n\n/** 箱。動く段は縁に色を付け、外側に淡い光を足す。下の小さな字は起きたことに合わせて書き換わる。 */\nexport function card(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { icon, iconRadius, iconScale, iconY, nameY, subY } = LOOK.box;\n const subs = subLines(box, ctx.m, changes, box.cy + subY);\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n const mark =\n box.icon && ICONS[box.icon]\n ? `<rect class=\"dg-ic\" x=\"${r1(box.cx - icon / 2)}\" y=\"${r1(box.cy + iconY - icon / 2)}\" width=\"${icon}\" height=\"${icon}\" rx=\"${iconRadius}\"/>${glyph(box.icon, box.cx, box.cy + iconY, iconScale)}`\n : \"\";\n return (\n `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, box.y, box.h)}` +\n `${mark}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(box.cy + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`\n );\n}\n\n/**\n * 寄って追う時系列図の窓の上端に貼る頭の箱 (#3120)。図の頭の箱と同じ横の位置と縁で、アイコンを外して名前と下の字の 2 段にする。\n * 携帯の幅では窓が低く、図の頭の箱のままでは窓の高さの 3 割を頭の列が取るため。\n */\nexport function headCard(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { pad, h, nameY, subY } = LOOK.follow.head;\n const subs = subLines(box, ctx.m, changes, pad + subY);\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n return `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, pad, h)}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(pad + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`;\n}\n\nexport function lifeline(x: number, y1: number, y2: number): string {\n return `<line class=\"dg-ll\" x1=\"${r1(x)}\" y1=\"${r1(y1)}\" x2=\"${r1(x)}\" y2=\"${r1(y2)}\"/>`;\n}\n\n/**\n * 線。点線で道を見せておき、その段で色の線を引いて、段の終わりまで流れる点で向きを見せる。\n * 済んだ段は薄く残し、最後の段の後に通った道を全て濃くし直す。\n */\nexport function edge(e: SceneEdge, time: EdgeTime, ctx: Ctx): { base: string; lit: string } {\n const { m } = ctx;\n const d = pathOf(e.points);\n const head = arrowHead(e.points);\n const { start: a, drawn: b, end } = time;\n const tail: Frame[] = [\n [end, { opacity: 1 }, EASE.inOut],\n [end + 0.4, { opacity: 0.45 }],\n [ctx.end + 0.3, { opacity: 0.45 }, EASE.inOut],\n [ctx.end + 1, { opacity: 0.95 }],\n [m.last, { opacity: 0.95 }, EASE.inOut],\n [m.total, { opacity: 0 }],\n ];\n const line = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 1 }],\n [a, { opacity: 0, \"stroke-dashoffset\": 1 }, EASE.inOut],\n [a + 0.05, { opacity: 1 }],\n [b, { \"stroke-dashoffset\": 0 }],\n [m.last, { \"stroke-dashoffset\": 0 }],\n [m.total, { \"stroke-dashoffset\": 1 }],\n ...tail,\n ]);\n const hk = m.kf([[0, { opacity: 0 }], [b - 0.05, { opacity: 0 }], [b, { opacity: 1 }], ...tail]);\n const run = -(end - b) * 26;\n const flow = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b + 0.25, { opacity: 0.9 }],\n [end - 0.1, { opacity: 0.9 }, EASE.inOut],\n [end + 0.2, { opacity: 0, \"stroke-dashoffset\": run }],\n [m.total, { opacity: 0, \"stroke-dashoffset\": run }],\n ]);\n return {\n base: `<path class=\"dg-e\" d=\"${d}\"/><path class=\"dg-eh\" d=\"${head}\"/>`,\n lit: `<g style=\"${cs(e.color)}\"><path class=\"dg-e-on dg-a\" pathLength=\"1\" d=\"${d}\" style=\"${line}\"/><path class=\"dg-eh-on dg-a\" d=\"${head}\" style=\"${hk}\"/><path class=\"dg-flow dg-a\" d=\"${d}\" style=\"${flow}\"/></g>`,\n };\n}\n\n/** 線の名前の札。その段の間だけ出し、段の終わりまでに消え終わる。 */\nexport function label(l: SceneLabel, time: LabelTime, ctx: Ctx): string {\n const ja = l.family === \"sans\" ? \" dg-capj\" : \"\";\n const { radius } = LOOK.label;\n return `<g class=\"dg-cap${ja} dg-a\" style=\"${cs(l.color)};${ctx.m.rise(time.start, time.end, true)}\"><rect x=\"${r1(l.x)}\" y=\"${r1(l.y)}\" width=\"${r1(l.w)}\" height=\"${l.h}\" rx=\"${radius}\"/><text x=\"${r1(l.x + l.w / 2)}\" y=\"${r1(l.y + l.h / 2 + LOOK.baseline.label)}\" text-anchor=\"middle\">${esc(l.text)}</text></g>`;\n}\n\n/** 時系列図の箱の中の処理の札。その段の間だけ生存線の上に出す。 */\nexport function action(a: SceneAction, at: number, until: number, ctx: Ctx): string {\n return `<g class=\"dg-act dg-a\" style=\"${cs(a.color)};${ctx.m.rise(at, until, true)}\"><rect x=\"${r1(a.x)}\" y=\"${r1(a.y)}\" width=\"${r1(a.w)}\" height=\"${a.h}\" rx=\"${LOOK.action.radius}\"/><text x=\"${r1(a.x + a.w / 2)}\" y=\"${r1(a.y + a.h / 2 + LOOK.baseline.action)}\" text-anchor=\"middle\">${esc(a.text)}</text></g>`;\n}\n\nfunction carrierShape(e: SceneEdge, sh: string): string {\n const C = LOOK.carrier;\n if (e.carry.kind === \"coin\") return `<circle class=\"dg-coin\" r=\"${C.coinR}\"/><circle class=\"dg-coin-in\" r=\"${C.coinIn}\"/>`;\n if (e.carry.kind === \"tag\") {\n const text = e.carry.text;\n const ja = hasWide(text);\n const w = textWidth(text, ja ? TYPE.carrierJa : TYPE.carrier) + C.tagPadX * 2;\n return `<rect class=\"dg-car\" x=\"${r1(-w / 2)}\" y=\"${-C.tagH / 2}\" width=\"${r1(w)}\" height=\"${C.tagH}\" rx=\"${C.tagH / 2}\" ${sh}/><text class=\"dg-car-t${ja ? \" dg-car-tj\" : \"\"}\" y=\"${LOOK.baseline.carrier}\" text-anchor=\"middle\">${esc(text)}</text>`;\n }\n return `<rect class=\"dg-env\" x=\"${-C.envW / 2}\" y=\"${-C.envH / 2}\" width=\"${C.envW}\" height=\"${C.envH}\" rx=\"3\" ${sh}/><path class=\"dg-env-in\" d=\"M -8 -4.5 L 0 1.5 L 8 -4.5\"/>`;\n}\n\nconst easeInOut = (t: number): number => (t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2);\n\n/** 運ぶ物。線の上を走り、着いた先 (`settle`) へ寄って、次の同じ主役が出発するまで留まる。 */\nexport function carrier(e: SceneEdge, time: CarrierTime, ctx: Ctx): string {\n const { m } = ctx;\n const n = LOOK.carrier.samples;\n const length = pathLength(e.points);\n const { depart: a, arrive: b, start: from, end: gone } = time;\n const path: [number, number, number][] = [];\n for (let k = 0; k <= n; k++) {\n const [x, y] = along(e.points, easeInOut(k / n) * length);\n path.push([a + ((b - a) * k) / n, x, y]);\n }\n const first = path[0] as [number, number, number];\n const lastPoint = path[path.length - 1] as [number, number, number];\n const rest: Point = e.settle ?? [lastPoint[1], lastPoint[2]];\n const pts: [number, number, number][] = [[0, first[1], first[2]], ...path];\n if (e.settle) pts.push([Math.min(b + 0.3, Math.max(gone, b + 0.01)), rest[0], rest[1]]);\n pts.push([gone, rest[0], rest[1]], [m.total, rest[0], rest[1]]);\n // 次の運ぶ物と入れ替わる時は、重なって 2 つに見えないよう素早く消す\n const fade = gone < m.last ? 0.05 : 0.18;\n return `<g class=\"dg-a\" style=\"${m.move(pts, m.blink(from + 0.02, gone, fade))}\">${carrierShape(e, ctx.sh)}</g>`;\n}\n\n/** 段の番号。まだ来ていない段は出さず、今の段は塗り、済んだ段は縁取りに変えて番号を読めるまま残す。 */\nexport function badge(b: SceneBadge, ctx: Ctx): string {\n const { m } = ctx;\n const span = ctx.t.steps[b.step] as Span;\n const a = span.start;\n const e = span.end;\n const { r, ring: rr } = LOOK.badge;\n const fill = m.kf([\n [0, { opacity: 0, transform: \"scale(.5)\" }],\n [a, { opacity: 0, transform: \"scale(.5)\" }, EASE.pop],\n [a + 0.35, { opacity: 1, transform: \"scale(1)\" }],\n [e, { opacity: 1, transform: \"scale(1)\" }, EASE.inOut],\n [e + 0.4, { opacity: 0, transform: \"scale(1)\" }],\n [m.total, { opacity: 0, transform: \"scale(.5)\" }],\n ]);\n const past = m.kf([[0, { opacity: 0 }], [e, { opacity: 0 }, EASE.inOut], [e + 0.4, { opacity: 1 }], [m.last, { opacity: 1 }, EASE.inOut], [m.total, { opacity: 0 }]]);\n const ring = m.kf([\n [0, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.05, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.1, { opacity: 0.7, transform: \"scale(1)\" }, EASE.out],\n [a + 0.9, { opacity: 0, transform: \"scale(2.3)\" }],\n [m.total, { opacity: 0, transform: \"scale(1)\" }],\n ]);\n const x = r1(b.x);\n const y = r1(b.y);\n const ty = r1(b.y + LOOK.baseline.badge);\n const no = b.step + 1;\n return (\n `<g class=\"dg-bd\" data-step=\"${b.step}\" style=\"${cs(b.color)}\"><circle class=\"dg-bdr dg-popc dg-a\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\" style=\"${ring}\"/>` +\n `<g class=\"dg-a\" style=\"${past}\"><circle class=\"dg-bdp\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\"/><text class=\"dg-bdpt\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g>` +\n `<g class=\"dg-popc dg-a\" style=\"${fill}\"><circle class=\"dg-bdf\" cx=\"${x}\" cy=\"${y}\" r=\"${r}\"/><text class=\"dg-bdft\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g></g>`\n );\n}\n\n/** 中身の帯の 1 欄の移り変わり。値と札は、次の値か札が来るまで出る。 */\nexport interface FieldChange {\n at: number;\n value?: string;\n tag?: string;\n color: ColorKey;\n}\n\nexport function strip(s: SceneStrip, changes: Map<string, FieldChange[]>, ctx: Ctx): string {\n const { m, sh } = ctx;\n const S = LOOK.strip;\n const my = s.y + S.h / 2;\n const parts = [\n `<rect class=\"dg-strip\" x=\"${r1(s.x + 0.5)}\" y=\"${r1(s.y + 0.5)}\" width=\"${r1(s.w - 1)}\" height=\"${r1(s.h - 1)}\" rx=\"${LOOK.region.radius}\" ${sh}/>`,\n `<g style=\"${cs(\"slate\")}\"><rect class=\"dg-bi\" x=\"${r1(s.x + S.pad)}\" y=\"${r1(my - S.icon / 2)}\" width=\"${S.icon}\" height=\"${S.icon}\" rx=\"${LOOK.box.iconRadius}\"/>${glyph(\"env\", s.x + S.pad + S.icon / 2, my, 0.78)}</g>`,\n `<text class=\"dg-sh\" x=\"${r1(s.x + S.titleX)}\" y=\"${r1(my + LOOK.baseline.stripTitle)}\">${esc(s.title)}</text>`,\n ];\n s.fields.forEach((field, i) => {\n const prev = s.fields[i - 1];\n if (prev && prev.y === field.y) {\n const sx = field.x - S.fieldGap / 2;\n parts.push(`<line class=\"dg-sep\" x1=\"${r1(sx)}\" y1=\"${r1(field.y + S.sepInset)}\" x2=\"${r1(sx)}\" y2=\"${r1(field.y + S.h - S.sepInset)}\"/>`);\n }\n parts.push(`<text class=\"dg-fl\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.nameY)}\">${esc(field.name)}</text>`);\n const list = changes.get(field.name) ?? [];\n const values = list.filter((c) => c.value !== undefined);\n const tags = list.filter((c) => c.tag !== undefined);\n values.forEach((c, k) => {\n const next = values[k + 1]?.at;\n const value = c.value as string;\n const anim = next === undefined ? m.rise(c.at) : m.rise(c.at, next - MOTION.untilFade);\n parts.push(`<g class=\"dg-a\" style=\"${anim}\"><text class=\"${hasWide(value) ? \"dg-fvj\" : \"dg-fv\"}\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.valueY)}\">${esc(value)}</text></g>`);\n });\n tags.forEach((c, k) => {\n const next = tags[k + 1]?.at;\n const tag = c.tag as string;\n // 札は、その時に出ている値の右に置く\n const shown = [...values].reverse().find((v) => v.at <= c.at + 1e-9)?.value;\n const x = field.x + (shown ? textWidth(shown, hasWide(shown) ? TYPE.fieldValueJa : TYPE.fieldValue) + S.tagGap : 0);\n const w = textWidth(tag, TYPE.tag) + S.tagPadX * 2;\n const y = field.y + S.valueY - S.tagH / 2 - LOOK.baseline.tag;\n parts.push(\n `<g class=\"dg-tg dg-popc dg-a\" style=\"${cs(c.color)};${next === undefined ? m.pop(c.at) : m.pop(c.at, next - MOTION.untilFade)}\"><rect x=\"${r1(x)}\" y=\"${r1(y)}\" width=\"${r1(w)}\" height=\"${S.tagH}\" rx=\"${S.tagH / 2}\"/><text x=\"${r1(x + w / 2)}\" y=\"${r1(y + S.tagH / 2 + LOOK.baseline.tag)}\" text-anchor=\"middle\">${esc(tag)}</text></g>`,\n );\n });\n });\n return parts.join(\"\");\n}\n","/**\n * 時刻の点の並びから CSS の keyframes を組む道具。見本帳の `engine.js` の `kf` / `vis` / `rise` / `pop` / `move` を写す。\n *\n * 動きは全て 1 周 `total` 秒の keyframes で、点の時刻は 1 周の中の割合 (%) に直す。\n * 性質ごとに独立して補間されるので、点ごとに変える性質だけを書く。\n */\nimport { EASE, LOOK, MOTION } from \"../look/values\";\n\nexport type Props = Record<string, string | number>;\nexport type Frame = [time: number, props: Props, ease?: string];\n\nconst r2 = (v: number): number => Math.round(v * 100) / 100;\n\nexport class Motion {\n readonly frames: string[] = [];\n private count = 0;\n\n constructor(\n private readonly prefix: string,\n readonly total: number,\n readonly last: number,\n ) {}\n\n private pct(t: number): number {\n return +((Math.min(Math.max(t, 0), this.total) / this.total) * 100).toFixed(3);\n }\n\n /** keyframes を 1 つ足し、その名前を付ける style の字を返す。 */\n kf(points: Frame[]): string {\n const name = `${this.prefix}-${this.count++}`;\n const at = new Map<number, { props: Props; ease?: string }>();\n for (const [t, props, ease] of [...points].sort((a, b) => a[0] - b[0])) {\n const p = this.pct(t);\n const cur = at.get(p) ?? { props: {} };\n Object.assign(cur.props, props);\n if (ease) cur.ease = ease;\n at.set(p, cur);\n }\n const body = [...at]\n .map(([p, { props, ease }]) => {\n const d = Object.entries(props).map(([k, v]) => `${k}:${v}`);\n if (ease) d.push(`animation-timing-function:${ease}`);\n return `${p}%{${d.join(\";\")}}`;\n })\n .join(\"\");\n this.frames.push(`@keyframes ${name}{${body}}`);\n return `animation-name:${name}`;\n }\n\n /** `a` で出て `b` から消える。`within` を立てると `b` までに消え終わる。 */\n vis(a: number, b = this.last, o: { f?: number; on?: Props; off?: Props; ein?: string; within?: boolean } = {}): string {\n const f = o.f ?? MOTION.fade;\n const on = o.on ?? {};\n const off = o.off ?? {};\n const out = o.within ? Math.max(a + f, b - f) : b;\n return this.kf([\n [0, { opacity: 0, ...off }],\n [a, { opacity: 0, ...off }, o.ein ?? EASE.out],\n [a + f, { opacity: 1, ...on }],\n [out, { opacity: 1, ...on }, EASE.inOut],\n [Math.min(out + f, this.total), { opacity: 0, ...off }],\n [this.total, { opacity: 0, ...off }],\n ]);\n }\n\n /** 少し下から浮いて出る。 */\n rise(a: number, b = this.last, within = false): string {\n return this.vis(a, b, { on: { transform: \"translateY(0)\" }, off: { transform: `translateY(${LOOK.rise}px)` }, within });\n }\n\n /** 小さな所から弾んで出る。 */\n pop(a: number, b = this.last): string {\n return this.vis(a, b, { f: MOTION.popFade, ein: EASE.pop, on: { transform: \"scale(1)\" }, off: { transform: `scale(${LOOK.popFrom})` } });\n }\n\n /** 初めから出ていて `b` で消える。 */\n until(b: number): string {\n const f = MOTION.untilFade;\n return this.kf([\n [0, { opacity: 1 }],\n [b, { opacity: 1 }, EASE.inOut],\n [b + f, { opacity: 0 }],\n [this.last, { opacity: 0 }],\n [this.total, { opacity: 1 }],\n ]);\n }\n\n /** 点を辿って動く。`[時刻, x, y, 大きさ, 次の点までの緩急]` の並び。 */\n move(points: [number, number, number, number?, string?][], extra: Frame[] = []): string {\n return this.kf(\n points.map(([t, x, y, s = 1, ease]): Frame => [t, { transform: `translate(${r2(x)}px,${r2(y)}px) scale(${s})` }, ease]).concat(extra),\n );\n }\n\n /** `a` から `b` まで見え、`fade` 秒で消える。 */\n blink(a: number, b: number, fade: number): Frame[] {\n return [\n [0, { opacity: 0 }],\n [a - 0.01, { opacity: 0 }],\n [a, { opacity: 1 }],\n [b, { opacity: 1 }],\n [b + fade, { opacity: 0 }],\n [this.total, { opacity: 0 }],\n ];\n }\n}\n","/**\n * 原本の JSON から図を描く入口。置き場所と時刻の表を作り、部品を重なりの順に並べて SVG にする。\n *\n * 動きは全て SVG の中の CSS の keyframes が回す。1 周の長さは `--T`、止める時刻は `--at`、\n * 止めるか流すかは `--play` の変数で外から変えられる (頁に置く `player.ts` がこれを使う)。\n * 色と字は値の表から CSS の変数として 1 度だけ書き、部品はその変数だけを読む。\n */\nimport { FIGURE_TEXT } from \"../figure-text\";\nimport { layoutArchitecture } from \"../layout/architecture\";\nimport { textWidth } from \"../layout/measure\";\nimport type { Layout, Rect } from \"../layout/scene\";\nimport { layoutSequence } from \"../layout/sequence\";\nimport { FONTS } from \"../look/fonts\";\nimport { type ColorKey, EASE, FONT_VARS, LOOK, MOTION, type Palette, paletteVars, resolvePalette, type TextStyle, type Theme, TYPE } from \"../look/values\";\nimport { readDiagram } from \"../version\";\nimport type { Diagram, ViewMode } from \"../schema\";\nimport { buildTimeline, type Span, type Timeline } from \"../timeline\";\nimport type { NotationLang } from \"../words\";\nimport { action, badge, band, card, carrier, type Ctx, cs, edge, esc, type FieldChange, headCard, label, lifeline, strip, type SubChange } from \"./parts\";\nimport { Motion } from \"./motion\";\n\nexport interface RenderOptions {\n /** 色味の名前。書かないか知らない名前なら紙と墨 */\n palette?: string;\n theme?: Theme;\n /** 描く部品が出す字 (断りの文、全体図の札、読み上げの名前) の言葉。書かなければ日本語 (#3001) */\n lang?: NotationLang;\n}\n\nexport interface Rendered {\n svg: string;\n palette: string;\n theme: Theme;\n /** 書き手が原本で決めた見せ方 */\n view?: ViewMode;\n fonts: { sans: string; mono: string };\n layout: Layout;\n timeline: Timeline;\n diagram: Diagram;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst mix = (pct: number, base = \"var(--surf)\"): string => `color-mix(in srgb,var(--c) ${pct}%,${base})`;\nconst S = LOOK.stroke;\nconst X = LOOK.mix;\n\n/** 部品の見た目。どの値も値の表から読む。 */\nconst PART_CSS = [\n \".dg{display:block;width:100%;height:auto;overflow:visible}\",\n \".dg .dg-a{animation-duration:var(--T);animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both;animation-delay:calc(var(--at,0) * -1s);animation-play-state:var(--play,running)}\",\n \".dg .dg-popc{transform-box:fill-box;transform-origin:center}\",\n \".dg-bg{fill:var(--bg)}\",\n \".dg-band{fill:color-mix(in srgb,var(--c) var(--tint),var(--bg));stroke:color-mix(in srgb,var(--c) var(--edge),transparent)}\",\n `.dg-bi{fill:${mix(X.regionIcon)};stroke:${mix(X.regionIconEdge, \"transparent\")}}`,\n `.dg-bz{${font(TYPE.regionName)};fill:var(--ct)}`,\n `.dg-bx{${font(TYPE.regionNote)};fill:var(--mute)}`,\n \".dg-st{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-halo{fill:none;stroke:var(--c);stroke-width:${S.halo};stroke-opacity:.16}`,\n `.dg-on{fill:none;stroke:var(--c);stroke-width:${S.on}}`,\n `.dg-ic{fill:${mix(X.icon)}}`,\n `.dg-gl{fill:none;stroke:var(--c);stroke-width:${S.glyph};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-sn{${font(TYPE.boxName)};fill:var(--ink)}`,\n `.dg-ss{${font(TYPE.boxSub)};fill:var(--mute)}`,\n `.dg-ss-ok{${font(TYPE.boxSubStrong)};fill:var(--ct)}`,\n `.dg-ss-act{${font(TYPE.boxSubStrong)};fill:var(--ink)}`,\n `.dg-ll{stroke:var(--line);stroke-width:${S.lifeline};stroke-dasharray:3 4}`,\n `.dg-e{fill:none;stroke:var(--line);stroke-width:${S.edge};stroke-linecap:round;stroke-dasharray:0 ${LOOK.edge.ghostDash}}`,\n `.dg-eh{fill:none;stroke:var(--line);stroke-width:${S.arrow};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-e-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-dasharray:1 2}`,\n `.dg-eh-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-flow{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linecap:round;stroke-dasharray:1.5 ${LOOK.edge.flowDash}}`,\n \".dg-bd{cursor:pointer}\",\n \".dg-bdf{fill:var(--c)}\",\n `.dg-bdft{${font(TYPE.badge)};fill:var(--on-c)}`,\n `.dg-bdr{fill:none;stroke:var(--c);stroke-width:${S.badgeRing}}`,\n `.dg-bdp{fill:${mix(X.badgePast)};stroke:${mix(X.badgePastEdge, \"transparent\")};stroke-width:${S.hair}}`,\n `.dg-bdpt{${font(TYPE.badge)};fill:var(--ct)}`,\n `.dg-cap rect,.dg-act rect{fill:${mix(X.cap)};stroke:${mix(X.capEdge, \"transparent\")}}`,\n `.dg-cap text{${font(TYPE.label)};fill:var(--ct)}`,\n `.dg-capj text{${font(TYPE.labelJa)}}`,\n `.dg-act text{${font(TYPE.action)};fill:var(--ct)}`,\n \".dg-car{fill:var(--carry,var(--ink))}\",\n `.dg-car-t{${font(TYPE.carrier)};fill:var(--bg)}`,\n `.dg-car-tj{${font(TYPE.carrierJa)}}`,\n `.dg-env{fill:var(--carry,var(--ink));stroke:var(--surf);stroke-width:${S.envelope}}`,\n `.dg-env-in{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linejoin:round;stroke-linecap:round}`,\n \".dg-coin{fill:var(--coin);stroke:var(--surf);stroke-width:1.2}\",\n \".dg-coin-in{fill:none;stroke:var(--coinin);stroke-width:1.1}\",\n \".dg-strip{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-sep{stroke:var(--hair);stroke-width:${S.hair}}`,\n `.dg-sh{${font(TYPE.stripTitle)};fill:var(--ink)}`,\n `.dg-fl{${font(TYPE.fieldName)};fill:var(--mute)}`,\n `.dg-fv{${font(TYPE.fieldValue)};fill:var(--ink)}`,\n `.dg-fvj{${font(TYPE.fieldValueJa)};fill:var(--ink)}`,\n \".dg-tg rect{fill:var(--c)}\",\n `.dg-tg text{${font(TYPE.tag)};fill:var(--on-c)}`,\n \".dg-vp-bg{fill:var(--bg)}\",\n \".dg-vp-frame{fill:none;stroke:var(--hair)}\",\n \".dg-hd-bg{fill:var(--bg)}\",\n \".dg-mm-bg{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-mm-t{${font(TYPE.miniTitle)};fill:var(--mute)}`,\n \".dg-mm-world{fill:var(--sunk);stroke:var(--hair)}\",\n `.dg-mm-band{fill:${mix(X.miniBand)};stroke:${mix(X.miniBandEdge, \"transparent\")};stroke-width:.6}`,\n `.dg-mm-card{fill:${mix(X.mini)}}`,\n `.dg-mm-vp{fill:color-mix(in srgb,var(--ink) ${X.view}%,transparent);stroke:var(--ink);stroke-width:${S.badgeRing};vector-effect:non-scaling-stroke}`,\n].join(\"\");\n\n/** 同じ原本と同じ見た目からは同じ名前になるよう、中身から短い名前を作る (keyframes の名前が頁の中で混ざらないため)。 */\nfunction nameOf(text: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0).toString(36);\n}\n\n/** 各箱が動く段。線の両端、処理、字の書き換えの箱。 */\nfunction involved(diagram: Diagram): Map<string, number[]> {\n const on = new Map<string, Set<number>>();\n const add = (id: string, s: number): void => {\n on.set(id, (on.get(id) ?? new Set()).add(s));\n };\n diagram.steps.forEach((step, s) => {\n for (const event of step.events) {\n if (event.type === \"edge\") {\n add(event.from, s);\n add(event.to, s);\n } else if (event.type === \"action\" || event.type === \"swap\") add(event.box, s);\n }\n });\n return new Map([...on].map(([id, steps]) => [id, [...steps].sort((a, b) => a - b)]));\n}\n\n/** 箱の下の字の移り変わり。書き換えはそのまま残し、構成図の処理はその段の間だけ出して元へ戻す。 */\nfunction subChanges(diagram: Diagram, timeline: Timeline, actionsInBox: boolean): Map<string, SubChange[]> {\n type Raw = { t: number; order: number; box: string; set?: string; act?: string | null };\n const raw: Raw[] = [];\n let order = 0;\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type === \"swap\") raw.push({ t: time.at, order: order++, box: event.box, set: event.text });\n if (actionsInBox && event?.type === \"action\") {\n raw.push({ t: time.at, order: order++, box: event.box, act: event.label });\n raw.push({ t: (timeline.steps[time.step] as Span).end, order: order++, box: event.box, act: null });\n }\n }\n raw.sort((a, b) => a.t - b.t || a.order - b.order);\n const out = new Map<string, SubChange[]>();\n for (const box of diagram.boxes) {\n let base: [string, string] = [box.sub ?? \"\", \"dg-ss\"];\n let acting: string | undefined;\n let shown = base.join(\"|\");\n const list: SubChange[] = [];\n for (const change of raw.filter((r) => r.box === box.id)) {\n // 書き換えは、出ている処理の字も置き換える\n if (change.set !== undefined) {\n base = [change.set, \"dg-ss-ok\"];\n acting = undefined;\n }\n if (change.act !== undefined) acting = change.act ?? undefined;\n const now: [string, string] = acting !== undefined ? [acting, \"dg-ss-act\"] : base;\n if (now.join(\"|\") === shown) continue;\n shown = now.join(\"|\");\n list.push([change.t, now[0], now[1]]);\n }\n // すぐ次の字に替わる字は読めないので出さない\n const kept = list.filter((change, k) => {\n const next = list[k + 1];\n return next === undefined || next[0] - change[0] >= MOTION.minShow;\n });\n out.set(box.id, kept);\n }\n return out;\n}\n\nfunction fieldChanges(diagram: Diagram, timeline: Timeline, layout: Layout): Map<string, FieldChange[]> {\n const out = new Map<string, FieldChange[]>();\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type !== \"strip\") continue;\n const color: ColorKey = layout.badges[time.step]?.color ?? \"slate\";\n const list = out.get(event.field) ?? [];\n list.push({ at: time.at, color, ...(event.value !== undefined ? { value: event.value } : {}), ...(event.tag !== undefined ? { tag: event.tag } : {}) });\n out.set(event.field, list);\n }\n return out;\n}\n\nexport interface FollowFrame {\n /** 枠の幅 (px)。寄って追う窓はこの幅で、字を原寸で見せる */\n width: number;\n /** 枠の中で見える高さ (px)。渡すと、窓と全体図をこの高さに収め (#3047)、窓をこの高さまで伸ばす (#3053)。枠の高さが図で伸びる置き場では渡さない */\n height?: number;\n /** 隅の全体図の札の言葉。渡し忘れを型の検査で止めるため、省けない欄にする */\n lang: NotationLang;\n}\n\n/** 図を描く。`follow` を渡すと、寄って追う窓と隅の全体図で描く。 */\nexport function drawSvg(diagram: Diagram, layout: Layout, timeline: Timeline, palette: Palette, theme: Theme, follow?: FollowFrame): string {\n // 札の言葉で全体図の地の幅が変わりうるので、同じ頁に置いた別の言葉の図と名前を分ける\n const id = nameOf(`${JSON.stringify(diagram)}|${palette.id}|${theme}|${follow ? `${follow.width}|${follow.lang}` : \"\"}`);\n const m = new Motion(`dg${id}`, timeline.total, timeline.last);\n const ctx: Ctx = { m, t: timeline, sh: `filter=\"url(#dg-sh-${id})\"`, end: (timeline.steps[timeline.steps.length - 1] as Span).end };\n const on = involved(diagram);\n const subs = subChanges(diagram, timeline, layout.kind === \"architecture\");\n\n const L = { band: [] as string[], base: [] as string[], lit: [] as string[], node: [] as string[], badge: [] as string[], top: [] as string[] };\n for (const region of layout.regions) L.band.push(band(region));\n if (layout.strip) L.band.push(strip(layout.strip, fieldChanges(diagram, timeline, layout), ctx));\n for (const line of layout.lifelines) L.base.push(lifeline(line.x, line.y1, line.y2));\n for (const e of layout.edges) {\n const time = timeline.edges.find((t) => t.step === e.step && t.event === e.event);\n if (!time) continue;\n const drawn = edge(e, time, ctx);\n L.base.push(drawn.base);\n L.lit.push(drawn.lit);\n }\n for (const box of layout.boxes) L.node.push(card(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? []));\n for (const b of layout.badges) L.badge.push(badge(b, ctx));\n for (const l of layout.labels) {\n const time = timeline.labels.find((t) => t.step === l.step && t.event === l.event);\n if (time) L.top.push(label(l, time, ctx));\n }\n for (const a of layout.actions) {\n const time = timeline.events.find((t) => t.step === a.step && t.event === a.event);\n if (time) L.top.push(action(a, time.at, (timeline.steps[a.step] as Span).end, ctx));\n }\n for (const time of timeline.carriers) {\n const e = layout.edges.find((x) => x.step === time.step && x.event === time.event);\n if (e) L.top.push(carrier(e, time, ctx));\n }\n const content = Object.values(L)\n .map((parts) => parts.join(\"\"))\n .join(\"\");\n\n const { near, far, nearY, farY } = LOOK.shadow;\n const shadow = `<filter id=\"dg-sh-${id}\" x=\"-20%\" y=\"-30%\" width=\"140%\" height=\"180%\"><feDropShadow dx=\"0\" dy=\"${nearY}\" stdDeviation=\"${near}\" style=\"flood-color:var(--sh);flood-opacity:var(--shA)\"/><feDropShadow dx=\"0\" dy=\"${farY}\" stdDeviation=\"${far}\" style=\"flood-color:var(--sh);flood-opacity:var(--shB)\"/></filter>`;\n // 寄って追う時系列図は、頭の箱を窓の上端に貼る頭の列にも描く (#3118)。頭の列の箱はアイコンを外した 2 段 (#3120)。止めて見せる図では描かない\n const heads = follow && layout.kind === \"sequence\" ? layout.boxes.map((box) => headCard(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? [])).join(\"\") : \"\";\n const view = follow ? followView(layout, timeline, diagram, m, id, content, follow, heads) : { body: `<rect class=\"dg-bg\" width=\"${layout.width}\" height=\"${layout.height}\" rx=\"${LOOK.region.radius}\"/>${content}`, w: layout.width, h: layout.height };\n const css = `.dg-${id}{${FONT_VARS};--T:${timeline.total}s;${paletteVars(palette, theme)}}${PART_CSS}${m.frames.join(\"\")}`;\n return (\n `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"dg dg-${id}\" viewBox=\"0 0 ${Math.ceil(view.w)} ${Math.ceil(view.h)}\" width=\"${Math.ceil(view.w)}\" height=\"${Math.ceil(view.h)}\" role=\"img\" aria-label=\"${esc(diagram.title)}\" data-dragon=\"figure\" data-view=\"${follow ? \"follow\" : \"fixed\"}\">` +\n `<style>${css}</style><defs>${shadow}</defs>${view.body}</svg>`\n );\n}\n\n/** 四角を全部囲む四角。 */\nfunction union(rects: Rect[]): Rect {\n const x = Math.min(...rects.map((r) => r.x));\n const y = Math.min(...rects.map((r) => r.y));\n return { x, y, w: Math.max(...rects.map((r) => r.x + r.w)) - x, h: Math.max(...rects.map((r) => r.y + r.h)) - y };\n}\n\n/** 段で動く物が占める所。 */\nfunction focusOf(layout: Layout, diagram: Diagram, step: number): Rect | undefined {\n const rects = focusParts(layout, diagram, step);\n return rects.length === 0 ? undefined : union(rects);\n}\n\n/**\n * 番号の丸が窓から外れる段で、窓に入れる所 (#3046)。\n * 丸とその周りを起点に、丸に近い動く物から順に、窓 (`vw` × `vh`) に収まる間だけ囲む。収まらない物は飛ばして次を見る\n */\nfunction badgeFocus(badge: { x: number; y: number }, parts: Rect[], vw: number, vh: number): Rect {\n const room = LOOK.badge.r + LOOK.follow.badgeRoom;\n const { x: bx, y: by } = badge;\n const away = (p: Rect): number => Math.hypot(Math.max(0, p.x - bx, bx - p.x - p.w), Math.max(0, p.y - by, by - p.y - p.h));\n let held: Rect = { x: bx - room, y: by - room, w: room * 2, h: room * 2 };\n for (const p of [...parts].sort((a, b) => away(a) - away(b))) {\n const next = union([held, p]);\n if (next.w <= vw && next.h <= vh) held = next;\n }\n return held;\n}\n\n/** 段で動く物を 1 つずつ。 */\nfunction focusParts(layout: Layout, diagram: Diagram, step: number): Rect[] {\n const rects: Rect[] = [];\n for (const e of layout.edges.filter((x) => x.step === step)) {\n const xs = e.points.map((p) => p[0]);\n const ys = e.points.map((p) => p[1]);\n rects.push({ x: Math.min(...xs), y: Math.min(...ys), w: Math.max(...xs) - Math.min(...xs), h: Math.max(...ys) - Math.min(...ys) });\n }\n rects.push(...layout.labels.filter((l) => l.step === step), ...layout.actions.filter((a) => a.step === step));\n for (const event of diagram.steps[step]?.events ?? []) {\n const ids = event.type === \"edge\" ? [event.from, event.to] : event.type === \"action\" || event.type === \"swap\" ? [event.box] : [];\n for (const id of ids) {\n const box = layout.boxes.find((b) => b.id === id);\n // 時系列図の頭の箱は遠いので、線の行だけを見る\n if (box && (layout.kind === \"architecture\" || event.type === \"swap\")) rects.push(box);\n }\n }\n return rects;\n}\n\n/**\n * 寄って追う窓。段ごとに動く所へ寄り、窓の外の全体図に今見ている所の枠を同じ動きで出す。\n * 全体図は窓に重ねると今動く線や箱を覆うので、窓の外に置く (#3042)。\n * 縦長の全体図は窓の右に列を取り、横長の全体図は窓の下に置く。失う窓の幅か図の高さの小さい側を選ぶ。\n * 枠の中で見える高さを渡された時は、窓と全体図がその高さに入るまで窓を低くする (#3047)。\n * 枠が余る時は窓を広げ、図の原寸の幅と、見える高さか図の高さまで使う。全体図は今の大きさのまま置く (#3053)。\n * 枠の幅が `LOOK.follow.narrow` より狭い時は、縦長の全体図を出さずに窓へ枠の幅の全部を渡す (#3055)。\n * 段で動く物を全部囲んだ所の真ん中に寄せると今の段の番号の丸が窓から外れる段では、丸に近い動く物から窓に収まるだけ囲んだ所へ寄せる (#3046)。\n * 時系列図は頭の箱 `heads` を窓の上端の頭の列に貼り、窓が横に動く時だけ一緒に動かす。頭の箱は図の上端に在り、線を追う窓からは外れるため。\n * 窓は頭の列の下の残りの高さで動く物を真ん中に見せる (#3118)。\n * 頭の列の箱はアイコンを外した 2 段にして低く貼り、線は図の頭の箱の下から見せ始める (#3120)。\n */\nfunction followView(layout: Layout, timeline: Timeline, diagram: Diagram, m: Motion, id: string, content: string, follow: FollowFrame, heads: string): { body: string; w: number; h: number } {\n const F = LOOK.follow;\n const M = LOOK.mini;\n const frameWidth = Math.max(1, follow.width);\n const full = Math.min(layout.width, frameWidth);\n const title = FIGURE_TEXT[follow.lang].overview;\n /** 窓の高さ `vh` の時の全体図の寸法。全体図は窓の高さで縮むので、窓を低くしたら測り直す */\n const sized = (vh: number) => {\n // 全体図の寸法は枠の幅と窓の高さで決め、置き場所に依らない\n const mw = Math.min(M.w, full * 0.4, ((vh * 0.4) / layout.height) * layout.width);\n const k = mw / layout.width;\n const mh = layout.height * k;\n // 地の幅は図の縦横の比で決まるので、縦に長い図では札より狭くなる。その時は地を札の幅まで広げ、図は広げた地の真ん中に置く\n const bw = Math.max(mw, Math.ceil(textWidth(title, TYPE.miniTitle)));\n // 縦横の比は窓の高さに依らないので、低くしても全体図の置き場所は変わらない\n return { vh, mw, k, mh, bw, bgW: bw + M.pad * 2, bgH: mh + M.pad * 2 + M.title, beside: mh > mw };\n };\n const natural = sized(Math.min(layout.height, Math.max(F.minH, full * F.aspect)));\n // 携帯の幅では縦長の全体図の列が枠の幅の 3 割を取り、窓が図の横の 3 割ほどしか見せない。その時は全体図を出さない。\n // 横長の全体図は窓の下に出して幅を取らないので、狭い枠でも出す\n const bare = natural.beside && frameWidth < F.narrow;\n // 窓の右の全体図は窓の高さの中に収まり、窓の下の全体図は窓の高さに足される\n const room = follow.height === undefined ? Number.POSITIVE_INFINITY : natural.beside ? follow.height : follow.height - natural.bgH - M.inset;\n // 見える高さが窓より低ければ窓と全体図を縮め、高ければ全体図はそのままに窓を図の高さまで伸ばす。\n // 全体図も伸ばすと、狭い枠では右の全体図の列が太って窓が狭くなる\n const { vh, mw, k, mh, bw, bgW, bgH, beside } =\n room < natural.vh ? sized(Math.max(F.fitMinH, room)) : { ...natural, vh: Number.isFinite(room) ? Math.min(layout.height, room) : natural.vh };\n // 右の全体図の列は枠の余りに置き、窓は図の原寸の幅まで広げる。枠が図より狭い時は今までどおり枠の幅から列を引く\n const vw = beside && !bare ? Math.min(layout.width, frameWidth - bgW - M.inset) : full;\n const clampX = (x: number): number => Math.min(layout.width - vw / 2, Math.max(vw / 2, x));\n // 時系列図は窓の上端に頭の列を貼るので、動く物は頭の列の下の残りの高さ `below` に見せる (#3118)。\n // 線は図の頭の箱の下 `top` から見せ始め、図の頭の箱は頭の列の下か窓の上に隠す (#3120)\n const top = heads === \"\" ? 0 : Math.max(...layout.boxes.map((b) => b.y + b.h)) + F.headRoom;\n const strip = heads === \"\" ? 0 : F.head.pad * 2 + F.head.h;\n const below = vh - strip;\n /** 頭の列の下の残りの窓の真ん中の高さを、図の頭の箱の下と図の下端で止める */\n const clampY = (y: number): number => Math.min(layout.height - below / 2, Math.max(top + below / 2, y));\n const r = LOOK.badge.r;\n let prev: [number, number] = [layout.width / 2, layout.height / 2];\n // 頭の列の下の残りの窓の真ん中。窓の真ん中は、これより頭の列の高さの半分だけ上に在る\n const middles = timeline.steps.map((_, s) => {\n const f = focusOf(layout, diagram, s);\n prev = f ? [f.x + f.w / 2, f.y + f.h / 2] : prev;\n const at: [number, number] = [clampX(prev[0]), clampY(prev[1])];\n // 動く物を全部囲んだ所が窓より大きいと、その端に在る番号の丸が窓から外れる。その段だけ丸の近くへ寄せ直す (#3046)\n const b = layout.badges.find((x) => x.step === s);\n if (!b || (Math.abs(b.x - at[0]) <= vw / 2 - r && Math.abs(b.y - at[1]) <= below / 2 - r)) return at;\n const near = badgeFocus(b, focusParts(layout, diagram, s), vw, below);\n // 動く物の無い次の段は、寄せ直した窓のまま止める\n prev = [near.x + near.w / 2, near.y + near.h / 2];\n return [clampX(prev[0]), clampY(prev[1])] as [number, number];\n });\n const centers = middles.map(([x, y]): [number, number] => [x, y - strip / 2]);\n const c0 = centers[0] as [number, number];\n const cam: [number, number, number, number?, string?][] = [\n [0, c0[0], c0[1]],\n [(timeline.steps[0] as Span).start, c0[0], c0[1]],\n ];\n centers.forEach((c, s) => {\n if (s === 0) return;\n const before = centers[s - 1] as [number, number];\n const start = (timeline.steps[s] as Span).start;\n cam.push([start, before[0], before[1], 1, EASE.inOut], [start + F.ease, c[0], c[1]]);\n });\n const cl = centers[centers.length - 1] as [number, number];\n cam.push([timeline.last, cl[0], cl[1], 1, EASE.inOut], [timeline.total, c0[0], c0[1]]);\n const camKf = m.move(cam.map(([t, cx, cy, s, e]) => [t, vw / 2 - cx, vh / 2 - cy, s, e]));\n\n // 右に出す時は窓の上端に揃え、下に出す時は窓の右端から内へ寄せる\n const bgX = beside ? vw + M.inset : vw - bgW - M.inset;\n const bgY = beside ? 0 : vh + M.inset;\n const bx = bgX + M.pad;\n const mx = bx + (bw - mw) / 2;\n const my = bgY + M.pad + M.title;\n /**\n * 全体図の地と札と、今見ている所の枠。窓と同じ動きで枠を動かす。\n * 時系列図の枠は頭の列の下の線を見せる所だけを囲む。頭の箱は頭の列に常に出ているため (#3122)\n */\n const overview = (): { clip: string; body: string } => {\n const shapes = [\n ...layout.regions.map((r) => `<rect class=\"dg-mm-band\" style=\"${cs(r.color)}\" x=\"${mx + r.x * k}\" y=\"${my + r.y * k}\" width=\"${r.w * k}\" height=\"${r.h * k}\" rx=\"3\"/>`),\n ...layout.boxes.map((b) => `<rect class=\"dg-mm-card\" style=\"${cs(b.color)}\" x=\"${mx + b.x * k}\" y=\"${my + b.y * k}\" width=\"${b.w * k}\" height=\"${b.h * k}\" rx=\"1.5\"/>`),\n ].join(\"\");\n const vp = m.move(cam.map(([t, cx, cy, , e]) => [t, mx + (cx - vw / 2) * k, my + (cy - vh / 2) * k, 1, e]));\n return {\n clip: `<clipPath id=\"dg-mm-${id}\"><rect x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\" rx=\"4\"/></clipPath>`,\n body:\n `<rect class=\"dg-mm-bg\" x=\"${bgX}\" y=\"${bgY}\" width=\"${bgW}\" height=\"${bgH}\" rx=\"${M.radius}\"/>` +\n `<text class=\"dg-mm-t\" x=\"${bx}\" y=\"${my - M.pad + 2}\">${title}</text>` +\n `<g clip-path=\"url(#dg-mm-${id})\"><rect class=\"dg-mm-world\" x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\"/>${shapes}<rect class=\"dg-mm-vp dg-a\"${strip === 0 ? \"\" : ` y=\"${strip * k}\"`} width=\"${vw * k}\" height=\"${(vh - strip) * k}\" rx=\"2\" style=\"${vp}\"/></g>`,\n };\n };\n const mini = bare ? { clip: \"\", body: \"\" } : overview();\n // 頭の列は窓の中身の上に重ね、窓と同じ時刻と緩急で横にだけ動かす (#3118)\n const head =\n strip === 0\n ? \"\"\n : `<g class=\"dg-hd\"><rect class=\"dg-hd-bg\" width=\"${vw}\" height=\"${strip}\"/><line class=\"dg-sep\" x1=\"0\" y1=\"${strip}\" x2=\"${vw}\" y2=\"${strip}\"/>` +\n `<g class=\"dg-a\" style=\"${m.move(cam.map(([t, cx, , s, e]) => [t, vw / 2 - cx, 0, s, e]))}\">${heads}</g></g>`;\n const body =\n `<defs><clipPath id=\"dg-vp-${id}\"><rect width=\"${vw}\" height=\"${vh}\" rx=\"${LOOK.region.radius}\"/></clipPath>${mini.clip}</defs>` +\n `<g clip-path=\"url(#dg-vp-${id})\"><rect class=\"dg-vp-bg\" width=\"${vw}\" height=\"${vh}\"/><g class=\"dg-a\" style=\"${camKf}\">${content}</g>${head}</g>` +\n `<rect class=\"dg-vp-frame\" x=\"0.5\" y=\"0.5\" width=\"${vw - 1}\" height=\"${vh - 1}\" rx=\"${LOOK.region.radius}\"/>${mini.body}`;\n return { body, w: beside && !bare ? vw + M.inset + bgW : full, h: beside ? vh : bgY + bgH };\n}\n\n/** 原本の JSON から図を描く。原本が形に合わない時は、誤りの場所を添えて断る。 */\nexport function renderDiagram(input: unknown, options: RenderOptions = {}): Rendered {\n const lang = options.lang ?? \"ja\";\n const read = readDiagram(input, { lang });\n if (!read.ok) throw new Error(FIGURE_TEXT[lang].cannotDraw(read.errors.map((e) => `${e.pointer} ${e.message}`).join(\" / \")));\n const diagram = read.diagram;\n const palette = resolvePalette(options.palette);\n const theme: Theme = options.theme === \"dark\" ? \"dark\" : \"light\";\n const layout = diagram.kind === \"sequence\" ? layoutSequence(diagram) : layoutArchitecture(diagram);\n const timeline = buildTimeline(diagram);\n return {\n svg: drawSvg(diagram, layout, timeline, palette, theme),\n palette: palette.id,\n theme,\n ...(diagram.view ? { view: diagram.view } : {}),\n fonts: { ...FONTS },\n layout,\n timeline,\n diagram,\n };\n}\n","/**\n * 見せ方を字の大きさで選ぶ。\n *\n * 全体を枠の幅へ収めた時の箱の名前の字が 10.5px 以上なら、全体を止めて中だけ動かす (`fixed`)。\n * 下回るなら、動く所へ寄って追い、隅の全体図で今どこかを示す (`follow`)。\n * 枠の高さを渡すと、全体を枠の幅と高さの両方へ収めた時の字で選ぶ (#3047)。高さの決まった置き場で、縦に長い図を縮めすぎないため。\n * 書き手が原本の `view` で決めた時は、字の大きさに関わらずそれに従う。\n */\nimport { READABLE_PX, TYPE } from \"./look/values\";\nimport type { Rendered } from \"./render/svg\";\nimport type { ViewMode } from \"./schema\";\n\nexport function chooseView(rendered: Pick<Rendered, \"layout\" | \"view\">, frameWidth: number, frameHeight?: number): { mode: ViewMode; textPx: number } {\n const byWidth = Math.max(0, frameWidth) / rendered.layout.width;\n const scale = frameHeight === undefined ? byWidth : Math.min(byWidth, Math.max(0, frameHeight) / rendered.layout.height);\n const textPx = scale * TYPE.boxName.size;\n if (rendered.view) return { mode: rendered.view, textPx };\n return { mode: textPx >= READABLE_PX ? \"fixed\" : \"follow\", textPx };\n}\n","/**\n * 頁に図を置いて動かす。\n *\n * 動きを嫌う設定 (`prefers-reduced-motion: reduce`) は描く前に読み、その人には一瞬も自動再生せず、\n * 段ごとの止め絵を釦で送る。各段の題と本文は、読み上げの道具が段の順に読める番号付きの一覧として置き、\n * 図そのものは読み上げから隠して同じ中身を 2 度読ませない。\n * 見せ方は枠の幅で選び (`view.ts`)、寄って追う時は窓と全体図で描き直す。\n * 釦と段の一覧の読み上げの名前と全体図の札は、渡した言葉 (`options.lang`、書かなければ日本語) で出す (#3001)。\n * 段が替わるたびに `options.onStep` で今の段を知らせ、頁の側が段の札や進み具合を出せるようにする (#3031)。\n * 段の本文の帯は本文の最も長い段の高さに保ち、段を送っても図の大きさと位置を変えない (#3049)。\n * 帯の中身の幅が `LOOK.player.narrow` より狭い時は、段を送る釦を指で押せる大きさにして段の番号と上の段に並べ、\n * 題と本文をその下の段の全幅に置く (#3057、#3069)。\n */\nimport { FIGURE_TEXT } from \"./figure-text\";\nimport { FONT_VARS, LOOK, paletteVars, resolvePalette, type TextStyle, TYPE } from \"./look/values\";\nimport { drawSvg, type RenderOptions, renderDiagram } from \"./render/svg\";\nimport type { Span } from \"./timeline\";\nimport { chooseView } from \"./view\";\n\nexport interface PlayerOptions extends RenderOptions {\n /** 段が替わるたびに今の段 (0 から) を受け取る。置いた時にも最初の段で 1 度呼ぶ。頁の側で段の札や進み具合を出す時に使う (#3031) */\n onStep?: (step: number) => void;\n /**\n * 図を、図の枠の中で見える高さに収める (#3047)。高さに収めると字が読めない図は寄って追う図にし、寄って追う窓と全体図をその高さに収める。\n * 枠の高さが決まっている置き場 (カタログの拡大の重ね窓) で使う。枠の高さが図に合わせて伸びる置き場で使うと、描くたびに低くなる\n */\n fitHeight?: boolean;\n}\n\nexport interface Player {\n /** 今の段 (0 から) */\n readonly step: number;\n /** 動いているか */\n readonly playing: boolean;\n next(): void;\n prev(): void;\n play(): void;\n pause(): void;\n destroy(): void;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst px = (v: number): string => `${v}px`;\n\nfunction playerCss(): string {\n const P = LOOK.player;\n const hidden = px(P.hidden);\n return [\n `.dg-player{display:flex;flex-direction:column;gap:${px(P.gap)};color:var(--ink)}`,\n `.dg-player .dg-frame{border-radius:${px(P.radius)};overflow:hidden}`,\n // 並べ方は帯の中身の幅で選ぶ。帯の中の 1 段 (`.dg-row`) が並べ替わり、帯の左右の余白は置いた頁が帯に付ける\n `.dg-bar{container:dg-bar/inline-size}`,\n `.dg-row{display:flex;align-items:flex-start;gap:${px(P.gap)}}`,\n `.dg-btns{display:flex;gap:${px(P.gap / 2)};flex:none}`,\n `.dg-btn{width:${px(P.button)};height:${px(P.button)};border-radius:${px(P.radius)};border:${px(LOOK.stroke.hair)} solid var(--hair);background:var(--surf);color:var(--ink);${font(TYPE.button)};cursor:pointer}`,\n `.dg-btn:focus-visible{outline:${px(P.focus)} solid var(--c-blue);outline-offset:${px(P.focus)}}`,\n `.dg-say{display:flex;gap:${px(P.gap)};min-width:0}`,\n `.dg-no{${font(TYPE.stepNo)};color:var(--mute);padding-top:${px(P.focus)}}`,\n `.dg-txt{display:grid;grid-template-columns:minmax(0,1fr);min-width:0}`,\n `.dg-txt>*{grid-area:1/1}`,\n `.dg-room{visibility:hidden}`,\n `.dg-tt{${font(TYPE.stepTitle)};margin:0}`,\n `.dg-tb{${font(TYPE.stepBody)};color:var(--ink2);margin:0;white-space:pre-line}`,\n `.dg-sr{position:absolute;width:${hidden};height:${hidden};margin:-${hidden};padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}`,\n // 狭い帯 (携帯の幅) では、段を送る釦を指で押せる大きさにし、その横に番号を置き、\n // 題を 2 段目、本文を 3 段目に置いてどちらも帯の全幅を使う (#3057、#3069)。\n // 釦を大きくすると横に題を置く幅が足りず題が細かく折れるため、題は釦の段に置かない。\n // 題と本文を包む箱を外して写しも同じ升に重ねるので、2 段目は最も高い題、3 段目は最も長い本文の高さになる。\n // 題と本文の間は広い帯と同じく空けず、釦の段の下にだけ間を取って、帯が高くなる分を抑える\n `@container dg-bar (width < ${px(P.narrow)}){` +\n `.dg-row{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:0 ${px(P.gap)}}` +\n `.dg-say,.dg-txt,.dg-txt>*{display:contents}` +\n `.dg-btns{grid-area:1/1;margin-bottom:${px(P.gap / 2)}}` +\n `.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}` +\n `.dg-no{grid-area:1/2;display:flex;align-items:center;min-height:${px(P.touch)};padding-top:0}` +\n `.dg-tt{grid-area:2/1/3/3}` +\n `.dg-tb{grid-area:3/1/4/3}` +\n `}`,\n // 指で触る時は、広い帯でも段を送る釦を指で押せる大きさにする (#3076)。並びは横 1 列のまま変えない。\n // 広い帯は本文が 2 行あれば帯の高さが変わらず、本文の無い帯だけが釦の分だけ高くなる\n `@media (pointer: coarse){.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}}`,\n ].join(\"\");\n}\n\nfunction ensureCss(doc: Document): void {\n if (doc.getElementById(\"dragon-player-css\")) return;\n const style = doc.createElement(\"style\");\n style.id = \"dragon-player-css\";\n style.textContent = playerCss();\n doc.head.appendChild(style);\n}\n\n/** 釦に出す字。HTML に書き出す時は、この字も字の file に残す。 */\nexport const BUTTON_TEXT = { prev: \"‹\", pause: \"❚❚\", play: \"▶\", next: \"›\" } as const;\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n/** 段の番号の札 (`01/12`)。`step` は 0 から数える。 */\nexport const stepNo = (step: number, count: number): string => `${pad(step + 1)}/${pad(count)}`;\n\nexport function mountDiagram(host: HTMLElement, diagram: unknown, options: PlayerOptions = {}): Player {\n const doc = host.ownerDocument;\n const win = doc.defaultView;\n // 描く前に読む。描いた後に読むと、動きを嫌う人にも一瞬だけ流れてしまう\n const reduce = Boolean(win?.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches);\n const rendered = renderDiagram(diagram, options);\n const lang = options.lang ?? \"ja\";\n const words = FIGURE_TEXT[lang];\n const palette = resolvePalette(rendered.palette);\n const { timeline } = rendered;\n const steps = rendered.diagram.steps;\n const count = steps.length;\n\n ensureCss(doc);\n const root = doc.createElement(\"div\");\n root.className = \"dg-player\";\n root.dataset.dragon = \"player\";\n root.setAttribute(\"style\", `${FONT_VARS};${paletteVars(palette, rendered.theme)}`);\n\n const frame = doc.createElement(\"div\");\n frame.className = \"dg-frame\";\n const button = (name: string, label: string, text: string): HTMLButtonElement => {\n const b = doc.createElement(\"button\");\n b.type = \"button\";\n b.className = \"dg-btn\";\n b.dataset.dragon = name;\n b.setAttribute(\"aria-label\", label);\n b.textContent = text;\n return b;\n };\n const prevButton = button(\"prev\", words.prev, BUTTON_TEXT.prev);\n const toggleButton = button(\"toggle\", words.pause, BUTTON_TEXT.pause);\n const nextButton = button(\"next\", words.next, BUTTON_TEXT.next);\n const buttons = doc.createElement(\"div\");\n buttons.className = \"dg-btns\";\n // 置いた頁の言葉と違っても、釦の名前を名前の言葉の声で読ませる\n buttons.setAttribute(\"lang\", lang);\n buttons.append(prevButton, toggleButton, nextButton);\n\n // 見える語り。読み上げには下の一覧を読ませるので、こちらは読み上げから隠す\n const say = doc.createElement(\"div\");\n say.className = \"dg-say\";\n say.setAttribute(\"aria-hidden\", \"true\");\n const no = doc.createElement(\"div\");\n no.className = \"dg-no\";\n no.dataset.dragon = \"step-no\";\n const text = doc.createElement(\"div\");\n text.className = \"dg-txt\";\n const title = doc.createElement(\"p\");\n title.className = \"dg-tt\";\n title.dataset.dragon = \"step-title\";\n const body = doc.createElement(\"p\");\n body.className = \"dg-tb\";\n body.dataset.dragon = \"step-body\";\n const live = doc.createElement(\"div\");\n live.append(title, body);\n text.append(live);\n // 全部の段の題と本文の写しを今の段と同じ升に重ね、見た目からは隠して場所だけを取る。\n // 帯の高さが本文の最も長い段で決まり、段を送っても図の枠が伸び縮みしない (#3049)\n for (const step of steps) {\n const room = doc.createElement(\"div\");\n room.className = \"dg-room\";\n room.dataset.dragon = \"caption-room\";\n const roomTitle = doc.createElement(\"p\");\n roomTitle.className = \"dg-tt\";\n roomTitle.textContent = step.title;\n const roomBody = doc.createElement(\"p\");\n roomBody.className = \"dg-tb\";\n roomBody.textContent = step.body;\n room.append(roomTitle, roomBody);\n text.append(room);\n }\n say.append(no, text);\n // 狭い帯では語りの箱を外して番号と題と本文を釦と同じ升の並びに置く (#3057)。\n // 箱を外した要素の読み上げからの隠し方に頼らず、見える語りの 1 つずつも読み上げから隠す\n for (const shown of [no, title, body]) shown.setAttribute(\"aria-hidden\", \"true\");\n const row = doc.createElement(\"div\");\n row.className = \"dg-row\";\n row.append(buttons, say);\n const bar = doc.createElement(\"div\");\n bar.className = \"dg-bar\";\n bar.append(row);\n\n // 読み上げの道具が段の順に読む一覧。見た目からは外すが、読み上げからは隠さない\n const list = doc.createElement(\"ol\");\n list.className = \"dg-sr\";\n list.dataset.dragon = \"steps\";\n list.setAttribute(\"aria-label\", words.steps(rendered.diagram.title));\n for (const step of steps) {\n const item = doc.createElement(\"li\");\n const head = doc.createElement(\"strong\");\n head.textContent = step.title;\n item.append(head);\n for (const line of step.body.split(\"\\n\")) {\n const p = doc.createElement(\"p\");\n p.textContent = line;\n item.append(p);\n }\n list.append(item);\n }\n\n root.append(frame, bar, list);\n host.append(root);\n\n const frameWidth = (): number => frame.clientWidth || host.clientWidth || rendered.layout.width;\n /** 高さに収めると頼まれた時だけ、図の枠の中で見える高さ (上下の余白を除く)。測れない時は `undefined` で、幅だけで決める */\n const frameHeight = (): number | undefined => {\n if (!options.fitHeight || !win) return undefined;\n const style = win.getComputedStyle(frame);\n const inner = frame.clientHeight - (Number.parseFloat(style.paddingTop) || 0) - (Number.parseFloat(style.paddingBottom) || 0);\n return inner > 0 ? inner : undefined;\n };\n let mode = chooseView(rendered, frameWidth(), frameHeight()).mode;\n let width = frameWidth();\n let height = frameHeight();\n let svg: SVGSVGElement | null = null;\n let step = 0;\n let playing = !reduce;\n let at = reduce ? (timeline.stills[0] ?? 0) : 0;\n let born = Date.now();\n\n /** 動きの変数を付けた図を置き直す。置き直すと動きの時計が最初から数え直される */\n const place = (markup?: string): void => {\n let next: SVGSVGElement | null;\n if (markup !== undefined) {\n const holder = doc.createElement(\"div\");\n holder.innerHTML = markup;\n next = holder.querySelector(\"svg\");\n } else {\n next = svg ? (svg.cloneNode(true) as SVGSVGElement) : null;\n }\n if (!next) return;\n next.setAttribute(\"aria-hidden\", \"true\");\n next.removeAttribute(\"role\");\n next.removeAttribute(\"aria-label\");\n next.style.setProperty(\"--at\", String(at));\n next.style.setProperty(\"--play\", playing ? \"running\" : \"paused\");\n next.dataset.motion = playing ? \"play\" : \"still\";\n if (svg) svg.replaceWith(next);\n else frame.append(next);\n svg = next;\n born = Date.now();\n };\n const markup = (): string => (mode === \"follow\" ? drawSvg(rendered.diagram, rendered.layout, timeline, palette, rendered.theme, { width, ...(height === undefined ? {} : { height }), lang }) : rendered.svg);\n\n const now = (): number => (playing ? (at + (Date.now() - born) / 1000) % timeline.total : at);\n const stepAt = (t: number): number => {\n let found = 0;\n timeline.steps.forEach((span: Span, i) => {\n if (span.start <= t) found = i;\n });\n return found;\n };\n const show = (): void => {\n const current = steps[step];\n no.textContent = stepNo(step, count);\n title.textContent = current?.title ?? \"\";\n body.textContent = current?.body ?? \"\";\n toggleButton.setAttribute(\"aria-label\", playing ? words.pause : words.play);\n toggleButton.textContent = playing ? BUTTON_TEXT.pause : BUTTON_TEXT.play;\n options.onStep?.(step);\n };\n const restart = (t: number, play: boolean): void => {\n at = t;\n playing = play;\n place();\n show();\n };\n const go = (target: number): void => {\n step = Math.min(count - 1, Math.max(0, target));\n const span = timeline.steps[step] as Span;\n restart(playing ? span.start : (timeline.stills[step] ?? span.start), playing);\n };\n\n place(markup());\n show();\n\n const timer = win?.setInterval(() => {\n if (!playing) return;\n const s = stepAt(now());\n if (s !== step) {\n step = s;\n show();\n }\n }, 120);\n const onPrev = (): void => go(step - 1);\n const onNext = (): void => go(step + 1);\n const onToggle = (): void => (playing ? restart(now(), false) : restart(at, true));\n // 段の番号を押すとその段へ移る\n const onFigure = (event: Event): void => {\n const target = (event.target as Element | null)?.closest?.(\"[data-step]\");\n const s = target ? Number(target.getAttribute(\"data-step\")) : Number.NaN;\n if (Number.isInteger(s)) go(s);\n };\n prevButton.addEventListener(\"click\", onPrev);\n nextButton.addEventListener(\"click\", onNext);\n toggleButton.addEventListener(\"click\", onToggle);\n frame.addEventListener(\"click\", onFigure);\n\n // 枠の大きさが変わったら見せ方を選び直す。寄って追う窓は幅 (高さに収める時は高さも) で決まるので、変われば描き直す\n const Observer = (win as (Window & { ResizeObserver?: typeof ResizeObserver }) | null)?.ResizeObserver;\n const observer = Observer\n ? new Observer(() => {\n const w = frameWidth();\n const h = frameHeight();\n const chosen = chooseView(rendered, w, h).mode;\n if (chosen === mode && (mode === \"fixed\" || (w === width && h === height))) return;\n const t = now();\n mode = chosen;\n width = w;\n height = h;\n at = t;\n place(markup());\n })\n : undefined;\n observer?.observe(frame);\n\n return {\n get step() {\n return step;\n },\n get playing() {\n return playing;\n },\n next: onNext,\n prev: onPrev,\n play: () => {\n if (!playing) restart(at, true);\n },\n pause: () => {\n if (playing) restart(now(), false);\n },\n destroy: () => {\n if (timer !== undefined) win?.clearInterval(timer);\n observer?.disconnect();\n prevButton.removeEventListener(\"click\", onPrev);\n nextButton.removeEventListener(\"click\", onNext);\n toggleButton.removeEventListener(\"click\", onToggle);\n frame.removeEventListener(\"click\", onFigure);\n root.remove();\n },\n };\n}\n","/**\n * 画面なしの Chromium で、頁と同じ描画を時刻を止めて 1 コマずつ撮る。\n *\n * 時刻は頁の止め絵と同じく、図の `--play` を `paused` にし、`--at` に秒を入れて止める。\n * 撮ったコマは同じ頁の中で詰める。mp4 は WebCodecs で H.264 にして `mediabunny` で箱に入れ、\n * GIF は `gifenc` で詰める。GIF は前のコマと同じ所を透明にし、変わった所だけを書いて小さくする。\n * WebCodecs は安全な頁でしか使えないので、頁は `http://localhost/` に置く。\n */\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport type { Browser, Page } from \"playwright-core\";\nimport type { NotationLang } from \"../words\";\n\nconst require_ = createRequire(import.meta.url);\n/** 頁に読ませる詰める道具。どちらも 1 file の ES module */\nconst SCRIPTS: Record<string, string> = {\n \"/mediabunny.js\": join(dirname(require_.resolve(\"mediabunny\")), \"mediabunny.min.mjs\"),\n \"/gifenc.js\": require_.resolve(\"gifenc/dist/gifenc.esm.js\"),\n};\n\n/** CSS の 1px を何画素で撮るか */\nconst SCALE = 2;\n\nconst INSTALL_ADD = \"`pnpm add -D playwright-core`\";\nconst INSTALL_CHROMIUM = \"`pnpm exec playwright-core install chromium`\";\n\n/** 書き出す道具が無い時の断りの文。言葉ごとに持つ (#3003) */\nconst LAUNCH_TEXT: Record<NotationLang, { missing: string; cannotLaunch: string; install: string }> = {\n ja: {\n missing: \"書き出しには playwright-core が要る。\",\n cannotLaunch: \"Chromium を起動できない。\",\n install: `${INSTALL_ADD} で入れ、${INSTALL_CHROMIUM} で Chromium を入れる`,\n },\n en: {\n missing: \"Exporting needs playwright-core. \",\n cannotLaunch: \"Cannot launch Chromium. \",\n install: `Install playwright-core with ${INSTALL_ADD} and Chromium with ${INSTALL_CHROMIUM}`,\n },\n};\n\n/** 画面なしの Chromium を起こす。起こせない時は、渡した言葉で入れ方を添えて断る */\nexport async function launch(lang: NotationLang): Promise<Browser> {\n const text = LAUNCH_TEXT[lang];\n let chromium: (typeof import(\"playwright-core\"))[\"chromium\"];\n try {\n ({ chromium } = await import(\"playwright-core\"));\n } catch {\n throw new Error(`${text.missing}${text.install}`);\n }\n try {\n return await chromium.launch();\n } catch (error) {\n throw new Error(`${text.cannotLaunch}${text.install} (${String(error).split(\"\\n\")[0]})`);\n }\n}\n\n/** 図の SVG の大きさ (CSS の px) */\nexport function sizeOf(svg: string): { width: number; height: number } {\n const [, width = \"0\", height = \"0\"] = /^<svg\\b[^>]*?\\swidth=\"(\\d+)\"\\s+height=\"(\\d+)\"/.exec(svg) ?? [];\n return { width: Number(width), height: Number(height) };\n}\n\nexport interface Stage {\n page: Page;\n width: number;\n height: number;\n}\n\n/**\n * 図 1 枚を置いた頁を開き、字が読み込まれるまで待つ。`body` は頁の地の CSS。\n * 図は置く前から止めておく。置いてから止めると、止めるまでに進んだ分だけ毎回絵がずれる。\n */\nexport async function stage(browser: Browser, svg: string, fontCss: string, body: string): Promise<Stage> {\n const { width, height } = sizeOf(svg);\n const page = await browser.newPage({ viewport: { width, height }, deviceScaleFactor: SCALE });\n const paused = svg.replace(/^<svg\\b/, '<svg style=\"--play:paused;--at:0\"');\n const html =\n `<!doctype html><html><head><meta charset=\"utf-8\"><style>${fontCss}html,body{margin:0}body{${body}}svg{display:block}</style>` +\n `<script type=\"module\">import * as mb from \"/mediabunny.js\";import * as gif from \"/gifenc.js\";window.__tools={mb,gif};</script></head><body>${paused}</body></html>`;\n await page.route(\"http://localhost/**\", async (route) => {\n const path = new URL(route.request().url()).pathname;\n if (path === \"/\") return route.fulfill({ contentType: \"text/html; charset=utf-8\", body: html });\n const script = SCRIPTS[path];\n return script ? route.fulfill({ contentType: \"text/javascript\", body: readFileSync(script) }) : route.fulfill({ status: 404 });\n });\n await page.goto(\"http://localhost/\");\n await page.waitForFunction(() => \"__tools\" in window);\n await page.evaluate(async () => {\n const loads: Promise<FontFace>[] = [];\n document.fonts.forEach((face) => loads.push(face.load()));\n await Promise.all(loads);\n await document.fonts.ready;\n });\n return { page, width, height };\n}\n\n/** 止めてある図の時刻を `t` 秒に動かし、描き終わるまで待つ */\nasync function at(page: Page, t: number): Promise<void> {\n await page.evaluate(\n (t) =>\n new Promise<void>((done) => {\n document.querySelector(\"svg\")?.style.setProperty(\"--at\", String(t));\n requestAnimationFrame(() => requestAnimationFrame(() => done()));\n }),\n t,\n );\n}\n\n/** `t` 秒の止め絵の PNG。図の外 (角の丸みの外) は透明にする */\nexport async function still(stage: Stage, t: number): Promise<Buffer> {\n await at(stage.page, t);\n return stage.page.screenshot({ type: \"png\", omitBackground: true });\n}\n\nexport interface Film {\n frames: number;\n mp4?: Buffer;\n gif?: Buffer;\n}\n\n/** 頁の中で詰める道具。`sample` で GIF の色の表の元を集め、`seal` で色の表を決めてから `push` でコマを渡す */\ninterface FilmBox {\n sample(png: string): Promise<void>;\n seal(): void;\n push(png: string, i: number): Promise<void>;\n finish(): Promise<{ mp4?: string; gif?: string }>;\n}\n\n/**\n * 1 周 (`total` 秒) を `fps` で撮り、mp4 と GIF に詰める。GIF は `gifEvery` コマに 1 枚を使い、0 なら作らない。\n * GIF の色の表は `samples` 秒の絵 (段ごとの止め絵) から 1 つだけ作り、全てのコマをその表で塗る。\n * コマごとに表を作ると、寄って追う図でコマ全体が動いた後、止まった所の淡い色がコマごとの表でばらばらに残る。\n */\nexport async function film(stage: Stage, plan: { total: number; fps: number; mp4: boolean; gifEvery: number; samples: number[] }): Promise<Film> {\n const { page, width, height } = stage;\n await page.evaluate(\n async ({ width, height, scale, fps, mp4, gifEvery }) => {\n const { mb, gif } = (window as unknown as { __tools: { mb: any; gif: any } }).__tools;\n let add: (bitmap: ImageBitmap, i: number) => Promise<void> = () => Promise.resolve();\n let close: () => Promise<Uint8Array | undefined> = () => Promise.resolve(undefined);\n if (mp4) {\n const canvas = new OffscreenCanvas(width * scale, height * scale);\n const context = canvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D;\n const target = new mb.BufferTarget();\n const output = new mb.Output({ format: new mb.Mp4OutputFormat({ fastStart: \"in-memory\" }), target });\n const source = new mb.CanvasSource(canvas, { codec: \"avc\", bitrate: mb.QUALITY_MEDIUM, keyFrameInterval: 2 });\n output.addVideoTrack(source, { frameRate: fps });\n await output.start();\n add = async (bitmap, i) => {\n context.drawImage(bitmap, 0, 0);\n await source.add(i / fps, 1 / fps);\n };\n close = async () => {\n await output.finalize();\n return new Uint8Array(target.buffer as ArrayBuffer);\n };\n }\n\n // GIF は CSS の 1px を 1 画素で詰める。前のコマの元の絵と 1 つでも色が違う画素だけを書き、残りは透明にする。\n // 撮る絵は毎回同じなので、動いていない所はぴったり一致する。\n // 差に幅を持たせると、ゆっくり消える物の最後の数段が書かれず、薄い残りになる\n const small = new OffscreenCanvas(width, height);\n const smallContext = small.getContext(\"2d\", { willReadFrequently: true }) as OffscreenCanvasRenderingContext2D;\n const decode = (png: string): Promise<ImageBitmap> => createImageBitmap(new Blob([Uint8Array.from(atob(png), (c) => c.charCodeAt(0))], { type: \"image/png\" }));\n const read = (bitmap: ImageBitmap): Uint8ClampedArray => {\n smallContext.drawImage(bitmap, 0, 0, width, height);\n return smallContext.getImageData(0, 0, width, height).data;\n };\n const encoder = gifEvery ? gif.GIFEncoder() : undefined;\n const delay = (gifEvery / fps) * 1000;\n const sampled: Uint8ClampedArray[] = [];\n // 色の表。最後の 1 色は透明に使う\n let colors: number[][] = [];\n // 色ごとに表のどの色で塗るかを 1 度だけ決めて覚える。`gifenc` の `applyPalette` は似た色の組ごとに\n // そのコマで最初に見た色で塗る色を決めるので、同じ色でもコマによって塗る色が変わり、\n // 動いた所だけを書くと、書いたコマごとに淡い色がずれて前の絵の形が浮く\n const nearest = new Map<number, number>();\n const toIndex = (data: Uint8ClampedArray): Uint8Array => {\n const index = new Uint8Array(data.length / 4);\n for (let p = 0; p < index.length; p++) {\n const i = p * 4;\n const key = ((data[i] as number) << 16) | ((data[i + 1] as number) << 8) | (data[i + 2] as number);\n let k = nearest.get(key);\n if (k === undefined) {\n k = gif.nearestColorIndex(colors, [data[i], data[i + 1], data[i + 2]]) as number;\n nearest.set(key, k);\n }\n index[p] = k;\n }\n return index;\n };\n let previous: Uint8ClampedArray | undefined;\n const writeGif = (data: Uint8ClampedArray): void => {\n const clear = colors.length;\n const index = toIndex(data);\n const before = previous;\n previous = data;\n if (!before) {\n encoder.writeFrame(index, width, height, { palette: [...colors, [0, 0, 0]], delay, dispose: 1 });\n return;\n }\n let changed = 0;\n for (let p = 0; p < index.length; p++) {\n const i = p * 4;\n if (data[i] === before[i] && data[i + 1] === before[i + 1] && data[i + 2] === before[i + 2]) index[p] = clear;\n else changed++;\n }\n // 変わった所が無いコマは、透明な 1 画素だけを書いて時間だけ進める\n if (!changed) encoder.writeFrame(new Uint8Array([clear]), 1, 1, { transparent: true, transparentIndex: clear, delay, dispose: 1 });\n else encoder.writeFrame(index, width, height, { transparent: true, transparentIndex: clear, delay, dispose: 1 });\n };\n\n const base64 = (bytes: Uint8Array): string => {\n let text = \"\";\n for (let i = 0; i < bytes.length; i += 0x8000) text += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n return btoa(text);\n };\n const box: FilmBox = {\n async sample(png) {\n const bitmap = await decode(png);\n sampled.push(read(bitmap));\n bitmap.close();\n },\n seal() {\n const all = new Uint8ClampedArray(sampled.reduce((n, data) => n + data.length, 0));\n let offset = 0;\n for (const data of sampled) {\n all.set(data, offset);\n offset += data.length;\n }\n colors = gif.quantize(all, 255);\n },\n async push(png, i) {\n const bitmap = await decode(png);\n await add(bitmap, i);\n if (gifEvery && i % gifEvery === 0) writeGif(read(bitmap));\n bitmap.close();\n },\n async finish() {\n const video = await close();\n if (encoder) encoder.finish();\n return { ...(video ? { mp4: base64(video) } : {}), ...(encoder ? { gif: base64(encoder.bytes() as Uint8Array) } : {}) };\n },\n };\n (window as unknown as { __film: FilmBox }).__film = box;\n },\n { width, height, scale: SCALE, fps: plan.fps, mp4: plan.mp4, gifEvery: plan.gifEvery },\n );\n\n // コマは CDP で撮る (止め絵の撮り方の半分ほどの時間で済む)。\n // CDP は頁の画素の細かさを見ないので、撮る範囲に倍率を付けて止め絵と同じ細かさにする\n const cdp = await page.context().newCDPSession(page);\n const clip = { x: 0, y: 0, width, height, scale: SCALE };\n const shoot = async (t: number): Promise<string> => {\n await at(page, t);\n return (await cdp.send(\"Page.captureScreenshot\", { format: \"png\", optimizeForSpeed: true, clip })).data;\n };\n if (plan.gifEvery) {\n for (const t of plan.samples) {\n const png = await shoot(t);\n await page.evaluate((png) => (window as unknown as { __film: FilmBox }).__film.sample(png), png);\n }\n await page.evaluate(() => (window as unknown as { __film: FilmBox }).__film.seal());\n }\n const frames = Math.round(plan.total * plan.fps);\n for (let i = 0; i < frames; i++) {\n const png = await shoot(i / plan.fps);\n await page.evaluate(([png, i]) => (window as unknown as { __film: FilmBox }).__film.push(png, i), [png, i] as const);\n }\n const out = await page.evaluate(() => (window as unknown as { __film: FilmBox }).__film.finish());\n return {\n frames,\n ...(out.mp4 ? { mp4: Buffer.from(out.mp4, \"base64\") } : {}),\n ...(out.gif ? { gif: Buffer.from(out.gif, \"base64\") } : {}),\n };\n}\n","/**\n * 書き出す図で描く字だけに、同梱した字の file を削る。\n *\n * 同梱した字の package は、字の範囲ごとに分けた file (woff2) と、file ごとの範囲の表 (`unicode.json`) を持つ。\n * 描く字が入る file だけを、描く字だけに削り、`data:` で埋めた `@font-face` にする。\n * 太さの軸は、値の表 (`TYPE`) が使う太さの間に縮める。\n */\nimport { readFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { FONTS } from \"../look/fonts\";\nimport { TYPE } from \"../look/values\";\n\nconst require_ = createRequire(import.meta.url);\n// subset-font は型を持たないので、使う形だけをここで名指す\nconst subsetFont = require_(\"subset-font\") as (\n font: Buffer,\n text: string,\n options: { targetFormat: \"woff2\"; variationAxes: Record<string, { min: number; max: number }> },\n) => Promise<Buffer>;\n\n/** 字の名前と、その字を持つ package */\nconst PACKAGES = [\n { family: FONTS.sans, name: \"noto-sans-jp\" },\n { family: FONTS.mono, name: \"jetbrains-mono\" },\n] as const;\n\nconst weights = Object.values(TYPE).map((style) => style.weight);\nconst WEIGHT = { min: Math.min(...weights), max: Math.max(...weights) };\n\n/** `U+30-39,U+3000-303F` の形の範囲の一覧 */\nfunction ranges(list: string): [number, number][] {\n return list.split(\",\").map((part) => {\n const [from = \"\", to = from] = part.trim().replace(/^U\\+/i, \"\").split(\"-\");\n return [parseInt(from, 16), parseInt(to, 16)];\n });\n}\n\nconst hex = (code: number): string => `U+${code.toString(16).toUpperCase()}`;\n\n/** 字を空白ごと集める。改行は字の file に要らない */\nexport function charsOf(texts: string[]): string[] {\n return [...new Set([...texts.join(\"\")])].filter((char) => char !== \"\\n\" && char !== \"\\r\" && char !== \"\\t\").sort();\n}\n\n/** 描く字だけに削った字の file を `data:` で埋めた `@font-face` の並び */\nexport async function fontFaces(chars: string[]): Promise<string> {\n const faces = await Promise.all(\n PACKAGES.flatMap(({ family, name }) => {\n const base = dirname(require_.resolve(`@fontsource-variable/${name}/unicode.json`));\n const table = JSON.parse(readFileSync(join(base, \"unicode.json\"), \"utf8\")) as Record<string, string>;\n return Object.entries(table).map(async ([key, list]) => {\n const span = ranges(list);\n const own = chars.filter((char) => {\n const code = char.codePointAt(0) ?? -1;\n return span.some(([from, to]) => code >= from && code <= to);\n });\n if (!own.length) return \"\";\n const file = join(base, \"files\", `${name}-${key.replace(/[[\\]]/g, \"\")}-wght-normal.woff2`);\n const woff2 = await subsetFont(await readFile(file), own.join(\"\"), { targetFormat: \"woff2\", variationAxes: { wght: WEIGHT } });\n const unicode = own.map((char) => hex(char.codePointAt(0) ?? 0)).join(\",\");\n return `@font-face{font-family:\"${family}\";font-style:normal;font-display:block;font-weight:${WEIGHT.min} ${WEIGHT.max};src:url(data:font/woff2;base64,${woff2.toString(\"base64\")}) format(\"woff2\");unicode-range:${unicode}}`;\n });\n }),\n );\n return faces.join(\"\");\n}\n","/**\n * 1 file で開ける HTML。削った字と、頁に図を置いて動かす script と、原本の JSON を収める。\n *\n * 開くと頁と同じく、枠の幅で見せ方を選び、動きを嫌う設定では止め絵を釦で送る。\n * 外へ何も取りに行かない。\n */\nimport { readFileSync } from \"node:fs\";\nimport type { Theme } from \"../look/values\";\nimport { esc } from \"../render/parts\";\nimport type { Diagram } from \"../schema\";\nimport type { NotationLang } from \"../words\";\n\n/** 頁に図を置いて動かす script。build で `player-global.ts` を 1 file に束ねた物 */\nconst PLAYER = new URL(\"./player.global.js\", import.meta.url);\n\n/** `lang` は図の中の字 (全体図の札と読み上げの名前) の言葉。頁の `lang` 属性も同じにし、名前をその言葉の声で読ませる (#3001) */\nexport function pageHtml(diagram: Diagram, look: { palette: string; theme: Theme; vars: string; lang: NotationLang }, fontCss: string): string {\n // `</script>` で script が途切れないよう、`<` を JSON の逃がし方で書く\n const json = JSON.stringify(diagram).replace(/</g, \"\\\\u003c\");\n const options = JSON.stringify({ palette: look.palette, theme: look.theme, lang: look.lang });\n return [\n \"<!doctype html>\",\n `<html lang=\"${look.lang}\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">`,\n `<title>${esc(diagram.title)}</title>`,\n `<style>${fontCss}:root{${look.vars}}html,body{margin:0}body{background:var(--bg)}</style>`,\n '</head><body><div id=\"dragon\"></div>',\n `<script type=\"application/json\" id=\"dragon-diagram\">${json}</script>`,\n `<script>${readFileSync(PLAYER, \"utf8\").replace(/<\\/script/gi, \"<\\\\/script\")}</script>`,\n `<script>DragonPlayer.mountDiagram(document.getElementById(\"dragon\"),JSON.parse(document.getElementById(\"dragon-diagram\").textContent),${options});</script>`,\n \"</body></html>\",\n ].join(\"\\n\");\n}\n","/**\n * 同じ原本の JSON から、mp4、GIF、HTML、PNG を書き出す。\n *\n * 見せ方は頁と同じく枠の幅で選ぶ (`chooseView`)。幅は寄って見せる窓の幅にもなる。\n * 寄って見せる図で幅の指定が無い時は、記事の本文ほどの枠 (`DEFAULTS.followWidth`) で寄る。\n * PNG は最後の段の止め絵を、全体を止めた見せ方で撮る。\n * 字は図で描く字だけに削り、撮る頁と HTML の両方に同じ物を埋める。\n */\nimport { mkdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { paletteVars, resolvePalette, type Theme } from \"../look/values\";\nimport { BUTTON_TEXT, stepNo } from \"../player\";\nimport { drawSvg, type Rendered, renderDiagram } from \"../render/svg\";\nimport type { ViewMode } from \"../schema\";\nimport { chooseView } from \"../view\";\nimport type { NotationLang } from \"../words\";\nimport { film, launch, sizeOf, stage, still } from \"./capture\";\nimport { charsOf, fontFaces } from \"./fonts\";\nimport { pageHtml } from \"./html\";\n\nexport type ExportFormat = \"mp4\" | \"gif\" | \"html\" | \"png\";\n\nexport interface ExportOptions {\n /** 書き出す先の dir。無ければ作り、書き出しに失敗した時は作った dir を残さない (#3013) */\n outDir: string;\n /** file の名前 (拡張子を除く)。既定は `diagram` */\n name?: string;\n /** 書き出す形。既定は 4 つ全て */\n formats?: ExportFormat[];\n /** 枠の幅 (CSS の px)。見せ方を選び、寄って見せる窓の幅になる */\n width?: number;\n palette?: string;\n theme?: Theme;\n /** mp4 の 1 秒のコマの数 */\n fps?: number;\n /** GIF の 1 秒のコマの数 */\n gifFps?: number;\n /** 図の中の字 (全体図の札、HTML の読み上げの名前、描けない時の断りの文) の言葉。書かなければ日本語 (#3001) */\n lang?: NotationLang;\n}\n\nexport interface ExportResult {\n /** 書き出した file の path */\n files: Partial<Record<ExportFormat, string>>;\n view: ViewMode;\n /** 撮ったコマの数 */\n frames: number;\n /** 動画のコマの大きさ (CSS の px)。撮る画素はこの 2 倍 */\n width: number;\n height: number;\n}\n\n/** 書き出せる形。命令が `--format` の値を確かめる時にも使う */\nexport const FORMATS: readonly ExportFormat[] = [\"mp4\", \"gif\", \"html\", \"png\"];\nconst DEFAULTS = { fps: 30, gifFps: 10, followWidth: 728 };\n\nconst unescape = (s: string): string => s.replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&amp;/g, \"&\");\n\n/** SVG の中で描かれる字 (`<text>` の中身) */\nconst svgTexts = (svg: string): string[] => [...svg.matchAll(/<text\\b[^>]*>([\\s\\S]*?)<\\/text>/g)].map((m) => unescape((m[1] ?? \"\").replace(/<[^>]+>/g, \"\")));\n\n/** 頁と書き出しで描かれうる字。寄って見せる時の全体図の題 (`followSvg` の中) と、釦と段の番号の字も含む */\nfunction drawnTexts(rendered: Rendered, followSvg: string | undefined): string[] {\n const { diagram } = rendered;\n const svgs = followSvg === undefined ? [rendered.svg] : [rendered.svg, followSvg];\n const count = diagram.steps.length;\n return [...svgs.flatMap(svgTexts), ...diagram.steps.flatMap((step, s) => [step.title, step.body, stepNo(s, count)]), ...Object.values(BUTTON_TEXT)];\n}\n\nexport async function exportDiagram(input: unknown, options: ExportOptions): Promise<ExportResult> {\n const formats = options.formats ?? FORMATS;\n const lang = options.lang ?? \"ja\";\n const rendered = renderDiagram(input, {\n ...(options.palette ? { palette: options.palette } : {}),\n ...(options.theme ? { theme: options.theme } : {}),\n lang,\n });\n const { diagram, layout, timeline, theme } = rendered;\n const palette = resolvePalette(rendered.palette);\n const vars = paletteVars(palette, theme);\n const width = options.width ?? (rendered.view === \"follow\" ? DEFAULTS.followWidth : layout.width);\n const view = chooseView(rendered, width).mode;\n // 寄って見せる図は動画と字の file の両方に使うので 1 度だけ描き、2 つの全体図の札の言葉を揃える\n const followSvg = rendered.view === \"fixed\" ? undefined : drawSvg(diagram, layout, timeline, palette, theme, { width, lang });\n const videoSvg = view === \"follow\" && followSvg ? followSvg : rendered.svg;\n const fontCss = await fontFaces(charsOf(drawnTexts(rendered, followSvg)));\n\n // 撮る物を全て撮り終えてから書く。撮る所で失敗した時に、書き出し先の dir と途中の file を残さないため (#3013)\n const outputs: [ExportFormat, string | Buffer][] = [];\n\n if (formats.includes(\"html\")) outputs.push([\"html\", pageHtml(diagram, { palette: palette.id, theme, vars, lang }, fontCss)]);\n\n let frames = 0;\n const mp4 = formats.includes(\"mp4\");\n const gif = formats.includes(\"gif\");\n if (mp4 || gif || formats.includes(\"png\")) {\n const browser = await launch(lang);\n try {\n if (formats.includes(\"png\")) {\n const fixed = await stage(browser, rendered.svg, fontCss, \"\");\n outputs.push([\"png\", await still(fixed, timeline.stills[timeline.stills.length - 1] ?? 0)]);\n }\n if (mp4 || gif) {\n const fps = mp4 ? (options.fps ?? DEFAULTS.fps) : (options.gifFps ?? DEFAULTS.gifFps);\n const gifEvery = gif ? Math.max(1, Math.round(fps / (options.gifFps ?? DEFAULTS.gifFps))) : 0;\n const shot = await film(await stage(browser, videoSvg, fontCss, `${vars};background:var(--bg)`), {\n total: timeline.total,\n fps,\n mp4,\n gifEvery,\n // GIF の色の表は、最初の絵と段ごとの止め絵から作る\n samples: [0, ...timeline.stills],\n });\n frames = shot.frames;\n if (shot.mp4) outputs.push([\"mp4\", shot.mp4]);\n if (shot.gif) outputs.push([\"gif\", shot.gif]);\n }\n } finally {\n await browser.close();\n }\n }\n const files = writeOutputs(options.outDir, options.name ?? \"diagram\", outputs);\n return { files, view, frames, ...sizeOf(videoSvg) };\n}\n\n/**\n * 書き出し先の dir を作り、撮った物を並びの順に書く。\n * 書いている途中で失敗した時は、この回に作った dir を中身ごと消してから投げ直す (#3013)。\n * 前から在った dir は消さない。\n */\nfunction writeOutputs(outDir: string, name: string, outputs: [ExportFormat, string | Buffer][]): Partial<Record<ExportFormat, string>> {\n // 作った dir の内で一番上の path。前から在った時は undefined\n const created = mkdirSync(outDir, { recursive: true });\n const files: Partial<Record<ExportFormat, string>> = {};\n try {\n for (const [format, data] of outputs) {\n const path = join(outDir, `${name}.${format}`);\n writeFileSync(path, data);\n files[format] = path;\n }\n } catch (error) {\n if (created !== undefined) rmSync(created, { recursive: true, force: true });\n throw error;\n }\n return files;\n}\n","/**\n * dragon記法の語 (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、属性は `[<鍵>: <値>]` で書く。\n * 語は英語だけで、原本の JSON が使う名前に揃え、記法と JSON で覚える語を 1 組にする。\n *\n * 言葉の型 (`NotationLang`) は、誤りの文と図の中の字の言葉を選ぶために持つ。\n * 語が英語だけなので、記法の file から言葉は決めず、呼ぶ側が渡す。\n *\n * 型が欠けを止める。原本の JSON の値 (図の種類、運ぶ物、見せ方、名前の側) に語が無い時は、型の検査が落ちる。\n */\nimport type { Carry, Diagram, LabelSide, ViewMode } from \"./schema\";\n\nexport type NotationLang = \"ja\" | \"en\";\n\nconst keys = <K extends string>(table: Record<K, true>): K[] => Object.keys(table) as K[];\n\n/** 図の種類。最初の行の頭の語 */\nexport const KINDS = keys<Diagram[\"kind\"]>({ sequence: true, architecture: true });\n\n/** 最初の行より後の行の頭の語。線の行だけは箱の名札から始まる */\nexport const HEADS = [\"group\", \"end\", \"box\", \"strip\", \"step\", \"say\", \"code\", \"act\", \"note\", \"set\"] as const;\ntype Head = (typeof HEADS)[number];\n\n/** 箱と区画の名札の後ろに、見せる名前を続ける語 (`box <名札> as <名前>`) */\nexport const AS = \"as\";\n\n/** 行ごとに書ける属性の鍵 */\nexport const ATTRS = {\n diagram: [\"view\"],\n group: [\"note\", \"color\", \"icon\"],\n box: [\"note\", \"color\", \"icon\"],\n edge: [\"carry\", \"tag\", \"side\"],\n set: [\"tag\"],\n} as const;\n\n/** `carry` に書ける運ぶ物。封筒は書かない時、札は `tag` で書く */\nexport const CARRIES = keys<Exclude<Carry[\"kind\"], \"envelope\" | \"tag\">>({ coin: true, none: true });\nexport const VIEWS = keys<ViewMode>({ fixed: true, follow: true });\nexport const SIDES = keys<LabelSide>({ above: true, below: true, left: true, right: true });\n\n/**\n * 前の形の行 (#2997 まで) が、新しい形のどの行に当たるか。誤りの文で新しい行の形を示すために引く。\n * 鍵は前の形の行の頭の語で、記号 (`#` など) で始まる行と、名札の後ろに `=` や「」が来る行は読む側が見分ける。\n */\nexport const OLD_HEADS = {\n 時系列図: \"sequence\",\n 構成図: \"architecture\",\n 区画: \"group\",\n 見せ方: \"view\",\n region: \"group\",\n view: \"view\",\n} as const satisfies Record<string, Diagram[\"kind\"] | Head | \"view\">;\n","/**\n * dragon記法の誤りの文 (#2997、#3137)。\n *\n * 記法の語は英語だけで file から言葉が決まらないため、誤りの文は呼ぶ側が渡した言葉\n * (渡さなければ日本語) で出す。文の中の記法の語は語の表から引き、表と文で語が食い違わないようにする。\n */\nimport { COLORS } from \"./schema\";\nimport { CARRIES, HEADS, KINDS, type NotationLang, SIDES, VIEWS } from \"./words\";\n\n/** 新しい形のどの行の書き方を示すか。前の形の行に当たった時に、誤りの文が書き方を示す */\nexport type Shape = \"sequence\" | \"architecture\" | \"group\" | \"box\" | \"strip\" | \"view\" | \"step\" | \"say\" | \"code\" | \"act\" | \"note\" | \"set\";\n\nexport interface Messages {\n noHead: string;\n badHead: string;\n /** 前の形の `word` を書いた行。`shape` の行の書き方を示す */\n oldForm: (word: string, shape: Shape) => string;\n unknownHead: (word: string) => string;\n duplicate: (id: string) => string;\n needsId: (word: string) => string;\n badId: (id: string) => string;\n afterId: string;\n undeclaredBox: (id: string) => string;\n noBody: (title: string) => string;\n emptyStepTitle: string;\n noBoxes: string;\n noSteps: string;\n emptySay: string;\n sayTwice: string;\n codeTwice: string;\n emptyCode: string;\n declarationInStep: string;\n stepLineBeforeStep: string;\n nestedGroup: string;\n strayEnd: string;\n endTakesNothing: string;\n unclosedGroup: (id: string) => string;\n regionReopened: (id: string) => string;\n emptyName: (id: string) => string;\n stripTwice: string;\n stripShape: string;\n emptyStripField: string;\n stripUndeclared: string;\n noSuchField: (field: string) => string;\n stripNeedsValue: string;\n actShape: string;\n noteShape: string;\n edgeShape: string;\n emptyLabel: string;\n quoteUnclosed: string;\n afterQuote: string;\n attrUnclosed: string;\n attrNoColon: (raw: string) => string;\n attrNoValue: (key: string) => string;\n attrTwice: (key: string) => string;\n badAttr: (key: string, allowed: readonly string[]) => string;\n badColor: string;\n badView: string;\n badCarry: string;\n badSide: string;\n carryTwice: string;\n}\n\nconst list = (words: readonly string[]): string => words.join(\" / \");\n\nconst ja = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <題>\",\n architecture: \"architecture <題>\",\n group: \"group <名札> as <名前> [note: <添え書き>] から end まで\",\n box: \"box <名札> as <名前> [note: <下の小さな字>]\",\n strip: \"strip <題>: <欄>, <欄>\",\n view: \"sequence <題> [view: follow]\",\n step: \"step <段の題>\",\n say: \"say <段の本文>\",\n code: \"code <命令>\",\n act: \"act <名札>: <処理の名前>\",\n note: \"note <名札>: <下の小さな字>\",\n set: \"set <欄>: <値> [tag: <札>]\",\n };\n return {\n noHead: `最初の行に図の種類 (${list(KINDS)}) と題を書く`,\n badHead: `最初の行は ${KINDS.join(\" か \")} で始め、続けて題を書く`,\n oldForm: (word, shape) => `${word} は前の形の書き方。新しい形では ${shapes[shape]} と書く`,\n unknownHead: (word) => `${word} は行の頭に書けない。行は ${list(HEADS)} か、<名札> -> <名札> で始める`,\n duplicate: (id) => `${id} は既に宣言した名札`,\n needsId: (word) => `${word} の後ろに名札を書く`,\n badId: (id) => `${id} は名札に使えない。名札には空白と [ ] 「 」 = : を含めない`,\n afterId: \"名札の後ろには as <名前> か属性を書く\",\n undeclaredBox: (id) => `${id} という箱は宣言していない`,\n noBody: (title) => `段「${title}」に本文 (say の行) が要る`,\n emptyStepTitle: \"step の後ろに段の題を書く\",\n noBoxes: \"箱を 1 つ以上宣言する\",\n noSteps: \"段 (step の行) を 1 つ以上書く\",\n emptySay: \"say の後ろか、その下に字下げした行に段の本文を書く\",\n sayTwice: \"1 つの段に say は 1 つまで。長い本文は say の下に字下げして続ける\",\n codeTwice: \"1 つの段に code は 1 行まで\",\n emptyCode: \"code の後ろに命令を書く\",\n declarationInStep: \"group と box と strip は最初の step より前に書く\",\n stepLineBeforeStep: \"線と say と code と act と note と set は step の下に書く\",\n nestedGroup: \"group の中に group は書けない。先に end で閉じる\",\n strayEnd: \"end の前に、閉じる group が無い\",\n endTakesNothing: \"end の後ろには何も書かない\",\n unclosedGroup: (id) => `group ${id} を end で閉じていない`,\n regionReopened: (id) => `group ${id} は宣言済み。もう一度開く時は group ${id} だけを書き、名前と属性は最初の宣言に書く`,\n emptyName: (id) => `${id} の名前が空`,\n stripTwice: \"strip は 1 つだけ宣言する\",\n stripShape: \"strip は strip <題>: <欄>, <欄> の形で書く\",\n emptyStripField: \"strip の欄の名前が空\",\n stripUndeclared: \"set を書く前に、strip <題>: <欄>, <欄> で帯を宣言する\",\n noSuchField: (field) => `${field} という欄は strip に無い`,\n stripNeedsValue: \"set は set <欄>: <値> か set <欄> [tag: <札>] の形で書く\",\n actShape: \"act は act <名札>: <処理の名前> の形で書く\",\n noteShape: \"note は note <名札>: <下の小さな字> の形で書く\",\n edgeShape: \"線は <名札> -> <名札>: <線の名前> [<属性>] の形で書く\",\n emptyLabel: \"線の : の後ろに線の名前を書く。名前を書かない時は : も書かない\",\n quoteUnclosed: '\" で始めた字を \" で閉じていない',\n afterQuote: '\" で閉じた字の後ろには、属性か次の , だけを書く',\n attrUnclosed: \"属性は [ で始めて ] で閉じ、行の終わりに置く\",\n attrNoColon: (raw) => `[${raw}] は書けない。属性は [<鍵>: <値>] の形で書く`,\n attrNoValue: (key) => `${key}: の後ろに値を書く`,\n attrTwice: (key) => `${key} は 1 つの行に 1 つまで`,\n badAttr: (key, allowed) => `${key} はこの行に書けない属性。書けるのは ${list(allowed)}`,\n badColor: `color は ${list(COLORS)} のどれか`,\n badView: `view は ${list(VIEWS)} のどれか`,\n badCarry: `carry は ${list(CARRIES)} のどれか。札は tag: <値> で書く`,\n badSide: `side は ${list(SIDES)} のどれか`,\n carryTwice: \"運ぶ物は 1 本の線に 1 つまで。carry と tag は一緒に書かない\",\n };\n};\n\nconst en = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <title>\",\n architecture: \"architecture <title>\",\n group: \"group <id> as <name> [note: <note>] through end\",\n box: \"box <id> as <name> [note: <caption>]\",\n strip: \"strip <title>: <field>, <field>\",\n view: \"sequence <title> [view: follow]\",\n step: \"step <step title>\",\n say: \"say <step body>\",\n code: \"code <command>\",\n act: \"act <id>: <action>\",\n note: \"note <id>: <caption>\",\n set: \"set <field>: <value> [tag: <tag>]\",\n };\n return {\n noHead: `Write the diagram kind (${list(KINDS)}) and a title on the first line`,\n badHead: `Start the first line with ${KINDS.join(\" or \")}, followed by the title`,\n oldForm: (word, shape) => `${word} is the old notation. Write ${shapes[shape]} instead`,\n unknownHead: (word) => `A line cannot start with ${word}. Start a line with ${list(HEADS)}, or <id> -> <id>`,\n duplicate: (id) => `${id} is already declared`,\n needsId: (word) => `Write an id after ${word}`,\n badId: (id) => `${id} cannot be an id. An id has no spaces and none of [ ] 「 」 = :`,\n afterId: \"Write as <name> or attributes after the id\",\n undeclaredBox: (id) => `No box named ${id} is declared`,\n noBody: (title) => `Step \"${title}\" needs a body (a say line)`,\n emptyStepTitle: \"Write a title after step\",\n noBoxes: \"Declare at least one box\",\n noSteps: \"Write at least one step (a step line)\",\n emptySay: \"Write the step body after say, or on indented lines below it\",\n sayTwice: \"A step takes one say. Continue a long body on indented lines below it\",\n codeTwice: \"A step takes at most one code line\",\n emptyCode: \"Write the command after code\",\n declarationInStep: \"Write group, box and strip before the first step\",\n stepLineBeforeStep: \"Write lines, say, code, act, note and set under a step\",\n nestedGroup: \"A group cannot hold another group. Close it with end first\",\n strayEnd: \"There is no group for this end to close\",\n endTakesNothing: \"Write nothing after end\",\n unclosedGroup: (id) => `group ${id} is not closed with end`,\n regionReopened: (id) => `group ${id} is already declared. To open it again, write only group ${id}; put the name and attributes on the first one`,\n emptyName: (id) => `${id} has an empty name`,\n stripTwice: \"Declare only one strip\",\n stripShape: \"Write a strip as strip <title>: <field>, <field>\",\n emptyStripField: \"A strip field name is empty\",\n stripUndeclared: \"Declare the strip as strip <title>: <field>, <field> before writing set\",\n noSuchField: (field) => `The strip has no field named ${field}`,\n stripNeedsValue: \"Write set as set <field>: <value> or set <field> [tag: <tag>]\",\n actShape: \"Write act as act <id>: <action>\",\n noteShape: \"Write note as note <id>: <caption>\",\n edgeShape: \"Write a line as <id> -> <id>: <label> [<attributes>]\",\n emptyLabel: \"Write the label after the : of a line, or leave out the : as well\",\n quoteUnclosed: 'A value that starts with \" is not closed with \"',\n afterQuote: 'After a value closed with \", write only attributes or the next ,',\n attrUnclosed: \"Start attributes with [, close them with ], and put them at the end of the line\",\n attrNoColon: (raw) => `[${raw}] cannot be read. Write an attribute as [<key>: <value>]`,\n attrNoValue: (key) => `Write a value after ${key}:`,\n attrTwice: (key) => `Write ${key} only once on a line`,\n badAttr: (key, allowed) => `${key} cannot be written on this line. Write ${list(allowed)}`,\n badColor: `color is one of ${list(COLORS)}`,\n badView: `view is one of ${list(VIEWS)}`,\n badCarry: `carry is one of ${list(CARRIES)}. Write a tag as tag: <value>`,\n badSide: `side is one of ${list(SIDES)}`,\n carryTwice: \"A line carries one thing. Do not write carry and tag together\",\n };\n};\n\nconst MESSAGES: Record<NotationLang, Messages> = { ja: ja(), en: en() };\n\nexport const messagesFor = (lang: NotationLang): Messages => MESSAGES[lang];\n","/**\n * 記法を 1 行ずつに切る。\n *\n * 空行とコメントの行 (`//` で始まる行) も捨てずに返す。`say` の下に字下げして続けた本文では、\n * 空行も `//` で始まる行も本文の字になるため、捨てるかは読む側が行の場所で決める (#3137)。\n * 行の頭と終わりの空白は落とし、頭の空白の字の数を `indent` に残す。\n * 誤りを示すために元の行の番号と、残した字が始まる列を持たせる。\n * 行と列は 1 から数え、列は字の数で数える (UTF-16 の単位では数えない)。\n */\nexport interface SourceLine {\n line: number;\n column: number;\n /** 行の頭の空白の字の数。`say` の続きの行を見分ける */\n indent: number;\n text: string;\n}\n\n/** 空行かコメントの行 */\nexport const isBlankOrComment = (source: SourceLine): boolean => source.text === \"\" || source.text.startsWith(\"//\");\n\n/** `text` の `index` 番目 (UTF-16 の位置) にある字が、行の何列目かを返す。 */\nexport function columnOf(source: SourceLine, index: number): number {\n return source.column + Array.from(source.text.slice(0, index)).length;\n}\n\nexport function tokenize(notation: string): SourceLine[] {\n return notation.split(/\\r?\\n/).map((raw, index) => {\n const indent = Array.from(raw.slice(0, raw.length - raw.trimStart().length)).length;\n return { line: index + 1, column: indent + 1, indent, text: raw.trim() };\n });\n}\n","/**\n * 人が書く dragon記法を、図の原本の JSON へ変える (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、線の行だけは箱の名札から始まる。最初の `step` より前に\n * 図の種類と題と区画と箱と帯を宣言し、`step` ごとに、その段で起きることを起きる順に並べる。\n *\n * sequence <題> [view: fixed か follow] 書かなければ字の大きさで選ぶ\n * group <名札> as <名前> [note: <添え書き>, color: <色>, icon: <印>]\n * box <名札> as <名前> [note: <下の小さな字>, color: <色>, icon: <印>]\n * end 同じ名札の group はもう一度開ける\n * box <名札> as <名前> [...] as が無ければ名札を名前にする\n * strip <題>: <欄>, <欄>\n * step <段の題>\n * say <段の本文> say の下に字下げした行は本文の続き\n * code <段で打つ命令>\n * <名札> -> <名札>: <線の名前> [carry: <運ぶ物>, tag: <値>, side: <側>]\n * act <名札>: <処理の名前> 箱の中の処理\n * note <名札>: <字> 箱の下の小さな字の書き換え\n * set <欄>: <値> [tag: <札>] 中身の帯の値\n *\n * 鍵と値はコロンで区切り、属性は `[ ]` の中に `,` で並べて行の終わりに置く。\n * 空白を含む名前と文は行の終わりか `[` の前に置き、`[` を含む名前と `,` か `]` を含む属性の値だけを\n * `\"` で囲む。囲みの中では `\\\"` が `\"`、`\\\\` が `\\` になる。字下げは `say` の続きの行を見分ける時だけ意味を持つ。\n *\n * 行の頭の語と同じ綴りの名札 (`end` や `step`) も書ける。名札の次に `->` が来る行は線と読む。\n * 誤りは最初の 1 つで止め、行と列を示す。誤りの文の言葉は呼ぶ側が渡す。\n */\nimport { type Messages, messagesFor, type Shape } from \"./messages\";\nimport { type Box, type Carry, type Color, COLORS, type Diagram, type DiagramEvent, type LabelSide, type Region, type Step, type ViewMode } from \"./schema\";\nimport { columnOf, isBlankOrComment, type SourceLine, tokenize } from \"./tokenize\";\nimport { FORMAT_VERSION } from \"./version\";\nimport { AS, ATTRS, CARRIES, HEADS, KINDS, type NotationLang, OLD_HEADS, SIDES, VIEWS } from \"./words\";\n\nexport interface LineError {\n line: number;\n column: number;\n message: string;\n}\n\nexport type Parsed = { ok: true; diagram: Diagram } | { ok: false; errors: LineError[] };\n\nexport interface ParseOptions {\n /** 誤りの文の言葉。既定は日本語 */\n lang?: NotationLang;\n}\n\nclass NotationError extends Error {\n constructor(\n readonly line: number,\n readonly column: number,\n message: string,\n ) {\n super(message);\n }\n}\n\nconst fail = (source: SourceLine, index: number, message: string): NotationError =>\n new NotationError(source.line, columnOf(source, index), message);\n\n/** 名札に使える字。原本の JSON の名札の形と同じ */\nconst ID = /^[^\\s[\\]「」=:]+$/u;\n/** 線の行。名札、`->`、名札 */\nconst EDGE = /^([^\\s:[\\]]+?)\\s*->\\s*([^\\s:[\\]]+)/du;\n\nconst isOneOf = <T extends string>(list: readonly T[], word: string): word is T => (list as readonly string[]).includes(word);\n\n/** `at` から空白を飛ばした位置 */\nfunction skipSpaces(text: string, at: number): number {\n let i = at;\n while (i < text.length && /\\s/u.test(text[i] ?? \"\")) i++;\n return i;\n}\n\n/** `[<鍵>: <値>]` の 1 つ。`at` は鍵の位置 */\ninterface Attr {\n value: string;\n at: number;\n}\n\n/** `at` の `\"` から閉じる `\"` までを読む。`end` は閉じた `\"` の次 */\nfunction readQuoted(source: SourceLine, at: number, m: Messages): { value: string; end: number } {\n const text = source.text;\n let value = \"\";\n for (let i = at + 1; i < text.length; i++) {\n const c = text[i] ?? \"\";\n const next = text[i + 1] ?? \"\";\n if (c === \"\\\\\" && (next === '\"' || next === \"\\\\\")) {\n value += next;\n i++;\n } else if (c === '\"') {\n return { value, end: i + 1 };\n } else {\n value += c;\n }\n }\n throw fail(source, at, m.quoteUnclosed);\n}\n\n/**\n * `at` から名前か文を読む。`\"` で始まれば囲みの中、そうでなければ `[` の前か行の終わりまで。\n * `rest` は名前の後ろの位置で、行の終わりか属性の `[` を指す。\n */\nfunction readName(source: SourceLine, at: number, m: Messages): { value: string; rest: number } {\n const text = source.text;\n const start = skipSpaces(text, at);\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n const rest = skipSpaces(text, quoted.end);\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterQuote);\n return { value: quoted.value, rest };\n }\n const open = text.indexOf(\"[\", start);\n const rest = open < 0 ? text.length : open;\n return { value: text.slice(start, rest).trim(), rest };\n}\n\n/** `at` の `[` から行の終わりの `]` までの属性を読む。`allowed` に無い鍵は誤り */\nfunction readAttrs(source: SourceLine, at: number, allowed: readonly string[], m: Messages): Map<string, Attr> {\n const text = source.text;\n if (!text.endsWith(\"]\")) throw fail(source, at, m.attrUnclosed);\n const close = text.length - 1;\n const attrs = new Map<string, Attr>();\n for (let i = at + 1; ; ) {\n const start = skipSpaces(text, i);\n let colon = start;\n while (colon < close && text[colon] !== \":\" && text[colon] !== \",\") colon++;\n if (colon >= close || text[colon] !== \":\") throw fail(source, start, m.attrNoColon(text.slice(start, colon).trim()));\n const key = text.slice(start, colon).trim();\n if (!allowed.includes(key)) throw fail(source, start, m.badAttr(key, allowed));\n if (attrs.has(key)) throw fail(source, start, m.attrTwice(key));\n let end = skipSpaces(text, colon + 1);\n let value: string;\n if (text[end] === '\"') {\n const quoted = readQuoted(source, end, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < close && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", end);\n const stop = comma < 0 || comma > close ? close : comma;\n value = text.slice(end, stop).trim();\n end = stop;\n }\n if (value === \"\") throw fail(source, start, m.attrNoValue(key));\n attrs.set(key, { value, at: start });\n if (end >= close) return attrs;\n i = end + 1;\n }\n}\n\n/** `at` から `,` で区切った字の並びを行の終わりまで読む */\nfunction readList(source: SourceLine, at: number, m: Messages): string[] {\n const text = source.text;\n const items: string[] = [];\n for (let i = at; ; ) {\n const start = skipSpaces(text, i);\n let value: string;\n let end: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < text.length && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", start);\n end = comma < 0 ? text.length : comma;\n value = text.slice(start, end).trim();\n }\n if (value === \"\") throw fail(source, start, m.emptyStripField);\n items.push(value);\n if (end >= text.length) return items;\n i = end + 1;\n }\n}\n\n/** `group` と `box` の行の、名札と `as` の後ろの名前と属性 */\ninterface Declared {\n id: string;\n idAt: number;\n name?: string;\n attrs: Map<string, Attr>;\n}\n\nfunction readDeclared(source: SourceLine, word: string, allowed: readonly string[], m: Messages): Declared {\n const text = source.text;\n const start = skipSpaces(text, word.length);\n const id = /^[^\\s[]+/u.exec(text.slice(start))?.[0];\n if (id === undefined) throw fail(source, 0, m.needsId(word));\n if (!ID.test(id)) throw fail(source, start, m.badId(id));\n let rest = skipSpaces(text, start + id.length);\n let name: string | undefined;\n if (text.startsWith(AS, rest) && /^(\\s|$)/u.test(text.slice(rest + AS.length, rest + AS.length + 1))) {\n const named = readName(source, rest + AS.length, m);\n if (named.value === \"\") throw fail(source, rest, m.emptyName(id));\n name = named.value;\n rest = named.rest;\n }\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterId);\n const attrs = rest < text.length ? readAttrs(source, rest, allowed, m) : new Map<string, Attr>();\n return { id, idAt: start, ...(name !== undefined ? { name } : {}), attrs };\n}\n\n/** 区画と箱の属性 (`note` と `color` と `icon`) */\nfunction lookOf(source: SourceLine, attrs: Map<string, Attr>, m: Messages): { note?: string; color?: Color; icon?: string } {\n const color = attrs.get(\"color\");\n if (color && !isOneOf(COLORS, color.value)) throw fail(source, color.at, m.badColor);\n const note = attrs.get(\"note\")?.value;\n const icon = attrs.get(\"icon\")?.value;\n return {\n ...(note !== undefined ? { note } : {}),\n ...(color ? { color: color.value as Color } : {}),\n ...(icon !== undefined ? { icon } : {}),\n };\n}\n\n/**\n * 前の形 (#2997 まで) の行なら、その印と、新しい形で書く行の形。`inStep` は段の中の行か。\n * 新しい形で読めない行の誤りの文で、書き直し方を示すために引く。\n */\nfunction oldForm(text: string, inStep: boolean): { word: string; shape: Shape } | undefined {\n const first = text.split(/\\s/u)[0] ?? \"\";\n if (first === \"帯\") return { word: first, shape: inStep ? \"set\" : \"strip\" };\n if (Object.hasOwn(OLD_HEADS, first)) return { word: first, shape: OLD_HEADS[first as keyof typeof OLD_HEADS] };\n if (text.startsWith(\"#\")) return { word: \"#\", shape: \"step\" };\n if (text.startsWith(\">\")) return { word: \">\", shape: \"say\" };\n if (text.startsWith(\"`\")) return { word: \"`\", shape: \"code\" };\n if (text.includes(\"「\")) return { word: \"「」\", shape: inStep ? \"note\" : \"box\" };\n if (/^[^\\s=:]+\\s*=(?!>)/u.test(text)) return { word: \"=\", shape: \"box\" };\n if (inStep && /^[^\\s:]+\\s*:/u.test(text)) return { word: \":\", shape: \"act\" };\n return undefined;\n}\n\n/** 読んでいる段。`body` は `say` を読むまで無い */\ninterface Building {\n source: SourceLine;\n title: string;\n body?: string[];\n code?: string;\n events: DiagramEvent[];\n}\n\nfunction parseLines(lines: SourceLine[], m: Messages): Diagram {\n const headAt = lines.findIndex((source) => !isBlankOrComment(source));\n const head = lines[headAt];\n if (!head) throw new NotationError(1, 1, m.noHead);\n const kind = head.text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(KINDS, kind)) {\n const old = oldForm(head.text, false);\n throw fail(head, 0, old ? m.oldForm(old.word, old.shape) : m.badHead);\n }\n const titled = readName(head, kind.length, m);\n if (titled.value === \"\") throw fail(head, 0, m.badHead);\n const title = titled.value;\n const shown = titled.rest < head.text.length ? readAttrs(head, titled.rest, ATTRS.diagram, m).get(\"view\") : undefined;\n if (shown && !isOneOf(VIEWS, shown.value)) throw fail(head, shown.at, m.badView);\n const view = shown?.value as ViewMode | undefined;\n\n const regions: Region[] = [];\n const boxes: Box[] = [];\n const ids = new Set<string>();\n let strip: { title: string; fields: string[] } | undefined;\n const steps: Step[] = [];\n let building: Building | undefined;\n /** 開いている `group` */\n let group: { source: SourceLine; id: string } | undefined;\n\n const declare = (source: SourceLine, id: string, at: number): void => {\n if (ids.has(id)) throw fail(source, at, m.duplicate(id));\n ids.add(id);\n };\n const boxAt = (source: SourceLine, id: string, at: number): string => {\n if (!boxes.some((box) => box.id === id)) throw fail(source, at, m.undeclaredBox(id));\n return id;\n };\n /** 段の中に書く行の、書き先の段。最初の `step` より前なら誤り */\n const inStep = (source: SourceLine): Building => {\n if (!building) throw fail(source, 0, m.stepLineBeforeStep);\n return building;\n };\n /** 宣言の行。最初の `step` より後なら誤り */\n const beforeSteps = (source: SourceLine): void => {\n if (building) throw fail(source, 0, m.declarationInStep);\n };\n const finish = (): void => {\n if (!building) return;\n if (building.body === undefined) throw fail(building.source, 0, m.noBody(building.title));\n steps.push({\n title: building.title,\n body: building.body.join(\"\\n\"),\n ...(building.code !== undefined ? { code: building.code } : {}),\n events: building.events,\n });\n };\n\n const rest = lines.slice(headAt + 1);\n for (let i = 0; i < rest.length; i++) {\n const source = rest[i];\n if (!source || isBlankOrComment(source)) continue;\n const text = source.text;\n // 名札の次に `->` が来る行は、名札が行の頭の語と同じ綴りでも線と読む\n const edge = EDGE.exec(text);\n if (edge) {\n inStep(source).events.push(readEdge(source, edge));\n continue;\n }\n const word = text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(HEADS, word)) {\n const old = oldForm(text, building !== undefined);\n throw fail(source, 0, old ? m.oldForm(old.word, old.shape) : m.unknownHead(word));\n }\n switch (word) {\n case \"group\":\n readGroup(source);\n break;\n case \"end\":\n if (text !== word) throw fail(source, word.length, m.endTakesNothing);\n if (!group) throw fail(source, 0, m.strayEnd);\n group = undefined;\n break;\n case \"box\":\n readBox(source);\n break;\n case \"strip\":\n readStrip(source);\n break;\n case \"step\": {\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n const stepTitle = text.slice(word.length).trim();\n if (stepTitle === \"\") throw fail(source, 0, m.emptyStepTitle);\n building = { source, title: stepTitle, events: [] };\n break;\n }\n case \"say\":\n i = readSay(source, i);\n break;\n case \"code\": {\n const step = inStep(source);\n if (step.code !== undefined) throw fail(source, 0, m.codeTwice);\n const command = text.slice(word.length).trim();\n if (command === \"\") throw fail(source, 0, m.emptyCode);\n step.code = command;\n break;\n }\n case \"act\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.actShape);\n step.events.push({ type: \"action\", box: on.box, label: on.text });\n break;\n }\n case \"note\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.noteShape);\n step.events.push({ type: \"swap\", box: on.box, text: on.text });\n break;\n }\n case \"set\":\n inStep(source).events.push(readSet(source));\n break;\n }\n }\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n\n if (boxes.length === 0) throw fail(head, 0, m.noBoxes);\n if (steps.length === 0) throw fail(head, 0, m.noSteps);\n\n return {\n version: FORMAT_VERSION,\n kind,\n title,\n ...(view ? { view } : {}),\n ...(regions.length > 0 ? { regions } : {}),\n boxes,\n ...(strip ? { strip } : {}),\n steps,\n ...(kind === \"sequence\" ? { sequence: { lifelines: boxes.map((box) => box.id) } } : {}),\n };\n\n /** `group` の行。同じ名札をもう一度開いた時は、名前も属性も書かない */\n function readGroup(source: SourceLine): void {\n beforeSteps(source);\n if (group) throw fail(source, 0, m.nestedGroup);\n const declared = readDeclared(source, \"group\", ATTRS.group, m);\n if (regions.some((region) => region.id === declared.id)) {\n if (declared.name !== undefined || declared.attrs.size > 0) throw fail(source, 0, m.regionReopened(declared.id));\n } else {\n declare(source, declared.id, declared.idAt);\n regions.push({ id: declared.id, name: declared.name ?? declared.id, ...lookOf(source, declared.attrs, m) });\n }\n group = { source, id: declared.id };\n }\n\n /** `box` の行。開いている `group` の中なら、その区画に置く */\n function readBox(source: SourceLine): void {\n beforeSteps(source);\n const declared = readDeclared(source, \"box\", ATTRS.box, m);\n declare(source, declared.id, declared.idAt);\n const { note, ...look } = lookOf(source, declared.attrs, m);\n boxes.push({\n id: declared.id,\n name: declared.name ?? declared.id,\n ...(note !== undefined ? { sub: note } : {}),\n ...look,\n ...(group ? { region: group.id } : {}),\n });\n }\n\n /** `strip <題>: <欄>, <欄>` の行 */\n function readStrip(source: SourceLine): void {\n beforeSteps(source);\n if (strip) throw fail(source, 0, m.stripTwice);\n const text = source.text;\n const start = skipSpaces(text, \"strip\".length);\n let stripTitle: string;\n let colon: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n stripTitle = quoted.value;\n colon = skipSpaces(text, quoted.end);\n } else {\n colon = text.indexOf(\":\", start);\n stripTitle = colon < 0 ? \"\" : text.slice(start, colon).trim();\n }\n if (stripTitle === \"\" || text[colon] !== \":\") throw fail(source, 0, m.stripShape);\n strip = { title: stripTitle, fields: readList(source, colon + 1, m) };\n }\n\n /**\n * `say` の行と、その下に `say` より深く字下げして続けた行を段の本文にする。\n * 続きの行の間の空行は本文の空の行になる。返すのは読み終えた最後の行の番号。\n */\n function readSay(source: SourceLine, index: number): number {\n const step = inStep(source);\n if (step.body !== undefined) throw fail(source, 0, m.sayTwice);\n const inline = source.text.slice(\"say\".length).trim();\n const body = inline === \"\" ? [] : [inline];\n let blanks = 0;\n let last = index;\n for (let j = index + 1; j < rest.length; j++) {\n const next = rest[j];\n if (!next) break;\n if (next.text === \"\") {\n blanks++;\n continue;\n }\n if (next.indent <= source.indent) break;\n body.push(...Array.from({ length: blanks }, () => \"\"), next.text);\n blanks = 0;\n last = j;\n }\n if (body.length === 0) throw fail(source, 0, m.emptySay);\n step.body = body;\n return last;\n }\n\n /** `act <名札>: <字>` と `note <名札>: <字>` の行の、箱と字 */\n function readOnBox(source: SourceLine, word: \"act\" | \"note\", shape: string): { box: string; text: string } {\n const found = new RegExp(`^${word}\\\\s+([^\\\\s:]+)\\\\s*:\\\\s*(.*)$`, \"du\").exec(source.text);\n const idAt = found?.indices?.[1]?.[0];\n if (!found || idAt === undefined || (found[2] ?? \"\") === \"\") throw fail(source, 0, shape);\n return { box: boxAt(source, found[1] ?? \"\", idAt), text: found[2] ?? \"\" };\n }\n\n /** `<名札> -> <名札>: <線の名前> [<属性>]` の行 */\n function readEdge(source: SourceLine, edge: RegExpExecArray): DiagramEvent {\n const text = source.text;\n const from = boxAt(source, edge[1] ?? \"\", edge.indices?.[1]?.[0] ?? 0);\n const to = boxAt(source, edge[2] ?? \"\", edge.indices?.[2]?.[0] ?? 0);\n let at = skipSpaces(text, edge[0].length);\n let label: string | undefined;\n if (text[at] === \":\") {\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.emptyLabel);\n label = named.value;\n at = named.rest;\n }\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.edgeShape);\n const attrs = at < text.length ? readAttrs(source, at, ATTRS.edge, m) : new Map<string, Attr>();\n const tag = attrs.get(\"tag\");\n const carried = attrs.get(\"carry\");\n if (tag && carried) throw fail(source, Math.max(tag.at, carried.at), m.carryTwice);\n if (carried && !isOneOf(CARRIES, carried.value)) throw fail(source, carried.at, m.badCarry);\n const side = attrs.get(\"side\");\n if (side && !isOneOf(SIDES, side.value)) throw fail(source, side.at, m.badSide);\n let carry: Carry = { kind: \"envelope\" };\n if (tag) carry = { kind: \"tag\", text: tag.value };\n else if (carried) carry = carried.value === \"coin\" ? { kind: \"coin\" } : { kind: \"none\" };\n return {\n type: \"edge\",\n from,\n to,\n ...(label !== undefined ? { label } : {}),\n carry,\n ...(side ? { labelSide: side.value as LabelSide } : {}),\n };\n }\n\n /** `set <欄>: <値> [tag: <札>]` か `set <欄> [tag: <札>]` の行 */\n function readSet(source: SourceLine): DiagramEvent {\n const declared = strip;\n if (!declared) throw fail(source, 0, m.stripUndeclared);\n const text = source.text;\n const start = skipSpaces(text, \"set\".length);\n let field: string;\n let at: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n field = quoted.value;\n at = skipSpaces(text, quoted.end);\n } else {\n at = start;\n while (at < text.length && text[at] !== \":\" && text[at] !== \"[\") at++;\n field = text.slice(start, at).trim();\n }\n if (!declared.fields.includes(field)) throw fail(source, start, m.noSuchField(field));\n let value: string | undefined;\n if (text[at] === \":\") {\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.stripNeedsValue);\n value = named.value;\n at = named.rest;\n }\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.stripNeedsValue);\n const tag = at < text.length ? readAttrs(source, at, ATTRS.set, m).get(\"tag\")?.value : undefined;\n if (value === undefined && tag === undefined) throw fail(source, 0, m.stripNeedsValue);\n return {\n type: \"strip\",\n field,\n ...(value !== undefined ? { value } : {}),\n ...(tag !== undefined ? { tag } : {}),\n };\n }\n}\n\nexport function parseNotation(notation: string, options: ParseOptions = {}): Parsed {\n try {\n return { ok: true, diagram: parseLines(tokenize(notation), messagesFor(options.lang ?? \"ja\")) };\n } catch (error) {\n if (!(error instanceof NotationError)) throw error;\n return { ok: false, errors: [{ line: error.line, column: error.column, message: error.message }] };\n }\n}\n","#!/usr/bin/env node\n/**\n * `dragon export <図の file>` の命令。原本の JSON (`.json`) か記法 (`.dragon`) を読み、mp4、GIF、HTML、PNG を書き出す。\n * 書き出した file の path を 1 行ずつ出す。\n *\n * 使い方の文と誤りの文は、図の中の字と同じ言葉で出す (#3003)。`--lang` を渡せばその言葉、無ければ日本語。\n * dragon記法の語は英語だけで file から言葉が決まらないため、記法の file も JSON の原本と同じに扱う (#3137)。\n */\nimport { readFileSync } from \"node:fs\";\nimport { basename, extname, resolve } from \"node:path\";\nimport { parseArgs } from \"node:util\";\nimport { type ExportFormat, exportDiagram, FORMATS } from \"./export/index\";\nimport { PALETTES, type Theme } from \"./look/values\";\nimport { parseNotation } from \"./parser\";\nimport type { NotationLang } from \"./words\";\n\nconst OPTIONS = {\n out: { type: \"string\" },\n width: { type: \"string\" },\n palette: { type: \"string\" },\n theme: { type: \"string\" },\n lang: { type: \"string\" },\n fps: { type: \"string\" },\n \"gif-fps\": { type: \"string\" },\n format: { type: \"string\" },\n} as const;\n\ntype Values = Partial<Record<keyof typeof OPTIONS, string>>;\n\nconst THEMES: readonly Theme[] = [\"light\", \"dark\"];\n/** 色味の名前。使い方の文と `--palette` の値の確かめに使う */\nconst PALETTE_NAMES = Object.keys(PALETTES).join(\" / \");\n\ninterface CliText {\n usage: string;\n unknownOption: (name: string) => string;\n missingValue: (name: string) => string;\n extraFiles: (extra: string[]) => string;\n noFile: (path: string) => string;\n unreadable: (path: string, detail: string) => string;\n badJson: (path: string, detail: string) => string;\n cannotWrite: (path: string, detail: string) => string;\n badValue: (option: string, value: string, allowed: string) => string;\n /** 設定ごとの許す値の言い方 */\n allowed: { lang: string; theme: string; positive: string; format: string };\n}\n\n/** 命令が出す文。英語は日本語の文をそのまま英語にする */\nconst CLI_TEXT: Record<NotationLang, CliText> = {\n ja: {\n usage: [\n \"使い方: dragon export <図の file (.json か .dragon)> [設定]\",\n \" --out <dir> 書き出す先 (既定は今の dir)\",\n \" --width <px> 枠の幅。見せ方を選び、寄って見せる窓の幅になる\",\n ` --palette <名前> 色味 (${PALETTE_NAMES})`,\n \" --theme <明暗> light か dark\",\n \" --lang <言葉> 図の中の字と命令の文の言葉 (ja か en)。既定は ja\",\n \" --fps <数> mp4 の 1 秒のコマの数 (既定 30)\",\n \" --gif-fps <数> GIF の 1 秒のコマの数 (既定 10)\",\n \" --format <形> 書き出す形を , で区切る (既定 mp4,gif,html,png)\",\n ].join(\"\\n\"),\n unknownOption: (name) => `知らない設定: ${name}`,\n missingValue: (name) => `設定に値が無い: ${name}`,\n extraFiles: (extra) => `図の file は 1 つだけ渡す。余分な引数: ${extra.join(\" \")}`,\n noFile: (path) => `図の file が無い: ${path}`,\n unreadable: (path, detail) => `図の file を読めない: ${path} (${detail})`,\n badJson: (path, detail) => `JSON として読めない: ${path} (${detail})`,\n cannotWrite: (path, detail) => `書き出せない: ${path} (${detail})`,\n badValue: (option, value, allowed) => `使えない値: ${option} ${value} (${allowed})`,\n allowed: { lang: \"ja か en\", theme: \"light か dark\", positive: \"0 より大きい数\", format: `${FORMATS.join(\" / \")} を , で区切る` },\n },\n en: {\n usage: [\n \"Usage: dragon export <diagram file (.json or .dragon)> [options]\",\n \" --out <dir> Where to write (default: the current dir)\",\n \" --width <px> Frame width. Picks the view and sets the window width when following\",\n ` --palette <name> Colors (${PALETTE_NAMES})`,\n \" --theme <mode> light or dark\",\n \" --lang <lang> Language of the diagram text and command messages (ja or en). Defaults to ja\",\n \" --fps <n> Frames per second of the mp4 (default 30)\",\n \" --gif-fps <n> Frames per second of the GIF (default 10)\",\n \" --format <list> Formats to write, separated by , (default mp4,gif,html,png)\",\n ].join(\"\\n\"),\n unknownOption: (name) => `Unknown option: ${name}`,\n missingValue: (name) => `Option needs a value: ${name}`,\n extraFiles: (extra) => `Pass only one diagram file. Extra arguments: ${extra.join(\" \")}`,\n noFile: (path) => `No such diagram file: ${path}`,\n unreadable: (path, detail) => `Cannot read the diagram file: ${path} (${detail})`,\n badJson: (path, detail) => `Cannot read as JSON: ${path} (${detail})`,\n cannotWrite: (path, detail) => `Cannot write: ${path} (${detail})`,\n badValue: (option, value, allowed) => `Invalid value: ${option} ${value} (${allowed})`,\n allowed: { lang: \"ja or en\", theme: \"light or dark\", positive: \"a number above 0\", format: `${FORMATS.join(\" / \")} separated by ,` },\n },\n};\n\nconst isLang = (value: string | undefined): value is NotationLang => value === \"ja\" || value === \"en\";\n\nconst number = (value: string | undefined): number | undefined => (value === undefined ? undefined : Number(value));\n\nconst detail = (error: unknown): string => (error instanceof Error ? error.message : String(error));\n\n/** 設定を読む前に `--lang` の値を引く。設定の誤りの文も、選んだ言葉で出すため */\nfunction langOf(args: string[]): string | undefined {\n for (const [i, arg] of args.entries()) {\n if (arg === \"--lang\") return args[i + 1];\n if (arg.startsWith(\"--lang=\")) return arg.slice(\"--lang=\".length);\n }\n return undefined;\n}\n\n/**\n * 設定の誤りを、Node の文ではなく命令の言葉で返す。誤りが無ければ `undefined`。\n * 値の要る設定の後ろに `-` で始まる語が続く時は、その語を値と取り違えずに値が無いとみなす (Node も同じ形を断る)。\n */\nfunction optionProblem(args: string[], text: CliText): string | undefined {\n const { tokens } = parseArgs({ args, options: OPTIONS, allowPositionals: true, strict: false, tokens: true });\n for (const token of tokens) {\n if (token.kind !== \"option\") continue;\n if (!Object.hasOwn(OPTIONS, token.name)) return text.unknownOption(token.rawName);\n if (token.value === undefined || (!token.inlineValue && token.value.startsWith(\"-\"))) return text.missingValue(token.rawName);\n }\n return undefined;\n}\n\n/**\n * 設定の値を確かめ、使えない値を命令の言葉で返す。使えない値が無ければ `undefined` (#3011)。\n * 確かめないと、`--format xyz` は何も書き出さずに成功として終わり、`--theme blue` などは既定の値で黙って書き出す。\n */\nfunction valueProblem(values: Values, text: CliText): string | undefined {\n const bad = (name: keyof typeof OPTIONS, value: string, allowed: string): string => text.badValue(`--${name}`, value, allowed);\n if (values.lang !== undefined && !isLang(values.lang)) return bad(\"lang\", values.lang, text.allowed.lang);\n if (values.theme !== undefined && !THEMES.some((theme) => theme === values.theme)) return bad(\"theme\", values.theme, text.allowed.theme);\n if (values.palette !== undefined && !Object.hasOwn(PALETTES, values.palette)) return bad(\"palette\", values.palette, PALETTE_NAMES);\n if (values.format !== undefined && !values.format.split(\",\").every((format) => FORMATS.some((known) => known === format))) {\n return bad(\"format\", values.format, text.allowed.format);\n }\n for (const name of [\"width\", \"fps\", \"gif-fps\"] as const) {\n const value = values[name];\n if (value !== undefined && !(Number.isFinite(Number(value)) && Number(value) > 0)) return bad(name, value, text.allowed.positive);\n }\n return undefined;\n}\n\n/** Node が file か dir を扱えなかった誤りなら、扱えなかった path を返す。それ以外の誤りは `undefined` */\nfunction failedPath(error: unknown): string | undefined {\n if (!(error instanceof Error) || !(\"syscall\" in error) || !(\"path\" in error)) return undefined;\n return typeof error.path === \"string\" ? error.path : undefined;\n}\n\n/** 図の file を読む。記法の行の誤りは `lang` の言葉で出す */\nfunction read(file: string, text: CliText, lang: NotationLang): unknown {\n let source: string;\n try {\n source = readFileSync(file, \"utf8\");\n } catch (error) {\n const missing = error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n throw new Error(missing ? text.noFile(file) : text.unreadable(file, detail(error)));\n }\n if (extname(file) !== \".dragon\") {\n try {\n return JSON.parse(source);\n } catch (error) {\n throw new Error(text.badJson(file, detail(error)));\n }\n }\n const parsed = parseNotation(source, { lang });\n if (!parsed.ok) throw new Error(parsed.errors.map((e) => `${file}:${e.line} ${e.message}`).join(\"\\n\"));\n return parsed.diagram;\n}\n\nasync function main(argv: string[]): Promise<number> {\n const [command, ...rest] = argv;\n const chosen = langOf(argv);\n // file を読む前の文は、渡した言葉か日本語で出す。知らない言葉は日本語の使い方で断る\n const early = CLI_TEXT[isLang(chosen) ? chosen : \"ja\"];\n if (command !== \"export\") {\n console.error(early.usage);\n return 2;\n }\n const problem = optionProblem(rest, early);\n if (problem !== undefined) {\n console.error(`${problem}\\n${early.usage}`);\n return 2;\n }\n const { values, positionals } = parseArgs({ args: rest, options: OPTIONS, allowPositionals: true });\n const badValue = valueProblem(values, early);\n if (badValue !== undefined) {\n console.error(`${badValue}\\n${early.usage}`);\n return 2;\n }\n const [file, ...extra] = positionals;\n if (!file) {\n console.error(early.usage);\n return 2;\n }\n // 2 つ目以降を黙って捨てると、`--out` を書き忘れた時に思った所と違う所へ書き出す (#3007)\n if (extra.length > 0) {\n console.error(`${early.extraFiles(extra)}\\n${early.usage}`);\n return 2;\n }\n const width = number(values.width);\n const fps = number(values.fps);\n const gifFps = number(values[\"gif-fps\"]);\n // 言葉は渡した物だけで決める。渡さなければ、書き出しの既定 (日本語) になる\n const lang = isLang(chosen) ? chosen : undefined;\n const diagram = read(file, early, lang ?? \"ja\");\n let result: Awaited<ReturnType<typeof exportDiagram>>;\n try {\n result = await exportDiagram(diagram, {\n outDir: resolve(values.out ?? \".\"),\n name: basename(file, extname(file)),\n ...(values.format ? { formats: values.format.split(\",\") as ExportFormat[] } : {}),\n ...(width === undefined ? {} : { width }),\n ...(values.palette ? { palette: values.palette } : {}),\n ...(values.theme ? { theme: values.theme as Theme } : {}),\n ...(lang ? { lang } : {}),\n ...(fps === undefined ? {} : { fps }),\n ...(gifFps === undefined ? {} : { gifFps }),\n });\n } catch (error) {\n // 書き出し先に書けない時だけ命令の言葉で書き直す。描けない時と道具が無い時の断りは、書き出しが言葉に合わせて出す (#3009)\n const path = failedPath(error);\n if (path !== undefined) throw new Error(CLI_TEXT[lang ?? \"ja\"].cannotWrite(path, detail(error)));\n throw error instanceof Error ? error : new Error(String(error));\n }\n for (const path of Object.values(result.files)) console.log(path);\n return 0;\n}\n\nmain(process.argv.slice(2)).then(\n (code) => process.exit(code),\n (error: unknown) => {\n console.error(detail(error));\n process.exit(1);\n },\n);\n"]}
1
+ {"version":3,"sources":["../src/look/palettes.json","../src/look/fonts.ts","../src/look/values.ts","../src/figure-text.ts","../src/layout/measure.ts","../src/layout/scene.ts","../src/layout/architecture.ts","../src/layout/sequence.ts","../src/words.ts","../src/layout/state.ts","../src/field-messages.ts","../src/schemas/validate-diagram.js","../src/schema.ts","../src/version.ts","../src/timeline.ts","../src/render/icons.ts","../src/render/parts.ts","../src/render/motion.ts","../src/render/svg.ts","../src/view.ts","../src/player.ts","../src/export/capture.ts","../src/export/fonts.ts","../src/export/html.ts","../src/export/index.ts","../src/messages.ts","../src/tokenize.ts","../src/parser.ts","../src/cli.ts"],"names":["detail","text","edge","side","pad","at","label","path","action","badge","box","band","right","lane","strip","y","lifeline","bottom","side2","read","list","isEnd","ranges","ja","S","c","id","vh","mw","k","mh","bw","r","t","stage","plan","width","height","png","i","require_","createRequire","dirname","readFileSync","join","en","rest"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"clear\": {\n \"name\": \"澄んだ色\",\n \"note\": \"白い地に、中くらいの明るさの鮮やかな 6 色。今の見本帳の色\",\n \"light\": {\n \"page\": \"#f3f4f7\",\n \"bg\": \"#ffffff\",\n \"surf\": \"#ffffff\",\n \"sunk\": \"#f5f6f8\",\n \"ink\": \"#12141a\",\n \"ink2\": \"#3f4451\",\n \"mute\": \"#6b7180\",\n \"hair\": \"#12141a1c\",\n \"line\": \"#12141a40\",\n \"sh\": \"#101828\",\n \"on-c\": \"#ffffff\",\n \"c-blue\": \"#467deb\",\n \"t-blue\": \"#2e62ce\",\n \"c-amber\": \"#d28008\",\n \"t-amber\": \"#975b04\",\n \"c-green\": \"#0ea886\",\n \"t-green\": \"#07775e\",\n \"c-violet\": \"#6c3bb2\",\n \"t-violet\": \"#6c3bb2\",\n \"c-rose\": \"#ba3e40\",\n \"t-rose\": \"#b83c3f\",\n \"c-slate\": \"#5d6677\",\n \"t-slate\": \"#5d6677\",\n \"coin\": \"#e9b114\",\n \"coint\": \"#856300\",\n \"coinin\": \"#a8740c\",\n \"tint\": \"5%\",\n \"edge\": \"20%\",\n \"shA\": \".05\",\n \"shB\": \".08\",\n \"carry\": \"#65686f\"\n },\n \"dark\": {\n \"page\": \"#08090c\",\n \"bg\": \"#0d0e12\",\n \"surf\": \"#17191f\",\n \"sunk\": \"#121419\",\n \"ink\": \"#eceef3\",\n \"ink2\": \"#c4c8d2\",\n \"mute\": \"#9198a6\",\n \"hair\": \"#eceef31f\",\n \"line\": \"#eceef340\",\n \"sh\": \"#000000\",\n \"on-c\": \"#0d0e12\",\n \"c-blue\": \"#7e7ef6\",\n \"t-blue\": \"#989cfd\",\n \"c-amber\": \"#c78135\",\n \"t-amber\": \"#dd954b\",\n \"c-green\": \"#20ac7a\",\n \"t-green\": \"#35b986\",\n \"c-violet\": \"#695b9f\",\n \"t-violet\": \"#a79ae3\",\n \"c-rose\": \"#bc434b\",\n \"t-rose\": \"#fd7d81\",\n \"c-slate\": \"#9ba3b2\",\n \"t-slate\": \"#9da5b4\",\n \"coin\": \"#f0c040\",\n \"coint\": \"#f0c040\",\n \"coinin\": \"#9a6a0c\",\n \"tint\": \"6%\",\n \"edge\": \"19%\",\n \"shA\": \".45\",\n \"shB\": \".35\"\n }\n },\n \"paper\": {\n \"name\": \"紙と墨\",\n \"note\": \"生成りの紙の地に、藍 / 黄土 / 苔 / 葡萄 / 朱 / 鈍のくすんだ 6 色\",\n \"light\": {\n \"page\": \"#ece7dd\",\n \"bg\": \"#f9f6f0\",\n \"surf\": \"#fffcf6\",\n \"sunk\": \"#f2ede4\",\n \"ink\": \"#221e18\",\n \"ink2\": \"#4b453b\",\n \"mute\": \"#7b7366\",\n \"hair\": \"#221e181f\",\n \"line\": \"#221e1847\",\n \"sh\": \"#3a2a10\",\n \"on-c\": \"#fffcf6\",\n \"c-blue\": \"#487dd5\",\n \"t-blue\": \"#2d60b5\",\n \"c-amber\": \"#c38405\",\n \"t-amber\": \"#885a01\",\n \"c-green\": \"#57a271\",\n \"t-green\": \"#237143\",\n \"c-violet\": \"#904698\",\n \"t-violet\": \"#904698\",\n \"c-rose\": \"#a9513e\",\n \"t-rose\": \"#9f4836\",\n \"c-slate\": \"#6a645a\",\n \"t-slate\": \"#696359\",\n \"coin\": \"#d4a52a\",\n \"coint\": \"#7d5e05\",\n \"coinin\": \"#9a7016\",\n \"tint\": \"6%\",\n \"edge\": \"22%\",\n \"shA\": \".06\",\n \"shB\": \".07\",\n \"carry\": \"#68635c\"\n },\n \"dark\": {\n \"page\": \"#0e0d0b\",\n \"bg\": \"#15130f\",\n \"surf\": \"#1e1b17\",\n \"sunk\": \"#191612\",\n \"ink\": \"#ede6d8\",\n \"ink2\": \"#cbc2b1\",\n \"mute\": \"#9c9283\",\n \"hair\": \"#ede6d81f\",\n \"line\": \"#ede6d842\",\n \"sh\": \"#000000\",\n \"on-c\": \"#15130f\",\n \"c-blue\": \"#5785d5\",\n \"t-blue\": \"#76a6f9\",\n \"c-amber\": \"#be8802\",\n \"t-amber\": \"#d59e2f\",\n \"c-green\": \"#52aa71\",\n \"t-green\": \"#61b87e\",\n \"c-violet\": \"#90529b\",\n \"t-violet\": \"#d08edb\",\n \"c-rose\": \"#bb4e3d\",\n \"t-rose\": \"#f98672\",\n \"c-slate\": \"#a9a295\",\n \"t-slate\": \"#aca598\",\n \"coin\": \"#dcb24e\",\n \"coint\": \"#dcb24e\",\n \"coinin\": \"#8a6a14\",\n \"tint\": \"6%\",\n \"edge\": \"19%\",\n \"shA\": \".45\",\n \"shB\": \".35\"\n }\n },\n \"night\": {\n \"name\": \"夜の計器\",\n \"note\": \"青みの黒の地に、光る水色 / 琥珀 / 若緑 / 菫 / 桃 の 6 色。明るい側は青灰の地\",\n \"light\": {\n \"page\": \"#e9eef5\",\n \"bg\": \"#f6f9fc\",\n \"surf\": \"#ffffff\",\n \"sunk\": \"#eef3f8\",\n \"ink\": \"#0b1424\",\n \"ink2\": \"#34425a\",\n \"mute\": \"#64748b\",\n \"hair\": \"#0b14241c\",\n \"line\": \"#0b142440\",\n \"sh\": \"#0b1424\",\n \"on-c\": \"#ffffff\",\n \"c-blue\": \"#0385cd\",\n \"t-blue\": \"#086aa3\",\n \"c-amber\": \"#ba8e0f\",\n \"t-amber\": \"#7f5f04\",\n \"c-green\": \"#0a8857\",\n \"t-green\": \"#027449\",\n \"c-violet\": \"#5839ba\",\n \"t-violet\": \"#5839ba\",\n \"c-rose\": \"#dd4a94\",\n \"t-rose\": \"#b82375\",\n \"c-slate\": \"#64748b\",\n \"t-slate\": \"#56667c\",\n \"coin\": \"#eab308\",\n \"coint\": \"#7e6005\",\n \"coinin\": \"#a16207\",\n \"tint\": \"5%\",\n \"edge\": \"22%\",\n \"shA\": \".06\",\n \"shB\": \".09\",\n \"carry\": \"#596579\"\n },\n \"dark\": {\n \"page\": \"#060a12\",\n \"bg\": \"#0a101c\",\n \"surf\": \"#111a2a\",\n \"sunk\": \"#0d1522\",\n \"ink\": \"#e6edf7\",\n \"ink2\": \"#b8c4d6\",\n \"mute\": \"#8090a8\",\n \"hair\": \"#e6edf71c\",\n \"line\": \"#9fb3d145\",\n \"sh\": \"#000000\",\n \"on-c\": \"#0a101c\",\n \"c-blue\": \"#3884b6\",\n \"t-blue\": \"#62ace1\",\n \"c-amber\": \"#be8533\",\n \"t-amber\": \"#d59b4b\",\n \"c-green\": \"#3ba774\",\n \"t-green\": \"#4fb884\",\n \"c-violet\": \"#7d4ecd\",\n \"t-violet\": \"#b494fd\",\n \"c-rose\": \"#bc3a74\",\n \"t-rose\": \"#ff77ad\",\n \"c-slate\": \"#96a3b5\",\n \"t-slate\": \"#99a6b8\",\n \"coin\": \"#facc15\",\n \"coint\": \"#facc15\",\n \"coinin\": \"#a16207\",\n \"tint\": \"6%\",\n \"edge\": \"19%\",\n \"shA\": \".5\",\n \"shB\": \".4\"\n }\n }\n}\n","/**\n * 図が使う 2 つの字。どちらも package の依存として同梱する。\n *\n * 描いた SVG は字をこの 2 つの名前でしか名指さない。端末の字の名前を持たないので、\n * 同梱した字が読み込まれていない時に、端末の字へ黙って落ちて幅が変わることが無い。\n * 頁に字を読み込むのは `@cardenelabs/dragon/fonts` の入口 (`load-fonts.ts`) が持つ。\n */\nexport const FONTS = { sans: \"Noto Sans JP Variable\", mono: \"JetBrains Mono Variable\" } as const;\n\n/**\n * 和文の字の英数字と記号の幅 (1000 分率)。使う太さ (500 / 600 / 650 / 700) のうち一番広い値。\n * `scripts/font-widths.mjs` が同梱の字をブラウザに読ませて測った値で、字を上げた時は測り直して貼る。\n * 表に無い字のうち U+2E80 以降 (仮名と漢字と全角の記号) は全角 (1000) とする。\n */\nexport const SANS_ADVANCE: Readonly<Record<string, number>> = {\"0\":590,\"1\":590,\"2\":590,\"3\":590,\"4\":590,\"5\":590,\"6\":590,\"7\":590,\"8\":590,\"9\":590,\" \":228,\"!\":371,\"\\\"\":575,\"#\":590,\"$\":590,\"%\":963,\"&\":740,\"'\":325,\"(\":378,\")\":378,\"*\":507,\"+\":590,\",\":325,\"-\":371,\".\":325,\"/\":390,\":\":325,\";\":325,\"<\":590,\"=\":590,\">\":590,\"?\":514,\"@\":1007,\"A\":642,\"B\":682,\"C\":657,\"D\":715,\"E\":616,\"F\":586,\"G\":718,\"H\":758,\"I\":330,\"J\":568,\"K\":686,\"L\":579,\"M\":854,\"N\":750,\"O\":771,\"P\":668,\"Q\":771,\"R\":682,\"S\":624,\"T\":626,\"U\":748,\"V\":619,\"W\":915,\"X\":627,\"Y\":581,\"Z\":614,\"[\":378,\"\\\\\":390,\"]\":378,\"^\":590,\"_\":568,\"`\":626,\"a\":591,\"b\":644,\"c\":528,\"d\":645,\"e\":581,\"f\":372,\"g\":598,\"h\":640,\"i\":305,\"j\":306,\"k\":605,\"l\":315,\"m\":964,\"n\":641,\"o\":626,\"p\":645,\"q\":645,\"r\":437,\"s\":495,\"t\":421,\"u\":638,\"v\":576,\"w\":863,\"x\":562,\"y\":575,\"z\":512,\"{\":378,\"|\":297,\"}\":378,\"~\":590,\"…\":1000,\"−\":590,\"×\":1000,\"→\":1000,\"←\":1000,\"↑\":1000,\"↓\":1000,\"–\":545,\"—\":908,\"‘\":325,\"’\":325,\"“\":575,\"”\":575,\"°\":404,\"±\":1000,\"·\":593,\"•\":379};\n\n/** 等幅の字の幅 (1000 分率)。どの字も同じ幅。 */\nexport const MONO_ADVANCE = 600;\n\n/** 全角として数える字の始まり。仮名と漢字と全角の記号はここから後ろにある。 */\nexport const WIDE_FROM = 0x2e80;\n\nexport type Family = keyof typeof FONTS;\n\n/** 字の大きさを 1000 とした時の幅。上の表はこの単位で持つ。 */\nexport const EM = 1000;\n\n/** 1 字の幅 (1000 分率)。表に無い字は全角とする。 */\nexport function advance(ch: string, family: Family): number {\n if ((ch.codePointAt(0) ?? 0) >= WIDE_FROM) return EM;\n if (family === \"mono\") return MONO_ADVANCE;\n return SANS_ADVANCE[ch] ?? EM;\n}\n","/**\n * 図の見た目の値の表。色、字の大きさ、余白、動きの長さをここに 1 つにまとめる。\n *\n * 描く file (`layout/`、`render/`、`timeline.ts`、`view.ts`、`player.ts`) は色の値と字の大きさを\n * 直接書かず、この表から読む。値は見本帳 (`docs/design/base/`) の部品と同じにしてある。\n * 色味の値は見本帳の `palettes.json` の写しで、色味ごとに明るい背景と暗い背景で別の値を持つ。\n */\nimport palettes from \"./palettes.json\";\nimport { FONTS, type Family } from \"./fonts\";\n\nexport type Theme = \"light\" | \"dark\";\n\nexport interface Palette {\n id: string;\n name: string;\n note: string;\n light: Record<string, string>;\n dark: Record<string, string>;\n}\n\n/** 色味を指定しない時と、知らない名前を渡した時に使う色味。 */\nexport const DEFAULT_PALETTE = \"paper\";\n\nexport const PALETTES: Readonly<Record<string, Palette>> = Object.fromEntries(\n Object.entries(palettes as Record<string, Omit<Palette, \"id\">>).map(([id, p]) => [id, { id, ...p }]),\n);\n\n/** 名前から色味を引く。指定が無いか、知らない名前 (外した墨と朱の `ink` を含む) なら紙と墨。 */\nexport function resolvePalette(id?: string): Palette {\n const found = id !== undefined && Object.hasOwn(PALETTES, id) ? PALETTES[id] : undefined;\n return found ?? (PALETTES[DEFAULT_PALETTE] as Palette);\n}\n\n/** 色味の値を CSS の変数として並べる。 */\nexport function paletteVars(palette: Palette, theme: Theme): string {\n return Object.entries(palette[theme])\n .map(([key, value]) => `--${key}:${value}`)\n .join(\";\");\n}\n\n/** 字の変数。同梱した 2 つの字を 1 度だけ名指し、字を使う所はどれもこの変数を読む。 */\nexport const FONT_VARS = `--sans:\"${FONTS.sans}\";--mono:\"${FONTS.mono}\"`;\n\n/** 区画や箱を分ける色の役。灰 (slate) と硬貨 (coin) は分類の色として順に配らない。 */\nexport const COLOR_ORDER = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\"] as const;\nexport type ColorKey = (typeof COLOR_ORDER)[number] | \"slate\" | \"coin\";\n\nexport interface TextStyle {\n size: number;\n weight: number;\n family: Family;\n}\n\nconst text = (size: number, weight: number, family: Family = \"sans\"): TextStyle => ({ size, weight, family });\n\n/** 字の大きさと太さ。どれも 10.5 以上にする。 */\nexport const TYPE = {\n boxName: text(13, 650),\n boxSub: text(11, 500),\n boxSubStrong: text(11, 700),\n regionName: text(12.5, 700),\n regionNote: text(11, 500),\n label: text(11, 600, \"mono\"),\n labelJa: text(11, 650),\n action: text(11, 650),\n badge: text(10.5, 700, \"mono\"),\n carrier: text(10.5, 700, \"mono\"),\n carrierJa: text(10.5, 700),\n stripTitle: text(12.5, 700),\n fieldName: text(10.5, 600),\n fieldValue: text(12, 600, \"mono\"),\n fieldValueJa: text(12, 600),\n tag: text(10.5, 700),\n miniTitle: text(10.5, 700),\n stepTitle: text(15, 700),\n stepBody: text(13.5, 500),\n stepNo: text(13, 700, \"mono\"),\n button: text(14, 700),\n} as const;\n\n/** 置き場所と部品の大きさ。単位は図の座標 (字が原寸の時の px)。 */\nexport const LOOK = {\n /** 部品どうしの最小の隙間 */\n gap: 10,\n /** 図の外周の余白 */\n margin: 14,\n box: { h: 72, minW: 92, padX: 12, radius: 12, icon: 24, iconRadius: 7, iconY: -16, iconScale: 0.74, nameY: 12, subY: 27 },\n region: { pad: 18, gap: 10, radius: 14, inset: 14, icon: 24, iconRadius: 7, iconScale: 0.68, nameY: 58, line: 16, minH: 108 },\n architecture: { columns: 4, columnGap: 56, maxColumnGap: 160, rowGap: 44, labelRoom: 16 },\n sequence: { columnGap: 40, labelRoom: 16, firstRow: 22, rowGap: 14, stepGap: 8, minPitch: 40, tail: 18, selfW: 34, selfH: 18 },\n /**\n * 状態遷移図 (#3163)。状態は `columns` つずつ並べて次の段へ折り返し、段の間 (`rowGap`) の真ん中を、段をまたぐ線が通る。\n * `start` と `end` は始まりと終わりの印の半径と、印の中の丸の半径。`drop` は最初の状態の上端から始まりの印の中心まで、\n * `below` は状態の下端から終わりの印の中心まで、`beside` は状態の右端から右に置く終わりの印の中心まで、`text` は印の中心から字の左端まで。\n * `loop` は同じ状態へ戻る輪の幅と深さ。`side` は脇道の囲みの内側の余白、1 段目の上端との間、脇道へ入る線が横に通る所の囲みの下端からの離れ、\n * 点線の線が箱へ入る所を箱の端から離す幅。\n * `ghost` は脇道の点線の札で、絵柄を左に、名前と下の字を右に並べる (#3171)。`h` は札の高さ、`pad` は左右の余白、`gap` は絵柄と字の間、\n * `nameY` と `subY` は札の真ん中から名前と下の字の基準線まで。\n * `done` は出た状態の右上の済んだ印の半径と、箱の右上の角からの離れ。\n * `loop` の `samples` は同じ状態へ戻る弧を区切る点の数、`badgeAt` は弧の段の番号を弧の上端から深さのどこに置くかの割合。\n * `pastLabel` は段が終わった後に薄く残す線の名前の濃さ (#3171)\n */\n state: {\n columns: 4,\n columnGap: 64,\n rowGap: 108,\n labelRoom: 16,\n start: 7,\n end: { r: 9, inner: 5 },\n drop: 56,\n below: 64,\n beside: 38,\n text: 16,\n loop: { w: 24, h: 34, samples: 12, badgeAt: 0.6 },\n side: { pad: 16, gap: 76, lane: 30, entry: 28 },\n ghost: { h: 52, pad: 12, gap: 10, nameY: -2, subY: 14 },\n done: { r: 6.5, inset: 13 },\n pastLabel: 0.85,\n },\n /** `bend` は線の曲がりを丸める半径 (#3171) */\n edge: { inset: 3, arrow: 6, arrowHalf: 3.5, parallel: 5, ghostDash: 5, flowDash: 9, bend: 12 },\n label: { h: 20, padX: 9, radius: 10, offset: 22, side: 14, search: 4, searchMax: 400, soft: 6 },\n action: { h: 22, padX: 10, radius: 11 },\n badge: { r: 9.5, ring: 9, inset: 4, along: 14, short: 44 },\n carrier: { envW: 24, envH: 17, coinR: 6.5, coinIn: 3.8, tagH: 18, tagPadX: 8, samples: 16 },\n /**\n * `trail` は状態遷移図の帯の最後の、通った状態の点 (#3171)。`r` は点の半径、`step` は点の中心どうしの間、`now` は変わった値の欄の名前の横の点の半径と、名前からの離れ\n */\n strip: { h: 72, line: 44, pad: 12, icon: 24, titleX: 44, fieldGap: 22, sepInset: 14, tagGap: 6, tagH: 15, tagPadX: 7, nameY: 22, valueY: 43, trail: { r: 5.4, step: 16 }, now: { r: 3, gap: 7 } },\n stroke: { hair: 1, edge: 1.7, edgeOn: 2.25, arrow: 1.5, flow: 1.3, halo: 7, on: 1.75, glyph: 2, lifeline: 1.2, envelope: 1.5, badgeRing: 1.5, path: 1.6, end: 1.6, done: 1.2, trail: 1.2 },\n shadow: { near: 0.8, far: 4, nearY: 1, farY: 3 },\n mini: { w: 168, pad: 8, title: 14, inset: 12, radius: 10 },\n /**\n * 寄って追う見せ方の窓の高さの、幅に対する割合と下限。\n * `fitMinH` は見える高さに収める時 (#3047) の窓の高さの下限で、これより低い枠では収めずに枠の中で送る。\n * `narrow` は縦長の全体図を出す枠の幅の下限で、これより狭い枠 (携帯の幅) では全体図を出さずに窓へ幅を渡す (#3055)。\n * `badgeRoom` は番号の丸が窓から外れる段で窓を寄せ直す時に、丸の周りに空ける幅 (#3046)。\n * `headRoom` は時系列図の図の頭の箱の下端から、窓に線を見せ始める所までの幅 (#3118)。\n * `head` は時系列図の窓の上端に貼る頭の列の頭の箱で、アイコンを外した名前と下の字の 2 段 (#3120)。\n * `pad` は頭の列の上下の余白、`h` は箱の高さ、`nameY` と `subY` は箱の上端から名前と下の字の基準線まで\n */\n follow: { aspect: 0.75, minH: 320, fitMinH: 160, ease: 0.6, narrow: 440, badgeRoom: 8, headRoom: 10, head: { pad: 8, h: 40, nameY: 17, subY: 31 } },\n /** 色を混ぜる割合 (%) */\n mix: { icon: 14, regionIcon: 16, regionIconEdge: 34, cap: 12, capEdge: 42, badgePast: 14, badgePastEdge: 70, mini: 62, miniBand: 16, miniBandEdge: 36, view: 6, side: 4, sideEdge: 36, ghostEdge: 60, path: 55, past: 72 },\n /** 字の並びの基準線を、置きたい高さの真ん中からどれだけ下げるか */\n baseline: { label: 3.8, badge: 3.5, carrier: 3.7, stripTitle: 4.5, tag: 3.6, action: 3.8, mark: 4 },\n /** 浮いて出る物が下から上がる長さと、弾んで出る物の始まりの大きさ */\n rise: 5,\n popFrom: 0.4,\n /**\n * 動きを嫌わない人の頁の部品。\n * `narrow` は段の本文の帯を横 1 列に並べる帯の中身の幅の下限で、これより狭い帯 (携帯の幅) では題と本文を釦と番号の段の下に置く (#3057、#3069)。\n * `touch` はその狭い帯で段を送る釦の縦横で、指で押せる大きさにする (#3069)\n */\n player: { gap: 10, radius: 12, button: 36, touch: 44, hidden: 1, focus: 2, narrow: 440 },\n} as const;\n\n/** 動きの長さ (秒)。 */\nexport const MOTION = {\n /** 最初の段の前に全体を見せる長さ */\n intro: 1.4,\n /** 最後の段の後に全体を見せる長さ */\n outro: 4.6,\n /** 繰り返す前に消えていく長さ */\n tail: 0.6,\n /** 段の長さ。本文の字数で伸ばし、段で起きることが全部見えてから dwell 秒は留める */\n stepBase: 1.2,\n perChar: 0.025,\n stepMin: 2.2,\n stepMax: 5,\n dwell: 1.2,\n /** 段の中で最初の線を引き始めるまでと、続く線を引き始める間 */\n edgeAt: 0.1,\n stagger: 0.5,\n /** 線を引く長さ。運ぶ物を載せた線は運ぶ物が走るので長い */\n draw: 0.55,\n drawCarry: 0.9,\n /** 処理を読む間 (次の線と書き換えはこれだけ待つ) と、書き換えが続く間 */\n action: 0.9,\n change: 0.12,\n /** 箱の下の字が見えている短さの下限。これより早く次の字に替わる字は出さない */\n minShow: 0.8,\n /** 線の名前が線より遅れて出る長さと、出入りの長さ */\n labelDelay: 0.15,\n fade: 0.3,\n popFade: 0.4,\n untilFade: 0.2,\n /** 段の止め絵を撮る時刻を、段の終わりからどれだけ前にするか */\n still: 0.45,\n /** 状態遷移図で、札が状態を出てから済んだ印が出るまで */\n done: 0.3,\n} as const;\n\n/** 見せ方を決める字の大きさ。全体を枠に収めた時の箱の名前がこれを下回ると寄って追う。 */\nexport const READABLE_PX = 10.5;\n\n/** 動きの緩急。 */\nexport const EASE = {\n inOut: \"cubic-bezier(.65,0,.35,1)\",\n out: \"cubic-bezier(.22,1,.36,1)\",\n pop: \"cubic-bezier(.34,1.56,.64,1)\",\n} as const;\n","/**\n * 描く部品が出す字 (#3001)。\n *\n * 図の原本は語を持たないので、呼ぶ側が言葉を渡す。渡さなければ日本語で出す。\n * 頁は頁の言葉を、`dragon export` は `--lang` の言葉 (渡さなければ日本語) を渡す。\n */\nimport type { NotationLang } from \"./words\";\n\nexport interface FigureText {\n /** 描けない時の断りの文。`detail` は誤りの場所と文を並べた物 */\n cannotDraw: (detail: string) => string;\n /** 寄って動かす見せ方の、隅の全体図の札 */\n overview: string;\n /** 再生の釦の読み上げの名前 */\n prev: string;\n pause: string;\n play: string;\n next: string;\n /** 段の一覧の読み上げの名前 */\n steps: (title: string) => string;\n /** 状態遷移図の脇道の囲みの名前と添え書き (#3163)。添え書きの 2 行目は脇道へ入れる状態の数を言う (#3171) */\n side: string;\n sideNote: string;\n sideFrom: (count: number) => string;\n /** 状態遷移図の帯の最後の、通った状態の欄の名前 (#3171) */\n trail: string;\n /** 状態遷移図の始まりと終わりの印の字 */\n start: string;\n end: string;\n}\n\nexport const FIGURE_TEXT: Record<NotationLang, FigureText> = {\n ja: {\n cannotDraw: (detail) => `図を描けない: ${detail}`,\n overview: \"全体図\",\n prev: \"前の段\",\n pause: \"止める\",\n play: \"動かす\",\n next: \"次の段\",\n steps: (title) => `${title} の段`,\n side: \"脇道\",\n sideNote: \"今回は通らない\",\n sideFrom: (count) => `${count} つの状態から入れる`,\n trail: \"通った状態\",\n start: \"始まり\",\n end: \"終わり\",\n },\n en: {\n cannotDraw: (detail) => `Cannot draw the diagram: ${detail}`,\n overview: \"Overview\",\n prev: \"Previous step\",\n pause: \"Pause\",\n play: \"Play\",\n next: \"Next step\",\n steps: (title) => `Steps of ${title}`,\n side: \"Side path\",\n sideNote: \"Not taken this time\",\n sideFrom: (count) => `Enterable from ${count} ${count === 1 ? \"state\" : \"states\"}`,\n trail: \"States passed\",\n start: \"Start\",\n end: \"End\",\n },\n};\n","/**\n * 字の幅を、同梱した字の送り幅の表で測る。描かずに測るので、頁の無い所 (node) でも同じ値になる。\n */\nimport { advance, EM, type Family } from \"../look/fonts\";\nimport type { TextStyle } from \"../look/values\";\n\n/** 和文 (CJK) の字を含むか。等幅の字は和文を持たないので、含む字は Noto Sans JP で描く。 */\nexport const hasWide = (text: string): boolean => [...text].some((ch) => (ch.codePointAt(0) ?? 0) >= 0x2e80);\n\n/** 等幅を望む字でも、和文を含めば和文の字で描く。 */\nexport function familyFor(text: string, preferred: Family): Family {\n return preferred === \"mono\" && hasWide(text) ? \"sans\" : preferred;\n}\n\n/** 1 行の字の幅。 */\nexport function textWidth(text: string, style: TextStyle): number {\n const family = familyFor(text, style.family);\n let sum = 0;\n for (const ch of text) sum += advance(ch, family);\n return (sum * style.size) / EM;\n}\n","/**\n * 置き場所を決めた結果 (場面) の形と、図の種類に依らず使う置き方。\n *\n * 座標は字が原寸の時の px で、左上を (0, 0) にする。線の名前は線の脇から箱を避けて置き、\n * 中身の帯は図の下に横いっぱいに置く。\n */\nimport type { Family } from \"../look/fonts\";\nimport { COLOR_ORDER, type ColorKey, LOOK, TYPE } from \"../look/values\";\nimport type { Carry, Diagram, DiagramEvent, LabelSide } from \"../schema\";\nimport { hasWide, textWidth } from \"./measure\";\n\nexport type Point = [number, number];\n\nexport interface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface SceneBox extends Rect {\n id: string;\n name: string;\n sub?: string;\n icon?: string;\n color: ColorKey;\n cx: number;\n cy: number;\n /** 状態遷移図で、どの段も辿り着かない状態。点線の箱で脇道の囲みに描く */\n ghost?: boolean;\n}\n\nexport interface SceneRegion extends Rect {\n id: string;\n /** 名前を折り返した行 */\n lines: string[];\n note?: string;\n icon?: string;\n color: ColorKey;\n /** 名前と印が占める所 */\n header: Rect;\n}\n\n/** 線。`step` と `event` は原本の `steps[step].events[event]` を指す。 */\nexport interface SceneEdge {\n step: number;\n event: number;\n from: string;\n to: string;\n points: Point[];\n color: ColorKey;\n carry: Carry;\n /** 着いた運ぶ物が留まる点。無ければ線の終わり */\n settle?: Point;\n}\n\nexport interface SceneLabel extends Rect {\n step: number;\n event: number;\n text: string;\n family: Family;\n color: ColorKey;\n}\n\n/** 状態遷移図の、最初の段より前に書いてどの段にも出ない線。点線で描き、運ぶ物を走らせない */\nexport interface ScenePath {\n from: string;\n to: string;\n points: Point[];\n label?: Rect & { text: string; family: Family };\n}\n\n/** 状態遷移図の始まりと終わりの印。`ghost` は脇道の中の終わりの印 */\nexport interface SceneEnd {\n kind: \"start\" | \"finish\";\n x: number;\n y: number;\n r: number;\n ghost: boolean;\n /** 印の右に添える字 */\n text: string;\n /** 終わりの印へ線を引く状態 */\n box?: string;\n}\n\n/** 状態遷移図の脇道の囲み。`title` と `notes` は囲みの左上に置く字 */\nexport interface SceneSide extends Rect {\n title: string;\n /** 囲みの名前の下に 1 行ずつ置く添え書き */\n notes: string[];\n}\n\n/** 時系列図の箱の中の処理。生存線の上に札で出す。 */\nexport interface SceneAction extends Rect {\n step: number;\n event: number;\n box: string;\n text: string;\n color: ColorKey;\n}\n\nexport interface SceneBadge {\n step: number;\n x: number;\n y: number;\n color: ColorKey;\n}\n\nexport interface SceneLifeline {\n id: string;\n x: number;\n y1: number;\n y2: number;\n}\n\nexport interface SceneField {\n name: string;\n x: number;\n y: number;\n w: number;\n}\n\n/** 状態遷移図の帯の最後の欄。段が辿り着く順に状態を点で並べ、着いた状態を塗る (#3171) */\nexport interface SceneTrail {\n title: string;\n states: { box: string; color: ColorKey }[];\n x: number;\n y: number;\n w: number;\n}\n\nexport interface SceneStrip extends Rect {\n title: string;\n fields: SceneField[];\n trail?: SceneTrail;\n}\n\nexport interface Layout {\n kind: Diagram[\"kind\"];\n width: number;\n height: number;\n regions: SceneRegion[];\n boxes: SceneBox[];\n lifelines: SceneLifeline[];\n edges: SceneEdge[];\n labels: SceneLabel[];\n actions: SceneAction[];\n badges: SceneBadge[];\n strip?: SceneStrip;\n /** 状態遷移図の通らない道。他の図の種類では空 */\n paths: ScenePath[];\n /** 状態遷移図の始まりと終わりの印。他の図の種類では空 */\n ends: SceneEnd[];\n /** 状態遷移図の脇道の囲み。通らない状態が無ければ無い */\n side?: SceneSide;\n}\n\nexport type EdgeEvent = Extract<DiagramEvent, { type: \"edge\" }>;\n\n/** 段と線の位置を添えた線の並び。段の順、段の中は起きる順。 */\nexport function edgesOf(diagram: Diagram): { step: number; event: number; edge: EdgeEvent }[] {\n return diagram.steps.flatMap((step, s) =>\n step.events.flatMap((event, e) => (event.type === \"edge\" ? [{ step: s, event: e, edge: event }] : [])),\n );\n}\n\n/** 箱の色。書いていなければ区画の色、区画も無ければ並んだ順に分類の色を配る。 */\nexport function boxColors(diagram: Diagram): Map<string, ColorKey> {\n const regions = regionColors(diagram);\n const colors = new Map<string, ColorKey>();\n diagram.boxes.forEach((box, i) => {\n const fromRegion = box.region === undefined ? undefined : regions.get(box.region);\n colors.set(box.id, box.color ?? fromRegion ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey));\n });\n return colors;\n}\n\nexport function regionColors(diagram: Diagram): Map<string, ColorKey> {\n const colors = new Map<string, ColorKey>();\n (diagram.regions ?? []).forEach((region, i) => colors.set(region.id, region.color ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey)));\n return colors;\n}\n\n/** 線の色。硬貨を運ぶ線は硬貨の色、それ以外は送る側の箱の色。 */\nexport const edgeColor = (edge: EdgeEvent, colors: Map<string, ColorKey>): ColorKey =>\n edge.carry.kind === \"coin\" ? \"coin\" : (colors.get(edge.from) ?? \"slate\");\n\n/** 箱の幅。名前、下の小さな字、書き換わる字、中で出す処理のどれもが収まる幅。 */\nexport function boxWidth(diagram: Diagram, id: string, withActions: boolean): number {\n const box = diagram.boxes.find((b) => b.id === id);\n if (!box) return LOOK.box.minW;\n const lines = [textWidth(box.name, TYPE.boxName), textWidth(box.sub ?? \"\", TYPE.boxSub)];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type === \"swap\" && event.box === id) lines.push(textWidth(event.text, TYPE.boxSubStrong));\n if (withActions && event.type === \"action\" && event.box === id) lines.push(textWidth(event.label, TYPE.boxSubStrong));\n }\n }\n return Math.max(LOOK.box.minW, Math.max(...lines) + LOOK.box.padX * 2);\n}\n\n/** 2 つの四角の隙間。重なる時は負。縦か横のどちらかで離れていれば、その離れ方の大きい方。 */\nexport function gapBetween(a: Rect, b: Rect): number {\n const dx = Math.max(b.x - (a.x + a.w), a.x - (b.x + b.w));\n const dy = Math.max(b.y - (a.y + a.h), a.y - (b.y + b.h));\n return Math.max(dx, dy);\n}\n\n/** 折れ線のうち一番長い区間。 */\nexport function longest(points: Point[]): { a: Point; b: Point; vertical: boolean } {\n let best = { a: points[0] as Point, b: (points[1] ?? points[0]) as Point, length: -1 };\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (length > best.length) best = { a, b, length };\n }\n return { a: best.a, b: best.b, vertical: Math.abs(best.b[0] - best.a[0]) < Math.abs(best.b[1] - best.a[1]) };\n}\n\n/** 折れ線の長さと、始まりから `distance` 進んだ点。 */\nexport function along(points: Point[], distance: number): Point {\n let left = distance;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (left <= length && length > 0) return [a[0] + ((b[0] - a[0]) * left) / length, a[1] + ((b[1] - a[1]) * left) / length];\n left -= length;\n }\n return points[points.length - 1] as Point;\n}\n\nexport function pathLength(points: Point[]): number {\n let sum = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n sum += Math.hypot(b[0] - a[0], b[1] - a[1]);\n }\n return sum;\n}\n\n/** 段の番号を置く点。線の始まりから少し進んだ所。短い線は始まりに置くと箱と重なるので中ほど。 */\nexport function badgeOnPath(points: Point[]): Point {\n const length = pathLength(points);\n return along(points, length < LOOK.badge.short ? length / 2 : LOOK.badge.along);\n}\n\nexport interface LabelRequest {\n step: number;\n event: number;\n text: string;\n points: Point[];\n side?: LabelSide;\n color: ColorKey;\n}\n\nexport interface Obstacles {\n /** 10px 以上離す物 (箱) */\n hard: Rect[];\n /** 重ならなければよい物 (区画の名前、同じ段の線の名前) */\n soft: Rect[];\n}\n\nexport const labelStyle = (text: string) => (hasWide(text) ? TYPE.labelJa : TYPE.label);\n\n/**\n * 線の名前を置く。線の一番長い区間の中ほどから、寄せの指示の側 (無ければ横の線は上、縦の線は右) へ\n * 離して置く。箱や区画の名前に掛かる時は、指示の側へさらに離し、線に沿ってもずらして空きを探す。\n */\nexport function placeLabel(request: LabelRequest, obstacles: Obstacles): SceneLabel {\n const w = textWidth(request.text, labelStyle(request.text)) + LOOK.label.padX * 2;\n const h = LOOK.label.h;\n const segment = longest(request.points);\n const mx = (segment.a[0] + segment.b[0]) / 2;\n const my = (segment.a[1] + segment.b[1]) / 2;\n const side = request.side ?? (segment.vertical ? \"right\" : \"above\");\n const { offset, side: sideGap } = LOOK.label;\n const base: Rect =\n side === \"above\"\n ? { x: mx - w / 2, y: my - offset - h / 2, w, h }\n : side === \"below\"\n ? { x: mx - w / 2, y: my + offset - h / 2, w, h }\n : side === \"left\"\n ? { x: mx - sideGap - w, y: my - h / 2, w, h }\n : { x: mx + sideGap, y: my - h / 2, w, h };\n // 離す向き (指示の側) と、ずらす向き (それに直交する向き)\n const away: Point = side === \"above\" ? [0, -1] : side === \"below\" ? [0, 1] : side === \"left\" ? [-1, 0] : [1, 0];\n const slideAxis: Point = [Math.abs(away[1]), Math.abs(away[0])];\n const slideMax = side === \"above\" || side === \"below\" ? w : h * 4;\n const clear = (rect: Rect): boolean =>\n obstacles.hard.every((box) => gapBetween(rect, box) >= LOOK.gap) && obstacles.soft.every((other) => gapBetween(rect, other) >= LOOK.label.soft);\n const { search, searchMax } = LOOK.label;\n for (let d = 0; d <= searchMax; d += search) {\n for (let s = 0; s <= slideMax; s += search) {\n for (const sign of s === 0 ? [1] : [1, -1]) {\n const rect = { x: base.x + away[0] * d + slideAxis[0] * s * sign, y: base.y + away[1] * d + slideAxis[1] * s * sign, w, h };\n if (clear(rect)) return { ...rect, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n }\n }\n }\n return { ...base, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n}\n\n/** 中身の帯の欄の幅。欄の名前と、入る値と札を並べた最も長い形が収まる幅。 */\nfunction fieldWidth(diagram: Diagram, name: string): number {\n let value = 0;\n let tag = 0;\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"strip\" || event.field !== name) continue;\n if (event.value !== undefined) value = Math.max(value, textWidth(event.value, hasWide(event.value) ? TYPE.fieldValueJa : TYPE.fieldValue));\n if (event.tag !== undefined) tag = Math.max(tag, textWidth(event.tag, TYPE.tag) + LOOK.strip.tagPadX * 2);\n }\n }\n const both = value + (tag > 0 ? (value > 0 ? LOOK.strip.tagGap : 0) + tag : 0);\n return Math.max(textWidth(name, TYPE.fieldName), both);\n}\n\n/** 帯の最後に並べる通った状態の欄の名前と点。状態遷移図だけが渡す */\nexport type TrailSource = Pick<SceneTrail, \"title\" | \"states\">;\n\nconst trailWidth = (trail: TrailSource): number => Math.max(textWidth(trail.title, TYPE.fieldName), trail.states.length * LOOK.strip.trail.step);\n\n/** 1 行に並べた時に帯が要る幅。 */\nexport function stripNeed(diagram: Diagram, trail?: TrailSource): number {\n if (!diagram.strip) return 0;\n const { titleX, fieldGap, pad } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n const widths = [...diagram.strip.fields.map((name) => fieldWidth(diagram, name)), ...(trail ? [trailWidth(trail)] : [])];\n return start + widths.reduce((sum, w) => sum + w + fieldGap, 0) - fieldGap + pad;\n}\n\n/** 中身の帯。欄は左から並べ、幅に収まらない欄は次の行へ送る。通った状態の欄を渡すと、最後の欄の後に同じ決まりで置く。 */\nexport function layoutStrip(diagram: Diagram, x: number, y: number, width: number, trail?: TrailSource): SceneStrip | undefined {\n if (!diagram.strip) return undefined;\n const { titleX, fieldGap, pad, line, h } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n const fields: SceneField[] = [];\n let cx = start;\n let row = 0;\n const place = (w: number): { x: number; y: number } => {\n if (cx > start && cx + w > width - pad) {\n cx = start;\n row++;\n }\n const at = { x: x + cx, y: y + row * line };\n cx += w + fieldGap;\n return at;\n };\n for (const name of diagram.strip.fields) {\n const w = fieldWidth(diagram, name);\n fields.push({ name, ...place(w), w });\n }\n const laidTrail = trail ? { ...trail, ...place(trailWidth(trail)), w: trailWidth(trail) } : undefined;\n return { x, y, w: width, h: h + row * line, title: diagram.strip.title, fields, ...(laidTrail ? { trail: laidTrail } : {}) };\n}\n\n/** 場面の全ての物を (dx, dy) だけ動かす。区画と帯は動かさず、横いっぱいの形を保つ。 */\nexport function shiftContent(layout: Layout, dx: number, dy: number): void {\n const move = (rect: Rect): void => {\n rect.x += dx;\n rect.y += dy;\n };\n for (const box of layout.boxes) {\n move(box);\n box.cx += dx;\n box.cy += dy;\n }\n for (const region of layout.regions) {\n region.y += dy;\n move(region.header);\n }\n for (const line of layout.lifelines) {\n line.x += dx;\n line.y1 += dy;\n line.y2 += dy;\n }\n for (const edge of layout.edges) {\n edge.points = edge.points.map(([px, py]) => [px + dx, py + dy]);\n if (edge.settle) edge.settle = [edge.settle[0] + dx, edge.settle[1] + dy];\n }\n for (const label of layout.labels) move(label);\n for (const path of layout.paths) {\n path.points = path.points.map(([px, py]) => [px + dx, py + dy]);\n if (path.label) move(path.label);\n }\n for (const end of layout.ends) {\n end.x += dx;\n end.y += dy;\n }\n if (layout.side) move(layout.side);\n for (const action of layout.actions) move(action);\n for (const badge of layout.badges) {\n badge.x += dx;\n badge.y += dy;\n }\n if (layout.strip) {\n layout.strip.y += dy;\n for (const field of layout.strip.fields) {\n field.x += dx;\n field.y += dy;\n }\n if (layout.strip.trail) {\n layout.strip.trail.x += dx;\n layout.strip.trail.y += dy;\n }\n }\n}\n\n/** 線も処理も無い段の番号。書き換わる箱の左上か、中身の帯の左上か、最初の箱の左上。 */\nexport function cornerBadge(events: DiagramEvent[], step: number, layout: Layout): SceneBadge {\n const { inset } = LOOK.badge;\n for (const event of events) {\n const id = event.type === \"swap\" || event.type === \"action\" ? event.box : undefined;\n const box = layout.boxes.find((b) => b.id === id);\n if (box) return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n }\n if (layout.strip && events.some((event) => event.type === \"strip\")) return { step, x: layout.strip.x + inset, y: layout.strip.y + inset, color: \"slate\" };\n const box = layout.boxes[0] as SceneBox;\n return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n}\n","/**\n * 構成図の置き場所。\n *\n * 区画を上から帯に積み、帯の左に区画の名前を置く。箱は全ての帯で共通の列に並べるので、\n * 区画をまたぐ線は縦にまっすぐ走る。箱の並びは線を辿って決める。前の区画の箱から線が来る箱を\n * その箱の列に置き、そこから線で繋がる箱を隣の列へ (寄せの指示が左か右なら下の行へ) 置いていく。\n * 線は縦と横の折れ線で、間にある箱を避ける。名前が箱に掛かる時は帯を広げて名前の場所を空ける。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram, LabelSide, Region } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n boxWidth,\n cornerBadge,\n edgeColor,\n edgesOf,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type Rect,\n regionColors,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n type SceneRegion,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\ninterface Group {\n region?: Region;\n members: string[];\n}\n\ninterface Slot {\n group: number;\n col: number;\n row: number;\n}\n\ninterface Room {\n top: number;\n bottom: number;\n}\n\nexport function layoutArchitecture(diagram: Diagram): Layout {\n const groups = groupsOf(diagram);\n const slots = placeBoxes(diagram, groups);\n const rooms = groups.map(() => ({ top: 0, bottom: 0 }));\n let layout = arrange(diagram, groups, slots, rooms);\n // 名前を置く場所が帯の外へ出たら、その帯を広げて置き直す\n for (let pass = 0; pass < 3 && grow(layout, groups, slots, rooms); pass++) layout = arrange(diagram, groups, slots, rooms);\n return layout;\n}\n\nfunction groupsOf(diagram: Diagram): Group[] {\n const regions = diagram.regions ?? [];\n const known = new Set(regions.map((r) => r.id));\n const groups: Group[] = regions.map((region) => ({ region, members: diagram.boxes.filter((b) => b.region === region.id).map((b) => b.id) }));\n const loose = diagram.boxes.filter((b) => b.region === undefined || !known.has(b.region)).map((b) => b.id);\n if (loose.length > 0) groups.push({ members: loose });\n return groups;\n}\n\nconst vertical = (side: LabelSide | undefined): boolean => side === \"left\" || side === \"right\";\n\n/** 箱を列と行へ置く。列は全ての区画で共通。 */\nfunction placeBoxes(diagram: Diagram, groups: Group[]): Map<string, Slot> {\n const columns = LOOK.architecture.columns;\n const edges = edgesOf(diagram).map((e) => e.edge);\n const slots = new Map<string, Slot>();\n groups.forEach((group, g) => {\n const inGroup = new Set(group.members);\n const taken = new Set<string>();\n const free = (col: number, row: number): boolean => col >= 0 && col < columns && !taken.has(`${col},${row}`);\n const near = (col: number, row: number): [number, number] => {\n const start = Math.min(columns - 1, Math.max(0, col));\n for (let r = row; ; r++) {\n for (let d = 0; d < columns; d++) {\n for (const c of [start + d, start - d]) if (free(c, r)) return [c, r];\n }\n }\n };\n const put = (id: string, col: number, row: number): void => {\n slots.set(id, { group: g, col, row });\n taken.add(`${col},${row}`);\n };\n let dir = 1;\n const visit = (id: string): void => {\n for (const edge of edges) {\n const partner = edge.from === id ? edge.to : edge.to === id ? edge.from : undefined;\n if (partner === undefined || !inGroup.has(partner) || slots.has(partner)) continue;\n const me = slots.get(id) as Slot;\n const [c, r] = vertical(edge.labelSide) ? near(me.col, me.row + 1) : free(me.col + dir, me.row) ? [me.col + dir, me.row] : near(me.col + dir, me.row);\n put(partner, c, r);\n visit(partner);\n }\n };\n // 前の区画の箱と線で繋がる箱 (起きる順に早い線から) をその箱の列に置き、そこから辿る\n const anchorOf = (id: string): { order: number; col: number } | undefined => {\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i];\n const partner = edge?.from === id ? edge.to : edge?.to === id ? edge.from : undefined;\n const slot = partner === undefined ? undefined : slots.get(partner);\n if (slot && slot.group < g) return { order: i, col: slot.col };\n }\n return undefined;\n };\n let placed = 0;\n for (;;) {\n const rest = group.members.filter((id) => !slots.has(id));\n if (rest.length === 0) break;\n const anchored = rest.map((id) => ({ id, anchor: anchorOf(id) })).filter((a) => a.anchor !== undefined);\n anchored.sort((a, b) => (a.anchor?.order ?? 0) - (b.anchor?.order ?? 0));\n const pick = anchored[0] ?? { id: rest[0] as string, anchor: undefined };\n const want = pick.anchor?.col ?? 0;\n if (placed === 0) dir = want >= (columns - 1) / 2 ? -1 : 1;\n const [c, r] = free(want, 0) ? [want, 0] : near(want, 0);\n put(pick.id, c, r);\n visit(pick.id);\n placed++;\n }\n });\n // 使っていない列を詰める\n const used = [...new Set([...slots.values()].map((s) => s.col))].sort((a, b) => a - b);\n for (const slot of slots.values()) slot.col = used.indexOf(slot.col);\n return slots;\n}\n\n/** 区画の名前の行。空白があれば真ん中に近い空白で 2 行に折る。 */\nfunction nameLines(name: string): string[] {\n const spaces = [...name.matchAll(/ /g)].map((m) => m.index);\n if (spaces.length === 0) return [name];\n const at = spaces.reduce((best, i) => (Math.abs(i - name.length / 2) < Math.abs(best - name.length / 2) ? i : best));\n return [name.slice(0, at), name.slice(at + 1)];\n}\n\nfunction headerSize(region: Region): { w: number; h: number; lines: string[] } {\n const { icon, nameY, line, inset } = LOOK.region;\n const lines = nameLines(region.name);\n const w = Math.max(icon, ...lines.map((l) => textWidth(l, TYPE.regionName)), textWidth(region.note ?? \"\", TYPE.regionNote));\n // 名前の最後の行の下と、添え書きの下まで\n const h = nameY - inset + (lines.length - 1) * line + (region.note ? line : 0) + LOOK.gap / 2;\n return { w, h, lines };\n}\n\nfunction arrange(diagram: Diagram, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): Layout {\n const { box: B, region: R, architecture: A, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const regionColor = regionColors(diagram);\n const edges = edgesOf(diagram);\n\n // 列の幅と列の間。隣の列を横に結ぶ名前のある線は、名前が収まるまで間を広げる (広げすぎる時は脇へ寄せる)\n const columnCount = Math.max(1, ...[...slots.values()].map((s) => s.col + 1));\n const widths = new Map(diagram.boxes.map((b) => [b.id, boxWidth(diagram, b.id, true)]));\n const colW = Array.from({ length: columnCount }, (_, c) => Math.max(B.minW, ...[...slots].filter(([, s]) => s.col === c).map(([id]) => widths.get(id) ?? B.minW)));\n const between = Array.from({ length: Math.max(0, columnCount - 1) }, () => A.columnGap as number);\n for (const { edge } of edges) {\n const a = slots.get(edge.from);\n const b = slots.get(edge.to);\n if (!a || !b || edge.label === undefined || a.group !== b.group || a.row !== b.row || Math.abs(a.col - b.col) !== 1 || vertical(edge.labelSide)) continue;\n const need = textWidth(edge.label, labelStyle(edge.label)) + LOOK.label.padX * 2 + A.labelRoom * 2;\n const i = Math.min(a.col, b.col);\n if (need <= A.maxColumnGap) between[i] = Math.max(between[i] ?? 0, need);\n }\n const headers = groups.map((g) => (g.region ? headerSize(g.region) : undefined));\n const headerW = Math.max(0, ...headers.map((h) => (h ? h.w + R.inset * 2 : 0)));\n const colLeft: number[] = [];\n for (let c = 0; c < columnCount; c++) colLeft.push(c === 0 ? margin + (headerW > 0 ? headerW : R.pad) : (colLeft[c - 1] as number) + (colW[c - 1] as number) + (between[c - 1] as number));\n const center = (c: number): number => (colLeft[c] as number) + (colW[c] as number) / 2;\n\n // 帯を上から積む\n const boxes: SceneBox[] = [];\n const bands: { group: number; y: number; h: number; rows: number }[] = [];\n let cursor = margin;\n groups.forEach((group, g) => {\n const rows = Math.max(1, ...group.members.map((id) => (slots.get(id)?.row ?? 0) + 1));\n const room = rooms[g] as Room;\n const top = cursor + R.pad + room.top;\n for (const id of group.members) {\n const slot = slots.get(id) as Slot;\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths.get(id) ?? B.minW;\n const cx = center(slot.col);\n const y = top + slot.row * (B.h + A.rowGap);\n boxes.push({\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y,\n w,\n h: B.h,\n cx,\n cy: y + B.h / 2,\n });\n }\n const contentBottom = top + rows * B.h + (rows - 1) * A.rowGap;\n const header = headers[g];\n const h = Math.max(contentBottom + R.pad + room.bottom - cursor, header ? header.h + R.inset * 2 : 0, group.region ? R.minH : 0);\n bands.push({ group: g, y: cursor, h, rows });\n cursor += h + R.gap;\n });\n const bandsBottom = cursor - R.gap;\n\n const byId = new Map(boxes.map((b) => [b.id, b]));\n const bandOf = (id: string) => bands[slots.get(id)?.group ?? 0] as (typeof bands)[number];\n const blocked = (points: Point[], a: string, b: string): boolean =>\n boxes.some((box) => {\n if (box.id === a || box.id === b) return false;\n const pad = LOOK.label.search;\n for (let i = 1; i < points.length; i++) {\n const [x1, y1] = points[i - 1] as Point;\n const [x2, y2] = points[i] as Point;\n if (Math.min(x1, x2) <= box.x + box.w + pad && Math.max(x1, x2) >= box.x - pad && Math.min(y1, y2) <= box.y + box.h + pad && Math.max(y1, y2) >= box.y - pad) return true;\n }\n return false;\n });\n // 箱の下 (上) の、次の行か次の帯との間の真ん中\n const laneBelow = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) < band.rows - 1 ? box.y + box.h + A.rowGap / 2 : Math.min(box.y + box.h + R.pad / 2, band.y + band.h - LOOK.edge.inset);\n };\n const laneAbove = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) > 0 ? box.y - A.rowGap / 2 : Math.max(box.y - R.pad / 2, band.y + LOOK.edge.inset);\n };\n const inset = LOOK.edge.inset;\n const route = (from: string, to: string): Point[] => {\n const a = byId.get(from) as SceneBox;\n const b = byId.get(to) as SceneBox;\n const sa = slots.get(from) as Slot;\n const sb = slots.get(to) as Slot;\n if (sa.group === sb.group && sa.row === sb.row) {\n const right = b.cx > a.cx;\n const straight: Point[] = [\n [right ? a.x + a.w : a.x, a.cy],\n [right ? b.x - inset : b.x + b.w + inset, b.cy],\n ];\n if (!blocked(straight, from, to)) return straight;\n const lane = laneBelow(from);\n return [\n [a.cx, a.y + a.h],\n [a.cx, lane],\n [b.cx, lane],\n [b.cx, b.y + b.h + inset],\n ];\n }\n const down = b.cy > a.cy;\n const leave: Point = [a.cx, down ? a.y + a.h : a.y];\n const enter: Point = [b.cx, down ? b.y - inset : b.y + b.h + inset];\n if (sa.col === sb.col) {\n const straight: Point[] = [leave, enter];\n if (!blocked(straight, from, to)) return straight;\n const x = a.x + a.w + (between[sa.col] ?? A.columnGap) / 2;\n return [\n [a.x + a.w, a.cy],\n [x, a.cy],\n [x, b.cy],\n [b.x + b.w + inset, b.cy],\n ];\n }\n const right = b.cx > a.cx;\n const lane = down ? laneBelow(from) : laneAbove(from);\n const candidates: Point[][] = [\n [leave, [a.cx, b.cy], [right ? b.x - inset : b.x + b.w + inset, b.cy]],\n [[right ? a.x + a.w : a.x, a.cy], [b.cx, a.cy], enter],\n [leave, [a.cx, lane], [b.cx, lane], enter],\n ];\n return candidates.find((points) => !blocked(points, from, to)) ?? (candidates[2] as Point[]);\n };\n\n const sceneEdges: SceneEdge[] = edges.map(({ step, event, edge }) => {\n const target = byId.get(edge.to) as SceneBox;\n return {\n step,\n event,\n from: edge.from,\n to: edge.to,\n points: route(edge.from, edge.to),\n color: edgeColor(edge, colors),\n carry: edge.carry,\n settle: [target.cx, target.cy + B.iconY],\n };\n });\n // 同じ 2 つの箱を行きと帰りで結ぶまっすぐな線は、少しずらして重ならないようにする\n for (const edge of sceneEdges) {\n if (edge.points.length !== 2) continue;\n const back = sceneEdges.some((other) => other.from === edge.to && other.to === edge.from && other.points.length === 2);\n if (!back) continue;\n const [p, q] = edge.points as [Point, Point];\n const flat = Math.abs(q[1] - p[1]) < Math.abs(q[0] - p[0]);\n const d = (edge.from < edge.to ? 1 : -1) * LOOK.edge.parallel;\n edge.points = edge.points.map(([x, y]) => (flat ? [x, y + d] : [x + d, y]));\n }\n\n const regions: SceneRegion[] = [];\n groups.forEach((group, g) => {\n const band = bands[g] as (typeof bands)[number];\n const header = headers[g];\n if (!group.region || !header) return;\n regions.push({\n id: group.region.id,\n lines: header.lines,\n ...(group.region.note !== undefined ? { note: group.region.note } : {}),\n ...(group.region.icon !== undefined ? { icon: group.region.icon } : {}),\n color: regionColor.get(group.region.id) ?? \"slate\",\n x: margin,\n y: band.y,\n w: 0,\n h: band.h,\n header: { x: margin + R.inset, y: band.y + R.inset, w: header.w, h: header.h },\n });\n });\n\n const labels: SceneLabel[] = [];\n for (const edge of sceneEdges) {\n const source = diagram.steps[edge.step]?.events[edge.event];\n if (source?.type !== \"edge\" || source.label === undefined) continue;\n const soft: Rect[] = [...regions.map((r) => r.header), ...labels.filter((l) => l.step === edge.step)];\n labels.push(\n placeLabel(\n { step: edge.step, event: edge.event, text: source.label, points: edge.points, color: edge.color, ...(source.labelSide ? { side: source.labelSide } : {}) },\n { hard: boxes, soft },\n ),\n );\n }\n\n const layout: Layout = { kind: \"architecture\", width: 0, height: 0, regions, boxes, lifelines: [], edges: sceneEdges, labels, actions: [], badges: [], paths: [], ends: [] };\n // 名前が左へ出たら、帯の中身を右へ寄せる。帯は図の幅いっぱいに引き直す\n const shift = labels.length > 0 ? Math.max(0, margin + LOOK.label.soft - Math.min(...labels.map((l) => l.x))) : 0;\n if (shift > 0) shiftContent(layout, shift, 0);\n const contentRight = Math.max(...boxes.map((b) => b.x + b.w + R.pad), ...labels.map((l) => l.x + l.w + LOOK.label.soft), ...sceneEdges.flatMap((e) => e.points.map((p) => p[0] + R.pad)));\n const width = Math.max(contentRight + margin, stripNeed(diagram) + margin * 2);\n for (const region of regions) region.w = width - margin * 2;\n const strip = layoutStrip(diagram, margin, bandsBottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bandsBottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = diagram.steps.map((step, s) => {\n const edge = sceneEdges.find((e) => e.step === s);\n if (!edge) return cornerBadge(step.events, s, layout);\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n });\n return layout;\n}\n\n/** 区画の中を結ぶ線の名前が帯の外へ出ていたら、その分だけ帯の上か下を広げる。広げたら true。 */\nfunction grow(layout: Layout, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): boolean {\n let grown = false;\n const soft = LOOK.label.soft;\n for (const label of layout.labels) {\n const edge = layout.edges.find((e) => e.step === label.step && e.event === label.event);\n const a = edge && slots.get(edge.from);\n const b = edge && slots.get(edge.to);\n if (!a || !b || a.group !== b.group || !groups[a.group]?.region) continue;\n const region = layout.regions.find((r) => r.id === groups[a.group]?.region?.id);\n const room = rooms[a.group];\n if (!region || !room) continue;\n const over = region.y + soft - label.y;\n const under = label.y + label.h - (region.y + region.h - soft);\n if (over > 0) {\n room.top += over;\n grown = true;\n }\n if (under > 0) {\n room.bottom += under;\n grown = true;\n }\n }\n return grown;\n}\n","/**\n * 時系列図の置き場所。\n *\n * 生存線の頭の箱を上に横 1 列に並べ、段で起きる線と処理を起きる順に 1 行ずつ下へ積む。\n * 生存線の間は、箱の幅と、その間を走る線の名前が収まる幅を取る。中身の帯は一番下に置く。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n cornerBadge,\n boxWidth,\n edgeColor,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type SceneAction,\n type SceneBadge,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\nexport function layoutSequence(diagram: Diagram): Layout {\n const { box: B, sequence: Q, label: L, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const listed = diagram.sequence?.lifelines ?? [];\n const order = [...listed, ...diagram.boxes.map((b) => b.id).filter((id) => !listed.includes(id))];\n const column = new Map(order.map((id, i) => [id, i]));\n const widths = order.map((id) => boxWidth(diagram, id, false));\n\n // 生存線の間。隣の箱どうしの隙間を取り、名前のある線が走る間は名前が収まるまで広げる\n const spacing = widths.slice(1).map((w, i) => (widths[i] as number) / 2 + w / 2 + Q.columnGap);\n const needs: { from: number; to: number; need: number }[] = [];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"edge\" || event.label === undefined) continue;\n const a = column.get(event.from) ?? 0;\n const b = column.get(event.to) ?? 0;\n const w = textWidth(event.label, labelStyle(event.label)) + L.padX * 2;\n if (a === b) {\n // 自分へ戻る線は名前を右に置くので、右の生存線までに輪と名前が収まる幅を取る\n if (a < spacing.length) needs.push({ from: a, to: a + 1, need: Q.selfW + L.side + w + Q.labelRoom });\n } else {\n needs.push({ from: Math.min(a, b), to: Math.max(a, b), need: w + Q.labelRoom * 2 });\n }\n }\n }\n needs.sort((x, y) => x.to - x.from - (y.to - y.from));\n for (const { from, to, need } of needs) {\n let have = 0;\n for (let i = from; i < to; i++) have += spacing[i] ?? 0;\n if (have >= need) continue;\n const add = (need - have) / (to - from);\n for (let i = from; i < to; i++) spacing[i] = (spacing[i] ?? 0) + add;\n }\n const xs: number[] = [];\n order.forEach((_, i) => xs.push(i === 0 ? margin + (widths[0] as number) / 2 : (xs[i - 1] as number) + (spacing[i - 1] as number)));\n\n const boxes: SceneBox[] = order.map((id, i) => {\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths[i] as number;\n const cx = xs[i] as number;\n return {\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y: margin,\n w,\n h: B.h,\n cx,\n cy: margin + B.h / 2,\n };\n });\n const headBottom = margin + B.h;\n\n // 行を積む。線は上か下に名前を、処理は札を持つので、行ごとに上下に要る高さが違う\n const edges: SceneEdge[] = [];\n const actions: SceneAction[] = [];\n const requests: Parameters<typeof placeLabel>[0][] = [];\n let y = headBottom + Q.firstRow;\n let below = 0;\n let first = true;\n diagram.steps.forEach((step, s) => {\n step.events.forEach((event, e) => {\n if (event.type !== \"edge\" && event.type !== \"action\") return;\n let above: number;\n let under: number;\n if (event.type === \"edge\") {\n const side = event.labelSide ?? \"above\";\n const self = event.from === event.to;\n const named = event.label !== undefined;\n above = named && side === \"above\" ? L.offset + L.h / 2 : gap;\n under = self ? Q.selfH + gap : named && side === \"below\" ? L.offset + L.h / 2 : gap;\n } else {\n above = LOOK.action.h / 2;\n under = LOOK.action.h / 2;\n }\n y = first ? y + above : y + Math.max(Q.minPitch, below + Q.rowGap + above) + (e === 0 && s > 0 ? Q.stepGap : 0);\n first = false;\n below = under;\n\n if (event.type === \"edge\") {\n const xf = xs[column.get(event.from) ?? 0] as number;\n const xt = xs[column.get(event.to) ?? 0] as number;\n const dir = Math.sign(xt - xf) || 1;\n const points: Point[] =\n xf === xt\n ? [\n [xf, y],\n [xf + Q.selfW, y],\n [xf + Q.selfW, y + Q.selfH],\n [xf + LOOK.edge.inset, y + Q.selfH],\n ]\n : [\n [xf, y],\n [xt - dir * LOOK.edge.inset, y],\n ];\n const color = edgeColor(event, colors);\n edges.push({ step: s, event: e, from: event.from, to: event.to, points, color, carry: event.carry });\n if (event.label !== undefined) {\n requests.push({\n step: s,\n event: e,\n text: event.label,\n points,\n color,\n ...(event.labelSide ? { side: event.labelSide } : xf === xt ? { side: \"right\" as const } : {}),\n });\n }\n } else {\n // 札は生存線の上の番号の丸を隠さないよう、丸の右に出す (#3017)\n const x = xs[column.get(event.box) ?? 0] as number;\n const w = textWidth(event.label, TYPE.action) + LOOK.action.padX * 2;\n actions.push({ step: s, event: e, box: event.box, text: event.label, color: colors.get(event.box) ?? \"slate\", x: x + LOOK.badge.r + 4, y: y - LOOK.action.h / 2, w, h: LOOK.action.h });\n }\n });\n });\n const bottom = (first ? headBottom : y + below) + Q.tail;\n const lifelines = order.map((id, i) => ({ id, x: xs[i] as number, y1: headBottom, y2: bottom }));\n\n const labels: SceneLabel[] = [];\n for (const request of requests) {\n const soft = [...labels.filter((l) => l.step === request.step), ...actions];\n labels.push(placeLabel(request, { hard: boxes, soft }));\n }\n\n const layout: Layout = { kind: \"sequence\", width: 0, height: 0, regions: [], boxes, lifelines, edges, labels, actions, badges: [], paths: [], ends: [] };\n\n // 図の幅。名前が左に出たら全体を右へ寄せ、右端は一番右の物に余白を足した所\n const lefts = [...boxes.map((b) => b.x), ...labels.map((l) => l.x), ...actions.map((a) => a.x)];\n const shift = Math.max(0, margin - Math.min(...lefts));\n if (shift > 0) shiftContent(layout, shift, 0);\n const rights = [...boxes.map((b) => b.x + b.w), ...labels.map((l) => l.x + l.w), ...actions.map((a) => a.x + a.w), ...edges.flatMap((edge) => edge.points.map((p) => p[0]))];\n const width = Math.max(Math.max(...rights) + margin, stripNeed(diagram) + margin * 2);\n const strip = layoutStrip(diagram, margin, bottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = badges(diagram, layout);\n return layout;\n}\n\n/**\n * 段の番号。その段の最初の線の始まりに置き、線が無ければ処理する箱の生存線の上、無ければ書き換わる箱の角。\n * 処理の札はその段の終わりに消えるので、札に付けると止め絵で丸だけが浮く (#3017)。\n */\nfunction badges(diagram: Diagram, layout: Layout): SceneBadge[] {\n return diagram.steps.map((step, s) => {\n const edge = layout.edges.find((e) => e.step === s);\n if (edge) {\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n }\n const action = layout.actions.find((a) => a.step === s);\n const lifeline = action && layout.lifelines.find((l) => l.id === action.box);\n if (action && lifeline) return { step: s, x: lifeline.x, y: action.y + action.h / 2, color: action.color };\n return cornerBadge(step.events, s, layout);\n });\n}\n","/**\n * dragon記法の語 (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、属性は `[<鍵>: <値>]` で書く。\n * 語は英語だけで、原本の JSON が使う名前に揃え、記法と JSON で覚える語を 1 組にする。\n *\n * 言葉の型 (`NotationLang`) は、誤りの文と図の中の字の言葉を選ぶために持つ。\n * 語が英語だけなので、記法の file から言葉は決めず、呼ぶ側が渡す。\n *\n * 型が欠けを止める。原本の JSON の値 (図の種類、運ぶ物、見せ方、名前の側) に語が無い時は、型の検査が落ちる。\n */\nimport type { Carry, Diagram, LabelSide, ViewMode } from \"./schema\";\n\nexport type NotationLang = \"ja\" | \"en\";\n\nconst keys = <K extends string>(table: Record<K, true>): K[] => Object.keys(table) as K[];\n\n/** 図の種類。最初の行の頭の語 */\nexport const KINDS = keys<Diagram[\"kind\"]>({ sequence: true, architecture: true, state: true });\n\n/**\n * 状態遷移図の始まりと終わりの印の名前 (#3163)。線の送る側に `start`、受ける側に `finish` を書き、\n * 状態遷移図では箱の名札に使えない。時系列図と構成図では、宣言して使う普通の名札\n */\nexport const STATE_ENDS = [\"start\", \"finish\"] as const;\nexport type StateEnd = (typeof STATE_ENDS)[number];\n\n/** 最初の行より後の行の頭の語。線の行だけは箱の名札から始まる */\nexport const HEADS = [\"group\", \"end\", \"box\", \"strip\", \"step\", \"say\", \"code\", \"act\", \"note\", \"set\"] as const;\ntype Head = (typeof HEADS)[number];\n\n/** 箱と区画の名札の後ろに、見せる名前を続ける語 (`box <名札> as <名前>`) */\nexport const AS = \"as\";\n\n/** 行ごとに書ける属性の鍵 */\nexport const ATTRS = {\n diagram: [\"view\"],\n group: [\"note\", \"color\", \"icon\"],\n box: [\"note\", \"color\", \"icon\"],\n edge: [\"carry\", \"tag\", \"side\"],\n set: [\"tag\"],\n} as const;\n\n/** `carry` に書ける運ぶ物。封筒は書かない時、札は `tag` で書く */\nexport const CARRIES = keys<Exclude<Carry[\"kind\"], \"envelope\" | \"tag\">>({ coin: true, none: true });\nexport const VIEWS = keys<ViewMode>({ fixed: true, follow: true });\nexport const SIDES = keys<LabelSide>({ above: true, below: true, left: true, right: true });\n\n/**\n * 前の形の行 (#2997 まで) が、新しい形のどの行に当たるか。誤りの文で新しい行の形を示すために引く。\n * 鍵は前の形の行の頭の語で、記号 (`#` など) で始まる行と、名札の後ろに `=` や「」が来る行は読む側が見分ける。\n */\nexport const OLD_HEADS = {\n 時系列図: \"sequence\",\n 構成図: \"architecture\",\n 区画: \"group\",\n 見せ方: \"view\",\n region: \"group\",\n view: \"view\",\n} as const satisfies Record<string, Diagram[\"kind\"] | Head | \"view\">;\n","/**\n * 状態遷移図の置き場所 (#3163)。\n *\n * 状態は段で初めて辿り着く順に `LOOK.state.columns` つずつ並べ、段ごとに読む向きを替えて折り返す (#3171)。\n * 1 段目は左から右へ、2 段目は右から左へ、3 段目は再び左から右へ読み、どの段の状態も 1 段目の同じ列に揃える。\n * 段の最後の状態の真下に次の段の最初の状態が来るので、段をまたぐ線は真下への 1 本になる。\n * 始まりの印は最初の状態の上に、終わりの印は終わりへ移る状態の下に置く。\n *\n * どの段も辿り着かない状態は点線の札にして、1 段目の上の脇道の囲みへ寄せる。札は絵柄を左に、名前を右に並べる (#3171)。\n * 囲みは脇道へ入る状態のうち最も左の状態の列から図の右端までを占め、始まりの印が囲みの左に収まる時は、\n * 始まりの印を囲みと同じ高さに置く。最初の段より前に書いた線のうち、どの段にも出ない線は通らない道として点線で引き、\n * 脇道の状態から出る線と終わりの印も囲みの中に置く。脇道へ入る線は、1 段目の上端と囲みの間を横に通り、点線の札の下端へ並べて入る。\n */\nimport { FIGURE_TEXT } from \"../figure-text\";\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Carry, Diagram, StatePath } from \"../schema\";\nimport { type NotationLang, STATE_ENDS } from \"../words\";\nimport { hasWide, textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n boxWidth,\n cornerBadge,\n edgeColor,\n edgesOf,\n type EdgeEvent,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type Rect,\n type SceneBox,\n type SceneEdge,\n type SceneEnd,\n type SceneLabel,\n type ScenePath,\n type SceneSide,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\nconst isEnd = (id: string): boolean => (STATE_ENDS as readonly string[]).includes(id);\n\n/** 段で初めて辿り着く状態の順。線の送る側と受ける側を、段の順に見て初めて出た順に並べる */\nexport function visitOrder(diagram: Diagram): string[] {\n const order: string[] = [];\n const add = (id: string): void => {\n if (!isEnd(id) && !order.includes(id)) order.push(id);\n };\n for (const { edge } of edgesOf(diagram)) {\n add(edge.from);\n add(edge.to);\n }\n return order;\n}\n\n/** 運ぶ物の幅の半分 */\nfunction carrierHalf(carry: Carry): number {\n const C = LOOK.carrier;\n if (carry.kind === \"tag\") return (textWidth(carry.text, hasWide(carry.text) ? TYPE.carrierJa : TYPE.carrier) + C.tagPadX * 2) / 2;\n if (carry.kind === \"coin\") return C.coinR;\n return C.envW / 2;\n}\n\n/** 線の両端が同じ 2 つの線か */\nconst same = (a: { from: string; to: string }, b: { from: string; to: string }): boolean => a.from === b.from && a.to === b.to;\n\nexport function layoutState(diagram: Diagram, lang: NotationLang): Layout {\n const { box: B, state: T, margin, gap } = LOOK;\n const inset = LOOK.edge.inset;\n const words = FIGURE_TEXT[lang];\n const colors = boxColors(diagram);\n const steps = edgesOf(diagram);\n const walked = visitOrder(diagram);\n const ghosts = diagram.boxes.map((b) => b.id).filter((id) => !walked.includes(id));\n const notTaken: StatePath[] = (diagram.state?.paths ?? []).filter((p) => !steps.some(({ edge }) => same(edge, p)));\n const lines: { from: string; to: string; label?: string }[] = [...steps.map(({ edge }) => edge), ...notTaken];\n const G = T.ghost;\n // 点線の札は絵柄の右に名前と下の字を並べるので、その幅を測る\n const ghostWidth = (id: string): number => {\n const source = diagram.boxes.find((b) => b.id === id);\n return G.pad * 2 + B.icon + G.gap + Math.max(textWidth(source?.name ?? id, TYPE.boxName), textWidth(source?.sub ?? \"\", TYPE.boxSub));\n };\n const widths = new Map(diagram.boxes.map((b) => [b.id, ghosts.includes(b.id) ? ghostWidth(b.id) : boxWidth(diagram, b.id, true)]));\n const columnCount = Math.max(1, Math.min(T.columns, walked.length));\n const rowCount = Math.max(1, Math.ceil(walked.length / T.columns));\n // 奇数番目の段は右から左へ並べ、段の最後の状態の真下から次の段を始める\n const slot = new Map(\n walked.map((id, k) => {\n const row = Math.floor(k / T.columns);\n const at = k % T.columns;\n return [id, { row, col: row % 2 === 0 ? at : columnCount - 1 - at }];\n }),\n );\n\n // 列の幅と列の間。隣の列を横に結ぶ名前のある線は、名前が収まるまで間を広げる\n const colW = Array.from({ length: columnCount }, (_, c) => Math.max(B.minW, ...walked.filter((id) => slot.get(id)?.col === c).map((id) => widths.get(id) ?? B.minW)));\n const between = Array.from({ length: Math.max(0, columnCount - 1) }, () => T.columnGap as number);\n for (const line of lines) {\n const a = slot.get(line.from);\n const b = slot.get(line.to);\n if (!a || !b || line.label === undefined || a.row !== b.row || Math.abs(a.col - b.col) !== 1) continue;\n const i = Math.min(a.col, b.col);\n between[i] = Math.max(between[i] ?? 0, textWidth(line.label, labelStyle(line.label)) + LOOK.label.padX * 2 + T.labelRoom * 2);\n }\n const colLeft: number[] = [];\n for (let c = 0; c < columnCount; c++) colLeft.push(c === 0 ? margin : (colLeft[c - 1] as number) + (colW[c - 1] as number) + (between[c - 1] as number));\n const center = (c: number): number => (colLeft[c] as number) + (colW[c] as number) / 2;\n\n // 脇道の囲みの高さ。囲みの名前と 2 行の添え書きと、点線の札が並ぶ\n const isGhost = (id: string): boolean => ghosts.includes(id);\n const enteringFrom = new Set(notTaken.filter((p) => isGhost(p.to) && !isGhost(p.from) && !isEnd(p.from)).map((p) => p.from));\n const notes = [words.sideNote, ...(enteringFrom.size > 0 ? [words.sideFrom(enteringFrom.size)] : [])];\n const titleW = Math.max(textWidth(words.side, TYPE.regionName), ...notes.map((note) => textWidth(note, TYPE.regionNote)));\n const sideH = T.side.pad * 2 + Math.max(G.h, TYPE.regionName.size + LOOK.region.line * notes.length + T.side.pad / 4);\n // 1 段目の上には、脇道の囲みか、始まりの印から最初の状態へ下りる間を空ける。どちらも無ければ空けない\n const starts = lines.some((line) => line.from === \"start\");\n const top0 = margin + (ghosts.length > 0 ? sideH + T.side.gap : starts ? T.start + T.drop : 0);\n const rowY = (row: number): number => top0 + row * (B.h + T.rowGap);\n\n const boxOf = (id: string, cx: number, y: number, ghost: boolean): SceneBox => {\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths.get(id) ?? B.minW;\n const h = ghost ? G.h : B.h;\n return {\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y,\n w,\n h,\n cx,\n cy: y + h / 2,\n ...(ghost ? { ghost: true } : {}),\n };\n };\n const boxes: SceneBox[] = walked.map((id) => {\n const s = slot.get(id) as { row: number; col: number };\n return boxOf(id, center(s.col), rowY(s.row), false);\n });\n const byId = new Map(boxes.map((b) => [b.id, b]));\n const below = (box: SceneBox): boolean => boxes.some((other) => other !== box && Math.abs(other.cx - box.cx) < 0.5 && other.y > box.y);\n\n const ends: SceneEnd[] = [];\n const first = boxes[0];\n const contentRight = Math.max(...boxes.map((b) => b.x + b.w));\n\n // 脇道の囲み。囲みの左端は脇道へ入る状態のうち最も左の箱に揃え、右端は図の右端まで伸ばす。点線の札は入ってくる状態の真ん中に置く\n let side: SceneSide | undefined;\n const lane = margin + sideH + T.side.lane;\n if (ghosts.length > 0) {\n const sourcesOf = (id: string): SceneBox[] => notTaken.filter((p) => p.to === id).flatMap((p) => byId.get(p.from) ?? []);\n const all = ghosts.flatMap(sourcesOf);\n const x = Math.max(margin, Math.min(...(all.length > 0 ? all.map((b) => b.x) : [margin + T.side.pad])) - T.side.pad);\n let cursor = x + T.side.pad + titleW + gap * 2;\n const wanted = ghosts.map((id) => {\n const from = sourcesOf(id);\n return { id, cx: from.length > 0 ? from.reduce((sum, b) => sum + b.cx, 0) / from.length : cursor };\n });\n wanted.sort((a, b) => a.cx - b.cx);\n let right = x;\n for (const { id, cx } of wanted) {\n const w = widths.get(id) ?? B.minW;\n const left = Math.max(cx - w / 2, cursor);\n const ghost = boxOf(id, left + w / 2, margin + (sideH - G.h) / 2, true);\n boxes.push(ghost);\n byId.set(id, ghost);\n const finishes = notTaken.some((p) => p.from === id && p.to === \"finish\");\n if (finishes) ends.push({ kind: \"finish\", x: ghost.x + ghost.w + T.beside, y: ghost.cy, r: T.end.r, ghost: true, text: \"\", box: id });\n right = finishes ? ghost.x + ghost.w + T.beside + T.end.r : ghost.x + ghost.w;\n cursor = right + gap * 2;\n }\n const rightmost = Math.max(right + T.side.pad, contentRight);\n side = { x, y: margin, w: rightmost - x, h: sideH, title: words.side, notes };\n }\n\n // 始まりの印は最初の状態の上。脇道の囲みの左に字まで収まる時は、囲みと同じ高さに置く\n if (first && starts) {\n const reach = first.cx + T.start + T.text + textWidth(words.start, TYPE.regionNote) + gap;\n const y = side && reach < side.x ? side.y + T.side.pad + T.start : first.y - T.drop;\n ends.unshift({ kind: \"start\", x: first.cx, y, r: T.start, ghost: false, text: words.start });\n }\n\n // 終わりの印は終わりへ移る状態の下。下に状態がある時は右に置く\n for (const box of boxes.filter((b) => !b.ghost && lines.some((line) => line.from === b.id && line.to === \"finish\"))) {\n ends.push(\n below(box)\n ? { kind: \"finish\", x: box.x + box.w + T.beside, y: box.cy, r: T.end.r, ghost: false, text: words.end, box: box.id }\n : { kind: \"finish\", x: box.cx, y: box.y + box.h + T.below, r: T.end.r, ghost: false, text: words.end, box: box.id },\n );\n }\n\n /** 状態どうしを結ぶ線。同じ段の隣は横にまっすぐ、段をまたぐ線は段の間の真ん中を通る */\n const between2 = (a: SceneBox, b: SceneBox): Point[] => {\n const sa = slot.get(a.id);\n const sb = slot.get(b.id);\n if (!sa || !sb) return [[a.cx, a.y + a.h], [b.cx, b.y - inset]];\n if (sa.row === sb.row && Math.abs(sa.col - sb.col) === 1) {\n return b.cx > a.cx\n ? [[a.x + a.w, a.cy], [b.x - inset, b.cy]]\n : [[a.x, a.cy], [b.x + b.w + inset, b.cy]];\n }\n if (sa.row === sb.row) {\n const y = a.y + a.h + T.rowGap / 4;\n return [[a.cx, a.y + a.h], [a.cx, y], [b.cx, y], [b.cx, b.y + b.h + inset]];\n }\n if (sb.row > sa.row) {\n if (Math.abs(a.cx - b.cx) < 0.5) return [[a.cx, a.y + a.h], [b.cx, b.y - inset]];\n const y = a.y + a.h + T.rowGap / 2;\n return [[a.cx, a.y + a.h], [a.cx, y], [b.cx, y], [b.cx, b.y - inset]];\n }\n if (Math.abs(a.cx - b.cx) < 0.5) return [[a.cx, a.y], [b.cx, b.y + b.h + inset]];\n const y = b.y + b.h + T.rowGap / 2;\n return [[a.cx, a.y], [a.cx, y], [b.cx, y], [b.cx, b.y + b.h + inset]];\n };\n\n /** 点線の箱へ入る所。同じ箱へ入る線を、入ってくる状態の左から順に箱の下端へ並べる */\n const entryOf = (from: string, to: SceneBox): number => {\n const sources = notTaken.filter((p) => p.to === to.id).flatMap((p) => byId.get(p.from) ?? []).sort((a, b) => a.cx - b.cx);\n const k = sources.findIndex((b) => b.id === from);\n if (sources.length <= 1) return Math.min(Math.max(sources[0]?.cx ?? to.cx, to.x + T.side.entry), to.x + to.w - T.side.entry);\n return to.x + T.side.entry + ((to.w - T.side.entry * 2) * Math.max(0, k)) / (sources.length - 1);\n };\n /** 状態が線を出す所の横の位置。最初の状態は上端の真ん中に始まりからの線が入るので、脇道へは少し右から出る */\n const exitX = (box: SceneBox): number => (starts && box === first ? box.cx + T.side.entry : box.cx);\n\n const finishOf = (id: string): SceneEnd | undefined => ends.find((e) => e.kind === \"finish\" && e.box === id);\n /** 同じ状態へ戻る線。箱の下端の右から出て、下へ膨らむ弧を描いて左から箱へ戻る。運ぶ物が弧の上を走れるよう、点で区切る */\n const loopOf = (box: SceneBox): Point[] => {\n const { w, h, samples } = T.loop;\n const bottom = box.y + box.h;\n const p0: Point = [box.cx + w / 2, bottom];\n const c1: Point = [box.cx + (w * 3) / 4, bottom + (h * 4) / 3];\n const c2: Point = [box.cx - (w * 3) / 4, bottom + (h * 4) / 3];\n const p3: Point = [box.cx - w / 2, bottom + inset];\n return Array.from({ length: samples + 1 }, (_, k): Point => {\n const t = k / samples;\n const u = 1 - t;\n const at = (i: 0 | 1): number => u * u * u * p0[i] + 3 * u * u * t * c1[i] + 3 * u * t * t * c2[i] + t * t * t * p3[i];\n return [at(0), at(1)];\n });\n };\n const route = (from: string, to: string): Point[] => {\n if (from === \"start\") {\n const start = ends.find((e) => e.kind === \"start\");\n const target = byId.get(to);\n if (!start || !target) return [];\n return [[start.x, start.y + start.r], [target.cx, target.y - inset]];\n }\n const a = byId.get(from);\n if (!a) return [];\n if (to === \"finish\") {\n const end = finishOf(from);\n if (!end) return [];\n return Math.abs(end.x - a.cx) < 0.5 ? [[a.cx, a.y + a.h], [a.cx, end.y - end.r - inset]] : [[a.x + a.w, a.cy], [end.x - end.r - inset, a.cy]];\n }\n const b = byId.get(to);\n if (!b) return [];\n if (from === to) return loopOf(a);\n if (b.ghost && !a.ghost) {\n const sx = exitX(a);\n const ex = entryOf(from, b);\n return Math.abs(sx - ex) < 0.5 ? [[sx, a.y], [ex, b.y + b.h + inset]] : [[sx, a.y], [sx, lane], [ex, lane], [ex, b.y + b.h + inset]];\n }\n if (a.ghost && b.ghost) return [[a.x + a.w, a.cy], [b.x - inset, b.cy]];\n if (a.ghost) return [[a.cx, a.y + a.h], [a.cx, lane], [b.cx, lane], [b.cx, b.y - inset]];\n return between2(a, b);\n };\n\n /**\n * 運ぶ物が着いた後に留まる所。状態へ着いた札はその状態の印に乗り (同じ状態へ戻る輪も、回った後に印へ戻る)、\n * 終わりへ着いた札は終わりの印と字に掛からないよう、下に置いた印なら左、右に置いた印なら下に留まる\n */\n const settleOf = (edge: EdgeEvent): Point | undefined => {\n const target = byId.get(edge.to);\n if (target) return [target.cx, target.cy + B.iconY];\n const end = edge.to === \"finish\" ? finishOf(edge.from) : undefined;\n if (!end) return undefined;\n const from = byId.get(edge.from);\n return from && Math.abs(end.x - from.cx) < 0.5 ? [end.x - end.r - gap - carrierHalf(edge.carry), end.y] : [end.x, end.y + end.r + gap + LOOK.carrier.tagH / 2];\n };\n\n const sceneEdges: SceneEdge[] = steps.map(({ step, event, edge }) => {\n const settle = settleOf(edge);\n return {\n step,\n event,\n from: edge.from,\n to: edge.to,\n points: route(edge.from, edge.to),\n color: colorOf(edge, colors),\n carry: edge.carry,\n ...(settle ? { settle } : {}),\n };\n });\n // 同じ 2 つの状態を行きと帰りで結ぶまっすぐな線は、少しずらして重ならないようにする\n for (const e of sceneEdges) {\n if (e.points.length !== 2 || !sceneEdges.some((o) => o.from === e.to && o.to === e.from && o.points.length === 2)) continue;\n const [p, q] = e.points as [Point, Point];\n const flat = Math.abs(q[1] - p[1]) < Math.abs(q[0] - p[0]);\n const d = (e.from < e.to ? 1 : -1) * LOOK.edge.parallel;\n e.points = e.points.map(([x, y]) => (flat ? [x, y + d] : [x + d, y]));\n }\n\n const paths: ScenePath[] = notTaken.map((p) => ({ from: p.from, to: p.to, points: route(p.from, p.to) }));\n\n // 線の名前。同じ状態へ戻る輪は輪の下に置き、終わりへ移る線は印の字と反対の左に置く\n const labels: SceneLabel[] = [];\n const soft: Rect[] = side ? [{ x: side.x, y: side.y, w: T.side.pad + titleW, h: side.h }] : [];\n for (const e of sceneEdges) {\n const source = diagram.steps[e.step]?.events[e.event];\n if (source?.type !== \"edge\" || source.label === undefined) continue;\n const style = labelStyle(source.label);\n if (e.from === e.to) {\n const w = textWidth(source.label, style) + LOOK.label.padX * 2;\n const bottom = Math.max(...e.points.map(([, y]) => y));\n labels.push({ step: e.step, event: e.event, text: source.label, family: style.family, color: e.color, x: (e.points[0]?.[0] ?? 0) - T.loop.w / 2 - w / 2, y: bottom + LOOK.label.soft, w, h: LOOK.label.h });\n continue;\n }\n const side2 = source.labelSide ?? (e.to === \"finish\" ? \"left\" : undefined);\n labels.push(\n placeLabel(\n { step: e.step, event: e.event, text: source.label, points: e.points, color: e.color, ...(side2 ? { side: side2 } : {}) },\n { hard: boxes, soft: [...soft, ...labels.filter((l) => l.step === e.step)] },\n ),\n );\n }\n // 脇道へ入る線の名前は、横に通る所の下の、状態から上へ出る所の右に置く\n notTaken.forEach((p, i) => {\n const path = paths[i] as ScenePath;\n if (p.label === undefined || path.points.length === 0) return;\n const style = labelStyle(p.label);\n const into = byId.get(p.to)?.ghost === true && byId.get(p.from)?.ghost !== true;\n const rect: Rect = into\n ? { x: (path.points[0] as Point)[0] + LOOK.label.soft, y: lane + LOOK.label.soft, w: textWidth(p.label, style) + LOOK.label.padX * 2, h: LOOK.label.h }\n : placeLabel({ step: -1, event: i, text: p.label, points: path.points, color: \"slate\" }, { hard: boxes, soft });\n path.label = { x: rect.x, y: rect.y, w: rect.w, h: rect.h, text: p.label, family: style.family };\n });\n\n const layout: Layout = { kind: \"state\", width: 0, height: 0, regions: [], boxes, lifelines: [], edges: sceneEdges, labels, actions: [], badges: [], paths, ends, ...(side ? { side } : {}) };\n // 名前が左へ出たら、全体を右へ寄せる\n const lefts = [...boxes.map((b) => b.x), ...labels.map((l) => l.x), ...paths.flatMap((p) => (p.label ? [p.label.x] : []))];\n const shift = Math.max(0, margin - Math.min(...lefts));\n if (shift > 0) shiftContent(layout, shift, 0);\n const endRight = (e: SceneEnd): number => e.x + (e.text === \"\" ? e.r : T.text + textWidth(e.text, TYPE.regionNote));\n const rights = [\n ...boxes.map((b) => b.x + b.w),\n ...labels.map((l) => l.x + l.w),\n ...ends.map(endRight),\n ...sceneEdges.flatMap((e) => e.points.map((p) => p[0])),\n ...paths.flatMap((p) => [...p.points.map((q) => q[0]), ...(p.label ? [p.label.x + p.label.w] : [])]),\n ...(side ? [side.x + side.w] : []),\n ];\n const bottoms = [...boxes.map((b) => b.y + b.h), ...labels.map((l) => l.y + l.h), ...ends.map((e) => e.y + e.r), ...sceneEdges.flatMap((e) => e.points.map((p) => p[1]))];\n // 帯の最後に、段が辿り着く順に状態を点で並べる\n const trail = { title: words.trail, states: walked.map((id) => ({ box: id, color: colors.get(id) ?? \"slate\" })) };\n const width = Math.max(Math.max(...rights) + margin, stripNeed(diagram, trail) + margin * 2);\n const bottom = Math.max(...bottoms, rowY(rowCount - 1) + B.h);\n const strip = layoutStrip(diagram, margin, bottom + gap, width - margin * 2, trail);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = diagram.steps.map((step, s) => {\n const edge = sceneEdges.find((e) => e.step === s && e.points.length > 0);\n if (!edge) return cornerBadge(step.events, s, layout);\n // 同じ状態へ戻る弧の番号は、弧に重ねず弧の右に置く\n if (edge.from === edge.to) {\n const right = Math.max(...edge.points.map(([px]) => px));\n const top = (edge.points[0] as Point)[1];\n const deep = Math.max(...edge.points.map(([, py]) => py));\n return { step: s, x: right + LOOK.badge.r + LOOK.badge.inset, y: top + (deep - top) * T.loop.badgeAt, color: edge.color };\n }\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n });\n return layout;\n}\n\n/** 線の色。移った先の状態の色で、終わりへ移る線は終わる状態の色。硬貨を運ぶ線は構成図と同じく硬貨の色 (#3171) */\nfunction colorOf(edge: EdgeEvent, colors: Map<string, ReturnType<typeof edgeColor>>): ReturnType<typeof edgeColor> {\n if (edge.carry.kind === \"coin\") return edgeColor(edge, colors);\n return colors.get(edge.to === \"finish\" ? edge.from : edge.to) ?? \"slate\";\n}\n","/**\n * 原本の JSON の誤りの文 (#2999)。\n *\n * JSON は語を持たず file から言葉を決められないので、呼ぶ側 (頁なら頁の言葉) が言葉を渡す。\n * 文は schema が使う決まり (JSON Schema の keyword) ごとに持ち、ajv の英語の文はそのまま出さない。\n * schema に決まりを足して文が無い時は、`every-schema-keyword-has-messages` の検査が落ちる。\n */\nimport type { NotationLang } from \"./words\";\n\n/** `^[^…]+$` の形の決まりが書けないとする字。`space` は空白 (`\\s`) */\nexport interface Forbidden {\n space: boolean;\n chars: string[];\n}\n\n/** 書けない組み合わせ (`not`) の欄と、その欄を書ける時の `kind` の値 */\nexport interface Allowed {\n field: string;\n kind: string;\n}\n\nexport interface FieldMessages {\n additionalProperties: (key: string) => string;\n required: (key: string) => string;\n enum: (values: readonly string[]) => string;\n type: (type: string) => string;\n minLength: (limit: number) => string;\n /** 書けない字を読めない形の決まりでは `undefined` */\n pattern: (forbidden: Forbidden | undefined) => string;\n minItems: (limit: number) => string;\n minimum: (limit: number) => string;\n const: (value: string) => string;\n /** どの欄の組み合わせか判らない場所では `undefined` */\n not: (allowed: Allowed | undefined) => string;\n /** 状態遷移図の箱の名札に、始まりと終わりの印の名前 (`names`) を書いた */\n reserved: (names: readonly string[]) => string;\n /** 選べる決まりがどれも欄が足りない時の、足りない欄。それ以外の時は空 */\n anyOf: (fields: readonly string[]) => string;\n oneOf: string;\n discriminator: (tag: string, values: readonly string[]) => string;\n /** 道具より新しい版の図 */\n newer: (version: number, tool: number) => string;\n}\n\nconst TYPES_JA: Record<string, string> = {\n string: \"文字列にする\",\n integer: \"整数にする\",\n number: \"数にする\",\n object: \"オブジェクトにする\",\n array: \"配列にする\",\n boolean: \"true か false にする\",\n null: \"null にする\",\n};\n\nconst TYPES_EN: Record<string, string> = {\n string: \"Use a string\",\n integer: \"Use an integer\",\n number: \"Use a number\",\n object: \"Use an object\",\n array: \"Use an array\",\n boolean: \"Use true or false\",\n null: \"Use null\",\n};\n\nconst plural = (count: number, word: string): string => `${count} ${word}${count === 1 ? \"\" : \"s\"}`;\n\nconst ja: FieldMessages = {\n additionalProperties: (key) => `${key} という欄は書けない`,\n required: (key) => `${key} の欄が要る`,\n enum: (values) => `${values.join(\" / \")} のどれかにする`,\n type: (type) => TYPES_JA[type] ?? `${type} にする`,\n minLength: (limit) => `${limit} 字以上書く`,\n pattern: (forbidden) =>\n forbidden ? `${forbidden.space ? \"空白と \" : \"\"}${forbidden.chars.join(\" \")} は使えない` : \"使えない字が入っている\",\n minItems: (limit) => `${limit} つ以上書く`,\n minimum: (limit) => `${limit} 以上にする`,\n const: (value) => `${value} にする`,\n not: (allowed) => (allowed ? `${allowed.field} の欄は kind が ${allowed.kind} の時だけ書ける` : \"この欄の組み合わせは書けない\"),\n reserved: (names) => `${names.join(\" と \")} は状態遷移図の始まりと終わりの印の名前で、箱の名札に使えない`,\n anyOf: (fields) =>\n fields.length > 0 ? `${fields.join(\" か \")} の${fields.length === 2 ? \"どちらか\" : \"どれか\"}の欄が要る` : \"書ける形のどれにも合わない\",\n oneOf: \"書ける形のどれか 1 つだけに合わせる\",\n discriminator: (tag, values) => `${tag} は ${values.join(\" / \")} のどれかにする`,\n newer: (version, tool) => `版 ${version} の図は、この道具 (版 ${tool}) より新しいので読めない。道具を新しくする`,\n};\n\nconst en: FieldMessages = {\n additionalProperties: (key) => `The ${key} field is not allowed`,\n required: (key) => `The ${key} field is required`,\n enum: (values) => `Use one of ${values.join(\" / \")}`,\n type: (type) => TYPES_EN[type] ?? `Use ${type}`,\n minLength: (limit) => `Write at least ${plural(limit, \"character\")}`,\n pattern: (forbidden) =>\n forbidden\n ? `Cannot contain ${forbidden.space ? \"spaces or \" : \"\"}${forbidden.chars.join(\" \")}`\n : \"Contains characters that are not allowed\",\n minItems: (limit) => `Write at least ${plural(limit, \"item\")}`,\n minimum: (limit) => `Use ${limit} or greater`,\n const: (value) => `Use ${value}`,\n not: (allowed) => (allowed ? `The ${allowed.field} field is allowed only when kind is ${allowed.kind}` : \"This combination of fields is not allowed\"),\n reserved: (names) => `${names.join(\" and \")} name the start and end marks of a state diagram and cannot be box ids`,\n anyOf: (fields) => (fields.length > 0 ? `Write one of the ${fields.join(\" or \")} fields` : \"Does not match any of the allowed shapes\"),\n oneOf: \"Match exactly one of the allowed shapes\",\n discriminator: (tag, values) => `${tag} is one of ${values.join(\" / \")}`,\n newer: (version, tool) => `Version ${version} diagrams are newer than this tool (version ${tool}) and cannot be read. Update the tool`,\n};\n\nexport const FIELD_MESSAGES: Record<NotationLang, FieldMessages> = { ja, en };\n","/* eslint-disable */\n// packages/dragon/scripts/build-validator.mjs が diagram.schema.json から書き出した。手で直さない\nfunction ucs2length(str) {\n let length = 0;\n for (const _ of str) length++;\n return length;\n}\nexport const validate = validate10;export default validate10;const schema11 = {\"title\":\"dragon の図の原本\",\"description\":\"区画、箱、線、運ぶ物、段、中身の帯の 6 部品を共通の骨組みに置き、図の種類だけの物は種類の欄に置く。座標は持たない。\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"version\",\"kind\",\"title\",\"boxes\",\"steps\"],\"properties\":{\"version\":{\"description\":\"形式の版\",\"type\":\"integer\",\"minimum\":1},\"kind\":{\"description\":\"図の種類\",\"enum\":[\"sequence\",\"architecture\",\"state\"]},\"title\":{\"$ref\":\"#/definitions/text\"},\"view\":{\"description\":\"見せ方。書かなければ字の大きさで選ぶ。fixed は全体を止めて中だけ動かし、follow は寄って動かし全体図で今どこかを示す\",\"enum\":[\"fixed\",\"follow\"]},\"regions\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/region\"}},\"boxes\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/box\"}},\"strip\":{\"$ref\":\"#/definitions/strip\"},\"steps\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/step\"}},\"sequence\":{\"$ref\":\"#/definitions/sequence\"},\"state\":{\"$ref\":\"#/definitions/state\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"sequence\"}}},\"then\":{\"required\":[\"sequence\"],\"not\":{\"required\":[\"state\"]}},\"else\":{\"not\":{\"required\":[\"sequence\"]},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"state\"}}},\"then\":{\"properties\":{\"boxes\":{\"items\":{\"properties\":{\"id\":{\"description\":\"始まりと終わりの印の名前は箱の名札に使えない\",\"not\":{\"enum\":[\"start\",\"finish\"]}}}}}}},\"else\":{\"not\":{\"required\":[\"state\"]}}},\"definitions\":{\"text\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"},\"color\":{\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]},\"region\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}},\"box\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}},\"strip\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}},\"step\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}},\"event\":{\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]},\"carry\":{\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}},\"sequence\":{\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}},\"state\":{\"description\":\"状態遷移図の種類の欄。最初の段より前に書いた、移れるが段で通るとは限らない線\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"paths\"],\"properties\":{\"paths\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/path\"}}}},\"path\":{\"description\":\"移れる道。送る側に始まりの印 start、受ける側に終わりの印 finish を書ける。どの段にも出ない道は点線で描き、運ぶ物を走らせない\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"from\",\"to\"],\"properties\":{\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}}}};const schema12 = {\"type\":\"string\",\"minLength\":1};const func2 = Object.prototype.hasOwnProperty;const func3 = ucs2length;const schema13 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}};const schema14 = {\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"};const schema17 = {\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]};const pattern0 = new RegExp(\"^[^\\\\s\\\\[\\\\]「」=:]+$\", \"u\");function validate11(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!(((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"note\")) || (key0 === \"color\")) || (key0 === \"icon\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.note !== undefined){let data2 = data.note;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}else {const err12 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}validate11.errors = vErrors;return errors === 0;}const schema19 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}};function validate13(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"sub\")) || (key0 === \"color\")) || (key0 === \"icon\")) || (key0 === \"region\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.sub !== undefined){let data2 = data.sub;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.region !== undefined){let data5 = data.region;if(typeof data5 === \"string\"){if(!pattern0.test(data5)){const err12 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}validate13.errors = vErrors;return errors === 0;}const schema26 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}};function validate15(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.fields === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"fields\"},message:\"must have required property '\"+\"fields\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"title\") || (key0 === \"fields\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err3 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.fields !== undefined){let data1 = data.fields;if(Array.isArray(data1)){if(data1.length < 1){const err5 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const len0 = data1.length;for(let i0=0; i0<len0; i0++){let data2 = data1[i0];if(typeof data2 === \"string\"){if(func3(data2) < 1){const err6 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}else {const err8 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}else {const err9 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}validate15.errors = vErrors;return errors === 0;}const schema29 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}};const schema33 = {\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]};const schema37 = {\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}};function validate19(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"tag\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.text === undefined){const err2 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs5 = errors;const _errs6 = errors;const _errs7 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.text === undefined) && (missing1 = \"text\")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var valid2 = _errs7 === errors;if(valid2){const err4 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}var _valid0 = _errs5 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err5 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.kind === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}for(const key0 in data){if(!((key0 === \"kind\") || (key0 === \"text\"))){const err7 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.kind !== undefined){let data1 = data.kind;if(!((((data1 === \"envelope\") || (data1 === \"tag\")) || (data1 === \"coin\")) || (data1 === \"none\"))){const err8 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema37.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.text !== undefined){let data2 = data.text;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err9 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate19.errors = vErrors;return errors === 0;}function validate18(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}const tag0 = data.type;if(typeof tag0 == \"string\"){if(tag0 === \"edge\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err1 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.from === undefined){const err2 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"from\"},message:\"must have required property '\"+\"from\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.to === undefined){const err3 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"to\"},message:\"must have required property '\"+\"to\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.carry === undefined){const err4 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"carry\"},message:\"must have required property '\"+\"carry\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}for(const key0 in data){if(!((((((key0 === \"type\") || (key0 === \"from\")) || (key0 === \"to\")) || (key0 === \"label\")) || (key0 === \"carry\")) || (key0 === \"labelSide\"))){const err5 = {instancePath,schemaPath:\"#/oneOf/0/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.type !== undefined){if(\"edge\" !== data.type){const err6 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/0/properties/type/const\",keyword:\"const\",params:{allowedValue: \"edge\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.from !== undefined){let data1 = data.from;if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err7 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.to !== undefined){let data2 = data.to;if(typeof data2 === \"string\"){if(!pattern0.test(data2)){const err9 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.label !== undefined){let data3 = data.label;if(typeof data3 === \"string\"){if(func3(data3) < 1){const err11 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.carry !== undefined){if(!(validate19(data.carry, {instancePath:instancePath+\"/carry\",parentData:data,parentDataProperty:\"carry\",rootData}))){vErrors = vErrors === null ? validate19.errors : vErrors.concat(validate19.errors);errors = vErrors.length;}}if(data.labelSide !== undefined){let data5 = data.labelSide;if(!((((data5 === \"above\") || (data5 === \"below\")) || (data5 === \"left\")) || (data5 === \"right\"))){const err13 = {instancePath:instancePath+\"/labelSide\",schemaPath:\"#/oneOf/0/properties/labelSide/enum\",keyword:\"enum\",params:{allowedValues: schema33.oneOf[0].properties.labelSide.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/oneOf/0/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else if(tag0 === \"action\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err15 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.box === undefined){const err16 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data.label === undefined){const err17 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"label\"},message:\"must have required property '\"+\"label\"+\"'\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}for(const key1 in data){if(!(((key1 === \"type\") || (key1 === \"box\")) || (key1 === \"label\"))){const err18 = {instancePath,schemaPath:\"#/oneOf/1/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.type !== undefined){if(\"action\" !== data.type){const err19 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/1/properties/type/const\",keyword:\"const\",params:{allowedValue: \"action\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data.box !== undefined){let data7 = data.box;if(typeof data7 === \"string\"){if(!pattern0.test(data7)){const err20 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}else {const err21 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.label !== undefined){let data8 = data.label;if(typeof data8 === \"string\"){if(func3(data8) < 1){const err22 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath,schemaPath:\"#/oneOf/1/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}else if(tag0 === \"swap\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err25 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}if(data.box === undefined){const err26 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}if(data.text === undefined){const err27 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}for(const key2 in data){if(!(((key2 === \"type\") || (key2 === \"box\")) || (key2 === \"text\"))){const err28 = {instancePath,schemaPath:\"#/oneOf/2/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.type !== undefined){if(\"swap\" !== data.type){const err29 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/2/properties/type/const\",keyword:\"const\",params:{allowedValue: \"swap\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.box !== undefined){let data10 = data.box;if(typeof data10 === \"string\"){if(!pattern0.test(data10)){const err30 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data.text !== undefined){let data11 = data.text;if(typeof data11 === \"string\"){if(func3(data11) < 1){const err32 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}}else {const err34 = {instancePath,schemaPath:\"#/oneOf/2/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}else if(tag0 === \"strip\"){const _errs39 = errors;let valid15 = false;const _errs40 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.value === undefined){const err35 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/0/required\",keyword:\"required\",params:{missingProperty: \"value\"},message:\"must have required property '\"+\"value\"+\"'\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}var _valid0 = _errs40 === errors;valid15 = valid15 || _valid0;if(!valid15){const _errs41 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.tag === undefined){const err36 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/1/required\",keyword:\"required\",params:{missingProperty: \"tag\"},message:\"must have required property '\"+\"tag\"+\"'\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}var _valid0 = _errs41 === errors;valid15 = valid15 || _valid0;}if(!valid15){const err37 = {instancePath,schemaPath:\"#/oneOf/3/anyOf\",keyword:\"anyOf\",params:{},message:\"must match a schema in anyOf\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err38 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}if(data.field === undefined){const err39 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"field\"},message:\"must have required property '\"+\"field\"+\"'\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}for(const key3 in data){if(!((((key3 === \"type\") || (key3 === \"field\")) || (key3 === \"value\")) || (key3 === \"tag\"))){const err40 = {instancePath,schemaPath:\"#/oneOf/3/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key3},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}}if(data.type !== undefined){if(\"strip\" !== data.type){const err41 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/3/properties/type/const\",keyword:\"const\",params:{allowedValue: \"strip\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}if(data.field !== undefined){let data13 = data.field;if(typeof data13 === \"string\"){if(func3(data13) < 1){const err42 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}else {const err43 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}if(data.value !== undefined){let data14 = data.value;if(typeof data14 === \"string\"){if(func3(data14) < 1){const err44 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data.tag !== undefined){let data15 = data.tag;if(typeof data15 === \"string\"){if(func3(data15) < 1){const err46 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}else {const err47 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}}}else {const err48 = {instancePath,schemaPath:\"#/oneOf/3/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"mapping\", tag: \"type\", tagValue: tag0},message:\"value of tag \\\"type\\\" must be in oneOf\"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}else {const err50 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"tag\", tag: \"type\", tagValue: tag0},message:\"tag \\\"type\\\" must be string\"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}else {const err51 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}validate18.errors = vErrors;return errors === 0;}function validate17(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.body === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"body\"},message:\"must have required property '\"+\"body\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.events === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"events\"},message:\"must have required property '\"+\"events\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!((((key0 === \"title\") || (key0 === \"body\")) || (key0 === \"code\")) || (key0 === \"events\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}else {const err5 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.body !== undefined){let data1 = data.body;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err6 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.code !== undefined){let data2 = data.code;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err8 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.events !== undefined){let data3 = data.events;if(Array.isArray(data3)){const len0 = data3.length;for(let i0=0; i0<len0; i0++){if(!(validate18(data3[i0], {instancePath:instancePath+\"/events/\" + i0,parentData:data3,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate18.errors : vErrors.concat(validate18.errors);errors = vErrors.length;}}}else {const err10 = {instancePath:instancePath+\"/events\",schemaPath:\"#/properties/events/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate17.errors = vErrors;return errors === 0;}const schema46 = {\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}};function validate23(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.lifelines === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"lifelines\"},message:\"must have required property '\"+\"lifelines\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"lifelines\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.lifelines !== undefined){let data0 = data.lifelines;if(Array.isArray(data0)){if(data0.length < 1){const err2 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err3 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}else {const err5 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}validate23.errors = vErrors;return errors === 0;}const schema48 = {\"description\":\"状態遷移図の種類の欄。最初の段より前に書いた、移れるが段で通るとは限らない線\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"paths\"],\"properties\":{\"paths\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/path\"}}}};const schema49 = {\"description\":\"移れる道。送る側に始まりの印 start、受ける側に終わりの印 finish を書ける。どの段にも出ない道は点線で描き、運ぶ物を走らせない\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"from\",\"to\"],\"properties\":{\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}};function validate26(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.from === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"from\"},message:\"must have required property '\"+\"from\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.to === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"to\"},message:\"must have required property '\"+\"to\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!(((key0 === \"from\") || (key0 === \"to\")) || (key0 === \"label\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.from !== undefined){let data0 = data.from;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.to !== undefined){let data1 = data.to;if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err5 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.label !== undefined){let data2 = data.label;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}else {const err9 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}validate26.errors = vErrors;return errors === 0;}function validate25(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.paths === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"paths\"},message:\"must have required property '\"+\"paths\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"paths\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.paths !== undefined){let data0 = data.paths;if(Array.isArray(data0)){if(data0.length < 1){const err2 = {instancePath:instancePath+\"/paths\",schemaPath:\"#/properties/paths/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}const len0 = data0.length;for(let i0=0; i0<len0; i0++){if(!(validate26(data0[i0], {instancePath:instancePath+\"/paths/\" + i0,parentData:data0,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate26.errors : vErrors.concat(validate26.errors);errors = vErrors.length;}}}else {const err3 = {instancePath:instancePath+\"/paths\",schemaPath:\"#/properties/paths/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}}else {const err4 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}validate25.errors = vErrors;return errors === 0;}function validate10(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"sequence\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;const _errs5 = errors;const _errs6 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.state === undefined) && (missing1 = \"state\")){const err2 = {};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var valid2 = _errs6 === errors;if(valid2){const err3 = {instancePath,schemaPath:\"#/then/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}else {errors = _errs5;if(vErrors !== null){if(_errs5){vErrors.length = _errs5;}else {vErrors = null;}}}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.sequence === undefined){const err4 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"sequence\"},message:\"must have required property '\"+\"sequence\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs7 = errors;const _errs8 = errors;const _errs9 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing2;if((data.sequence === undefined) && (missing2 = \"sequence\")){const err5 = {};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}var valid3 = _errs9 === errors;if(valid3){const err6 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}else {errors = _errs8;if(vErrors !== null){if(_errs8){vErrors.length = _errs8;}else {vErrors = null;}}}const _errs10 = errors;let valid4 = true;const _errs11 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing3;if((data.kind === undefined) && (missing3 = \"kind\")){const err7 = {};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}else {if(data.kind !== undefined){if(\"state\" !== data.kind){const err8 = {};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}}var _valid1 = _errs11 === errors;errors = _errs10;if(vErrors !== null){if(_errs10){vErrors.length = _errs10;}else {vErrors = null;}}let ifClause1;if(_valid1){const _errs13 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.boxes !== undefined){let data2 = data.boxes;if(Array.isArray(data2)){const len0 = data2.length;for(let i0=0; i0<len0; i0++){let data3 = data2[i0];if(data3 && typeof data3 == \"object\" && !Array.isArray(data3)){if(data3.id !== undefined){let data4 = data3.id;const _errs17 = errors;const _errs18 = errors;if(!((data4 === \"start\") || (data4 === \"finish\"))){const err9 = {};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}var valid10 = _errs18 === errors;if(valid10){const err10 = {instancePath:instancePath+\"/boxes/\" + i0+\"/id\",schemaPath:\"#/else/then/properties/boxes/items/properties/id/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}else {errors = _errs17;if(vErrors !== null){if(_errs17){vErrors.length = _errs17;}else {vErrors = null;}}}}}}}}}var _valid1 = _errs13 === errors;valid4 = _valid1;ifClause1 = \"then\";}else {const _errs19 = errors;const _errs20 = errors;const _errs21 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing4;if((data.state === undefined) && (missing4 = \"state\")){const err11 = {};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}var valid11 = _errs21 === errors;if(valid11){const err12 = {instancePath,schemaPath:\"#/else/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}else {errors = _errs20;if(vErrors !== null){if(_errs20){vErrors.length = _errs20;}else {vErrors = null;}}}var _valid1 = _errs19 === errors;valid4 = _valid1;ifClause1 = \"else\";}if(!valid4){const err13 = {instancePath,schemaPath:\"#/else/if\",keyword:\"if\",params:{failingKeyword: ifClause1},message:\"must match \\\"\"+ifClause1+\"\\\" schema\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}var _valid0 = _errs7 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err14 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.version === undefined){const err15 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"version\"},message:\"must have required property '\"+\"version\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.kind === undefined){const err16 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data.title === undefined){const err17 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}if(data.boxes === undefined){const err18 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"boxes\"},message:\"must have required property '\"+\"boxes\"+\"'\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}if(data.steps === undefined){const err19 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"steps\"},message:\"must have required property '\"+\"steps\"+\"'\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}for(const key0 in data){if(!(func2.call(schema11.properties, key0))){const err20 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}if(data.version !== undefined){let data5 = data.version;if(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){const err21 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}if((typeof data5 == \"number\") && (isFinite(data5))){if(data5 < 1 || isNaN(data5)){const err22 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}}if(data.kind !== undefined){let data6 = data.kind;if(!(((data6 === \"sequence\") || (data6 === \"architecture\")) || (data6 === \"state\"))){const err23 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}if(data.title !== undefined){let data7 = data.title;if(typeof data7 === \"string\"){if(func3(data7) < 1){const err24 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}else {const err25 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data.view !== undefined){let data8 = data.view;if(!((data8 === \"fixed\") || (data8 === \"follow\"))){const err26 = {instancePath:instancePath+\"/view\",schemaPath:\"#/properties/view/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.view.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data.regions !== undefined){let data9 = data.regions;if(Array.isArray(data9)){const len1 = data9.length;for(let i1=0; i1<len1; i1++){if(!(validate11(data9[i1], {instancePath:instancePath+\"/regions/\" + i1,parentData:data9,parentDataProperty:i1,rootData}))){vErrors = vErrors === null ? validate11.errors : vErrors.concat(validate11.errors);errors = vErrors.length;}}}else {const err27 = {instancePath:instancePath+\"/regions\",schemaPath:\"#/properties/regions/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data.boxes !== undefined){let data11 = data.boxes;if(Array.isArray(data11)){if(data11.length < 1){const err28 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}const len2 = data11.length;for(let i2=0; i2<len2; i2++){if(!(validate13(data11[i2], {instancePath:instancePath+\"/boxes/\" + i2,parentData:data11,parentDataProperty:i2,rootData}))){vErrors = vErrors === null ? validate13.errors : vErrors.concat(validate13.errors);errors = vErrors.length;}}}else {const err29 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.strip !== undefined){if(!(validate15(data.strip, {instancePath:instancePath+\"/strip\",parentData:data,parentDataProperty:\"strip\",rootData}))){vErrors = vErrors === null ? validate15.errors : vErrors.concat(validate15.errors);errors = vErrors.length;}}if(data.steps !== undefined){let data14 = data.steps;if(Array.isArray(data14)){if(data14.length < 1){const err30 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}const len3 = data14.length;for(let i3=0; i3<len3; i3++){if(!(validate17(data14[i3], {instancePath:instancePath+\"/steps/\" + i3,parentData:data14,parentDataProperty:i3,rootData}))){vErrors = vErrors === null ? validate17.errors : vErrors.concat(validate17.errors);errors = vErrors.length;}}}else {const err31 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data.sequence !== undefined){if(!(validate23(data.sequence, {instancePath:instancePath+\"/sequence\",parentData:data,parentDataProperty:\"sequence\",rootData}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}}if(data.state !== undefined){if(!(validate25(data.state, {instancePath:instancePath+\"/state\",parentData:data,parentDataProperty:\"state\",rootData}))){vErrors = vErrors === null ? validate25.errors : vErrors.concat(validate25.errors);errors = vErrors.length;}}}else {const err32 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}validate10.errors = vErrors;return errors === 0;}\n","/**\n * 図の原本の形と、原本を JSON Schema で検査する命令。\n *\n * 形の正は `schemas/diagram.schema.json` の 1 本で、下の型はその写し。\n * 誤りは JSON Pointer で場所を示す。欄が足りない時と知らない欄がある時は、その欄の場所まで示す。\n * 誤りの文は呼ぶ側が渡した言葉 (渡さなければ日本語) で出す。文の表は `field-messages.ts` が持つ (#2999)。\n *\n * 検査の関数は schema から前もって書き出した物 (`schemas/validate-diagram.js`) を使う。\n * ajv に schema をその場で組み立てさせると `new Function` を使い、`eval` を許さない頁の CSP で止まる。\n * 書き出しは `scripts/build-validator.mjs` が ajv の設定 `{ allErrors: true, discriminator: true, strictTypes: false }` で行う。\n */\nimport type { ErrorObject } from \"ajv\";\nimport { type Allowed, FIELD_MESSAGES, type FieldMessages, type Forbidden } from \"./field-messages\";\nimport validate from \"./schemas/validate-diagram.js\";\nimport { type NotationLang, STATE_ENDS } from \"./words\";\n\nexport type Color = \"blue\" | \"amber\" | \"green\" | \"violet\" | \"rose\" | \"slate\" | \"coin\";\n/** 色の役の一覧。記法の `color:` に書ける値と、誤りの文に並べる値 */\nexport const COLORS: readonly Color[] = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\", \"slate\", \"coin\"];\n\nexport interface Region {\n id: string;\n name: string;\n note?: string;\n color?: Color;\n icon?: string;\n}\n\nexport interface Box {\n id: string;\n name: string;\n sub?: string;\n color?: Color;\n icon?: string;\n region?: string;\n}\n\nexport type Carry = { kind: \"envelope\" } | { kind: \"tag\"; text: string } | { kind: \"coin\" } | { kind: \"none\" };\n\nexport type LabelSide = \"above\" | \"below\" | \"left\" | \"right\";\n\n/** 見せ方。`fixed` は全体を止めて中だけ動かし、`follow` は寄って動かし全体図で今どこかを示す。 */\nexport type ViewMode = \"fixed\" | \"follow\";\n\nexport type DiagramEvent =\n | { type: \"edge\"; from: string; to: string; label?: string; carry: Carry; labelSide?: LabelSide }\n | { type: \"action\"; box: string; label: string }\n | { type: \"swap\"; box: string; text: string }\n | { type: \"strip\"; field: string; value?: string; tag?: string };\n\n/** 状態遷移図の、最初の段より前に書いた移れる道。`from` に `start`、`to` に `finish` を書ける */\nexport interface StatePath {\n from: string;\n to: string;\n label?: string;\n}\n\nexport interface Step {\n title: string;\n body: string;\n code?: string;\n events: DiagramEvent[];\n}\n\nexport interface Diagram {\n version: number;\n kind: \"sequence\" | \"architecture\" | \"state\";\n title: string;\n view?: ViewMode;\n regions?: Region[];\n boxes: Box[];\n strip?: { title: string; fields: string[] };\n steps: Step[];\n sequence?: { lifelines: string[] };\n state?: { paths: StatePath[] };\n}\n\nexport interface FieldError {\n /** 誤った欄の場所 (JSON Pointer) */\n pointer: string;\n message: string;\n}\n\nexport type Checked = { ok: true } | { ok: false; errors: FieldError[] };\n\nexport interface CheckOptions {\n /** 誤りの文の言葉。渡さなければ日本語 */\n lang?: NotationLang;\n}\n\n/** 段の中で起きることの種類。schema の event の `discriminator` が見る `type` の値 */\nconst EVENT_TYPES = [\"edge\", \"action\", \"swap\", \"strip\"] as const satisfies readonly DiagramEvent[\"type\"][];\n\n/**\n * schema の書けない組み合わせ (`not: { required: [欄] }`) の欄。根の 3 か所は決まりの場所で引き、運ぶ物は誤りの場所の最後の欄で引く。\n * 根の `sequence` と運ぶ物の `text` は ajv の誤りでは決まりの場所 (`#/else/not`) が同じになるので、誤りの場所でも分ける\n */\nconst ROOT_NOT_ALLOWED: Record<string, Allowed> = {\n \"#/else/not\": { field: \"sequence\", kind: \"sequence\" },\n \"#/then/not\": { field: \"state\", kind: \"state\" },\n \"#/else/else/not\": { field: \"state\", kind: \"state\" },\n};\nconst NOT_ALLOWED: Record<string, Allowed> = {\n carry: { field: \"text\", kind: \"tag\" },\n};\n\n/** 状態遷移図の箱の名札に予約の名前を書いた時の決まりの場所 */\nconst RESERVED_ID = /\\/boxes\\/items\\/properties\\/id\\/not$/u;\n\nconst escape = (key: string): string => key.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n\n/** `^[^…]+$` の形の決まりから書けない字を読む。違う形の決まりでは `undefined` */\nfunction forbiddenOf(pattern: string): Forbidden | undefined {\n const inside = /^\\^\\[\\^(.+)\\]\\+\\$$/u.exec(pattern)?.[1];\n if (inside === undefined) return undefined;\n const chars: string[] = inside.match(/\\\\.|[^\\\\]/gu) ?? [];\n return { space: chars.includes(\"\\\\s\"), chars: chars.filter((char) => char !== \"\\\\s\").map((char) => char.replace(/^\\\\/u, \"\")) };\n}\n\n/** `anyOf` の中の決まりが出した誤り。`anyOf` の誤り 1 つにまとめて出す */\nconst branchesOf = (anyOf: ErrorObject, errors: readonly ErrorObject[]): ErrorObject[] =>\n errors.filter(\n (error) =>\n error !== anyOf &&\n error.schemaPath.startsWith(`${anyOf.schemaPath}/`) &&\n (error.instancePath === anyOf.instancePath || error.instancePath.startsWith(`${anyOf.instancePath}/`)),\n );\n\nfunction toFieldError(error: ErrorObject, errors: readonly ErrorObject[], m: FieldMessages): FieldError {\n const params = error.params as Record<string, unknown>;\n const at = error.instancePath;\n switch (error.keyword) {\n case \"additionalProperties\": {\n const key = String(params.additionalProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.additionalProperties(key) };\n }\n case \"required\": {\n const key = String(params.missingProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.required(key) };\n }\n case \"not\": {\n if (RESERVED_ID.test(error.schemaPath)) return { pointer: at, message: m.reserved(STATE_ENDS) };\n const allowed = at === \"\" ? ROOT_NOT_ALLOWED[error.schemaPath] : NOT_ALLOWED[at.slice(at.lastIndexOf(\"/\") + 1)];\n return { pointer: allowed ? `${at}/${allowed.field}` : at, message: m.not(allowed) };\n }\n case \"anyOf\": {\n const branches = branchesOf(error, errors);\n const missing = branches.every((branch) => branch.keyword === \"required\") ? branches.map((branch) => String(branch.params.missingProperty)) : [];\n return { pointer: at, message: m.anyOf(missing) };\n }\n case \"discriminator\": {\n const tag = String(params.tag);\n return { pointer: `${at}/${escape(tag)}`, message: m.discriminator(tag, EVENT_TYPES) };\n }\n case \"enum\":\n return { pointer: at, message: m.enum((params.allowedValues as unknown[]).map(String)) };\n case \"type\":\n return { pointer: at, message: m.type(String(params.type)) };\n case \"minLength\":\n return { pointer: at, message: m.minLength(Number(params.limit)) };\n case \"pattern\":\n return { pointer: at, message: m.pattern(forbiddenOf(String(params.pattern))) };\n case \"minItems\":\n return { pointer: at, message: m.minItems(Number(params.limit)) };\n case \"minimum\":\n return { pointer: at, message: m.minimum(Number(params.limit)) };\n case \"const\":\n return { pointer: at, message: m.const(String(params.allowedValue)) };\n case \"oneOf\":\n return { pointer: at, message: m.oneOf };\n default:\n return { pointer: at, message: error.message ?? error.keyword };\n }\n}\n\n/** 原本の JSON を検査する。版が道具より新しいかは見ない (`readDiagram` が見る)。 */\nexport function validateDiagram(input: unknown, options: CheckOptions = {}): Checked {\n if (validate(input)) return { ok: true };\n const all = validate.errors ?? [];\n const inBranch = new Set(all.filter((error) => error.keyword === \"anyOf\").flatMap((anyOf) => branchesOf(anyOf, all)));\n const m = FIELD_MESSAGES[options.lang ?? \"ja\"];\n // 条件付きの決まり (if / then) は中で落ちた決まりの誤りを別に出すので、包む側の if の誤りは出さない\n const errors = all.filter((error) => error.keyword !== \"if\" && !inBranch.has(error)).map((error) => toFieldError(error, all, m));\n return { ok: false, errors };\n}\n","/**\n * 原本の形式の版。\n *\n * 道具より新しい版の図は描かずに断る。古い版の図は、版を 1 つずつ上げる変換を通して読み、\n * 原本の file を書き換えるのは移行の命令 (`migrateFile`) だけにする。\n * 今は版 1 しか無いため、版を上げる変換はまだ持たない。版 2 を作る時に、版 1 から 2 への変換と\n * 古い版を読んだ時の警告をここに足す。\n */\nimport { FIELD_MESSAGES } from \"./field-messages\";\nimport { type CheckOptions, type Diagram, type FieldError, validateDiagram } from \"./schema\";\nimport type { NotationLang } from \"./words\";\n\n/** この道具が読める原本の版 */\nexport const FORMAT_VERSION = 1;\n\nexport type Read = { ok: true; diagram: Diagram; warnings: string[] } | { ok: false; errors: FieldError[] };\n\nexport interface Migrated {\n changed: boolean;\n from: number;\n to: number;\n}\n\nfunction newerThanTool(input: unknown): number | undefined {\n if (typeof input !== \"object\" || input === null) return undefined;\n const version = (input as { version?: unknown }).version;\n return typeof version === \"number\" && version > FORMAT_VERSION ? version : undefined;\n}\n\nconst newerError = (version: number, lang: NotationLang): FieldError => ({\n pointer: \"/version\",\n message: FIELD_MESSAGES[lang].newer(version, FORMAT_VERSION),\n});\n\n/** 原本を読む。道具より新しい版は描かずに断り、形の誤りは検査の誤りとして返す。誤りの文は `options.lang` (渡さなければ日本語) で出す。 */\nexport function readDiagram(input: unknown, options: CheckOptions = {}): Read {\n const newer = newerThanTool(input);\n if (newer !== undefined) return { ok: false, errors: [newerError(newer, options.lang ?? \"ja\")] };\n const checked = validateDiagram(input, options);\n if (!checked.ok) return checked;\n return { ok: true, diagram: input as Diagram, warnings: [] };\n}\n\n/**\n * 原本の file を今の版へ移す。今の版の file には触れない。\n *\n * file を読むので、画面で描く入口からは呼ばない。node の file の命令は呼んだ時に初めて読み込む。\n */\nexport async function migrateFile(path: string): Promise<Migrated> {\n const { readFile } = await import(\"node:fs/promises\");\n const input: unknown = JSON.parse(await readFile(path, \"utf8\"));\n const read = readDiagram(input);\n if (!read.ok) throw new Error(`${path} を移せない: ${read.errors.map((error) => `${error.pointer} ${error.message}`).join(\" / \")}`);\n return { changed: false, from: read.diagram.version, to: FORMAT_VERSION };\n}\n","/**\n * 段ごとの始まりと長さと、線、運ぶ物、線の名前、段の番号が見える時刻の表。SVG の動きはこの表から組む。\n *\n * 段の長さは本文の字数で決め、段で起きることが全部済んでから少し留まる長さを下限にする。\n * 運ぶ物は主役 (封筒と札は 1 つ、硬貨は別の 1 つ) ごとに途切れず見え続ける。着いた後は\n * 次の同じ主役が出発するまで着いた先に留まり、次が無ければ終わりまで留まる。\n * 線の名前はその段の間だけ出し、同じ段に何本あっても同時に見えるのは 2 つまでにする。\n * 状態遷移図では、段が終わった後も線の名前を最後の段まで薄く残す (#3171)。薄い名前は 2 つまでの数に入れない。\n * 状態遷移図では、主役の運ぶ物が乗っている状態を光らせ、運ぶ物が出た状態には少し後に済んだ印を出す (#3163)。\n */\nimport { MOTION } from \"./look/values\";\nimport type { Diagram } from \"./schema\";\nimport { STATE_ENDS } from \"./words\";\n\n/** 秒で表した、見えている間。`end` の時刻は含まない。 */\nexport interface Span {\n start: number;\n end: number;\n}\n\n/** 線を引いている間。`start` で引き始め、`drawn` で引き終わり、`end` (段の終わり) まで濃く残す。 */\nexport interface EdgeTime extends Span {\n step: number;\n event: number;\n drawn: number;\n}\n\n/** 運ぶ物が見えている間。`depart` に出発し `arrive` に着く。出発を待つ間と、着いた先で留まる間も含む。 */\nexport interface CarrierTime extends Span {\n step: number;\n event: number;\n who: \"main\" | \"coin\";\n depart: number;\n arrive: number;\n}\n\nexport interface LabelTime extends Span {\n step: number;\n event: number;\n /** 状態遷移図だけが持つ。段が終わった後に薄く残す間 */\n after?: Span;\n}\n\n/** 処理、箱の字の書き換え、中身の帯の値が起きる時刻。 */\nexport interface EventTime {\n step: number;\n event: number;\n at: number;\n}\n\n/** 状態遷移図の状態ごとの、光っている間と、済んだ印が出る時刻。運ぶ物が出ていない状態は `done` を持たない */\nexport interface StateTime {\n box: string;\n lit: Span[];\n done?: number;\n}\n\nexport interface Timeline {\n /** 1 周の長さ */\n total: number;\n /** 繰り返す前に消えていく所の始まり */\n last: number;\n steps: Span[];\n edges: EdgeTime[];\n carriers: CarrierTime[];\n labels: LabelTime[];\n badges: { step: number; appears: number }[];\n events: EventTime[];\n /** 段ごとの止め絵の時刻。その段で起きることが全部見えている */\n stills: number[];\n /** 状態遷移図だけが持つ */\n states?: StateTime[];\n}\n\ninterface Planned {\n edges: { event: number; a: number; b: number; carries: boolean; coin: boolean; named: boolean }[];\n events: { event: number; at: number }[];\n busy: number;\n}\n\n/** 段の中で起きることの時刻 (段の始まりから)。線は少しずつずらして引き、書き換えは直前の線が着いてから起こす。 */\nfunction plan(step: Diagram[\"steps\"][number]): Planned {\n const out: Planned = { edges: [], events: [], busy: 0 };\n let cursor = MOTION.edgeAt;\n let arrived: number | undefined;\n let changes = 0;\n step.events.forEach((event, e) => {\n if (event.type === \"edge\") {\n const carries = event.carry.kind !== \"none\";\n const a = cursor;\n const b = a + (carries ? MOTION.drawCarry : MOTION.draw);\n out.edges.push({ event: e, a, b, carries, coin: event.carry.kind === \"coin\", named: event.label !== undefined });\n cursor = a + MOTION.stagger;\n arrived = b;\n changes = 0;\n out.busy = Math.max(out.busy, b);\n } else if (event.type === \"action\") {\n out.events.push({ event: e, at: cursor });\n out.busy = Math.max(out.busy, cursor + MOTION.action);\n cursor += MOTION.action;\n changes = 0;\n } else {\n const at = (arrived ?? cursor) + MOTION.change * changes++;\n out.events.push({ event: e, at });\n out.busy = Math.max(out.busy, at);\n }\n });\n return out;\n}\n\nexport function buildTimeline(diagram: Diagram): Timeline {\n const plans = diagram.steps.map(plan);\n const steps: Span[] = [];\n let t = MOTION.intro;\n diagram.steps.forEach((step, s) => {\n const read = Math.min(MOTION.stepMax, Math.max(MOTION.stepMin, MOTION.stepBase + [...step.body].length * MOTION.perChar));\n const length = Math.max(read, (plans[s]?.busy ?? 0) + MOTION.dwell);\n steps.push({ start: t, end: t + length });\n t += length;\n });\n const end = t;\n const total = Math.ceil(end + MOTION.outro);\n const last = total - MOTION.tail;\n\n const edges: EdgeTime[] = [];\n const labels: LabelTime[] = [];\n const events: EventTime[] = [];\n const departures: { step: number; event: number; who: \"main\" | \"coin\"; a: number; b: number }[] = [];\n plans.forEach((p, s) => {\n const span = steps[s] as Span;\n const named: LabelTime[] = [];\n for (const edge of p.edges) {\n const a = span.start + edge.a;\n edges.push({ step: s, event: edge.event, start: a, drawn: span.start + edge.b, end: span.end });\n if (edge.carries) departures.push({ step: s, event: edge.event, who: edge.coin ? \"coin\" : \"main\", a, b: span.start + edge.b });\n if (edge.named) named.push({ step: s, event: edge.event, start: a + MOTION.labelDelay, end: span.end });\n }\n // 3 つ目の名前が出る時に 1 つ目を消す\n named.forEach((label, k) => {\n const later = named[k + 2];\n if (later) label.end = Math.min(label.end, later.start);\n });\n if (diagram.kind === \"state\") for (const label of named) label.after = { start: label.end, end: last };\n labels.push(...named);\n for (const event of p.events) events.push({ step: s, event: event.event, at: span.start + event.at });\n });\n\n const first = steps[0]?.start ?? 0;\n const hasMain = departures.some((d) => d.who === \"main\");\n const carriers: CarrierTime[] = [];\n for (const who of [\"main\", \"coin\"] as const) {\n const list = departures.filter((d) => d.who === who);\n list.forEach((d, k) => {\n const next = list[k + 1];\n // 主役の最初の運ぶ物は、最初の段の始まりから出発点で待つ (何も見えない時間を作らないため)\n const waits = k === 0 && (who === \"main\" || !hasMain);\n carriers.push({\n step: d.step,\n event: d.event,\n who,\n depart: d.a,\n arrive: d.b,\n start: waits ? Math.min(first, d.a) : d.a,\n end: next ? Math.max(next.a, d.b) : last,\n });\n });\n }\n carriers.sort((x, y) => x.depart - y.depart);\n const states = diagram.kind === \"state\" ? stateTimes(diagram, edges, last) : undefined;\n\n return {\n total,\n last,\n steps,\n edges,\n carriers,\n labels,\n badges: steps.map((span, s) => ({ step: s, appears: span.start })),\n events,\n stills: steps.map((span) => span.end - MOTION.still),\n ...(states ? { states } : {}),\n };\n}\n\nconst isEnd = (id: string): boolean => (STATE_ENDS as readonly string[]).includes(id);\n\n/**\n * 状態遷移図の状態が光る間。段の線を引き終えて状態へ着いた時から、その状態を出る線を引き始めるまで光り、\n * 出た少し後に済んだ印を出す。同じ状態へ戻る線では光ったまま、最後に着いた状態は終わりまで光る。\n * 物が状態を移るのは線を辿った時なので、運ぶ物の種類 (硬貨や、運ばない線) を問わず全ての線で数える。\n */\nfunction stateTimes(diagram: Diagram, edges: EdgeTime[], last: number): StateTime[] {\n const times = new Map<string, StateTime>();\n const of = (box: string): StateTime => {\n const found = times.get(box) ?? { box, lit: [] };\n times.set(box, found);\n return found;\n };\n let on: { box: string; since: number } | undefined;\n for (const edge of edges) {\n const event = diagram.steps[edge.step]?.events[edge.event];\n if (event?.type !== \"edge\" || event.from === event.to) continue;\n if (on) {\n const left = of(on.box);\n left.lit.push({ start: on.since, end: edge.start });\n if (on.box === event.from && left.done === undefined) left.done = edge.start + MOTION.done;\n on = undefined;\n }\n if (!isEnd(event.to)) on = { box: event.to, since: edge.drawn };\n }\n if (on) of(on.box).lit.push({ start: on.since, end: last });\n return [...times.values()];\n}\n","/**\n * 箱と区画の印の形。どれも (0, 0) を中心に 20 四方へ収める。\n *\n * 見本帳 (`docs/design/base/engine.js` の `G`) と同じ形を持つ。`block` だけは見本帳が絵を手で描いていたので、ここで足した。\n * `undo` (戻る矢印) と `yen` (円の印) は、注文の試作 (`docs/design/base/scenes/order.js`) が返品と返金に足した形 (#3171)。\n * package の入口からも出し、見本帳の部品「絵」の頁がこの表から使える絵柄の一覧を作る。1 つずつの絵は `iconSvg` が描く (#3172)。\n */\nexport const ICONS: Readonly<Record<string, string>> = {\n app: \"M -9 -7 h18 a2 2 0 0 1 2 2 v10 a2 2 0 0 1 -2 2 h-18 a2 2 0 0 1 -2 -2 v-10 a2 2 0 0 1 2 -2 z M -11 -2 h22\",\n router: \"M -9 -4 h16 M 3 -8 l4 4 l-4 4 M 9 5 h-16 M -3 1 l-4 4 l4 4\",\n on: \"M -7 7 L 7 -7 M -1 -7 h8 v8\",\n off: \"M -7 -7 L 7 7 M 7 -1 v8 h-8\",\n pool: \"M -9 -5 a9 3.5 0 1 0 18 0 a9 3.5 0 1 0 -18 0 M -9 -5 v10 a9 3.5 0 0 0 18 0 v-10 M -9 0 a9 3.5 0 0 0 18 0\",\n db: \"M -9 -5 a9 3.5 0 1 0 18 0 a9 3.5 0 1 0 -18 0 M -9 -5 v10 a9 3.5 0 0 0 18 0 v-10 M -9 0 a9 3.5 0 0 0 18 0\",\n exe: \"M -5 -8 L 7 0 L -5 8 Z\",\n idx: \"M -9 -7 h18 M -9 -2 h18 M -9 3 h18 M -9 8 h11\",\n sign: \"M -9 4 c 3 -9 5 -9 6 0 s 3 7 6 -2 s 3 -6 6 0\",\n env: \"M -8 -5.5 h16 v11 h-16 z M -8 -5.5 l8 6 l8 -6\",\n lock: \"M -5.5 -1 h11 v8 h-11 z M -3.5 -1 v-3 a3.5 3.5 0 0 1 7 0 v3\",\n check: \"M -5 0 l3.5 3.5 l6.5 -7\",\n x: \"M -5 -5 l10 10 M 5 -5 l-10 10\",\n chain: \"M -1.5 4.5 l-2 2 a3.5 3.5 0 0 1 -5 -5 l3 -3 a3.5 3.5 0 0 1 5 0 M 1.5 -4.5 l2 -2 a3.5 3.5 0 0 1 5 5 l-3 3 a3.5 3.5 0 0 1 -5 0 M -2.5 2.5 l5 -5\",\n net: \"M -1.3 -4.6 L -5.8 3 M 1.3 -4.6 L 5.8 3 M -4.3 5.5 H 4.3 M -2.2 -7 a 2.2 2.2 0 1 0 4.4 0 a 2.2 2.2 0 1 0 -4.4 0 M -9.2 5.5 a 2.2 2.2 0 1 0 4.4 0 a 2.2 2.2 0 1 0 -4.4 0 M 4.8 5.5 a 2.2 2.2 0 1 0 4.4 0 a 2.2 2.2 0 1 0 -4.4 0\",\n user: \"M -4 -4.5 a4 4 0 1 0 8 0 a4 4 0 1 0 -8 0 M -8 9 c0 -5 3.6 -7.5 8 -7.5 s8 2.5 8 7.5\",\n server: \"M -9 -8 h18 v7 h-18 z M -9 1 h18 v7 h-18 z M -5 -4.5 h0.01 M -5 4.5 h0.01\",\n key: \"M -9 0 a3.5 3.5 0 1 0 7 0 a3.5 3.5 0 1 0 -7 0 M -2 0 h10 M 5 0 v3.5 M 8 0 v2.5\",\n shield: \"M 0 -9 l8 3 v5 c0 5 -3.5 8 -8 10 c-4.5 -2 -8 -5 -8 -10 v-5 z\",\n globe: \"M -9 0 a9 9 0 1 0 18 0 a9 9 0 1 0 -18 0 M -9 0 h18 M 0 -9 c-4.5 4 -4.5 14 0 18 M 0 -9 c4.5 4 4.5 14 0 18\",\n bolt: \"M 2 -9 L -5 1 h5 l-2 8 l7 -10 h-5 z\",\n doc: \"M -6 -9 h8 l5 5 v13 h-13 z M 2 -9 v5 h5 M -3 1 h7 M -3 5 h5\",\n box: \"M -9 -4.5 l9 -4.5 l9 4.5 v9 l-9 4.5 l-9 -4.5 z M -9 -4.5 l9 4.5 l9 -4.5 M 0 0 v9\",\n truck: \"M -10 -6 h11 v10 h-11 z M 1 -2 h5 l3.5 3.5 v2.5 h-8.5 M -7.5 6.5 a1.8 1.8 0 1 0 3.6 0 a1.8 1.8 0 1 0 -3.6 0 M 3 6.5 a1.8 1.8 0 1 0 3.6 0 a1.8 1.8 0 1 0 -3.6 0\",\n card: \"M -9 -6.5 h18 a2 2 0 0 1 2 2 v9 a2 2 0 0 1 -2 2 h-18 a2 2 0 0 1 -2 -2 v-9 a2 2 0 0 1 2 -2 z M -11 -2 h22 M -7 3 h5\",\n cart: \"M -10 -8 h3 l3 11 h11 l2.5 -8 h-15.5 M -4.5 7.5 a1.5 1.5 0 1 0 3 0 a1.5 1.5 0 1 0 -3 0 M 5 7.5 a1.5 1.5 0 1 0 3 0 a1.5 1.5 0 1 0 -3 0\",\n clock: \"M -9 0 a9 9 0 1 0 18 0 a9 9 0 1 0 -18 0 M 0 -5 v5 l3.5 2.5\",\n branch: \"M -4 -4.5 v9 M 5 0.5 c0 4 -9 3 -9 6.5 M -6.2 -7 a2.2 2.2 0 1 0 4.4 0 a2.2 2.2 0 1 0 -4.4 0 M -6.2 7 a2.2 2.2 0 1 0 4.4 0 a2.2 2.2 0 1 0 -4.4 0 M 2.8 -2 a2.2 2.2 0 1 0 4.4 0 a2.2 2.2 0 1 0 -4.4 0\",\n cloud: \"M -7 6 h13 a4.5 4.5 0 0 0 0.5 -9 a6 6 0 0 0 -11.5 -1 a4.5 4.5 0 0 0 -2 10 z\",\n refresh: \"M 7 -3 a7.5 7.5 0 1 0 0.5 5 M 7.5 -8 v5 h-5\",\n undo: \"M -7 -2 h10 a5 5 0 0 1 0 10 h-6 M -3 -6 l-4 4 l4 4\",\n yen: \"M -6 -8 l6 7 l6 -7 M 0 -1 v9 M -5 1.5 h10 M -5 5 h10\",\n layers: \"M 0 -8 l9 4.5 l-9 4.5 l-9 -4.5 z M -9 2.5 l9 4.5 l9 -4.5\",\n code: \"M -4 -6 l-5 6 l5 6 M 4 -6 l5 6 l-5 6\",\n paint: \"M -8 8 c 0 -3 2 -5 4.5 -5 l 9 -9 l 3.5 3.5 l -9 9 c 0 2.5 -2 4.5 -5 4.5 z\",\n block: \"M -9 -7 h18 a2 2 0 0 1 2 2 v10 a2 2 0 0 1 -2 2 h-18 a2 2 0 0 1 -2 -2 v-10 a2 2 0 0 1 2 -2 z M -11 -2.5 h22 M -6 2.5 h8\",\n};\n","/**\n * 区画、箱、線、線の名前、運ぶ物、段の番号、中身の帯を SVG に描く部品。見本帳の `engine.js` の部品を写す。\n *\n * どの部品も、置き場所は場面 (`layout/scene.ts`) から、いつ見えるかは時刻の表 (`timeline.ts`) から読む。\n * 色は色の役の変数 (`--c` と `--ct`) だけを渡し、値は色味の表が持つ。\n */\nimport { hasWide, textWidth } from \"../layout/measure\";\nimport {\n along,\n type Point,\n pathLength,\n type SceneAction,\n type SceneBadge,\n type SceneBox,\n type SceneEdge,\n type SceneEnd,\n type SceneLabel,\n type ScenePath,\n type SceneRegion,\n type SceneSide,\n type SceneStrip,\n} from \"../layout/scene\";\nimport { type ColorKey, EASE, LOOK, MOTION, TYPE } from \"../look/values\";\nimport type { CarrierTime, EdgeTime, LabelTime, Span, Timeline } from \"../timeline\";\nimport { ICONS } from \"./icons\";\nimport type { Frame, Motion } from \"./motion\";\n\nexport const esc = (s: string): string => s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\nconst r1 = (v: number): number => Math.round(v * 100) / 100;\n\n/** 色の役を部品へ渡す変数。 */\nexport const cs = (k: ColorKey): string => (k === \"coin\" ? \"--c:var(--coin);--ct:var(--coint)\" : `--c:var(--c-${k});--ct:var(--t-${k})`);\n\nexport function glyph(name: string | undefined, x: number, y: number, scale: number, cls = \"dg-gl\"): string {\n const d = name === undefined ? undefined : ICONS[name];\n return d ? `<path class=\"${cls}\" transform=\"translate(${r1(x)} ${r1(y)}) scale(${scale})\" d=\"${d}\"/>` : \"\";\n}\n\n/**\n * 絵柄を 1 つだけ描いた SVG (#3172)。見本帳の部品「絵」の頁が、使える絵柄を並べる時に使う。\n * 線の太さは箱の印と同じ割合 (印の線の太さ × 印の縮み) で、色は置いた所の字の色 (`currentColor`) を使う。知らない名前は `undefined`\n */\nexport function iconSvg(name: string): string | undefined {\n if (!Object.hasOwn(ICONS, name)) return undefined;\n const width = LOOK.stroke.glyph * LOOK.box.iconScale;\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-12 -12 24 24\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"${width}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"${ICONS[name]}\"/></svg>`;\n}\n\n/** 点を辿る線。曲がる所は共通の値の表の半径 (`LOOK.edge.bend`) で丸め、直角の角を作らない (#3171)。 */\nexport function pathOf(points: Point[]): string {\n const pts = points.filter((p, i) => i === 0 || p[0] !== (points[i - 1] as Point)[0] || p[1] !== (points[i - 1] as Point)[1]);\n const [x0, y0] = pts[0] as Point;\n let d = `M ${r1(x0)} ${r1(y0)}`;\n for (let i = 1; i < pts.length - 1; i++) {\n const [ax, ay] = pts[i - 1] as Point;\n const [bx, by] = pts[i] as Point;\n const [cx, cy] = pts[i + 1] as Point;\n const l1 = Math.hypot(bx - ax, by - ay);\n const l2 = Math.hypot(cx - bx, cy - by);\n const a = Math.min(LOOK.edge.bend, l1 / 2, l2 / 2);\n d += ` L ${r1(bx - ((bx - ax) / l1) * a)} ${r1(by - ((by - ay) / l1) * a)} Q ${r1(bx)} ${r1(by)} ${r1(bx + ((cx - bx) / l2) * a)} ${r1(by + ((cy - by) / l2) * a)}`;\n }\n if (pts.length > 1) {\n const [lx, ly] = pts[pts.length - 1] as Point;\n d += ` L ${r1(lx)} ${r1(ly)}`;\n }\n return d;\n}\n\n/** 矢じり。線の最後の 2 点の向きに開く。 */\nexport function arrowHead(points: Point[]): string {\n const [ex, ey] = points[points.length - 1] as Point;\n const [px, py] = points[points.length - 2] as Point;\n const len = Math.hypot(ex - px, ey - py) || 1;\n const dx = (ex - px) / len;\n const dy = (ey - py) / len;\n const { arrow: a, arrowHalf: h } = LOOK.edge;\n return `M ${r1(ex - dx * a - dy * h)} ${r1(ey - dy * a + dx * h)} L ${r1(ex)} ${r1(ey)} L ${r1(ex - dx * a + dy * h)} ${r1(ey - dy * a - dx * h)}`;\n}\n\nexport interface Ctx {\n m: Motion;\n t: Timeline;\n /** 影の filter を付ける属性 */\n sh: string;\n /** 最後の段の終わり */\n end: number;\n}\n\n/** 時刻の範囲 `[[a, b], ...]` の間だけ出る。 */\nfunction rangeKf(m: Motion, ranges: [number, number][]): string {\n const pts: Frame[] = [[0, { opacity: 0 }]];\n for (const [a, b] of ranges) pts.push([a, { opacity: 0 }, EASE.out], [a + MOTION.fade, { opacity: 1 }], [b - 0.1, { opacity: 1 }, EASE.inOut], [b + 0.25, { opacity: 0 }]);\n pts.push([m.total, { opacity: 0 }]);\n return m.kf(pts);\n}\n\n/** 箱が動く段の並びを、続いた段は 1 つの範囲にまとめて出す。 */\nexport function activeKf(ctx: Ctx, on: number[]): string {\n const ranges: [number, number][] = [];\n for (let k = 0; k < on.length; ) {\n let e = k;\n while (e + 1 < on.length && on[e + 1] === (on[e] as number) + 1) e++;\n ranges.push([(ctx.t.steps[on[k] as number] as Span).start, (ctx.t.steps[on[e] as number] as Span).end]);\n k = e + 1;\n }\n return rangeKf(ctx.m, ranges);\n}\n\nexport function band(region: SceneRegion): string {\n const { radius, icon, iconRadius, iconScale, nameY, line } = LOOK.region;\n const { x, y } = region.header;\n const lines = region.lines.map((t, k) => `<text class=\"dg-bz\" x=\"${r1(x)}\" y=\"${r1(region.y + nameY + k * line)}\">${esc(t)}</text>`).join(\"\");\n const note = region.note ? `<text class=\"dg-bx\" x=\"${r1(x)}\" y=\"${r1(region.y + nameY + region.lines.length * line + 1)}\">${esc(region.note)}</text>` : \"\";\n const mark = region.icon && ICONS[region.icon] ? `<rect class=\"dg-bi\" x=\"${r1(x)}\" y=\"${r1(y)}\" width=\"${icon}\" height=\"${icon}\" rx=\"${iconRadius}\"/>${glyph(region.icon, x + icon / 2, y + icon / 2, iconScale)}` : \"\";\n return `<g style=\"${cs(region.color)}\"><rect class=\"dg-band\" x=\"${r1(region.x + 0.5)}\" y=\"${r1(region.y + 0.5)}\" width=\"${r1(region.w - 1)}\" height=\"${r1(region.h - 1)}\" rx=\"${radius}\"/>${mark}${lines}${note}</g>`;\n}\n\n/** 箱の下の小さな字の移り変わり。`[時刻, 字, class]` の並びで、最初は元の字。 */\nexport type SubChange = [number, string, string];\n\n/** 箱の下の小さな字。基準線を `y` に置き、起きたことに合わせて書き換わる。 */\nfunction subLines(box: SceneBox, m: Motion, changes: SubChange[], y: number): string {\n const seq: SubChange[] = [[0, box.sub ?? \"\", \"dg-ss\"], ...changes];\n return seq\n .map(([t, text, cls], k) => {\n const next = seq[k + 1]?.[0];\n const anim = k === 0 ? (next === undefined ? \"\" : m.until(next - MOTION.untilFade)) : next === undefined ? m.rise(t) : m.rise(t, next - MOTION.untilFade);\n if (text === \"\") return \"\";\n return `<g${anim ? ` class=\"dg-a\" style=\"${anim}\"` : \"\"}><text class=\"${cls}\" x=\"${r1(box.cx)}\" y=\"${r1(y)}\" text-anchor=\"middle\">${esc(text)}</text></g>`;\n })\n .join(\"\");\n}\n\n/** 箱の地と縁。上端 `y` から高さ `h`。動く段 (`act` の間) は縁に色を付け、外側に淡い光を足す。 */\nfunction cardFrame(box: SceneBox, ctx: Ctx, act: string | undefined, y: number, h: number): string {\n const rect = (cls: string, extra = \"\"): string => `<rect class=\"${cls}\" x=\"${r1(box.x)}\" y=\"${r1(y)}\" width=\"${r1(box.w)}\" height=\"${h}\" rx=\"${LOOK.box.radius}\"${extra}/>`;\n return `${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-halo\")}</g>` : \"\"}${rect(\"dg-st\", ` ${ctx.sh}`)}${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-on\")}</g>` : \"\"}`;\n}\n\n/**\n * 箱。動く段は縁に色を付け、外側に淡い光を足す。下の小さな字は起きたことに合わせて書き換わる。\n * `lit` を渡すと、動く段ではなくその間だけ光らせる (状態遷移図の、運ぶ物が乗っている状態)。\n */\nexport function card(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[], lit?: Span[]): string {\n const { icon, iconRadius, iconScale, iconY, nameY, subY } = LOOK.box;\n const subs = subLines(box, ctx.m, changes, box.cy + subY);\n const act = lit ? (lit.length > 0 ? rangeKf(ctx.m, lit.map((s) => [s.start, s.end])) : undefined) : on.length > 0 ? activeKf(ctx, on) : undefined;\n const mark =\n box.icon && ICONS[box.icon]\n ? `<rect class=\"dg-ic\" x=\"${r1(box.cx - icon / 2)}\" y=\"${r1(box.cy + iconY - icon / 2)}\" width=\"${icon}\" height=\"${icon}\" rx=\"${iconRadius}\"/>${glyph(box.icon, box.cx, box.cy + iconY, iconScale)}`\n : \"\";\n return (\n `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, box.y, box.h)}` +\n `${mark}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(box.cy + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`\n );\n}\n\n/**\n * 寄って追う時系列図の窓の上端に貼る頭の箱 (#3120)。図の頭の箱と同じ横の位置と縁で、アイコンを外して名前と下の字の 2 段にする。\n * 携帯の幅では窓が低く、図の頭の箱のままでは窓の高さの 3 割を頭の列が取るため。\n */\nexport function headCard(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { pad, h, nameY, subY } = LOOK.follow.head;\n const subs = subLines(box, ctx.m, changes, pad + subY);\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n return `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, pad, h)}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(pad + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`;\n}\n\n/** 状態遷移図の、どの段も辿り着かない状態。点線の縁の札で、絵柄を左に、名前と下の字を右に並べる (#3171)。光らず、字も書き換わらない */\nexport function ghostCard(box: SceneBox): string {\n const { icon, iconRadius, iconScale, radius } = LOOK.box;\n const G = LOOK.state.ghost;\n const ix = box.x + G.pad + icon / 2;\n const tx = box.x + G.pad + icon + G.gap;\n const mark = box.icon && ICONS[box.icon] ? `<rect class=\"dg-ic\" x=\"${r1(ix - icon / 2)}\" y=\"${r1(box.cy - icon / 2)}\" width=\"${icon}\" height=\"${icon}\" rx=\"${iconRadius}\"/>${glyph(box.icon, ix, box.cy, iconScale)}` : \"\";\n const nameY = box.sub ? G.nameY : LOOK.baseline.mark;\n const sub = box.sub ? `<text class=\"dg-ss\" x=\"${r1(tx)}\" y=\"${r1(box.cy + G.subY)}\" text-anchor=\"start\">${esc(box.sub)}</text>` : \"\";\n return (\n `<g data-ghost=\"${esc(box.id)}\" style=\"${cs(box.color)}\"><rect class=\"dg-ghost\" x=\"${r1(box.x)}\" y=\"${r1(box.y)}\" width=\"${r1(box.w)}\" height=\"${box.h}\" rx=\"${radius}\"/>` +\n `${mark}<text class=\"dg-sn\" x=\"${r1(tx)}\" y=\"${r1(box.cy + nameY)}\" text-anchor=\"start\">${esc(box.name)}</text>${sub}</g>`\n );\n}\n\n/** 状態遷移図の、出た状態の右上の済んだ印。`at` に弾んで出て、繰り返す前に消える */\nexport function doneMark(box: SceneBox, at: number, ctx: Ctx): string {\n const { r, inset } = LOOK.state.done;\n const x = box.x + box.w - inset;\n const y = box.y + inset;\n return `<g class=\"dg-popc dg-a\" data-done=\"${esc(box.id)}\" style=\"${cs(box.color)};${ctx.m.pop(at)}\"><circle class=\"dg-done\" cx=\"${r1(x)}\" cy=\"${r1(y)}\" r=\"${r}\"/>${glyph(\"check\", x, y, 0.5, \"dg-done-ck\")}</g>`;\n}\n\n/** 状態遷移図の通らない道。点線で道と向きだけを見せ、運ぶ物を走らせない */\nexport function path(p: ScenePath, color: ColorKey): string {\n const label = p.label\n ? `<text class=\"dg-path-t${p.label.family === \"sans\" ? \" dg-path-tj\" : \"\"}\" x=\"${r1(p.label.x + LOOK.label.padX)}\" y=\"${r1(p.label.y + p.label.h / 2 + LOOK.baseline.label)}\">${esc(p.label.text)}</text>`\n : \"\";\n return `<g data-path=\"${esc(`${p.from}->${p.to}`)}\" style=\"${cs(color)}\"><path class=\"dg-path\" d=\"${pathOf(p.points)}\"/><path class=\"dg-path-h\" d=\"${arrowHead(p.points)}\"/>${label}</g>`;\n}\n\n/** 状態遷移図の脇道の囲み。左上に囲みの名前を、その下に添え書きを 1 行ずつ置く */\nexport function side(s: SceneSide, color: ColorKey): string {\n const { pad } = LOOK.state.side;\n const title = s.y + pad + TYPE.regionName.size;\n const notes = s.notes.map((note, k) => `<text class=\"dg-side-n\" x=\"${r1(s.x + pad)}\" y=\"${r1(title + LOOK.region.line * (k + 1))}\">${esc(note)}</text>`).join(\"\");\n return (\n `<g style=\"${cs(color)}\"><rect class=\"dg-side\" x=\"${r1(s.x + 0.5)}\" y=\"${r1(s.y + 0.5)}\" width=\"${r1(s.w - 1)}\" height=\"${r1(s.h - 1)}\" rx=\"${LOOK.region.radius}\"/>` +\n `<text class=\"dg-side-t\" x=\"${r1(s.x + pad)}\" y=\"${r1(title)}\">${esc(s.title)}</text>${notes}</g>`\n );\n}\n\n/** 状態遷移図の始まりと終わりの印。始まりは塗った丸、終わりは輪の中の丸で、脇道の中の終わりは点線の輪 */\nexport function endMark(e: SceneEnd, color: ColorKey): string {\n const { end } = LOOK.state;\n const text = e.text === \"\" ? \"\" : `<text class=\"dg-mark\" x=\"${r1(e.x + LOOK.state.text)}\" y=\"${r1(e.y + LOOK.baseline.mark)}\">${esc(e.text)}</text>`;\n const x = r1(e.x);\n const y = r1(e.y);\n if (e.kind === \"start\") return `<g data-end=\"start\"><circle class=\"dg-start\" cx=\"${x}\" cy=\"${y}\" r=\"${e.r}\"/>${text}</g>`;\n if (e.ghost) return `<g data-end=\"finish\" style=\"${cs(color)}\"><circle class=\"dg-end-x\" cx=\"${x}\" cy=\"${y}\" r=\"${e.r}\"/><circle class=\"dg-end-xi\" cx=\"${x}\" cy=\"${y}\" r=\"${end.inner}\"/>${text}</g>`;\n return `<g data-end=\"finish\"><circle class=\"dg-end\" cx=\"${x}\" cy=\"${y}\" r=\"${e.r}\"/><circle class=\"dg-end-in\" cx=\"${x}\" cy=\"${y}\" r=\"${end.inner}\"/>${text}</g>`;\n}\n\nexport function lifeline(x: number, y1: number, y2: number): string {\n return `<line class=\"dg-ll\" x1=\"${r1(x)}\" y1=\"${r1(y1)}\" x2=\"${r1(x)}\" y2=\"${r1(y2)}\"/>`;\n}\n\n/**\n * 線。点線で道を見せておき、その段で色の線を引いて、段の終わりまで流れる点で向きを見せる。\n * 済んだ段は薄く残し、最後の段の後に通った道を全て濃くし直す。\n * `past` を立てると (状態遷移図、#3171)、段が終わった後は色の線を消して灰の実線に替え、最後の段まで残す。\n */\nexport function edge(e: SceneEdge, time: EdgeTime, ctx: Ctx, past = false): { base: string; lit: string } {\n const { m } = ctx;\n const d = pathOf(e.points);\n const head = arrowHead(e.points);\n const { start: a, drawn: b, end } = time;\n const tail: Frame[] = past\n ? [\n [end, { opacity: 1 }, EASE.inOut],\n [end + 0.4, { opacity: 0 }],\n [m.total, { opacity: 0 }],\n ]\n : [\n [end, { opacity: 1 }, EASE.inOut],\n [end + 0.4, { opacity: 0.45 }],\n [ctx.end + 0.3, { opacity: 0.45 }, EASE.inOut],\n [ctx.end + 1, { opacity: 0.95 }],\n [m.last, { opacity: 0.95 }, EASE.inOut],\n [m.total, { opacity: 0 }],\n ];\n const line = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 1 }],\n [a, { opacity: 0, \"stroke-dashoffset\": 1 }, EASE.inOut],\n [a + 0.05, { opacity: 1 }],\n [b, { \"stroke-dashoffset\": 0 }],\n [m.last, { \"stroke-dashoffset\": 0 }],\n [m.total, { \"stroke-dashoffset\": 1 }],\n ...tail,\n ]);\n const hk = m.kf([[0, { opacity: 0 }], [b - 0.05, { opacity: 0 }], [b, { opacity: 1 }], ...tail]);\n const run = -(end - b) * 26;\n const flow = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b + 0.25, { opacity: 0.9 }],\n [end - 0.1, { opacity: 0.9 }, EASE.inOut],\n [end + 0.2, { opacity: 0, \"stroke-dashoffset\": run }],\n [m.total, { opacity: 0, \"stroke-dashoffset\": run }],\n ]);\n const grey = past ? m.kf([[0, { opacity: 0 }], [end, { opacity: 0 }, EASE.inOut], [end + 0.4, { opacity: 1 }], [m.last, { opacity: 1 }, EASE.inOut], [m.total, { opacity: 0 }]]) : \"\";\n return {\n base: `<path class=\"dg-e\" d=\"${d}\"/><path class=\"dg-eh\" d=\"${head}\"/>${past ? `<path class=\"dg-e-past dg-a\" d=\"${d}\" style=\"${grey}\"/><path class=\"dg-eh-past dg-a\" d=\"${head}\" style=\"${grey}\"/>` : \"\"}`,\n lit: `<g style=\"${cs(e.color)}\"><path class=\"dg-e-on dg-a\" pathLength=\"1\" d=\"${d}\" style=\"${line}\"/><path class=\"dg-eh-on dg-a\" d=\"${head}\" style=\"${hk}\"/><path class=\"dg-flow dg-a\" d=\"${d}\" style=\"${flow}\"/></g>`,\n };\n}\n\n/** 線の名前の札。その段の間だけ出し、段の終わりまでに消え終わる。時刻の表が `after` を持つ時は、その間だけ札を外した灰の字で薄く残す (#3171)。 */\nexport function label(l: SceneLabel, time: LabelTime, ctx: Ctx): string {\n const ja = l.family === \"sans\" ? \" dg-capj\" : \"\";\n const { radius } = LOOK.label;\n const x = r1(l.x + l.w / 2);\n const y = r1(l.y + l.h / 2 + LOOK.baseline.label);\n const past = time.after ? `<g class=\"dg-cap-past${l.family === \"sans\" ? \" dg-cap-pastj\" : \"\"} dg-a\" style=\"${ctx.m.vis(time.after.start, time.after.end)}\"><text x=\"${x}\" y=\"${y}\" text-anchor=\"middle\">${esc(l.text)}</text></g>` : \"\";\n return `${past}<g class=\"dg-cap${ja} dg-a\" style=\"${cs(l.color)};${ctx.m.rise(time.start, time.end, true)}\"><rect x=\"${r1(l.x)}\" y=\"${r1(l.y)}\" width=\"${r1(l.w)}\" height=\"${l.h}\" rx=\"${radius}\"/><text x=\"${x}\" y=\"${y}\" text-anchor=\"middle\">${esc(l.text)}</text></g>`;\n}\n\n/** 時系列図の箱の中の処理の札。その段の間だけ生存線の上に出す。 */\nexport function action(a: SceneAction, at: number, until: number, ctx: Ctx): string {\n return `<g class=\"dg-act dg-a\" style=\"${cs(a.color)};${ctx.m.rise(at, until, true)}\"><rect x=\"${r1(a.x)}\" y=\"${r1(a.y)}\" width=\"${r1(a.w)}\" height=\"${a.h}\" rx=\"${LOOK.action.radius}\"/><text x=\"${r1(a.x + a.w / 2)}\" y=\"${r1(a.y + a.h / 2 + LOOK.baseline.action)}\" text-anchor=\"middle\">${esc(a.text)}</text></g>`;\n}\n\nfunction carrierShape(e: SceneEdge, sh: string): string {\n const C = LOOK.carrier;\n if (e.carry.kind === \"coin\") return `<circle class=\"dg-coin\" r=\"${C.coinR}\"/><circle class=\"dg-coin-in\" r=\"${C.coinIn}\"/>`;\n if (e.carry.kind === \"tag\") {\n const text = e.carry.text;\n const ja = hasWide(text);\n const w = textWidth(text, ja ? TYPE.carrierJa : TYPE.carrier) + C.tagPadX * 2;\n return `<rect class=\"dg-car\" x=\"${r1(-w / 2)}\" y=\"${-C.tagH / 2}\" width=\"${r1(w)}\" height=\"${C.tagH}\" rx=\"${C.tagH / 2}\" ${sh}/><text class=\"dg-car-t${ja ? \" dg-car-tj\" : \"\"}\" y=\"${LOOK.baseline.carrier}\" text-anchor=\"middle\">${esc(text)}</text>`;\n }\n return `<rect class=\"dg-env\" x=\"${-C.envW / 2}\" y=\"${-C.envH / 2}\" width=\"${C.envW}\" height=\"${C.envH}\" rx=\"3\" ${sh}/><path class=\"dg-env-in\" d=\"M -8 -4.5 L 0 1.5 L 8 -4.5\"/>`;\n}\n\nconst easeInOut = (t: number): number => (t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2);\n\n/** 運ぶ物。線の上を走り、着いた先 (`settle`) へ寄って、次の同じ主役が出発するまで留まる。 */\nexport function carrier(e: SceneEdge, time: CarrierTime, ctx: Ctx): string {\n const { m } = ctx;\n const n = LOOK.carrier.samples;\n const length = pathLength(e.points);\n const { depart: a, arrive: b, start: from, end: gone } = time;\n const path: [number, number, number][] = [];\n for (let k = 0; k <= n; k++) {\n const [x, y] = along(e.points, easeInOut(k / n) * length);\n path.push([a + ((b - a) * k) / n, x, y]);\n }\n const first = path[0] as [number, number, number];\n const lastPoint = path[path.length - 1] as [number, number, number];\n const rest: Point = e.settle ?? [lastPoint[1], lastPoint[2]];\n const pts: [number, number, number][] = [[0, first[1], first[2]], ...path];\n if (e.settle) pts.push([Math.min(b + 0.3, Math.max(gone, b + 0.01)), rest[0], rest[1]]);\n pts.push([gone, rest[0], rest[1]], [m.total, rest[0], rest[1]]);\n // 次の運ぶ物と入れ替わる時は、重なって 2 つに見えないよう素早く消す\n const fade = gone < m.last ? 0.05 : 0.18;\n return `<g class=\"dg-a\" style=\"${m.move(pts, m.blink(from + 0.02, gone, fade))}\">${carrierShape(e, ctx.sh)}</g>`;\n}\n\n/**\n * 段の番号。まだ来ていない段は出さず、今の段は塗り、済んだ段は縁取りに変えて番号を読めるまま残す。\n * `grey` を立てると (状態遷移図、#3171)、済んだ段の縁取りを線と同じ灰にする。\n */\nexport function badge(b: SceneBadge, ctx: Ctx, grey = false): string {\n const { m } = ctx;\n const span = ctx.t.steps[b.step] as Span;\n const a = span.start;\n const e = span.end;\n const { r, ring: rr } = LOOK.badge;\n const fill = m.kf([\n [0, { opacity: 0, transform: \"scale(.5)\" }],\n [a, { opacity: 0, transform: \"scale(.5)\" }, EASE.pop],\n [a + 0.35, { opacity: 1, transform: \"scale(1)\" }],\n [e, { opacity: 1, transform: \"scale(1)\" }, EASE.inOut],\n [e + 0.4, { opacity: 0, transform: \"scale(1)\" }],\n [m.total, { opacity: 0, transform: \"scale(.5)\" }],\n ]);\n const past = m.kf([[0, { opacity: 0 }], [e, { opacity: 0 }, EASE.inOut], [e + 0.4, { opacity: 1 }], [m.last, { opacity: 1 }, EASE.inOut], [m.total, { opacity: 0 }]]);\n const ring = m.kf([\n [0, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.05, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.1, { opacity: 0.7, transform: \"scale(1)\" }, EASE.out],\n [a + 0.9, { opacity: 0, transform: \"scale(2.3)\" }],\n [m.total, { opacity: 0, transform: \"scale(1)\" }],\n ]);\n const x = r1(b.x);\n const y = r1(b.y);\n const ty = r1(b.y + LOOK.baseline.badge);\n const no = b.step + 1;\n return (\n `<g class=\"dg-bd\" data-step=\"${b.step}\" style=\"${cs(b.color)}\"><circle class=\"dg-bdr dg-popc dg-a\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\" style=\"${ring}\"/>` +\n `<g class=\"dg-a\" style=\"${past}\"><circle class=\"${grey ? \"dg-bdp-g\" : \"dg-bdp\"}\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\"/><text class=\"${grey ? \"dg-bdpt-g\" : \"dg-bdpt\"}\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g>` +\n `<g class=\"dg-popc dg-a\" style=\"${fill}\"><circle class=\"dg-bdf\" cx=\"${x}\" cy=\"${y}\" r=\"${r}\"/><text class=\"dg-bdft\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g></g>`\n );\n}\n\n/** 中身の帯の 1 欄の移り変わり。値と札は、次の値か札が来るまで出る。 */\nexport interface FieldChange {\n at: number;\n value?: string;\n tag?: string;\n color: ColorKey;\n /** 変わった段と、その段の終わり */\n step: number;\n until: number;\n}\n\n/**\n * 中身の帯。`now` を立てると (状態遷移図、#3171)、段の中で変わった値をその段の終わりまで線の色 (今の状態の色) で描き、\n * 欄の名前の横に同じ色の点を置く。帯の通った状態の欄は、`arrivals` が持つ着いた時刻に点を塗る。\n */\nexport function strip(s: SceneStrip, changes: Map<string, FieldChange[]>, ctx: Ctx, now = false, arrivals = new Map<string, number>()): string {\n const { m, sh } = ctx;\n const S = LOOK.strip;\n const my = s.y + S.h / 2;\n const parts = [\n `<rect class=\"dg-strip\" x=\"${r1(s.x + 0.5)}\" y=\"${r1(s.y + 0.5)}\" width=\"${r1(s.w - 1)}\" height=\"${r1(s.h - 1)}\" rx=\"${LOOK.region.radius}\" ${sh}/>`,\n `<g style=\"${cs(\"slate\")}\"><rect class=\"dg-bi\" x=\"${r1(s.x + S.pad)}\" y=\"${r1(my - S.icon / 2)}\" width=\"${S.icon}\" height=\"${S.icon}\" rx=\"${LOOK.box.iconRadius}\"/>${glyph(\"env\", s.x + S.pad + S.icon / 2, my, 0.78)}</g>`,\n `<text class=\"dg-sh\" x=\"${r1(s.x + S.titleX)}\" y=\"${r1(my + LOOK.baseline.stripTitle)}\">${esc(s.title)}</text>`,\n ];\n s.fields.forEach((field, i) => {\n const prev = s.fields[i - 1];\n if (prev && prev.y === field.y) {\n const sx = field.x - S.fieldGap / 2;\n parts.push(`<line class=\"dg-sep\" x1=\"${r1(sx)}\" y1=\"${r1(field.y + S.sepInset)}\" x2=\"${r1(sx)}\" y2=\"${r1(field.y + S.h - S.sepInset)}\"/>`);\n }\n parts.push(`<text class=\"dg-fl\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.nameY)}\">${esc(field.name)}</text>`);\n const list = changes.get(field.name) ?? [];\n const values = list.filter((c) => c.value !== undefined);\n const tags = list.filter((c) => c.tag !== undefined);\n values.forEach((c, k) => {\n const next = values[k + 1]?.at;\n const value = c.value as string;\n const cls = hasWide(value) ? \"dg-fvj\" : \"dg-fv\";\n const textOf = (c: string): string => `<text class=\"${c}\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.valueY)}\">${esc(value)}</text>`;\n const text = textOf(cls);\n if (!now) {\n const anim = next === undefined ? m.rise(c.at) : m.rise(c.at, next - MOTION.untilFade);\n parts.push(`<g class=\"dg-a\" style=\"${anim}\">${text}</g>`);\n return;\n }\n // 変わった段の間は今の状態の色で、段が終わると墨に戻す\n const until = Math.min(c.until, next ?? c.until);\n const dot = `<circle class=\"dg-fl-now\" cx=\"${r1(field.x + textWidth(field.name, TYPE.fieldName) + S.now.gap)}\" cy=\"${r1(field.y + S.nameY - TYPE.fieldName.size / 3)}\" r=\"${S.now.r}\"/>`;\n parts.push(`<g class=\"dg-fv-now dg-a\" data-step=\"${c.step}\" style=\"${cs(c.color)};${m.rise(c.at, until - MOTION.untilFade)}\">${textOf(`${cls} dg-fv-c`)}${dot}</g>`);\n if (next === undefined || next > until) parts.push(`<g class=\"dg-a\" style=\"${m.vis(until - MOTION.untilFade, next === undefined ? m.last : next - MOTION.untilFade)}\">${text}</g>`);\n });\n tags.forEach((c, k) => {\n const next = tags[k + 1]?.at;\n const tag = c.tag as string;\n // 札は、その時に出ている値の右に置く\n const shown = [...values].reverse().find((v) => v.at <= c.at + 1e-9)?.value;\n const x = field.x + (shown ? textWidth(shown, hasWide(shown) ? TYPE.fieldValueJa : TYPE.fieldValue) + S.tagGap : 0);\n const w = textWidth(tag, TYPE.tag) + S.tagPadX * 2;\n const y = field.y + S.valueY - S.tagH / 2 - LOOK.baseline.tag;\n parts.push(\n `<g class=\"dg-tg dg-popc dg-a\" style=\"${cs(c.color)};${next === undefined ? m.pop(c.at) : m.pop(c.at, next - MOTION.untilFade)}\"><rect x=\"${r1(x)}\" y=\"${r1(y)}\" width=\"${r1(w)}\" height=\"${S.tagH}\" rx=\"${S.tagH / 2}\"/><text x=\"${r1(x + w / 2)}\" y=\"${r1(y + S.tagH / 2 + LOOK.baseline.tag)}\" text-anchor=\"middle\">${esc(tag)}</text></g>`,\n );\n });\n });\n if (s.trail) {\n const t = s.trail;\n const last = s.fields[s.fields.length - 1];\n if (last && last.y === t.y) {\n const sx = t.x - S.fieldGap / 2;\n parts.push(`<line class=\"dg-sep\" x1=\"${r1(sx)}\" y1=\"${r1(t.y + S.sepInset)}\" x2=\"${r1(sx)}\" y2=\"${r1(t.y + S.h - S.sepInset)}\"/>`);\n }\n parts.push(`<text class=\"dg-fl\" x=\"${r1(t.x)}\" y=\"${r1(t.y + S.nameY)}\">${esc(t.title)}</text>`);\n const dy = t.y + S.valueY - TYPE.fieldValue.size / 3;\n t.states.forEach((state, k) => {\n const cx = r1(t.x + S.trail.r + k * S.trail.step);\n const at = arrivals.get(state.box);\n const fill = at === undefined ? \"\" : `<circle class=\"dg-tr-fill dg-a\" cx=\"${cx}\" cy=\"${r1(dy)}\" r=\"${S.trail.r}\" style=\"${m.pop(at)}\"/>`;\n parts.push(`<g data-trail=\"${esc(state.box)}\" style=\"${cs(state.color)}\"><circle class=\"dg-tr-ring\" cx=\"${cx}\" cy=\"${r1(dy)}\" r=\"${S.trail.r}\"/>${fill}</g>`);\n });\n }\n return parts.join(\"\");\n}\n","/**\n * 時刻の点の並びから CSS の keyframes を組む道具。見本帳の `engine.js` の `kf` / `vis` / `rise` / `pop` / `move` を写す。\n *\n * 動きは全て 1 周 `total` 秒の keyframes で、点の時刻は 1 周の中の割合 (%) に直す。\n * 性質ごとに独立して補間されるので、点ごとに変える性質だけを書く。\n */\nimport { EASE, LOOK, MOTION } from \"../look/values\";\n\nexport type Props = Record<string, string | number>;\nexport type Frame = [time: number, props: Props, ease?: string];\n\nconst r2 = (v: number): number => Math.round(v * 100) / 100;\n\nexport class Motion {\n readonly frames: string[] = [];\n private count = 0;\n\n constructor(\n private readonly prefix: string,\n readonly total: number,\n readonly last: number,\n ) {}\n\n private pct(t: number): number {\n return +((Math.min(Math.max(t, 0), this.total) / this.total) * 100).toFixed(3);\n }\n\n /** keyframes を 1 つ足し、その名前を付ける style の字を返す。 */\n kf(points: Frame[]): string {\n const name = `${this.prefix}-${this.count++}`;\n const at = new Map<number, { props: Props; ease?: string }>();\n for (const [t, props, ease] of [...points].sort((a, b) => a[0] - b[0])) {\n const p = this.pct(t);\n const cur = at.get(p) ?? { props: {} };\n Object.assign(cur.props, props);\n if (ease) cur.ease = ease;\n at.set(p, cur);\n }\n const body = [...at]\n .map(([p, { props, ease }]) => {\n const d = Object.entries(props).map(([k, v]) => `${k}:${v}`);\n if (ease) d.push(`animation-timing-function:${ease}`);\n return `${p}%{${d.join(\";\")}}`;\n })\n .join(\"\");\n this.frames.push(`@keyframes ${name}{${body}}`);\n return `animation-name:${name}`;\n }\n\n /** `a` で出て `b` から消える。`within` を立てると `b` までに消え終わる。 */\n vis(a: number, b = this.last, o: { f?: number; on?: Props; off?: Props; ein?: string; within?: boolean } = {}): string {\n const f = o.f ?? MOTION.fade;\n const on = o.on ?? {};\n const off = o.off ?? {};\n const out = o.within ? Math.max(a + f, b - f) : b;\n return this.kf([\n [0, { opacity: 0, ...off }],\n [a, { opacity: 0, ...off }, o.ein ?? EASE.out],\n [a + f, { opacity: 1, ...on }],\n [out, { opacity: 1, ...on }, EASE.inOut],\n [Math.min(out + f, this.total), { opacity: 0, ...off }],\n [this.total, { opacity: 0, ...off }],\n ]);\n }\n\n /** 少し下から浮いて出る。 */\n rise(a: number, b = this.last, within = false): string {\n return this.vis(a, b, { on: { transform: \"translateY(0)\" }, off: { transform: `translateY(${LOOK.rise}px)` }, within });\n }\n\n /** 小さな所から弾んで出る。 */\n pop(a: number, b = this.last): string {\n return this.vis(a, b, { f: MOTION.popFade, ein: EASE.pop, on: { transform: \"scale(1)\" }, off: { transform: `scale(${LOOK.popFrom})` } });\n }\n\n /** 初めから出ていて `b` で消える。 */\n until(b: number): string {\n const f = MOTION.untilFade;\n return this.kf([\n [0, { opacity: 1 }],\n [b, { opacity: 1 }, EASE.inOut],\n [b + f, { opacity: 0 }],\n [this.last, { opacity: 0 }],\n [this.total, { opacity: 1 }],\n ]);\n }\n\n /** 点を辿って動く。`[時刻, x, y, 大きさ, 次の点までの緩急]` の並び。 */\n move(points: [number, number, number, number?, string?][], extra: Frame[] = []): string {\n return this.kf(\n points.map(([t, x, y, s = 1, ease]): Frame => [t, { transform: `translate(${r2(x)}px,${r2(y)}px) scale(${s})` }, ease]).concat(extra),\n );\n }\n\n /** `a` から `b` まで見え、`fade` 秒で消える。 */\n blink(a: number, b: number, fade: number): Frame[] {\n return [\n [0, { opacity: 0 }],\n [a - 0.01, { opacity: 0 }],\n [a, { opacity: 1 }],\n [b, { opacity: 1 }],\n [b + fade, { opacity: 0 }],\n [this.total, { opacity: 0 }],\n ];\n }\n}\n","/**\n * 原本の JSON から図を描く入口。置き場所と時刻の表を作り、部品を重なりの順に並べて SVG にする。\n *\n * 動きは全て SVG の中の CSS の keyframes が回す。1 周の長さは `--T`、止める時刻は `--at`、\n * 止めるか流すかは `--play` の変数で外から変えられる (頁に置く `player.ts` がこれを使う)。\n * 色と字は値の表から CSS の変数として 1 度だけ書き、部品はその変数だけを読む。\n */\nimport { FIGURE_TEXT } from \"../figure-text\";\nimport { layoutArchitecture } from \"../layout/architecture\";\nimport { textWidth } from \"../layout/measure\";\nimport type { Layout, Rect } from \"../layout/scene\";\nimport { layoutSequence } from \"../layout/sequence\";\nimport { layoutState } from \"../layout/state\";\nimport { FONTS } from \"../look/fonts\";\nimport { type ColorKey, EASE, FONT_VARS, LOOK, MOTION, type Palette, paletteVars, resolvePalette, type TextStyle, type Theme, TYPE } from \"../look/values\";\nimport { readDiagram } from \"../version\";\nimport type { Diagram, ViewMode } from \"../schema\";\nimport { buildTimeline, type Span, type Timeline } from \"../timeline\";\nimport type { NotationLang } from \"../words\";\nimport {\n action,\n badge,\n band,\n card,\n carrier,\n type Ctx,\n cs,\n doneMark,\n edge,\n endMark,\n esc,\n type FieldChange,\n ghostCard,\n headCard,\n label,\n lifeline,\n path,\n side,\n strip,\n type SubChange,\n} from \"./parts\";\nimport { Motion } from \"./motion\";\n\nexport interface RenderOptions {\n /** 色味の名前。書かないか知らない名前なら紙と墨 */\n palette?: string;\n theme?: Theme;\n /** 描く部品が出す字 (断りの文、全体図の札、読み上げの名前) の言葉。書かなければ日本語 (#3001) */\n lang?: NotationLang;\n}\n\nexport interface Rendered {\n svg: string;\n palette: string;\n theme: Theme;\n /** 書き手が原本で決めた見せ方 */\n view?: ViewMode;\n fonts: { sans: string; mono: string };\n layout: Layout;\n timeline: Timeline;\n diagram: Diagram;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst mix = (pct: number, base = \"var(--surf)\"): string => `color-mix(in srgb,var(--c) ${pct}%,${base})`;\nconst S = LOOK.stroke;\nconst X = LOOK.mix;\n/** 状態遷移図で段が終わった線と番号の灰 (#3171) */\nconst PAST = `color-mix(in srgb,var(--mute) ${X.past}%,var(--bg))`;\n\n/** 部品の見た目。どの値も値の表から読む。 */\nconst PART_CSS = [\n \".dg{display:block;width:100%;height:auto;overflow:visible}\",\n \".dg .dg-a{animation-duration:var(--T);animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both;animation-delay:calc(var(--at,0) * -1s);animation-play-state:var(--play,running)}\",\n \".dg .dg-popc{transform-box:fill-box;transform-origin:center}\",\n \".dg-bg{fill:var(--bg)}\",\n \".dg-band{fill:color-mix(in srgb,var(--c) var(--tint),var(--bg));stroke:color-mix(in srgb,var(--c) var(--edge),transparent)}\",\n `.dg-bi{fill:${mix(X.regionIcon)};stroke:${mix(X.regionIconEdge, \"transparent\")}}`,\n `.dg-bz{${font(TYPE.regionName)};fill:var(--ct)}`,\n `.dg-bx{${font(TYPE.regionNote)};fill:var(--mute)}`,\n \".dg-st{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-halo{fill:none;stroke:var(--c);stroke-width:${S.halo};stroke-opacity:.16}`,\n `.dg-on{fill:none;stroke:var(--c);stroke-width:${S.on}}`,\n `.dg-ic{fill:${mix(X.icon)}}`,\n `.dg-gl{fill:none;stroke:var(--c);stroke-width:${S.glyph};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-sn{${font(TYPE.boxName)};fill:var(--ink)}`,\n `.dg-ss{${font(TYPE.boxSub)};fill:var(--mute)}`,\n `.dg-ss-ok{${font(TYPE.boxSubStrong)};fill:var(--ct)}`,\n `.dg-ss-act{${font(TYPE.boxSubStrong)};fill:var(--ink)}`,\n `.dg-ll{stroke:var(--line);stroke-width:${S.lifeline};stroke-dasharray:3 4}`,\n `.dg-e{fill:none;stroke:var(--line);stroke-width:${S.edge};stroke-linecap:round;stroke-dasharray:0 ${LOOK.edge.ghostDash}}`,\n `.dg-eh{fill:none;stroke:var(--line);stroke-width:${S.arrow};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-e-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-dasharray:1 2}`,\n `.dg-eh-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-flow{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linecap:round;stroke-dasharray:1.5 ${LOOK.edge.flowDash}}`,\n `.dg-e-past{fill:none;stroke:${PAST};stroke-width:${S.edge};stroke-linecap:round}`,\n `.dg-eh-past{fill:none;stroke:${PAST};stroke-width:${S.arrow};stroke-linecap:round;stroke-linejoin:round}`,\n \".dg-bd{cursor:pointer}\",\n \".dg-bdf{fill:var(--c)}\",\n `.dg-bdft{${font(TYPE.badge)};fill:var(--on-c)}`,\n `.dg-bdr{fill:none;stroke:var(--c);stroke-width:${S.badgeRing}}`,\n `.dg-bdp{fill:${mix(X.badgePast)};stroke:${mix(X.badgePastEdge, \"transparent\")};stroke-width:${S.hair}}`,\n `.dg-bdpt{${font(TYPE.badge)};fill:var(--ct)}`,\n `.dg-bdp-g{fill:var(--surf);stroke:${PAST};stroke-width:${S.hair}}`,\n `.dg-bdpt-g{${font(TYPE.badge)};fill:var(--mute)}`,\n `.dg-cap rect,.dg-act rect{fill:${mix(X.cap)};stroke:${mix(X.capEdge, \"transparent\")}}`,\n `.dg-cap text{${font(TYPE.label)};fill:var(--ct)}`,\n `.dg-capj text{${font(TYPE.labelJa)}}`,\n `.dg-cap-past text{${font(TYPE.label)};fill:var(--mute);fill-opacity:${LOOK.state.pastLabel}}`,\n `.dg-cap-pastj text{${font(TYPE.labelJa)}}`,\n `.dg-act text{${font(TYPE.action)};fill:var(--ct)}`,\n \".dg-car{fill:var(--carry,var(--ink))}\",\n `.dg-car-t{${font(TYPE.carrier)};fill:var(--bg)}`,\n `.dg-car-tj{${font(TYPE.carrierJa)}}`,\n `.dg-env{fill:var(--carry,var(--ink));stroke:var(--surf);stroke-width:${S.envelope}}`,\n `.dg-env-in{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linejoin:round;stroke-linecap:round}`,\n \".dg-coin{fill:var(--coin);stroke:var(--surf);stroke-width:1.2}\",\n \".dg-coin-in{fill:none;stroke:var(--coinin);stroke-width:1.1}\",\n \".dg-strip{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-sep{stroke:var(--hair);stroke-width:${S.hair}}`,\n `.dg-sh{${font(TYPE.stripTitle)};fill:var(--ink)}`,\n `.dg-fl{${font(TYPE.fieldName)};fill:var(--mute)}`,\n `.dg-fv{${font(TYPE.fieldValue)};fill:var(--ink)}`,\n `.dg-fvj{${font(TYPE.fieldValueJa)};fill:var(--ink)}`,\n \".dg-fv-c{fill:var(--ct)}\",\n \".dg-fl-now{fill:var(--c)}\",\n `.dg-tr-ring{fill:none;stroke:var(--line);stroke-width:${S.trail}}`,\n \".dg-tr-fill{fill:var(--c)}\",\n \".dg-tg rect{fill:var(--c)}\",\n `.dg-tg text{${font(TYPE.tag)};fill:var(--on-c)}`,\n `.dg-side{fill:color-mix(in srgb,var(--c) ${X.side}%,var(--bg));stroke:${mix(X.sideEdge, \"transparent\")};stroke-dasharray:4 4}`,\n `.dg-side-t{${font(TYPE.regionName)};fill:var(--ct)}`,\n `.dg-side-n{${font(TYPE.regionNote)};fill:var(--mute)}`,\n `.dg-ghost{fill:var(--surf);stroke:${mix(X.ghostEdge, \"transparent\")};stroke-dasharray:4 3}`,\n `.dg-path{fill:none;stroke:${mix(X.path, \"transparent\")};stroke-width:${S.path};stroke-linecap:round;stroke-dasharray:0 ${LOOK.edge.ghostDash}}`,\n `.dg-path-h{fill:none;stroke:${mix(X.path, \"transparent\")};stroke-width:${S.arrow};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-path-t{${font(TYPE.label)};fill:var(--ct)}`,\n `.dg-path-tj{${font(TYPE.labelJa)}}`,\n \".dg-start{fill:var(--ink)}\",\n `.dg-end{fill:var(--bg);stroke:var(--ink);stroke-width:${S.end}}`,\n \".dg-end-in{fill:var(--ink)}\",\n `.dg-end-x{fill:var(--bg);stroke:${mix(X.path, \"transparent\")};stroke-width:${S.arrow};stroke-dasharray:2 2.5}`,\n `.dg-end-xi{fill:${mix(X.path, \"transparent\")}}`,\n `.dg-mark{${font(TYPE.regionNote)};fill:var(--mute)}`,\n `.dg-done{fill:var(--ink);stroke:var(--surf);stroke-width:${S.done}}`,\n `.dg-done-ck{fill:none;stroke:var(--surf);stroke-width:${S.glyph};stroke-linecap:round;stroke-linejoin:round}`,\n \".dg-vp-bg{fill:var(--bg)}\",\n \".dg-vp-frame{fill:none;stroke:var(--hair)}\",\n \".dg-hd-bg{fill:var(--bg)}\",\n \".dg-mm-bg{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-mm-t{${font(TYPE.miniTitle)};fill:var(--mute)}`,\n \".dg-mm-world{fill:var(--sunk);stroke:var(--hair)}\",\n `.dg-mm-band{fill:${mix(X.miniBand)};stroke:${mix(X.miniBandEdge, \"transparent\")};stroke-width:.6}`,\n `.dg-mm-card{fill:${mix(X.mini)}}`,\n `.dg-mm-vp{fill:color-mix(in srgb,var(--ink) ${X.view}%,transparent);stroke:var(--ink);stroke-width:${S.badgeRing};vector-effect:non-scaling-stroke}`,\n].join(\"\");\n\n/** 同じ原本と同じ見た目からは同じ名前になるよう、中身から短い名前を作る (keyframes の名前が頁の中で混ざらないため)。 */\nfunction nameOf(text: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0).toString(36);\n}\n\n/** 各箱が動く段。線の両端、処理、字の書き換えの箱。 */\nfunction involved(diagram: Diagram): Map<string, number[]> {\n const on = new Map<string, Set<number>>();\n const add = (id: string, s: number): void => {\n on.set(id, (on.get(id) ?? new Set()).add(s));\n };\n diagram.steps.forEach((step, s) => {\n for (const event of step.events) {\n if (event.type === \"edge\") {\n add(event.from, s);\n add(event.to, s);\n } else if (event.type === \"action\" || event.type === \"swap\") add(event.box, s);\n }\n });\n return new Map([...on].map(([id, steps]) => [id, [...steps].sort((a, b) => a - b)]));\n}\n\n/** 箱の下の字の移り変わり。書き換えはそのまま残し、構成図の処理はその段の間だけ出して元へ戻す。 */\nfunction subChanges(diagram: Diagram, timeline: Timeline, actionsInBox: boolean): Map<string, SubChange[]> {\n type Raw = { t: number; order: number; box: string; set?: string; act?: string | null };\n const raw: Raw[] = [];\n let order = 0;\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type === \"swap\") raw.push({ t: time.at, order: order++, box: event.box, set: event.text });\n if (actionsInBox && event?.type === \"action\") {\n raw.push({ t: time.at, order: order++, box: event.box, act: event.label });\n raw.push({ t: (timeline.steps[time.step] as Span).end, order: order++, box: event.box, act: null });\n }\n }\n raw.sort((a, b) => a.t - b.t || a.order - b.order);\n const out = new Map<string, SubChange[]>();\n for (const box of diagram.boxes) {\n let base: [string, string] = [box.sub ?? \"\", \"dg-ss\"];\n let acting: string | undefined;\n let shown = base.join(\"|\");\n const list: SubChange[] = [];\n for (const change of raw.filter((r) => r.box === box.id)) {\n // 書き換えは、出ている処理の字も置き換える\n if (change.set !== undefined) {\n base = [change.set, \"dg-ss-ok\"];\n acting = undefined;\n }\n if (change.act !== undefined) acting = change.act ?? undefined;\n const now: [string, string] = acting !== undefined ? [acting, \"dg-ss-act\"] : base;\n if (now.join(\"|\") === shown) continue;\n shown = now.join(\"|\");\n list.push([change.t, now[0], now[1]]);\n }\n // すぐ次の字に替わる字は読めないので出さない\n const kept = list.filter((change, k) => {\n const next = list[k + 1];\n return next === undefined || next[0] - change[0] >= MOTION.minShow;\n });\n out.set(box.id, kept);\n }\n return out;\n}\n\nfunction fieldChanges(diagram: Diagram, timeline: Timeline, layout: Layout): Map<string, FieldChange[]> {\n const out = new Map<string, FieldChange[]>();\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type !== \"strip\") continue;\n const color: ColorKey = layout.badges[time.step]?.color ?? \"slate\";\n const list = out.get(event.field) ?? [];\n const until = (timeline.steps[time.step] as Span).end;\n list.push({ at: time.at, color, step: time.step, until, ...(event.value !== undefined ? { value: event.value } : {}), ...(event.tag !== undefined ? { tag: event.tag } : {}) });\n out.set(event.field, list);\n }\n return out;\n}\n\nexport interface FollowFrame {\n /** 枠の幅 (px)。寄って追う窓はこの幅で、字を原寸で見せる */\n width: number;\n /** 枠の中で見える高さ (px)。渡すと、窓と全体図をこの高さに収め (#3047)、窓をこの高さまで伸ばす (#3053)。枠の高さが図で伸びる置き場では渡さない */\n height?: number;\n /** 隅の全体図の札の言葉。渡し忘れを型の検査で止めるため、省けない欄にする */\n lang: NotationLang;\n}\n\n/** 図を描く。`follow` を渡すと、寄って追う窓と隅の全体図で描く。 */\nexport function drawSvg(diagram: Diagram, layout: Layout, timeline: Timeline, palette: Palette, theme: Theme, follow?: FollowFrame): string {\n // 札の言葉で全体図の地の幅が変わりうるので、同じ頁に置いた別の言葉の図と名前を分ける\n const id = nameOf(`${JSON.stringify(diagram)}|${palette.id}|${theme}|${follow ? `${follow.width}|${follow.lang}` : \"\"}`);\n const m = new Motion(`dg${id}`, timeline.total, timeline.last);\n const ctx: Ctx = { m, t: timeline, sh: `filter=\"url(#dg-sh-${id})\"`, end: (timeline.steps[timeline.steps.length - 1] as Span).end };\n const on = involved(diagram);\n // 時系列図の処理は生存線の上の札に出し、他の図の種類は箱の下の字に出す\n const subs = subChanges(diagram, timeline, layout.kind !== \"sequence\");\n\n const L = { band: [] as string[], base: [] as string[], lit: [] as string[], node: [] as string[], badge: [] as string[], top: [] as string[] };\n for (const region of layout.regions) L.band.push(band(region));\n const ghostColor = layout.boxes.find((b) => b.ghost)?.color ?? \"slate\";\n if (layout.side) L.band.push(side(layout.side, ghostColor));\n // 脇道へ入る道は脇道の状態の色、それ以外の道は送る側の色で描く\n const boxColor = (id: string, ghost?: boolean): ColorKey | undefined => layout.boxes.find((b) => b.id === id && (ghost === undefined || b.ghost === ghost))?.color;\n for (const p of layout.paths) L.base.push(path(p, boxColor(p.to, true) ?? boxColor(p.from) ?? ghostColor));\n for (const e of layout.ends) L.node.push(endMark(e, ghostColor));\n // 状態遷移図は、段で変わった値を今の状態の色で描き、帯の通った状態の点を着いた時刻に塗る (#3171)\n const isState = layout.kind === \"state\";\n const arrivals = new Map((timeline.states ?? []).flatMap((s) => (s.lit[0] ? [[s.box, s.lit[0].start] as [string, number]] : [])));\n if (layout.strip) L.band.push(strip(layout.strip, fieldChanges(diagram, timeline, layout), ctx, isState, arrivals));\n for (const line of layout.lifelines) L.base.push(lifeline(line.x, line.y1, line.y2));\n for (const e of layout.edges) {\n const time = timeline.edges.find((t) => t.step === e.step && t.event === e.event);\n if (!time) continue;\n const drawn = edge(e, time, ctx, isState);\n L.base.push(drawn.base);\n L.lit.push(drawn.lit);\n }\n const states = new Map((timeline.states ?? []).map((s) => [s.box, s]));\n for (const box of layout.boxes) {\n if (box.ghost) {\n L.node.push(ghostCard(box));\n continue;\n }\n const state = states.get(box.id);\n L.node.push(card(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? [], isState ? (state?.lit ?? []) : undefined));\n if (state?.done !== undefined) L.node.push(doneMark(box, state.done, ctx));\n }\n for (const b of layout.badges) L.badge.push(badge(b, ctx, isState));\n for (const l of layout.labels) {\n const time = timeline.labels.find((t) => t.step === l.step && t.event === l.event);\n if (time) L.top.push(label(l, time, ctx));\n }\n for (const a of layout.actions) {\n const time = timeline.events.find((t) => t.step === a.step && t.event === a.event);\n if (time) L.top.push(action(a, time.at, (timeline.steps[a.step] as Span).end, ctx));\n }\n for (const time of timeline.carriers) {\n const e = layout.edges.find((x) => x.step === time.step && x.event === time.event);\n if (e) L.top.push(carrier(e, time, ctx));\n }\n const content = Object.values(L)\n .map((parts) => parts.join(\"\"))\n .join(\"\");\n\n const { near, far, nearY, farY } = LOOK.shadow;\n const shadow = `<filter id=\"dg-sh-${id}\" x=\"-20%\" y=\"-30%\" width=\"140%\" height=\"180%\"><feDropShadow dx=\"0\" dy=\"${nearY}\" stdDeviation=\"${near}\" style=\"flood-color:var(--sh);flood-opacity:var(--shA)\"/><feDropShadow dx=\"0\" dy=\"${farY}\" stdDeviation=\"${far}\" style=\"flood-color:var(--sh);flood-opacity:var(--shB)\"/></filter>`;\n // 寄って追う時系列図は、頭の箱を窓の上端に貼る頭の列にも描く (#3118)。頭の列の箱はアイコンを外した 2 段 (#3120)。止めて見せる図では描かない\n const heads = follow && layout.kind === \"sequence\" ? layout.boxes.map((box) => headCard(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? [])).join(\"\") : \"\";\n const view = follow ? followView(layout, timeline, diagram, m, id, content, follow, heads) : { body: `<rect class=\"dg-bg\" width=\"${layout.width}\" height=\"${layout.height}\" rx=\"${LOOK.region.radius}\"/>${content}`, w: layout.width, h: layout.height };\n const css = `.dg-${id}{${FONT_VARS};--T:${timeline.total}s;${paletteVars(palette, theme)}}${PART_CSS}${m.frames.join(\"\")}`;\n return (\n `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"dg dg-${id}\" viewBox=\"0 0 ${Math.ceil(view.w)} ${Math.ceil(view.h)}\" width=\"${Math.ceil(view.w)}\" height=\"${Math.ceil(view.h)}\" role=\"img\" aria-label=\"${esc(diagram.title)}\" data-dragon=\"figure\" data-view=\"${follow ? \"follow\" : \"fixed\"}\">` +\n `<style>${css}</style><defs>${shadow}</defs>${view.body}</svg>`\n );\n}\n\n/** 四角を全部囲む四角。 */\nfunction union(rects: Rect[]): Rect {\n const x = Math.min(...rects.map((r) => r.x));\n const y = Math.min(...rects.map((r) => r.y));\n return { x, y, w: Math.max(...rects.map((r) => r.x + r.w)) - x, h: Math.max(...rects.map((r) => r.y + r.h)) - y };\n}\n\n/** 段で動く物が占める所。 */\nfunction focusOf(layout: Layout, diagram: Diagram, step: number): Rect | undefined {\n const rects = focusParts(layout, diagram, step);\n return rects.length === 0 ? undefined : union(rects);\n}\n\n/**\n * 番号の丸が窓から外れる段で、窓に入れる所 (#3046)。\n * 丸とその周りを起点に、丸に近い動く物から順に、窓 (`vw` × `vh`) に収まる間だけ囲む。収まらない物は飛ばして次を見る\n */\nfunction badgeFocus(badge: { x: number; y: number }, parts: Rect[], vw: number, vh: number): Rect {\n const room = LOOK.badge.r + LOOK.follow.badgeRoom;\n const { x: bx, y: by } = badge;\n const away = (p: Rect): number => Math.hypot(Math.max(0, p.x - bx, bx - p.x - p.w), Math.max(0, p.y - by, by - p.y - p.h));\n let held: Rect = { x: bx - room, y: by - room, w: room * 2, h: room * 2 };\n for (const p of [...parts].sort((a, b) => away(a) - away(b))) {\n const next = union([held, p]);\n if (next.w <= vw && next.h <= vh) held = next;\n }\n return held;\n}\n\n/** 段で動く物を 1 つずつ。 */\nfunction focusParts(layout: Layout, diagram: Diagram, step: number): Rect[] {\n const rects: Rect[] = [];\n for (const e of layout.edges.filter((x) => x.step === step)) {\n const xs = e.points.map((p) => p[0]);\n const ys = e.points.map((p) => p[1]);\n rects.push({ x: Math.min(...xs), y: Math.min(...ys), w: Math.max(...xs) - Math.min(...xs), h: Math.max(...ys) - Math.min(...ys) });\n }\n rects.push(...layout.labels.filter((l) => l.step === step), ...layout.actions.filter((a) => a.step === step));\n for (const event of diagram.steps[step]?.events ?? []) {\n const ids = event.type === \"edge\" ? [event.from, event.to] : event.type === \"action\" || event.type === \"swap\" ? [event.box] : [];\n for (const id of ids) {\n const box = layout.boxes.find((b) => b.id === id);\n // 時系列図の頭の箱は遠いので、線の行だけを見る\n if (box && (layout.kind === \"architecture\" || event.type === \"swap\")) rects.push(box);\n }\n }\n return rects;\n}\n\n/**\n * 寄って追う窓。段ごとに動く所へ寄り、窓の外の全体図に今見ている所の枠を同じ動きで出す。\n * 全体図は窓に重ねると今動く線や箱を覆うので、窓の外に置く (#3042)。\n * 縦長の全体図は窓の右に列を取り、横長の全体図は窓の下に置く。失う窓の幅か図の高さの小さい側を選ぶ。\n * 枠の中で見える高さを渡された時は、窓と全体図がその高さに入るまで窓を低くする (#3047)。\n * 枠が余る時は窓を広げ、図の原寸の幅と、見える高さか図の高さまで使う。全体図は今の大きさのまま置く (#3053)。\n * 枠の幅が `LOOK.follow.narrow` より狭い時は、縦長の全体図を出さずに窓へ枠の幅の全部を渡す (#3055)。\n * 段で動く物を全部囲んだ所の真ん中に寄せると今の段の番号の丸が窓から外れる段では、丸に近い動く物から窓に収まるだけ囲んだ所へ寄せる (#3046)。\n * 時系列図は頭の箱 `heads` を窓の上端の頭の列に貼り、窓が横に動く時だけ一緒に動かす。頭の箱は図の上端に在り、線を追う窓からは外れるため。\n * 窓は頭の列の下の残りの高さで動く物を真ん中に見せる (#3118)。\n * 頭の列の箱はアイコンを外した 2 段にして低く貼り、線は図の頭の箱の下から見せ始める (#3120)。\n */\nfunction followView(layout: Layout, timeline: Timeline, diagram: Diagram, m: Motion, id: string, content: string, follow: FollowFrame, heads: string): { body: string; w: number; h: number } {\n const F = LOOK.follow;\n const M = LOOK.mini;\n const frameWidth = Math.max(1, follow.width);\n const full = Math.min(layout.width, frameWidth);\n const title = FIGURE_TEXT[follow.lang].overview;\n /** 窓の高さ `vh` の時の全体図の寸法。全体図は窓の高さで縮むので、窓を低くしたら測り直す */\n const sized = (vh: number) => {\n // 全体図の寸法は枠の幅と窓の高さで決め、置き場所に依らない\n const mw = Math.min(M.w, full * 0.4, ((vh * 0.4) / layout.height) * layout.width);\n const k = mw / layout.width;\n const mh = layout.height * k;\n // 地の幅は図の縦横の比で決まるので、縦に長い図では札より狭くなる。その時は地を札の幅まで広げ、図は広げた地の真ん中に置く\n const bw = Math.max(mw, Math.ceil(textWidth(title, TYPE.miniTitle)));\n // 縦横の比は窓の高さに依らないので、低くしても全体図の置き場所は変わらない\n return { vh, mw, k, mh, bw, bgW: bw + M.pad * 2, bgH: mh + M.pad * 2 + M.title, beside: mh > mw };\n };\n const natural = sized(Math.min(layout.height, Math.max(F.minH, full * F.aspect)));\n // 携帯の幅では縦長の全体図の列が枠の幅の 3 割を取り、窓が図の横の 3 割ほどしか見せない。その時は全体図を出さない。\n // 横長の全体図は窓の下に出して幅を取らないので、狭い枠でも出す\n const bare = natural.beside && frameWidth < F.narrow;\n // 窓の右の全体図は窓の高さの中に収まり、窓の下の全体図は窓の高さに足される\n const room = follow.height === undefined ? Number.POSITIVE_INFINITY : natural.beside ? follow.height : follow.height - natural.bgH - M.inset;\n // 見える高さが窓より低ければ窓と全体図を縮め、高ければ全体図はそのままに窓を図の高さまで伸ばす。\n // 全体図も伸ばすと、狭い枠では右の全体図の列が太って窓が狭くなる\n const { vh, mw, k, mh, bw, bgW, bgH, beside } =\n room < natural.vh ? sized(Math.max(F.fitMinH, room)) : { ...natural, vh: Number.isFinite(room) ? Math.min(layout.height, room) : natural.vh };\n // 右の全体図の列は枠の余りに置き、窓は図の原寸の幅まで広げる。枠が図より狭い時は今までどおり枠の幅から列を引く\n const vw = beside && !bare ? Math.min(layout.width, frameWidth - bgW - M.inset) : full;\n const clampX = (x: number): number => Math.min(layout.width - vw / 2, Math.max(vw / 2, x));\n // 時系列図は窓の上端に頭の列を貼るので、動く物は頭の列の下の残りの高さ `below` に見せる (#3118)。\n // 線は図の頭の箱の下 `top` から見せ始め、図の頭の箱は頭の列の下か窓の上に隠す (#3120)\n const top = heads === \"\" ? 0 : Math.max(...layout.boxes.map((b) => b.y + b.h)) + F.headRoom;\n const strip = heads === \"\" ? 0 : F.head.pad * 2 + F.head.h;\n const below = vh - strip;\n /** 頭の列の下の残りの窓の真ん中の高さを、図の頭の箱の下と図の下端で止める */\n const clampY = (y: number): number => Math.min(layout.height - below / 2, Math.max(top + below / 2, y));\n const r = LOOK.badge.r;\n let prev: [number, number] = [layout.width / 2, layout.height / 2];\n // 頭の列の下の残りの窓の真ん中。窓の真ん中は、これより頭の列の高さの半分だけ上に在る\n const middles = timeline.steps.map((_, s) => {\n const f = focusOf(layout, diagram, s);\n prev = f ? [f.x + f.w / 2, f.y + f.h / 2] : prev;\n const at: [number, number] = [clampX(prev[0]), clampY(prev[1])];\n // 動く物を全部囲んだ所が窓より大きいと、その端に在る番号の丸が窓から外れる。その段だけ丸の近くへ寄せ直す (#3046)\n const b = layout.badges.find((x) => x.step === s);\n if (!b || (Math.abs(b.x - at[0]) <= vw / 2 - r && Math.abs(b.y - at[1]) <= below / 2 - r)) return at;\n const near = badgeFocus(b, focusParts(layout, diagram, s), vw, below);\n // 動く物の無い次の段は、寄せ直した窓のまま止める\n prev = [near.x + near.w / 2, near.y + near.h / 2];\n return [clampX(prev[0]), clampY(prev[1])] as [number, number];\n });\n const centers = middles.map(([x, y]): [number, number] => [x, y - strip / 2]);\n const c0 = centers[0] as [number, number];\n const cam: [number, number, number, number?, string?][] = [\n [0, c0[0], c0[1]],\n [(timeline.steps[0] as Span).start, c0[0], c0[1]],\n ];\n centers.forEach((c, s) => {\n if (s === 0) return;\n const before = centers[s - 1] as [number, number];\n const start = (timeline.steps[s] as Span).start;\n cam.push([start, before[0], before[1], 1, EASE.inOut], [start + F.ease, c[0], c[1]]);\n });\n const cl = centers[centers.length - 1] as [number, number];\n cam.push([timeline.last, cl[0], cl[1], 1, EASE.inOut], [timeline.total, c0[0], c0[1]]);\n const camKf = m.move(cam.map(([t, cx, cy, s, e]) => [t, vw / 2 - cx, vh / 2 - cy, s, e]));\n\n // 右に出す時は窓の上端に揃え、下に出す時は窓の右端から内へ寄せる\n const bgX = beside ? vw + M.inset : vw - bgW - M.inset;\n const bgY = beside ? 0 : vh + M.inset;\n const bx = bgX + M.pad;\n const mx = bx + (bw - mw) / 2;\n const my = bgY + M.pad + M.title;\n /**\n * 全体図の地と札と、今見ている所の枠。窓と同じ動きで枠を動かす。\n * 時系列図の枠は頭の列の下の線を見せる所だけを囲む。頭の箱は頭の列に常に出ているため (#3122)\n */\n const overview = (): { clip: string; body: string } => {\n const shapes = [\n ...layout.regions.map((r) => `<rect class=\"dg-mm-band\" style=\"${cs(r.color)}\" x=\"${mx + r.x * k}\" y=\"${my + r.y * k}\" width=\"${r.w * k}\" height=\"${r.h * k}\" rx=\"3\"/>`),\n ...layout.boxes.map((b) => `<rect class=\"dg-mm-card\" style=\"${cs(b.color)}\" x=\"${mx + b.x * k}\" y=\"${my + b.y * k}\" width=\"${b.w * k}\" height=\"${b.h * k}\" rx=\"1.5\"/>`),\n ].join(\"\");\n const vp = m.move(cam.map(([t, cx, cy, , e]) => [t, mx + (cx - vw / 2) * k, my + (cy - vh / 2) * k, 1, e]));\n return {\n clip: `<clipPath id=\"dg-mm-${id}\"><rect x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\" rx=\"4\"/></clipPath>`,\n body:\n `<rect class=\"dg-mm-bg\" x=\"${bgX}\" y=\"${bgY}\" width=\"${bgW}\" height=\"${bgH}\" rx=\"${M.radius}\"/>` +\n `<text class=\"dg-mm-t\" x=\"${bx}\" y=\"${my - M.pad + 2}\">${title}</text>` +\n `<g clip-path=\"url(#dg-mm-${id})\"><rect class=\"dg-mm-world\" x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\"/>${shapes}<rect class=\"dg-mm-vp dg-a\"${strip === 0 ? \"\" : ` y=\"${strip * k}\"`} width=\"${vw * k}\" height=\"${(vh - strip) * k}\" rx=\"2\" style=\"${vp}\"/></g>`,\n };\n };\n const mini = bare ? { clip: \"\", body: \"\" } : overview();\n // 頭の列は窓の中身の上に重ね、窓と同じ時刻と緩急で横にだけ動かす (#3118)\n const head =\n strip === 0\n ? \"\"\n : `<g class=\"dg-hd\"><rect class=\"dg-hd-bg\" width=\"${vw}\" height=\"${strip}\"/><line class=\"dg-sep\" x1=\"0\" y1=\"${strip}\" x2=\"${vw}\" y2=\"${strip}\"/>` +\n `<g class=\"dg-a\" style=\"${m.move(cam.map(([t, cx, , s, e]) => [t, vw / 2 - cx, 0, s, e]))}\">${heads}</g></g>`;\n const body =\n `<defs><clipPath id=\"dg-vp-${id}\"><rect width=\"${vw}\" height=\"${vh}\" rx=\"${LOOK.region.radius}\"/></clipPath>${mini.clip}</defs>` +\n `<g clip-path=\"url(#dg-vp-${id})\"><rect class=\"dg-vp-bg\" width=\"${vw}\" height=\"${vh}\"/><g class=\"dg-a\" style=\"${camKf}\">${content}</g>${head}</g>` +\n `<rect class=\"dg-vp-frame\" x=\"0.5\" y=\"0.5\" width=\"${vw - 1}\" height=\"${vh - 1}\" rx=\"${LOOK.region.radius}\"/>${mini.body}`;\n return { body, w: beside && !bare ? vw + M.inset + bgW : full, h: beside ? vh : bgY + bgH };\n}\n\n/** 原本の JSON から図を描く。原本が形に合わない時は、誤りの場所を添えて断る。 */\nexport function renderDiagram(input: unknown, options: RenderOptions = {}): Rendered {\n const lang = options.lang ?? \"ja\";\n const read = readDiagram(input, { lang });\n if (!read.ok) throw new Error(FIGURE_TEXT[lang].cannotDraw(read.errors.map((e) => `${e.pointer} ${e.message}`).join(\" / \")));\n const diagram = read.diagram;\n const palette = resolvePalette(options.palette);\n const theme: Theme = options.theme === \"dark\" ? \"dark\" : \"light\";\n const layout = diagram.kind === \"sequence\" ? layoutSequence(diagram) : diagram.kind === \"state\" ? layoutState(diagram, lang) : layoutArchitecture(diagram);\n const timeline = buildTimeline(diagram);\n return {\n svg: drawSvg(diagram, layout, timeline, palette, theme),\n palette: palette.id,\n theme,\n ...(diagram.view ? { view: diagram.view } : {}),\n fonts: { ...FONTS },\n layout,\n timeline,\n diagram,\n };\n}\n","/**\n * 見せ方を字の大きさで選ぶ。\n *\n * 全体を枠の幅へ収めた時の箱の名前の字が 10.5px 以上なら、全体を止めて中だけ動かす (`fixed`)。\n * 下回るなら、動く所へ寄って追い、隅の全体図で今どこかを示す (`follow`)。\n * 枠の高さを渡すと、全体を枠の幅と高さの両方へ収めた時の字で選ぶ (#3047)。高さの決まった置き場で、縦に長い図を縮めすぎないため。\n * 書き手が原本の `view` で決めた時は、字の大きさに関わらずそれに従う。\n */\nimport { READABLE_PX, TYPE } from \"./look/values\";\nimport type { Rendered } from \"./render/svg\";\nimport type { ViewMode } from \"./schema\";\n\nexport function chooseView(rendered: Pick<Rendered, \"layout\" | \"view\">, frameWidth: number, frameHeight?: number): { mode: ViewMode; textPx: number } {\n const byWidth = Math.max(0, frameWidth) / rendered.layout.width;\n const scale = frameHeight === undefined ? byWidth : Math.min(byWidth, Math.max(0, frameHeight) / rendered.layout.height);\n const textPx = scale * TYPE.boxName.size;\n if (rendered.view) return { mode: rendered.view, textPx };\n return { mode: textPx >= READABLE_PX ? \"fixed\" : \"follow\", textPx };\n}\n","/**\n * 頁に図を置いて動かす。\n *\n * 動きを嫌う設定 (`prefers-reduced-motion: reduce`) は描く前に読み、その人には一瞬も自動再生せず、\n * 段ごとの止め絵を釦で送る。各段の題と本文は、読み上げの道具が段の順に読める番号付きの一覧として置き、\n * 図そのものは読み上げから隠して同じ中身を 2 度読ませない。\n * 見せ方は枠の幅で選び (`view.ts`)、寄って追う時は窓と全体図で描き直す。\n * 釦と段の一覧の読み上げの名前と全体図の札は、渡した言葉 (`options.lang`、書かなければ日本語) で出す (#3001)。\n * 段が替わるたびに `options.onStep` で今の段を知らせ、頁の側が段の札や進み具合を出せるようにする (#3031)。\n * 段の本文の帯は本文の最も長い段の高さに保ち、段を送っても図の大きさと位置を変えない (#3049)。\n * 帯の中身の幅が `LOOK.player.narrow` より狭い時は、段を送る釦を指で押せる大きさにして段の番号と上の段に並べ、\n * 題と本文をその下の段の全幅に置く (#3057、#3069)。\n */\nimport { FIGURE_TEXT } from \"./figure-text\";\nimport { FONT_VARS, LOOK, paletteVars, resolvePalette, type TextStyle, TYPE } from \"./look/values\";\nimport { drawSvg, type RenderOptions, renderDiagram } from \"./render/svg\";\nimport type { Span } from \"./timeline\";\nimport { chooseView } from \"./view\";\n\nexport interface PlayerOptions extends RenderOptions {\n /** 段が替わるたびに今の段 (0 から) を受け取る。置いた時にも最初の段で 1 度呼ぶ。頁の側で段の札や進み具合を出す時に使う (#3031) */\n onStep?: (step: number) => void;\n /**\n * 図を、図の枠の中で見える高さに収める (#3047)。高さに収めると字が読めない図は寄って追う図にし、寄って追う窓と全体図をその高さに収める。\n * 枠の高さが決まっている置き場 (カタログの拡大の重ね窓) で使う。枠の高さが図に合わせて伸びる置き場で使うと、描くたびに低くなる\n */\n fitHeight?: boolean;\n}\n\nexport interface Player {\n /** 今の段 (0 から) */\n readonly step: number;\n /** 動いているか */\n readonly playing: boolean;\n next(): void;\n prev(): void;\n play(): void;\n pause(): void;\n destroy(): void;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst px = (v: number): string => `${v}px`;\n\nfunction playerCss(): string {\n const P = LOOK.player;\n const hidden = px(P.hidden);\n return [\n `.dg-player{display:flex;flex-direction:column;gap:${px(P.gap)};color:var(--ink)}`,\n `.dg-player .dg-frame{border-radius:${px(P.radius)};overflow:hidden}`,\n // 並べ方は帯の中身の幅で選ぶ。帯の中の 1 段 (`.dg-row`) が並べ替わり、帯の左右の余白は置いた頁が帯に付ける\n `.dg-bar{container:dg-bar/inline-size}`,\n `.dg-row{display:flex;align-items:flex-start;gap:${px(P.gap)}}`,\n `.dg-btns{display:flex;gap:${px(P.gap / 2)};flex:none}`,\n `.dg-btn{width:${px(P.button)};height:${px(P.button)};border-radius:${px(P.radius)};border:${px(LOOK.stroke.hair)} solid var(--hair);background:var(--surf);color:var(--ink);${font(TYPE.button)};cursor:pointer}`,\n `.dg-btn:focus-visible{outline:${px(P.focus)} solid var(--c-blue);outline-offset:${px(P.focus)}}`,\n `.dg-say{display:flex;gap:${px(P.gap)};min-width:0}`,\n `.dg-no{${font(TYPE.stepNo)};color:var(--mute);padding-top:${px(P.focus)}}`,\n `.dg-txt{display:grid;grid-template-columns:minmax(0,1fr);min-width:0}`,\n `.dg-txt>*{grid-area:1/1}`,\n `.dg-room{visibility:hidden}`,\n `.dg-tt{${font(TYPE.stepTitle)};margin:0}`,\n `.dg-tb{${font(TYPE.stepBody)};color:var(--ink2);margin:0;white-space:pre-line}`,\n `.dg-sr{position:absolute;width:${hidden};height:${hidden};margin:-${hidden};padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}`,\n // 狭い帯 (携帯の幅) では、段を送る釦を指で押せる大きさにし、その横に番号を置き、\n // 題を 2 段目、本文を 3 段目に置いてどちらも帯の全幅を使う (#3057、#3069)。\n // 釦を大きくすると横に題を置く幅が足りず題が細かく折れるため、題は釦の段に置かない。\n // 題と本文を包む箱を外して写しも同じ升に重ねるので、2 段目は最も高い題、3 段目は最も長い本文の高さになる。\n // 題と本文の間は広い帯と同じく空けず、釦の段の下にだけ間を取って、帯が高くなる分を抑える\n `@container dg-bar (width < ${px(P.narrow)}){` +\n `.dg-row{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:0 ${px(P.gap)}}` +\n `.dg-say,.dg-txt,.dg-txt>*{display:contents}` +\n `.dg-btns{grid-area:1/1;margin-bottom:${px(P.gap / 2)}}` +\n `.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}` +\n `.dg-no{grid-area:1/2;display:flex;align-items:center;min-height:${px(P.touch)};padding-top:0}` +\n `.dg-tt{grid-area:2/1/3/3}` +\n `.dg-tb{grid-area:3/1/4/3}` +\n `}`,\n // 指で触る時は、広い帯でも段を送る釦を指で押せる大きさにする (#3076)。並びは横 1 列のまま変えない。\n // 広い帯は本文が 2 行あれば帯の高さが変わらず、本文の無い帯だけが釦の分だけ高くなる\n `@media (pointer: coarse){.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}}`,\n ].join(\"\");\n}\n\nfunction ensureCss(doc: Document): void {\n if (doc.getElementById(\"dragon-player-css\")) return;\n const style = doc.createElement(\"style\");\n style.id = \"dragon-player-css\";\n style.textContent = playerCss();\n doc.head.appendChild(style);\n}\n\n/** 釦に出す字。HTML に書き出す時は、この字も字の file に残す。 */\nexport const BUTTON_TEXT = { prev: \"‹\", pause: \"❚❚\", play: \"▶\", next: \"›\" } as const;\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n/** 段の番号の札 (`01/12`)。`step` は 0 から数える。 */\nexport const stepNo = (step: number, count: number): string => `${pad(step + 1)}/${pad(count)}`;\n\nexport function mountDiagram(host: HTMLElement, diagram: unknown, options: PlayerOptions = {}): Player {\n const doc = host.ownerDocument;\n const win = doc.defaultView;\n // 描く前に読む。描いた後に読むと、動きを嫌う人にも一瞬だけ流れてしまう\n const reduce = Boolean(win?.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches);\n const rendered = renderDiagram(diagram, options);\n const lang = options.lang ?? \"ja\";\n const words = FIGURE_TEXT[lang];\n const palette = resolvePalette(rendered.palette);\n const { timeline } = rendered;\n const steps = rendered.diagram.steps;\n const count = steps.length;\n\n ensureCss(doc);\n const root = doc.createElement(\"div\");\n root.className = \"dg-player\";\n root.dataset.dragon = \"player\";\n root.setAttribute(\"style\", `${FONT_VARS};${paletteVars(palette, rendered.theme)}`);\n\n const frame = doc.createElement(\"div\");\n frame.className = \"dg-frame\";\n const button = (name: string, label: string, text: string): HTMLButtonElement => {\n const b = doc.createElement(\"button\");\n b.type = \"button\";\n b.className = \"dg-btn\";\n b.dataset.dragon = name;\n b.setAttribute(\"aria-label\", label);\n b.textContent = text;\n return b;\n };\n const prevButton = button(\"prev\", words.prev, BUTTON_TEXT.prev);\n const toggleButton = button(\"toggle\", words.pause, BUTTON_TEXT.pause);\n const nextButton = button(\"next\", words.next, BUTTON_TEXT.next);\n const buttons = doc.createElement(\"div\");\n buttons.className = \"dg-btns\";\n // 置いた頁の言葉と違っても、釦の名前を名前の言葉の声で読ませる\n buttons.setAttribute(\"lang\", lang);\n buttons.append(prevButton, toggleButton, nextButton);\n\n // 見える語り。読み上げには下の一覧を読ませるので、こちらは読み上げから隠す\n const say = doc.createElement(\"div\");\n say.className = \"dg-say\";\n say.setAttribute(\"aria-hidden\", \"true\");\n const no = doc.createElement(\"div\");\n no.className = \"dg-no\";\n no.dataset.dragon = \"step-no\";\n const text = doc.createElement(\"div\");\n text.className = \"dg-txt\";\n const title = doc.createElement(\"p\");\n title.className = \"dg-tt\";\n title.dataset.dragon = \"step-title\";\n const body = doc.createElement(\"p\");\n body.className = \"dg-tb\";\n body.dataset.dragon = \"step-body\";\n const live = doc.createElement(\"div\");\n live.append(title, body);\n text.append(live);\n // 全部の段の題と本文の写しを今の段と同じ升に重ね、見た目からは隠して場所だけを取る。\n // 帯の高さが本文の最も長い段で決まり、段を送っても図の枠が伸び縮みしない (#3049)\n for (const step of steps) {\n const room = doc.createElement(\"div\");\n room.className = \"dg-room\";\n room.dataset.dragon = \"caption-room\";\n const roomTitle = doc.createElement(\"p\");\n roomTitle.className = \"dg-tt\";\n roomTitle.textContent = step.title;\n const roomBody = doc.createElement(\"p\");\n roomBody.className = \"dg-tb\";\n roomBody.textContent = step.body;\n room.append(roomTitle, roomBody);\n text.append(room);\n }\n say.append(no, text);\n // 狭い帯では語りの箱を外して番号と題と本文を釦と同じ升の並びに置く (#3057)。\n // 箱を外した要素の読み上げからの隠し方に頼らず、見える語りの 1 つずつも読み上げから隠す\n for (const shown of [no, title, body]) shown.setAttribute(\"aria-hidden\", \"true\");\n const row = doc.createElement(\"div\");\n row.className = \"dg-row\";\n row.append(buttons, say);\n const bar = doc.createElement(\"div\");\n bar.className = \"dg-bar\";\n bar.append(row);\n\n // 読み上げの道具が段の順に読む一覧。見た目からは外すが、読み上げからは隠さない\n const list = doc.createElement(\"ol\");\n list.className = \"dg-sr\";\n list.dataset.dragon = \"steps\";\n list.setAttribute(\"aria-label\", words.steps(rendered.diagram.title));\n for (const step of steps) {\n const item = doc.createElement(\"li\");\n const head = doc.createElement(\"strong\");\n head.textContent = step.title;\n item.append(head);\n for (const line of step.body.split(\"\\n\")) {\n const p = doc.createElement(\"p\");\n p.textContent = line;\n item.append(p);\n }\n list.append(item);\n }\n\n root.append(frame, bar, list);\n host.append(root);\n\n const frameWidth = (): number => frame.clientWidth || host.clientWidth || rendered.layout.width;\n /** 高さに収めると頼まれた時だけ、図の枠の中で見える高さ (上下の余白を除く)。測れない時は `undefined` で、幅だけで決める */\n const frameHeight = (): number | undefined => {\n if (!options.fitHeight || !win) return undefined;\n const style = win.getComputedStyle(frame);\n const inner = frame.clientHeight - (Number.parseFloat(style.paddingTop) || 0) - (Number.parseFloat(style.paddingBottom) || 0);\n return inner > 0 ? inner : undefined;\n };\n let mode = chooseView(rendered, frameWidth(), frameHeight()).mode;\n let width = frameWidth();\n let height = frameHeight();\n let svg: SVGSVGElement | null = null;\n let step = 0;\n let playing = !reduce;\n let at = reduce ? (timeline.stills[0] ?? 0) : 0;\n let born = Date.now();\n\n /** 動きの変数を付けた図を置き直す。置き直すと動きの時計が最初から数え直される */\n const place = (markup?: string): void => {\n let next: SVGSVGElement | null;\n if (markup !== undefined) {\n const holder = doc.createElement(\"div\");\n holder.innerHTML = markup;\n next = holder.querySelector(\"svg\");\n } else {\n next = svg ? (svg.cloneNode(true) as SVGSVGElement) : null;\n }\n if (!next) return;\n next.setAttribute(\"aria-hidden\", \"true\");\n next.removeAttribute(\"role\");\n next.removeAttribute(\"aria-label\");\n next.style.setProperty(\"--at\", String(at));\n next.style.setProperty(\"--play\", playing ? \"running\" : \"paused\");\n next.dataset.motion = playing ? \"play\" : \"still\";\n if (svg) svg.replaceWith(next);\n else frame.append(next);\n svg = next;\n born = Date.now();\n };\n const markup = (): string => (mode === \"follow\" ? drawSvg(rendered.diagram, rendered.layout, timeline, palette, rendered.theme, { width, ...(height === undefined ? {} : { height }), lang }) : rendered.svg);\n\n const now = (): number => (playing ? (at + (Date.now() - born) / 1000) % timeline.total : at);\n const stepAt = (t: number): number => {\n let found = 0;\n timeline.steps.forEach((span: Span, i) => {\n if (span.start <= t) found = i;\n });\n return found;\n };\n const show = (): void => {\n const current = steps[step];\n no.textContent = stepNo(step, count);\n title.textContent = current?.title ?? \"\";\n body.textContent = current?.body ?? \"\";\n toggleButton.setAttribute(\"aria-label\", playing ? words.pause : words.play);\n toggleButton.textContent = playing ? BUTTON_TEXT.pause : BUTTON_TEXT.play;\n options.onStep?.(step);\n };\n const restart = (t: number, play: boolean): void => {\n at = t;\n playing = play;\n place();\n show();\n };\n const go = (target: number): void => {\n step = Math.min(count - 1, Math.max(0, target));\n const span = timeline.steps[step] as Span;\n restart(playing ? span.start : (timeline.stills[step] ?? span.start), playing);\n };\n\n place(markup());\n show();\n\n const timer = win?.setInterval(() => {\n if (!playing) return;\n const s = stepAt(now());\n if (s !== step) {\n step = s;\n show();\n }\n }, 120);\n const onPrev = (): void => go(step - 1);\n const onNext = (): void => go(step + 1);\n const onToggle = (): void => (playing ? restart(now(), false) : restart(at, true));\n // 段の番号を押すとその段へ移る\n const onFigure = (event: Event): void => {\n const target = (event.target as Element | null)?.closest?.(\"[data-step]\");\n const s = target ? Number(target.getAttribute(\"data-step\")) : Number.NaN;\n if (Number.isInteger(s)) go(s);\n };\n prevButton.addEventListener(\"click\", onPrev);\n nextButton.addEventListener(\"click\", onNext);\n toggleButton.addEventListener(\"click\", onToggle);\n frame.addEventListener(\"click\", onFigure);\n\n // 枠の大きさが変わったら見せ方を選び直す。寄って追う窓は幅 (高さに収める時は高さも) で決まるので、変われば描き直す\n const Observer = (win as (Window & { ResizeObserver?: typeof ResizeObserver }) | null)?.ResizeObserver;\n const observer = Observer\n ? new Observer(() => {\n const w = frameWidth();\n const h = frameHeight();\n const chosen = chooseView(rendered, w, h).mode;\n if (chosen === mode && (mode === \"fixed\" || (w === width && h === height))) return;\n const t = now();\n mode = chosen;\n width = w;\n height = h;\n at = t;\n place(markup());\n })\n : undefined;\n observer?.observe(frame);\n\n return {\n get step() {\n return step;\n },\n get playing() {\n return playing;\n },\n next: onNext,\n prev: onPrev,\n play: () => {\n if (!playing) restart(at, true);\n },\n pause: () => {\n if (playing) restart(now(), false);\n },\n destroy: () => {\n if (timer !== undefined) win?.clearInterval(timer);\n observer?.disconnect();\n prevButton.removeEventListener(\"click\", onPrev);\n nextButton.removeEventListener(\"click\", onNext);\n toggleButton.removeEventListener(\"click\", onToggle);\n frame.removeEventListener(\"click\", onFigure);\n root.remove();\n },\n };\n}\n","/**\n * 画面なしの Chromium で、頁と同じ描画を時刻を止めて 1 コマずつ撮る。\n *\n * 時刻は頁の止め絵と同じく、図の `--play` を `paused` にし、`--at` に秒を入れて止める。\n * 撮ったコマは同じ頁の中で詰める。mp4 は WebCodecs で H.264 にして `mediabunny` で箱に入れ、\n * GIF は `gifenc` で詰める。GIF は前のコマと同じ所を透明にし、変わった所だけを書いて小さくする。\n * WebCodecs は安全な頁でしか使えないので、頁は `http://localhost/` に置く。\n */\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport type { Browser, Page } from \"playwright-core\";\nimport type { NotationLang } from \"../words\";\n\nconst require_ = createRequire(import.meta.url);\n/** 頁に読ませる詰める道具。どちらも 1 file の ES module */\nconst SCRIPTS: Record<string, string> = {\n \"/mediabunny.js\": join(dirname(require_.resolve(\"mediabunny\")), \"mediabunny.min.mjs\"),\n \"/gifenc.js\": require_.resolve(\"gifenc/dist/gifenc.esm.js\"),\n};\n\n/** CSS の 1px を何画素で撮るか */\nconst SCALE = 2;\n\nconst INSTALL_ADD = \"`pnpm add -D playwright-core`\";\nconst INSTALL_CHROMIUM = \"`pnpm exec playwright-core install chromium`\";\n\n/** 書き出す道具が無い時の断りの文。言葉ごとに持つ (#3003) */\nconst LAUNCH_TEXT: Record<NotationLang, { missing: string; cannotLaunch: string; install: string }> = {\n ja: {\n missing: \"書き出しには playwright-core が要る。\",\n cannotLaunch: \"Chromium を起動できない。\",\n install: `${INSTALL_ADD} で入れ、${INSTALL_CHROMIUM} で Chromium を入れる`,\n },\n en: {\n missing: \"Exporting needs playwright-core. \",\n cannotLaunch: \"Cannot launch Chromium. \",\n install: `Install playwright-core with ${INSTALL_ADD} and Chromium with ${INSTALL_CHROMIUM}`,\n },\n};\n\n/** 画面なしの Chromium を起こす。起こせない時は、渡した言葉で入れ方を添えて断る */\nexport async function launch(lang: NotationLang): Promise<Browser> {\n const text = LAUNCH_TEXT[lang];\n let chromium: (typeof import(\"playwright-core\"))[\"chromium\"];\n try {\n ({ chromium } = await import(\"playwright-core\"));\n } catch {\n throw new Error(`${text.missing}${text.install}`);\n }\n try {\n return await chromium.launch();\n } catch (error) {\n throw new Error(`${text.cannotLaunch}${text.install} (${String(error).split(\"\\n\")[0]})`);\n }\n}\n\n/** 図の SVG の大きさ (CSS の px) */\nexport function sizeOf(svg: string): { width: number; height: number } {\n const [, width = \"0\", height = \"0\"] = /^<svg\\b[^>]*?\\swidth=\"(\\d+)\"\\s+height=\"(\\d+)\"/.exec(svg) ?? [];\n return { width: Number(width), height: Number(height) };\n}\n\nexport interface Stage {\n page: Page;\n width: number;\n height: number;\n}\n\n/**\n * 図 1 枚を置いた頁を開き、字が読み込まれるまで待つ。`body` は頁の地の CSS。\n * 図は置く前から止めておく。置いてから止めると、止めるまでに進んだ分だけ毎回絵がずれる。\n */\nexport async function stage(browser: Browser, svg: string, fontCss: string, body: string): Promise<Stage> {\n const { width, height } = sizeOf(svg);\n const page = await browser.newPage({ viewport: { width, height }, deviceScaleFactor: SCALE });\n const paused = svg.replace(/^<svg\\b/, '<svg style=\"--play:paused;--at:0\"');\n const html =\n `<!doctype html><html><head><meta charset=\"utf-8\"><style>${fontCss}html,body{margin:0}body{${body}}svg{display:block}</style>` +\n `<script type=\"module\">import * as mb from \"/mediabunny.js\";import * as gif from \"/gifenc.js\";window.__tools={mb,gif};</script></head><body>${paused}</body></html>`;\n await page.route(\"http://localhost/**\", async (route) => {\n const path = new URL(route.request().url()).pathname;\n if (path === \"/\") return route.fulfill({ contentType: \"text/html; charset=utf-8\", body: html });\n const script = SCRIPTS[path];\n return script ? route.fulfill({ contentType: \"text/javascript\", body: readFileSync(script) }) : route.fulfill({ status: 404 });\n });\n await page.goto(\"http://localhost/\");\n await page.waitForFunction(() => \"__tools\" in window);\n await page.evaluate(async () => {\n const loads: Promise<FontFace>[] = [];\n document.fonts.forEach((face) => loads.push(face.load()));\n await Promise.all(loads);\n await document.fonts.ready;\n });\n return { page, width, height };\n}\n\n/** 止めてある図の時刻を `t` 秒に動かし、描き終わるまで待つ */\nasync function at(page: Page, t: number): Promise<void> {\n await page.evaluate(\n (t) =>\n new Promise<void>((done) => {\n document.querySelector(\"svg\")?.style.setProperty(\"--at\", String(t));\n requestAnimationFrame(() => requestAnimationFrame(() => done()));\n }),\n t,\n );\n}\n\n/** `t` 秒の止め絵の PNG。図の外 (角の丸みの外) は透明にする */\nexport async function still(stage: Stage, t: number): Promise<Buffer> {\n await at(stage.page, t);\n return stage.page.screenshot({ type: \"png\", omitBackground: true });\n}\n\nexport interface Film {\n frames: number;\n mp4?: Buffer;\n gif?: Buffer;\n}\n\n/** 頁の中で詰める道具。`sample` で GIF の色の表の元を集め、`seal` で色の表を決めてから `push` でコマを渡す */\ninterface FilmBox {\n sample(png: string): Promise<void>;\n seal(): void;\n push(png: string, i: number): Promise<void>;\n finish(): Promise<{ mp4?: string; gif?: string }>;\n}\n\n/**\n * 1 周 (`total` 秒) を `fps` で撮り、mp4 と GIF に詰める。GIF は `gifEvery` コマに 1 枚を使い、0 なら作らない。\n * GIF の色の表は `samples` 秒の絵 (段ごとの止め絵) から 1 つだけ作り、全てのコマをその表で塗る。\n * コマごとに表を作ると、寄って追う図でコマ全体が動いた後、止まった所の淡い色がコマごとの表でばらばらに残る。\n */\nexport async function film(stage: Stage, plan: { total: number; fps: number; mp4: boolean; gifEvery: number; samples: number[] }): Promise<Film> {\n const { page, width, height } = stage;\n await page.evaluate(\n async ({ width, height, scale, fps, mp4, gifEvery }) => {\n const { mb, gif } = (window as unknown as { __tools: { mb: any; gif: any } }).__tools;\n let add: (bitmap: ImageBitmap, i: number) => Promise<void> = () => Promise.resolve();\n let close: () => Promise<Uint8Array | undefined> = () => Promise.resolve(undefined);\n if (mp4) {\n const canvas = new OffscreenCanvas(width * scale, height * scale);\n const context = canvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D;\n const target = new mb.BufferTarget();\n const output = new mb.Output({ format: new mb.Mp4OutputFormat({ fastStart: \"in-memory\" }), target });\n const source = new mb.CanvasSource(canvas, { codec: \"avc\", bitrate: mb.QUALITY_MEDIUM, keyFrameInterval: 2 });\n output.addVideoTrack(source, { frameRate: fps });\n await output.start();\n add = async (bitmap, i) => {\n context.drawImage(bitmap, 0, 0);\n await source.add(i / fps, 1 / fps);\n };\n close = async () => {\n await output.finalize();\n return new Uint8Array(target.buffer as ArrayBuffer);\n };\n }\n\n // GIF は CSS の 1px を 1 画素で詰める。前のコマの元の絵と 1 つでも色が違う画素だけを書き、残りは透明にする。\n // 撮る絵は毎回同じなので、動いていない所はぴったり一致する。\n // 差に幅を持たせると、ゆっくり消える物の最後の数段が書かれず、薄い残りになる\n const small = new OffscreenCanvas(width, height);\n const smallContext = small.getContext(\"2d\", { willReadFrequently: true }) as OffscreenCanvasRenderingContext2D;\n const decode = (png: string): Promise<ImageBitmap> => createImageBitmap(new Blob([Uint8Array.from(atob(png), (c) => c.charCodeAt(0))], { type: \"image/png\" }));\n const read = (bitmap: ImageBitmap): Uint8ClampedArray => {\n smallContext.drawImage(bitmap, 0, 0, width, height);\n return smallContext.getImageData(0, 0, width, height).data;\n };\n const encoder = gifEvery ? gif.GIFEncoder() : undefined;\n const delay = (gifEvery / fps) * 1000;\n const sampled: Uint8ClampedArray[] = [];\n // 色の表。最後の 1 色は透明に使う\n let colors: number[][] = [];\n // 色ごとに表のどの色で塗るかを 1 度だけ決めて覚える。`gifenc` の `applyPalette` は似た色の組ごとに\n // そのコマで最初に見た色で塗る色を決めるので、同じ色でもコマによって塗る色が変わり、\n // 動いた所だけを書くと、書いたコマごとに淡い色がずれて前の絵の形が浮く\n const nearest = new Map<number, number>();\n const toIndex = (data: Uint8ClampedArray): Uint8Array => {\n const index = new Uint8Array(data.length / 4);\n for (let p = 0; p < index.length; p++) {\n const i = p * 4;\n const key = ((data[i] as number) << 16) | ((data[i + 1] as number) << 8) | (data[i + 2] as number);\n let k = nearest.get(key);\n if (k === undefined) {\n k = gif.nearestColorIndex(colors, [data[i], data[i + 1], data[i + 2]]) as number;\n nearest.set(key, k);\n }\n index[p] = k;\n }\n return index;\n };\n let previous: Uint8ClampedArray | undefined;\n const writeGif = (data: Uint8ClampedArray): void => {\n const clear = colors.length;\n const index = toIndex(data);\n const before = previous;\n previous = data;\n if (!before) {\n encoder.writeFrame(index, width, height, { palette: [...colors, [0, 0, 0]], delay, dispose: 1 });\n return;\n }\n let changed = 0;\n for (let p = 0; p < index.length; p++) {\n const i = p * 4;\n if (data[i] === before[i] && data[i + 1] === before[i + 1] && data[i + 2] === before[i + 2]) index[p] = clear;\n else changed++;\n }\n // 変わった所が無いコマは、透明な 1 画素だけを書いて時間だけ進める\n if (!changed) encoder.writeFrame(new Uint8Array([clear]), 1, 1, { transparent: true, transparentIndex: clear, delay, dispose: 1 });\n else encoder.writeFrame(index, width, height, { transparent: true, transparentIndex: clear, delay, dispose: 1 });\n };\n\n const base64 = (bytes: Uint8Array): string => {\n let text = \"\";\n for (let i = 0; i < bytes.length; i += 0x8000) text += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n return btoa(text);\n };\n const box: FilmBox = {\n async sample(png) {\n const bitmap = await decode(png);\n sampled.push(read(bitmap));\n bitmap.close();\n },\n seal() {\n const all = new Uint8ClampedArray(sampled.reduce((n, data) => n + data.length, 0));\n let offset = 0;\n for (const data of sampled) {\n all.set(data, offset);\n offset += data.length;\n }\n colors = gif.quantize(all, 255);\n },\n async push(png, i) {\n const bitmap = await decode(png);\n await add(bitmap, i);\n if (gifEvery && i % gifEvery === 0) writeGif(read(bitmap));\n bitmap.close();\n },\n async finish() {\n const video = await close();\n if (encoder) encoder.finish();\n return { ...(video ? { mp4: base64(video) } : {}), ...(encoder ? { gif: base64(encoder.bytes() as Uint8Array) } : {}) };\n },\n };\n (window as unknown as { __film: FilmBox }).__film = box;\n },\n { width, height, scale: SCALE, fps: plan.fps, mp4: plan.mp4, gifEvery: plan.gifEvery },\n );\n\n // コマは CDP で撮る (止め絵の撮り方の半分ほどの時間で済む)。\n // CDP は頁の画素の細かさを見ないので、撮る範囲に倍率を付けて止め絵と同じ細かさにする\n const cdp = await page.context().newCDPSession(page);\n const clip = { x: 0, y: 0, width, height, scale: SCALE };\n const shoot = async (t: number): Promise<string> => {\n await at(page, t);\n return (await cdp.send(\"Page.captureScreenshot\", { format: \"png\", optimizeForSpeed: true, clip })).data;\n };\n if (plan.gifEvery) {\n for (const t of plan.samples) {\n const png = await shoot(t);\n await page.evaluate((png) => (window as unknown as { __film: FilmBox }).__film.sample(png), png);\n }\n await page.evaluate(() => (window as unknown as { __film: FilmBox }).__film.seal());\n }\n const frames = Math.round(plan.total * plan.fps);\n for (let i = 0; i < frames; i++) {\n const png = await shoot(i / plan.fps);\n await page.evaluate(([png, i]) => (window as unknown as { __film: FilmBox }).__film.push(png, i), [png, i] as const);\n }\n const out = await page.evaluate(() => (window as unknown as { __film: FilmBox }).__film.finish());\n return {\n frames,\n ...(out.mp4 ? { mp4: Buffer.from(out.mp4, \"base64\") } : {}),\n ...(out.gif ? { gif: Buffer.from(out.gif, \"base64\") } : {}),\n };\n}\n","/**\n * 書き出す図で描く字だけに、同梱した字の file を削る。\n *\n * 同梱した字の package は、字の範囲ごとに分けた file (woff2) と、file ごとの範囲の表 (`unicode.json`) を持つ。\n * 描く字が入る file だけを、描く字だけに削り、`data:` で埋めた `@font-face` にする。\n * 太さの軸は、値の表 (`TYPE`) が使う太さの間に縮める。\n */\nimport { readFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { FONTS } from \"../look/fonts\";\nimport { TYPE } from \"../look/values\";\n\nconst require_ = createRequire(import.meta.url);\n// subset-font は型を持たないので、使う形だけをここで名指す\nconst subsetFont = require_(\"subset-font\") as (\n font: Buffer,\n text: string,\n options: { targetFormat: \"woff2\"; variationAxes: Record<string, { min: number; max: number }> },\n) => Promise<Buffer>;\n\n/** 字の名前と、その字を持つ package */\nconst PACKAGES = [\n { family: FONTS.sans, name: \"noto-sans-jp\" },\n { family: FONTS.mono, name: \"jetbrains-mono\" },\n] as const;\n\nconst weights = Object.values(TYPE).map((style) => style.weight);\nconst WEIGHT = { min: Math.min(...weights), max: Math.max(...weights) };\n\n/** `U+30-39,U+3000-303F` の形の範囲の一覧 */\nfunction ranges(list: string): [number, number][] {\n return list.split(\",\").map((part) => {\n const [from = \"\", to = from] = part.trim().replace(/^U\\+/i, \"\").split(\"-\");\n return [parseInt(from, 16), parseInt(to, 16)];\n });\n}\n\nconst hex = (code: number): string => `U+${code.toString(16).toUpperCase()}`;\n\n/** 字を空白ごと集める。改行は字の file に要らない */\nexport function charsOf(texts: string[]): string[] {\n return [...new Set([...texts.join(\"\")])].filter((char) => char !== \"\\n\" && char !== \"\\r\" && char !== \"\\t\").sort();\n}\n\n/** 描く字だけに削った字の file を `data:` で埋めた `@font-face` の並び */\nexport async function fontFaces(chars: string[]): Promise<string> {\n const faces = await Promise.all(\n PACKAGES.flatMap(({ family, name }) => {\n const base = dirname(require_.resolve(`@fontsource-variable/${name}/unicode.json`));\n const table = JSON.parse(readFileSync(join(base, \"unicode.json\"), \"utf8\")) as Record<string, string>;\n return Object.entries(table).map(async ([key, list]) => {\n const span = ranges(list);\n const own = chars.filter((char) => {\n const code = char.codePointAt(0) ?? -1;\n return span.some(([from, to]) => code >= from && code <= to);\n });\n if (!own.length) return \"\";\n const file = join(base, \"files\", `${name}-${key.replace(/[[\\]]/g, \"\")}-wght-normal.woff2`);\n const woff2 = await subsetFont(await readFile(file), own.join(\"\"), { targetFormat: \"woff2\", variationAxes: { wght: WEIGHT } });\n const unicode = own.map((char) => hex(char.codePointAt(0) ?? 0)).join(\",\");\n return `@font-face{font-family:\"${family}\";font-style:normal;font-display:block;font-weight:${WEIGHT.min} ${WEIGHT.max};src:url(data:font/woff2;base64,${woff2.toString(\"base64\")}) format(\"woff2\");unicode-range:${unicode}}`;\n });\n }),\n );\n return faces.join(\"\");\n}\n","/**\n * 1 file で開ける HTML。削った字と、頁に図を置いて動かす script と、原本の JSON を収める。\n *\n * 開くと頁と同じく、枠の幅で見せ方を選び、動きを嫌う設定では止め絵を釦で送る。\n * 外へ何も取りに行かない。\n */\nimport { readFileSync } from \"node:fs\";\nimport type { Theme } from \"../look/values\";\nimport { esc } from \"../render/parts\";\nimport type { Diagram } from \"../schema\";\nimport type { NotationLang } from \"../words\";\n\n/** 頁に図を置いて動かす script。build で `player-global.ts` を 1 file に束ねた物 */\nconst PLAYER = new URL(\"./player.global.js\", import.meta.url);\n\n/** `lang` は図の中の字 (全体図の札と読み上げの名前) の言葉。頁の `lang` 属性も同じにし、名前をその言葉の声で読ませる (#3001) */\nexport function pageHtml(diagram: Diagram, look: { palette: string; theme: Theme; vars: string; lang: NotationLang }, fontCss: string): string {\n // `</script>` で script が途切れないよう、`<` を JSON の逃がし方で書く\n const json = JSON.stringify(diagram).replace(/</g, \"\\\\u003c\");\n const options = JSON.stringify({ palette: look.palette, theme: look.theme, lang: look.lang });\n return [\n \"<!doctype html>\",\n `<html lang=\"${look.lang}\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">`,\n `<title>${esc(diagram.title)}</title>`,\n `<style>${fontCss}:root{${look.vars}}html,body{margin:0}body{background:var(--bg)}</style>`,\n '</head><body><div id=\"dragon\"></div>',\n `<script type=\"application/json\" id=\"dragon-diagram\">${json}</script>`,\n `<script>${readFileSync(PLAYER, \"utf8\").replace(/<\\/script/gi, \"<\\\\/script\")}</script>`,\n `<script>DragonPlayer.mountDiagram(document.getElementById(\"dragon\"),JSON.parse(document.getElementById(\"dragon-diagram\").textContent),${options});</script>`,\n \"</body></html>\",\n ].join(\"\\n\");\n}\n","/**\n * 同じ原本の JSON から、mp4、GIF、HTML、PNG を書き出す。\n *\n * 見せ方は頁と同じく枠の幅で選ぶ (`chooseView`)。幅は寄って見せる窓の幅にもなる。\n * 寄って見せる図で幅の指定が無い時は、記事の本文ほどの枠 (`DEFAULTS.followWidth`) で寄る。\n * PNG は最後の段の止め絵を、全体を止めた見せ方で撮る。\n * 字は図で描く字だけに削り、撮る頁と HTML の両方に同じ物を埋める。\n */\nimport { mkdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { paletteVars, resolvePalette, type Theme } from \"../look/values\";\nimport { BUTTON_TEXT, stepNo } from \"../player\";\nimport { drawSvg, type Rendered, renderDiagram } from \"../render/svg\";\nimport type { ViewMode } from \"../schema\";\nimport { chooseView } from \"../view\";\nimport type { NotationLang } from \"../words\";\nimport { film, launch, sizeOf, stage, still } from \"./capture\";\nimport { charsOf, fontFaces } from \"./fonts\";\nimport { pageHtml } from \"./html\";\n\nexport type ExportFormat = \"mp4\" | \"gif\" | \"html\" | \"png\";\n\nexport interface ExportOptions {\n /** 書き出す先の dir。無ければ作り、書き出しに失敗した時は作った dir を残さない (#3013) */\n outDir: string;\n /** file の名前 (拡張子を除く)。既定は `diagram` */\n name?: string;\n /** 書き出す形。既定は 4 つ全て */\n formats?: ExportFormat[];\n /** 枠の幅 (CSS の px)。見せ方を選び、寄って見せる窓の幅になる */\n width?: number;\n palette?: string;\n theme?: Theme;\n /** mp4 の 1 秒のコマの数 */\n fps?: number;\n /** GIF の 1 秒のコマの数 */\n gifFps?: number;\n /** 図の中の字 (全体図の札、HTML の読み上げの名前、描けない時の断りの文) の言葉。書かなければ日本語 (#3001) */\n lang?: NotationLang;\n}\n\nexport interface ExportResult {\n /** 書き出した file の path */\n files: Partial<Record<ExportFormat, string>>;\n view: ViewMode;\n /** 撮ったコマの数 */\n frames: number;\n /** 動画のコマの大きさ (CSS の px)。撮る画素はこの 2 倍 */\n width: number;\n height: number;\n}\n\n/** 書き出せる形。命令が `--format` の値を確かめる時にも使う */\nexport const FORMATS: readonly ExportFormat[] = [\"mp4\", \"gif\", \"html\", \"png\"];\nconst DEFAULTS = { fps: 30, gifFps: 10, followWidth: 728 };\n\nconst unescape = (s: string): string => s.replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&amp;/g, \"&\");\n\n/** SVG の中で描かれる字 (`<text>` の中身) */\nconst svgTexts = (svg: string): string[] => [...svg.matchAll(/<text\\b[^>]*>([\\s\\S]*?)<\\/text>/g)].map((m) => unescape((m[1] ?? \"\").replace(/<[^>]+>/g, \"\")));\n\n/** 頁と書き出しで描かれうる字。寄って見せる時の全体図の題 (`followSvg` の中) と、釦と段の番号の字も含む */\nfunction drawnTexts(rendered: Rendered, followSvg: string | undefined): string[] {\n const { diagram } = rendered;\n const svgs = followSvg === undefined ? [rendered.svg] : [rendered.svg, followSvg];\n const count = diagram.steps.length;\n return [...svgs.flatMap(svgTexts), ...diagram.steps.flatMap((step, s) => [step.title, step.body, stepNo(s, count)]), ...Object.values(BUTTON_TEXT)];\n}\n\nexport async function exportDiagram(input: unknown, options: ExportOptions): Promise<ExportResult> {\n const formats = options.formats ?? FORMATS;\n const lang = options.lang ?? \"ja\";\n const rendered = renderDiagram(input, {\n ...(options.palette ? { palette: options.palette } : {}),\n ...(options.theme ? { theme: options.theme } : {}),\n lang,\n });\n const { diagram, layout, timeline, theme } = rendered;\n const palette = resolvePalette(rendered.palette);\n const vars = paletteVars(palette, theme);\n const width = options.width ?? (rendered.view === \"follow\" ? DEFAULTS.followWidth : layout.width);\n const view = chooseView(rendered, width).mode;\n // 寄って見せる図は動画と字の file の両方に使うので 1 度だけ描き、2 つの全体図の札の言葉を揃える\n const followSvg = rendered.view === \"fixed\" ? undefined : drawSvg(diagram, layout, timeline, palette, theme, { width, lang });\n const videoSvg = view === \"follow\" && followSvg ? followSvg : rendered.svg;\n const fontCss = await fontFaces(charsOf(drawnTexts(rendered, followSvg)));\n\n // 撮る物を全て撮り終えてから書く。撮る所で失敗した時に、書き出し先の dir と途中の file を残さないため (#3013)\n const outputs: [ExportFormat, string | Buffer][] = [];\n\n if (formats.includes(\"html\")) outputs.push([\"html\", pageHtml(diagram, { palette: palette.id, theme, vars, lang }, fontCss)]);\n\n let frames = 0;\n const mp4 = formats.includes(\"mp4\");\n const gif = formats.includes(\"gif\");\n if (mp4 || gif || formats.includes(\"png\")) {\n const browser = await launch(lang);\n try {\n if (formats.includes(\"png\")) {\n const fixed = await stage(browser, rendered.svg, fontCss, \"\");\n outputs.push([\"png\", await still(fixed, timeline.stills[timeline.stills.length - 1] ?? 0)]);\n }\n if (mp4 || gif) {\n const fps = mp4 ? (options.fps ?? DEFAULTS.fps) : (options.gifFps ?? DEFAULTS.gifFps);\n const gifEvery = gif ? Math.max(1, Math.round(fps / (options.gifFps ?? DEFAULTS.gifFps))) : 0;\n const shot = await film(await stage(browser, videoSvg, fontCss, `${vars};background:var(--bg)`), {\n total: timeline.total,\n fps,\n mp4,\n gifEvery,\n // GIF の色の表は、最初の絵と段ごとの止め絵から作る\n samples: [0, ...timeline.stills],\n });\n frames = shot.frames;\n if (shot.mp4) outputs.push([\"mp4\", shot.mp4]);\n if (shot.gif) outputs.push([\"gif\", shot.gif]);\n }\n } finally {\n await browser.close();\n }\n }\n const files = writeOutputs(options.outDir, options.name ?? \"diagram\", outputs);\n return { files, view, frames, ...sizeOf(videoSvg) };\n}\n\n/**\n * 書き出し先の dir を作り、撮った物を並びの順に書く。\n * 書いている途中で失敗した時は、この回に作った dir を中身ごと消してから投げ直す (#3013)。\n * 前から在った dir は消さない。\n */\nfunction writeOutputs(outDir: string, name: string, outputs: [ExportFormat, string | Buffer][]): Partial<Record<ExportFormat, string>> {\n // 作った dir の内で一番上の path。前から在った時は undefined\n const created = mkdirSync(outDir, { recursive: true });\n const files: Partial<Record<ExportFormat, string>> = {};\n try {\n for (const [format, data] of outputs) {\n const path = join(outDir, `${name}.${format}`);\n writeFileSync(path, data);\n files[format] = path;\n }\n } catch (error) {\n if (created !== undefined) rmSync(created, { recursive: true, force: true });\n throw error;\n }\n return files;\n}\n","/**\n * dragon記法の誤りの文 (#2997、#3137)。\n *\n * 記法の語は英語だけで file から言葉が決まらないため、誤りの文は呼ぶ側が渡した言葉\n * (渡さなければ日本語) で出す。文の中の記法の語は語の表から引き、表と文で語が食い違わないようにする。\n */\nimport { COLORS } from \"./schema\";\nimport { CARRIES, HEADS, KINDS, type NotationLang, SIDES, VIEWS } from \"./words\";\n\n/** 新しい形のどの行の書き方を示すか。前の形の行に当たった時に、誤りの文が書き方を示す */\nexport type Shape = \"sequence\" | \"architecture\" | \"group\" | \"box\" | \"strip\" | \"view\" | \"step\" | \"say\" | \"code\" | \"act\" | \"note\" | \"set\";\n\nexport interface Messages {\n noHead: string;\n badHead: string;\n /** 前の形の `word` を書いた行。`shape` の行の書き方を示す */\n oldForm: (word: string, shape: Shape) => string;\n unknownHead: (word: string) => string;\n duplicate: (id: string) => string;\n needsId: (word: string) => string;\n badId: (id: string) => string;\n afterId: string;\n undeclaredBox: (id: string) => string;\n noBody: (title: string) => string;\n emptyStepTitle: string;\n noBoxes: string;\n noSteps: string;\n emptySay: string;\n sayTwice: string;\n codeTwice: string;\n emptyCode: string;\n declarationInStep: string;\n stepLineBeforeStep: string;\n nestedGroup: string;\n strayEnd: string;\n endTakesNothing: string;\n unclosedGroup: (id: string) => string;\n regionReopened: (id: string) => string;\n emptyName: (id: string) => string;\n stripTwice: string;\n stripShape: string;\n emptyStripField: string;\n stripUndeclared: string;\n noSuchField: (field: string) => string;\n stripNeedsValue: string;\n actShape: string;\n noteShape: string;\n edgeShape: string;\n emptyLabel: string;\n quoteUnclosed: string;\n afterQuote: string;\n attrUnclosed: string;\n attrNoColon: (raw: string) => string;\n attrNoValue: (key: string) => string;\n attrTwice: (key: string) => string;\n badAttr: (key: string, allowed: readonly string[]) => string;\n badColor: string;\n badView: string;\n badCarry: string;\n badSide: string;\n carryTwice: string;\n /** 状態遷移図の箱の名札に、始まりか終わりの印の名前を書いた */\n reservedId: (id: string) => string;\n intoStart: string;\n outOfFinish: string;\n /** 状態遷移図の最初の step より前の線に、属性を書いた */\n pathNoAttrs: string;\n}\n\nconst list = (words: readonly string[]): string => words.join(\" / \");\n\nconst ja = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <題>\",\n architecture: \"architecture <題>\",\n group: \"group <名札> as <名前> [note: <添え書き>] から end まで\",\n box: \"box <名札> as <名前> [note: <下の小さな字>]\",\n strip: \"strip <題>: <欄>, <欄>\",\n view: \"sequence <題> [view: follow]\",\n step: \"step <段の題>\",\n say: \"say <段の本文>\",\n code: \"code <命令>\",\n act: \"act <名札>: <処理の名前>\",\n note: \"note <名札>: <下の小さな字>\",\n set: \"set <欄>: <値> [tag: <札>]\",\n };\n return {\n noHead: `最初の行に図の種類 (${list(KINDS)}) と題を書く`,\n badHead: `最初の行は ${KINDS.join(\" か \")} で始め、続けて題を書く`,\n oldForm: (word, shape) => `${word} は前の形の書き方。新しい形では ${shapes[shape]} と書く`,\n unknownHead: (word) => `${word} は行の頭に書けない。行は ${list(HEADS)} か、<名札> -> <名札> で始める`,\n duplicate: (id) => `${id} は既に宣言した名札`,\n needsId: (word) => `${word} の後ろに名札を書く`,\n badId: (id) => `${id} は名札に使えない。名札には空白と [ ] 「 」 = : を含めない`,\n afterId: \"名札の後ろには as <名前> か属性を書く\",\n undeclaredBox: (id) => `${id} という箱は宣言していない`,\n noBody: (title) => `段「${title}」に本文 (say の行) が要る`,\n emptyStepTitle: \"step の後ろに段の題を書く\",\n noBoxes: \"箱を 1 つ以上宣言する\",\n noSteps: \"段 (step の行) を 1 つ以上書く\",\n emptySay: \"say の後ろか、その下に字下げした行に段の本文を書く\",\n sayTwice: \"1 つの段に say は 1 つまで。長い本文は say の下に字下げして続ける\",\n codeTwice: \"1 つの段に code は 1 行まで\",\n emptyCode: \"code の後ろに命令を書く\",\n declarationInStep: \"group と box と strip は最初の step より前に書く\",\n stepLineBeforeStep: \"線と say と code と act と note と set は step の下に書く\",\n nestedGroup: \"group の中に group は書けない。先に end で閉じる\",\n strayEnd: \"end の前に、閉じる group が無い\",\n endTakesNothing: \"end の後ろには何も書かない\",\n unclosedGroup: (id) => `group ${id} を end で閉じていない`,\n regionReopened: (id) => `group ${id} は宣言済み。もう一度開く時は group ${id} だけを書き、名前と属性は最初の宣言に書く`,\n emptyName: (id) => `${id} の名前が空`,\n stripTwice: \"strip は 1 つだけ宣言する\",\n stripShape: \"strip は strip <題>: <欄>, <欄> の形で書く\",\n emptyStripField: \"strip の欄の名前が空\",\n stripUndeclared: \"set を書く前に、strip <題>: <欄>, <欄> で帯を宣言する\",\n noSuchField: (field) => `${field} という欄は strip に無い`,\n stripNeedsValue: \"set は set <欄>: <値> か set <欄> [tag: <札>] の形で書く\",\n actShape: \"act は act <名札>: <処理の名前> の形で書く\",\n noteShape: \"note は note <名札>: <下の小さな字> の形で書く\",\n edgeShape: \"線は <名札> -> <名札>: <線の名前> [<属性>] の形で書く\",\n emptyLabel: \"線の : の後ろに線の名前を書く。名前を書かない時は : も書かない\",\n quoteUnclosed: '\" で始めた字を \" で閉じていない',\n afterQuote: '\" で閉じた字の後ろには、属性か次の , だけを書く',\n attrUnclosed: \"属性は [ で始めて ] で閉じ、行の終わりに置く\",\n attrNoColon: (raw) => `[${raw}] は書けない。属性は [<鍵>: <値>] の形で書く`,\n attrNoValue: (key) => `${key}: の後ろに値を書く`,\n attrTwice: (key) => `${key} は 1 つの行に 1 つまで`,\n badAttr: (key, allowed) => `${key} はこの行に書けない属性。書けるのは ${list(allowed)}`,\n badColor: `color は ${list(COLORS)} のどれか`,\n badView: `view は ${list(VIEWS)} のどれか`,\n badCarry: `carry は ${list(CARRIES)} のどれか。札は tag: <値> で書く`,\n badSide: `side は ${list(SIDES)} のどれか`,\n carryTwice: \"運ぶ物は 1 本の線に 1 つまで。carry と tag は一緒に書かない\",\n reservedId: (id) => `${id} は状態遷移図の始まりと終わりの印の名前で、箱の名札に使えない`,\n intoStart: \"start へ入る線は書けない。start は始まりの印で、線は start から出る\",\n outOfFinish: \"finish から出る線は書けない。finish は終わりの印で、線は finish へ入る\",\n pathNoAttrs: \"最初の step より前の線は今回は通らない道なので、属性 (carry と tag と side) を書けない\",\n };\n};\n\nconst en = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <title>\",\n architecture: \"architecture <title>\",\n group: \"group <id> as <name> [note: <note>] through end\",\n box: \"box <id> as <name> [note: <caption>]\",\n strip: \"strip <title>: <field>, <field>\",\n view: \"sequence <title> [view: follow]\",\n step: \"step <step title>\",\n say: \"say <step body>\",\n code: \"code <command>\",\n act: \"act <id>: <action>\",\n note: \"note <id>: <caption>\",\n set: \"set <field>: <value> [tag: <tag>]\",\n };\n return {\n noHead: `Write the diagram kind (${list(KINDS)}) and a title on the first line`,\n badHead: `Start the first line with ${KINDS.join(\" or \")}, followed by the title`,\n oldForm: (word, shape) => `${word} is the old notation. Write ${shapes[shape]} instead`,\n unknownHead: (word) => `A line cannot start with ${word}. Start a line with ${list(HEADS)}, or <id> -> <id>`,\n duplicate: (id) => `${id} is already declared`,\n needsId: (word) => `Write an id after ${word}`,\n badId: (id) => `${id} cannot be an id. An id has no spaces and none of [ ] 「 」 = :`,\n afterId: \"Write as <name> or attributes after the id\",\n undeclaredBox: (id) => `No box named ${id} is declared`,\n noBody: (title) => `Step \"${title}\" needs a body (a say line)`,\n emptyStepTitle: \"Write a title after step\",\n noBoxes: \"Declare at least one box\",\n noSteps: \"Write at least one step (a step line)\",\n emptySay: \"Write the step body after say, or on indented lines below it\",\n sayTwice: \"A step takes one say. Continue a long body on indented lines below it\",\n codeTwice: \"A step takes at most one code line\",\n emptyCode: \"Write the command after code\",\n declarationInStep: \"Write group, box and strip before the first step\",\n stepLineBeforeStep: \"Write lines, say, code, act, note and set under a step\",\n nestedGroup: \"A group cannot hold another group. Close it with end first\",\n strayEnd: \"There is no group for this end to close\",\n endTakesNothing: \"Write nothing after end\",\n unclosedGroup: (id) => `group ${id} is not closed with end`,\n regionReopened: (id) => `group ${id} is already declared. To open it again, write only group ${id}; put the name and attributes on the first one`,\n emptyName: (id) => `${id} has an empty name`,\n stripTwice: \"Declare only one strip\",\n stripShape: \"Write a strip as strip <title>: <field>, <field>\",\n emptyStripField: \"A strip field name is empty\",\n stripUndeclared: \"Declare the strip as strip <title>: <field>, <field> before writing set\",\n noSuchField: (field) => `The strip has no field named ${field}`,\n stripNeedsValue: \"Write set as set <field>: <value> or set <field> [tag: <tag>]\",\n actShape: \"Write act as act <id>: <action>\",\n noteShape: \"Write note as note <id>: <caption>\",\n edgeShape: \"Write a line as <id> -> <id>: <label> [<attributes>]\",\n emptyLabel: \"Write the label after the : of a line, or leave out the : as well\",\n quoteUnclosed: 'A value that starts with \" is not closed with \"',\n afterQuote: 'After a value closed with \", write only attributes or the next ,',\n attrUnclosed: \"Start attributes with [, close them with ], and put them at the end of the line\",\n attrNoColon: (raw) => `[${raw}] cannot be read. Write an attribute as [<key>: <value>]`,\n attrNoValue: (key) => `Write a value after ${key}:`,\n attrTwice: (key) => `Write ${key} only once on a line`,\n badAttr: (key, allowed) => `${key} cannot be written on this line. Write ${list(allowed)}`,\n badColor: `color is one of ${list(COLORS)}`,\n badView: `view is one of ${list(VIEWS)}`,\n badCarry: `carry is one of ${list(CARRIES)}. Write a tag as tag: <value>`,\n badSide: `side is one of ${list(SIDES)}`,\n carryTwice: \"A line carries one thing. Do not write carry and tag together\",\n reservedId: (id) => `${id} names the start or end mark of a state diagram and cannot be a box id`,\n intoStart: \"A line cannot go into start. start is the start mark, and lines leave it\",\n outOfFinish: \"A line cannot leave finish. finish is the end mark, and lines go into it\",\n pathNoAttrs: \"A line before the first step is a path not taken, so it takes no attributes (carry, tag, side)\",\n };\n};\n\nconst MESSAGES: Record<NotationLang, Messages> = { ja: ja(), en: en() };\n\nexport const messagesFor = (lang: NotationLang): Messages => MESSAGES[lang];\n","/**\n * 記法を 1 行ずつに切る。\n *\n * 空行とコメントの行 (`//` で始まる行) も捨てずに返す。`say` の下に字下げして続けた本文では、\n * 空行も `//` で始まる行も本文の字になるため、捨てるかは読む側が行の場所で決める (#3137)。\n * 行の頭と終わりの空白は落とし、頭の空白の字の数を `indent` に残す。\n * 誤りを示すために元の行の番号と、残した字が始まる列を持たせる。\n * 行と列は 1 から数え、列は字の数で数える (UTF-16 の単位では数えない)。\n */\nexport interface SourceLine {\n line: number;\n column: number;\n /** 行の頭の空白の字の数。`say` の続きの行を見分ける */\n indent: number;\n text: string;\n}\n\n/** 空行かコメントの行 */\nexport const isBlankOrComment = (source: SourceLine): boolean => source.text === \"\" || source.text.startsWith(\"//\");\n\n/** `text` の `index` 番目 (UTF-16 の位置) にある字が、行の何列目かを返す。 */\nexport function columnOf(source: SourceLine, index: number): number {\n return source.column + Array.from(source.text.slice(0, index)).length;\n}\n\nexport function tokenize(notation: string): SourceLine[] {\n return notation.split(/\\r?\\n/).map((raw, index) => {\n const indent = Array.from(raw.slice(0, raw.length - raw.trimStart().length)).length;\n return { line: index + 1, column: indent + 1, indent, text: raw.trim() };\n });\n}\n","/**\n * 人が書く dragon記法を、図の原本の JSON へ変える (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、線の行だけは箱の名札から始まる。最初の `step` より前に\n * 図の種類と題と区画と箱と帯を宣言し、`step` ごとに、その段で起きることを起きる順に並べる。\n *\n * sequence <題> [view: fixed か follow] 書かなければ字の大きさで選ぶ。図の種類は sequence と architecture と state\n * group <名札> as <名前> [note: <添え書き>, color: <色>, icon: <印>]\n * box <名札> as <名前> [note: <下の小さな字>, color: <色>, icon: <印>]\n * end 同じ名札の group はもう一度開ける\n * box <名札> as <名前> [...] as が無ければ名札を名前にする\n * strip <題>: <欄>, <欄>\n * step <段の題>\n * say <段の本文> say の下に字下げした行は本文の続き\n * code <段で打つ命令>\n * <名札> -> <名札>: <線の名前> [carry: <運ぶ物>, tag: <値>, side: <側>]\n * act <名札>: <処理の名前> 箱の中の処理\n * note <名札>: <字> 箱の下の小さな字の書き換え\n * set <欄>: <値> [tag: <札>] 中身の帯の値\n *\n * 鍵と値はコロンで区切り、属性は `[ ]` の中に `,` で並べて行の終わりに置く。\n * 空白を含む名前と文は行の終わりか `[` の前に置き、`[` を含む名前と `,` か `]` を含む属性の値だけを\n * `\"` で囲む。囲みの中では `\\\"` が `\"`、`\\\\` が `\\` になる。字下げは `say` の続きの行を見分ける時だけ意味を持つ。\n *\n * 状態遷移図 (`state`) では、線の送る側に始まりの印 `start`、受ける側に終わりの印 `finish` を書ける。\n * 最初の `step` より前に書いた線は、移れるが段で通るとは限らない道 (`state.paths`) になり、属性を持たない (#3163)。\n * 状態遷移図の `start` と `finish` は箱の名札に使えない。時系列図と構成図では宣言して使う普通の名札のまま。\n *\n * 行の頭の語と同じ綴りの名札 (`end` や `step`) も書ける。名札の次に `->` が来る行は線と読む。\n * 誤りは最初の 1 つで止め、行と列を示す。誤りの文の言葉は呼ぶ側が渡す。\n */\nimport { type Messages, messagesFor, type Shape } from \"./messages\";\nimport { type Box, type Carry, type Color, COLORS, type Diagram, type DiagramEvent, type LabelSide, type Region, type StatePath, type Step, type ViewMode } from \"./schema\";\nimport { columnOf, isBlankOrComment, type SourceLine, tokenize } from \"./tokenize\";\nimport { FORMAT_VERSION } from \"./version\";\nimport { AS, ATTRS, CARRIES, HEADS, KINDS, type NotationLang, OLD_HEADS, SIDES, STATE_ENDS, VIEWS } from \"./words\";\n\nexport interface LineError {\n line: number;\n column: number;\n message: string;\n}\n\nexport type Parsed = { ok: true; diagram: Diagram } | { ok: false; errors: LineError[] };\n\nexport interface ParseOptions {\n /** 誤りの文の言葉。既定は日本語 */\n lang?: NotationLang;\n}\n\nclass NotationError extends Error {\n constructor(\n readonly line: number,\n readonly column: number,\n message: string,\n ) {\n super(message);\n }\n}\n\nconst fail = (source: SourceLine, index: number, message: string): NotationError =>\n new NotationError(source.line, columnOf(source, index), message);\n\n/** 名札に使える字。原本の JSON の名札の形と同じ */\nconst ID = /^[^\\s[\\]「」=:]+$/u;\n/** 線の行。名札、`->`、名札 */\nconst EDGE = /^([^\\s:[\\]]+?)\\s*->\\s*([^\\s:[\\]]+)/du;\n\nconst isOneOf = <T extends string>(list: readonly T[], word: string): word is T => (list as readonly string[]).includes(word);\n\n/** `at` から空白を飛ばした位置 */\nfunction skipSpaces(text: string, at: number): number {\n let i = at;\n while (i < text.length && /\\s/u.test(text[i] ?? \"\")) i++;\n return i;\n}\n\n/** `[<鍵>: <値>]` の 1 つ。`at` は鍵の位置 */\ninterface Attr {\n value: string;\n at: number;\n}\n\n/** `at` の `\"` から閉じる `\"` までを読む。`end` は閉じた `\"` の次 */\nfunction readQuoted(source: SourceLine, at: number, m: Messages): { value: string; end: number } {\n const text = source.text;\n let value = \"\";\n for (let i = at + 1; i < text.length; i++) {\n const c = text[i] ?? \"\";\n const next = text[i + 1] ?? \"\";\n if (c === \"\\\\\" && (next === '\"' || next === \"\\\\\")) {\n value += next;\n i++;\n } else if (c === '\"') {\n return { value, end: i + 1 };\n } else {\n value += c;\n }\n }\n throw fail(source, at, m.quoteUnclosed);\n}\n\n/**\n * `at` から名前か文を読む。`\"` で始まれば囲みの中、そうでなければ `[` の前か行の終わりまで。\n * `rest` は名前の後ろの位置で、行の終わりか属性の `[` を指す。\n */\nfunction readName(source: SourceLine, at: number, m: Messages): { value: string; rest: number } {\n const text = source.text;\n const start = skipSpaces(text, at);\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n const rest = skipSpaces(text, quoted.end);\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterQuote);\n return { value: quoted.value, rest };\n }\n const open = text.indexOf(\"[\", start);\n const rest = open < 0 ? text.length : open;\n return { value: text.slice(start, rest).trim(), rest };\n}\n\n/** `at` の `[` から行の終わりの `]` までの属性を読む。`allowed` に無い鍵は誤り */\nfunction readAttrs(source: SourceLine, at: number, allowed: readonly string[], m: Messages): Map<string, Attr> {\n const text = source.text;\n if (!text.endsWith(\"]\")) throw fail(source, at, m.attrUnclosed);\n const close = text.length - 1;\n const attrs = new Map<string, Attr>();\n for (let i = at + 1; ; ) {\n const start = skipSpaces(text, i);\n let colon = start;\n while (colon < close && text[colon] !== \":\" && text[colon] !== \",\") colon++;\n if (colon >= close || text[colon] !== \":\") throw fail(source, start, m.attrNoColon(text.slice(start, colon).trim()));\n const key = text.slice(start, colon).trim();\n if (!allowed.includes(key)) throw fail(source, start, m.badAttr(key, allowed));\n if (attrs.has(key)) throw fail(source, start, m.attrTwice(key));\n let end = skipSpaces(text, colon + 1);\n let value: string;\n if (text[end] === '\"') {\n const quoted = readQuoted(source, end, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < close && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", end);\n const stop = comma < 0 || comma > close ? close : comma;\n value = text.slice(end, stop).trim();\n end = stop;\n }\n if (value === \"\") throw fail(source, start, m.attrNoValue(key));\n attrs.set(key, { value, at: start });\n if (end >= close) return attrs;\n i = end + 1;\n }\n}\n\n/** `at` から `,` で区切った字の並びを行の終わりまで読む */\nfunction readList(source: SourceLine, at: number, m: Messages): string[] {\n const text = source.text;\n const items: string[] = [];\n for (let i = at; ; ) {\n const start = skipSpaces(text, i);\n let value: string;\n let end: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < text.length && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", start);\n end = comma < 0 ? text.length : comma;\n value = text.slice(start, end).trim();\n }\n if (value === \"\") throw fail(source, start, m.emptyStripField);\n items.push(value);\n if (end >= text.length) return items;\n i = end + 1;\n }\n}\n\n/** `group` と `box` の行の、名札と `as` の後ろの名前と属性 */\ninterface Declared {\n id: string;\n idAt: number;\n name?: string;\n attrs: Map<string, Attr>;\n}\n\nfunction readDeclared(source: SourceLine, word: string, allowed: readonly string[], m: Messages): Declared {\n const text = source.text;\n const start = skipSpaces(text, word.length);\n const id = /^[^\\s[]+/u.exec(text.slice(start))?.[0];\n if (id === undefined) throw fail(source, 0, m.needsId(word));\n if (!ID.test(id)) throw fail(source, start, m.badId(id));\n let rest = skipSpaces(text, start + id.length);\n let name: string | undefined;\n if (text.startsWith(AS, rest) && /^(\\s|$)/u.test(text.slice(rest + AS.length, rest + AS.length + 1))) {\n const named = readName(source, rest + AS.length, m);\n if (named.value === \"\") throw fail(source, rest, m.emptyName(id));\n name = named.value;\n rest = named.rest;\n }\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterId);\n const attrs = rest < text.length ? readAttrs(source, rest, allowed, m) : new Map<string, Attr>();\n return { id, idAt: start, ...(name !== undefined ? { name } : {}), attrs };\n}\n\n/** 区画と箱の属性 (`note` と `color` と `icon`) */\nfunction lookOf(source: SourceLine, attrs: Map<string, Attr>, m: Messages): { note?: string; color?: Color; icon?: string } {\n const color = attrs.get(\"color\");\n if (color && !isOneOf(COLORS, color.value)) throw fail(source, color.at, m.badColor);\n const note = attrs.get(\"note\")?.value;\n const icon = attrs.get(\"icon\")?.value;\n return {\n ...(note !== undefined ? { note } : {}),\n ...(color ? { color: color.value as Color } : {}),\n ...(icon !== undefined ? { icon } : {}),\n };\n}\n\n/**\n * 前の形 (#2997 まで) の行なら、その印と、新しい形で書く行の形。`inStep` は段の中の行か。\n * 新しい形で読めない行の誤りの文で、書き直し方を示すために引く。\n */\nfunction oldForm(text: string, inStep: boolean): { word: string; shape: Shape } | undefined {\n const first = text.split(/\\s/u)[0] ?? \"\";\n if (first === \"帯\") return { word: first, shape: inStep ? \"set\" : \"strip\" };\n if (Object.hasOwn(OLD_HEADS, first)) return { word: first, shape: OLD_HEADS[first as keyof typeof OLD_HEADS] };\n if (text.startsWith(\"#\")) return { word: \"#\", shape: \"step\" };\n if (text.startsWith(\">\")) return { word: \">\", shape: \"say\" };\n if (text.startsWith(\"`\")) return { word: \"`\", shape: \"code\" };\n if (text.includes(\"「\")) return { word: \"「」\", shape: inStep ? \"note\" : \"box\" };\n if (/^[^\\s=:]+\\s*=(?!>)/u.test(text)) return { word: \"=\", shape: \"box\" };\n if (inStep && /^[^\\s:]+\\s*:/u.test(text)) return { word: \":\", shape: \"act\" };\n return undefined;\n}\n\n/** 読んでいる段。`body` は `say` を読むまで無い */\ninterface Building {\n source: SourceLine;\n title: string;\n body?: string[];\n code?: string;\n events: DiagramEvent[];\n}\n\nfunction parseLines(lines: SourceLine[], m: Messages): Diagram {\n const headAt = lines.findIndex((source) => !isBlankOrComment(source));\n const head = lines[headAt];\n if (!head) throw new NotationError(1, 1, m.noHead);\n const kind = head.text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(KINDS, kind)) {\n const old = oldForm(head.text, false);\n throw fail(head, 0, old ? m.oldForm(old.word, old.shape) : m.badHead);\n }\n const titled = readName(head, kind.length, m);\n if (titled.value === \"\") throw fail(head, 0, m.badHead);\n const title = titled.value;\n const shown = titled.rest < head.text.length ? readAttrs(head, titled.rest, ATTRS.diagram, m).get(\"view\") : undefined;\n if (shown && !isOneOf(VIEWS, shown.value)) throw fail(head, shown.at, m.badView);\n const view = shown?.value as ViewMode | undefined;\n\n const isState = kind === \"state\";\n const regions: Region[] = [];\n const boxes: Box[] = [];\n const paths: StatePath[] = [];\n const ids = new Set<string>();\n let strip: { title: string; fields: string[] } | undefined;\n const steps: Step[] = [];\n let building: Building | undefined;\n /** 開いている `group` */\n let group: { source: SourceLine; id: string } | undefined;\n\n const declare = (source: SourceLine, id: string, at: number): void => {\n if (ids.has(id)) throw fail(source, at, m.duplicate(id));\n ids.add(id);\n };\n const boxAt = (source: SourceLine, id: string, at: number): string => {\n if (!boxes.some((box) => box.id === id)) throw fail(source, at, m.undeclaredBox(id));\n return id;\n };\n /** 線の端。状態遷移図では送る側に `start`、受ける側に `finish` を書ける */\n const endAt = (source: SourceLine, id: string, at: number, side: \"from\" | \"to\"): string => {\n if (!isState || !isOneOf(STATE_ENDS, id)) return boxAt(source, id, at);\n if ((id === \"start\") !== (side === \"from\")) throw fail(source, at, id === \"start\" ? m.intoStart : m.outOfFinish);\n return id;\n };\n /** 状態遷移図の箱と区画の名札に、始まりと終わりの印の名前は使えない */\n const notReserved = (source: SourceLine, id: string, at: number): void => {\n if (isState && isOneOf(STATE_ENDS, id)) throw fail(source, at, m.reservedId(id));\n };\n /** 段の中に書く行の、書き先の段。最初の `step` より前なら誤り */\n const inStep = (source: SourceLine): Building => {\n if (!building) throw fail(source, 0, m.stepLineBeforeStep);\n return building;\n };\n /** 宣言の行。最初の `step` より後なら誤り */\n const beforeSteps = (source: SourceLine): void => {\n if (building) throw fail(source, 0, m.declarationInStep);\n };\n const finish = (): void => {\n if (!building) return;\n if (building.body === undefined) throw fail(building.source, 0, m.noBody(building.title));\n steps.push({\n title: building.title,\n body: building.body.join(\"\\n\"),\n ...(building.code !== undefined ? { code: building.code } : {}),\n events: building.events,\n });\n };\n\n const rest = lines.slice(headAt + 1);\n for (let i = 0; i < rest.length; i++) {\n const source = rest[i];\n if (!source || isBlankOrComment(source)) continue;\n const text = source.text;\n // 名札の次に `->` が来る行は、名札が行の頭の語と同じ綴りでも線と読む\n const edge = EDGE.exec(text);\n if (edge) {\n // 状態遷移図の最初の step より前の線は、移れる道の地図\n if (isState && !building) paths.push(readPath(source, edge));\n else inStep(source).events.push(readEdge(source, edge));\n continue;\n }\n const word = text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(HEADS, word)) {\n const old = oldForm(text, building !== undefined);\n throw fail(source, 0, old ? m.oldForm(old.word, old.shape) : m.unknownHead(word));\n }\n switch (word) {\n case \"group\":\n readGroup(source);\n break;\n case \"end\":\n if (text !== word) throw fail(source, word.length, m.endTakesNothing);\n if (!group) throw fail(source, 0, m.strayEnd);\n group = undefined;\n break;\n case \"box\":\n readBox(source);\n break;\n case \"strip\":\n readStrip(source);\n break;\n case \"step\": {\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n const stepTitle = text.slice(word.length).trim();\n if (stepTitle === \"\") throw fail(source, 0, m.emptyStepTitle);\n building = { source, title: stepTitle, events: [] };\n break;\n }\n case \"say\":\n i = readSay(source, i);\n break;\n case \"code\": {\n const step = inStep(source);\n if (step.code !== undefined) throw fail(source, 0, m.codeTwice);\n const command = text.slice(word.length).trim();\n if (command === \"\") throw fail(source, 0, m.emptyCode);\n step.code = command;\n break;\n }\n case \"act\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.actShape);\n step.events.push({ type: \"action\", box: on.box, label: on.text });\n break;\n }\n case \"note\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.noteShape);\n step.events.push({ type: \"swap\", box: on.box, text: on.text });\n break;\n }\n case \"set\":\n inStep(source).events.push(readSet(source));\n break;\n }\n }\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n\n if (boxes.length === 0) throw fail(head, 0, m.noBoxes);\n if (steps.length === 0) throw fail(head, 0, m.noSteps);\n\n return {\n version: FORMAT_VERSION,\n kind,\n title,\n ...(view ? { view } : {}),\n ...(regions.length > 0 ? { regions } : {}),\n boxes,\n ...(strip ? { strip } : {}),\n steps,\n ...(kind === \"sequence\" ? { sequence: { lifelines: boxes.map((box) => box.id) } } : {}),\n ...(paths.length > 0 ? { state: { paths } } : {}),\n };\n\n /** `group` の行。同じ名札をもう一度開いた時は、名前も属性も書かない */\n function readGroup(source: SourceLine): void {\n beforeSteps(source);\n if (group) throw fail(source, 0, m.nestedGroup);\n const declared = readDeclared(source, \"group\", ATTRS.group, m);\n if (regions.some((region) => region.id === declared.id)) {\n if (declared.name !== undefined || declared.attrs.size > 0) throw fail(source, 0, m.regionReopened(declared.id));\n } else {\n notReserved(source, declared.id, declared.idAt);\n declare(source, declared.id, declared.idAt);\n regions.push({ id: declared.id, name: declared.name ?? declared.id, ...lookOf(source, declared.attrs, m) });\n }\n group = { source, id: declared.id };\n }\n\n /** `box` の行。開いている `group` の中なら、その区画に置く */\n function readBox(source: SourceLine): void {\n beforeSteps(source);\n const declared = readDeclared(source, \"box\", ATTRS.box, m);\n notReserved(source, declared.id, declared.idAt);\n declare(source, declared.id, declared.idAt);\n const { note, ...look } = lookOf(source, declared.attrs, m);\n boxes.push({\n id: declared.id,\n name: declared.name ?? declared.id,\n ...(note !== undefined ? { sub: note } : {}),\n ...look,\n ...(group ? { region: group.id } : {}),\n });\n }\n\n /** `strip <題>: <欄>, <欄>` の行 */\n function readStrip(source: SourceLine): void {\n beforeSteps(source);\n if (strip) throw fail(source, 0, m.stripTwice);\n const text = source.text;\n const start = skipSpaces(text, \"strip\".length);\n let stripTitle: string;\n let colon: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n stripTitle = quoted.value;\n colon = skipSpaces(text, quoted.end);\n } else {\n colon = text.indexOf(\":\", start);\n stripTitle = colon < 0 ? \"\" : text.slice(start, colon).trim();\n }\n if (stripTitle === \"\" || text[colon] !== \":\") throw fail(source, 0, m.stripShape);\n strip = { title: stripTitle, fields: readList(source, colon + 1, m) };\n }\n\n /**\n * `say` の行と、その下に `say` より深く字下げして続けた行を段の本文にする。\n * 続きの行の間の空行は本文の空の行になる。返すのは読み終えた最後の行の番号。\n */\n function readSay(source: SourceLine, index: number): number {\n const step = inStep(source);\n if (step.body !== undefined) throw fail(source, 0, m.sayTwice);\n const inline = source.text.slice(\"say\".length).trim();\n const body = inline === \"\" ? [] : [inline];\n let blanks = 0;\n let last = index;\n for (let j = index + 1; j < rest.length; j++) {\n const next = rest[j];\n if (!next) break;\n if (next.text === \"\") {\n blanks++;\n continue;\n }\n if (next.indent <= source.indent) break;\n body.push(...Array.from({ length: blanks }, () => \"\"), next.text);\n blanks = 0;\n last = j;\n }\n if (body.length === 0) throw fail(source, 0, m.emptySay);\n step.body = body;\n return last;\n }\n\n /** `act <名札>: <字>` と `note <名札>: <字>` の行の、箱と字 */\n function readOnBox(source: SourceLine, word: \"act\" | \"note\", shape: string): { box: string; text: string } {\n const found = new RegExp(`^${word}\\\\s+([^\\\\s:]+)\\\\s*:\\\\s*(.*)$`, \"du\").exec(source.text);\n const idAt = found?.indices?.[1]?.[0];\n if (!found || idAt === undefined || (found[2] ?? \"\") === \"\") throw fail(source, 0, shape);\n return { box: boxAt(source, found[1] ?? \"\", idAt), text: found[2] ?? \"\" };\n }\n\n /** 線の行の両端と、`:` の後ろの線の名前。`at` は名前の後ろの位置 */\n function readLine(source: SourceLine, edge: RegExpExecArray): { from: string; to: string; label?: string; at: number } {\n const text = source.text;\n const from = endAt(source, edge[1] ?? \"\", edge.indices?.[1]?.[0] ?? 0, \"from\");\n const to = endAt(source, edge[2] ?? \"\", edge.indices?.[2]?.[0] ?? 0, \"to\");\n const at = skipSpaces(text, edge[0].length);\n if (text[at] !== \":\") return { from, to, at };\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.emptyLabel);\n return { from, to, label: named.value, at: named.rest };\n }\n\n /** 状態遷移図の最初の `step` より前の `<名札> -> <名札>: <線の名前>` の行。属性は書けない */\n function readPath(source: SourceLine, edge: RegExpExecArray): StatePath {\n const { from, to, label, at } = readLine(source, edge);\n if (at < source.text.length) throw fail(source, at, source.text[at] === \"[\" ? m.pathNoAttrs : m.edgeShape);\n return { from, to, ...(label !== undefined ? { label } : {}) };\n }\n\n /** `<名札> -> <名札>: <線の名前> [<属性>]` の行 */\n function readEdge(source: SourceLine, edge: RegExpExecArray): DiagramEvent {\n const text = source.text;\n const { from, to, label, at } = readLine(source, edge);\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.edgeShape);\n const attrs = at < text.length ? readAttrs(source, at, ATTRS.edge, m) : new Map<string, Attr>();\n const tag = attrs.get(\"tag\");\n const carried = attrs.get(\"carry\");\n if (tag && carried) throw fail(source, Math.max(tag.at, carried.at), m.carryTwice);\n if (carried && !isOneOf(CARRIES, carried.value)) throw fail(source, carried.at, m.badCarry);\n const side = attrs.get(\"side\");\n if (side && !isOneOf(SIDES, side.value)) throw fail(source, side.at, m.badSide);\n let carry: Carry = { kind: \"envelope\" };\n if (tag) carry = { kind: \"tag\", text: tag.value };\n else if (carried) carry = carried.value === \"coin\" ? { kind: \"coin\" } : { kind: \"none\" };\n return {\n type: \"edge\",\n from,\n to,\n ...(label !== undefined ? { label } : {}),\n carry,\n ...(side ? { labelSide: side.value as LabelSide } : {}),\n };\n }\n\n /** `set <欄>: <値> [tag: <札>]` か `set <欄> [tag: <札>]` の行 */\n function readSet(source: SourceLine): DiagramEvent {\n const declared = strip;\n if (!declared) throw fail(source, 0, m.stripUndeclared);\n const text = source.text;\n const start = skipSpaces(text, \"set\".length);\n let field: string;\n let at: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n field = quoted.value;\n at = skipSpaces(text, quoted.end);\n } else {\n at = start;\n while (at < text.length && text[at] !== \":\" && text[at] !== \"[\") at++;\n field = text.slice(start, at).trim();\n }\n if (!declared.fields.includes(field)) throw fail(source, start, m.noSuchField(field));\n let value: string | undefined;\n if (text[at] === \":\") {\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.stripNeedsValue);\n value = named.value;\n at = named.rest;\n }\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.stripNeedsValue);\n const tag = at < text.length ? readAttrs(source, at, ATTRS.set, m).get(\"tag\")?.value : undefined;\n if (value === undefined && tag === undefined) throw fail(source, 0, m.stripNeedsValue);\n return {\n type: \"strip\",\n field,\n ...(value !== undefined ? { value } : {}),\n ...(tag !== undefined ? { tag } : {}),\n };\n }\n}\n\nexport function parseNotation(notation: string, options: ParseOptions = {}): Parsed {\n try {\n return { ok: true, diagram: parseLines(tokenize(notation), messagesFor(options.lang ?? \"ja\")) };\n } catch (error) {\n if (!(error instanceof NotationError)) throw error;\n return { ok: false, errors: [{ line: error.line, column: error.column, message: error.message }] };\n }\n}\n","#!/usr/bin/env node\n/**\n * `dragon export <図の file>` の命令。原本の JSON (`.json`) か記法 (`.dragon`) を読み、mp4、GIF、HTML、PNG を書き出す。\n * 書き出した file の path を 1 行ずつ出す。\n *\n * 使い方の文と誤りの文は、図の中の字と同じ言葉で出す (#3003)。`--lang` を渡せばその言葉、無ければ日本語。\n * dragon記法の語は英語だけで file から言葉が決まらないため、記法の file も JSON の原本と同じに扱う (#3137)。\n */\nimport { readFileSync } from \"node:fs\";\nimport { basename, extname, resolve } from \"node:path\";\nimport { parseArgs } from \"node:util\";\nimport { type ExportFormat, exportDiagram, FORMATS } from \"./export/index\";\nimport { PALETTES, type Theme } from \"./look/values\";\nimport { parseNotation } from \"./parser\";\nimport type { NotationLang } from \"./words\";\n\nconst OPTIONS = {\n out: { type: \"string\" },\n width: { type: \"string\" },\n palette: { type: \"string\" },\n theme: { type: \"string\" },\n lang: { type: \"string\" },\n fps: { type: \"string\" },\n \"gif-fps\": { type: \"string\" },\n format: { type: \"string\" },\n} as const;\n\ntype Values = Partial<Record<keyof typeof OPTIONS, string>>;\n\nconst THEMES: readonly Theme[] = [\"light\", \"dark\"];\n/** 色味の名前。使い方の文と `--palette` の値の確かめに使う */\nconst PALETTE_NAMES = Object.keys(PALETTES).join(\" / \");\n\ninterface CliText {\n usage: string;\n unknownOption: (name: string) => string;\n missingValue: (name: string) => string;\n extraFiles: (extra: string[]) => string;\n noFile: (path: string) => string;\n unreadable: (path: string, detail: string) => string;\n badJson: (path: string, detail: string) => string;\n cannotWrite: (path: string, detail: string) => string;\n badValue: (option: string, value: string, allowed: string) => string;\n /** 設定ごとの許す値の言い方 */\n allowed: { lang: string; theme: string; positive: string; format: string };\n}\n\n/** 命令が出す文。英語は日本語の文をそのまま英語にする */\nconst CLI_TEXT: Record<NotationLang, CliText> = {\n ja: {\n usage: [\n \"使い方: dragon export <図の file (.json か .dragon)> [設定]\",\n \" --out <dir> 書き出す先 (既定は今の dir)\",\n \" --width <px> 枠の幅。見せ方を選び、寄って見せる窓の幅になる\",\n ` --palette <名前> 色味 (${PALETTE_NAMES})`,\n \" --theme <明暗> light か dark\",\n \" --lang <言葉> 図の中の字と命令の文の言葉 (ja か en)。既定は ja\",\n \" --fps <数> mp4 の 1 秒のコマの数 (既定 30)\",\n \" --gif-fps <数> GIF の 1 秒のコマの数 (既定 10)\",\n \" --format <形> 書き出す形を , で区切る (既定 mp4,gif,html,png)\",\n ].join(\"\\n\"),\n unknownOption: (name) => `知らない設定: ${name}`,\n missingValue: (name) => `設定に値が無い: ${name}`,\n extraFiles: (extra) => `図の file は 1 つだけ渡す。余分な引数: ${extra.join(\" \")}`,\n noFile: (path) => `図の file が無い: ${path}`,\n unreadable: (path, detail) => `図の file を読めない: ${path} (${detail})`,\n badJson: (path, detail) => `JSON として読めない: ${path} (${detail})`,\n cannotWrite: (path, detail) => `書き出せない: ${path} (${detail})`,\n badValue: (option, value, allowed) => `使えない値: ${option} ${value} (${allowed})`,\n allowed: { lang: \"ja か en\", theme: \"light か dark\", positive: \"0 より大きい数\", format: `${FORMATS.join(\" / \")} を , で区切る` },\n },\n en: {\n usage: [\n \"Usage: dragon export <diagram file (.json or .dragon)> [options]\",\n \" --out <dir> Where to write (default: the current dir)\",\n \" --width <px> Frame width. Picks the view and sets the window width when following\",\n ` --palette <name> Colors (${PALETTE_NAMES})`,\n \" --theme <mode> light or dark\",\n \" --lang <lang> Language of the diagram text and command messages (ja or en). Defaults to ja\",\n \" --fps <n> Frames per second of the mp4 (default 30)\",\n \" --gif-fps <n> Frames per second of the GIF (default 10)\",\n \" --format <list> Formats to write, separated by , (default mp4,gif,html,png)\",\n ].join(\"\\n\"),\n unknownOption: (name) => `Unknown option: ${name}`,\n missingValue: (name) => `Option needs a value: ${name}`,\n extraFiles: (extra) => `Pass only one diagram file. Extra arguments: ${extra.join(\" \")}`,\n noFile: (path) => `No such diagram file: ${path}`,\n unreadable: (path, detail) => `Cannot read the diagram file: ${path} (${detail})`,\n badJson: (path, detail) => `Cannot read as JSON: ${path} (${detail})`,\n cannotWrite: (path, detail) => `Cannot write: ${path} (${detail})`,\n badValue: (option, value, allowed) => `Invalid value: ${option} ${value} (${allowed})`,\n allowed: { lang: \"ja or en\", theme: \"light or dark\", positive: \"a number above 0\", format: `${FORMATS.join(\" / \")} separated by ,` },\n },\n};\n\nconst isLang = (value: string | undefined): value is NotationLang => value === \"ja\" || value === \"en\";\n\nconst number = (value: string | undefined): number | undefined => (value === undefined ? undefined : Number(value));\n\nconst detail = (error: unknown): string => (error instanceof Error ? error.message : String(error));\n\n/** 設定を読む前に `--lang` の値を引く。設定の誤りの文も、選んだ言葉で出すため */\nfunction langOf(args: string[]): string | undefined {\n for (const [i, arg] of args.entries()) {\n if (arg === \"--lang\") return args[i + 1];\n if (arg.startsWith(\"--lang=\")) return arg.slice(\"--lang=\".length);\n }\n return undefined;\n}\n\n/**\n * 設定の誤りを、Node の文ではなく命令の言葉で返す。誤りが無ければ `undefined`。\n * 値の要る設定の後ろに `-` で始まる語が続く時は、その語を値と取り違えずに値が無いとみなす (Node も同じ形を断る)。\n */\nfunction optionProblem(args: string[], text: CliText): string | undefined {\n const { tokens } = parseArgs({ args, options: OPTIONS, allowPositionals: true, strict: false, tokens: true });\n for (const token of tokens) {\n if (token.kind !== \"option\") continue;\n if (!Object.hasOwn(OPTIONS, token.name)) return text.unknownOption(token.rawName);\n if (token.value === undefined || (!token.inlineValue && token.value.startsWith(\"-\"))) return text.missingValue(token.rawName);\n }\n return undefined;\n}\n\n/**\n * 設定の値を確かめ、使えない値を命令の言葉で返す。使えない値が無ければ `undefined` (#3011)。\n * 確かめないと、`--format xyz` は何も書き出さずに成功として終わり、`--theme blue` などは既定の値で黙って書き出す。\n */\nfunction valueProblem(values: Values, text: CliText): string | undefined {\n const bad = (name: keyof typeof OPTIONS, value: string, allowed: string): string => text.badValue(`--${name}`, value, allowed);\n if (values.lang !== undefined && !isLang(values.lang)) return bad(\"lang\", values.lang, text.allowed.lang);\n if (values.theme !== undefined && !THEMES.some((theme) => theme === values.theme)) return bad(\"theme\", values.theme, text.allowed.theme);\n if (values.palette !== undefined && !Object.hasOwn(PALETTES, values.palette)) return bad(\"palette\", values.palette, PALETTE_NAMES);\n if (values.format !== undefined && !values.format.split(\",\").every((format) => FORMATS.some((known) => known === format))) {\n return bad(\"format\", values.format, text.allowed.format);\n }\n for (const name of [\"width\", \"fps\", \"gif-fps\"] as const) {\n const value = values[name];\n if (value !== undefined && !(Number.isFinite(Number(value)) && Number(value) > 0)) return bad(name, value, text.allowed.positive);\n }\n return undefined;\n}\n\n/** Node が file か dir を扱えなかった誤りなら、扱えなかった path を返す。それ以外の誤りは `undefined` */\nfunction failedPath(error: unknown): string | undefined {\n if (!(error instanceof Error) || !(\"syscall\" in error) || !(\"path\" in error)) return undefined;\n return typeof error.path === \"string\" ? error.path : undefined;\n}\n\n/** 図の file を読む。記法の行の誤りは `lang` の言葉で出す */\nfunction read(file: string, text: CliText, lang: NotationLang): unknown {\n let source: string;\n try {\n source = readFileSync(file, \"utf8\");\n } catch (error) {\n const missing = error instanceof Error && \"code\" in error && error.code === \"ENOENT\";\n throw new Error(missing ? text.noFile(file) : text.unreadable(file, detail(error)));\n }\n if (extname(file) !== \".dragon\") {\n try {\n return JSON.parse(source);\n } catch (error) {\n throw new Error(text.badJson(file, detail(error)));\n }\n }\n const parsed = parseNotation(source, { lang });\n if (!parsed.ok) throw new Error(parsed.errors.map((e) => `${file}:${e.line} ${e.message}`).join(\"\\n\"));\n return parsed.diagram;\n}\n\nasync function main(argv: string[]): Promise<number> {\n const [command, ...rest] = argv;\n const chosen = langOf(argv);\n // file を読む前の文は、渡した言葉か日本語で出す。知らない言葉は日本語の使い方で断る\n const early = CLI_TEXT[isLang(chosen) ? chosen : \"ja\"];\n if (command !== \"export\") {\n console.error(early.usage);\n return 2;\n }\n const problem = optionProblem(rest, early);\n if (problem !== undefined) {\n console.error(`${problem}\\n${early.usage}`);\n return 2;\n }\n const { values, positionals } = parseArgs({ args: rest, options: OPTIONS, allowPositionals: true });\n const badValue = valueProblem(values, early);\n if (badValue !== undefined) {\n console.error(`${badValue}\\n${early.usage}`);\n return 2;\n }\n const [file, ...extra] = positionals;\n if (!file) {\n console.error(early.usage);\n return 2;\n }\n // 2 つ目以降を黙って捨てると、`--out` を書き忘れた時に思った所と違う所へ書き出す (#3007)\n if (extra.length > 0) {\n console.error(`${early.extraFiles(extra)}\\n${early.usage}`);\n return 2;\n }\n const width = number(values.width);\n const fps = number(values.fps);\n const gifFps = number(values[\"gif-fps\"]);\n // 言葉は渡した物だけで決める。渡さなければ、書き出しの既定 (日本語) になる\n const lang = isLang(chosen) ? chosen : undefined;\n const diagram = read(file, early, lang ?? \"ja\");\n let result: Awaited<ReturnType<typeof exportDiagram>>;\n try {\n result = await exportDiagram(diagram, {\n outDir: resolve(values.out ?? \".\"),\n name: basename(file, extname(file)),\n ...(values.format ? { formats: values.format.split(\",\") as ExportFormat[] } : {}),\n ...(width === undefined ? {} : { width }),\n ...(values.palette ? { palette: values.palette } : {}),\n ...(values.theme ? { theme: values.theme as Theme } : {}),\n ...(lang ? { lang } : {}),\n ...(fps === undefined ? {} : { fps }),\n ...(gifFps === undefined ? {} : { gifFps }),\n });\n } catch (error) {\n // 書き出し先に書けない時だけ命令の言葉で書き直す。描けない時と道具が無い時の断りは、書き出しが言葉に合わせて出す (#3009)\n const path = failedPath(error);\n if (path !== undefined) throw new Error(CLI_TEXT[lang ?? \"ja\"].cannotWrite(path, detail(error)));\n throw error instanceof Error ? error : new Error(String(error));\n }\n for (const path of Object.values(result.files)) console.log(path);\n return 0;\n}\n\nmain(process.argv.slice(2)).then(\n (code) => process.exit(code),\n (error: unknown) => {\n console.error(detail(error));\n process.exit(1);\n },\n);\n"]}