@cardenelabs/dragon 0.34.0 → 0.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -720
- package/dist/cli.cjs +4529 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.js +4523 -0
- package/dist/cli.js.map +1 -0
- package/dist/export.cjs +3912 -0
- package/dist/export.cjs.map +1 -0
- package/dist/export.d.cts +36 -0
- package/dist/export.d.ts +36 -0
- package/dist/export.js +3907 -0
- package/dist/export.js.map +1 -0
- package/dist/fonts.cjs +7 -0
- package/dist/fonts.cjs.map +1 -0
- package/dist/fonts.js +4 -0
- package/dist/fonts.js.map +1 -0
- package/dist/index.cjs +4105 -20356
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +227 -5522
- package/dist/index.d.ts +227 -5522
- package/dist/index.js +4091 -20283
- package/dist/index.js.map +1 -1
- package/dist/player.global.js +2 -0
- package/dist/schema-BBWfniwH.d.cts +112 -0
- package/dist/schema-BBWfniwH.d.ts +112 -0
- package/package.json +53 -27
- package/src/cli.ts +237 -0
- package/src/export/capture.ts +277 -0
- package/src/export/fonts.ts +68 -0
- package/src/export/html.ts +32 -0
- package/src/export/index.ts +146 -0
- package/src/field-messages.ts +104 -0
- package/src/figure-text.ts +42 -0
- package/src/index.ts +30 -283
- package/src/layout/architecture.ts +381 -0
- package/src/layout/measure.ts +21 -0
- package/src/layout/scene.ts +353 -0
- package/src/layout/sequence.ts +189 -0
- package/src/load-fonts.ts +8 -0
- package/src/look/fonts.ts +33 -0
- package/src/look/palettes.json +209 -0
- package/src/look/values.ts +155 -0
- package/src/markdown.ts +35 -0
- package/src/messages.ts +122 -0
- package/src/parser.ts +342 -310
- package/src/player-global.ts +4 -0
- package/src/player.ts +271 -0
- package/src/printer.ts +76 -0
- package/src/render/icons.ts +41 -0
- package/src/render/motion.ts +106 -0
- package/src/render/parts.ts +279 -0
- package/src/render/svg.ts +341 -0
- package/src/schema.ts +161 -16
- package/src/schemas/diagram.schema.json +150 -0
- package/src/schemas/validate-diagram.d.ts +12 -0
- package/src/schemas/validate-diagram.js +8 -0
- package/src/timeline.ts +166 -0
- package/src/tokenize.ts +20 -281
- package/src/version.ts +55 -0
- package/src/view.ts +16 -0
- package/src/words.ts +79 -0
- package/examples/quick-start.md +0 -142
- package/src/canvas-bounds.ts +0 -52
- package/src/color.ts +0 -197
- package/src/compile/actor-ids.ts +0 -297
- package/src/compile/actor-option-notice.ts +0 -379
- package/src/compile/actors.ts +0 -103
- package/src/compile/c4.ts +0 -74
- package/src/compile/chain.ts +0 -93
- package/src/compile/chart-fields.ts +0 -193
- package/src/compile/deep-rewrite.ts +0 -30
- package/src/compile/derived-source.ts +0 -18
- package/src/compile/direction.ts +0 -102
- package/src/compile/edge-option-notice.ts +0 -112
- package/src/compile/er-relation.ts +0 -200
- package/src/compile/flow.ts +0 -54
- package/src/compile/flowchart.ts +0 -344
- package/src/compile/funnel.ts +0 -87
- package/src/compile/gantt.ts +0 -337
- package/src/compile/generic.ts +0 -696
- package/src/compile/hierarchy.ts +0 -92
- package/src/compile/journey.ts +0 -93
- package/src/compile/kinds.ts +0 -139
- package/src/compile/lanes.ts +0 -138
- package/src/compile/metro.ts +0 -271
- package/src/compile/mind.ts +0 -393
- package/src/compile/node-title.ts +0 -24
- package/src/compile/notice.ts +0 -141
- package/src/compile/order.ts +0 -57
- package/src/compile/parts-lookup.ts +0 -17
- package/src/compile/parts.ts +0 -2709
- package/src/compile/placement-apply.ts +0 -689
- package/src/compile/placement.ts +0 -15
- package/src/compile/quadrant.ts +0 -265
- package/src/compile/record.ts +0 -75
- package/src/compile/row-marks.ts +0 -128
- package/src/compile/rows.ts +0 -40
- package/src/compile/sequence.ts +0 -305
- package/src/compile/slug.ts +0 -37
- package/src/compile/stages.ts +0 -247
- package/src/compile/subtitle.ts +0 -35
- package/src/compile/swimlane-marks.ts +0 -87
- package/src/compile/swimlane.ts +0 -82
- package/src/compile/timeline.ts +0 -213
- package/src/compile/topology.ts +0 -44
- package/src/compile/tree.ts +0 -69
- package/src/compile/value-chart.ts +0 -337
- package/src/compile/values.ts +0 -432
- package/src/compile/word-state.ts +0 -82
- package/src/compile.ts +0 -3168
- package/src/focus.ts +0 -46
- package/src/input-size.ts +0 -181
- package/src/json-line-map.ts +0 -30
- package/src/json-parser.ts +0 -4306
- package/src/keywords.ts +0 -417
- package/src/near-name.ts +0 -42
- package/src/notation-lint.ts +0 -342
- package/src/relative-pos.ts +0 -251
- package/src/schemas/diagram.json +0 -3088
- package/src/types.ts +0 -1009
- package/src/v05/index.ts +0 -9
- package/src/v05/input-table.generated.ts +0 -138
- package/src/v05/parser-types.ts +0 -32
- package/src/v05/parser.ts +0 -6668
- package/src/v05/readout-table.generated.ts +0 -1088
- package/src/v05/removed-syntax.ts +0 -115
- package/src/value-syntax.ts +0 -313
- package/src/write-position.ts +0 -270
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.23_tsx@4.22.4_typescript@5.9.3_yaml@2.9.0/node_modules/tsup/assets/cjs_shims.js","../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"],"names":["text","edge","pad","label","action","badge","box","at","band","right","lane","strip","y","lifeline","ranges","ja","S","x","createRequire","join","dirname","readFileSync","t","stage","plan","width","height","png","i","require_","readFile","mkdirSync","path","writeFileSync","rmSync"],"mappings":"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GAAA,EAAI,IAAA,EAAK,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,IAAA,EAAK,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,QAAA,EAAI,GAAA,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","file":"export.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","{\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 follow: { aspect: 0.75, minH: 320, ease: 0.6 },\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 player: { gap: 10, radius: 12, button: 36, hidden: 1, focus: 2 },\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` は記法の file の言葉 (`--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/** 色の役の一覧。記法の `[色 …]` で書ける値と、誤りの文に並べる値 */\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, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\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/** 箱。動く段は縁に色を付け、外側に淡い光を足す。下の小さな字は起きたことに合わせて書き換わる。 */\nexport function card(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { m, sh } = ctx;\n const { radius, icon, iconRadius, iconScale, iconY, nameY, subY } = LOOK.box;\n const seq: SubChange[] = [[0, box.sub ?? \"\", \"dg-ss\"], ...changes];\n const subs = 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(box.cy + subY)}\" text-anchor=\"middle\">${esc(text)}</text></g>`;\n })\n .join(\"\");\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n const rect = (cls: string, extra = \"\"): string => `<rect class=\"${cls}\" x=\"${r1(box.x)}\" y=\"${r1(box.y)}\" width=\"${r1(box.w)}\" height=\"${box.h}\" rx=\"${radius}\"${extra}/>`;\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)}\">${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-halo\")}</g>` : \"\"}${rect(\"dg-st\", ` ${sh}`)}${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-on\")}</g>` : \"\"}` +\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\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, 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-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 /** 隅の全体図の札の言葉。渡し忘れを型の検査で止めるため、省けない欄にする */\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 const view = follow ? followView(layout, timeline, diagram, m, id, content, follow) : { 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 focusOf(layout: Layout, diagram: Diagram, step: number): Rect | undefined {\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 if (rects.length === 0) return undefined;\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 followView(layout: Layout, timeline: Timeline, diagram: Diagram, m: Motion, id: string, content: string, follow: FollowFrame): { body: string; w: number; h: number } {\n const F = LOOK.follow;\n const M = LOOK.mini;\n const vw = Math.min(layout.width, Math.max(1, follow.width));\n const vh = Math.min(layout.height, Math.max(F.minH, vw * F.aspect));\n const clampX = (x: number): number => Math.min(layout.width - vw / 2, Math.max(vw / 2, x));\n const clampY = (y: number): number => Math.min(layout.height - vh / 2, Math.max(vh / 2, y));\n let prev: [number, number] = [layout.width / 2, layout.height / 2];\n const centers = 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 return [clampX(prev[0]), clampY(prev[1])] as [number, number];\n });\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 const mw = Math.min(M.w, vw * 0.4, ((vh * 0.4) / layout.height) * layout.width);\n const k = mw / layout.width;\n const mh = layout.height * k;\n // 地の幅は図の縦横の比で決まるので、縦に長い図では札より狭くなる。その時は地を札の幅まで広げ、図は広げた地の真ん中に置く\n const title = FIGURE_TEXT[follow.lang].overview;\n const bw = Math.max(mw, Math.ceil(textWidth(title, TYPE.miniTitle)));\n const bx = vw - bw - M.inset - M.pad;\n const mx = bx + (bw - mw) / 2;\n const my = M.inset + M.pad + M.title;\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 const mini =\n `<rect class=\"dg-mm-bg\" x=\"${bx - M.pad}\" y=\"${my - M.pad - M.title}\" width=\"${bw + M.pad * 2}\" height=\"${mh + M.pad * 2 + M.title}\" 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\" width=\"${vw * k}\" height=\"${vh * k}\" rx=\"2\" style=\"${vp}\"/></g>`;\n const body =\n `<defs><clipPath id=\"dg-vp-${id}\"><rect width=\"${vw}\" height=\"${vh}\" rx=\"${LOOK.region.radius}\"/></clipPath><clipPath id=\"dg-mm-${id}\"><rect x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\" rx=\"4\"/></clipPath></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></g>` +\n `<rect class=\"dg-vp-frame\" x=\"0.5\" y=\"0.5\" width=\"${vw - 1}\" height=\"${vh - 1}\" rx=\"${LOOK.region.radius}\"/>${mini}`;\n return { body, w: vw, h: vh };\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 * 書き手が原本の `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): { mode: ViewMode; textPx: number } {\n const textPx = (Math.max(0, frameWidth) / rendered.layout.width) * 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 */\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 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 `.dg-bar{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-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 ].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: RenderOptions = {}): 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 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 text.append(title, body);\n say.append(no, text);\n const bar = doc.createElement(\"div\");\n bar.className = \"dg-bar\";\n bar.append(buttons, say);\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 let mode = chooseView(rendered, frameWidth()).mode;\n let width = frameWidth();\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, 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 };\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 chosen = chooseView(rendered, w).mode;\n if (chosen === mode && (mode === \"fixed\" || w === width)) return;\n const t = now();\n mode = chosen;\n width = w;\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(/</g, \"<\").replace(/>/g, \">\").replace(/"/g, '\"').replace(/&/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"]}
|