@cardenelabs/dragon 0.36.0 → 0.36.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/messages.ts +3 -3
- package/src/parser.ts +1 -1
- package/src/words.ts +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/markdown.ts","../src/field-messages.ts","../src/schemas/validate-diagram.js","../src/schema.ts","../src/words.ts","../src/messages.ts","../src/tokenize.ts","../src/version.ts","../src/parser.ts","../src/printer.ts","../src/look/fonts.ts","../src/look/palettes.json","../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/timeline.ts","../src/render/icons.ts","../src/render/parts.ts","../src/render/motion.ts","../src/render/svg.ts","../src/view.ts","../src/player.ts"],"names":["text","key","value","ja","field","en","list","rest","attrs","name","shown","strip","edge","label","event","pad","px","action","badge","box","band","right","lane","y","lifeline","S","vh","mw","k","mh","bw","r","font","step","markup"],"mappings":"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AAA,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,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,G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","file":"index.cjs","sourcesContent":["/**\n * Markdown の中の dragon の囲み (```dragon) を、囲みごとに取り出す。\n *\n * 囲みの開き方と閉じ方は CommonMark に従う。` か ~ を 3 つ以上並べて開き、同じ字を開いた数以上\n * 並べて閉じる。閉じていない囲みは文書の終わりまでを中身にする。dragon 以外の言語の囲みの中は読まない。\n */\nexport interface Fence {\n /** 囲みの中身 (記法) */\n source: string;\n /** 中身の 1 行目が文書の何行目か。記法の誤りの行を文書の行に直す時に足す */\n line: number;\n}\n\nexport function extractDiagrams(markdown: string): Fence[] {\n const lines = markdown.split(/\\r?\\n/);\n if (lines[lines.length - 1] === \"\") lines.pop();\n const fences: Fence[] = [];\n let open: { mark: string; dragon: boolean; start: number; body: string[] } | undefined;\n lines.forEach((text, index) => {\n if (!open) {\n const found = /^ {0,3}(`{3,}|~{3,})\\s*([^\\s`]*)/.exec(text);\n if (found) open = { mark: found[1] ?? \"\", dragon: found[2] === \"dragon\", start: index + 2, body: [] };\n return;\n }\n const close = /^ {0,3}(`{3,}|~{3,})\\s*$/.exec(text)?.[1];\n if (close !== undefined && close[0] === open.mark[0] && close.length >= open.mark.length) {\n if (open.dragon) fences.push({ source: open.body.join(\"\\n\"), line: open.start });\n open = undefined;\n return;\n }\n open.body.push(text);\n });\n if (open?.dragon) fences.push({ source: open.body.join(\"\\n\"), line: open.start });\n return fences;\n}\n","/**\n * 原本の JSON の誤りの文 (#2999)。\n *\n * JSON は語を持たず file から言葉を決められないので、呼ぶ側 (頁なら頁の言葉) が言葉を渡す。\n * 文は schema が使う決まり (JSON Schema の keyword) ごとに持ち、ajv の英語の文はそのまま出さない。\n * schema に決まりを足して文が無い時は、`every-schema-keyword-has-messages` の検査が落ちる。\n */\nimport type { NotationLang } from \"./words\";\n\n/** `^[^…]+$` の形の決まりが書けないとする字。`space` は空白 (`\\s`) */\nexport interface Forbidden {\n space: boolean;\n chars: string[];\n}\n\n/** 書けない組み合わせ (`not`) の欄と、その欄を書ける時の `kind` の値 */\nexport interface Allowed {\n field: string;\n kind: string;\n}\n\nexport interface FieldMessages {\n additionalProperties: (key: string) => string;\n required: (key: string) => string;\n enum: (values: readonly string[]) => string;\n type: (type: string) => string;\n minLength: (limit: number) => string;\n /** 書けない字を読めない形の決まりでは `undefined` */\n pattern: (forbidden: Forbidden | undefined) => string;\n minItems: (limit: number) => string;\n minimum: (limit: number) => string;\n const: (value: string) => string;\n /** どの欄の組み合わせか判らない場所では `undefined` */\n not: (allowed: Allowed | undefined) => string;\n /** 選べる決まりがどれも欄が足りない時の、足りない欄。それ以外の時は空 */\n anyOf: (fields: readonly string[]) => string;\n oneOf: string;\n discriminator: (tag: string, values: readonly string[]) => string;\n /** 道具より新しい版の図 */\n newer: (version: number, tool: number) => string;\n}\n\nconst TYPES_JA: Record<string, string> = {\n string: \"文字列にする\",\n integer: \"整数にする\",\n number: \"数にする\",\n object: \"オブジェクトにする\",\n array: \"配列にする\",\n boolean: \"true か false にする\",\n null: \"null にする\",\n};\n\nconst TYPES_EN: Record<string, string> = {\n string: \"Use a string\",\n integer: \"Use an integer\",\n number: \"Use a number\",\n object: \"Use an object\",\n array: \"Use an array\",\n boolean: \"Use true or false\",\n null: \"Use null\",\n};\n\nconst plural = (count: number, word: string): string => `${count} ${word}${count === 1 ? \"\" : \"s\"}`;\n\nconst ja: FieldMessages = {\n additionalProperties: (key) => `${key} という欄は書けない`,\n required: (key) => `${key} の欄が要る`,\n enum: (values) => `${values.join(\" / \")} のどれかにする`,\n type: (type) => TYPES_JA[type] ?? `${type} にする`,\n minLength: (limit) => `${limit} 字以上書く`,\n pattern: (forbidden) =>\n forbidden ? `${forbidden.space ? \"空白と \" : \"\"}${forbidden.chars.join(\" \")} は使えない` : \"使えない字が入っている\",\n minItems: (limit) => `${limit} つ以上書く`,\n minimum: (limit) => `${limit} 以上にする`,\n const: (value) => `${value} にする`,\n not: (allowed) => (allowed ? `${allowed.field} の欄は kind が ${allowed.kind} の時だけ書ける` : \"この欄の組み合わせは書けない\"),\n anyOf: (fields) =>\n fields.length > 0 ? `${fields.join(\" か \")} の${fields.length === 2 ? \"どちらか\" : \"どれか\"}の欄が要る` : \"書ける形のどれにも合わない\",\n oneOf: \"書ける形のどれか 1 つだけに合わせる\",\n discriminator: (tag, values) => `${tag} は ${values.join(\" / \")} のどれかにする`,\n newer: (version, tool) => `版 ${version} の図は、この道具 (版 ${tool}) より新しいので読めない。道具を新しくする`,\n};\n\nconst en: FieldMessages = {\n additionalProperties: (key) => `The ${key} field is not allowed`,\n required: (key) => `The ${key} field is required`,\n enum: (values) => `Use one of ${values.join(\" / \")}`,\n type: (type) => TYPES_EN[type] ?? `Use ${type}`,\n minLength: (limit) => `Write at least ${plural(limit, \"character\")}`,\n pattern: (forbidden) =>\n forbidden\n ? `Cannot contain ${forbidden.space ? \"spaces or \" : \"\"}${forbidden.chars.join(\" \")}`\n : \"Contains characters that are not allowed\",\n minItems: (limit) => `Write at least ${plural(limit, \"item\")}`,\n minimum: (limit) => `Use ${limit} or greater`,\n const: (value) => `Use ${value}`,\n not: (allowed) => (allowed ? `The ${allowed.field} field is allowed only when kind is ${allowed.kind}` : \"This combination of fields is not allowed\"),\n anyOf: (fields) => (fields.length > 0 ? `Write one of the ${fields.join(\" or \")} fields` : \"Does not match any of the allowed shapes\"),\n oneOf: \"Match exactly one of the allowed shapes\",\n discriminator: (tag, values) => `${tag} is one of ${values.join(\" / \")}`,\n newer: (version, tool) => `Version ${version} diagrams are newer than this tool (version ${tool}) and cannot be read. Update the tool`,\n};\n\nexport const FIELD_MESSAGES: Record<NotationLang, FieldMessages> = { ja, en };\n","/* eslint-disable */\n// packages/dragon/scripts/build-validator.mjs が diagram.schema.json から書き出した。手で直さない\nfunction ucs2length(str) {\n let length = 0;\n for (const _ of str) length++;\n return length;\n}\nexport const validate = validate10;export default validate10;const schema11 = {\"title\":\"dragon の図の原本\",\"description\":\"区画、箱、線、運ぶ物、段、中身の帯の 6 部品を共通の骨組みに置き、図の種類だけの物は種類の欄に置く。座標は持たない。\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"version\",\"kind\",\"title\",\"boxes\",\"steps\"],\"properties\":{\"version\":{\"description\":\"形式の版\",\"type\":\"integer\",\"minimum\":1},\"kind\":{\"description\":\"図の種類\",\"enum\":[\"sequence\",\"architecture\"]},\"title\":{\"$ref\":\"#/definitions/text\"},\"view\":{\"description\":\"見せ方。書かなければ字の大きさで選ぶ。fixed は全体を止めて中だけ動かし、follow は寄って動かし全体図で今どこかを示す\",\"enum\":[\"fixed\",\"follow\"]},\"regions\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/region\"}},\"boxes\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/box\"}},\"strip\":{\"$ref\":\"#/definitions/strip\"},\"steps\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/step\"}},\"sequence\":{\"$ref\":\"#/definitions/sequence\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"sequence\"}}},\"then\":{\"required\":[\"sequence\"]},\"else\":{\"not\":{\"required\":[\"sequence\"]}},\"definitions\":{\"text\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"},\"color\":{\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]},\"region\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}},\"box\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}},\"strip\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}},\"step\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}},\"event\":{\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]},\"carry\":{\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}},\"sequence\":{\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}}}};const schema12 = {\"type\":\"string\",\"minLength\":1};const func2 = Object.prototype.hasOwnProperty;const func3 = ucs2length;const schema13 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}};const schema14 = {\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"};const schema17 = {\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]};const pattern0 = new RegExp(\"^[^\\\\s\\\\[\\\\]「」=:]+$\", \"u\");function validate11(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!(((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"note\")) || (key0 === \"color\")) || (key0 === \"icon\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.note !== undefined){let data2 = data.note;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}else {const err12 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}validate11.errors = vErrors;return errors === 0;}const schema19 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}};function validate13(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"sub\")) || (key0 === \"color\")) || (key0 === \"icon\")) || (key0 === \"region\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.sub !== undefined){let data2 = data.sub;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.region !== undefined){let data5 = data.region;if(typeof data5 === \"string\"){if(!pattern0.test(data5)){const err12 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}validate13.errors = vErrors;return errors === 0;}const schema26 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}};function validate15(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.fields === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"fields\"},message:\"must have required property '\"+\"fields\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"title\") || (key0 === \"fields\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err3 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.fields !== undefined){let data1 = data.fields;if(Array.isArray(data1)){if(data1.length < 1){const err5 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const len0 = data1.length;for(let i0=0; i0<len0; i0++){let data2 = data1[i0];if(typeof data2 === \"string\"){if(func3(data2) < 1){const err6 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}else {const err8 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}else {const err9 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}validate15.errors = vErrors;return errors === 0;}const schema29 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}};const schema33 = {\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]};const schema37 = {\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}};function validate19(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"tag\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.text === undefined){const err2 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs5 = errors;const _errs6 = errors;const _errs7 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.text === undefined) && (missing1 = \"text\")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var valid2 = _errs7 === errors;if(valid2){const err4 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}var _valid0 = _errs5 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err5 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.kind === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}for(const key0 in data){if(!((key0 === \"kind\") || (key0 === \"text\"))){const err7 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.kind !== undefined){let data1 = data.kind;if(!((((data1 === \"envelope\") || (data1 === \"tag\")) || (data1 === \"coin\")) || (data1 === \"none\"))){const err8 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema37.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.text !== undefined){let data2 = data.text;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err9 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate19.errors = vErrors;return errors === 0;}function validate18(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}const tag0 = data.type;if(typeof tag0 == \"string\"){if(tag0 === \"edge\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err1 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.from === undefined){const err2 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"from\"},message:\"must have required property '\"+\"from\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.to === undefined){const err3 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"to\"},message:\"must have required property '\"+\"to\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.carry === undefined){const err4 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"carry\"},message:\"must have required property '\"+\"carry\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}for(const key0 in data){if(!((((((key0 === \"type\") || (key0 === \"from\")) || (key0 === \"to\")) || (key0 === \"label\")) || (key0 === \"carry\")) || (key0 === \"labelSide\"))){const err5 = {instancePath,schemaPath:\"#/oneOf/0/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.type !== undefined){if(\"edge\" !== data.type){const err6 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/0/properties/type/const\",keyword:\"const\",params:{allowedValue: \"edge\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.from !== undefined){let data1 = data.from;if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err7 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.to !== undefined){let data2 = data.to;if(typeof data2 === \"string\"){if(!pattern0.test(data2)){const err9 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.label !== undefined){let data3 = data.label;if(typeof data3 === \"string\"){if(func3(data3) < 1){const err11 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.carry !== undefined){if(!(validate19(data.carry, {instancePath:instancePath+\"/carry\",parentData:data,parentDataProperty:\"carry\",rootData}))){vErrors = vErrors === null ? validate19.errors : vErrors.concat(validate19.errors);errors = vErrors.length;}}if(data.labelSide !== undefined){let data5 = data.labelSide;if(!((((data5 === \"above\") || (data5 === \"below\")) || (data5 === \"left\")) || (data5 === \"right\"))){const err13 = {instancePath:instancePath+\"/labelSide\",schemaPath:\"#/oneOf/0/properties/labelSide/enum\",keyword:\"enum\",params:{allowedValues: schema33.oneOf[0].properties.labelSide.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/oneOf/0/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else if(tag0 === \"action\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err15 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.box === undefined){const err16 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data.label === undefined){const err17 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"label\"},message:\"must have required property '\"+\"label\"+\"'\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}for(const key1 in data){if(!(((key1 === \"type\") || (key1 === \"box\")) || (key1 === \"label\"))){const err18 = {instancePath,schemaPath:\"#/oneOf/1/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.type !== undefined){if(\"action\" !== data.type){const err19 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/1/properties/type/const\",keyword:\"const\",params:{allowedValue: \"action\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data.box !== undefined){let data7 = data.box;if(typeof data7 === \"string\"){if(!pattern0.test(data7)){const err20 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}else {const err21 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.label !== undefined){let data8 = data.label;if(typeof data8 === \"string\"){if(func3(data8) < 1){const err22 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath,schemaPath:\"#/oneOf/1/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}else if(tag0 === \"swap\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err25 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}if(data.box === undefined){const err26 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}if(data.text === undefined){const err27 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}for(const key2 in data){if(!(((key2 === \"type\") || (key2 === \"box\")) || (key2 === \"text\"))){const err28 = {instancePath,schemaPath:\"#/oneOf/2/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.type !== undefined){if(\"swap\" !== data.type){const err29 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/2/properties/type/const\",keyword:\"const\",params:{allowedValue: \"swap\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.box !== undefined){let data10 = data.box;if(typeof data10 === \"string\"){if(!pattern0.test(data10)){const err30 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data.text !== undefined){let data11 = data.text;if(typeof data11 === \"string\"){if(func3(data11) < 1){const err32 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}}else {const err34 = {instancePath,schemaPath:\"#/oneOf/2/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}else if(tag0 === \"strip\"){const _errs39 = errors;let valid15 = false;const _errs40 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.value === undefined){const err35 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/0/required\",keyword:\"required\",params:{missingProperty: \"value\"},message:\"must have required property '\"+\"value\"+\"'\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}var _valid0 = _errs40 === errors;valid15 = valid15 || _valid0;if(!valid15){const _errs41 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.tag === undefined){const err36 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/1/required\",keyword:\"required\",params:{missingProperty: \"tag\"},message:\"must have required property '\"+\"tag\"+\"'\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}var _valid0 = _errs41 === errors;valid15 = valid15 || _valid0;}if(!valid15){const err37 = {instancePath,schemaPath:\"#/oneOf/3/anyOf\",keyword:\"anyOf\",params:{},message:\"must match a schema in anyOf\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err38 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}if(data.field === undefined){const err39 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"field\"},message:\"must have required property '\"+\"field\"+\"'\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}for(const key3 in data){if(!((((key3 === \"type\") || (key3 === \"field\")) || (key3 === \"value\")) || (key3 === \"tag\"))){const err40 = {instancePath,schemaPath:\"#/oneOf/3/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key3},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}}if(data.type !== undefined){if(\"strip\" !== data.type){const err41 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/3/properties/type/const\",keyword:\"const\",params:{allowedValue: \"strip\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}if(data.field !== undefined){let data13 = data.field;if(typeof data13 === \"string\"){if(func3(data13) < 1){const err42 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}else {const err43 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}if(data.value !== undefined){let data14 = data.value;if(typeof data14 === \"string\"){if(func3(data14) < 1){const err44 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data.tag !== undefined){let data15 = data.tag;if(typeof data15 === \"string\"){if(func3(data15) < 1){const err46 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}else {const err47 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}}}else {const err48 = {instancePath,schemaPath:\"#/oneOf/3/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"mapping\", tag: \"type\", tagValue: tag0},message:\"value of tag \\\"type\\\" must be in oneOf\"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}else {const err50 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"tag\", tag: \"type\", tagValue: tag0},message:\"tag \\\"type\\\" must be string\"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}else {const err51 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}validate18.errors = vErrors;return errors === 0;}function validate17(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.body === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"body\"},message:\"must have required property '\"+\"body\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.events === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"events\"},message:\"must have required property '\"+\"events\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!((((key0 === \"title\") || (key0 === \"body\")) || (key0 === \"code\")) || (key0 === \"events\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}else {const err5 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.body !== undefined){let data1 = data.body;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err6 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.code !== undefined){let data2 = data.code;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err8 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.events !== undefined){let data3 = data.events;if(Array.isArray(data3)){const len0 = data3.length;for(let i0=0; i0<len0; i0++){if(!(validate18(data3[i0], {instancePath:instancePath+\"/events/\" + i0,parentData:data3,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate18.errors : vErrors.concat(validate18.errors);errors = vErrors.length;}}}else {const err10 = {instancePath:instancePath+\"/events\",schemaPath:\"#/properties/events/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate17.errors = vErrors;return errors === 0;}const schema46 = {\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}};function validate23(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.lifelines === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"lifelines\"},message:\"must have required property '\"+\"lifelines\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"lifelines\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.lifelines !== undefined){let data0 = data.lifelines;if(Array.isArray(data0)){if(data0.length < 1){const err2 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err3 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}else {const err5 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}validate23.errors = vErrors;return errors === 0;}function validate10(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"sequence\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.sequence === undefined){const err2 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"sequence\"},message:\"must have required property '\"+\"sequence\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs5 = errors;const _errs6 = errors;const _errs7 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.sequence === undefined) && (missing1 = \"sequence\")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var valid2 = _errs7 === errors;if(valid2){const err4 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}var _valid0 = _errs5 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err5 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.version === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"version\"},message:\"must have required property '\"+\"version\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data.kind === undefined){const err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data.title === undefined){const err8 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data.boxes === undefined){const err9 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"boxes\"},message:\"must have required property '\"+\"boxes\"+\"'\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data.steps === undefined){const err10 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"steps\"},message:\"must have required property '\"+\"steps\"+\"'\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key0 in data){if(!(func2.call(schema11.properties, key0))){const err11 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.version !== undefined){let data1 = data.version;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err12 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 < 1 || isNaN(data1)){const err13 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}if(data.kind !== undefined){let data2 = data.kind;if(!((data2 === \"sequence\") || (data2 === \"architecture\"))){const err14 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data.title !== undefined){let data3 = data.title;if(typeof data3 === \"string\"){if(func3(data3) < 1){const err15 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data.view !== undefined){let data4 = data.view;if(!((data4 === \"fixed\") || (data4 === \"follow\"))){const err17 = {instancePath:instancePath+\"/view\",schemaPath:\"#/properties/view/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.view.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data.regions !== undefined){let data5 = data.regions;if(Array.isArray(data5)){const len0 = data5.length;for(let i0=0; i0<len0; i0++){if(!(validate11(data5[i0], {instancePath:instancePath+\"/regions/\" + i0,parentData:data5,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate11.errors : vErrors.concat(validate11.errors);errors = vErrors.length;}}}else {const err18 = {instancePath:instancePath+\"/regions\",schemaPath:\"#/properties/regions/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.boxes !== undefined){let data7 = data.boxes;if(Array.isArray(data7)){if(data7.length < 1){const err19 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}const len1 = data7.length;for(let i1=0; i1<len1; i1++){if(!(validate13(data7[i1], {instancePath:instancePath+\"/boxes/\" + i1,parentData:data7,parentDataProperty:i1,rootData}))){vErrors = vErrors === null ? validate13.errors : vErrors.concat(validate13.errors);errors = vErrors.length;}}}else {const err20 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}if(data.strip !== undefined){if(!(validate15(data.strip, {instancePath:instancePath+\"/strip\",parentData:data,parentDataProperty:\"strip\",rootData}))){vErrors = vErrors === null ? validate15.errors : vErrors.concat(validate15.errors);errors = vErrors.length;}}if(data.steps !== undefined){let data10 = data.steps;if(Array.isArray(data10)){if(data10.length < 1){const err21 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}const len2 = data10.length;for(let i2=0; i2<len2; i2++){if(!(validate17(data10[i2], {instancePath:instancePath+\"/steps/\" + i2,parentData:data10,parentDataProperty:i2,rootData}))){vErrors = vErrors === null ? validate17.errors : vErrors.concat(validate17.errors);errors = vErrors.length;}}}else {const err22 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}if(data.sequence !== undefined){if(!(validate23(data.sequence, {instancePath:instancePath+\"/sequence\",parentData:data,parentDataProperty:\"sequence\",rootData}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}}}else {const err23 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}validate10.errors = vErrors;return errors === 0;}\n","/**\n * 図の原本の形と、原本を JSON Schema で検査する命令。\n *\n * 形の正は `schemas/diagram.schema.json` の 1 本で、下の型はその写し。\n * 誤りは JSON Pointer で場所を示す。欄が足りない時と知らない欄がある時は、その欄の場所まで示す。\n * 誤りの文は呼ぶ側が渡した言葉 (渡さなければ日本語) で出す。文の表は `field-messages.ts` が持つ (#2999)。\n *\n * 検査の関数は schema から前もって書き出した物 (`schemas/validate-diagram.js`) を使う。\n * ajv に schema をその場で組み立てさせると `new Function` を使い、`eval` を許さない頁の CSP で止まる。\n * 書き出しは `scripts/build-validator.mjs` が ajv の設定 `{ allErrors: true, discriminator: true, strictTypes: false }` で行う。\n */\nimport type { ErrorObject } from \"ajv\";\nimport { type Allowed, FIELD_MESSAGES, type FieldMessages, type Forbidden } from \"./field-messages\";\nimport validate from \"./schemas/validate-diagram.js\";\nimport type { NotationLang } from \"./words\";\n\nexport type Color = \"blue\" | \"amber\" | \"green\" | \"violet\" | \"rose\" | \"slate\" | \"coin\";\n/** 色の役の一覧。記法の `color:` に書ける値と、誤りの文に並べる値 */\nexport const COLORS: readonly Color[] = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\", \"slate\", \"coin\"];\n\nexport interface Region {\n id: string;\n name: string;\n note?: string;\n color?: Color;\n icon?: string;\n}\n\nexport interface Box {\n id: string;\n name: string;\n sub?: string;\n color?: Color;\n icon?: string;\n region?: string;\n}\n\nexport type Carry = { kind: \"envelope\" } | { kind: \"tag\"; text: string } | { kind: \"coin\" } | { kind: \"none\" };\n\nexport type LabelSide = \"above\" | \"below\" | \"left\" | \"right\";\n\n/** 見せ方。`fixed` は全体を止めて中だけ動かし、`follow` は寄って動かし全体図で今どこかを示す。 */\nexport type ViewMode = \"fixed\" | \"follow\";\n\nexport type DiagramEvent =\n | { type: \"edge\"; from: string; to: string; label?: string; carry: Carry; labelSide?: LabelSide }\n | { type: \"action\"; box: string; label: string }\n | { type: \"swap\"; box: string; text: string }\n | { type: \"strip\"; field: string; value?: string; tag?: string };\n\nexport interface Step {\n title: string;\n body: string;\n code?: string;\n events: DiagramEvent[];\n}\n\nexport interface Diagram {\n version: number;\n kind: \"sequence\" | \"architecture\";\n title: string;\n view?: ViewMode;\n regions?: Region[];\n boxes: Box[];\n strip?: { title: string; fields: string[] };\n steps: Step[];\n sequence?: { lifelines: string[] };\n}\n\nexport interface FieldError {\n /** 誤った欄の場所 (JSON Pointer) */\n pointer: string;\n message: string;\n}\n\nexport type Checked = { ok: true } | { ok: false; errors: FieldError[] };\n\nexport interface CheckOptions {\n /** 誤りの文の言葉。渡さなければ日本語 */\n lang?: NotationLang;\n}\n\n/** 段の中で起きることの種類。schema の event の `discriminator` が見る `type` の値 */\nconst EVENT_TYPES = [\"edge\", \"action\", \"swap\", \"strip\"] as const satisfies readonly DiagramEvent[\"type\"][];\n\n/**\n * schema の書けない組み合わせ (`else: { not: { required: [欄] } }`) の 2 か所。誤りの場所の最後の欄で引き、根は \"\" で引く。\n * 2 か所とも ajv の誤りでは決まりの場所 (`#/else/not`) が同じになるので、誤りの場所で分ける\n */\nconst NOT_ALLOWED: Record<string, Allowed> = {\n \"\": { field: \"sequence\", kind: \"sequence\" },\n carry: { field: \"text\", kind: \"tag\" },\n};\n\nconst escape = (key: string): string => key.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n\n/** `^[^…]+$` の形の決まりから書けない字を読む。違う形の決まりでは `undefined` */\nfunction forbiddenOf(pattern: string): Forbidden | undefined {\n const inside = /^\\^\\[\\^(.+)\\]\\+\\$$/u.exec(pattern)?.[1];\n if (inside === undefined) return undefined;\n const chars: string[] = inside.match(/\\\\.|[^\\\\]/gu) ?? [];\n return { space: chars.includes(\"\\\\s\"), chars: chars.filter((char) => char !== \"\\\\s\").map((char) => char.replace(/^\\\\/u, \"\")) };\n}\n\n/** `anyOf` の中の決まりが出した誤り。`anyOf` の誤り 1 つにまとめて出す */\nconst branchesOf = (anyOf: ErrorObject, errors: readonly ErrorObject[]): ErrorObject[] =>\n errors.filter(\n (error) =>\n error !== anyOf &&\n error.schemaPath.startsWith(`${anyOf.schemaPath}/`) &&\n (error.instancePath === anyOf.instancePath || error.instancePath.startsWith(`${anyOf.instancePath}/`)),\n );\n\nfunction toFieldError(error: ErrorObject, errors: readonly ErrorObject[], m: FieldMessages): FieldError {\n const params = error.params as Record<string, unknown>;\n const at = error.instancePath;\n switch (error.keyword) {\n case \"additionalProperties\": {\n const key = String(params.additionalProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.additionalProperties(key) };\n }\n case \"required\": {\n const key = String(params.missingProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.required(key) };\n }\n case \"not\": {\n const allowed = NOT_ALLOWED[at.slice(at.lastIndexOf(\"/\") + 1)];\n return { pointer: allowed ? `${at}/${allowed.field}` : at, message: m.not(allowed) };\n }\n case \"anyOf\": {\n const branches = branchesOf(error, errors);\n const missing = branches.every((branch) => branch.keyword === \"required\") ? branches.map((branch) => String(branch.params.missingProperty)) : [];\n return { pointer: at, message: m.anyOf(missing) };\n }\n case \"discriminator\": {\n const tag = String(params.tag);\n return { pointer: `${at}/${escape(tag)}`, message: m.discriminator(tag, EVENT_TYPES) };\n }\n case \"enum\":\n return { pointer: at, message: m.enum((params.allowedValues as unknown[]).map(String)) };\n case \"type\":\n return { pointer: at, message: m.type(String(params.type)) };\n case \"minLength\":\n return { pointer: at, message: m.minLength(Number(params.limit)) };\n case \"pattern\":\n return { pointer: at, message: m.pattern(forbiddenOf(String(params.pattern))) };\n case \"minItems\":\n return { pointer: at, message: m.minItems(Number(params.limit)) };\n case \"minimum\":\n return { pointer: at, message: m.minimum(Number(params.limit)) };\n case \"const\":\n return { pointer: at, message: m.const(String(params.allowedValue)) };\n case \"oneOf\":\n return { pointer: at, message: m.oneOf };\n default:\n return { pointer: at, message: error.message ?? error.keyword };\n }\n}\n\n/** 原本の JSON を検査する。版が道具より新しいかは見ない (`readDiagram` が見る)。 */\nexport function validateDiagram(input: unknown, options: CheckOptions = {}): Checked {\n if (validate(input)) return { ok: true };\n const all = validate.errors ?? [];\n const inBranch = new Set(all.filter((error) => error.keyword === \"anyOf\").flatMap((anyOf) => branchesOf(anyOf, all)));\n const m = FIELD_MESSAGES[options.lang ?? \"ja\"];\n // 条件付きの決まり (if / then) は中で落ちた決まりの誤りを別に出すので、包む側の if の誤りは出さない\n const errors = all.filter((error) => error.keyword !== \"if\" && !inBranch.has(error)).map((error) => toFieldError(error, all, m));\n return { ok: false, errors };\n}\n","/**\n * dragon記法の語 (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、属性は `[<鍵>: <値>]` で書く。\n * 語は英語だけで、原本の JSON が使う名前に揃え、記法と JSON で覚える語を 1 組にする。\n *\n * 言葉の型 (`NotationLang`) は、誤りの文と図の中の字の言葉を選ぶために持つ。\n * 語が英語だけなので、記法の file から言葉は決めず、呼ぶ側が渡す。\n *\n * 型が欠けを止める。原本の JSON の値 (図の種類、運ぶ物、見せ方、名前の側) に語が無い時は、型の検査が落ちる。\n */\nimport type { Carry, Diagram, LabelSide, ViewMode } from \"./schema\";\n\nexport type NotationLang = \"ja\" | \"en\";\n\nconst keys = <K extends string>(table: Record<K, true>): K[] => Object.keys(table) as K[];\n\n/** 図の種類。最初の行の頭の語 */\nexport const KINDS = keys<Diagram[\"kind\"]>({ sequence: true, architecture: true });\n\n/** 最初の行より後の行の頭の語。線の行だけは箱の名札から始まる */\nexport const HEADS = [\"group\", \"end\", \"box\", \"strip\", \"step\", \"say\", \"code\", \"act\", \"note\", \"set\"] as const;\ntype Head = (typeof HEADS)[number];\n\n/** 箱と区画の名札の後ろに、見せる名前を続ける語 (`box <名札> as <名前>`) */\nexport const AS = \"as\";\n\n/** 行ごとに書ける属性の鍵 */\nexport const ATTRS = {\n diagram: [\"view\"],\n group: [\"note\", \"color\", \"icon\"],\n box: [\"note\", \"color\", \"icon\"],\n edge: [\"carry\", \"tag\", \"side\"],\n set: [\"tag\"],\n} as const;\n\n/** `carry` に書ける運ぶ物。封筒は書かない時、札は `tag` で書く */\nexport const CARRIES = keys<Exclude<Carry[\"kind\"], \"envelope\" | \"tag\">>({ coin: true, none: true });\nexport const VIEWS = keys<ViewMode>({ fixed: true, follow: true });\nexport const SIDES = keys<LabelSide>({ above: true, below: true, left: true, right: true });\n\n/**\n * 今の形の行 (#2997 まで) が、新しい形のどの行に当たるか。誤りの文で新しい行の形を示すために引く。\n * 鍵は今の形の行の頭の語で、記号 (`#` など) で始まる行と、名札の後ろに `=` や「」が来る行は読む側が見分ける。\n */\nexport const OLD_HEADS = {\n 時系列図: \"sequence\",\n 構成図: \"architecture\",\n 区画: \"group\",\n 見せ方: \"view\",\n region: \"group\",\n view: \"view\",\n} as const satisfies Record<string, Diagram[\"kind\"] | Head | \"view\">;\n","/**\n * dragon記法の誤りの文 (#2997、#3137)。\n *\n * 記法の語は英語だけで file から言葉が決まらないため、誤りの文は呼ぶ側が渡した言葉\n * (渡さなければ日本語) で出す。文の中の記法の語は語の表から引き、表と文で語が食い違わないようにする。\n */\nimport { COLORS } from \"./schema\";\nimport { CARRIES, HEADS, KINDS, type NotationLang, SIDES, VIEWS } from \"./words\";\n\n/** 新しい形のどの行の書き方を示すか。今の形の行に当たった時に、誤りの文が書き方を示す */\nexport type Shape = \"sequence\" | \"architecture\" | \"group\" | \"box\" | \"strip\" | \"view\" | \"step\" | \"say\" | \"code\" | \"act\" | \"note\" | \"set\";\n\nexport interface Messages {\n noHead: string;\n badHead: string;\n /** 今の形の `word` を書いた行。`shape` の行の書き方を示す */\n oldForm: (word: string, shape: Shape) => string;\n unknownHead: (word: string) => string;\n duplicate: (id: string) => string;\n needsId: (word: string) => string;\n badId: (id: string) => string;\n afterId: string;\n undeclaredBox: (id: string) => string;\n noBody: (title: string) => string;\n emptyStepTitle: string;\n noBoxes: string;\n noSteps: string;\n emptySay: string;\n sayTwice: string;\n codeTwice: string;\n emptyCode: string;\n declarationInStep: string;\n stepLineBeforeStep: string;\n nestedGroup: string;\n strayEnd: string;\n endTakesNothing: string;\n unclosedGroup: (id: string) => string;\n regionReopened: (id: string) => string;\n emptyName: (id: string) => string;\n stripTwice: string;\n stripShape: string;\n emptyStripField: string;\n stripUndeclared: string;\n noSuchField: (field: string) => string;\n stripNeedsValue: string;\n actShape: string;\n noteShape: string;\n edgeShape: string;\n emptyLabel: string;\n quoteUnclosed: string;\n afterQuote: string;\n attrUnclosed: string;\n attrNoColon: (raw: string) => string;\n attrNoValue: (key: string) => string;\n attrTwice: (key: string) => string;\n badAttr: (key: string, allowed: readonly string[]) => string;\n badColor: string;\n badView: string;\n badCarry: string;\n badSide: string;\n carryTwice: string;\n}\n\nconst list = (words: readonly string[]): string => words.join(\" / \");\n\nconst ja = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <題>\",\n architecture: \"architecture <題>\",\n group: \"group <名札> as <名前> [note: <添え書き>] から end まで\",\n box: \"box <名札> as <名前> [note: <下の小さな字>]\",\n strip: \"strip <題>: <欄>, <欄>\",\n view: \"sequence <題> [view: follow]\",\n step: \"step <段の題>\",\n say: \"say <段の本文>\",\n code: \"code <命令>\",\n act: \"act <名札>: <処理の名前>\",\n note: \"note <名札>: <下の小さな字>\",\n set: \"set <欄>: <値> [tag: <札>]\",\n };\n return {\n noHead: `最初の行に図の種類 (${list(KINDS)}) と題を書く`,\n badHead: `最初の行は ${KINDS.join(\" か \")} で始め、続けて題を書く`,\n oldForm: (word, shape) => `${word} は今の形の書き方。新しい形では ${shapes[shape]} と書く`,\n unknownHead: (word) => `${word} は行の頭に書けない。行は ${list(HEADS)} か、<名札> -> <名札> で始める`,\n duplicate: (id) => `${id} は既に宣言した名札`,\n needsId: (word) => `${word} の後ろに名札を書く`,\n badId: (id) => `${id} は名札に使えない。名札には空白と [ ] 「 」 = : を含めない`,\n afterId: \"名札の後ろには as <名前> か属性を書く\",\n undeclaredBox: (id) => `${id} という箱は宣言していない`,\n noBody: (title) => `段「${title}」に本文 (say の行) が要る`,\n emptyStepTitle: \"step の後ろに段の題を書く\",\n noBoxes: \"箱を 1 つ以上宣言する\",\n noSteps: \"段 (step の行) を 1 つ以上書く\",\n emptySay: \"say の後ろか、その下に字下げした行に段の本文を書く\",\n sayTwice: \"1 つの段に say は 1 つまで。長い本文は say の下に字下げして続ける\",\n codeTwice: \"1 つの段に code は 1 行まで\",\n emptyCode: \"code の後ろに命令を書く\",\n declarationInStep: \"group と box と strip は最初の step より前に書く\",\n stepLineBeforeStep: \"線と say と code と act と note と set は step の下に書く\",\n nestedGroup: \"group の中に group は書けない。先に end で閉じる\",\n strayEnd: \"end の前に、閉じる group が無い\",\n endTakesNothing: \"end の後ろには何も書かない\",\n unclosedGroup: (id) => `group ${id} を end で閉じていない`,\n regionReopened: (id) => `group ${id} は宣言済み。もう一度開く時は group ${id} だけを書き、名前と属性は最初の宣言に書く`,\n emptyName: (id) => `${id} の名前が空`,\n stripTwice: \"strip は 1 つだけ宣言する\",\n stripShape: \"strip は strip <題>: <欄>, <欄> の形で書く\",\n emptyStripField: \"strip の欄の名前が空\",\n stripUndeclared: \"set を書く前に、strip <題>: <欄>, <欄> で帯を宣言する\",\n noSuchField: (field) => `${field} という欄は strip に無い`,\n stripNeedsValue: \"set は set <欄>: <値> か set <欄> [tag: <札>] の形で書く\",\n actShape: \"act は act <名札>: <処理の名前> の形で書く\",\n noteShape: \"note は note <名札>: <下の小さな字> の形で書く\",\n edgeShape: \"線は <名札> -> <名札>: <線の名前> [<属性>] の形で書く\",\n emptyLabel: \"線の : の後ろに線の名前を書く。名前を書かない時は : も書かない\",\n quoteUnclosed: '\" で始めた字を \" で閉じていない',\n afterQuote: '\" で閉じた字の後ろには、属性か次の , だけを書く',\n attrUnclosed: \"属性は [ で始めて ] で閉じ、行の終わりに置く\",\n attrNoColon: (raw) => `[${raw}] は書けない。属性は [<鍵>: <値>] の形で書く`,\n attrNoValue: (key) => `${key}: の後ろに値を書く`,\n attrTwice: (key) => `${key} は 1 つの行に 1 つまで`,\n badAttr: (key, allowed) => `${key} はこの行に書けない属性。書けるのは ${list(allowed)}`,\n badColor: `color は ${list(COLORS)} のどれか`,\n badView: `view は ${list(VIEWS)} のどれか`,\n badCarry: `carry は ${list(CARRIES)} のどれか。札は tag: <値> で書く`,\n badSide: `side は ${list(SIDES)} のどれか`,\n carryTwice: \"運ぶ物は 1 本の線に 1 つまで。carry と tag は一緒に書かない\",\n };\n};\n\nconst en = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <title>\",\n architecture: \"architecture <title>\",\n group: \"group <id> as <name> [note: <note>] through end\",\n box: \"box <id> as <name> [note: <caption>]\",\n strip: \"strip <title>: <field>, <field>\",\n view: \"sequence <title> [view: follow]\",\n step: \"step <step title>\",\n say: \"say <step body>\",\n code: \"code <command>\",\n act: \"act <id>: <action>\",\n note: \"note <id>: <caption>\",\n set: \"set <field>: <value> [tag: <tag>]\",\n };\n return {\n noHead: `Write the diagram kind (${list(KINDS)}) and a title on the first line`,\n badHead: `Start the first line with ${KINDS.join(\" or \")}, followed by the title`,\n oldForm: (word, shape) => `${word} is the old notation. Write ${shapes[shape]} instead`,\n unknownHead: (word) => `A line cannot start with ${word}. Start a line with ${list(HEADS)}, or <id> -> <id>`,\n duplicate: (id) => `${id} is already declared`,\n needsId: (word) => `Write an id after ${word}`,\n badId: (id) => `${id} cannot be an id. An id has no spaces and none of [ ] 「 」 = :`,\n afterId: \"Write as <name> or attributes after the id\",\n undeclaredBox: (id) => `No box named ${id} is declared`,\n noBody: (title) => `Step \"${title}\" needs a body (a say line)`,\n emptyStepTitle: \"Write a title after step\",\n noBoxes: \"Declare at least one box\",\n noSteps: \"Write at least one step (a step line)\",\n emptySay: \"Write the step body after say, or on indented lines below it\",\n sayTwice: \"A step takes one say. Continue a long body on indented lines below it\",\n codeTwice: \"A step takes at most one code line\",\n emptyCode: \"Write the command after code\",\n declarationInStep: \"Write group, box and strip before the first step\",\n stepLineBeforeStep: \"Write lines, say, code, act, note and set under a step\",\n nestedGroup: \"A group cannot hold another group. Close it with end first\",\n strayEnd: \"There is no group for this end to close\",\n endTakesNothing: \"Write nothing after end\",\n unclosedGroup: (id) => `group ${id} is not closed with end`,\n regionReopened: (id) => `group ${id} is already declared. To open it again, write only group ${id}; put the name and attributes on the first one`,\n emptyName: (id) => `${id} has an empty name`,\n stripTwice: \"Declare only one strip\",\n stripShape: \"Write a strip as strip <title>: <field>, <field>\",\n emptyStripField: \"A strip field name is empty\",\n stripUndeclared: \"Declare the strip as strip <title>: <field>, <field> before writing set\",\n noSuchField: (field) => `The strip has no field named ${field}`,\n stripNeedsValue: \"Write set as set <field>: <value> or set <field> [tag: <tag>]\",\n actShape: \"Write act as act <id>: <action>\",\n noteShape: \"Write note as note <id>: <caption>\",\n edgeShape: \"Write a line as <id> -> <id>: <label> [<attributes>]\",\n emptyLabel: \"Write the label after the : of a line, or leave out the : as well\",\n quoteUnclosed: 'A value that starts with \" is not closed with \"',\n afterQuote: 'After a value closed with \", write only attributes or the next ,',\n attrUnclosed: \"Start attributes with [, close them with ], and put them at the end of the line\",\n attrNoColon: (raw) => `[${raw}] cannot be read. Write an attribute as [<key>: <value>]`,\n attrNoValue: (key) => `Write a value after ${key}:`,\n attrTwice: (key) => `Write ${key} only once on a line`,\n badAttr: (key, allowed) => `${key} cannot be written on this line. Write ${list(allowed)}`,\n badColor: `color is one of ${list(COLORS)}`,\n badView: `view is one of ${list(VIEWS)}`,\n badCarry: `carry is one of ${list(CARRIES)}. Write a tag as tag: <value>`,\n badSide: `side is one of ${list(SIDES)}`,\n carryTwice: \"A line carries one thing. Do not write carry and tag together\",\n };\n};\n\nconst MESSAGES: Record<NotationLang, Messages> = { ja: ja(), en: en() };\n\nexport const messagesFor = (lang: NotationLang): Messages => MESSAGES[lang];\n","/**\n * 記法を 1 行ずつに切る。\n *\n * 空行とコメントの行 (`//` で始まる行) も捨てずに返す。`say` の下に字下げして続けた本文では、\n * 空行も `//` で始まる行も本文の字になるため、捨てるかは読む側が行の場所で決める (#3137)。\n * 行の頭と終わりの空白は落とし、頭の空白の字の数を `indent` に残す。\n * 誤りを示すために元の行の番号と、残した字が始まる列を持たせる。\n * 行と列は 1 から数え、列は字の数で数える (UTF-16 の単位では数えない)。\n */\nexport interface SourceLine {\n line: number;\n column: number;\n /** 行の頭の空白の字の数。`say` の続きの行を見分ける */\n indent: number;\n text: string;\n}\n\n/** 空行かコメントの行 */\nexport const isBlankOrComment = (source: SourceLine): boolean => source.text === \"\" || source.text.startsWith(\"//\");\n\n/** `text` の `index` 番目 (UTF-16 の位置) にある字が、行の何列目かを返す。 */\nexport function columnOf(source: SourceLine, index: number): number {\n return source.column + Array.from(source.text.slice(0, index)).length;\n}\n\nexport function tokenize(notation: string): SourceLine[] {\n return notation.split(/\\r?\\n/).map((raw, index) => {\n const indent = Array.from(raw.slice(0, raw.length - raw.trimStart().length)).length;\n return { line: index + 1, column: indent + 1, indent, text: raw.trim() };\n });\n}\n","/**\n * 原本の形式の版。\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 * 人が書く dragon記法を、図の原本の JSON へ変える (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、線の行だけは箱の名札から始まる。最初の `step` より前に\n * 図の種類と題と区画と箱と帯を宣言し、`step` ごとに、その段で起きることを起きる順に並べる。\n *\n * sequence <題> [view: fixed か follow] 書かなければ字の大きさで選ぶ\n * group <名札> as <名前> [note: <添え書き>, color: <色>, icon: <印>]\n * box <名札> as <名前> [note: <下の小さな字>, color: <色>, icon: <印>]\n * end 同じ名札の group はもう一度開ける\n * box <名札> as <名前> [...] as が無ければ名札を名前にする\n * strip <題>: <欄>, <欄>\n * step <段の題>\n * say <段の本文> say の下に字下げした行は本文の続き\n * code <段で打つ命令>\n * <名札> -> <名札>: <線の名前> [carry: <運ぶ物>, tag: <値>, side: <側>]\n * act <名札>: <処理の名前> 箱の中の処理\n * note <名札>: <字> 箱の下の小さな字の書き換え\n * set <欄>: <値> [tag: <札>] 中身の帯の値\n *\n * 鍵と値はコロンで区切り、属性は `[ ]` の中に `,` で並べて行の終わりに置く。\n * 空白を含む名前と文は行の終わりか `[` の前に置き、`[` を含む名前と `,` か `]` を含む属性の値だけを\n * `\"` で囲む。囲みの中では `\\\"` が `\"`、`\\\\` が `\\` になる。字下げは `say` の続きの行を見分ける時だけ意味を持つ。\n *\n * 行の頭の語と同じ綴りの名札 (`end` や `step`) も書ける。名札の次に `->` が来る行は線と読む。\n * 誤りは最初の 1 つで止め、行と列を示す。誤りの文の言葉は呼ぶ側が渡す。\n */\nimport { type Messages, messagesFor, type Shape } from \"./messages\";\nimport { type Box, type Carry, type Color, COLORS, type Diagram, type DiagramEvent, type LabelSide, type Region, type Step, type ViewMode } from \"./schema\";\nimport { columnOf, isBlankOrComment, type SourceLine, tokenize } from \"./tokenize\";\nimport { FORMAT_VERSION } from \"./version\";\nimport { AS, ATTRS, CARRIES, HEADS, KINDS, type NotationLang, OLD_HEADS, SIDES, VIEWS } from \"./words\";\n\nexport interface LineError {\n line: number;\n column: number;\n message: string;\n}\n\nexport type Parsed = { ok: true; diagram: Diagram } | { ok: false; errors: LineError[] };\n\nexport interface ParseOptions {\n /** 誤りの文の言葉。既定は日本語 */\n lang?: NotationLang;\n}\n\nclass NotationError extends Error {\n constructor(\n readonly line: number,\n readonly column: number,\n message: string,\n ) {\n super(message);\n }\n}\n\nconst fail = (source: SourceLine, index: number, message: string): NotationError =>\n new NotationError(source.line, columnOf(source, index), message);\n\n/** 名札に使える字。原本の JSON の名札の形と同じ */\nconst ID = /^[^\\s[\\]「」=:]+$/u;\n/** 線の行。名札、`->`、名札 */\nconst EDGE = /^([^\\s:[\\]]+?)\\s*->\\s*([^\\s:[\\]]+)/du;\n\nconst isOneOf = <T extends string>(list: readonly T[], word: string): word is T => (list as readonly string[]).includes(word);\n\n/** `at` から空白を飛ばした位置 */\nfunction skipSpaces(text: string, at: number): number {\n let i = at;\n while (i < text.length && /\\s/u.test(text[i] ?? \"\")) i++;\n return i;\n}\n\n/** `[<鍵>: <値>]` の 1 つ。`at` は鍵の位置 */\ninterface Attr {\n value: string;\n at: number;\n}\n\n/** `at` の `\"` から閉じる `\"` までを読む。`end` は閉じた `\"` の次 */\nfunction readQuoted(source: SourceLine, at: number, m: Messages): { value: string; end: number } {\n const text = source.text;\n let value = \"\";\n for (let i = at + 1; i < text.length; i++) {\n const c = text[i] ?? \"\";\n const next = text[i + 1] ?? \"\";\n if (c === \"\\\\\" && (next === '\"' || next === \"\\\\\")) {\n value += next;\n i++;\n } else if (c === '\"') {\n return { value, end: i + 1 };\n } else {\n value += c;\n }\n }\n throw fail(source, at, m.quoteUnclosed);\n}\n\n/**\n * `at` から名前か文を読む。`\"` で始まれば囲みの中、そうでなければ `[` の前か行の終わりまで。\n * `rest` は名前の後ろの位置で、行の終わりか属性の `[` を指す。\n */\nfunction readName(source: SourceLine, at: number, m: Messages): { value: string; rest: number } {\n const text = source.text;\n const start = skipSpaces(text, at);\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n const rest = skipSpaces(text, quoted.end);\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterQuote);\n return { value: quoted.value, rest };\n }\n const open = text.indexOf(\"[\", start);\n const rest = open < 0 ? text.length : open;\n return { value: text.slice(start, rest).trim(), rest };\n}\n\n/** `at` の `[` から行の終わりの `]` までの属性を読む。`allowed` に無い鍵は誤り */\nfunction readAttrs(source: SourceLine, at: number, allowed: readonly string[], m: Messages): Map<string, Attr> {\n const text = source.text;\n if (!text.endsWith(\"]\")) throw fail(source, at, m.attrUnclosed);\n const close = text.length - 1;\n const attrs = new Map<string, Attr>();\n for (let i = at + 1; ; ) {\n const start = skipSpaces(text, i);\n let colon = start;\n while (colon < close && text[colon] !== \":\" && text[colon] !== \",\") colon++;\n if (colon >= close || text[colon] !== \":\") throw fail(source, start, m.attrNoColon(text.slice(start, colon).trim()));\n const key = text.slice(start, colon).trim();\n if (!allowed.includes(key)) throw fail(source, start, m.badAttr(key, allowed));\n if (attrs.has(key)) throw fail(source, start, m.attrTwice(key));\n let end = skipSpaces(text, colon + 1);\n let value: string;\n if (text[end] === '\"') {\n const quoted = readQuoted(source, end, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < close && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", end);\n const stop = comma < 0 || comma > close ? close : comma;\n value = text.slice(end, stop).trim();\n end = stop;\n }\n if (value === \"\") throw fail(source, start, m.attrNoValue(key));\n attrs.set(key, { value, at: start });\n if (end >= close) return attrs;\n i = end + 1;\n }\n}\n\n/** `at` から `,` で区切った字の並びを行の終わりまで読む */\nfunction readList(source: SourceLine, at: number, m: Messages): string[] {\n const text = source.text;\n const items: string[] = [];\n for (let i = at; ; ) {\n const start = skipSpaces(text, i);\n let value: string;\n let end: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < text.length && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", start);\n end = comma < 0 ? text.length : comma;\n value = text.slice(start, end).trim();\n }\n if (value === \"\") throw fail(source, start, m.emptyStripField);\n items.push(value);\n if (end >= text.length) return items;\n i = end + 1;\n }\n}\n\n/** `group` と `box` の行の、名札と `as` の後ろの名前と属性 */\ninterface Declared {\n id: string;\n idAt: number;\n name?: string;\n attrs: Map<string, Attr>;\n}\n\nfunction readDeclared(source: SourceLine, word: string, allowed: readonly string[], m: Messages): Declared {\n const text = source.text;\n const start = skipSpaces(text, word.length);\n const id = /^[^\\s[]+/u.exec(text.slice(start))?.[0];\n if (id === undefined) throw fail(source, 0, m.needsId(word));\n if (!ID.test(id)) throw fail(source, start, m.badId(id));\n let rest = skipSpaces(text, start + id.length);\n let name: string | undefined;\n if (text.startsWith(AS, rest) && /^(\\s|$)/u.test(text.slice(rest + AS.length, rest + AS.length + 1))) {\n const named = readName(source, rest + AS.length, m);\n if (named.value === \"\") throw fail(source, rest, m.emptyName(id));\n name = named.value;\n rest = named.rest;\n }\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterId);\n const attrs = rest < text.length ? readAttrs(source, rest, allowed, m) : new Map<string, Attr>();\n return { id, idAt: start, ...(name !== undefined ? { name } : {}), attrs };\n}\n\n/** 区画と箱の属性 (`note` と `color` と `icon`) */\nfunction lookOf(source: SourceLine, attrs: Map<string, Attr>, m: Messages): { note?: string; color?: Color; icon?: string } {\n const color = attrs.get(\"color\");\n if (color && !isOneOf(COLORS, color.value)) throw fail(source, color.at, m.badColor);\n const note = attrs.get(\"note\")?.value;\n const icon = attrs.get(\"icon\")?.value;\n return {\n ...(note !== undefined ? { note } : {}),\n ...(color ? { color: color.value as Color } : {}),\n ...(icon !== undefined ? { icon } : {}),\n };\n}\n\n/**\n * 今の形 (#2997 まで) の行なら、その印と、新しい形で書く行の形。`inStep` は段の中の行か。\n * 新しい形で読めない行の誤りの文で、書き直し方を示すために引く。\n */\nfunction oldForm(text: string, inStep: boolean): { word: string; shape: Shape } | undefined {\n const first = text.split(/\\s/u)[0] ?? \"\";\n if (first === \"帯\") return { word: first, shape: inStep ? \"set\" : \"strip\" };\n if (Object.hasOwn(OLD_HEADS, first)) return { word: first, shape: OLD_HEADS[first as keyof typeof OLD_HEADS] };\n if (text.startsWith(\"#\")) return { word: \"#\", shape: \"step\" };\n if (text.startsWith(\">\")) return { word: \">\", shape: \"say\" };\n if (text.startsWith(\"`\")) return { word: \"`\", shape: \"code\" };\n if (text.includes(\"「\")) return { word: \"「」\", shape: inStep ? \"note\" : \"box\" };\n if (/^[^\\s=:]+\\s*=(?!>)/u.test(text)) return { word: \"=\", shape: \"box\" };\n if (inStep && /^[^\\s:]+\\s*:/u.test(text)) return { word: \":\", shape: \"act\" };\n return undefined;\n}\n\n/** 読んでいる段。`body` は `say` を読むまで無い */\ninterface Building {\n source: SourceLine;\n title: string;\n body?: string[];\n code?: string;\n events: DiagramEvent[];\n}\n\nfunction parseLines(lines: SourceLine[], m: Messages): Diagram {\n const headAt = lines.findIndex((source) => !isBlankOrComment(source));\n const head = lines[headAt];\n if (!head) throw new NotationError(1, 1, m.noHead);\n const kind = head.text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(KINDS, kind)) {\n const old = oldForm(head.text, false);\n throw fail(head, 0, old ? m.oldForm(old.word, old.shape) : m.badHead);\n }\n const titled = readName(head, kind.length, m);\n if (titled.value === \"\") throw fail(head, 0, m.badHead);\n const title = titled.value;\n const shown = titled.rest < head.text.length ? readAttrs(head, titled.rest, ATTRS.diagram, m).get(\"view\") : undefined;\n if (shown && !isOneOf(VIEWS, shown.value)) throw fail(head, shown.at, m.badView);\n const view = shown?.value as ViewMode | undefined;\n\n const regions: Region[] = [];\n const boxes: Box[] = [];\n const ids = new Set<string>();\n let strip: { title: string; fields: string[] } | undefined;\n const steps: Step[] = [];\n let building: Building | undefined;\n /** 開いている `group` */\n let group: { source: SourceLine; id: string } | undefined;\n\n const declare = (source: SourceLine, id: string, at: number): void => {\n if (ids.has(id)) throw fail(source, at, m.duplicate(id));\n ids.add(id);\n };\n const boxAt = (source: SourceLine, id: string, at: number): string => {\n if (!boxes.some((box) => box.id === id)) throw fail(source, at, m.undeclaredBox(id));\n return id;\n };\n /** 段の中に書く行の、書き先の段。最初の `step` より前なら誤り */\n const inStep = (source: SourceLine): Building => {\n if (!building) throw fail(source, 0, m.stepLineBeforeStep);\n return building;\n };\n /** 宣言の行。最初の `step` より後なら誤り */\n const beforeSteps = (source: SourceLine): void => {\n if (building) throw fail(source, 0, m.declarationInStep);\n };\n const finish = (): void => {\n if (!building) return;\n if (building.body === undefined) throw fail(building.source, 0, m.noBody(building.title));\n steps.push({\n title: building.title,\n body: building.body.join(\"\\n\"),\n ...(building.code !== undefined ? { code: building.code } : {}),\n events: building.events,\n });\n };\n\n const rest = lines.slice(headAt + 1);\n for (let i = 0; i < rest.length; i++) {\n const source = rest[i];\n if (!source || isBlankOrComment(source)) continue;\n const text = source.text;\n // 名札の次に `->` が来る行は、名札が行の頭の語と同じ綴りでも線と読む\n const edge = EDGE.exec(text);\n if (edge) {\n inStep(source).events.push(readEdge(source, edge));\n continue;\n }\n const word = text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(HEADS, word)) {\n const old = oldForm(text, building !== undefined);\n throw fail(source, 0, old ? m.oldForm(old.word, old.shape) : m.unknownHead(word));\n }\n switch (word) {\n case \"group\":\n readGroup(source);\n break;\n case \"end\":\n if (text !== word) throw fail(source, word.length, m.endTakesNothing);\n if (!group) throw fail(source, 0, m.strayEnd);\n group = undefined;\n break;\n case \"box\":\n readBox(source);\n break;\n case \"strip\":\n readStrip(source);\n break;\n case \"step\": {\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n const stepTitle = text.slice(word.length).trim();\n if (stepTitle === \"\") throw fail(source, 0, m.emptyStepTitle);\n building = { source, title: stepTitle, events: [] };\n break;\n }\n case \"say\":\n i = readSay(source, i);\n break;\n case \"code\": {\n const step = inStep(source);\n if (step.code !== undefined) throw fail(source, 0, m.codeTwice);\n const command = text.slice(word.length).trim();\n if (command === \"\") throw fail(source, 0, m.emptyCode);\n step.code = command;\n break;\n }\n case \"act\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.actShape);\n step.events.push({ type: \"action\", box: on.box, label: on.text });\n break;\n }\n case \"note\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.noteShape);\n step.events.push({ type: \"swap\", box: on.box, text: on.text });\n break;\n }\n case \"set\":\n inStep(source).events.push(readSet(source));\n break;\n }\n }\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n\n if (boxes.length === 0) throw fail(head, 0, m.noBoxes);\n if (steps.length === 0) throw fail(head, 0, m.noSteps);\n\n return {\n version: FORMAT_VERSION,\n kind,\n title,\n ...(view ? { view } : {}),\n ...(regions.length > 0 ? { regions } : {}),\n boxes,\n ...(strip ? { strip } : {}),\n steps,\n ...(kind === \"sequence\" ? { sequence: { lifelines: boxes.map((box) => box.id) } } : {}),\n };\n\n /** `group` の行。同じ名札をもう一度開いた時は、名前も属性も書かない */\n function readGroup(source: SourceLine): void {\n beforeSteps(source);\n if (group) throw fail(source, 0, m.nestedGroup);\n const declared = readDeclared(source, \"group\", ATTRS.group, m);\n if (regions.some((region) => region.id === declared.id)) {\n if (declared.name !== undefined || declared.attrs.size > 0) throw fail(source, 0, m.regionReopened(declared.id));\n } else {\n declare(source, declared.id, declared.idAt);\n regions.push({ id: declared.id, name: declared.name ?? declared.id, ...lookOf(source, declared.attrs, m) });\n }\n group = { source, id: declared.id };\n }\n\n /** `box` の行。開いている `group` の中なら、その区画に置く */\n function readBox(source: SourceLine): void {\n beforeSteps(source);\n const declared = readDeclared(source, \"box\", ATTRS.box, m);\n declare(source, declared.id, declared.idAt);\n const { note, ...look } = lookOf(source, declared.attrs, m);\n boxes.push({\n id: declared.id,\n name: declared.name ?? declared.id,\n ...(note !== undefined ? { sub: note } : {}),\n ...look,\n ...(group ? { region: group.id } : {}),\n });\n }\n\n /** `strip <題>: <欄>, <欄>` の行 */\n function readStrip(source: SourceLine): void {\n beforeSteps(source);\n if (strip) throw fail(source, 0, m.stripTwice);\n const text = source.text;\n const start = skipSpaces(text, \"strip\".length);\n let stripTitle: string;\n let colon: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n stripTitle = quoted.value;\n colon = skipSpaces(text, quoted.end);\n } else {\n colon = text.indexOf(\":\", start);\n stripTitle = colon < 0 ? \"\" : text.slice(start, colon).trim();\n }\n if (stripTitle === \"\" || text[colon] !== \":\") throw fail(source, 0, m.stripShape);\n strip = { title: stripTitle, fields: readList(source, colon + 1, m) };\n }\n\n /**\n * `say` の行と、その下に `say` より深く字下げして続けた行を段の本文にする。\n * 続きの行の間の空行は本文の空の行になる。返すのは読み終えた最後の行の番号。\n */\n function readSay(source: SourceLine, index: number): number {\n const step = inStep(source);\n if (step.body !== undefined) throw fail(source, 0, m.sayTwice);\n const inline = source.text.slice(\"say\".length).trim();\n const body = inline === \"\" ? [] : [inline];\n let blanks = 0;\n let last = index;\n for (let j = index + 1; j < rest.length; j++) {\n const next = rest[j];\n if (!next) break;\n if (next.text === \"\") {\n blanks++;\n continue;\n }\n if (next.indent <= source.indent) break;\n body.push(...Array.from({ length: blanks }, () => \"\"), next.text);\n blanks = 0;\n last = j;\n }\n if (body.length === 0) throw fail(source, 0, m.emptySay);\n step.body = body;\n return last;\n }\n\n /** `act <名札>: <字>` と `note <名札>: <字>` の行の、箱と字 */\n function readOnBox(source: SourceLine, word: \"act\" | \"note\", shape: string): { box: string; text: string } {\n const found = new RegExp(`^${word}\\\\s+([^\\\\s:]+)\\\\s*:\\\\s*(.*)$`, \"du\").exec(source.text);\n const idAt = found?.indices?.[1]?.[0];\n if (!found || idAt === undefined || (found[2] ?? \"\") === \"\") throw fail(source, 0, shape);\n return { box: boxAt(source, found[1] ?? \"\", idAt), text: found[2] ?? \"\" };\n }\n\n /** `<名札> -> <名札>: <線の名前> [<属性>]` の行 */\n function readEdge(source: SourceLine, edge: RegExpExecArray): DiagramEvent {\n const text = source.text;\n const from = boxAt(source, edge[1] ?? \"\", edge.indices?.[1]?.[0] ?? 0);\n const to = boxAt(source, edge[2] ?? \"\", edge.indices?.[2]?.[0] ?? 0);\n let at = skipSpaces(text, edge[0].length);\n let label: string | undefined;\n if (text[at] === \":\") {\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.emptyLabel);\n label = named.value;\n at = named.rest;\n }\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.edgeShape);\n const attrs = at < text.length ? readAttrs(source, at, ATTRS.edge, m) : new Map<string, Attr>();\n const tag = attrs.get(\"tag\");\n const carried = attrs.get(\"carry\");\n if (tag && carried) throw fail(source, Math.max(tag.at, carried.at), m.carryTwice);\n if (carried && !isOneOf(CARRIES, carried.value)) throw fail(source, carried.at, m.badCarry);\n const side = attrs.get(\"side\");\n if (side && !isOneOf(SIDES, side.value)) throw fail(source, side.at, m.badSide);\n let carry: Carry = { kind: \"envelope\" };\n if (tag) carry = { kind: \"tag\", text: tag.value };\n else if (carried) carry = carried.value === \"coin\" ? { kind: \"coin\" } : { kind: \"none\" };\n return {\n type: \"edge\",\n from,\n to,\n ...(label !== undefined ? { label } : {}),\n carry,\n ...(side ? { labelSide: side.value as LabelSide } : {}),\n };\n }\n\n /** `set <欄>: <値> [tag: <札>]` か `set <欄> [tag: <札>]` の行 */\n function readSet(source: SourceLine): DiagramEvent {\n const declared = strip;\n if (!declared) throw fail(source, 0, m.stripUndeclared);\n const text = source.text;\n const start = skipSpaces(text, \"set\".length);\n let field: string;\n let at: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n field = quoted.value;\n at = skipSpaces(text, quoted.end);\n } else {\n at = start;\n while (at < text.length && text[at] !== \":\" && text[at] !== \"[\") at++;\n field = text.slice(start, at).trim();\n }\n if (!declared.fields.includes(field)) throw fail(source, start, m.noSuchField(field));\n let value: string | undefined;\n if (text[at] === \":\") {\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.stripNeedsValue);\n value = named.value;\n at = named.rest;\n }\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.stripNeedsValue);\n const tag = at < text.length ? readAttrs(source, at, ATTRS.set, m).get(\"tag\")?.value : undefined;\n if (value === undefined && tag === undefined) throw fail(source, 0, m.stripNeedsValue);\n return {\n type: \"strip\",\n field,\n ...(value !== undefined ? { value } : {}),\n ...(tag !== undefined ? { tag } : {}),\n };\n }\n}\n\nexport function parseNotation(notation: string, options: ParseOptions = {}): Parsed {\n try {\n return { ok: true, diagram: parseLines(tokenize(notation), messagesFor(options.lang ?? \"ja\")) };\n } catch (error) {\n if (!(error instanceof NotationError)) throw error;\n return { ok: false, errors: [{ line: error.line, column: error.column, message: error.message }] };\n }\n}\n","/**\n * 図の原本の JSON を、人が書く dragon記法へ書き戻す (#3137)。\n *\n * 並べ方は決まった形に整える。JSON の欄の並び順は見ず、欄の名前で読むので、\n * 同じ内容の JSON からは毎回同じ文字列になる。書き手の行の並べ方とコメントは保たない。\n * 段の中で起きることは JSON の並び順 (起きる順) のまま書く。\n *\n * `\"` で囲むのは要る時だけにする。`[` を含む名前と、`,` か `]` を含む属性の値と、`\"` で始まる字を囲む。\n * 箱は JSON の並びのまま書き、同じ区画の箱が続く所を 1 つの `group … end` にする。\n * 区画の箱が飛び飛びの時は同じ `group` を開き直す。区画の並びが箱の現れる順と違う時と、\n * 箱の無い区画がある時は、先に全ての区画を中の無い `group … end` で宣言してから開き直す。\n */\nimport type { Box, Diagram, DiagramEvent, Region } from \"./schema\";\n\nconst quote = (text: string): string => `\"${text.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n/** 行の終わりか `[` の前に置く名前と文 */\nconst name = (text: string): string => (text.includes(\"[\") || text.startsWith('\"') ? quote(text) : text);\n/** `:` の前に置く字 (帯の題と、`set` の欄) */\nconst key = (text: string): string => (text.includes(\":\") || text.includes(\"[\") || text.startsWith('\"') ? quote(text) : text);\n/** `strip` の行に `,` で並べる欄 */\nconst field = (text: string): string => (text.includes(\",\") || text.startsWith('\"') ? quote(text) : text);\n/** 属性の値 */\nconst value = (text: string): string => (text.includes(\",\") || text.includes(\"]\") || text.startsWith('\"') ? quote(text) : text);\n\n/** 属性の並び。値の無い鍵は書かず、1 つも無ければ何も付けない */\nconst attrs = (pairs: [string, string | undefined][]): string => {\n const written = pairs.filter((pair): pair is [string, string] => pair[1] !== undefined);\n return written.length === 0 ? \"\" : ` [${written.map(([k, v]) => `${k}: ${value(v)}`).join(\", \")}]`;\n};\n\n/** 名札と違う名前だけを `as` の後ろに書く */\nconst shown = (id: string, text: string): string => (text === id ? \"\" : ` as ${name(text)}`);\n\nconst declareRegion = (r: Region): string =>\n `group ${r.id}${shown(r.id, r.name)}${attrs([\n [\"note\", r.note],\n [\"color\", r.color],\n [\"icon\", r.icon],\n ])}`;\nconst declareBox = (b: Box): string =>\n `box ${b.id}${shown(b.id, b.name)}${attrs([\n [\"note\", b.sub],\n [\"color\", b.color],\n [\"icon\", b.icon],\n ])}`;\n\nfunction event(e: DiagramEvent): string {\n switch (e.type) {\n case \"edge\": {\n const carry: [string, string][] = e.carry.kind === \"tag\" ? [[\"tag\", e.carry.text]] : e.carry.kind === \"envelope\" ? [] : [[\"carry\", e.carry.kind]];\n return `${e.from} -> ${e.to}${e.label === undefined ? \"\" : `: ${name(e.label)}`}${attrs([...carry, [\"side\", e.labelSide]])}`;\n }\n case \"action\":\n return `act ${e.box}: ${e.label}`;\n case \"swap\":\n return `note ${e.box}: ${e.text}`;\n case \"strip\":\n return `set ${key(e.field)}${e.value === undefined ? \"\" : `: ${name(e.value)}`}${attrs([[\"tag\", e.tag]])}`;\n }\n}\n\n/** 区画と箱の宣言の塊。塊どうしは空行で区切る */\nfunction declarations(diagram: Diagram): string[] {\n const regions = diagram.regions ?? [];\n const runs: { region?: string; boxes: Box[] }[] = [];\n for (const b of diagram.boxes) {\n const last = runs.at(-1);\n if (last && last.region === b.region) last.boxes.push(b);\n else runs.push({ ...(b.region !== undefined ? { region: b.region } : {}), boxes: [b] });\n }\n const opened = [...new Set(runs.flatMap((run) => (run.region === undefined ? [] : [run.region])))];\n const inOrder = opened.length === regions.length && opened.every((id, i) => regions[i]?.id === id);\n const declared = new Set<string>();\n const blocks: string[] = [];\n if (!inOrder) {\n for (const r of regions) {\n blocks.push(`${declareRegion(r)}\\nend`);\n declared.add(r.id);\n }\n }\n for (const run of runs) {\n const lines = run.boxes.map(declareBox);\n if (run.region === undefined) {\n blocks.push(lines.join(\"\\n\"));\n continue;\n }\n const region = regions.find((r) => r.id === run.region);\n const open = declared.has(run.region) || !region ? `group ${run.region}` : declareRegion(region);\n declared.add(run.region);\n blocks.push([open, ...lines.map((line) => ` ${line}`), \"end\"].join(\"\\n\"));\n }\n return blocks;\n}\n\nexport function printNotation(diagram: Diagram): string {\n const blocks = [`${diagram.kind} ${name(diagram.title)}${attrs([[\"view\", diagram.view]])}`, ...declarations(diagram)];\n if (diagram.strip) blocks.push(`strip ${key(diagram.strip.title)}: ${diagram.strip.fields.map(field).join(\", \")}`);\n for (const step of diagram.steps) {\n const body = step.body.split(\"\\n\");\n const say = body.length === 1 ? [` say ${step.body}`] : [\" say\", ...body.map((line) => (line === \"\" ? \"\" : ` ${line}`))];\n blocks.push(\n [`step ${step.title}`, ...say, ...(step.code === undefined ? [] : [` code ${step.code}`]), ...step.events.map((e) => ` ${event(e)}`)].join(\"\\n\"),\n );\n }\n return `${blocks.join(\"\\n\\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 \"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 * 図の見た目の値の表。色、字の大きさ、余白、動きの長さをここに 1 つにまとめる。\n *\n * 描く file (`layout/`、`render/`、`timeline.ts`、`view.ts`、`player.ts`) は色の値と字の大きさを\n * 直接書かず、この表から読む。値は見本帳 (`docs/design/base/`) の部品と同じにしてある。\n * 色味の値は見本帳の `palettes.json` の写しで、色味ごとに明るい背景と暗い背景で別の値を持つ。\n */\nimport palettes from \"./palettes.json\";\nimport { FONTS, type Family } from \"./fonts\";\n\nexport type Theme = \"light\" | \"dark\";\n\nexport interface Palette {\n id: string;\n name: string;\n note: string;\n light: Record<string, string>;\n dark: Record<string, string>;\n}\n\n/** 色味を指定しない時と、知らない名前を渡した時に使う色味。 */\nexport const DEFAULT_PALETTE = \"paper\";\n\nexport const PALETTES: Readonly<Record<string, Palette>> = Object.fromEntries(\n Object.entries(palettes as Record<string, Omit<Palette, \"id\">>).map(([id, p]) => [id, { id, ...p }]),\n);\n\n/** 名前から色味を引く。指定が無いか、知らない名前 (外した墨と朱の `ink` を含む) なら紙と墨。 */\nexport function resolvePalette(id?: string): Palette {\n const found = id !== undefined && Object.hasOwn(PALETTES, id) ? PALETTES[id] : undefined;\n return found ?? (PALETTES[DEFAULT_PALETTE] as Palette);\n}\n\n/** 色味の値を CSS の変数として並べる。 */\nexport function paletteVars(palette: Palette, theme: Theme): string {\n return Object.entries(palette[theme])\n .map(([key, value]) => `--${key}:${value}`)\n .join(\";\");\n}\n\n/** 字の変数。同梱した 2 つの字を 1 度だけ名指し、字を使う所はどれもこの変数を読む。 */\nexport const FONT_VARS = `--sans:\"${FONTS.sans}\";--mono:\"${FONTS.mono}\"`;\n\n/** 区画や箱を分ける色の役。灰 (slate) と硬貨 (coin) は分類の色として順に配らない。 */\nexport const COLOR_ORDER = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\"] as const;\nexport type ColorKey = (typeof COLOR_ORDER)[number] | \"slate\" | \"coin\";\n\nexport interface TextStyle {\n size: number;\n weight: number;\n family: Family;\n}\n\nconst text = (size: number, weight: number, family: Family = \"sans\"): TextStyle => ({ size, weight, family });\n\n/** 字の大きさと太さ。どれも 10.5 以上にする。 */\nexport const TYPE = {\n boxName: text(13, 650),\n boxSub: text(11, 500),\n boxSubStrong: text(11, 700),\n regionName: text(12.5, 700),\n regionNote: text(11, 500),\n label: text(11, 600, \"mono\"),\n labelJa: text(11, 650),\n action: text(11, 650),\n badge: text(10.5, 700, \"mono\"),\n carrier: text(10.5, 700, \"mono\"),\n carrierJa: text(10.5, 700),\n stripTitle: text(12.5, 700),\n fieldName: text(10.5, 600),\n fieldValue: text(12, 600, \"mono\"),\n fieldValueJa: text(12, 600),\n tag: text(10.5, 700),\n miniTitle: text(10.5, 700),\n stepTitle: text(15, 700),\n stepBody: text(13.5, 500),\n stepNo: text(13, 700, \"mono\"),\n button: text(14, 700),\n} as const;\n\n/** 置き場所と部品の大きさ。単位は図の座標 (字が原寸の時の px)。 */\nexport const LOOK = {\n /** 部品どうしの最小の隙間 */\n gap: 10,\n /** 図の外周の余白 */\n margin: 14,\n box: { h: 72, minW: 92, padX: 12, radius: 12, icon: 24, iconRadius: 7, iconY: -16, iconScale: 0.74, nameY: 12, subY: 27 },\n region: { pad: 18, gap: 10, radius: 14, inset: 14, icon: 24, iconRadius: 7, iconScale: 0.68, nameY: 58, line: 16, minH: 108 },\n architecture: { columns: 4, columnGap: 56, maxColumnGap: 160, rowGap: 44, labelRoom: 16 },\n sequence: { columnGap: 40, labelRoom: 16, firstRow: 22, rowGap: 14, stepGap: 8, minPitch: 40, tail: 18, selfW: 34, selfH: 18 },\n edge: { inset: 3, arrow: 6, arrowHalf: 3.5, parallel: 5, ghostDash: 5, flowDash: 9 },\n label: { h: 20, padX: 9, radius: 10, offset: 22, side: 14, search: 4, searchMax: 400, soft: 6 },\n action: { h: 22, padX: 10, radius: 11 },\n badge: { r: 9.5, ring: 9, inset: 4, along: 14, short: 44 },\n carrier: { envW: 24, envH: 17, coinR: 6.5, coinIn: 3.8, tagH: 18, tagPadX: 8, samples: 16 },\n strip: { h: 72, line: 44, pad: 12, icon: 24, titleX: 44, fieldGap: 22, sepInset: 14, tagGap: 6, tagH: 15, tagPadX: 7, nameY: 22, valueY: 43 },\n stroke: { hair: 1, edge: 1.7, edgeOn: 2.25, arrow: 1.5, flow: 1.3, halo: 7, on: 1.75, glyph: 2, lifeline: 1.2, envelope: 1.5, badgeRing: 1.5 },\n shadow: { near: 0.8, far: 4, nearY: 1, farY: 3 },\n mini: { w: 168, pad: 8, title: 14, inset: 12, radius: 10 },\n /**\n * 寄って追う見せ方の窓の高さの、幅に対する割合と下限。\n * `fitMinH` は見える高さに収める時 (#3047) の窓の高さの下限で、これより低い枠では収めずに枠の中で送る。\n * `narrow` は縦長の全体図を出す枠の幅の下限で、これより狭い枠 (携帯の幅) では全体図を出さずに窓へ幅を渡す (#3055)。\n * `badgeRoom` は番号の丸が窓から外れる段で窓を寄せ直す時に、丸の周りに空ける幅 (#3046)。\n * `headRoom` は時系列図の図の頭の箱の下端から、窓に線を見せ始める所までの幅 (#3118)。\n * `head` は時系列図の窓の上端に貼る頭の列の頭の箱で、アイコンを外した名前と下の字の 2 段 (#3120)。\n * `pad` は頭の列の上下の余白、`h` は箱の高さ、`nameY` と `subY` は箱の上端から名前と下の字の基準線まで\n */\n follow: { aspect: 0.75, minH: 320, fitMinH: 160, ease: 0.6, narrow: 440, badgeRoom: 8, headRoom: 10, head: { pad: 8, h: 40, nameY: 17, subY: 31 } },\n /** 色を混ぜる割合 (%) */\n mix: { icon: 14, regionIcon: 16, regionIconEdge: 34, cap: 12, capEdge: 42, badgePast: 14, badgePastEdge: 70, mini: 62, miniBand: 16, miniBandEdge: 36, view: 6 },\n /** 字の並びの基準線を、置きたい高さの真ん中からどれだけ下げるか */\n baseline: { label: 3.8, badge: 3.5, carrier: 3.7, stripTitle: 4.5, tag: 3.6, action: 3.8 },\n /** 浮いて出る物が下から上がる長さと、弾んで出る物の始まりの大きさ */\n rise: 5,\n popFrom: 0.4,\n /**\n * 動きを嫌わない人の頁の部品。\n * `narrow` は段の本文の帯を横 1 列に並べる帯の中身の幅の下限で、これより狭い帯 (携帯の幅) では題と本文を釦と番号の段の下に置く (#3057、#3069)。\n * `touch` はその狭い帯で段を送る釦の縦横で、指で押せる大きさにする (#3069)\n */\n player: { gap: 10, radius: 12, button: 36, touch: 44, hidden: 1, focus: 2, narrow: 440 },\n} as const;\n\n/** 動きの長さ (秒)。 */\nexport const MOTION = {\n /** 最初の段の前に全体を見せる長さ */\n intro: 1.4,\n /** 最後の段の後に全体を見せる長さ */\n outro: 4.6,\n /** 繰り返す前に消えていく長さ */\n tail: 0.6,\n /** 段の長さ。本文の字数で伸ばし、段で起きることが全部見えてから dwell 秒は留める */\n stepBase: 1.2,\n perChar: 0.025,\n stepMin: 2.2,\n stepMax: 5,\n dwell: 1.2,\n /** 段の中で最初の線を引き始めるまでと、続く線を引き始める間 */\n edgeAt: 0.1,\n stagger: 0.5,\n /** 線を引く長さ。運ぶ物を載せた線は運ぶ物が走るので長い */\n draw: 0.55,\n drawCarry: 0.9,\n /** 処理を読む間 (次の線と書き換えはこれだけ待つ) と、書き換えが続く間 */\n action: 0.9,\n change: 0.12,\n /** 箱の下の字が見えている短さの下限。これより早く次の字に替わる字は出さない */\n minShow: 0.8,\n /** 線の名前が線より遅れて出る長さと、出入りの長さ */\n labelDelay: 0.15,\n fade: 0.3,\n popFade: 0.4,\n untilFade: 0.2,\n /** 段の止め絵を撮る時刻を、段の終わりからどれだけ前にするか */\n still: 0.45,\n} as const;\n\n/** 見せ方を決める字の大きさ。全体を枠に収めた時の箱の名前がこれを下回ると寄って追う。 */\nexport const READABLE_PX = 10.5;\n\n/** 動きの緩急。 */\nexport const EASE = {\n inOut: \"cubic-bezier(.65,0,.35,1)\",\n out: \"cubic-bezier(.22,1,.36,1)\",\n pop: \"cubic-bezier(.34,1.56,.64,1)\",\n} as const;\n","/**\n * 描く部品が出す字 (#3001)。\n *\n * 図の原本は語を持たないので、呼ぶ側が言葉を渡す。渡さなければ日本語で出す。\n * 頁は頁の言葉を、`dragon export` は `--lang` の言葉 (渡さなければ日本語) を渡す。\n */\nimport type { NotationLang } from \"./words\";\n\nexport interface FigureText {\n /** 描けない時の断りの文。`detail` は誤りの場所と文を並べた物 */\n cannotDraw: (detail: string) => string;\n /** 寄って動かす見せ方の、隅の全体図の札 */\n overview: string;\n /** 再生の釦の読み上げの名前 */\n prev: string;\n pause: string;\n play: string;\n next: string;\n /** 段の一覧の読み上げの名前 */\n steps: (title: string) => string;\n}\n\nexport const FIGURE_TEXT: Record<NotationLang, FigureText> = {\n ja: {\n cannotDraw: (detail) => `図を描けない: ${detail}`,\n overview: \"全体図\",\n prev: \"前の段\",\n pause: \"止める\",\n play: \"動かす\",\n next: \"次の段\",\n steps: (title) => `${title} の段`,\n },\n en: {\n cannotDraw: (detail) => `Cannot draw the diagram: ${detail}`,\n overview: \"Overview\",\n prev: \"Previous step\",\n pause: \"Pause\",\n play: \"Play\",\n next: \"Next step\",\n steps: (title) => `Steps of ${title}`,\n },\n};\n","/**\n * 字の幅を、同梱した字の送り幅の表で測る。描かずに測るので、頁の無い所 (node) でも同じ値になる。\n */\nimport { advance, EM, type Family } from \"../look/fonts\";\nimport type { TextStyle } from \"../look/values\";\n\n/** 和文 (CJK) の字を含むか。等幅の字は和文を持たないので、含む字は Noto Sans JP で描く。 */\nexport const hasWide = (text: string): boolean => [...text].some((ch) => (ch.codePointAt(0) ?? 0) >= 0x2e80);\n\n/** 等幅を望む字でも、和文を含めば和文の字で描く。 */\nexport function familyFor(text: string, preferred: Family): Family {\n return preferred === \"mono\" && hasWide(text) ? \"sans\" : preferred;\n}\n\n/** 1 行の字の幅。 */\nexport function textWidth(text: string, style: TextStyle): number {\n const family = familyFor(text, style.family);\n let sum = 0;\n for (const ch of text) sum += advance(ch, family);\n return (sum * style.size) / EM;\n}\n","/**\n * 置き場所を決めた結果 (場面) の形と、図の種類に依らず使う置き方。\n *\n * 座標は字が原寸の時の px で、左上を (0, 0) にする。線の名前は線の脇から箱を避けて置き、\n * 中身の帯は図の下に横いっぱいに置く。\n */\nimport type { Family } from \"../look/fonts\";\nimport { COLOR_ORDER, type ColorKey, LOOK, TYPE } from \"../look/values\";\nimport type { Carry, Diagram, DiagramEvent, LabelSide } from \"../schema\";\nimport { hasWide, textWidth } from \"./measure\";\n\nexport type Point = [number, number];\n\nexport interface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface SceneBox extends Rect {\n id: string;\n name: string;\n sub?: string;\n icon?: string;\n color: ColorKey;\n cx: number;\n cy: number;\n}\n\nexport interface SceneRegion extends Rect {\n id: string;\n /** 名前を折り返した行 */\n lines: string[];\n note?: string;\n icon?: string;\n color: ColorKey;\n /** 名前と印が占める所 */\n header: Rect;\n}\n\n/** 線。`step` と `event` は原本の `steps[step].events[event]` を指す。 */\nexport interface SceneEdge {\n step: number;\n event: number;\n from: string;\n to: string;\n points: Point[];\n color: ColorKey;\n carry: Carry;\n /** 着いた運ぶ物が留まる点。無ければ線の終わり */\n settle?: Point;\n}\n\nexport interface SceneLabel extends Rect {\n step: number;\n event: number;\n text: string;\n family: Family;\n color: ColorKey;\n}\n\n/** 時系列図の箱の中の処理。生存線の上に札で出す。 */\nexport interface SceneAction extends Rect {\n step: number;\n event: number;\n box: string;\n text: string;\n color: ColorKey;\n}\n\nexport interface SceneBadge {\n step: number;\n x: number;\n y: number;\n color: ColorKey;\n}\n\nexport interface SceneLifeline {\n id: string;\n x: number;\n y1: number;\n y2: number;\n}\n\nexport interface SceneField {\n name: string;\n x: number;\n y: number;\n w: number;\n}\n\nexport interface SceneStrip extends Rect {\n title: string;\n fields: SceneField[];\n}\n\nexport interface Layout {\n kind: Diagram[\"kind\"];\n width: number;\n height: number;\n regions: SceneRegion[];\n boxes: SceneBox[];\n lifelines: SceneLifeline[];\n edges: SceneEdge[];\n labels: SceneLabel[];\n actions: SceneAction[];\n badges: SceneBadge[];\n strip?: SceneStrip;\n}\n\nexport type EdgeEvent = Extract<DiagramEvent, { type: \"edge\" }>;\n\n/** 段と線の位置を添えた線の並び。段の順、段の中は起きる順。 */\nexport function edgesOf(diagram: Diagram): { step: number; event: number; edge: EdgeEvent }[] {\n return diagram.steps.flatMap((step, s) =>\n step.events.flatMap((event, e) => (event.type === \"edge\" ? [{ step: s, event: e, edge: event }] : [])),\n );\n}\n\n/** 箱の色。書いていなければ区画の色、区画も無ければ並んだ順に分類の色を配る。 */\nexport function boxColors(diagram: Diagram): Map<string, ColorKey> {\n const regions = regionColors(diagram);\n const colors = new Map<string, ColorKey>();\n diagram.boxes.forEach((box, i) => {\n const fromRegion = box.region === undefined ? undefined : regions.get(box.region);\n colors.set(box.id, box.color ?? fromRegion ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey));\n });\n return colors;\n}\n\nexport function regionColors(diagram: Diagram): Map<string, ColorKey> {\n const colors = new Map<string, ColorKey>();\n (diagram.regions ?? []).forEach((region, i) => colors.set(region.id, region.color ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey)));\n return colors;\n}\n\n/** 線の色。硬貨を運ぶ線は硬貨の色、それ以外は送る側の箱の色。 */\nexport const edgeColor = (edge: EdgeEvent, colors: Map<string, ColorKey>): ColorKey =>\n edge.carry.kind === \"coin\" ? \"coin\" : (colors.get(edge.from) ?? \"slate\");\n\n/** 箱の幅。名前、下の小さな字、書き換わる字、中で出す処理のどれもが収まる幅。 */\nexport function boxWidth(diagram: Diagram, id: string, withActions: boolean): number {\n const box = diagram.boxes.find((b) => b.id === id);\n if (!box) return LOOK.box.minW;\n const lines = [textWidth(box.name, TYPE.boxName), textWidth(box.sub ?? \"\", TYPE.boxSub)];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type === \"swap\" && event.box === id) lines.push(textWidth(event.text, TYPE.boxSubStrong));\n if (withActions && event.type === \"action\" && event.box === id) lines.push(textWidth(event.label, TYPE.boxSubStrong));\n }\n }\n return Math.max(LOOK.box.minW, Math.max(...lines) + LOOK.box.padX * 2);\n}\n\n/** 2 つの四角の隙間。重なる時は負。縦か横のどちらかで離れていれば、その離れ方の大きい方。 */\nexport function gapBetween(a: Rect, b: Rect): number {\n const dx = Math.max(b.x - (a.x + a.w), a.x - (b.x + b.w));\n const dy = Math.max(b.y - (a.y + a.h), a.y - (b.y + b.h));\n return Math.max(dx, dy);\n}\n\n/** 折れ線のうち一番長い区間。 */\nexport function longest(points: Point[]): { a: Point; b: Point; vertical: boolean } {\n let best = { a: points[0] as Point, b: (points[1] ?? points[0]) as Point, length: -1 };\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (length > best.length) best = { a, b, length };\n }\n return { a: best.a, b: best.b, vertical: Math.abs(best.b[0] - best.a[0]) < Math.abs(best.b[1] - best.a[1]) };\n}\n\n/** 折れ線の長さと、始まりから `distance` 進んだ点。 */\nexport function along(points: Point[], distance: number): Point {\n let left = distance;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (left <= length && length > 0) return [a[0] + ((b[0] - a[0]) * left) / length, a[1] + ((b[1] - a[1]) * left) / length];\n left -= length;\n }\n return points[points.length - 1] as Point;\n}\n\nexport function pathLength(points: Point[]): number {\n let sum = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n sum += Math.hypot(b[0] - a[0], b[1] - a[1]);\n }\n return sum;\n}\n\n/** 段の番号を置く点。線の始まりから少し進んだ所。短い線は始まりに置くと箱と重なるので中ほど。 */\nexport function badgeOnPath(points: Point[]): Point {\n const length = pathLength(points);\n return along(points, length < LOOK.badge.short ? length / 2 : LOOK.badge.along);\n}\n\nexport interface LabelRequest {\n step: number;\n event: number;\n text: string;\n points: Point[];\n side?: LabelSide;\n color: ColorKey;\n}\n\nexport interface Obstacles {\n /** 10px 以上離す物 (箱) */\n hard: Rect[];\n /** 重ならなければよい物 (区画の名前、同じ段の線の名前) */\n soft: Rect[];\n}\n\nexport const labelStyle = (text: string) => (hasWide(text) ? TYPE.labelJa : TYPE.label);\n\n/**\n * 線の名前を置く。線の一番長い区間の中ほどから、寄せの指示の側 (無ければ横の線は上、縦の線は右) へ\n * 離して置く。箱や区画の名前に掛かる時は、指示の側へさらに離し、線に沿ってもずらして空きを探す。\n */\nexport function placeLabel(request: LabelRequest, obstacles: Obstacles): SceneLabel {\n const w = textWidth(request.text, labelStyle(request.text)) + LOOK.label.padX * 2;\n const h = LOOK.label.h;\n const segment = longest(request.points);\n const mx = (segment.a[0] + segment.b[0]) / 2;\n const my = (segment.a[1] + segment.b[1]) / 2;\n const side = request.side ?? (segment.vertical ? \"right\" : \"above\");\n const { offset, side: sideGap } = LOOK.label;\n const base: Rect =\n side === \"above\"\n ? { x: mx - w / 2, y: my - offset - h / 2, w, h }\n : side === \"below\"\n ? { x: mx - w / 2, y: my + offset - h / 2, w, h }\n : side === \"left\"\n ? { x: mx - sideGap - w, y: my - h / 2, w, h }\n : { x: mx + sideGap, y: my - h / 2, w, h };\n // 離す向き (指示の側) と、ずらす向き (それに直交する向き)\n const away: Point = side === \"above\" ? [0, -1] : side === \"below\" ? [0, 1] : side === \"left\" ? [-1, 0] : [1, 0];\n const slideAxis: Point = [Math.abs(away[1]), Math.abs(away[0])];\n const slideMax = side === \"above\" || side === \"below\" ? w : h * 4;\n const clear = (rect: Rect): boolean =>\n obstacles.hard.every((box) => gapBetween(rect, box) >= LOOK.gap) && obstacles.soft.every((other) => gapBetween(rect, other) >= LOOK.label.soft);\n const { search, searchMax } = LOOK.label;\n for (let d = 0; d <= searchMax; d += search) {\n for (let s = 0; s <= slideMax; s += search) {\n for (const sign of s === 0 ? [1] : [1, -1]) {\n const rect = { x: base.x + away[0] * d + slideAxis[0] * s * sign, y: base.y + away[1] * d + slideAxis[1] * s * sign, w, h };\n if (clear(rect)) return { ...rect, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n }\n }\n }\n return { ...base, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n}\n\n/** 中身の帯の欄の幅。欄の名前と、入る値と札を並べた最も長い形が収まる幅。 */\nfunction fieldWidth(diagram: Diagram, name: string): number {\n let value = 0;\n let tag = 0;\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"strip\" || event.field !== name) continue;\n if (event.value !== undefined) value = Math.max(value, textWidth(event.value, hasWide(event.value) ? TYPE.fieldValueJa : TYPE.fieldValue));\n if (event.tag !== undefined) tag = Math.max(tag, textWidth(event.tag, TYPE.tag) + LOOK.strip.tagPadX * 2);\n }\n }\n const both = value + (tag > 0 ? (value > 0 ? LOOK.strip.tagGap : 0) + tag : 0);\n return Math.max(textWidth(name, TYPE.fieldName), both);\n}\n\n/** 1 行に並べた時に帯が要る幅。 */\nexport function stripNeed(diagram: Diagram): number {\n if (!diagram.strip) return 0;\n const { titleX, fieldGap, pad } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n return start + diagram.strip.fields.reduce((sum, name) => sum + fieldWidth(diagram, name) + fieldGap, 0) - fieldGap + pad;\n}\n\n/** 中身の帯。欄は左から並べ、幅に収まらない欄は次の行へ送る。 */\nexport function layoutStrip(diagram: Diagram, x: number, y: number, width: number): SceneStrip | undefined {\n if (!diagram.strip) return undefined;\n const { titleX, fieldGap, pad, line, h } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n const fields: SceneField[] = [];\n let cx = start;\n let row = 0;\n for (const name of diagram.strip.fields) {\n const w = fieldWidth(diagram, name);\n if (cx > start && cx + w > width - pad) {\n cx = start;\n row++;\n }\n fields.push({ name, x: x + cx, y: y + row * line, w });\n cx += w + fieldGap;\n }\n return { x, y, w: width, h: h + row * line, title: diagram.strip.title, fields };\n}\n\n/** 場面の全ての物を (dx, dy) だけ動かす。区画と帯は動かさず、横いっぱいの形を保つ。 */\nexport function shiftContent(layout: Layout, dx: number, dy: number): void {\n const move = (rect: Rect): void => {\n rect.x += dx;\n rect.y += dy;\n };\n for (const box of layout.boxes) {\n move(box);\n box.cx += dx;\n box.cy += dy;\n }\n for (const region of layout.regions) {\n region.y += dy;\n move(region.header);\n }\n for (const line of layout.lifelines) {\n line.x += dx;\n line.y1 += dy;\n line.y2 += dy;\n }\n for (const edge of layout.edges) {\n edge.points = edge.points.map(([px, py]) => [px + dx, py + dy]);\n if (edge.settle) edge.settle = [edge.settle[0] + dx, edge.settle[1] + dy];\n }\n for (const label of layout.labels) move(label);\n for (const action of layout.actions) move(action);\n for (const badge of layout.badges) {\n badge.x += dx;\n badge.y += dy;\n }\n if (layout.strip) {\n layout.strip.y += dy;\n for (const field of layout.strip.fields) {\n field.x += dx;\n field.y += dy;\n }\n }\n}\n\n/** 線も処理も無い段の番号。書き換わる箱の左上か、中身の帯の左上か、最初の箱の左上。 */\nexport function cornerBadge(events: DiagramEvent[], step: number, layout: Layout): SceneBadge {\n const { inset } = LOOK.badge;\n for (const event of events) {\n const id = event.type === \"swap\" || event.type === \"action\" ? event.box : undefined;\n const box = layout.boxes.find((b) => b.id === id);\n if (box) return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n }\n if (layout.strip && events.some((event) => event.type === \"strip\")) return { step, x: layout.strip.x + inset, y: layout.strip.y + inset, color: \"slate\" };\n const box = layout.boxes[0] as SceneBox;\n return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n}\n","/**\n * 構成図の置き場所。\n *\n * 区画を上から帯に積み、帯の左に区画の名前を置く。箱は全ての帯で共通の列に並べるので、\n * 区画をまたぐ線は縦にまっすぐ走る。箱の並びは線を辿って決める。前の区画の箱から線が来る箱を\n * その箱の列に置き、そこから線で繋がる箱を隣の列へ (寄せの指示が左か右なら下の行へ) 置いていく。\n * 線は縦と横の折れ線で、間にある箱を避ける。名前が箱に掛かる時は帯を広げて名前の場所を空ける。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram, LabelSide, Region } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n boxWidth,\n cornerBadge,\n edgeColor,\n edgesOf,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type Rect,\n regionColors,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n type SceneRegion,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\ninterface Group {\n region?: Region;\n members: string[];\n}\n\ninterface Slot {\n group: number;\n col: number;\n row: number;\n}\n\ninterface Room {\n top: number;\n bottom: number;\n}\n\nexport function layoutArchitecture(diagram: Diagram): Layout {\n const groups = groupsOf(diagram);\n const slots = placeBoxes(diagram, groups);\n const rooms = groups.map(() => ({ top: 0, bottom: 0 }));\n let layout = arrange(diagram, groups, slots, rooms);\n // 名前を置く場所が帯の外へ出たら、その帯を広げて置き直す\n for (let pass = 0; pass < 3 && grow(layout, groups, slots, rooms); pass++) layout = arrange(diagram, groups, slots, rooms);\n return layout;\n}\n\nfunction groupsOf(diagram: Diagram): Group[] {\n const regions = diagram.regions ?? [];\n const known = new Set(regions.map((r) => r.id));\n const groups: Group[] = regions.map((region) => ({ region, members: diagram.boxes.filter((b) => b.region === region.id).map((b) => b.id) }));\n const loose = diagram.boxes.filter((b) => b.region === undefined || !known.has(b.region)).map((b) => b.id);\n if (loose.length > 0) groups.push({ members: loose });\n return groups;\n}\n\nconst vertical = (side: LabelSide | undefined): boolean => side === \"left\" || side === \"right\";\n\n/** 箱を列と行へ置く。列は全ての区画で共通。 */\nfunction placeBoxes(diagram: Diagram, groups: Group[]): Map<string, Slot> {\n const columns = LOOK.architecture.columns;\n const edges = edgesOf(diagram).map((e) => e.edge);\n const slots = new Map<string, Slot>();\n groups.forEach((group, g) => {\n const inGroup = new Set(group.members);\n const taken = new Set<string>();\n const free = (col: number, row: number): boolean => col >= 0 && col < columns && !taken.has(`${col},${row}`);\n const near = (col: number, row: number): [number, number] => {\n const start = Math.min(columns - 1, Math.max(0, col));\n for (let r = row; ; r++) {\n for (let d = 0; d < columns; d++) {\n for (const c of [start + d, start - d]) if (free(c, r)) return [c, r];\n }\n }\n };\n const put = (id: string, col: number, row: number): void => {\n slots.set(id, { group: g, col, row });\n taken.add(`${col},${row}`);\n };\n let dir = 1;\n const visit = (id: string): void => {\n for (const edge of edges) {\n const partner = edge.from === id ? edge.to : edge.to === id ? edge.from : undefined;\n if (partner === undefined || !inGroup.has(partner) || slots.has(partner)) continue;\n const me = slots.get(id) as Slot;\n const [c, r] = vertical(edge.labelSide) ? near(me.col, me.row + 1) : free(me.col + dir, me.row) ? [me.col + dir, me.row] : near(me.col + dir, me.row);\n put(partner, c, r);\n visit(partner);\n }\n };\n // 前の区画の箱と線で繋がる箱 (起きる順に早い線から) をその箱の列に置き、そこから辿る\n const anchorOf = (id: string): { order: number; col: number } | undefined => {\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i];\n const partner = edge?.from === id ? edge.to : edge?.to === id ? edge.from : undefined;\n const slot = partner === undefined ? undefined : slots.get(partner);\n if (slot && slot.group < g) return { order: i, col: slot.col };\n }\n return undefined;\n };\n let placed = 0;\n for (;;) {\n const rest = group.members.filter((id) => !slots.has(id));\n if (rest.length === 0) break;\n const anchored = rest.map((id) => ({ id, anchor: anchorOf(id) })).filter((a) => a.anchor !== undefined);\n anchored.sort((a, b) => (a.anchor?.order ?? 0) - (b.anchor?.order ?? 0));\n const pick = anchored[0] ?? { id: rest[0] as string, anchor: undefined };\n const want = pick.anchor?.col ?? 0;\n if (placed === 0) dir = want >= (columns - 1) / 2 ? -1 : 1;\n const [c, r] = free(want, 0) ? [want, 0] : near(want, 0);\n put(pick.id, c, r);\n visit(pick.id);\n placed++;\n }\n });\n // 使っていない列を詰める\n const used = [...new Set([...slots.values()].map((s) => s.col))].sort((a, b) => a - b);\n for (const slot of slots.values()) slot.col = used.indexOf(slot.col);\n return slots;\n}\n\n/** 区画の名前の行。空白があれば真ん中に近い空白で 2 行に折る。 */\nfunction nameLines(name: string): string[] {\n const spaces = [...name.matchAll(/ /g)].map((m) => m.index);\n if (spaces.length === 0) return [name];\n const at = spaces.reduce((best, i) => (Math.abs(i - name.length / 2) < Math.abs(best - name.length / 2) ? i : best));\n return [name.slice(0, at), name.slice(at + 1)];\n}\n\nfunction headerSize(region: Region): { w: number; h: number; lines: string[] } {\n const { icon, nameY, line, inset } = LOOK.region;\n const lines = nameLines(region.name);\n const w = Math.max(icon, ...lines.map((l) => textWidth(l, TYPE.regionName)), textWidth(region.note ?? \"\", TYPE.regionNote));\n // 名前の最後の行の下と、添え書きの下まで\n const h = nameY - inset + (lines.length - 1) * line + (region.note ? line : 0) + LOOK.gap / 2;\n return { w, h, lines };\n}\n\nfunction arrange(diagram: Diagram, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): Layout {\n const { box: B, region: R, architecture: A, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const regionColor = regionColors(diagram);\n const edges = edgesOf(diagram);\n\n // 列の幅と列の間。隣の列を横に結ぶ名前のある線は、名前が収まるまで間を広げる (広げすぎる時は脇へ寄せる)\n const columnCount = Math.max(1, ...[...slots.values()].map((s) => s.col + 1));\n const widths = new Map(diagram.boxes.map((b) => [b.id, boxWidth(diagram, b.id, true)]));\n const colW = Array.from({ length: columnCount }, (_, c) => Math.max(B.minW, ...[...slots].filter(([, s]) => s.col === c).map(([id]) => widths.get(id) ?? B.minW)));\n const between = Array.from({ length: Math.max(0, columnCount - 1) }, () => A.columnGap as number);\n for (const { edge } of edges) {\n const a = slots.get(edge.from);\n const b = slots.get(edge.to);\n if (!a || !b || edge.label === undefined || a.group !== b.group || a.row !== b.row || Math.abs(a.col - b.col) !== 1 || vertical(edge.labelSide)) continue;\n const need = textWidth(edge.label, labelStyle(edge.label)) + LOOK.label.padX * 2 + A.labelRoom * 2;\n const i = Math.min(a.col, b.col);\n if (need <= A.maxColumnGap) between[i] = Math.max(between[i] ?? 0, need);\n }\n const headers = groups.map((g) => (g.region ? headerSize(g.region) : undefined));\n const headerW = Math.max(0, ...headers.map((h) => (h ? h.w + R.inset * 2 : 0)));\n const colLeft: number[] = [];\n for (let c = 0; c < columnCount; c++) colLeft.push(c === 0 ? margin + (headerW > 0 ? headerW : R.pad) : (colLeft[c - 1] as number) + (colW[c - 1] as number) + (between[c - 1] as number));\n const center = (c: number): number => (colLeft[c] as number) + (colW[c] as number) / 2;\n\n // 帯を上から積む\n const boxes: SceneBox[] = [];\n const bands: { group: number; y: number; h: number; rows: number }[] = [];\n let cursor = margin;\n groups.forEach((group, g) => {\n const rows = Math.max(1, ...group.members.map((id) => (slots.get(id)?.row ?? 0) + 1));\n const room = rooms[g] as Room;\n const top = cursor + R.pad + room.top;\n for (const id of group.members) {\n const slot = slots.get(id) as Slot;\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths.get(id) ?? B.minW;\n const cx = center(slot.col);\n const y = top + slot.row * (B.h + A.rowGap);\n boxes.push({\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y,\n w,\n h: B.h,\n cx,\n cy: y + B.h / 2,\n });\n }\n const contentBottom = top + rows * B.h + (rows - 1) * A.rowGap;\n const header = headers[g];\n const h = Math.max(contentBottom + R.pad + room.bottom - cursor, header ? header.h + R.inset * 2 : 0, group.region ? R.minH : 0);\n bands.push({ group: g, y: cursor, h, rows });\n cursor += h + R.gap;\n });\n const bandsBottom = cursor - R.gap;\n\n const byId = new Map(boxes.map((b) => [b.id, b]));\n const bandOf = (id: string) => bands[slots.get(id)?.group ?? 0] as (typeof bands)[number];\n const blocked = (points: Point[], a: string, b: string): boolean =>\n boxes.some((box) => {\n if (box.id === a || box.id === b) return false;\n const pad = LOOK.label.search;\n for (let i = 1; i < points.length; i++) {\n const [x1, y1] = points[i - 1] as Point;\n const [x2, y2] = points[i] as Point;\n if (Math.min(x1, x2) <= box.x + box.w + pad && Math.max(x1, x2) >= box.x - pad && Math.min(y1, y2) <= box.y + box.h + pad && Math.max(y1, y2) >= box.y - pad) return true;\n }\n return false;\n });\n // 箱の下 (上) の、次の行か次の帯との間の真ん中\n const laneBelow = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) < band.rows - 1 ? box.y + box.h + A.rowGap / 2 : Math.min(box.y + box.h + R.pad / 2, band.y + band.h - LOOK.edge.inset);\n };\n const laneAbove = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) > 0 ? box.y - A.rowGap / 2 : Math.max(box.y - R.pad / 2, band.y + LOOK.edge.inset);\n };\n const inset = LOOK.edge.inset;\n const route = (from: string, to: string): Point[] => {\n const a = byId.get(from) as SceneBox;\n const b = byId.get(to) as SceneBox;\n const sa = slots.get(from) as Slot;\n const sb = slots.get(to) as Slot;\n if (sa.group === sb.group && sa.row === sb.row) {\n const right = b.cx > a.cx;\n const straight: Point[] = [\n [right ? a.x + a.w : a.x, a.cy],\n [right ? b.x - inset : b.x + b.w + inset, b.cy],\n ];\n if (!blocked(straight, from, to)) return straight;\n const lane = laneBelow(from);\n return [\n [a.cx, a.y + a.h],\n [a.cx, lane],\n [b.cx, lane],\n [b.cx, b.y + b.h + inset],\n ];\n }\n const down = b.cy > a.cy;\n const leave: Point = [a.cx, down ? a.y + a.h : a.y];\n const enter: Point = [b.cx, down ? b.y - inset : b.y + b.h + inset];\n if (sa.col === sb.col) {\n const straight: Point[] = [leave, enter];\n if (!blocked(straight, from, to)) return straight;\n const x = a.x + a.w + (between[sa.col] ?? A.columnGap) / 2;\n return [\n [a.x + a.w, a.cy],\n [x, a.cy],\n [x, b.cy],\n [b.x + b.w + inset, b.cy],\n ];\n }\n const right = b.cx > a.cx;\n const lane = down ? laneBelow(from) : laneAbove(from);\n const candidates: Point[][] = [\n [leave, [a.cx, b.cy], [right ? b.x - inset : b.x + b.w + inset, b.cy]],\n [[right ? a.x + a.w : a.x, a.cy], [b.cx, a.cy], enter],\n [leave, [a.cx, lane], [b.cx, lane], enter],\n ];\n return candidates.find((points) => !blocked(points, from, to)) ?? (candidates[2] as Point[]);\n };\n\n const sceneEdges: SceneEdge[] = edges.map(({ step, event, edge }) => {\n const target = byId.get(edge.to) as SceneBox;\n return {\n step,\n event,\n from: edge.from,\n to: edge.to,\n points: route(edge.from, edge.to),\n color: edgeColor(edge, colors),\n carry: edge.carry,\n settle: [target.cx, target.cy + B.iconY],\n };\n });\n // 同じ 2 つの箱を行きと帰りで結ぶまっすぐな線は、少しずらして重ならないようにする\n for (const edge of sceneEdges) {\n if (edge.points.length !== 2) continue;\n const back = sceneEdges.some((other) => other.from === edge.to && other.to === edge.from && other.points.length === 2);\n if (!back) continue;\n const [p, q] = edge.points as [Point, Point];\n const flat = Math.abs(q[1] - p[1]) < Math.abs(q[0] - p[0]);\n const d = (edge.from < edge.to ? 1 : -1) * LOOK.edge.parallel;\n edge.points = edge.points.map(([x, y]) => (flat ? [x, y + d] : [x + d, y]));\n }\n\n const regions: SceneRegion[] = [];\n groups.forEach((group, g) => {\n const band = bands[g] as (typeof bands)[number];\n const header = headers[g];\n if (!group.region || !header) return;\n regions.push({\n id: group.region.id,\n lines: header.lines,\n ...(group.region.note !== undefined ? { note: group.region.note } : {}),\n ...(group.region.icon !== undefined ? { icon: group.region.icon } : {}),\n color: regionColor.get(group.region.id) ?? \"slate\",\n x: margin,\n y: band.y,\n w: 0,\n h: band.h,\n header: { x: margin + R.inset, y: band.y + R.inset, w: header.w, h: header.h },\n });\n });\n\n const labels: SceneLabel[] = [];\n for (const edge of sceneEdges) {\n const source = diagram.steps[edge.step]?.events[edge.event];\n if (source?.type !== \"edge\" || source.label === undefined) continue;\n const soft: Rect[] = [...regions.map((r) => r.header), ...labels.filter((l) => l.step === edge.step)];\n labels.push(\n placeLabel(\n { step: edge.step, event: edge.event, text: source.label, points: edge.points, color: edge.color, ...(source.labelSide ? { side: source.labelSide } : {}) },\n { hard: boxes, soft },\n ),\n );\n }\n\n const layout: Layout = { kind: \"architecture\", width: 0, height: 0, regions, boxes, lifelines: [], edges: sceneEdges, labels, actions: [], badges: [] };\n // 名前が左へ出たら、帯の中身を右へ寄せる。帯は図の幅いっぱいに引き直す\n const shift = labels.length > 0 ? Math.max(0, margin + LOOK.label.soft - Math.min(...labels.map((l) => l.x))) : 0;\n if (shift > 0) shiftContent(layout, shift, 0);\n const contentRight = Math.max(...boxes.map((b) => b.x + b.w + R.pad), ...labels.map((l) => l.x + l.w + LOOK.label.soft), ...sceneEdges.flatMap((e) => e.points.map((p) => p[0] + R.pad)));\n const width = Math.max(contentRight + margin, stripNeed(diagram) + margin * 2);\n for (const region of regions) region.w = width - margin * 2;\n const strip = layoutStrip(diagram, margin, bandsBottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bandsBottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = diagram.steps.map((step, s) => {\n const edge = sceneEdges.find((e) => e.step === s);\n if (!edge) return cornerBadge(step.events, s, layout);\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n });\n return layout;\n}\n\n/** 区画の中を結ぶ線の名前が帯の外へ出ていたら、その分だけ帯の上か下を広げる。広げたら true。 */\nfunction grow(layout: Layout, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): boolean {\n let grown = false;\n const soft = LOOK.label.soft;\n for (const label of layout.labels) {\n const edge = layout.edges.find((e) => e.step === label.step && e.event === label.event);\n const a = edge && slots.get(edge.from);\n const b = edge && slots.get(edge.to);\n if (!a || !b || a.group !== b.group || !groups[a.group]?.region) continue;\n const region = layout.regions.find((r) => r.id === groups[a.group]?.region?.id);\n const room = rooms[a.group];\n if (!region || !room) continue;\n const over = region.y + soft - label.y;\n const under = label.y + label.h - (region.y + region.h - soft);\n if (over > 0) {\n room.top += over;\n grown = true;\n }\n if (under > 0) {\n room.bottom += under;\n grown = true;\n }\n }\n return grown;\n}\n","/**\n * 時系列図の置き場所。\n *\n * 生存線の頭の箱を上に横 1 列に並べ、段で起きる線と処理を起きる順に 1 行ずつ下へ積む。\n * 生存線の間は、箱の幅と、その間を走る線の名前が収まる幅を取る。中身の帯は一番下に置く。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n cornerBadge,\n boxWidth,\n edgeColor,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type SceneAction,\n type SceneBadge,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\nexport function layoutSequence(diagram: Diagram): Layout {\n const { box: B, sequence: Q, label: L, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const listed = diagram.sequence?.lifelines ?? [];\n const order = [...listed, ...diagram.boxes.map((b) => b.id).filter((id) => !listed.includes(id))];\n const column = new Map(order.map((id, i) => [id, i]));\n const widths = order.map((id) => boxWidth(diagram, id, false));\n\n // 生存線の間。隣の箱どうしの隙間を取り、名前のある線が走る間は名前が収まるまで広げる\n const spacing = widths.slice(1).map((w, i) => (widths[i] as number) / 2 + w / 2 + Q.columnGap);\n const needs: { from: number; to: number; need: number }[] = [];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"edge\" || event.label === undefined) continue;\n const a = column.get(event.from) ?? 0;\n const b = column.get(event.to) ?? 0;\n const w = textWidth(event.label, labelStyle(event.label)) + L.padX * 2;\n if (a === b) {\n // 自分へ戻る線は名前を右に置くので、右の生存線までに輪と名前が収まる幅を取る\n if (a < spacing.length) needs.push({ from: a, to: a + 1, need: Q.selfW + L.side + w + Q.labelRoom });\n } else {\n needs.push({ from: Math.min(a, b), to: Math.max(a, b), need: w + Q.labelRoom * 2 });\n }\n }\n }\n needs.sort((x, y) => x.to - x.from - (y.to - y.from));\n for (const { from, to, need } of needs) {\n let have = 0;\n for (let i = from; i < to; i++) have += spacing[i] ?? 0;\n if (have >= need) continue;\n const add = (need - have) / (to - from);\n for (let i = from; i < to; i++) spacing[i] = (spacing[i] ?? 0) + add;\n }\n const xs: number[] = [];\n order.forEach((_, i) => xs.push(i === 0 ? margin + (widths[0] as number) / 2 : (xs[i - 1] as number) + (spacing[i - 1] as number)));\n\n const boxes: SceneBox[] = order.map((id, i) => {\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths[i] as number;\n const cx = xs[i] as number;\n return {\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y: margin,\n w,\n h: B.h,\n cx,\n cy: margin + B.h / 2,\n };\n });\n const headBottom = margin + B.h;\n\n // 行を積む。線は上か下に名前を、処理は札を持つので、行ごとに上下に要る高さが違う\n const edges: SceneEdge[] = [];\n const actions: SceneAction[] = [];\n const requests: Parameters<typeof placeLabel>[0][] = [];\n let y = headBottom + Q.firstRow;\n let below = 0;\n let first = true;\n diagram.steps.forEach((step, s) => {\n step.events.forEach((event, e) => {\n if (event.type !== \"edge\" && event.type !== \"action\") return;\n let above: number;\n let under: number;\n if (event.type === \"edge\") {\n const side = event.labelSide ?? \"above\";\n const self = event.from === event.to;\n const named = event.label !== undefined;\n above = named && side === \"above\" ? L.offset + L.h / 2 : gap;\n under = self ? Q.selfH + gap : named && side === \"below\" ? L.offset + L.h / 2 : gap;\n } else {\n above = LOOK.action.h / 2;\n under = LOOK.action.h / 2;\n }\n y = first ? y + above : y + Math.max(Q.minPitch, below + Q.rowGap + above) + (e === 0 && s > 0 ? Q.stepGap : 0);\n first = false;\n below = under;\n\n if (event.type === \"edge\") {\n const xf = xs[column.get(event.from) ?? 0] as number;\n const xt = xs[column.get(event.to) ?? 0] as number;\n const dir = Math.sign(xt - xf) || 1;\n const points: Point[] =\n xf === xt\n ? [\n [xf, y],\n [xf + Q.selfW, y],\n [xf + Q.selfW, y + Q.selfH],\n [xf + LOOK.edge.inset, y + Q.selfH],\n ]\n : [\n [xf, y],\n [xt - dir * LOOK.edge.inset, y],\n ];\n const color = edgeColor(event, colors);\n edges.push({ step: s, event: e, from: event.from, to: event.to, points, color, carry: event.carry });\n if (event.label !== undefined) {\n requests.push({\n step: s,\n event: e,\n text: event.label,\n points,\n color,\n ...(event.labelSide ? { side: event.labelSide } : xf === xt ? { side: \"right\" as const } : {}),\n });\n }\n } else {\n // 札は生存線の上の番号の丸を隠さないよう、丸の右に出す (#3017)\n const x = xs[column.get(event.box) ?? 0] as number;\n const w = textWidth(event.label, TYPE.action) + LOOK.action.padX * 2;\n actions.push({ step: s, event: e, box: event.box, text: event.label, color: colors.get(event.box) ?? \"slate\", x: x + LOOK.badge.r + 4, y: y - LOOK.action.h / 2, w, h: LOOK.action.h });\n }\n });\n });\n const bottom = (first ? headBottom : y + below) + Q.tail;\n const lifelines = order.map((id, i) => ({ id, x: xs[i] as number, y1: headBottom, y2: bottom }));\n\n const labels: SceneLabel[] = [];\n for (const request of requests) {\n const soft = [...labels.filter((l) => l.step === request.step), ...actions];\n labels.push(placeLabel(request, { hard: boxes, soft }));\n }\n\n const layout: Layout = { kind: \"sequence\", width: 0, height: 0, regions: [], boxes, lifelines, edges, labels, actions, badges: [] };\n\n // 図の幅。名前が左に出たら全体を右へ寄せ、右端は一番右の物に余白を足した所\n const lefts = [...boxes.map((b) => b.x), ...labels.map((l) => l.x), ...actions.map((a) => a.x)];\n const shift = Math.max(0, margin - Math.min(...lefts));\n if (shift > 0) shiftContent(layout, shift, 0);\n const rights = [...boxes.map((b) => b.x + b.w), ...labels.map((l) => l.x + l.w), ...actions.map((a) => a.x + a.w), ...edges.flatMap((edge) => edge.points.map((p) => p[0]))];\n const width = Math.max(Math.max(...rights) + margin, stripNeed(diagram) + margin * 2);\n const strip = layoutStrip(diagram, margin, bottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = badges(diagram, layout);\n return layout;\n}\n\n/**\n * 段の番号。その段の最初の線の始まりに置き、線が無ければ処理する箱の生存線の上、無ければ書き換わる箱の角。\n * 処理の札はその段の終わりに消えるので、札に付けると止め絵で丸だけが浮く (#3017)。\n */\nfunction badges(diagram: Diagram, layout: Layout): SceneBadge[] {\n return diagram.steps.map((step, s) => {\n const edge = layout.edges.find((e) => e.step === s);\n if (edge) {\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n }\n const action = layout.actions.find((a) => a.step === s);\n const lifeline = action && layout.lifelines.find((l) => l.id === action.box);\n if (action && lifeline) return { step: s, x: lifeline.x, y: action.y + action.h / 2, color: action.color };\n return cornerBadge(step.events, s, layout);\n });\n}\n","/**\n * 段ごとの始まりと長さと、線、運ぶ物、線の名前、段の番号が見える時刻の表。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/** 箱の下の小さな字。基準線を `y` に置き、起きたことに合わせて書き換わる。 */\nfunction subLines(box: SceneBox, m: Motion, changes: SubChange[], y: number): string {\n const seq: SubChange[] = [[0, box.sub ?? \"\", \"dg-ss\"], ...changes];\n return seq\n .map(([t, text, cls], k) => {\n const next = seq[k + 1]?.[0];\n const anim = k === 0 ? (next === undefined ? \"\" : m.until(next - MOTION.untilFade)) : next === undefined ? m.rise(t) : m.rise(t, next - MOTION.untilFade);\n if (text === \"\") return \"\";\n return `<g${anim ? ` class=\"dg-a\" style=\"${anim}\"` : \"\"}><text class=\"${cls}\" x=\"${r1(box.cx)}\" y=\"${r1(y)}\" text-anchor=\"middle\">${esc(text)}</text></g>`;\n })\n .join(\"\");\n}\n\n/** 箱の地と縁。上端 `y` から高さ `h`。動く段 (`act` の間) は縁に色を付け、外側に淡い光を足す。 */\nfunction cardFrame(box: SceneBox, ctx: Ctx, act: string | undefined, y: number, h: number): string {\n const rect = (cls: string, extra = \"\"): string => `<rect class=\"${cls}\" x=\"${r1(box.x)}\" y=\"${r1(y)}\" width=\"${r1(box.w)}\" height=\"${h}\" rx=\"${LOOK.box.radius}\"${extra}/>`;\n return `${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-halo\")}</g>` : \"\"}${rect(\"dg-st\", ` ${ctx.sh}`)}${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-on\")}</g>` : \"\"}`;\n}\n\n/** 箱。動く段は縁に色を付け、外側に淡い光を足す。下の小さな字は起きたことに合わせて書き換わる。 */\nexport function card(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { icon, iconRadius, iconScale, iconY, nameY, subY } = LOOK.box;\n const subs = subLines(box, ctx.m, changes, box.cy + subY);\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n const mark =\n box.icon && ICONS[box.icon]\n ? `<rect class=\"dg-ic\" x=\"${r1(box.cx - icon / 2)}\" y=\"${r1(box.cy + iconY - icon / 2)}\" width=\"${icon}\" height=\"${icon}\" rx=\"${iconRadius}\"/>${glyph(box.icon, box.cx, box.cy + iconY, iconScale)}`\n : \"\";\n return (\n `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, box.y, box.h)}` +\n `${mark}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(box.cy + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`\n );\n}\n\n/**\n * 寄って追う時系列図の窓の上端に貼る頭の箱 (#3120)。図の頭の箱と同じ横の位置と縁で、アイコンを外して名前と下の字の 2 段にする。\n * 携帯の幅では窓が低く、図の頭の箱のままでは窓の高さの 3 割を頭の列が取るため。\n */\nexport function headCard(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { pad, h, nameY, subY } = LOOK.follow.head;\n const subs = subLines(box, ctx.m, changes, pad + subY);\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n return `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, pad, h)}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(pad + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`;\n}\n\nexport function lifeline(x: number, y1: number, y2: number): string {\n return `<line class=\"dg-ll\" x1=\"${r1(x)}\" y1=\"${r1(y1)}\" x2=\"${r1(x)}\" y2=\"${r1(y2)}\"/>`;\n}\n\n/**\n * 線。点線で道を見せておき、その段で色の線を引いて、段の終わりまで流れる点で向きを見せる。\n * 済んだ段は薄く残し、最後の段の後に通った道を全て濃くし直す。\n */\nexport function edge(e: SceneEdge, time: EdgeTime, ctx: Ctx): { base: string; lit: string } {\n const { m } = ctx;\n const d = pathOf(e.points);\n const head = arrowHead(e.points);\n const { start: a, drawn: b, end } = time;\n const tail: Frame[] = [\n [end, { opacity: 1 }, EASE.inOut],\n [end + 0.4, { opacity: 0.45 }],\n [ctx.end + 0.3, { opacity: 0.45 }, EASE.inOut],\n [ctx.end + 1, { opacity: 0.95 }],\n [m.last, { opacity: 0.95 }, EASE.inOut],\n [m.total, { opacity: 0 }],\n ];\n const line = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 1 }],\n [a, { opacity: 0, \"stroke-dashoffset\": 1 }, EASE.inOut],\n [a + 0.05, { opacity: 1 }],\n [b, { \"stroke-dashoffset\": 0 }],\n [m.last, { \"stroke-dashoffset\": 0 }],\n [m.total, { \"stroke-dashoffset\": 1 }],\n ...tail,\n ]);\n const hk = m.kf([[0, { opacity: 0 }], [b - 0.05, { opacity: 0 }], [b, { opacity: 1 }], ...tail]);\n const run = -(end - b) * 26;\n const flow = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b + 0.25, { opacity: 0.9 }],\n [end - 0.1, { opacity: 0.9 }, EASE.inOut],\n [end + 0.2, { opacity: 0, \"stroke-dashoffset\": run }],\n [m.total, { opacity: 0, \"stroke-dashoffset\": run }],\n ]);\n return {\n base: `<path class=\"dg-e\" d=\"${d}\"/><path class=\"dg-eh\" d=\"${head}\"/>`,\n lit: `<g style=\"${cs(e.color)}\"><path class=\"dg-e-on dg-a\" pathLength=\"1\" d=\"${d}\" style=\"${line}\"/><path class=\"dg-eh-on dg-a\" d=\"${head}\" style=\"${hk}\"/><path class=\"dg-flow dg-a\" d=\"${d}\" style=\"${flow}\"/></g>`,\n };\n}\n\n/** 線の名前の札。その段の間だけ出し、段の終わりまでに消え終わる。 */\nexport function label(l: SceneLabel, time: LabelTime, ctx: Ctx): string {\n const ja = l.family === \"sans\" ? \" dg-capj\" : \"\";\n const { radius } = LOOK.label;\n return `<g class=\"dg-cap${ja} dg-a\" style=\"${cs(l.color)};${ctx.m.rise(time.start, time.end, true)}\"><rect x=\"${r1(l.x)}\" y=\"${r1(l.y)}\" width=\"${r1(l.w)}\" height=\"${l.h}\" rx=\"${radius}\"/><text x=\"${r1(l.x + l.w / 2)}\" y=\"${r1(l.y + l.h / 2 + LOOK.baseline.label)}\" text-anchor=\"middle\">${esc(l.text)}</text></g>`;\n}\n\n/** 時系列図の箱の中の処理の札。その段の間だけ生存線の上に出す。 */\nexport function action(a: SceneAction, at: number, until: number, ctx: Ctx): string {\n return `<g class=\"dg-act dg-a\" style=\"${cs(a.color)};${ctx.m.rise(at, until, true)}\"><rect x=\"${r1(a.x)}\" y=\"${r1(a.y)}\" width=\"${r1(a.w)}\" height=\"${a.h}\" rx=\"${LOOK.action.radius}\"/><text x=\"${r1(a.x + a.w / 2)}\" y=\"${r1(a.y + a.h / 2 + LOOK.baseline.action)}\" text-anchor=\"middle\">${esc(a.text)}</text></g>`;\n}\n\nfunction carrierShape(e: SceneEdge, sh: string): string {\n const C = LOOK.carrier;\n if (e.carry.kind === \"coin\") return `<circle class=\"dg-coin\" r=\"${C.coinR}\"/><circle class=\"dg-coin-in\" r=\"${C.coinIn}\"/>`;\n if (e.carry.kind === \"tag\") {\n const text = e.carry.text;\n const ja = hasWide(text);\n const w = textWidth(text, ja ? TYPE.carrierJa : TYPE.carrier) + C.tagPadX * 2;\n return `<rect class=\"dg-car\" x=\"${r1(-w / 2)}\" y=\"${-C.tagH / 2}\" width=\"${r1(w)}\" height=\"${C.tagH}\" rx=\"${C.tagH / 2}\" ${sh}/><text class=\"dg-car-t${ja ? \" dg-car-tj\" : \"\"}\" y=\"${LOOK.baseline.carrier}\" text-anchor=\"middle\">${esc(text)}</text>`;\n }\n return `<rect class=\"dg-env\" x=\"${-C.envW / 2}\" y=\"${-C.envH / 2}\" width=\"${C.envW}\" height=\"${C.envH}\" rx=\"3\" ${sh}/><path class=\"dg-env-in\" d=\"M -8 -4.5 L 0 1.5 L 8 -4.5\"/>`;\n}\n\nconst easeInOut = (t: number): number => (t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2);\n\n/** 運ぶ物。線の上を走り、着いた先 (`settle`) へ寄って、次の同じ主役が出発するまで留まる。 */\nexport function carrier(e: SceneEdge, time: CarrierTime, ctx: Ctx): string {\n const { m } = ctx;\n const n = LOOK.carrier.samples;\n const length = pathLength(e.points);\n const { depart: a, arrive: b, start: from, end: gone } = time;\n const path: [number, number, number][] = [];\n for (let k = 0; k <= n; k++) {\n const [x, y] = along(e.points, easeInOut(k / n) * length);\n path.push([a + ((b - a) * k) / n, x, y]);\n }\n const first = path[0] as [number, number, number];\n const lastPoint = path[path.length - 1] as [number, number, number];\n const rest: Point = e.settle ?? [lastPoint[1], lastPoint[2]];\n const pts: [number, number, number][] = [[0, first[1], first[2]], ...path];\n if (e.settle) pts.push([Math.min(b + 0.3, Math.max(gone, b + 0.01)), rest[0], rest[1]]);\n pts.push([gone, rest[0], rest[1]], [m.total, rest[0], rest[1]]);\n // 次の運ぶ物と入れ替わる時は、重なって 2 つに見えないよう素早く消す\n const fade = gone < m.last ? 0.05 : 0.18;\n return `<g class=\"dg-a\" style=\"${m.move(pts, m.blink(from + 0.02, gone, fade))}\">${carrierShape(e, ctx.sh)}</g>`;\n}\n\n/** 段の番号。まだ来ていない段は出さず、今の段は塗り、済んだ段は縁取りに変えて番号を読めるまま残す。 */\nexport function badge(b: SceneBadge, ctx: Ctx): string {\n const { m } = ctx;\n const span = ctx.t.steps[b.step] as Span;\n const a = span.start;\n const e = span.end;\n const { r, ring: rr } = LOOK.badge;\n const fill = m.kf([\n [0, { opacity: 0, transform: \"scale(.5)\" }],\n [a, { opacity: 0, transform: \"scale(.5)\" }, EASE.pop],\n [a + 0.35, { opacity: 1, transform: \"scale(1)\" }],\n [e, { opacity: 1, transform: \"scale(1)\" }, EASE.inOut],\n [e + 0.4, { opacity: 0, transform: \"scale(1)\" }],\n [m.total, { opacity: 0, transform: \"scale(.5)\" }],\n ]);\n const past = m.kf([[0, { opacity: 0 }], [e, { opacity: 0 }, EASE.inOut], [e + 0.4, { opacity: 1 }], [m.last, { opacity: 1 }, EASE.inOut], [m.total, { opacity: 0 }]]);\n const ring = m.kf([\n [0, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.05, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.1, { opacity: 0.7, transform: \"scale(1)\" }, EASE.out],\n [a + 0.9, { opacity: 0, transform: \"scale(2.3)\" }],\n [m.total, { opacity: 0, transform: \"scale(1)\" }],\n ]);\n const x = r1(b.x);\n const y = r1(b.y);\n const ty = r1(b.y + LOOK.baseline.badge);\n const no = b.step + 1;\n return (\n `<g class=\"dg-bd\" data-step=\"${b.step}\" style=\"${cs(b.color)}\"><circle class=\"dg-bdr dg-popc dg-a\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\" style=\"${ring}\"/>` +\n `<g class=\"dg-a\" style=\"${past}\"><circle class=\"dg-bdp\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\"/><text class=\"dg-bdpt\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g>` +\n `<g class=\"dg-popc dg-a\" style=\"${fill}\"><circle class=\"dg-bdf\" cx=\"${x}\" cy=\"${y}\" r=\"${r}\"/><text class=\"dg-bdft\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g></g>`\n );\n}\n\n/** 中身の帯の 1 欄の移り変わり。値と札は、次の値か札が来るまで出る。 */\nexport interface FieldChange {\n at: number;\n value?: string;\n tag?: string;\n color: ColorKey;\n}\n\nexport function strip(s: SceneStrip, changes: Map<string, FieldChange[]>, ctx: Ctx): string {\n const { m, sh } = ctx;\n const S = LOOK.strip;\n const my = s.y + S.h / 2;\n const parts = [\n `<rect class=\"dg-strip\" x=\"${r1(s.x + 0.5)}\" y=\"${r1(s.y + 0.5)}\" width=\"${r1(s.w - 1)}\" height=\"${r1(s.h - 1)}\" rx=\"${LOOK.region.radius}\" ${sh}/>`,\n `<g style=\"${cs(\"slate\")}\"><rect class=\"dg-bi\" x=\"${r1(s.x + S.pad)}\" y=\"${r1(my - S.icon / 2)}\" width=\"${S.icon}\" height=\"${S.icon}\" rx=\"${LOOK.box.iconRadius}\"/>${glyph(\"env\", s.x + S.pad + S.icon / 2, my, 0.78)}</g>`,\n `<text class=\"dg-sh\" x=\"${r1(s.x + S.titleX)}\" y=\"${r1(my + LOOK.baseline.stripTitle)}\">${esc(s.title)}</text>`,\n ];\n s.fields.forEach((field, i) => {\n const prev = s.fields[i - 1];\n if (prev && prev.y === field.y) {\n const sx = field.x - S.fieldGap / 2;\n parts.push(`<line class=\"dg-sep\" x1=\"${r1(sx)}\" y1=\"${r1(field.y + S.sepInset)}\" x2=\"${r1(sx)}\" y2=\"${r1(field.y + S.h - S.sepInset)}\"/>`);\n }\n parts.push(`<text class=\"dg-fl\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.nameY)}\">${esc(field.name)}</text>`);\n const list = changes.get(field.name) ?? [];\n const values = list.filter((c) => c.value !== undefined);\n const tags = list.filter((c) => c.tag !== undefined);\n values.forEach((c, k) => {\n const next = values[k + 1]?.at;\n const value = c.value as string;\n const anim = next === undefined ? m.rise(c.at) : m.rise(c.at, next - MOTION.untilFade);\n parts.push(`<g class=\"dg-a\" style=\"${anim}\"><text class=\"${hasWide(value) ? \"dg-fvj\" : \"dg-fv\"}\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.valueY)}\">${esc(value)}</text></g>`);\n });\n tags.forEach((c, k) => {\n const next = tags[k + 1]?.at;\n const tag = c.tag as string;\n // 札は、その時に出ている値の右に置く\n const shown = [...values].reverse().find((v) => v.at <= c.at + 1e-9)?.value;\n const x = field.x + (shown ? textWidth(shown, hasWide(shown) ? TYPE.fieldValueJa : TYPE.fieldValue) + S.tagGap : 0);\n const w = textWidth(tag, TYPE.tag) + S.tagPadX * 2;\n const y = field.y + S.valueY - S.tagH / 2 - LOOK.baseline.tag;\n parts.push(\n `<g class=\"dg-tg dg-popc dg-a\" style=\"${cs(c.color)};${next === undefined ? m.pop(c.at) : m.pop(c.at, next - MOTION.untilFade)}\"><rect x=\"${r1(x)}\" y=\"${r1(y)}\" width=\"${r1(w)}\" height=\"${S.tagH}\" rx=\"${S.tagH / 2}\"/><text x=\"${r1(x + w / 2)}\" y=\"${r1(y + S.tagH / 2 + LOOK.baseline.tag)}\" text-anchor=\"middle\">${esc(tag)}</text></g>`,\n );\n });\n });\n return parts.join(\"\");\n}\n","/**\n * 時刻の点の並びから CSS の keyframes を組む道具。見本帳の `engine.js` の `kf` / `vis` / `rise` / `pop` / `move` を写す。\n *\n * 動きは全て 1 周 `total` 秒の keyframes で、点の時刻は 1 周の中の割合 (%) に直す。\n * 性質ごとに独立して補間されるので、点ごとに変える性質だけを書く。\n */\nimport { EASE, LOOK, MOTION } from \"../look/values\";\n\nexport type Props = Record<string, string | number>;\nexport type Frame = [time: number, props: Props, ease?: string];\n\nconst r2 = (v: number): number => Math.round(v * 100) / 100;\n\nexport class Motion {\n readonly frames: string[] = [];\n private count = 0;\n\n constructor(\n private readonly prefix: string,\n readonly total: number,\n readonly last: number,\n ) {}\n\n private pct(t: number): number {\n return +((Math.min(Math.max(t, 0), this.total) / this.total) * 100).toFixed(3);\n }\n\n /** keyframes を 1 つ足し、その名前を付ける style の字を返す。 */\n kf(points: Frame[]): string {\n const name = `${this.prefix}-${this.count++}`;\n const at = new Map<number, { props: Props; ease?: string }>();\n for (const [t, props, ease] of [...points].sort((a, b) => a[0] - b[0])) {\n const p = this.pct(t);\n const cur = at.get(p) ?? { props: {} };\n Object.assign(cur.props, props);\n if (ease) cur.ease = ease;\n at.set(p, cur);\n }\n const body = [...at]\n .map(([p, { props, ease }]) => {\n const d = Object.entries(props).map(([k, v]) => `${k}:${v}`);\n if (ease) d.push(`animation-timing-function:${ease}`);\n return `${p}%{${d.join(\";\")}}`;\n })\n .join(\"\");\n this.frames.push(`@keyframes ${name}{${body}}`);\n return `animation-name:${name}`;\n }\n\n /** `a` で出て `b` から消える。`within` を立てると `b` までに消え終わる。 */\n vis(a: number, b = this.last, o: { f?: number; on?: Props; off?: Props; ein?: string; within?: boolean } = {}): string {\n const f = o.f ?? MOTION.fade;\n const on = o.on ?? {};\n const off = o.off ?? {};\n const out = o.within ? Math.max(a + f, b - f) : b;\n return this.kf([\n [0, { opacity: 0, ...off }],\n [a, { opacity: 0, ...off }, o.ein ?? EASE.out],\n [a + f, { opacity: 1, ...on }],\n [out, { opacity: 1, ...on }, EASE.inOut],\n [Math.min(out + f, this.total), { opacity: 0, ...off }],\n [this.total, { opacity: 0, ...off }],\n ]);\n }\n\n /** 少し下から浮いて出る。 */\n rise(a: number, b = this.last, within = false): string {\n return this.vis(a, b, { on: { transform: \"translateY(0)\" }, off: { transform: `translateY(${LOOK.rise}px)` }, within });\n }\n\n /** 小さな所から弾んで出る。 */\n pop(a: number, b = this.last): string {\n return this.vis(a, b, { f: MOTION.popFade, ein: EASE.pop, on: { transform: \"scale(1)\" }, off: { transform: `scale(${LOOK.popFrom})` } });\n }\n\n /** 初めから出ていて `b` で消える。 */\n until(b: number): string {\n const f = MOTION.untilFade;\n return this.kf([\n [0, { opacity: 1 }],\n [b, { opacity: 1 }, EASE.inOut],\n [b + f, { opacity: 0 }],\n [this.last, { opacity: 0 }],\n [this.total, { opacity: 1 }],\n ]);\n }\n\n /** 点を辿って動く。`[時刻, x, y, 大きさ, 次の点までの緩急]` の並び。 */\n move(points: [number, number, number, number?, string?][], extra: Frame[] = []): string {\n return this.kf(\n points.map(([t, x, y, s = 1, ease]): Frame => [t, { transform: `translate(${r2(x)}px,${r2(y)}px) scale(${s})` }, ease]).concat(extra),\n );\n }\n\n /** `a` から `b` まで見え、`fade` 秒で消える。 */\n blink(a: number, b: number, fade: number): Frame[] {\n return [\n [0, { opacity: 0 }],\n [a - 0.01, { opacity: 0 }],\n [a, { opacity: 1 }],\n [b, { opacity: 1 }],\n [b + fade, { opacity: 0 }],\n [this.total, { opacity: 0 }],\n ];\n }\n}\n","/**\n * 原本の JSON から図を描く入口。置き場所と時刻の表を作り、部品を重なりの順に並べて SVG にする。\n *\n * 動きは全て SVG の中の CSS の keyframes が回す。1 周の長さは `--T`、止める時刻は `--at`、\n * 止めるか流すかは `--play` の変数で外から変えられる (頁に置く `player.ts` がこれを使う)。\n * 色と字は値の表から CSS の変数として 1 度だけ書き、部品はその変数だけを読む。\n */\nimport { FIGURE_TEXT } from \"../figure-text\";\nimport { layoutArchitecture } from \"../layout/architecture\";\nimport { textWidth } from \"../layout/measure\";\nimport type { Layout, Rect } from \"../layout/scene\";\nimport { layoutSequence } from \"../layout/sequence\";\nimport { FONTS } from \"../look/fonts\";\nimport { type ColorKey, EASE, FONT_VARS, LOOK, MOTION, type Palette, paletteVars, resolvePalette, type TextStyle, type Theme, TYPE } from \"../look/values\";\nimport { readDiagram } from \"../version\";\nimport type { Diagram, ViewMode } from \"../schema\";\nimport { buildTimeline, type Span, type Timeline } from \"../timeline\";\nimport type { NotationLang } from \"../words\";\nimport { action, badge, band, card, carrier, type Ctx, cs, edge, esc, type FieldChange, headCard, label, lifeline, strip, type SubChange } from \"./parts\";\nimport { Motion } from \"./motion\";\n\nexport interface RenderOptions {\n /** 色味の名前。書かないか知らない名前なら紙と墨 */\n palette?: string;\n theme?: Theme;\n /** 描く部品が出す字 (断りの文、全体図の札、読み上げの名前) の言葉。書かなければ日本語 (#3001) */\n lang?: NotationLang;\n}\n\nexport interface Rendered {\n svg: string;\n palette: string;\n theme: Theme;\n /** 書き手が原本で決めた見せ方 */\n view?: ViewMode;\n fonts: { sans: string; mono: string };\n layout: Layout;\n timeline: Timeline;\n diagram: Diagram;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst mix = (pct: number, base = \"var(--surf)\"): string => `color-mix(in srgb,var(--c) ${pct}%,${base})`;\nconst S = LOOK.stroke;\nconst X = LOOK.mix;\n\n/** 部品の見た目。どの値も値の表から読む。 */\nconst PART_CSS = [\n \".dg{display:block;width:100%;height:auto;overflow:visible}\",\n \".dg .dg-a{animation-duration:var(--T);animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both;animation-delay:calc(var(--at,0) * -1s);animation-play-state:var(--play,running)}\",\n \".dg .dg-popc{transform-box:fill-box;transform-origin:center}\",\n \".dg-bg{fill:var(--bg)}\",\n \".dg-band{fill:color-mix(in srgb,var(--c) var(--tint),var(--bg));stroke:color-mix(in srgb,var(--c) var(--edge),transparent)}\",\n `.dg-bi{fill:${mix(X.regionIcon)};stroke:${mix(X.regionIconEdge, \"transparent\")}}`,\n `.dg-bz{${font(TYPE.regionName)};fill:var(--ct)}`,\n `.dg-bx{${font(TYPE.regionNote)};fill:var(--mute)}`,\n \".dg-st{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-halo{fill:none;stroke:var(--c);stroke-width:${S.halo};stroke-opacity:.16}`,\n `.dg-on{fill:none;stroke:var(--c);stroke-width:${S.on}}`,\n `.dg-ic{fill:${mix(X.icon)}}`,\n `.dg-gl{fill:none;stroke:var(--c);stroke-width:${S.glyph};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-sn{${font(TYPE.boxName)};fill:var(--ink)}`,\n `.dg-ss{${font(TYPE.boxSub)};fill:var(--mute)}`,\n `.dg-ss-ok{${font(TYPE.boxSubStrong)};fill:var(--ct)}`,\n `.dg-ss-act{${font(TYPE.boxSubStrong)};fill:var(--ink)}`,\n `.dg-ll{stroke:var(--line);stroke-width:${S.lifeline};stroke-dasharray:3 4}`,\n `.dg-e{fill:none;stroke:var(--line);stroke-width:${S.edge};stroke-linecap:round;stroke-dasharray:0 ${LOOK.edge.ghostDash}}`,\n `.dg-eh{fill:none;stroke:var(--line);stroke-width:${S.arrow};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-e-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-dasharray:1 2}`,\n `.dg-eh-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-flow{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linecap:round;stroke-dasharray:1.5 ${LOOK.edge.flowDash}}`,\n \".dg-bd{cursor:pointer}\",\n \".dg-bdf{fill:var(--c)}\",\n `.dg-bdft{${font(TYPE.badge)};fill:var(--on-c)}`,\n `.dg-bdr{fill:none;stroke:var(--c);stroke-width:${S.badgeRing}}`,\n `.dg-bdp{fill:${mix(X.badgePast)};stroke:${mix(X.badgePastEdge, \"transparent\")};stroke-width:${S.hair}}`,\n `.dg-bdpt{${font(TYPE.badge)};fill:var(--ct)}`,\n `.dg-cap rect,.dg-act rect{fill:${mix(X.cap)};stroke:${mix(X.capEdge, \"transparent\")}}`,\n `.dg-cap text{${font(TYPE.label)};fill:var(--ct)}`,\n `.dg-capj text{${font(TYPE.labelJa)}}`,\n `.dg-act text{${font(TYPE.action)};fill:var(--ct)}`,\n \".dg-car{fill:var(--carry,var(--ink))}\",\n `.dg-car-t{${font(TYPE.carrier)};fill:var(--bg)}`,\n `.dg-car-tj{${font(TYPE.carrierJa)}}`,\n `.dg-env{fill:var(--carry,var(--ink));stroke:var(--surf);stroke-width:${S.envelope}}`,\n `.dg-env-in{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linejoin:round;stroke-linecap:round}`,\n \".dg-coin{fill:var(--coin);stroke:var(--surf);stroke-width:1.2}\",\n \".dg-coin-in{fill:none;stroke:var(--coinin);stroke-width:1.1}\",\n \".dg-strip{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-sep{stroke:var(--hair);stroke-width:${S.hair}}`,\n `.dg-sh{${font(TYPE.stripTitle)};fill:var(--ink)}`,\n `.dg-fl{${font(TYPE.fieldName)};fill:var(--mute)}`,\n `.dg-fv{${font(TYPE.fieldValue)};fill:var(--ink)}`,\n `.dg-fvj{${font(TYPE.fieldValueJa)};fill:var(--ink)}`,\n \".dg-tg rect{fill:var(--c)}\",\n `.dg-tg text{${font(TYPE.tag)};fill:var(--on-c)}`,\n \".dg-vp-bg{fill:var(--bg)}\",\n \".dg-vp-frame{fill:none;stroke:var(--hair)}\",\n \".dg-hd-bg{fill:var(--bg)}\",\n \".dg-mm-bg{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-mm-t{${font(TYPE.miniTitle)};fill:var(--mute)}`,\n \".dg-mm-world{fill:var(--sunk);stroke:var(--hair)}\",\n `.dg-mm-band{fill:${mix(X.miniBand)};stroke:${mix(X.miniBandEdge, \"transparent\")};stroke-width:.6}`,\n `.dg-mm-card{fill:${mix(X.mini)}}`,\n `.dg-mm-vp{fill:color-mix(in srgb,var(--ink) ${X.view}%,transparent);stroke:var(--ink);stroke-width:${S.badgeRing};vector-effect:non-scaling-stroke}`,\n].join(\"\");\n\n/** 同じ原本と同じ見た目からは同じ名前になるよう、中身から短い名前を作る (keyframes の名前が頁の中で混ざらないため)。 */\nfunction nameOf(text: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0).toString(36);\n}\n\n/** 各箱が動く段。線の両端、処理、字の書き換えの箱。 */\nfunction involved(diagram: Diagram): Map<string, number[]> {\n const on = new Map<string, Set<number>>();\n const add = (id: string, s: number): void => {\n on.set(id, (on.get(id) ?? new Set()).add(s));\n };\n diagram.steps.forEach((step, s) => {\n for (const event of step.events) {\n if (event.type === \"edge\") {\n add(event.from, s);\n add(event.to, s);\n } else if (event.type === \"action\" || event.type === \"swap\") add(event.box, s);\n }\n });\n return new Map([...on].map(([id, steps]) => [id, [...steps].sort((a, b) => a - b)]));\n}\n\n/** 箱の下の字の移り変わり。書き換えはそのまま残し、構成図の処理はその段の間だけ出して元へ戻す。 */\nfunction subChanges(diagram: Diagram, timeline: Timeline, actionsInBox: boolean): Map<string, SubChange[]> {\n type Raw = { t: number; order: number; box: string; set?: string; act?: string | null };\n const raw: Raw[] = [];\n let order = 0;\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type === \"swap\") raw.push({ t: time.at, order: order++, box: event.box, set: event.text });\n if (actionsInBox && event?.type === \"action\") {\n raw.push({ t: time.at, order: order++, box: event.box, act: event.label });\n raw.push({ t: (timeline.steps[time.step] as Span).end, order: order++, box: event.box, act: null });\n }\n }\n raw.sort((a, b) => a.t - b.t || a.order - b.order);\n const out = new Map<string, SubChange[]>();\n for (const box of diagram.boxes) {\n let base: [string, string] = [box.sub ?? \"\", \"dg-ss\"];\n let acting: string | undefined;\n let shown = base.join(\"|\");\n const list: SubChange[] = [];\n for (const change of raw.filter((r) => r.box === box.id)) {\n // 書き換えは、出ている処理の字も置き換える\n if (change.set !== undefined) {\n base = [change.set, \"dg-ss-ok\"];\n acting = undefined;\n }\n if (change.act !== undefined) acting = change.act ?? undefined;\n const now: [string, string] = acting !== undefined ? [acting, \"dg-ss-act\"] : base;\n if (now.join(\"|\") === shown) continue;\n shown = now.join(\"|\");\n list.push([change.t, now[0], now[1]]);\n }\n // すぐ次の字に替わる字は読めないので出さない\n const kept = list.filter((change, k) => {\n const next = list[k + 1];\n return next === undefined || next[0] - change[0] >= MOTION.minShow;\n });\n out.set(box.id, kept);\n }\n return out;\n}\n\nfunction fieldChanges(diagram: Diagram, timeline: Timeline, layout: Layout): Map<string, FieldChange[]> {\n const out = new Map<string, FieldChange[]>();\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type !== \"strip\") continue;\n const color: ColorKey = layout.badges[time.step]?.color ?? \"slate\";\n const list = out.get(event.field) ?? [];\n list.push({ at: time.at, color, ...(event.value !== undefined ? { value: event.value } : {}), ...(event.tag !== undefined ? { tag: event.tag } : {}) });\n out.set(event.field, list);\n }\n return out;\n}\n\nexport interface FollowFrame {\n /** 枠の幅 (px)。寄って追う窓はこの幅で、字を原寸で見せる */\n width: number;\n /** 枠の中で見える高さ (px)。渡すと、窓と全体図をこの高さに収め (#3047)、窓をこの高さまで伸ばす (#3053)。枠の高さが図で伸びる置き場では渡さない */\n height?: number;\n /** 隅の全体図の札の言葉。渡し忘れを型の検査で止めるため、省けない欄にする */\n lang: NotationLang;\n}\n\n/** 図を描く。`follow` を渡すと、寄って追う窓と隅の全体図で描く。 */\nexport function drawSvg(diagram: Diagram, layout: Layout, timeline: Timeline, palette: Palette, theme: Theme, follow?: FollowFrame): string {\n // 札の言葉で全体図の地の幅が変わりうるので、同じ頁に置いた別の言葉の図と名前を分ける\n const id = nameOf(`${JSON.stringify(diagram)}|${palette.id}|${theme}|${follow ? `${follow.width}|${follow.lang}` : \"\"}`);\n const m = new Motion(`dg${id}`, timeline.total, timeline.last);\n const ctx: Ctx = { m, t: timeline, sh: `filter=\"url(#dg-sh-${id})\"`, end: (timeline.steps[timeline.steps.length - 1] as Span).end };\n const on = involved(diagram);\n const subs = subChanges(diagram, timeline, layout.kind === \"architecture\");\n\n const L = { band: [] as string[], base: [] as string[], lit: [] as string[], node: [] as string[], badge: [] as string[], top: [] as string[] };\n for (const region of layout.regions) L.band.push(band(region));\n if (layout.strip) L.band.push(strip(layout.strip, fieldChanges(diagram, timeline, layout), ctx));\n for (const line of layout.lifelines) L.base.push(lifeline(line.x, line.y1, line.y2));\n for (const e of layout.edges) {\n const time = timeline.edges.find((t) => t.step === e.step && t.event === e.event);\n if (!time) continue;\n const drawn = edge(e, time, ctx);\n L.base.push(drawn.base);\n L.lit.push(drawn.lit);\n }\n for (const box of layout.boxes) L.node.push(card(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? []));\n for (const b of layout.badges) L.badge.push(badge(b, ctx));\n for (const l of layout.labels) {\n const time = timeline.labels.find((t) => t.step === l.step && t.event === l.event);\n if (time) L.top.push(label(l, time, ctx));\n }\n for (const a of layout.actions) {\n const time = timeline.events.find((t) => t.step === a.step && t.event === a.event);\n if (time) L.top.push(action(a, time.at, (timeline.steps[a.step] as Span).end, ctx));\n }\n for (const time of timeline.carriers) {\n const e = layout.edges.find((x) => x.step === time.step && x.event === time.event);\n if (e) L.top.push(carrier(e, time, ctx));\n }\n const content = Object.values(L)\n .map((parts) => parts.join(\"\"))\n .join(\"\");\n\n const { near, far, nearY, farY } = LOOK.shadow;\n const shadow = `<filter id=\"dg-sh-${id}\" x=\"-20%\" y=\"-30%\" width=\"140%\" height=\"180%\"><feDropShadow dx=\"0\" dy=\"${nearY}\" stdDeviation=\"${near}\" style=\"flood-color:var(--sh);flood-opacity:var(--shA)\"/><feDropShadow dx=\"0\" dy=\"${farY}\" stdDeviation=\"${far}\" style=\"flood-color:var(--sh);flood-opacity:var(--shB)\"/></filter>`;\n // 寄って追う時系列図は、頭の箱を窓の上端に貼る頭の列にも描く (#3118)。頭の列の箱はアイコンを外した 2 段 (#3120)。止めて見せる図では描かない\n const heads = follow && layout.kind === \"sequence\" ? layout.boxes.map((box) => headCard(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? [])).join(\"\") : \"\";\n const view = follow ? followView(layout, timeline, diagram, m, id, content, follow, heads) : { body: `<rect class=\"dg-bg\" width=\"${layout.width}\" height=\"${layout.height}\" rx=\"${LOOK.region.radius}\"/>${content}`, w: layout.width, h: layout.height };\n const css = `.dg-${id}{${FONT_VARS};--T:${timeline.total}s;${paletteVars(palette, theme)}}${PART_CSS}${m.frames.join(\"\")}`;\n return (\n `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"dg dg-${id}\" viewBox=\"0 0 ${Math.ceil(view.w)} ${Math.ceil(view.h)}\" width=\"${Math.ceil(view.w)}\" height=\"${Math.ceil(view.h)}\" role=\"img\" aria-label=\"${esc(diagram.title)}\" data-dragon=\"figure\" data-view=\"${follow ? \"follow\" : \"fixed\"}\">` +\n `<style>${css}</style><defs>${shadow}</defs>${view.body}</svg>`\n );\n}\n\n/** 四角を全部囲む四角。 */\nfunction union(rects: Rect[]): Rect {\n const x = Math.min(...rects.map((r) => r.x));\n const y = Math.min(...rects.map((r) => r.y));\n return { x, y, w: Math.max(...rects.map((r) => r.x + r.w)) - x, h: Math.max(...rects.map((r) => r.y + r.h)) - y };\n}\n\n/** 段で動く物が占める所。 */\nfunction focusOf(layout: Layout, diagram: Diagram, step: number): Rect | undefined {\n const rects = focusParts(layout, diagram, step);\n return rects.length === 0 ? undefined : union(rects);\n}\n\n/**\n * 番号の丸が窓から外れる段で、窓に入れる所 (#3046)。\n * 丸とその周りを起点に、丸に近い動く物から順に、窓 (`vw` × `vh`) に収まる間だけ囲む。収まらない物は飛ばして次を見る\n */\nfunction badgeFocus(badge: { x: number; y: number }, parts: Rect[], vw: number, vh: number): Rect {\n const room = LOOK.badge.r + LOOK.follow.badgeRoom;\n const { x: bx, y: by } = badge;\n const away = (p: Rect): number => Math.hypot(Math.max(0, p.x - bx, bx - p.x - p.w), Math.max(0, p.y - by, by - p.y - p.h));\n let held: Rect = { x: bx - room, y: by - room, w: room * 2, h: room * 2 };\n for (const p of [...parts].sort((a, b) => away(a) - away(b))) {\n const next = union([held, p]);\n if (next.w <= vw && next.h <= vh) held = next;\n }\n return held;\n}\n\n/** 段で動く物を 1 つずつ。 */\nfunction focusParts(layout: Layout, diagram: Diagram, step: number): Rect[] {\n const rects: Rect[] = [];\n for (const e of layout.edges.filter((x) => x.step === step)) {\n const xs = e.points.map((p) => p[0]);\n const ys = e.points.map((p) => p[1]);\n rects.push({ x: Math.min(...xs), y: Math.min(...ys), w: Math.max(...xs) - Math.min(...xs), h: Math.max(...ys) - Math.min(...ys) });\n }\n rects.push(...layout.labels.filter((l) => l.step === step), ...layout.actions.filter((a) => a.step === step));\n for (const event of diagram.steps[step]?.events ?? []) {\n const ids = event.type === \"edge\" ? [event.from, event.to] : event.type === \"action\" || event.type === \"swap\" ? [event.box] : [];\n for (const id of ids) {\n const box = layout.boxes.find((b) => b.id === id);\n // 時系列図の頭の箱は遠いので、線の行だけを見る\n if (box && (layout.kind === \"architecture\" || event.type === \"swap\")) rects.push(box);\n }\n }\n return rects;\n}\n\n/**\n * 寄って追う窓。段ごとに動く所へ寄り、窓の外の全体図に今見ている所の枠を同じ動きで出す。\n * 全体図は窓に重ねると今動く線や箱を覆うので、窓の外に置く (#3042)。\n * 縦長の全体図は窓の右に列を取り、横長の全体図は窓の下に置く。失う窓の幅か図の高さの小さい側を選ぶ。\n * 枠の中で見える高さを渡された時は、窓と全体図がその高さに入るまで窓を低くする (#3047)。\n * 枠が余る時は窓を広げ、図の原寸の幅と、見える高さか図の高さまで使う。全体図は今の大きさのまま置く (#3053)。\n * 枠の幅が `LOOK.follow.narrow` より狭い時は、縦長の全体図を出さずに窓へ枠の幅の全部を渡す (#3055)。\n * 段で動く物を全部囲んだ所の真ん中に寄せると今の段の番号の丸が窓から外れる段では、丸に近い動く物から窓に収まるだけ囲んだ所へ寄せる (#3046)。\n * 時系列図は頭の箱 `heads` を窓の上端の頭の列に貼り、窓が横に動く時だけ一緒に動かす。頭の箱は図の上端に在り、線を追う窓からは外れるため。\n * 窓は頭の列の下の残りの高さで動く物を真ん中に見せる (#3118)。\n * 頭の列の箱はアイコンを外した 2 段にして低く貼り、線は図の頭の箱の下から見せ始める (#3120)。\n */\nfunction followView(layout: Layout, timeline: Timeline, diagram: Diagram, m: Motion, id: string, content: string, follow: FollowFrame, heads: string): { body: string; w: number; h: number } {\n const F = LOOK.follow;\n const M = LOOK.mini;\n const frameWidth = Math.max(1, follow.width);\n const full = Math.min(layout.width, frameWidth);\n const title = FIGURE_TEXT[follow.lang].overview;\n /** 窓の高さ `vh` の時の全体図の寸法。全体図は窓の高さで縮むので、窓を低くしたら測り直す */\n const sized = (vh: number) => {\n // 全体図の寸法は枠の幅と窓の高さで決め、置き場所に依らない\n const mw = Math.min(M.w, full * 0.4, ((vh * 0.4) / layout.height) * layout.width);\n const k = mw / layout.width;\n const mh = layout.height * k;\n // 地の幅は図の縦横の比で決まるので、縦に長い図では札より狭くなる。その時は地を札の幅まで広げ、図は広げた地の真ん中に置く\n const bw = Math.max(mw, Math.ceil(textWidth(title, TYPE.miniTitle)));\n // 縦横の比は窓の高さに依らないので、低くしても全体図の置き場所は変わらない\n return { vh, mw, k, mh, bw, bgW: bw + M.pad * 2, bgH: mh + M.pad * 2 + M.title, beside: mh > mw };\n };\n const natural = sized(Math.min(layout.height, Math.max(F.minH, full * F.aspect)));\n // 携帯の幅では縦長の全体図の列が枠の幅の 3 割を取り、窓が図の横の 3 割ほどしか見せない。その時は全体図を出さない。\n // 横長の全体図は窓の下に出して幅を取らないので、狭い枠でも出す\n const bare = natural.beside && frameWidth < F.narrow;\n // 窓の右の全体図は窓の高さの中に収まり、窓の下の全体図は窓の高さに足される\n const room = follow.height === undefined ? Number.POSITIVE_INFINITY : natural.beside ? follow.height : follow.height - natural.bgH - M.inset;\n // 見える高さが窓より低ければ窓と全体図を縮め、高ければ全体図はそのままに窓を図の高さまで伸ばす。\n // 全体図も伸ばすと、狭い枠では右の全体図の列が太って窓が狭くなる\n const { vh, mw, k, mh, bw, bgW, bgH, beside } =\n room < natural.vh ? sized(Math.max(F.fitMinH, room)) : { ...natural, vh: Number.isFinite(room) ? Math.min(layout.height, room) : natural.vh };\n // 右の全体図の列は枠の余りに置き、窓は図の原寸の幅まで広げる。枠が図より狭い時は今までどおり枠の幅から列を引く\n const vw = beside && !bare ? Math.min(layout.width, frameWidth - bgW - M.inset) : full;\n const clampX = (x: number): number => Math.min(layout.width - vw / 2, Math.max(vw / 2, x));\n // 時系列図は窓の上端に頭の列を貼るので、動く物は頭の列の下の残りの高さ `below` に見せる (#3118)。\n // 線は図の頭の箱の下 `top` から見せ始め、図の頭の箱は頭の列の下か窓の上に隠す (#3120)\n const top = heads === \"\" ? 0 : Math.max(...layout.boxes.map((b) => b.y + b.h)) + F.headRoom;\n const strip = heads === \"\" ? 0 : F.head.pad * 2 + F.head.h;\n const below = vh - strip;\n /** 頭の列の下の残りの窓の真ん中の高さを、図の頭の箱の下と図の下端で止める */\n const clampY = (y: number): number => Math.min(layout.height - below / 2, Math.max(top + below / 2, y));\n const r = LOOK.badge.r;\n let prev: [number, number] = [layout.width / 2, layout.height / 2];\n // 頭の列の下の残りの窓の真ん中。窓の真ん中は、これより頭の列の高さの半分だけ上に在る\n const middles = timeline.steps.map((_, s) => {\n const f = focusOf(layout, diagram, s);\n prev = f ? [f.x + f.w / 2, f.y + f.h / 2] : prev;\n const at: [number, number] = [clampX(prev[0]), clampY(prev[1])];\n // 動く物を全部囲んだ所が窓より大きいと、その端に在る番号の丸が窓から外れる。その段だけ丸の近くへ寄せ直す (#3046)\n const b = layout.badges.find((x) => x.step === s);\n if (!b || (Math.abs(b.x - at[0]) <= vw / 2 - r && Math.abs(b.y - at[1]) <= below / 2 - r)) return at;\n const near = badgeFocus(b, focusParts(layout, diagram, s), vw, below);\n // 動く物の無い次の段は、寄せ直した窓のまま止める\n prev = [near.x + near.w / 2, near.y + near.h / 2];\n return [clampX(prev[0]), clampY(prev[1])] as [number, number];\n });\n const centers = middles.map(([x, y]): [number, number] => [x, y - strip / 2]);\n const c0 = centers[0] as [number, number];\n const cam: [number, number, number, number?, string?][] = [\n [0, c0[0], c0[1]],\n [(timeline.steps[0] as Span).start, c0[0], c0[1]],\n ];\n centers.forEach((c, s) => {\n if (s === 0) return;\n const before = centers[s - 1] as [number, number];\n const start = (timeline.steps[s] as Span).start;\n cam.push([start, before[0], before[1], 1, EASE.inOut], [start + F.ease, c[0], c[1]]);\n });\n const cl = centers[centers.length - 1] as [number, number];\n cam.push([timeline.last, cl[0], cl[1], 1, EASE.inOut], [timeline.total, c0[0], c0[1]]);\n const camKf = m.move(cam.map(([t, cx, cy, s, e]) => [t, vw / 2 - cx, vh / 2 - cy, s, e]));\n\n // 右に出す時は窓の上端に揃え、下に出す時は窓の右端から内へ寄せる\n const bgX = beside ? vw + M.inset : vw - bgW - M.inset;\n const bgY = beside ? 0 : vh + M.inset;\n const bx = bgX + M.pad;\n const mx = bx + (bw - mw) / 2;\n const my = bgY + M.pad + M.title;\n /**\n * 全体図の地と札と、今見ている所の枠。窓と同じ動きで枠を動かす。\n * 時系列図の枠は頭の列の下の線を見せる所だけを囲む。頭の箱は頭の列に常に出ているため (#3122)\n */\n const overview = (): { clip: string; body: string } => {\n const shapes = [\n ...layout.regions.map((r) => `<rect class=\"dg-mm-band\" style=\"${cs(r.color)}\" x=\"${mx + r.x * k}\" y=\"${my + r.y * k}\" width=\"${r.w * k}\" height=\"${r.h * k}\" rx=\"3\"/>`),\n ...layout.boxes.map((b) => `<rect class=\"dg-mm-card\" style=\"${cs(b.color)}\" x=\"${mx + b.x * k}\" y=\"${my + b.y * k}\" width=\"${b.w * k}\" height=\"${b.h * k}\" rx=\"1.5\"/>`),\n ].join(\"\");\n const vp = m.move(cam.map(([t, cx, cy, , e]) => [t, mx + (cx - vw / 2) * k, my + (cy - vh / 2) * k, 1, e]));\n return {\n clip: `<clipPath id=\"dg-mm-${id}\"><rect x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\" rx=\"4\"/></clipPath>`,\n body:\n `<rect class=\"dg-mm-bg\" x=\"${bgX}\" y=\"${bgY}\" width=\"${bgW}\" height=\"${bgH}\" rx=\"${M.radius}\"/>` +\n `<text class=\"dg-mm-t\" x=\"${bx}\" y=\"${my - M.pad + 2}\">${title}</text>` +\n `<g clip-path=\"url(#dg-mm-${id})\"><rect class=\"dg-mm-world\" x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\"/>${shapes}<rect class=\"dg-mm-vp dg-a\"${strip === 0 ? \"\" : ` y=\"${strip * k}\"`} width=\"${vw * k}\" height=\"${(vh - strip) * k}\" rx=\"2\" style=\"${vp}\"/></g>`,\n };\n };\n const mini = bare ? { clip: \"\", body: \"\" } : overview();\n // 頭の列は窓の中身の上に重ね、窓と同じ時刻と緩急で横にだけ動かす (#3118)\n const head =\n strip === 0\n ? \"\"\n : `<g class=\"dg-hd\"><rect class=\"dg-hd-bg\" width=\"${vw}\" height=\"${strip}\"/><line class=\"dg-sep\" x1=\"0\" y1=\"${strip}\" x2=\"${vw}\" y2=\"${strip}\"/>` +\n `<g class=\"dg-a\" style=\"${m.move(cam.map(([t, cx, , s, e]) => [t, vw / 2 - cx, 0, s, e]))}\">${heads}</g></g>`;\n const body =\n `<defs><clipPath id=\"dg-vp-${id}\"><rect width=\"${vw}\" height=\"${vh}\" rx=\"${LOOK.region.radius}\"/></clipPath>${mini.clip}</defs>` +\n `<g clip-path=\"url(#dg-vp-${id})\"><rect class=\"dg-vp-bg\" width=\"${vw}\" height=\"${vh}\"/><g class=\"dg-a\" style=\"${camKf}\">${content}</g>${head}</g>` +\n `<rect class=\"dg-vp-frame\" x=\"0.5\" y=\"0.5\" width=\"${vw - 1}\" height=\"${vh - 1}\" rx=\"${LOOK.region.radius}\"/>${mini.body}`;\n return { body, w: beside && !bare ? vw + M.inset + bgW : full, h: beside ? vh : bgY + bgH };\n}\n\n/** 原本の JSON から図を描く。原本が形に合わない時は、誤りの場所を添えて断る。 */\nexport function renderDiagram(input: unknown, options: RenderOptions = {}): Rendered {\n const lang = options.lang ?? \"ja\";\n const read = readDiagram(input, { lang });\n if (!read.ok) throw new Error(FIGURE_TEXT[lang].cannotDraw(read.errors.map((e) => `${e.pointer} ${e.message}`).join(\" / \")));\n const diagram = read.diagram;\n const palette = resolvePalette(options.palette);\n const theme: Theme = options.theme === \"dark\" ? \"dark\" : \"light\";\n const layout = diagram.kind === \"sequence\" ? layoutSequence(diagram) : layoutArchitecture(diagram);\n const timeline = buildTimeline(diagram);\n return {\n svg: drawSvg(diagram, layout, timeline, palette, theme),\n palette: palette.id,\n theme,\n ...(diagram.view ? { view: diagram.view } : {}),\n fonts: { ...FONTS },\n layout,\n timeline,\n diagram,\n };\n}\n","/**\n * 見せ方を字の大きさで選ぶ。\n *\n * 全体を枠の幅へ収めた時の箱の名前の字が 10.5px 以上なら、全体を止めて中だけ動かす (`fixed`)。\n * 下回るなら、動く所へ寄って追い、隅の全体図で今どこかを示す (`follow`)。\n * 枠の高さを渡すと、全体を枠の幅と高さの両方へ収めた時の字で選ぶ (#3047)。高さの決まった置き場で、縦に長い図を縮めすぎないため。\n * 書き手が原本の `view` で決めた時は、字の大きさに関わらずそれに従う。\n */\nimport { READABLE_PX, TYPE } from \"./look/values\";\nimport type { Rendered } from \"./render/svg\";\nimport type { ViewMode } from \"./schema\";\n\nexport function chooseView(rendered: Pick<Rendered, \"layout\" | \"view\">, frameWidth: number, frameHeight?: number): { mode: ViewMode; textPx: number } {\n const byWidth = Math.max(0, frameWidth) / rendered.layout.width;\n const scale = frameHeight === undefined ? byWidth : Math.min(byWidth, Math.max(0, frameHeight) / rendered.layout.height);\n const textPx = scale * TYPE.boxName.size;\n if (rendered.view) return { mode: rendered.view, textPx };\n return { mode: textPx >= READABLE_PX ? \"fixed\" : \"follow\", textPx };\n}\n","/**\n * 頁に図を置いて動かす。\n *\n * 動きを嫌う設定 (`prefers-reduced-motion: reduce`) は描く前に読み、その人には一瞬も自動再生せず、\n * 段ごとの止め絵を釦で送る。各段の題と本文は、読み上げの道具が段の順に読める番号付きの一覧として置き、\n * 図そのものは読み上げから隠して同じ中身を 2 度読ませない。\n * 見せ方は枠の幅で選び (`view.ts`)、寄って追う時は窓と全体図で描き直す。\n * 釦と段の一覧の読み上げの名前と全体図の札は、渡した言葉 (`options.lang`、書かなければ日本語) で出す (#3001)。\n * 段が替わるたびに `options.onStep` で今の段を知らせ、頁の側が段の札や進み具合を出せるようにする (#3031)。\n * 段の本文の帯は本文の最も長い段の高さに保ち、段を送っても図の大きさと位置を変えない (#3049)。\n * 帯の中身の幅が `LOOK.player.narrow` より狭い時は、段を送る釦を指で押せる大きさにして段の番号と上の段に並べ、\n * 題と本文をその下の段の全幅に置く (#3057、#3069)。\n */\nimport { FIGURE_TEXT } from \"./figure-text\";\nimport { FONT_VARS, LOOK, paletteVars, resolvePalette, type TextStyle, TYPE } from \"./look/values\";\nimport { drawSvg, type RenderOptions, renderDiagram } from \"./render/svg\";\nimport type { Span } from \"./timeline\";\nimport { chooseView } from \"./view\";\n\nexport interface PlayerOptions extends RenderOptions {\n /** 段が替わるたびに今の段 (0 から) を受け取る。置いた時にも最初の段で 1 度呼ぶ。頁の側で段の札や進み具合を出す時に使う (#3031) */\n onStep?: (step: number) => void;\n /**\n * 図を、図の枠の中で見える高さに収める (#3047)。高さに収めると字が読めない図は寄って追う図にし、寄って追う窓と全体図をその高さに収める。\n * 枠の高さが決まっている置き場 (カタログの拡大の重ね窓) で使う。枠の高さが図に合わせて伸びる置き場で使うと、描くたびに低くなる\n */\n fitHeight?: boolean;\n}\n\nexport interface Player {\n /** 今の段 (0 から) */\n readonly step: number;\n /** 動いているか */\n readonly playing: boolean;\n next(): void;\n prev(): void;\n play(): void;\n pause(): void;\n destroy(): void;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst px = (v: number): string => `${v}px`;\n\nfunction playerCss(): string {\n const P = LOOK.player;\n const hidden = px(P.hidden);\n return [\n `.dg-player{display:flex;flex-direction:column;gap:${px(P.gap)};color:var(--ink)}`,\n `.dg-player .dg-frame{border-radius:${px(P.radius)};overflow:hidden}`,\n // 並べ方は帯の中身の幅で選ぶ。帯の中の 1 段 (`.dg-row`) が並べ替わり、帯の左右の余白は置いた頁が帯に付ける\n `.dg-bar{container:dg-bar/inline-size}`,\n `.dg-row{display:flex;align-items:flex-start;gap:${px(P.gap)}}`,\n `.dg-btns{display:flex;gap:${px(P.gap / 2)};flex:none}`,\n `.dg-btn{width:${px(P.button)};height:${px(P.button)};border-radius:${px(P.radius)};border:${px(LOOK.stroke.hair)} solid var(--hair);background:var(--surf);color:var(--ink);${font(TYPE.button)};cursor:pointer}`,\n `.dg-btn:focus-visible{outline:${px(P.focus)} solid var(--c-blue);outline-offset:${px(P.focus)}}`,\n `.dg-say{display:flex;gap:${px(P.gap)};min-width:0}`,\n `.dg-no{${font(TYPE.stepNo)};color:var(--mute);padding-top:${px(P.focus)}}`,\n `.dg-txt{display:grid;grid-template-columns:minmax(0,1fr);min-width:0}`,\n `.dg-txt>*{grid-area:1/1}`,\n `.dg-room{visibility:hidden}`,\n `.dg-tt{${font(TYPE.stepTitle)};margin:0}`,\n `.dg-tb{${font(TYPE.stepBody)};color:var(--ink2);margin:0;white-space:pre-line}`,\n `.dg-sr{position:absolute;width:${hidden};height:${hidden};margin:-${hidden};padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}`,\n // 狭い帯 (携帯の幅) では、段を送る釦を指で押せる大きさにし、その横に番号を置き、\n // 題を 2 段目、本文を 3 段目に置いてどちらも帯の全幅を使う (#3057、#3069)。\n // 釦を大きくすると横に題を置く幅が足りず題が細かく折れるため、題は釦の段に置かない。\n // 題と本文を包む箱を外して写しも同じ升に重ねるので、2 段目は最も高い題、3 段目は最も長い本文の高さになる。\n // 題と本文の間は広い帯と同じく空けず、釦の段の下にだけ間を取って、帯が高くなる分を抑える\n `@container dg-bar (width < ${px(P.narrow)}){` +\n `.dg-row{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:0 ${px(P.gap)}}` +\n `.dg-say,.dg-txt,.dg-txt>*{display:contents}` +\n `.dg-btns{grid-area:1/1;margin-bottom:${px(P.gap / 2)}}` +\n `.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}` +\n `.dg-no{grid-area:1/2;display:flex;align-items:center;min-height:${px(P.touch)};padding-top:0}` +\n `.dg-tt{grid-area:2/1/3/3}` +\n `.dg-tb{grid-area:3/1/4/3}` +\n `}`,\n // 指で触る時は、広い帯でも段を送る釦を指で押せる大きさにする (#3076)。並びは横 1 列のまま変えない。\n // 広い帯は本文が 2 行あれば帯の高さが変わらず、本文の無い帯だけが釦の分だけ高くなる\n `@media (pointer: coarse){.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}}`,\n ].join(\"\");\n}\n\nfunction ensureCss(doc: Document): void {\n if (doc.getElementById(\"dragon-player-css\")) return;\n const style = doc.createElement(\"style\");\n style.id = \"dragon-player-css\";\n style.textContent = playerCss();\n doc.head.appendChild(style);\n}\n\n/** 釦に出す字。HTML に書き出す時は、この字も字の file に残す。 */\nexport const BUTTON_TEXT = { prev: \"‹\", pause: \"❚❚\", play: \"▶\", next: \"›\" } as const;\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n/** 段の番号の札 (`01/12`)。`step` は 0 から数える。 */\nexport const stepNo = (step: number, count: number): string => `${pad(step + 1)}/${pad(count)}`;\n\nexport function mountDiagram(host: HTMLElement, diagram: unknown, options: PlayerOptions = {}): Player {\n const doc = host.ownerDocument;\n const win = doc.defaultView;\n // 描く前に読む。描いた後に読むと、動きを嫌う人にも一瞬だけ流れてしまう\n const reduce = Boolean(win?.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches);\n const rendered = renderDiagram(diagram, options);\n const lang = options.lang ?? \"ja\";\n const words = FIGURE_TEXT[lang];\n const palette = resolvePalette(rendered.palette);\n const { timeline } = rendered;\n const steps = rendered.diagram.steps;\n const count = steps.length;\n\n ensureCss(doc);\n const root = doc.createElement(\"div\");\n root.className = \"dg-player\";\n root.dataset.dragon = \"player\";\n root.setAttribute(\"style\", `${FONT_VARS};${paletteVars(palette, rendered.theme)}`);\n\n const frame = doc.createElement(\"div\");\n frame.className = \"dg-frame\";\n const button = (name: string, label: string, text: string): HTMLButtonElement => {\n const b = doc.createElement(\"button\");\n b.type = \"button\";\n b.className = \"dg-btn\";\n b.dataset.dragon = name;\n b.setAttribute(\"aria-label\", label);\n b.textContent = text;\n return b;\n };\n const prevButton = button(\"prev\", words.prev, BUTTON_TEXT.prev);\n const toggleButton = button(\"toggle\", words.pause, BUTTON_TEXT.pause);\n const nextButton = button(\"next\", words.next, BUTTON_TEXT.next);\n const buttons = doc.createElement(\"div\");\n buttons.className = \"dg-btns\";\n // 置いた頁の言葉と違っても、釦の名前を名前の言葉の声で読ませる\n buttons.setAttribute(\"lang\", lang);\n buttons.append(prevButton, toggleButton, nextButton);\n\n // 見える語り。読み上げには下の一覧を読ませるので、こちらは読み上げから隠す\n const say = doc.createElement(\"div\");\n say.className = \"dg-say\";\n say.setAttribute(\"aria-hidden\", \"true\");\n const no = doc.createElement(\"div\");\n no.className = \"dg-no\";\n no.dataset.dragon = \"step-no\";\n const text = doc.createElement(\"div\");\n text.className = \"dg-txt\";\n const title = doc.createElement(\"p\");\n title.className = \"dg-tt\";\n title.dataset.dragon = \"step-title\";\n const body = doc.createElement(\"p\");\n body.className = \"dg-tb\";\n body.dataset.dragon = \"step-body\";\n const live = doc.createElement(\"div\");\n live.append(title, body);\n text.append(live);\n // 全部の段の題と本文の写しを今の段と同じ升に重ね、見た目からは隠して場所だけを取る。\n // 帯の高さが本文の最も長い段で決まり、段を送っても図の枠が伸び縮みしない (#3049)\n for (const step of steps) {\n const room = doc.createElement(\"div\");\n room.className = \"dg-room\";\n room.dataset.dragon = \"caption-room\";\n const roomTitle = doc.createElement(\"p\");\n roomTitle.className = \"dg-tt\";\n roomTitle.textContent = step.title;\n const roomBody = doc.createElement(\"p\");\n roomBody.className = \"dg-tb\";\n roomBody.textContent = step.body;\n room.append(roomTitle, roomBody);\n text.append(room);\n }\n say.append(no, text);\n // 狭い帯では語りの箱を外して番号と題と本文を釦と同じ升の並びに置く (#3057)。\n // 箱を外した要素の読み上げからの隠し方に頼らず、見える語りの 1 つずつも読み上げから隠す\n for (const shown of [no, title, body]) shown.setAttribute(\"aria-hidden\", \"true\");\n const row = doc.createElement(\"div\");\n row.className = \"dg-row\";\n row.append(buttons, say);\n const bar = doc.createElement(\"div\");\n bar.className = \"dg-bar\";\n bar.append(row);\n\n // 読み上げの道具が段の順に読む一覧。見た目からは外すが、読み上げからは隠さない\n const list = doc.createElement(\"ol\");\n list.className = \"dg-sr\";\n list.dataset.dragon = \"steps\";\n list.setAttribute(\"aria-label\", words.steps(rendered.diagram.title));\n for (const step of steps) {\n const item = doc.createElement(\"li\");\n const head = doc.createElement(\"strong\");\n head.textContent = step.title;\n item.append(head);\n for (const line of step.body.split(\"\\n\")) {\n const p = doc.createElement(\"p\");\n p.textContent = line;\n item.append(p);\n }\n list.append(item);\n }\n\n root.append(frame, bar, list);\n host.append(root);\n\n const frameWidth = (): number => frame.clientWidth || host.clientWidth || rendered.layout.width;\n /** 高さに収めると頼まれた時だけ、図の枠の中で見える高さ (上下の余白を除く)。測れない時は `undefined` で、幅だけで決める */\n const frameHeight = (): number | undefined => {\n if (!options.fitHeight || !win) return undefined;\n const style = win.getComputedStyle(frame);\n const inner = frame.clientHeight - (Number.parseFloat(style.paddingTop) || 0) - (Number.parseFloat(style.paddingBottom) || 0);\n return inner > 0 ? inner : undefined;\n };\n let mode = chooseView(rendered, frameWidth(), frameHeight()).mode;\n let width = frameWidth();\n let height = frameHeight();\n let svg: SVGSVGElement | null = null;\n let step = 0;\n let playing = !reduce;\n let at = reduce ? (timeline.stills[0] ?? 0) : 0;\n let born = Date.now();\n\n /** 動きの変数を付けた図を置き直す。置き直すと動きの時計が最初から数え直される */\n const place = (markup?: string): void => {\n let next: SVGSVGElement | null;\n if (markup !== undefined) {\n const holder = doc.createElement(\"div\");\n holder.innerHTML = markup;\n next = holder.querySelector(\"svg\");\n } else {\n next = svg ? (svg.cloneNode(true) as SVGSVGElement) : null;\n }\n if (!next) return;\n next.setAttribute(\"aria-hidden\", \"true\");\n next.removeAttribute(\"role\");\n next.removeAttribute(\"aria-label\");\n next.style.setProperty(\"--at\", String(at));\n next.style.setProperty(\"--play\", playing ? \"running\" : \"paused\");\n next.dataset.motion = playing ? \"play\" : \"still\";\n if (svg) svg.replaceWith(next);\n else frame.append(next);\n svg = next;\n born = Date.now();\n };\n const markup = (): string => (mode === \"follow\" ? drawSvg(rendered.diagram, rendered.layout, timeline, palette, rendered.theme, { width, ...(height === undefined ? {} : { height }), lang }) : rendered.svg);\n\n const now = (): number => (playing ? (at + (Date.now() - born) / 1000) % timeline.total : at);\n const stepAt = (t: number): number => {\n let found = 0;\n timeline.steps.forEach((span: Span, i) => {\n if (span.start <= t) found = i;\n });\n return found;\n };\n const show = (): void => {\n const current = steps[step];\n no.textContent = stepNo(step, count);\n title.textContent = current?.title ?? \"\";\n body.textContent = current?.body ?? \"\";\n toggleButton.setAttribute(\"aria-label\", playing ? words.pause : words.play);\n toggleButton.textContent = playing ? BUTTON_TEXT.pause : BUTTON_TEXT.play;\n options.onStep?.(step);\n };\n const restart = (t: number, play: boolean): void => {\n at = t;\n playing = play;\n place();\n show();\n };\n const go = (target: number): void => {\n step = Math.min(count - 1, Math.max(0, target));\n const span = timeline.steps[step] as Span;\n restart(playing ? span.start : (timeline.stills[step] ?? span.start), playing);\n };\n\n place(markup());\n show();\n\n const timer = win?.setInterval(() => {\n if (!playing) return;\n const s = stepAt(now());\n if (s !== step) {\n step = s;\n show();\n }\n }, 120);\n const onPrev = (): void => go(step - 1);\n const onNext = (): void => go(step + 1);\n const onToggle = (): void => (playing ? restart(now(), false) : restart(at, true));\n // 段の番号を押すとその段へ移る\n const onFigure = (event: Event): void => {\n const target = (event.target as Element | null)?.closest?.(\"[data-step]\");\n const s = target ? Number(target.getAttribute(\"data-step\")) : Number.NaN;\n if (Number.isInteger(s)) go(s);\n };\n prevButton.addEventListener(\"click\", onPrev);\n nextButton.addEventListener(\"click\", onNext);\n toggleButton.addEventListener(\"click\", onToggle);\n frame.addEventListener(\"click\", onFigure);\n\n // 枠の大きさが変わったら見せ方を選び直す。寄って追う窓は幅 (高さに収める時は高さも) で決まるので、変われば描き直す\n const Observer = (win as (Window & { ResizeObserver?: typeof ResizeObserver }) | null)?.ResizeObserver;\n const observer = Observer\n ? new Observer(() => {\n const w = frameWidth();\n const h = frameHeight();\n const chosen = chooseView(rendered, w, h).mode;\n if (chosen === mode && (mode === \"fixed\" || (w === width && h === height))) return;\n const t = now();\n mode = chosen;\n width = w;\n height = h;\n at = t;\n place(markup());\n })\n : undefined;\n observer?.observe(frame);\n\n return {\n get step() {\n return step;\n },\n get playing() {\n return playing;\n },\n next: onNext,\n prev: onPrev,\n play: () => {\n if (!playing) restart(at, true);\n },\n pause: () => {\n if (playing) restart(now(), false);\n },\n destroy: () => {\n if (timer !== undefined) win?.clearInterval(timer);\n observer?.disconnect();\n prevButton.removeEventListener(\"click\", onPrev);\n nextButton.removeEventListener(\"click\", onNext);\n toggleButton.removeEventListener(\"click\", onToggle);\n frame.removeEventListener(\"click\", onFigure);\n root.remove();\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/markdown.ts","../src/field-messages.ts","../src/schemas/validate-diagram.js","../src/schema.ts","../src/words.ts","../src/messages.ts","../src/tokenize.ts","../src/version.ts","../src/parser.ts","../src/printer.ts","../src/look/fonts.ts","../src/look/palettes.json","../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/timeline.ts","../src/render/icons.ts","../src/render/parts.ts","../src/render/motion.ts","../src/render/svg.ts","../src/view.ts","../src/player.ts"],"names":["text","key","value","ja","field","en","list","rest","attrs","name","shown","strip","edge","label","event","pad","px","action","badge","box","band","right","lane","y","lifeline","S","vh","mw","k","mh","bw","r","font","step","markup"],"mappings":"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AAA,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,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,G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","file":"index.cjs","sourcesContent":["/**\n * Markdown の中の dragon の囲み (```dragon) を、囲みごとに取り出す。\n *\n * 囲みの開き方と閉じ方は CommonMark に従う。` か ~ を 3 つ以上並べて開き、同じ字を開いた数以上\n * 並べて閉じる。閉じていない囲みは文書の終わりまでを中身にする。dragon 以外の言語の囲みの中は読まない。\n */\nexport interface Fence {\n /** 囲みの中身 (記法) */\n source: string;\n /** 中身の 1 行目が文書の何行目か。記法の誤りの行を文書の行に直す時に足す */\n line: number;\n}\n\nexport function extractDiagrams(markdown: string): Fence[] {\n const lines = markdown.split(/\\r?\\n/);\n if (lines[lines.length - 1] === \"\") lines.pop();\n const fences: Fence[] = [];\n let open: { mark: string; dragon: boolean; start: number; body: string[] } | undefined;\n lines.forEach((text, index) => {\n if (!open) {\n const found = /^ {0,3}(`{3,}|~{3,})\\s*([^\\s`]*)/.exec(text);\n if (found) open = { mark: found[1] ?? \"\", dragon: found[2] === \"dragon\", start: index + 2, body: [] };\n return;\n }\n const close = /^ {0,3}(`{3,}|~{3,})\\s*$/.exec(text)?.[1];\n if (close !== undefined && close[0] === open.mark[0] && close.length >= open.mark.length) {\n if (open.dragon) fences.push({ source: open.body.join(\"\\n\"), line: open.start });\n open = undefined;\n return;\n }\n open.body.push(text);\n });\n if (open?.dragon) fences.push({ source: open.body.join(\"\\n\"), line: open.start });\n return fences;\n}\n","/**\n * 原本の JSON の誤りの文 (#2999)。\n *\n * JSON は語を持たず file から言葉を決められないので、呼ぶ側 (頁なら頁の言葉) が言葉を渡す。\n * 文は schema が使う決まり (JSON Schema の keyword) ごとに持ち、ajv の英語の文はそのまま出さない。\n * schema に決まりを足して文が無い時は、`every-schema-keyword-has-messages` の検査が落ちる。\n */\nimport type { NotationLang } from \"./words\";\n\n/** `^[^…]+$` の形の決まりが書けないとする字。`space` は空白 (`\\s`) */\nexport interface Forbidden {\n space: boolean;\n chars: string[];\n}\n\n/** 書けない組み合わせ (`not`) の欄と、その欄を書ける時の `kind` の値 */\nexport interface Allowed {\n field: string;\n kind: string;\n}\n\nexport interface FieldMessages {\n additionalProperties: (key: string) => string;\n required: (key: string) => string;\n enum: (values: readonly string[]) => string;\n type: (type: string) => string;\n minLength: (limit: number) => string;\n /** 書けない字を読めない形の決まりでは `undefined` */\n pattern: (forbidden: Forbidden | undefined) => string;\n minItems: (limit: number) => string;\n minimum: (limit: number) => string;\n const: (value: string) => string;\n /** どの欄の組み合わせか判らない場所では `undefined` */\n not: (allowed: Allowed | undefined) => string;\n /** 選べる決まりがどれも欄が足りない時の、足りない欄。それ以外の時は空 */\n anyOf: (fields: readonly string[]) => string;\n oneOf: string;\n discriminator: (tag: string, values: readonly string[]) => string;\n /** 道具より新しい版の図 */\n newer: (version: number, tool: number) => string;\n}\n\nconst TYPES_JA: Record<string, string> = {\n string: \"文字列にする\",\n integer: \"整数にする\",\n number: \"数にする\",\n object: \"オブジェクトにする\",\n array: \"配列にする\",\n boolean: \"true か false にする\",\n null: \"null にする\",\n};\n\nconst TYPES_EN: Record<string, string> = {\n string: \"Use a string\",\n integer: \"Use an integer\",\n number: \"Use a number\",\n object: \"Use an object\",\n array: \"Use an array\",\n boolean: \"Use true or false\",\n null: \"Use null\",\n};\n\nconst plural = (count: number, word: string): string => `${count} ${word}${count === 1 ? \"\" : \"s\"}`;\n\nconst ja: FieldMessages = {\n additionalProperties: (key) => `${key} という欄は書けない`,\n required: (key) => `${key} の欄が要る`,\n enum: (values) => `${values.join(\" / \")} のどれかにする`,\n type: (type) => TYPES_JA[type] ?? `${type} にする`,\n minLength: (limit) => `${limit} 字以上書く`,\n pattern: (forbidden) =>\n forbidden ? `${forbidden.space ? \"空白と \" : \"\"}${forbidden.chars.join(\" \")} は使えない` : \"使えない字が入っている\",\n minItems: (limit) => `${limit} つ以上書く`,\n minimum: (limit) => `${limit} 以上にする`,\n const: (value) => `${value} にする`,\n not: (allowed) => (allowed ? `${allowed.field} の欄は kind が ${allowed.kind} の時だけ書ける` : \"この欄の組み合わせは書けない\"),\n anyOf: (fields) =>\n fields.length > 0 ? `${fields.join(\" か \")} の${fields.length === 2 ? \"どちらか\" : \"どれか\"}の欄が要る` : \"書ける形のどれにも合わない\",\n oneOf: \"書ける形のどれか 1 つだけに合わせる\",\n discriminator: (tag, values) => `${tag} は ${values.join(\" / \")} のどれかにする`,\n newer: (version, tool) => `版 ${version} の図は、この道具 (版 ${tool}) より新しいので読めない。道具を新しくする`,\n};\n\nconst en: FieldMessages = {\n additionalProperties: (key) => `The ${key} field is not allowed`,\n required: (key) => `The ${key} field is required`,\n enum: (values) => `Use one of ${values.join(\" / \")}`,\n type: (type) => TYPES_EN[type] ?? `Use ${type}`,\n minLength: (limit) => `Write at least ${plural(limit, \"character\")}`,\n pattern: (forbidden) =>\n forbidden\n ? `Cannot contain ${forbidden.space ? \"spaces or \" : \"\"}${forbidden.chars.join(\" \")}`\n : \"Contains characters that are not allowed\",\n minItems: (limit) => `Write at least ${plural(limit, \"item\")}`,\n minimum: (limit) => `Use ${limit} or greater`,\n const: (value) => `Use ${value}`,\n not: (allowed) => (allowed ? `The ${allowed.field} field is allowed only when kind is ${allowed.kind}` : \"This combination of fields is not allowed\"),\n anyOf: (fields) => (fields.length > 0 ? `Write one of the ${fields.join(\" or \")} fields` : \"Does not match any of the allowed shapes\"),\n oneOf: \"Match exactly one of the allowed shapes\",\n discriminator: (tag, values) => `${tag} is one of ${values.join(\" / \")}`,\n newer: (version, tool) => `Version ${version} diagrams are newer than this tool (version ${tool}) and cannot be read. Update the tool`,\n};\n\nexport const FIELD_MESSAGES: Record<NotationLang, FieldMessages> = { ja, en };\n","/* eslint-disable */\n// packages/dragon/scripts/build-validator.mjs が diagram.schema.json から書き出した。手で直さない\nfunction ucs2length(str) {\n let length = 0;\n for (const _ of str) length++;\n return length;\n}\nexport const validate = validate10;export default validate10;const schema11 = {\"title\":\"dragon の図の原本\",\"description\":\"区画、箱、線、運ぶ物、段、中身の帯の 6 部品を共通の骨組みに置き、図の種類だけの物は種類の欄に置く。座標は持たない。\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"version\",\"kind\",\"title\",\"boxes\",\"steps\"],\"properties\":{\"version\":{\"description\":\"形式の版\",\"type\":\"integer\",\"minimum\":1},\"kind\":{\"description\":\"図の種類\",\"enum\":[\"sequence\",\"architecture\"]},\"title\":{\"$ref\":\"#/definitions/text\"},\"view\":{\"description\":\"見せ方。書かなければ字の大きさで選ぶ。fixed は全体を止めて中だけ動かし、follow は寄って動かし全体図で今どこかを示す\",\"enum\":[\"fixed\",\"follow\"]},\"regions\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/region\"}},\"boxes\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/box\"}},\"strip\":{\"$ref\":\"#/definitions/strip\"},\"steps\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/step\"}},\"sequence\":{\"$ref\":\"#/definitions/sequence\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"sequence\"}}},\"then\":{\"required\":[\"sequence\"]},\"else\":{\"not\":{\"required\":[\"sequence\"]}},\"definitions\":{\"text\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"},\"color\":{\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]},\"region\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}},\"box\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}},\"strip\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}},\"step\":{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}},\"event\":{\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]},\"carry\":{\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}},\"sequence\":{\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}}}};const schema12 = {\"type\":\"string\",\"minLength\":1};const func2 = Object.prototype.hasOwnProperty;const func3 = ucs2length;const schema13 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"note\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"}}};const schema14 = {\"type\":\"string\",\"pattern\":\"^[^\\\\s\\\\[\\\\]「」=:]+$\"};const schema17 = {\"enum\":[\"blue\",\"amber\",\"green\",\"violet\",\"rose\",\"slate\",\"coin\"]};const pattern0 = new RegExp(\"^[^\\\\s\\\\[\\\\]「」=:]+$\", \"u\");function validate11(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!(((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"note\")) || (key0 === \"color\")) || (key0 === \"icon\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.note !== undefined){let data2 = data.note;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/note\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}else {const err12 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}validate11.errors = vErrors;return errors === 0;}const schema19 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"$ref\":\"#/definitions/id\"},\"name\":{\"$ref\":\"#/definitions/text\"},\"sub\":{\"$ref\":\"#/definitions/text\"},\"color\":{\"$ref\":\"#/definitions/color\"},\"icon\":{\"$ref\":\"#/definitions/text\"},\"region\":{\"$ref\":\"#/definitions/id\"}}};function validate13(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"id\"},message:\"must have required property '\"+\"id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.name === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"name\"},message:\"must have required property '\"+\"name\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((((((key0 === \"id\") || (key0 === \"name\")) || (key0 === \"sub\")) || (key0 === \"color\")) || (key0 === \"icon\")) || (key0 === \"region\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.id !== undefined){let data0 = data.id;if(typeof data0 === \"string\"){if(!pattern0.test(data0)){const err3 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/id\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.name !== undefined){let data1 = data.name;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err5 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}else {const err6 = {instancePath:instancePath+\"/name\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.sub !== undefined){let data2 = data.sub;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err7 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/sub\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.color !== undefined){let data3 = data.color;if(!(((((((data3 === \"blue\") || (data3 === \"amber\")) || (data3 === \"green\")) || (data3 === \"violet\")) || (data3 === \"rose\")) || (data3 === \"slate\")) || (data3 === \"coin\"))){const err9 = {instancePath:instancePath+\"/color\",schemaPath:\"#/definitions/color/enum\",keyword:\"enum\",params:{allowedValues: schema17.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.icon !== undefined){let data4 = data.icon;if(typeof data4 === \"string\"){if(func3(data4) < 1){const err10 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+\"/icon\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.region !== undefined){let data5 = data.region;if(typeof data5 === \"string\"){if(!pattern0.test(data5)){const err12 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}else {const err13 = {instancePath:instancePath+\"/region\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}validate13.errors = vErrors;return errors === 0;}const schema26 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"fields\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/text\"}}}};function validate15(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.fields === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"fields\"},message:\"must have required property '\"+\"fields\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){if(!((key0 === \"title\") || (key0 === \"fields\"))){const err2 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err3 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.fields !== undefined){let data1 = data.fields;if(Array.isArray(data1)){if(data1.length < 1){const err5 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const len0 = data1.length;for(let i0=0; i0<len0; i0++){let data2 = data1[i0];if(typeof data2 === \"string\"){if(func3(data2) < 1){const err6 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/fields/\" + i0,schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}else {const err8 = {instancePath:instancePath+\"/fields\",schemaPath:\"#/properties/fields/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}}else {const err9 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}validate15.errors = vErrors;return errors === 0;}const schema29 = {\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"title\",\"body\",\"events\"],\"properties\":{\"title\":{\"$ref\":\"#/definitions/text\"},\"body\":{\"$ref\":\"#/definitions/text\"},\"code\":{\"$ref\":\"#/definitions/text\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/event\"}}}};const schema33 = {\"description\":\"段の中で起きること。起きる順に並べる\",\"type\":\"object\",\"required\":[\"type\"],\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"description\":\"線。運ぶ物を載せて送る側から受ける側へ走る\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"from\",\"to\",\"carry\"],\"properties\":{\"type\":{\"const\":\"edge\"},\"from\":{\"$ref\":\"#/definitions/id\"},\"to\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"},\"carry\":{\"$ref\":\"#/definitions/carry\"},\"labelSide\":{\"description\":\"線の名前を置く側 (寄せの指示)\",\"enum\":[\"above\",\"below\",\"left\",\"right\"]}}},{\"description\":\"箱の中の処理\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"label\"],\"properties\":{\"type\":{\"const\":\"action\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"label\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"箱の下の小さな字の書き換え\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"box\",\"text\"],\"properties\":{\"type\":{\"const\":\"swap\"},\"box\":{\"$ref\":\"#/definitions/id\"},\"text\":{\"$ref\":\"#/definitions/text\"}}},{\"description\":\"中身の帯の欄の値と札\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"type\",\"field\"],\"anyOf\":[{\"required\":[\"value\"]},{\"required\":[\"tag\"]}],\"properties\":{\"type\":{\"const\":\"strip\"},\"field\":{\"$ref\":\"#/definitions/text\"},\"value\":{\"$ref\":\"#/definitions/text\"},\"tag\":{\"$ref\":\"#/definitions/text\"}}}]};const schema37 = {\"description\":\"線の上を走る物。封筒 (メッセージや要求)、札 (名前のある値)、硬貨 (価値)、無し\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"envelope\",\"tag\",\"coin\",\"none\"]},\"text\":{\"$ref\":\"#/definitions/text\"}},\"if\":{\"required\":[\"kind\"],\"properties\":{\"kind\":{\"const\":\"tag\"}}},\"then\":{\"required\":[\"text\"]},\"else\":{\"not\":{\"required\":[\"text\"]}}};function validate19(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"tag\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.text === undefined){const err2 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs5 = errors;const _errs6 = errors;const _errs7 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.text === undefined) && (missing1 = \"text\")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var valid2 = _errs7 === errors;if(valid2){const err4 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}var _valid0 = _errs5 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err5 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.kind === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}for(const key0 in data){if(!((key0 === \"kind\") || (key0 === \"text\"))){const err7 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.kind !== undefined){let data1 = data.kind;if(!((((data1 === \"envelope\") || (data1 === \"tag\")) || (data1 === \"coin\")) || (data1 === \"none\"))){const err8 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema37.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.text !== undefined){let data2 = data.text;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err9 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate19.errors = vErrors;return errors === 0;}function validate18(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}const tag0 = data.type;if(typeof tag0 == \"string\"){if(tag0 === \"edge\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err1 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.from === undefined){const err2 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"from\"},message:\"must have required property '\"+\"from\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.to === undefined){const err3 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"to\"},message:\"must have required property '\"+\"to\"+\"'\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}if(data.carry === undefined){const err4 = {instancePath,schemaPath:\"#/oneOf/0/required\",keyword:\"required\",params:{missingProperty: \"carry\"},message:\"must have required property '\"+\"carry\"+\"'\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}for(const key0 in data){if(!((((((key0 === \"type\") || (key0 === \"from\")) || (key0 === \"to\")) || (key0 === \"label\")) || (key0 === \"carry\")) || (key0 === \"labelSide\"))){const err5 = {instancePath,schemaPath:\"#/oneOf/0/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.type !== undefined){if(\"edge\" !== data.type){const err6 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/0/properties/type/const\",keyword:\"const\",params:{allowedValue: \"edge\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.from !== undefined){let data1 = data.from;if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err7 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}else {const err8 = {instancePath:instancePath+\"/from\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.to !== undefined){let data2 = data.to;if(typeof data2 === \"string\"){if(!pattern0.test(data2)){const err9 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/to\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.label !== undefined){let data3 = data.label;if(typeof data3 === \"string\"){if(func3(data3) < 1){const err11 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.carry !== undefined){if(!(validate19(data.carry, {instancePath:instancePath+\"/carry\",parentData:data,parentDataProperty:\"carry\",rootData}))){vErrors = vErrors === null ? validate19.errors : vErrors.concat(validate19.errors);errors = vErrors.length;}}if(data.labelSide !== undefined){let data5 = data.labelSide;if(!((((data5 === \"above\") || (data5 === \"below\")) || (data5 === \"left\")) || (data5 === \"right\"))){const err13 = {instancePath:instancePath+\"/labelSide\",schemaPath:\"#/oneOf/0/properties/labelSide/enum\",keyword:\"enum\",params:{allowedValues: schema33.oneOf[0].properties.labelSide.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}else {const err14 = {instancePath,schemaPath:\"#/oneOf/0/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else if(tag0 === \"action\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err15 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.box === undefined){const err16 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(data.label === undefined){const err17 = {instancePath,schemaPath:\"#/oneOf/1/required\",keyword:\"required\",params:{missingProperty: \"label\"},message:\"must have required property '\"+\"label\"+\"'\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}for(const key1 in data){if(!(((key1 === \"type\") || (key1 === \"box\")) || (key1 === \"label\"))){const err18 = {instancePath,schemaPath:\"#/oneOf/1/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key1},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.type !== undefined){if(\"action\" !== data.type){const err19 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/1/properties/type/const\",keyword:\"const\",params:{allowedValue: \"action\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data.box !== undefined){let data7 = data.box;if(typeof data7 === \"string\"){if(!pattern0.test(data7)){const err20 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}else {const err21 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.label !== undefined){let data8 = data.label;if(typeof data8 === \"string\"){if(func3(data8) < 1){const err22 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+\"/label\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath,schemaPath:\"#/oneOf/1/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}else if(tag0 === \"swap\"){if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err25 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}if(data.box === undefined){const err26 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"box\"},message:\"must have required property '\"+\"box\"+\"'\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}if(data.text === undefined){const err27 = {instancePath,schemaPath:\"#/oneOf/2/required\",keyword:\"required\",params:{missingProperty: \"text\"},message:\"must have required property '\"+\"text\"+\"'\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}for(const key2 in data){if(!(((key2 === \"type\") || (key2 === \"box\")) || (key2 === \"text\"))){const err28 = {instancePath,schemaPath:\"#/oneOf/2/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key2},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.type !== undefined){if(\"swap\" !== data.type){const err29 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/2/properties/type/const\",keyword:\"const\",params:{allowedValue: \"swap\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}if(data.box !== undefined){let data10 = data.box;if(typeof data10 === \"string\"){if(!pattern0.test(data10)){const err30 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+\"/box\",schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data.text !== undefined){let data11 = data.text;if(typeof data11 === \"string\"){if(func3(data11) < 1){const err32 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+\"/text\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}}else {const err34 = {instancePath,schemaPath:\"#/oneOf/2/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}else if(tag0 === \"strip\"){const _errs39 = errors;let valid15 = false;const _errs40 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.value === undefined){const err35 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/0/required\",keyword:\"required\",params:{missingProperty: \"value\"},message:\"must have required property '\"+\"value\"+\"'\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}var _valid0 = _errs40 === errors;valid15 = valid15 || _valid0;if(!valid15){const _errs41 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.tag === undefined){const err36 = {instancePath,schemaPath:\"#/oneOf/3/anyOf/1/required\",keyword:\"required\",params:{missingProperty: \"tag\"},message:\"must have required property '\"+\"tag\"+\"'\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}var _valid0 = _errs41 === errors;valid15 = valid15 || _valid0;}if(!valid15){const err37 = {instancePath,schemaPath:\"#/oneOf/3/anyOf\",keyword:\"anyOf\",params:{},message:\"must match a schema in anyOf\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.type === undefined){const err38 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}if(data.field === undefined){const err39 = {instancePath,schemaPath:\"#/oneOf/3/required\",keyword:\"required\",params:{missingProperty: \"field\"},message:\"must have required property '\"+\"field\"+\"'\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}for(const key3 in data){if(!((((key3 === \"type\") || (key3 === \"field\")) || (key3 === \"value\")) || (key3 === \"tag\"))){const err40 = {instancePath,schemaPath:\"#/oneOf/3/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key3},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}}if(data.type !== undefined){if(\"strip\" !== data.type){const err41 = {instancePath:instancePath+\"/type\",schemaPath:\"#/oneOf/3/properties/type/const\",keyword:\"const\",params:{allowedValue: \"strip\"},message:\"must be equal to constant\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}if(data.field !== undefined){let data13 = data.field;if(typeof data13 === \"string\"){if(func3(data13) < 1){const err42 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}else {const err43 = {instancePath:instancePath+\"/field\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}if(data.value !== undefined){let data14 = data.value;if(typeof data14 === \"string\"){if(func3(data14) < 1){const err44 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+\"/value\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data.tag !== undefined){let data15 = data.tag;if(typeof data15 === \"string\"){if(func3(data15) < 1){const err46 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}else {const err47 = {instancePath:instancePath+\"/tag\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}}}else {const err48 = {instancePath,schemaPath:\"#/oneOf/3/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"mapping\", tag: \"type\", tagValue: tag0},message:\"value of tag \\\"type\\\" must be in oneOf\"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}else {const err50 = {instancePath,schemaPath:\"#/discriminator\",keyword:\"discriminator\",params:{error: \"tag\", tag: \"type\", tagValue: tag0},message:\"tag \\\"type\\\" must be string\"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}else {const err51 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}validate18.errors = vErrors;return errors === 0;}function validate17(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.title === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.body === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"body\"},message:\"must have required property '\"+\"body\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.events === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"events\"},message:\"must have required property '\"+\"events\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){if(!((((key0 === \"title\") || (key0 === \"body\")) || (key0 === \"code\")) || (key0 === \"events\"))){const err3 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.title !== undefined){let data0 = data.title;if(typeof data0 === \"string\"){if(func3(data0) < 1){const err4 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}else {const err5 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.body !== undefined){let data1 = data.body;if(typeof data1 === \"string\"){if(func3(data1) < 1){const err6 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+\"/body\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.code !== undefined){let data2 = data.code;if(typeof data2 === \"string\"){if(func3(data2) < 1){const err8 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+\"/code\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.events !== undefined){let data3 = data.events;if(Array.isArray(data3)){const len0 = data3.length;for(let i0=0; i0<len0; i0++){if(!(validate18(data3[i0], {instancePath:instancePath+\"/events/\" + i0,parentData:data3,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate18.errors : vErrors.concat(validate18.errors);errors = vErrors.length;}}}else {const err10 = {instancePath:instancePath+\"/events\",schemaPath:\"#/properties/events/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate17.errors = vErrors;return errors === 0;}const schema46 = {\"description\":\"時系列図の種類の欄。生存線を左から並べる順\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"lifelines\"],\"properties\":{\"lifelines\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/id\"}}}};function validate23(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.lifelines === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"lifelines\"},message:\"must have required property '\"+\"lifelines\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!(key0 === \"lifelines\")){const err1 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.lifelines !== undefined){let data0 = data.lifelines;if(Array.isArray(data0)){if(data0.length < 1){const err2 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}const len0 = data0.length;for(let i0=0; i0<len0; i0++){let data1 = data0[i0];if(typeof data1 === \"string\"){if(!pattern0.test(data1)){const err3 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/pattern\",keyword:\"pattern\",params:{pattern: \"^[^\\\\s\\\\[\\\\]「」=:]+$\"},message:\"must match pattern \\\"\"+\"^[^\\\\s\\\\[\\\\]「」=:]+$\"+\"\\\"\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}else {const err4 = {instancePath:instancePath+\"/lifelines/\" + i0,schemaPath:\"#/definitions/id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}else {const err5 = {instancePath:instancePath+\"/lifelines\",schemaPath:\"#/properties/lifelines/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}}else {const err6 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}validate23.errors = vErrors;return errors === 0;}function validate10(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing0;if((data.kind === undefined) && (missing0 = \"kind\")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.kind !== undefined){if(\"sequence\" !== data.kind){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.sequence === undefined){const err2 = {instancePath,schemaPath:\"#/then/required\",keyword:\"required\",params:{missingProperty: \"sequence\"},message:\"must have required property '\"+\"sequence\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs4 === errors;valid0 = _valid0;ifClause0 = \"then\";}else {const _errs5 = errors;const _errs6 = errors;const _errs7 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){let missing1;if((data.sequence === undefined) && (missing1 = \"sequence\")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var valid2 = _errs7 === errors;if(valid2){const err4 = {instancePath,schemaPath:\"#/else/not\",keyword:\"not\",params:{},message:\"must NOT be valid\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}var _valid0 = _errs5 === errors;valid0 = _valid0;ifClause0 = \"else\";}if(!valid0){const err5 = {instancePath,schemaPath:\"#/if\",keyword:\"if\",params:{failingKeyword: ifClause0},message:\"must match \\\"\"+ifClause0+\"\\\" schema\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.version === undefined){const err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"version\"},message:\"must have required property '\"+\"version\"+\"'\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}if(data.kind === undefined){const err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"kind\"},message:\"must have required property '\"+\"kind\"+\"'\"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(data.title === undefined){const err8 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"title\"},message:\"must have required property '\"+\"title\"+\"'\"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data.boxes === undefined){const err9 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"boxes\"},message:\"must have required property '\"+\"boxes\"+\"'\"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data.steps === undefined){const err10 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"steps\"},message:\"must have required property '\"+\"steps\"+\"'\"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key0 in data){if(!(func2.call(schema11.properties, key0))){const err11 = {instancePath,schemaPath:\"#/additionalProperties\",keyword:\"additionalProperties\",params:{additionalProperty: key0},message:\"must NOT have additional properties\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.version !== undefined){let data1 = data.version;if(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){const err12 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if((typeof data1 == \"number\") && (isFinite(data1))){if(data1 < 1 || isNaN(data1)){const err13 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 1},message:\"must be >= 1\"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}if(data.kind !== undefined){let data2 = data.kind;if(!((data2 === \"sequence\") || (data2 === \"architecture\"))){const err14 = {instancePath:instancePath+\"/kind\",schemaPath:\"#/properties/kind/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.kind.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data.title !== undefined){let data3 = data.title;if(typeof data3 === \"string\"){if(func3(data3) < 1){const err15 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/title\",schemaPath:\"#/definitions/text/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data.view !== undefined){let data4 = data.view;if(!((data4 === \"fixed\") || (data4 === \"follow\"))){const err17 = {instancePath:instancePath+\"/view\",schemaPath:\"#/properties/view/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.view.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data.regions !== undefined){let data5 = data.regions;if(Array.isArray(data5)){const len0 = data5.length;for(let i0=0; i0<len0; i0++){if(!(validate11(data5[i0], {instancePath:instancePath+\"/regions/\" + i0,parentData:data5,parentDataProperty:i0,rootData}))){vErrors = vErrors === null ? validate11.errors : vErrors.concat(validate11.errors);errors = vErrors.length;}}}else {const err18 = {instancePath:instancePath+\"/regions\",schemaPath:\"#/properties/regions/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.boxes !== undefined){let data7 = data.boxes;if(Array.isArray(data7)){if(data7.length < 1){const err19 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}const len1 = data7.length;for(let i1=0; i1<len1; i1++){if(!(validate13(data7[i1], {instancePath:instancePath+\"/boxes/\" + i1,parentData:data7,parentDataProperty:i1,rootData}))){vErrors = vErrors === null ? validate13.errors : vErrors.concat(validate13.errors);errors = vErrors.length;}}}else {const err20 = {instancePath:instancePath+\"/boxes\",schemaPath:\"#/properties/boxes/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}if(data.strip !== undefined){if(!(validate15(data.strip, {instancePath:instancePath+\"/strip\",parentData:data,parentDataProperty:\"strip\",rootData}))){vErrors = vErrors === null ? validate15.errors : vErrors.concat(validate15.errors);errors = vErrors.length;}}if(data.steps !== undefined){let data10 = data.steps;if(Array.isArray(data10)){if(data10.length < 1){const err21 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/minItems\",keyword:\"minItems\",params:{limit: 1},message:\"must NOT have fewer than 1 items\"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}const len2 = data10.length;for(let i2=0; i2<len2; i2++){if(!(validate17(data10[i2], {instancePath:instancePath+\"/steps/\" + i2,parentData:data10,parentDataProperty:i2,rootData}))){vErrors = vErrors === null ? validate17.errors : vErrors.concat(validate17.errors);errors = vErrors.length;}}}else {const err22 = {instancePath:instancePath+\"/steps\",schemaPath:\"#/properties/steps/type\",keyword:\"type\",params:{type: \"array\"},message:\"must be array\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}if(data.sequence !== undefined){if(!(validate23(data.sequence, {instancePath:instancePath+\"/sequence\",parentData:data,parentDataProperty:\"sequence\",rootData}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}}}else {const err23 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}validate10.errors = vErrors;return errors === 0;}\n","/**\n * 図の原本の形と、原本を JSON Schema で検査する命令。\n *\n * 形の正は `schemas/diagram.schema.json` の 1 本で、下の型はその写し。\n * 誤りは JSON Pointer で場所を示す。欄が足りない時と知らない欄がある時は、その欄の場所まで示す。\n * 誤りの文は呼ぶ側が渡した言葉 (渡さなければ日本語) で出す。文の表は `field-messages.ts` が持つ (#2999)。\n *\n * 検査の関数は schema から前もって書き出した物 (`schemas/validate-diagram.js`) を使う。\n * ajv に schema をその場で組み立てさせると `new Function` を使い、`eval` を許さない頁の CSP で止まる。\n * 書き出しは `scripts/build-validator.mjs` が ajv の設定 `{ allErrors: true, discriminator: true, strictTypes: false }` で行う。\n */\nimport type { ErrorObject } from \"ajv\";\nimport { type Allowed, FIELD_MESSAGES, type FieldMessages, type Forbidden } from \"./field-messages\";\nimport validate from \"./schemas/validate-diagram.js\";\nimport type { NotationLang } from \"./words\";\n\nexport type Color = \"blue\" | \"amber\" | \"green\" | \"violet\" | \"rose\" | \"slate\" | \"coin\";\n/** 色の役の一覧。記法の `color:` に書ける値と、誤りの文に並べる値 */\nexport const COLORS: readonly Color[] = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\", \"slate\", \"coin\"];\n\nexport interface Region {\n id: string;\n name: string;\n note?: string;\n color?: Color;\n icon?: string;\n}\n\nexport interface Box {\n id: string;\n name: string;\n sub?: string;\n color?: Color;\n icon?: string;\n region?: string;\n}\n\nexport type Carry = { kind: \"envelope\" } | { kind: \"tag\"; text: string } | { kind: \"coin\" } | { kind: \"none\" };\n\nexport type LabelSide = \"above\" | \"below\" | \"left\" | \"right\";\n\n/** 見せ方。`fixed` は全体を止めて中だけ動かし、`follow` は寄って動かし全体図で今どこかを示す。 */\nexport type ViewMode = \"fixed\" | \"follow\";\n\nexport type DiagramEvent =\n | { type: \"edge\"; from: string; to: string; label?: string; carry: Carry; labelSide?: LabelSide }\n | { type: \"action\"; box: string; label: string }\n | { type: \"swap\"; box: string; text: string }\n | { type: \"strip\"; field: string; value?: string; tag?: string };\n\nexport interface Step {\n title: string;\n body: string;\n code?: string;\n events: DiagramEvent[];\n}\n\nexport interface Diagram {\n version: number;\n kind: \"sequence\" | \"architecture\";\n title: string;\n view?: ViewMode;\n regions?: Region[];\n boxes: Box[];\n strip?: { title: string; fields: string[] };\n steps: Step[];\n sequence?: { lifelines: string[] };\n}\n\nexport interface FieldError {\n /** 誤った欄の場所 (JSON Pointer) */\n pointer: string;\n message: string;\n}\n\nexport type Checked = { ok: true } | { ok: false; errors: FieldError[] };\n\nexport interface CheckOptions {\n /** 誤りの文の言葉。渡さなければ日本語 */\n lang?: NotationLang;\n}\n\n/** 段の中で起きることの種類。schema の event の `discriminator` が見る `type` の値 */\nconst EVENT_TYPES = [\"edge\", \"action\", \"swap\", \"strip\"] as const satisfies readonly DiagramEvent[\"type\"][];\n\n/**\n * schema の書けない組み合わせ (`else: { not: { required: [欄] } }`) の 2 か所。誤りの場所の最後の欄で引き、根は \"\" で引く。\n * 2 か所とも ajv の誤りでは決まりの場所 (`#/else/not`) が同じになるので、誤りの場所で分ける\n */\nconst NOT_ALLOWED: Record<string, Allowed> = {\n \"\": { field: \"sequence\", kind: \"sequence\" },\n carry: { field: \"text\", kind: \"tag\" },\n};\n\nconst escape = (key: string): string => key.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n\n/** `^[^…]+$` の形の決まりから書けない字を読む。違う形の決まりでは `undefined` */\nfunction forbiddenOf(pattern: string): Forbidden | undefined {\n const inside = /^\\^\\[\\^(.+)\\]\\+\\$$/u.exec(pattern)?.[1];\n if (inside === undefined) return undefined;\n const chars: string[] = inside.match(/\\\\.|[^\\\\]/gu) ?? [];\n return { space: chars.includes(\"\\\\s\"), chars: chars.filter((char) => char !== \"\\\\s\").map((char) => char.replace(/^\\\\/u, \"\")) };\n}\n\n/** `anyOf` の中の決まりが出した誤り。`anyOf` の誤り 1 つにまとめて出す */\nconst branchesOf = (anyOf: ErrorObject, errors: readonly ErrorObject[]): ErrorObject[] =>\n errors.filter(\n (error) =>\n error !== anyOf &&\n error.schemaPath.startsWith(`${anyOf.schemaPath}/`) &&\n (error.instancePath === anyOf.instancePath || error.instancePath.startsWith(`${anyOf.instancePath}/`)),\n );\n\nfunction toFieldError(error: ErrorObject, errors: readonly ErrorObject[], m: FieldMessages): FieldError {\n const params = error.params as Record<string, unknown>;\n const at = error.instancePath;\n switch (error.keyword) {\n case \"additionalProperties\": {\n const key = String(params.additionalProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.additionalProperties(key) };\n }\n case \"required\": {\n const key = String(params.missingProperty);\n return { pointer: `${at}/${escape(key)}`, message: m.required(key) };\n }\n case \"not\": {\n const allowed = NOT_ALLOWED[at.slice(at.lastIndexOf(\"/\") + 1)];\n return { pointer: allowed ? `${at}/${allowed.field}` : at, message: m.not(allowed) };\n }\n case \"anyOf\": {\n const branches = branchesOf(error, errors);\n const missing = branches.every((branch) => branch.keyword === \"required\") ? branches.map((branch) => String(branch.params.missingProperty)) : [];\n return { pointer: at, message: m.anyOf(missing) };\n }\n case \"discriminator\": {\n const tag = String(params.tag);\n return { pointer: `${at}/${escape(tag)}`, message: m.discriminator(tag, EVENT_TYPES) };\n }\n case \"enum\":\n return { pointer: at, message: m.enum((params.allowedValues as unknown[]).map(String)) };\n case \"type\":\n return { pointer: at, message: m.type(String(params.type)) };\n case \"minLength\":\n return { pointer: at, message: m.minLength(Number(params.limit)) };\n case \"pattern\":\n return { pointer: at, message: m.pattern(forbiddenOf(String(params.pattern))) };\n case \"minItems\":\n return { pointer: at, message: m.minItems(Number(params.limit)) };\n case \"minimum\":\n return { pointer: at, message: m.minimum(Number(params.limit)) };\n case \"const\":\n return { pointer: at, message: m.const(String(params.allowedValue)) };\n case \"oneOf\":\n return { pointer: at, message: m.oneOf };\n default:\n return { pointer: at, message: error.message ?? error.keyword };\n }\n}\n\n/** 原本の JSON を検査する。版が道具より新しいかは見ない (`readDiagram` が見る)。 */\nexport function validateDiagram(input: unknown, options: CheckOptions = {}): Checked {\n if (validate(input)) return { ok: true };\n const all = validate.errors ?? [];\n const inBranch = new Set(all.filter((error) => error.keyword === \"anyOf\").flatMap((anyOf) => branchesOf(anyOf, all)));\n const m = FIELD_MESSAGES[options.lang ?? \"ja\"];\n // 条件付きの決まり (if / then) は中で落ちた決まりの誤りを別に出すので、包む側の if の誤りは出さない\n const errors = all.filter((error) => error.keyword !== \"if\" && !inBranch.has(error)).map((error) => toFieldError(error, all, m));\n return { ok: false, errors };\n}\n","/**\n * dragon記法の語 (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、属性は `[<鍵>: <値>]` で書く。\n * 語は英語だけで、原本の JSON が使う名前に揃え、記法と JSON で覚える語を 1 組にする。\n *\n * 言葉の型 (`NotationLang`) は、誤りの文と図の中の字の言葉を選ぶために持つ。\n * 語が英語だけなので、記法の file から言葉は決めず、呼ぶ側が渡す。\n *\n * 型が欠けを止める。原本の JSON の値 (図の種類、運ぶ物、見せ方、名前の側) に語が無い時は、型の検査が落ちる。\n */\nimport type { Carry, Diagram, LabelSide, ViewMode } from \"./schema\";\n\nexport type NotationLang = \"ja\" | \"en\";\n\nconst keys = <K extends string>(table: Record<K, true>): K[] => Object.keys(table) as K[];\n\n/** 図の種類。最初の行の頭の語 */\nexport const KINDS = keys<Diagram[\"kind\"]>({ sequence: true, architecture: true });\n\n/** 最初の行より後の行の頭の語。線の行だけは箱の名札から始まる */\nexport const HEADS = [\"group\", \"end\", \"box\", \"strip\", \"step\", \"say\", \"code\", \"act\", \"note\", \"set\"] as const;\ntype Head = (typeof HEADS)[number];\n\n/** 箱と区画の名札の後ろに、見せる名前を続ける語 (`box <名札> as <名前>`) */\nexport const AS = \"as\";\n\n/** 行ごとに書ける属性の鍵 */\nexport const ATTRS = {\n diagram: [\"view\"],\n group: [\"note\", \"color\", \"icon\"],\n box: [\"note\", \"color\", \"icon\"],\n edge: [\"carry\", \"tag\", \"side\"],\n set: [\"tag\"],\n} as const;\n\n/** `carry` に書ける運ぶ物。封筒は書かない時、札は `tag` で書く */\nexport const CARRIES = keys<Exclude<Carry[\"kind\"], \"envelope\" | \"tag\">>({ coin: true, none: true });\nexport const VIEWS = keys<ViewMode>({ fixed: true, follow: true });\nexport const SIDES = keys<LabelSide>({ above: true, below: true, left: true, right: true });\n\n/**\n * 前の形の行 (#2997 まで) が、新しい形のどの行に当たるか。誤りの文で新しい行の形を示すために引く。\n * 鍵は前の形の行の頭の語で、記号 (`#` など) で始まる行と、名札の後ろに `=` や「」が来る行は読む側が見分ける。\n */\nexport const OLD_HEADS = {\n 時系列図: \"sequence\",\n 構成図: \"architecture\",\n 区画: \"group\",\n 見せ方: \"view\",\n region: \"group\",\n view: \"view\",\n} as const satisfies Record<string, Diagram[\"kind\"] | Head | \"view\">;\n","/**\n * dragon記法の誤りの文 (#2997、#3137)。\n *\n * 記法の語は英語だけで file から言葉が決まらないため、誤りの文は呼ぶ側が渡した言葉\n * (渡さなければ日本語) で出す。文の中の記法の語は語の表から引き、表と文で語が食い違わないようにする。\n */\nimport { COLORS } from \"./schema\";\nimport { CARRIES, HEADS, KINDS, type NotationLang, SIDES, VIEWS } from \"./words\";\n\n/** 新しい形のどの行の書き方を示すか。前の形の行に当たった時に、誤りの文が書き方を示す */\nexport type Shape = \"sequence\" | \"architecture\" | \"group\" | \"box\" | \"strip\" | \"view\" | \"step\" | \"say\" | \"code\" | \"act\" | \"note\" | \"set\";\n\nexport interface Messages {\n noHead: string;\n badHead: string;\n /** 前の形の `word` を書いた行。`shape` の行の書き方を示す */\n oldForm: (word: string, shape: Shape) => string;\n unknownHead: (word: string) => string;\n duplicate: (id: string) => string;\n needsId: (word: string) => string;\n badId: (id: string) => string;\n afterId: string;\n undeclaredBox: (id: string) => string;\n noBody: (title: string) => string;\n emptyStepTitle: string;\n noBoxes: string;\n noSteps: string;\n emptySay: string;\n sayTwice: string;\n codeTwice: string;\n emptyCode: string;\n declarationInStep: string;\n stepLineBeforeStep: string;\n nestedGroup: string;\n strayEnd: string;\n endTakesNothing: string;\n unclosedGroup: (id: string) => string;\n regionReopened: (id: string) => string;\n emptyName: (id: string) => string;\n stripTwice: string;\n stripShape: string;\n emptyStripField: string;\n stripUndeclared: string;\n noSuchField: (field: string) => string;\n stripNeedsValue: string;\n actShape: string;\n noteShape: string;\n edgeShape: string;\n emptyLabel: string;\n quoteUnclosed: string;\n afterQuote: string;\n attrUnclosed: string;\n attrNoColon: (raw: string) => string;\n attrNoValue: (key: string) => string;\n attrTwice: (key: string) => string;\n badAttr: (key: string, allowed: readonly string[]) => string;\n badColor: string;\n badView: string;\n badCarry: string;\n badSide: string;\n carryTwice: string;\n}\n\nconst list = (words: readonly string[]): string => words.join(\" / \");\n\nconst ja = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <題>\",\n architecture: \"architecture <題>\",\n group: \"group <名札> as <名前> [note: <添え書き>] から end まで\",\n box: \"box <名札> as <名前> [note: <下の小さな字>]\",\n strip: \"strip <題>: <欄>, <欄>\",\n view: \"sequence <題> [view: follow]\",\n step: \"step <段の題>\",\n say: \"say <段の本文>\",\n code: \"code <命令>\",\n act: \"act <名札>: <処理の名前>\",\n note: \"note <名札>: <下の小さな字>\",\n set: \"set <欄>: <値> [tag: <札>]\",\n };\n return {\n noHead: `最初の行に図の種類 (${list(KINDS)}) と題を書く`,\n badHead: `最初の行は ${KINDS.join(\" か \")} で始め、続けて題を書く`,\n oldForm: (word, shape) => `${word} は前の形の書き方。新しい形では ${shapes[shape]} と書く`,\n unknownHead: (word) => `${word} は行の頭に書けない。行は ${list(HEADS)} か、<名札> -> <名札> で始める`,\n duplicate: (id) => `${id} は既に宣言した名札`,\n needsId: (word) => `${word} の後ろに名札を書く`,\n badId: (id) => `${id} は名札に使えない。名札には空白と [ ] 「 」 = : を含めない`,\n afterId: \"名札の後ろには as <名前> か属性を書く\",\n undeclaredBox: (id) => `${id} という箱は宣言していない`,\n noBody: (title) => `段「${title}」に本文 (say の行) が要る`,\n emptyStepTitle: \"step の後ろに段の題を書く\",\n noBoxes: \"箱を 1 つ以上宣言する\",\n noSteps: \"段 (step の行) を 1 つ以上書く\",\n emptySay: \"say の後ろか、その下に字下げした行に段の本文を書く\",\n sayTwice: \"1 つの段に say は 1 つまで。長い本文は say の下に字下げして続ける\",\n codeTwice: \"1 つの段に code は 1 行まで\",\n emptyCode: \"code の後ろに命令を書く\",\n declarationInStep: \"group と box と strip は最初の step より前に書く\",\n stepLineBeforeStep: \"線と say と code と act と note と set は step の下に書く\",\n nestedGroup: \"group の中に group は書けない。先に end で閉じる\",\n strayEnd: \"end の前に、閉じる group が無い\",\n endTakesNothing: \"end の後ろには何も書かない\",\n unclosedGroup: (id) => `group ${id} を end で閉じていない`,\n regionReopened: (id) => `group ${id} は宣言済み。もう一度開く時は group ${id} だけを書き、名前と属性は最初の宣言に書く`,\n emptyName: (id) => `${id} の名前が空`,\n stripTwice: \"strip は 1 つだけ宣言する\",\n stripShape: \"strip は strip <題>: <欄>, <欄> の形で書く\",\n emptyStripField: \"strip の欄の名前が空\",\n stripUndeclared: \"set を書く前に、strip <題>: <欄>, <欄> で帯を宣言する\",\n noSuchField: (field) => `${field} という欄は strip に無い`,\n stripNeedsValue: \"set は set <欄>: <値> か set <欄> [tag: <札>] の形で書く\",\n actShape: \"act は act <名札>: <処理の名前> の形で書く\",\n noteShape: \"note は note <名札>: <下の小さな字> の形で書く\",\n edgeShape: \"線は <名札> -> <名札>: <線の名前> [<属性>] の形で書く\",\n emptyLabel: \"線の : の後ろに線の名前を書く。名前を書かない時は : も書かない\",\n quoteUnclosed: '\" で始めた字を \" で閉じていない',\n afterQuote: '\" で閉じた字の後ろには、属性か次の , だけを書く',\n attrUnclosed: \"属性は [ で始めて ] で閉じ、行の終わりに置く\",\n attrNoColon: (raw) => `[${raw}] は書けない。属性は [<鍵>: <値>] の形で書く`,\n attrNoValue: (key) => `${key}: の後ろに値を書く`,\n attrTwice: (key) => `${key} は 1 つの行に 1 つまで`,\n badAttr: (key, allowed) => `${key} はこの行に書けない属性。書けるのは ${list(allowed)}`,\n badColor: `color は ${list(COLORS)} のどれか`,\n badView: `view は ${list(VIEWS)} のどれか`,\n badCarry: `carry は ${list(CARRIES)} のどれか。札は tag: <値> で書く`,\n badSide: `side は ${list(SIDES)} のどれか`,\n carryTwice: \"運ぶ物は 1 本の線に 1 つまで。carry と tag は一緒に書かない\",\n };\n};\n\nconst en = (): Messages => {\n const shapes: Record<Shape, string> = {\n sequence: \"sequence <title>\",\n architecture: \"architecture <title>\",\n group: \"group <id> as <name> [note: <note>] through end\",\n box: \"box <id> as <name> [note: <caption>]\",\n strip: \"strip <title>: <field>, <field>\",\n view: \"sequence <title> [view: follow]\",\n step: \"step <step title>\",\n say: \"say <step body>\",\n code: \"code <command>\",\n act: \"act <id>: <action>\",\n note: \"note <id>: <caption>\",\n set: \"set <field>: <value> [tag: <tag>]\",\n };\n return {\n noHead: `Write the diagram kind (${list(KINDS)}) and a title on the first line`,\n badHead: `Start the first line with ${KINDS.join(\" or \")}, followed by the title`,\n oldForm: (word, shape) => `${word} is the old notation. Write ${shapes[shape]} instead`,\n unknownHead: (word) => `A line cannot start with ${word}. Start a line with ${list(HEADS)}, or <id> -> <id>`,\n duplicate: (id) => `${id} is already declared`,\n needsId: (word) => `Write an id after ${word}`,\n badId: (id) => `${id} cannot be an id. An id has no spaces and none of [ ] 「 」 = :`,\n afterId: \"Write as <name> or attributes after the id\",\n undeclaredBox: (id) => `No box named ${id} is declared`,\n noBody: (title) => `Step \"${title}\" needs a body (a say line)`,\n emptyStepTitle: \"Write a title after step\",\n noBoxes: \"Declare at least one box\",\n noSteps: \"Write at least one step (a step line)\",\n emptySay: \"Write the step body after say, or on indented lines below it\",\n sayTwice: \"A step takes one say. Continue a long body on indented lines below it\",\n codeTwice: \"A step takes at most one code line\",\n emptyCode: \"Write the command after code\",\n declarationInStep: \"Write group, box and strip before the first step\",\n stepLineBeforeStep: \"Write lines, say, code, act, note and set under a step\",\n nestedGroup: \"A group cannot hold another group. Close it with end first\",\n strayEnd: \"There is no group for this end to close\",\n endTakesNothing: \"Write nothing after end\",\n unclosedGroup: (id) => `group ${id} is not closed with end`,\n regionReopened: (id) => `group ${id} is already declared. To open it again, write only group ${id}; put the name and attributes on the first one`,\n emptyName: (id) => `${id} has an empty name`,\n stripTwice: \"Declare only one strip\",\n stripShape: \"Write a strip as strip <title>: <field>, <field>\",\n emptyStripField: \"A strip field name is empty\",\n stripUndeclared: \"Declare the strip as strip <title>: <field>, <field> before writing set\",\n noSuchField: (field) => `The strip has no field named ${field}`,\n stripNeedsValue: \"Write set as set <field>: <value> or set <field> [tag: <tag>]\",\n actShape: \"Write act as act <id>: <action>\",\n noteShape: \"Write note as note <id>: <caption>\",\n edgeShape: \"Write a line as <id> -> <id>: <label> [<attributes>]\",\n emptyLabel: \"Write the label after the : of a line, or leave out the : as well\",\n quoteUnclosed: 'A value that starts with \" is not closed with \"',\n afterQuote: 'After a value closed with \", write only attributes or the next ,',\n attrUnclosed: \"Start attributes with [, close them with ], and put them at the end of the line\",\n attrNoColon: (raw) => `[${raw}] cannot be read. Write an attribute as [<key>: <value>]`,\n attrNoValue: (key) => `Write a value after ${key}:`,\n attrTwice: (key) => `Write ${key} only once on a line`,\n badAttr: (key, allowed) => `${key} cannot be written on this line. Write ${list(allowed)}`,\n badColor: `color is one of ${list(COLORS)}`,\n badView: `view is one of ${list(VIEWS)}`,\n badCarry: `carry is one of ${list(CARRIES)}. Write a tag as tag: <value>`,\n badSide: `side is one of ${list(SIDES)}`,\n carryTwice: \"A line carries one thing. Do not write carry and tag together\",\n };\n};\n\nconst MESSAGES: Record<NotationLang, Messages> = { ja: ja(), en: en() };\n\nexport const messagesFor = (lang: NotationLang): Messages => MESSAGES[lang];\n","/**\n * 記法を 1 行ずつに切る。\n *\n * 空行とコメントの行 (`//` で始まる行) も捨てずに返す。`say` の下に字下げして続けた本文では、\n * 空行も `//` で始まる行も本文の字になるため、捨てるかは読む側が行の場所で決める (#3137)。\n * 行の頭と終わりの空白は落とし、頭の空白の字の数を `indent` に残す。\n * 誤りを示すために元の行の番号と、残した字が始まる列を持たせる。\n * 行と列は 1 から数え、列は字の数で数える (UTF-16 の単位では数えない)。\n */\nexport interface SourceLine {\n line: number;\n column: number;\n /** 行の頭の空白の字の数。`say` の続きの行を見分ける */\n indent: number;\n text: string;\n}\n\n/** 空行かコメントの行 */\nexport const isBlankOrComment = (source: SourceLine): boolean => source.text === \"\" || source.text.startsWith(\"//\");\n\n/** `text` の `index` 番目 (UTF-16 の位置) にある字が、行の何列目かを返す。 */\nexport function columnOf(source: SourceLine, index: number): number {\n return source.column + Array.from(source.text.slice(0, index)).length;\n}\n\nexport function tokenize(notation: string): SourceLine[] {\n return notation.split(/\\r?\\n/).map((raw, index) => {\n const indent = Array.from(raw.slice(0, raw.length - raw.trimStart().length)).length;\n return { line: index + 1, column: indent + 1, indent, text: raw.trim() };\n });\n}\n","/**\n * 原本の形式の版。\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 * 人が書く dragon記法を、図の原本の JSON へ変える (#3137)。\n *\n * 行の種類は行の頭の英語の語で決まり、線の行だけは箱の名札から始まる。最初の `step` より前に\n * 図の種類と題と区画と箱と帯を宣言し、`step` ごとに、その段で起きることを起きる順に並べる。\n *\n * sequence <題> [view: fixed か follow] 書かなければ字の大きさで選ぶ\n * group <名札> as <名前> [note: <添え書き>, color: <色>, icon: <印>]\n * box <名札> as <名前> [note: <下の小さな字>, color: <色>, icon: <印>]\n * end 同じ名札の group はもう一度開ける\n * box <名札> as <名前> [...] as が無ければ名札を名前にする\n * strip <題>: <欄>, <欄>\n * step <段の題>\n * say <段の本文> say の下に字下げした行は本文の続き\n * code <段で打つ命令>\n * <名札> -> <名札>: <線の名前> [carry: <運ぶ物>, tag: <値>, side: <側>]\n * act <名札>: <処理の名前> 箱の中の処理\n * note <名札>: <字> 箱の下の小さな字の書き換え\n * set <欄>: <値> [tag: <札>] 中身の帯の値\n *\n * 鍵と値はコロンで区切り、属性は `[ ]` の中に `,` で並べて行の終わりに置く。\n * 空白を含む名前と文は行の終わりか `[` の前に置き、`[` を含む名前と `,` か `]` を含む属性の値だけを\n * `\"` で囲む。囲みの中では `\\\"` が `\"`、`\\\\` が `\\` になる。字下げは `say` の続きの行を見分ける時だけ意味を持つ。\n *\n * 行の頭の語と同じ綴りの名札 (`end` や `step`) も書ける。名札の次に `->` が来る行は線と読む。\n * 誤りは最初の 1 つで止め、行と列を示す。誤りの文の言葉は呼ぶ側が渡す。\n */\nimport { type Messages, messagesFor, type Shape } from \"./messages\";\nimport { type Box, type Carry, type Color, COLORS, type Diagram, type DiagramEvent, type LabelSide, type Region, type Step, type ViewMode } from \"./schema\";\nimport { columnOf, isBlankOrComment, type SourceLine, tokenize } from \"./tokenize\";\nimport { FORMAT_VERSION } from \"./version\";\nimport { AS, ATTRS, CARRIES, HEADS, KINDS, type NotationLang, OLD_HEADS, SIDES, VIEWS } from \"./words\";\n\nexport interface LineError {\n line: number;\n column: number;\n message: string;\n}\n\nexport type Parsed = { ok: true; diagram: Diagram } | { ok: false; errors: LineError[] };\n\nexport interface ParseOptions {\n /** 誤りの文の言葉。既定は日本語 */\n lang?: NotationLang;\n}\n\nclass NotationError extends Error {\n constructor(\n readonly line: number,\n readonly column: number,\n message: string,\n ) {\n super(message);\n }\n}\n\nconst fail = (source: SourceLine, index: number, message: string): NotationError =>\n new NotationError(source.line, columnOf(source, index), message);\n\n/** 名札に使える字。原本の JSON の名札の形と同じ */\nconst ID = /^[^\\s[\\]「」=:]+$/u;\n/** 線の行。名札、`->`、名札 */\nconst EDGE = /^([^\\s:[\\]]+?)\\s*->\\s*([^\\s:[\\]]+)/du;\n\nconst isOneOf = <T extends string>(list: readonly T[], word: string): word is T => (list as readonly string[]).includes(word);\n\n/** `at` から空白を飛ばした位置 */\nfunction skipSpaces(text: string, at: number): number {\n let i = at;\n while (i < text.length && /\\s/u.test(text[i] ?? \"\")) i++;\n return i;\n}\n\n/** `[<鍵>: <値>]` の 1 つ。`at` は鍵の位置 */\ninterface Attr {\n value: string;\n at: number;\n}\n\n/** `at` の `\"` から閉じる `\"` までを読む。`end` は閉じた `\"` の次 */\nfunction readQuoted(source: SourceLine, at: number, m: Messages): { value: string; end: number } {\n const text = source.text;\n let value = \"\";\n for (let i = at + 1; i < text.length; i++) {\n const c = text[i] ?? \"\";\n const next = text[i + 1] ?? \"\";\n if (c === \"\\\\\" && (next === '\"' || next === \"\\\\\")) {\n value += next;\n i++;\n } else if (c === '\"') {\n return { value, end: i + 1 };\n } else {\n value += c;\n }\n }\n throw fail(source, at, m.quoteUnclosed);\n}\n\n/**\n * `at` から名前か文を読む。`\"` で始まれば囲みの中、そうでなければ `[` の前か行の終わりまで。\n * `rest` は名前の後ろの位置で、行の終わりか属性の `[` を指す。\n */\nfunction readName(source: SourceLine, at: number, m: Messages): { value: string; rest: number } {\n const text = source.text;\n const start = skipSpaces(text, at);\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n const rest = skipSpaces(text, quoted.end);\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterQuote);\n return { value: quoted.value, rest };\n }\n const open = text.indexOf(\"[\", start);\n const rest = open < 0 ? text.length : open;\n return { value: text.slice(start, rest).trim(), rest };\n}\n\n/** `at` の `[` から行の終わりの `]` までの属性を読む。`allowed` に無い鍵は誤り */\nfunction readAttrs(source: SourceLine, at: number, allowed: readonly string[], m: Messages): Map<string, Attr> {\n const text = source.text;\n if (!text.endsWith(\"]\")) throw fail(source, at, m.attrUnclosed);\n const close = text.length - 1;\n const attrs = new Map<string, Attr>();\n for (let i = at + 1; ; ) {\n const start = skipSpaces(text, i);\n let colon = start;\n while (colon < close && text[colon] !== \":\" && text[colon] !== \",\") colon++;\n if (colon >= close || text[colon] !== \":\") throw fail(source, start, m.attrNoColon(text.slice(start, colon).trim()));\n const key = text.slice(start, colon).trim();\n if (!allowed.includes(key)) throw fail(source, start, m.badAttr(key, allowed));\n if (attrs.has(key)) throw fail(source, start, m.attrTwice(key));\n let end = skipSpaces(text, colon + 1);\n let value: string;\n if (text[end] === '\"') {\n const quoted = readQuoted(source, end, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < close && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", end);\n const stop = comma < 0 || comma > close ? close : comma;\n value = text.slice(end, stop).trim();\n end = stop;\n }\n if (value === \"\") throw fail(source, start, m.attrNoValue(key));\n attrs.set(key, { value, at: start });\n if (end >= close) return attrs;\n i = end + 1;\n }\n}\n\n/** `at` から `,` で区切った字の並びを行の終わりまで読む */\nfunction readList(source: SourceLine, at: number, m: Messages): string[] {\n const text = source.text;\n const items: string[] = [];\n for (let i = at; ; ) {\n const start = skipSpaces(text, i);\n let value: string;\n let end: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n value = quoted.value;\n end = skipSpaces(text, quoted.end);\n if (end < text.length && text[end] !== \",\") throw fail(source, end, m.afterQuote);\n } else {\n const comma = text.indexOf(\",\", start);\n end = comma < 0 ? text.length : comma;\n value = text.slice(start, end).trim();\n }\n if (value === \"\") throw fail(source, start, m.emptyStripField);\n items.push(value);\n if (end >= text.length) return items;\n i = end + 1;\n }\n}\n\n/** `group` と `box` の行の、名札と `as` の後ろの名前と属性 */\ninterface Declared {\n id: string;\n idAt: number;\n name?: string;\n attrs: Map<string, Attr>;\n}\n\nfunction readDeclared(source: SourceLine, word: string, allowed: readonly string[], m: Messages): Declared {\n const text = source.text;\n const start = skipSpaces(text, word.length);\n const id = /^[^\\s[]+/u.exec(text.slice(start))?.[0];\n if (id === undefined) throw fail(source, 0, m.needsId(word));\n if (!ID.test(id)) throw fail(source, start, m.badId(id));\n let rest = skipSpaces(text, start + id.length);\n let name: string | undefined;\n if (text.startsWith(AS, rest) && /^(\\s|$)/u.test(text.slice(rest + AS.length, rest + AS.length + 1))) {\n const named = readName(source, rest + AS.length, m);\n if (named.value === \"\") throw fail(source, rest, m.emptyName(id));\n name = named.value;\n rest = named.rest;\n }\n if (rest < text.length && text[rest] !== \"[\") throw fail(source, rest, m.afterId);\n const attrs = rest < text.length ? readAttrs(source, rest, allowed, m) : new Map<string, Attr>();\n return { id, idAt: start, ...(name !== undefined ? { name } : {}), attrs };\n}\n\n/** 区画と箱の属性 (`note` と `color` と `icon`) */\nfunction lookOf(source: SourceLine, attrs: Map<string, Attr>, m: Messages): { note?: string; color?: Color; icon?: string } {\n const color = attrs.get(\"color\");\n if (color && !isOneOf(COLORS, color.value)) throw fail(source, color.at, m.badColor);\n const note = attrs.get(\"note\")?.value;\n const icon = attrs.get(\"icon\")?.value;\n return {\n ...(note !== undefined ? { note } : {}),\n ...(color ? { color: color.value as Color } : {}),\n ...(icon !== undefined ? { icon } : {}),\n };\n}\n\n/**\n * 前の形 (#2997 まで) の行なら、その印と、新しい形で書く行の形。`inStep` は段の中の行か。\n * 新しい形で読めない行の誤りの文で、書き直し方を示すために引く。\n */\nfunction oldForm(text: string, inStep: boolean): { word: string; shape: Shape } | undefined {\n const first = text.split(/\\s/u)[0] ?? \"\";\n if (first === \"帯\") return { word: first, shape: inStep ? \"set\" : \"strip\" };\n if (Object.hasOwn(OLD_HEADS, first)) return { word: first, shape: OLD_HEADS[first as keyof typeof OLD_HEADS] };\n if (text.startsWith(\"#\")) return { word: \"#\", shape: \"step\" };\n if (text.startsWith(\">\")) return { word: \">\", shape: \"say\" };\n if (text.startsWith(\"`\")) return { word: \"`\", shape: \"code\" };\n if (text.includes(\"「\")) return { word: \"「」\", shape: inStep ? \"note\" : \"box\" };\n if (/^[^\\s=:]+\\s*=(?!>)/u.test(text)) return { word: \"=\", shape: \"box\" };\n if (inStep && /^[^\\s:]+\\s*:/u.test(text)) return { word: \":\", shape: \"act\" };\n return undefined;\n}\n\n/** 読んでいる段。`body` は `say` を読むまで無い */\ninterface Building {\n source: SourceLine;\n title: string;\n body?: string[];\n code?: string;\n events: DiagramEvent[];\n}\n\nfunction parseLines(lines: SourceLine[], m: Messages): Diagram {\n const headAt = lines.findIndex((source) => !isBlankOrComment(source));\n const head = lines[headAt];\n if (!head) throw new NotationError(1, 1, m.noHead);\n const kind = head.text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(KINDS, kind)) {\n const old = oldForm(head.text, false);\n throw fail(head, 0, old ? m.oldForm(old.word, old.shape) : m.badHead);\n }\n const titled = readName(head, kind.length, m);\n if (titled.value === \"\") throw fail(head, 0, m.badHead);\n const title = titled.value;\n const shown = titled.rest < head.text.length ? readAttrs(head, titled.rest, ATTRS.diagram, m).get(\"view\") : undefined;\n if (shown && !isOneOf(VIEWS, shown.value)) throw fail(head, shown.at, m.badView);\n const view = shown?.value as ViewMode | undefined;\n\n const regions: Region[] = [];\n const boxes: Box[] = [];\n const ids = new Set<string>();\n let strip: { title: string; fields: string[] } | undefined;\n const steps: Step[] = [];\n let building: Building | undefined;\n /** 開いている `group` */\n let group: { source: SourceLine; id: string } | undefined;\n\n const declare = (source: SourceLine, id: string, at: number): void => {\n if (ids.has(id)) throw fail(source, at, m.duplicate(id));\n ids.add(id);\n };\n const boxAt = (source: SourceLine, id: string, at: number): string => {\n if (!boxes.some((box) => box.id === id)) throw fail(source, at, m.undeclaredBox(id));\n return id;\n };\n /** 段の中に書く行の、書き先の段。最初の `step` より前なら誤り */\n const inStep = (source: SourceLine): Building => {\n if (!building) throw fail(source, 0, m.stepLineBeforeStep);\n return building;\n };\n /** 宣言の行。最初の `step` より後なら誤り */\n const beforeSteps = (source: SourceLine): void => {\n if (building) throw fail(source, 0, m.declarationInStep);\n };\n const finish = (): void => {\n if (!building) return;\n if (building.body === undefined) throw fail(building.source, 0, m.noBody(building.title));\n steps.push({\n title: building.title,\n body: building.body.join(\"\\n\"),\n ...(building.code !== undefined ? { code: building.code } : {}),\n events: building.events,\n });\n };\n\n const rest = lines.slice(headAt + 1);\n for (let i = 0; i < rest.length; i++) {\n const source = rest[i];\n if (!source || isBlankOrComment(source)) continue;\n const text = source.text;\n // 名札の次に `->` が来る行は、名札が行の頭の語と同じ綴りでも線と読む\n const edge = EDGE.exec(text);\n if (edge) {\n inStep(source).events.push(readEdge(source, edge));\n continue;\n }\n const word = text.split(/\\s/u)[0] ?? \"\";\n if (!isOneOf(HEADS, word)) {\n const old = oldForm(text, building !== undefined);\n throw fail(source, 0, old ? m.oldForm(old.word, old.shape) : m.unknownHead(word));\n }\n switch (word) {\n case \"group\":\n readGroup(source);\n break;\n case \"end\":\n if (text !== word) throw fail(source, word.length, m.endTakesNothing);\n if (!group) throw fail(source, 0, m.strayEnd);\n group = undefined;\n break;\n case \"box\":\n readBox(source);\n break;\n case \"strip\":\n readStrip(source);\n break;\n case \"step\": {\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n const stepTitle = text.slice(word.length).trim();\n if (stepTitle === \"\") throw fail(source, 0, m.emptyStepTitle);\n building = { source, title: stepTitle, events: [] };\n break;\n }\n case \"say\":\n i = readSay(source, i);\n break;\n case \"code\": {\n const step = inStep(source);\n if (step.code !== undefined) throw fail(source, 0, m.codeTwice);\n const command = text.slice(word.length).trim();\n if (command === \"\") throw fail(source, 0, m.emptyCode);\n step.code = command;\n break;\n }\n case \"act\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.actShape);\n step.events.push({ type: \"action\", box: on.box, label: on.text });\n break;\n }\n case \"note\": {\n const step = inStep(source);\n const on = readOnBox(source, word, m.noteShape);\n step.events.push({ type: \"swap\", box: on.box, text: on.text });\n break;\n }\n case \"set\":\n inStep(source).events.push(readSet(source));\n break;\n }\n }\n if (group) throw fail(group.source, 0, m.unclosedGroup(group.id));\n finish();\n\n if (boxes.length === 0) throw fail(head, 0, m.noBoxes);\n if (steps.length === 0) throw fail(head, 0, m.noSteps);\n\n return {\n version: FORMAT_VERSION,\n kind,\n title,\n ...(view ? { view } : {}),\n ...(regions.length > 0 ? { regions } : {}),\n boxes,\n ...(strip ? { strip } : {}),\n steps,\n ...(kind === \"sequence\" ? { sequence: { lifelines: boxes.map((box) => box.id) } } : {}),\n };\n\n /** `group` の行。同じ名札をもう一度開いた時は、名前も属性も書かない */\n function readGroup(source: SourceLine): void {\n beforeSteps(source);\n if (group) throw fail(source, 0, m.nestedGroup);\n const declared = readDeclared(source, \"group\", ATTRS.group, m);\n if (regions.some((region) => region.id === declared.id)) {\n if (declared.name !== undefined || declared.attrs.size > 0) throw fail(source, 0, m.regionReopened(declared.id));\n } else {\n declare(source, declared.id, declared.idAt);\n regions.push({ id: declared.id, name: declared.name ?? declared.id, ...lookOf(source, declared.attrs, m) });\n }\n group = { source, id: declared.id };\n }\n\n /** `box` の行。開いている `group` の中なら、その区画に置く */\n function readBox(source: SourceLine): void {\n beforeSteps(source);\n const declared = readDeclared(source, \"box\", ATTRS.box, m);\n declare(source, declared.id, declared.idAt);\n const { note, ...look } = lookOf(source, declared.attrs, m);\n boxes.push({\n id: declared.id,\n name: declared.name ?? declared.id,\n ...(note !== undefined ? { sub: note } : {}),\n ...look,\n ...(group ? { region: group.id } : {}),\n });\n }\n\n /** `strip <題>: <欄>, <欄>` の行 */\n function readStrip(source: SourceLine): void {\n beforeSteps(source);\n if (strip) throw fail(source, 0, m.stripTwice);\n const text = source.text;\n const start = skipSpaces(text, \"strip\".length);\n let stripTitle: string;\n let colon: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n stripTitle = quoted.value;\n colon = skipSpaces(text, quoted.end);\n } else {\n colon = text.indexOf(\":\", start);\n stripTitle = colon < 0 ? \"\" : text.slice(start, colon).trim();\n }\n if (stripTitle === \"\" || text[colon] !== \":\") throw fail(source, 0, m.stripShape);\n strip = { title: stripTitle, fields: readList(source, colon + 1, m) };\n }\n\n /**\n * `say` の行と、その下に `say` より深く字下げして続けた行を段の本文にする。\n * 続きの行の間の空行は本文の空の行になる。返すのは読み終えた最後の行の番号。\n */\n function readSay(source: SourceLine, index: number): number {\n const step = inStep(source);\n if (step.body !== undefined) throw fail(source, 0, m.sayTwice);\n const inline = source.text.slice(\"say\".length).trim();\n const body = inline === \"\" ? [] : [inline];\n let blanks = 0;\n let last = index;\n for (let j = index + 1; j < rest.length; j++) {\n const next = rest[j];\n if (!next) break;\n if (next.text === \"\") {\n blanks++;\n continue;\n }\n if (next.indent <= source.indent) break;\n body.push(...Array.from({ length: blanks }, () => \"\"), next.text);\n blanks = 0;\n last = j;\n }\n if (body.length === 0) throw fail(source, 0, m.emptySay);\n step.body = body;\n return last;\n }\n\n /** `act <名札>: <字>` と `note <名札>: <字>` の行の、箱と字 */\n function readOnBox(source: SourceLine, word: \"act\" | \"note\", shape: string): { box: string; text: string } {\n const found = new RegExp(`^${word}\\\\s+([^\\\\s:]+)\\\\s*:\\\\s*(.*)$`, \"du\").exec(source.text);\n const idAt = found?.indices?.[1]?.[0];\n if (!found || idAt === undefined || (found[2] ?? \"\") === \"\") throw fail(source, 0, shape);\n return { box: boxAt(source, found[1] ?? \"\", idAt), text: found[2] ?? \"\" };\n }\n\n /** `<名札> -> <名札>: <線の名前> [<属性>]` の行 */\n function readEdge(source: SourceLine, edge: RegExpExecArray): DiagramEvent {\n const text = source.text;\n const from = boxAt(source, edge[1] ?? \"\", edge.indices?.[1]?.[0] ?? 0);\n const to = boxAt(source, edge[2] ?? \"\", edge.indices?.[2]?.[0] ?? 0);\n let at = skipSpaces(text, edge[0].length);\n let label: string | undefined;\n if (text[at] === \":\") {\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.emptyLabel);\n label = named.value;\n at = named.rest;\n }\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.edgeShape);\n const attrs = at < text.length ? readAttrs(source, at, ATTRS.edge, m) : new Map<string, Attr>();\n const tag = attrs.get(\"tag\");\n const carried = attrs.get(\"carry\");\n if (tag && carried) throw fail(source, Math.max(tag.at, carried.at), m.carryTwice);\n if (carried && !isOneOf(CARRIES, carried.value)) throw fail(source, carried.at, m.badCarry);\n const side = attrs.get(\"side\");\n if (side && !isOneOf(SIDES, side.value)) throw fail(source, side.at, m.badSide);\n let carry: Carry = { kind: \"envelope\" };\n if (tag) carry = { kind: \"tag\", text: tag.value };\n else if (carried) carry = carried.value === \"coin\" ? { kind: \"coin\" } : { kind: \"none\" };\n return {\n type: \"edge\",\n from,\n to,\n ...(label !== undefined ? { label } : {}),\n carry,\n ...(side ? { labelSide: side.value as LabelSide } : {}),\n };\n }\n\n /** `set <欄>: <値> [tag: <札>]` か `set <欄> [tag: <札>]` の行 */\n function readSet(source: SourceLine): DiagramEvent {\n const declared = strip;\n if (!declared) throw fail(source, 0, m.stripUndeclared);\n const text = source.text;\n const start = skipSpaces(text, \"set\".length);\n let field: string;\n let at: number;\n if (text[start] === '\"') {\n const quoted = readQuoted(source, start, m);\n field = quoted.value;\n at = skipSpaces(text, quoted.end);\n } else {\n at = start;\n while (at < text.length && text[at] !== \":\" && text[at] !== \"[\") at++;\n field = text.slice(start, at).trim();\n }\n if (!declared.fields.includes(field)) throw fail(source, start, m.noSuchField(field));\n let value: string | undefined;\n if (text[at] === \":\") {\n const named = readName(source, at + 1, m);\n if (named.value === \"\") throw fail(source, at, m.stripNeedsValue);\n value = named.value;\n at = named.rest;\n }\n if (at < text.length && text[at] !== \"[\") throw fail(source, at, m.stripNeedsValue);\n const tag = at < text.length ? readAttrs(source, at, ATTRS.set, m).get(\"tag\")?.value : undefined;\n if (value === undefined && tag === undefined) throw fail(source, 0, m.stripNeedsValue);\n return {\n type: \"strip\",\n field,\n ...(value !== undefined ? { value } : {}),\n ...(tag !== undefined ? { tag } : {}),\n };\n }\n}\n\nexport function parseNotation(notation: string, options: ParseOptions = {}): Parsed {\n try {\n return { ok: true, diagram: parseLines(tokenize(notation), messagesFor(options.lang ?? \"ja\")) };\n } catch (error) {\n if (!(error instanceof NotationError)) throw error;\n return { ok: false, errors: [{ line: error.line, column: error.column, message: error.message }] };\n }\n}\n","/**\n * 図の原本の JSON を、人が書く dragon記法へ書き戻す (#3137)。\n *\n * 並べ方は決まった形に整える。JSON の欄の並び順は見ず、欄の名前で読むので、\n * 同じ内容の JSON からは毎回同じ文字列になる。書き手の行の並べ方とコメントは保たない。\n * 段の中で起きることは JSON の並び順 (起きる順) のまま書く。\n *\n * `\"` で囲むのは要る時だけにする。`[` を含む名前と、`,` か `]` を含む属性の値と、`\"` で始まる字を囲む。\n * 箱は JSON の並びのまま書き、同じ区画の箱が続く所を 1 つの `group … end` にする。\n * 区画の箱が飛び飛びの時は同じ `group` を開き直す。区画の並びが箱の現れる順と違う時と、\n * 箱の無い区画がある時は、先に全ての区画を中の無い `group … end` で宣言してから開き直す。\n */\nimport type { Box, Diagram, DiagramEvent, Region } from \"./schema\";\n\nconst quote = (text: string): string => `\"${text.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n/** 行の終わりか `[` の前に置く名前と文 */\nconst name = (text: string): string => (text.includes(\"[\") || text.startsWith('\"') ? quote(text) : text);\n/** `:` の前に置く字 (帯の題と、`set` の欄) */\nconst key = (text: string): string => (text.includes(\":\") || text.includes(\"[\") || text.startsWith('\"') ? quote(text) : text);\n/** `strip` の行に `,` で並べる欄 */\nconst field = (text: string): string => (text.includes(\",\") || text.startsWith('\"') ? quote(text) : text);\n/** 属性の値 */\nconst value = (text: string): string => (text.includes(\",\") || text.includes(\"]\") || text.startsWith('\"') ? quote(text) : text);\n\n/** 属性の並び。値の無い鍵は書かず、1 つも無ければ何も付けない */\nconst attrs = (pairs: [string, string | undefined][]): string => {\n const written = pairs.filter((pair): pair is [string, string] => pair[1] !== undefined);\n return written.length === 0 ? \"\" : ` [${written.map(([k, v]) => `${k}: ${value(v)}`).join(\", \")}]`;\n};\n\n/** 名札と違う名前だけを `as` の後ろに書く */\nconst shown = (id: string, text: string): string => (text === id ? \"\" : ` as ${name(text)}`);\n\nconst declareRegion = (r: Region): string =>\n `group ${r.id}${shown(r.id, r.name)}${attrs([\n [\"note\", r.note],\n [\"color\", r.color],\n [\"icon\", r.icon],\n ])}`;\nconst declareBox = (b: Box): string =>\n `box ${b.id}${shown(b.id, b.name)}${attrs([\n [\"note\", b.sub],\n [\"color\", b.color],\n [\"icon\", b.icon],\n ])}`;\n\nfunction event(e: DiagramEvent): string {\n switch (e.type) {\n case \"edge\": {\n const carry: [string, string][] = e.carry.kind === \"tag\" ? [[\"tag\", e.carry.text]] : e.carry.kind === \"envelope\" ? [] : [[\"carry\", e.carry.kind]];\n return `${e.from} -> ${e.to}${e.label === undefined ? \"\" : `: ${name(e.label)}`}${attrs([...carry, [\"side\", e.labelSide]])}`;\n }\n case \"action\":\n return `act ${e.box}: ${e.label}`;\n case \"swap\":\n return `note ${e.box}: ${e.text}`;\n case \"strip\":\n return `set ${key(e.field)}${e.value === undefined ? \"\" : `: ${name(e.value)}`}${attrs([[\"tag\", e.tag]])}`;\n }\n}\n\n/** 区画と箱の宣言の塊。塊どうしは空行で区切る */\nfunction declarations(diagram: Diagram): string[] {\n const regions = diagram.regions ?? [];\n const runs: { region?: string; boxes: Box[] }[] = [];\n for (const b of diagram.boxes) {\n const last = runs.at(-1);\n if (last && last.region === b.region) last.boxes.push(b);\n else runs.push({ ...(b.region !== undefined ? { region: b.region } : {}), boxes: [b] });\n }\n const opened = [...new Set(runs.flatMap((run) => (run.region === undefined ? [] : [run.region])))];\n const inOrder = opened.length === regions.length && opened.every((id, i) => regions[i]?.id === id);\n const declared = new Set<string>();\n const blocks: string[] = [];\n if (!inOrder) {\n for (const r of regions) {\n blocks.push(`${declareRegion(r)}\\nend`);\n declared.add(r.id);\n }\n }\n for (const run of runs) {\n const lines = run.boxes.map(declareBox);\n if (run.region === undefined) {\n blocks.push(lines.join(\"\\n\"));\n continue;\n }\n const region = regions.find((r) => r.id === run.region);\n const open = declared.has(run.region) || !region ? `group ${run.region}` : declareRegion(region);\n declared.add(run.region);\n blocks.push([open, ...lines.map((line) => ` ${line}`), \"end\"].join(\"\\n\"));\n }\n return blocks;\n}\n\nexport function printNotation(diagram: Diagram): string {\n const blocks = [`${diagram.kind} ${name(diagram.title)}${attrs([[\"view\", diagram.view]])}`, ...declarations(diagram)];\n if (diagram.strip) blocks.push(`strip ${key(diagram.strip.title)}: ${diagram.strip.fields.map(field).join(\", \")}`);\n for (const step of diagram.steps) {\n const body = step.body.split(\"\\n\");\n const say = body.length === 1 ? [` say ${step.body}`] : [\" say\", ...body.map((line) => (line === \"\" ? \"\" : ` ${line}`))];\n blocks.push(\n [`step ${step.title}`, ...say, ...(step.code === undefined ? [] : [` code ${step.code}`]), ...step.events.map((e) => ` ${event(e)}`)].join(\"\\n\"),\n );\n }\n return `${blocks.join(\"\\n\\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 \"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 * 図の見た目の値の表。色、字の大きさ、余白、動きの長さをここに 1 つにまとめる。\n *\n * 描く file (`layout/`、`render/`、`timeline.ts`、`view.ts`、`player.ts`) は色の値と字の大きさを\n * 直接書かず、この表から読む。値は見本帳 (`docs/design/base/`) の部品と同じにしてある。\n * 色味の値は見本帳の `palettes.json` の写しで、色味ごとに明るい背景と暗い背景で別の値を持つ。\n */\nimport palettes from \"./palettes.json\";\nimport { FONTS, type Family } from \"./fonts\";\n\nexport type Theme = \"light\" | \"dark\";\n\nexport interface Palette {\n id: string;\n name: string;\n note: string;\n light: Record<string, string>;\n dark: Record<string, string>;\n}\n\n/** 色味を指定しない時と、知らない名前を渡した時に使う色味。 */\nexport const DEFAULT_PALETTE = \"paper\";\n\nexport const PALETTES: Readonly<Record<string, Palette>> = Object.fromEntries(\n Object.entries(palettes as Record<string, Omit<Palette, \"id\">>).map(([id, p]) => [id, { id, ...p }]),\n);\n\n/** 名前から色味を引く。指定が無いか、知らない名前 (外した墨と朱の `ink` を含む) なら紙と墨。 */\nexport function resolvePalette(id?: string): Palette {\n const found = id !== undefined && Object.hasOwn(PALETTES, id) ? PALETTES[id] : undefined;\n return found ?? (PALETTES[DEFAULT_PALETTE] as Palette);\n}\n\n/** 色味の値を CSS の変数として並べる。 */\nexport function paletteVars(palette: Palette, theme: Theme): string {\n return Object.entries(palette[theme])\n .map(([key, value]) => `--${key}:${value}`)\n .join(\";\");\n}\n\n/** 字の変数。同梱した 2 つの字を 1 度だけ名指し、字を使う所はどれもこの変数を読む。 */\nexport const FONT_VARS = `--sans:\"${FONTS.sans}\";--mono:\"${FONTS.mono}\"`;\n\n/** 区画や箱を分ける色の役。灰 (slate) と硬貨 (coin) は分類の色として順に配らない。 */\nexport const COLOR_ORDER = [\"blue\", \"amber\", \"green\", \"violet\", \"rose\"] as const;\nexport type ColorKey = (typeof COLOR_ORDER)[number] | \"slate\" | \"coin\";\n\nexport interface TextStyle {\n size: number;\n weight: number;\n family: Family;\n}\n\nconst text = (size: number, weight: number, family: Family = \"sans\"): TextStyle => ({ size, weight, family });\n\n/** 字の大きさと太さ。どれも 10.5 以上にする。 */\nexport const TYPE = {\n boxName: text(13, 650),\n boxSub: text(11, 500),\n boxSubStrong: text(11, 700),\n regionName: text(12.5, 700),\n regionNote: text(11, 500),\n label: text(11, 600, \"mono\"),\n labelJa: text(11, 650),\n action: text(11, 650),\n badge: text(10.5, 700, \"mono\"),\n carrier: text(10.5, 700, \"mono\"),\n carrierJa: text(10.5, 700),\n stripTitle: text(12.5, 700),\n fieldName: text(10.5, 600),\n fieldValue: text(12, 600, \"mono\"),\n fieldValueJa: text(12, 600),\n tag: text(10.5, 700),\n miniTitle: text(10.5, 700),\n stepTitle: text(15, 700),\n stepBody: text(13.5, 500),\n stepNo: text(13, 700, \"mono\"),\n button: text(14, 700),\n} as const;\n\n/** 置き場所と部品の大きさ。単位は図の座標 (字が原寸の時の px)。 */\nexport const LOOK = {\n /** 部品どうしの最小の隙間 */\n gap: 10,\n /** 図の外周の余白 */\n margin: 14,\n box: { h: 72, minW: 92, padX: 12, radius: 12, icon: 24, iconRadius: 7, iconY: -16, iconScale: 0.74, nameY: 12, subY: 27 },\n region: { pad: 18, gap: 10, radius: 14, inset: 14, icon: 24, iconRadius: 7, iconScale: 0.68, nameY: 58, line: 16, minH: 108 },\n architecture: { columns: 4, columnGap: 56, maxColumnGap: 160, rowGap: 44, labelRoom: 16 },\n sequence: { columnGap: 40, labelRoom: 16, firstRow: 22, rowGap: 14, stepGap: 8, minPitch: 40, tail: 18, selfW: 34, selfH: 18 },\n edge: { inset: 3, arrow: 6, arrowHalf: 3.5, parallel: 5, ghostDash: 5, flowDash: 9 },\n label: { h: 20, padX: 9, radius: 10, offset: 22, side: 14, search: 4, searchMax: 400, soft: 6 },\n action: { h: 22, padX: 10, radius: 11 },\n badge: { r: 9.5, ring: 9, inset: 4, along: 14, short: 44 },\n carrier: { envW: 24, envH: 17, coinR: 6.5, coinIn: 3.8, tagH: 18, tagPadX: 8, samples: 16 },\n strip: { h: 72, line: 44, pad: 12, icon: 24, titleX: 44, fieldGap: 22, sepInset: 14, tagGap: 6, tagH: 15, tagPadX: 7, nameY: 22, valueY: 43 },\n stroke: { hair: 1, edge: 1.7, edgeOn: 2.25, arrow: 1.5, flow: 1.3, halo: 7, on: 1.75, glyph: 2, lifeline: 1.2, envelope: 1.5, badgeRing: 1.5 },\n shadow: { near: 0.8, far: 4, nearY: 1, farY: 3 },\n mini: { w: 168, pad: 8, title: 14, inset: 12, radius: 10 },\n /**\n * 寄って追う見せ方の窓の高さの、幅に対する割合と下限。\n * `fitMinH` は見える高さに収める時 (#3047) の窓の高さの下限で、これより低い枠では収めずに枠の中で送る。\n * `narrow` は縦長の全体図を出す枠の幅の下限で、これより狭い枠 (携帯の幅) では全体図を出さずに窓へ幅を渡す (#3055)。\n * `badgeRoom` は番号の丸が窓から外れる段で窓を寄せ直す時に、丸の周りに空ける幅 (#3046)。\n * `headRoom` は時系列図の図の頭の箱の下端から、窓に線を見せ始める所までの幅 (#3118)。\n * `head` は時系列図の窓の上端に貼る頭の列の頭の箱で、アイコンを外した名前と下の字の 2 段 (#3120)。\n * `pad` は頭の列の上下の余白、`h` は箱の高さ、`nameY` と `subY` は箱の上端から名前と下の字の基準線まで\n */\n follow: { aspect: 0.75, minH: 320, fitMinH: 160, ease: 0.6, narrow: 440, badgeRoom: 8, headRoom: 10, head: { pad: 8, h: 40, nameY: 17, subY: 31 } },\n /** 色を混ぜる割合 (%) */\n mix: { icon: 14, regionIcon: 16, regionIconEdge: 34, cap: 12, capEdge: 42, badgePast: 14, badgePastEdge: 70, mini: 62, miniBand: 16, miniBandEdge: 36, view: 6 },\n /** 字の並びの基準線を、置きたい高さの真ん中からどれだけ下げるか */\n baseline: { label: 3.8, badge: 3.5, carrier: 3.7, stripTitle: 4.5, tag: 3.6, action: 3.8 },\n /** 浮いて出る物が下から上がる長さと、弾んで出る物の始まりの大きさ */\n rise: 5,\n popFrom: 0.4,\n /**\n * 動きを嫌わない人の頁の部品。\n * `narrow` は段の本文の帯を横 1 列に並べる帯の中身の幅の下限で、これより狭い帯 (携帯の幅) では題と本文を釦と番号の段の下に置く (#3057、#3069)。\n * `touch` はその狭い帯で段を送る釦の縦横で、指で押せる大きさにする (#3069)\n */\n player: { gap: 10, radius: 12, button: 36, touch: 44, hidden: 1, focus: 2, narrow: 440 },\n} as const;\n\n/** 動きの長さ (秒)。 */\nexport const MOTION = {\n /** 最初の段の前に全体を見せる長さ */\n intro: 1.4,\n /** 最後の段の後に全体を見せる長さ */\n outro: 4.6,\n /** 繰り返す前に消えていく長さ */\n tail: 0.6,\n /** 段の長さ。本文の字数で伸ばし、段で起きることが全部見えてから dwell 秒は留める */\n stepBase: 1.2,\n perChar: 0.025,\n stepMin: 2.2,\n stepMax: 5,\n dwell: 1.2,\n /** 段の中で最初の線を引き始めるまでと、続く線を引き始める間 */\n edgeAt: 0.1,\n stagger: 0.5,\n /** 線を引く長さ。運ぶ物を載せた線は運ぶ物が走るので長い */\n draw: 0.55,\n drawCarry: 0.9,\n /** 処理を読む間 (次の線と書き換えはこれだけ待つ) と、書き換えが続く間 */\n action: 0.9,\n change: 0.12,\n /** 箱の下の字が見えている短さの下限。これより早く次の字に替わる字は出さない */\n minShow: 0.8,\n /** 線の名前が線より遅れて出る長さと、出入りの長さ */\n labelDelay: 0.15,\n fade: 0.3,\n popFade: 0.4,\n untilFade: 0.2,\n /** 段の止め絵を撮る時刻を、段の終わりからどれだけ前にするか */\n still: 0.45,\n} as const;\n\n/** 見せ方を決める字の大きさ。全体を枠に収めた時の箱の名前がこれを下回ると寄って追う。 */\nexport const READABLE_PX = 10.5;\n\n/** 動きの緩急。 */\nexport const EASE = {\n inOut: \"cubic-bezier(.65,0,.35,1)\",\n out: \"cubic-bezier(.22,1,.36,1)\",\n pop: \"cubic-bezier(.34,1.56,.64,1)\",\n} as const;\n","/**\n * 描く部品が出す字 (#3001)。\n *\n * 図の原本は語を持たないので、呼ぶ側が言葉を渡す。渡さなければ日本語で出す。\n * 頁は頁の言葉を、`dragon export` は `--lang` の言葉 (渡さなければ日本語) を渡す。\n */\nimport type { NotationLang } from \"./words\";\n\nexport interface FigureText {\n /** 描けない時の断りの文。`detail` は誤りの場所と文を並べた物 */\n cannotDraw: (detail: string) => string;\n /** 寄って動かす見せ方の、隅の全体図の札 */\n overview: string;\n /** 再生の釦の読み上げの名前 */\n prev: string;\n pause: string;\n play: string;\n next: string;\n /** 段の一覧の読み上げの名前 */\n steps: (title: string) => string;\n}\n\nexport const FIGURE_TEXT: Record<NotationLang, FigureText> = {\n ja: {\n cannotDraw: (detail) => `図を描けない: ${detail}`,\n overview: \"全体図\",\n prev: \"前の段\",\n pause: \"止める\",\n play: \"動かす\",\n next: \"次の段\",\n steps: (title) => `${title} の段`,\n },\n en: {\n cannotDraw: (detail) => `Cannot draw the diagram: ${detail}`,\n overview: \"Overview\",\n prev: \"Previous step\",\n pause: \"Pause\",\n play: \"Play\",\n next: \"Next step\",\n steps: (title) => `Steps of ${title}`,\n },\n};\n","/**\n * 字の幅を、同梱した字の送り幅の表で測る。描かずに測るので、頁の無い所 (node) でも同じ値になる。\n */\nimport { advance, EM, type Family } from \"../look/fonts\";\nimport type { TextStyle } from \"../look/values\";\n\n/** 和文 (CJK) の字を含むか。等幅の字は和文を持たないので、含む字は Noto Sans JP で描く。 */\nexport const hasWide = (text: string): boolean => [...text].some((ch) => (ch.codePointAt(0) ?? 0) >= 0x2e80);\n\n/** 等幅を望む字でも、和文を含めば和文の字で描く。 */\nexport function familyFor(text: string, preferred: Family): Family {\n return preferred === \"mono\" && hasWide(text) ? \"sans\" : preferred;\n}\n\n/** 1 行の字の幅。 */\nexport function textWidth(text: string, style: TextStyle): number {\n const family = familyFor(text, style.family);\n let sum = 0;\n for (const ch of text) sum += advance(ch, family);\n return (sum * style.size) / EM;\n}\n","/**\n * 置き場所を決めた結果 (場面) の形と、図の種類に依らず使う置き方。\n *\n * 座標は字が原寸の時の px で、左上を (0, 0) にする。線の名前は線の脇から箱を避けて置き、\n * 中身の帯は図の下に横いっぱいに置く。\n */\nimport type { Family } from \"../look/fonts\";\nimport { COLOR_ORDER, type ColorKey, LOOK, TYPE } from \"../look/values\";\nimport type { Carry, Diagram, DiagramEvent, LabelSide } from \"../schema\";\nimport { hasWide, textWidth } from \"./measure\";\n\nexport type Point = [number, number];\n\nexport interface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface SceneBox extends Rect {\n id: string;\n name: string;\n sub?: string;\n icon?: string;\n color: ColorKey;\n cx: number;\n cy: number;\n}\n\nexport interface SceneRegion extends Rect {\n id: string;\n /** 名前を折り返した行 */\n lines: string[];\n note?: string;\n icon?: string;\n color: ColorKey;\n /** 名前と印が占める所 */\n header: Rect;\n}\n\n/** 線。`step` と `event` は原本の `steps[step].events[event]` を指す。 */\nexport interface SceneEdge {\n step: number;\n event: number;\n from: string;\n to: string;\n points: Point[];\n color: ColorKey;\n carry: Carry;\n /** 着いた運ぶ物が留まる点。無ければ線の終わり */\n settle?: Point;\n}\n\nexport interface SceneLabel extends Rect {\n step: number;\n event: number;\n text: string;\n family: Family;\n color: ColorKey;\n}\n\n/** 時系列図の箱の中の処理。生存線の上に札で出す。 */\nexport interface SceneAction extends Rect {\n step: number;\n event: number;\n box: string;\n text: string;\n color: ColorKey;\n}\n\nexport interface SceneBadge {\n step: number;\n x: number;\n y: number;\n color: ColorKey;\n}\n\nexport interface SceneLifeline {\n id: string;\n x: number;\n y1: number;\n y2: number;\n}\n\nexport interface SceneField {\n name: string;\n x: number;\n y: number;\n w: number;\n}\n\nexport interface SceneStrip extends Rect {\n title: string;\n fields: SceneField[];\n}\n\nexport interface Layout {\n kind: Diagram[\"kind\"];\n width: number;\n height: number;\n regions: SceneRegion[];\n boxes: SceneBox[];\n lifelines: SceneLifeline[];\n edges: SceneEdge[];\n labels: SceneLabel[];\n actions: SceneAction[];\n badges: SceneBadge[];\n strip?: SceneStrip;\n}\n\nexport type EdgeEvent = Extract<DiagramEvent, { type: \"edge\" }>;\n\n/** 段と線の位置を添えた線の並び。段の順、段の中は起きる順。 */\nexport function edgesOf(diagram: Diagram): { step: number; event: number; edge: EdgeEvent }[] {\n return diagram.steps.flatMap((step, s) =>\n step.events.flatMap((event, e) => (event.type === \"edge\" ? [{ step: s, event: e, edge: event }] : [])),\n );\n}\n\n/** 箱の色。書いていなければ区画の色、区画も無ければ並んだ順に分類の色を配る。 */\nexport function boxColors(diagram: Diagram): Map<string, ColorKey> {\n const regions = regionColors(diagram);\n const colors = new Map<string, ColorKey>();\n diagram.boxes.forEach((box, i) => {\n const fromRegion = box.region === undefined ? undefined : regions.get(box.region);\n colors.set(box.id, box.color ?? fromRegion ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey));\n });\n return colors;\n}\n\nexport function regionColors(diagram: Diagram): Map<string, ColorKey> {\n const colors = new Map<string, ColorKey>();\n (diagram.regions ?? []).forEach((region, i) => colors.set(region.id, region.color ?? (COLOR_ORDER[i % COLOR_ORDER.length] as ColorKey)));\n return colors;\n}\n\n/** 線の色。硬貨を運ぶ線は硬貨の色、それ以外は送る側の箱の色。 */\nexport const edgeColor = (edge: EdgeEvent, colors: Map<string, ColorKey>): ColorKey =>\n edge.carry.kind === \"coin\" ? \"coin\" : (colors.get(edge.from) ?? \"slate\");\n\n/** 箱の幅。名前、下の小さな字、書き換わる字、中で出す処理のどれもが収まる幅。 */\nexport function boxWidth(diagram: Diagram, id: string, withActions: boolean): number {\n const box = diagram.boxes.find((b) => b.id === id);\n if (!box) return LOOK.box.minW;\n const lines = [textWidth(box.name, TYPE.boxName), textWidth(box.sub ?? \"\", TYPE.boxSub)];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type === \"swap\" && event.box === id) lines.push(textWidth(event.text, TYPE.boxSubStrong));\n if (withActions && event.type === \"action\" && event.box === id) lines.push(textWidth(event.label, TYPE.boxSubStrong));\n }\n }\n return Math.max(LOOK.box.minW, Math.max(...lines) + LOOK.box.padX * 2);\n}\n\n/** 2 つの四角の隙間。重なる時は負。縦か横のどちらかで離れていれば、その離れ方の大きい方。 */\nexport function gapBetween(a: Rect, b: Rect): number {\n const dx = Math.max(b.x - (a.x + a.w), a.x - (b.x + b.w));\n const dy = Math.max(b.y - (a.y + a.h), a.y - (b.y + b.h));\n return Math.max(dx, dy);\n}\n\n/** 折れ線のうち一番長い区間。 */\nexport function longest(points: Point[]): { a: Point; b: Point; vertical: boolean } {\n let best = { a: points[0] as Point, b: (points[1] ?? points[0]) as Point, length: -1 };\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (length > best.length) best = { a, b, length };\n }\n return { a: best.a, b: best.b, vertical: Math.abs(best.b[0] - best.a[0]) < Math.abs(best.b[1] - best.a[1]) };\n}\n\n/** 折れ線の長さと、始まりから `distance` 進んだ点。 */\nexport function along(points: Point[], distance: number): Point {\n let left = distance;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n const length = Math.hypot(b[0] - a[0], b[1] - a[1]);\n if (left <= length && length > 0) return [a[0] + ((b[0] - a[0]) * left) / length, a[1] + ((b[1] - a[1]) * left) / length];\n left -= length;\n }\n return points[points.length - 1] as Point;\n}\n\nexport function pathLength(points: Point[]): number {\n let sum = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n sum += Math.hypot(b[0] - a[0], b[1] - a[1]);\n }\n return sum;\n}\n\n/** 段の番号を置く点。線の始まりから少し進んだ所。短い線は始まりに置くと箱と重なるので中ほど。 */\nexport function badgeOnPath(points: Point[]): Point {\n const length = pathLength(points);\n return along(points, length < LOOK.badge.short ? length / 2 : LOOK.badge.along);\n}\n\nexport interface LabelRequest {\n step: number;\n event: number;\n text: string;\n points: Point[];\n side?: LabelSide;\n color: ColorKey;\n}\n\nexport interface Obstacles {\n /** 10px 以上離す物 (箱) */\n hard: Rect[];\n /** 重ならなければよい物 (区画の名前、同じ段の線の名前) */\n soft: Rect[];\n}\n\nexport const labelStyle = (text: string) => (hasWide(text) ? TYPE.labelJa : TYPE.label);\n\n/**\n * 線の名前を置く。線の一番長い区間の中ほどから、寄せの指示の側 (無ければ横の線は上、縦の線は右) へ\n * 離して置く。箱や区画の名前に掛かる時は、指示の側へさらに離し、線に沿ってもずらして空きを探す。\n */\nexport function placeLabel(request: LabelRequest, obstacles: Obstacles): SceneLabel {\n const w = textWidth(request.text, labelStyle(request.text)) + LOOK.label.padX * 2;\n const h = LOOK.label.h;\n const segment = longest(request.points);\n const mx = (segment.a[0] + segment.b[0]) / 2;\n const my = (segment.a[1] + segment.b[1]) / 2;\n const side = request.side ?? (segment.vertical ? \"right\" : \"above\");\n const { offset, side: sideGap } = LOOK.label;\n const base: Rect =\n side === \"above\"\n ? { x: mx - w / 2, y: my - offset - h / 2, w, h }\n : side === \"below\"\n ? { x: mx - w / 2, y: my + offset - h / 2, w, h }\n : side === \"left\"\n ? { x: mx - sideGap - w, y: my - h / 2, w, h }\n : { x: mx + sideGap, y: my - h / 2, w, h };\n // 離す向き (指示の側) と、ずらす向き (それに直交する向き)\n const away: Point = side === \"above\" ? [0, -1] : side === \"below\" ? [0, 1] : side === \"left\" ? [-1, 0] : [1, 0];\n const slideAxis: Point = [Math.abs(away[1]), Math.abs(away[0])];\n const slideMax = side === \"above\" || side === \"below\" ? w : h * 4;\n const clear = (rect: Rect): boolean =>\n obstacles.hard.every((box) => gapBetween(rect, box) >= LOOK.gap) && obstacles.soft.every((other) => gapBetween(rect, other) >= LOOK.label.soft);\n const { search, searchMax } = LOOK.label;\n for (let d = 0; d <= searchMax; d += search) {\n for (let s = 0; s <= slideMax; s += search) {\n for (const sign of s === 0 ? [1] : [1, -1]) {\n const rect = { x: base.x + away[0] * d + slideAxis[0] * s * sign, y: base.y + away[1] * d + slideAxis[1] * s * sign, w, h };\n if (clear(rect)) return { ...rect, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n }\n }\n }\n return { ...base, step: request.step, event: request.event, text: request.text, family: labelStyle(request.text).family, color: request.color };\n}\n\n/** 中身の帯の欄の幅。欄の名前と、入る値と札を並べた最も長い形が収まる幅。 */\nfunction fieldWidth(diagram: Diagram, name: string): number {\n let value = 0;\n let tag = 0;\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"strip\" || event.field !== name) continue;\n if (event.value !== undefined) value = Math.max(value, textWidth(event.value, hasWide(event.value) ? TYPE.fieldValueJa : TYPE.fieldValue));\n if (event.tag !== undefined) tag = Math.max(tag, textWidth(event.tag, TYPE.tag) + LOOK.strip.tagPadX * 2);\n }\n }\n const both = value + (tag > 0 ? (value > 0 ? LOOK.strip.tagGap : 0) + tag : 0);\n return Math.max(textWidth(name, TYPE.fieldName), both);\n}\n\n/** 1 行に並べた時に帯が要る幅。 */\nexport function stripNeed(diagram: Diagram): number {\n if (!diagram.strip) return 0;\n const { titleX, fieldGap, pad } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n return start + diagram.strip.fields.reduce((sum, name) => sum + fieldWidth(diagram, name) + fieldGap, 0) - fieldGap + pad;\n}\n\n/** 中身の帯。欄は左から並べ、幅に収まらない欄は次の行へ送る。 */\nexport function layoutStrip(diagram: Diagram, x: number, y: number, width: number): SceneStrip | undefined {\n if (!diagram.strip) return undefined;\n const { titleX, fieldGap, pad, line, h } = LOOK.strip;\n const start = titleX + textWidth(diagram.strip.title, TYPE.stripTitle) + fieldGap;\n const fields: SceneField[] = [];\n let cx = start;\n let row = 0;\n for (const name of diagram.strip.fields) {\n const w = fieldWidth(diagram, name);\n if (cx > start && cx + w > width - pad) {\n cx = start;\n row++;\n }\n fields.push({ name, x: x + cx, y: y + row * line, w });\n cx += w + fieldGap;\n }\n return { x, y, w: width, h: h + row * line, title: diagram.strip.title, fields };\n}\n\n/** 場面の全ての物を (dx, dy) だけ動かす。区画と帯は動かさず、横いっぱいの形を保つ。 */\nexport function shiftContent(layout: Layout, dx: number, dy: number): void {\n const move = (rect: Rect): void => {\n rect.x += dx;\n rect.y += dy;\n };\n for (const box of layout.boxes) {\n move(box);\n box.cx += dx;\n box.cy += dy;\n }\n for (const region of layout.regions) {\n region.y += dy;\n move(region.header);\n }\n for (const line of layout.lifelines) {\n line.x += dx;\n line.y1 += dy;\n line.y2 += dy;\n }\n for (const edge of layout.edges) {\n edge.points = edge.points.map(([px, py]) => [px + dx, py + dy]);\n if (edge.settle) edge.settle = [edge.settle[0] + dx, edge.settle[1] + dy];\n }\n for (const label of layout.labels) move(label);\n for (const action of layout.actions) move(action);\n for (const badge of layout.badges) {\n badge.x += dx;\n badge.y += dy;\n }\n if (layout.strip) {\n layout.strip.y += dy;\n for (const field of layout.strip.fields) {\n field.x += dx;\n field.y += dy;\n }\n }\n}\n\n/** 線も処理も無い段の番号。書き換わる箱の左上か、中身の帯の左上か、最初の箱の左上。 */\nexport function cornerBadge(events: DiagramEvent[], step: number, layout: Layout): SceneBadge {\n const { inset } = LOOK.badge;\n for (const event of events) {\n const id = event.type === \"swap\" || event.type === \"action\" ? event.box : undefined;\n const box = layout.boxes.find((b) => b.id === id);\n if (box) return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n }\n if (layout.strip && events.some((event) => event.type === \"strip\")) return { step, x: layout.strip.x + inset, y: layout.strip.y + inset, color: \"slate\" };\n const box = layout.boxes[0] as SceneBox;\n return { step, x: box.x + inset, y: box.y + inset, color: box.color };\n}\n","/**\n * 構成図の置き場所。\n *\n * 区画を上から帯に積み、帯の左に区画の名前を置く。箱は全ての帯で共通の列に並べるので、\n * 区画をまたぐ線は縦にまっすぐ走る。箱の並びは線を辿って決める。前の区画の箱から線が来る箱を\n * その箱の列に置き、そこから線で繋がる箱を隣の列へ (寄せの指示が左か右なら下の行へ) 置いていく。\n * 線は縦と横の折れ線で、間にある箱を避ける。名前が箱に掛かる時は帯を広げて名前の場所を空ける。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram, LabelSide, Region } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n boxWidth,\n cornerBadge,\n edgeColor,\n edgesOf,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type Rect,\n regionColors,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n type SceneRegion,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\ninterface Group {\n region?: Region;\n members: string[];\n}\n\ninterface Slot {\n group: number;\n col: number;\n row: number;\n}\n\ninterface Room {\n top: number;\n bottom: number;\n}\n\nexport function layoutArchitecture(diagram: Diagram): Layout {\n const groups = groupsOf(diagram);\n const slots = placeBoxes(diagram, groups);\n const rooms = groups.map(() => ({ top: 0, bottom: 0 }));\n let layout = arrange(diagram, groups, slots, rooms);\n // 名前を置く場所が帯の外へ出たら、その帯を広げて置き直す\n for (let pass = 0; pass < 3 && grow(layout, groups, slots, rooms); pass++) layout = arrange(diagram, groups, slots, rooms);\n return layout;\n}\n\nfunction groupsOf(diagram: Diagram): Group[] {\n const regions = diagram.regions ?? [];\n const known = new Set(regions.map((r) => r.id));\n const groups: Group[] = regions.map((region) => ({ region, members: diagram.boxes.filter((b) => b.region === region.id).map((b) => b.id) }));\n const loose = diagram.boxes.filter((b) => b.region === undefined || !known.has(b.region)).map((b) => b.id);\n if (loose.length > 0) groups.push({ members: loose });\n return groups;\n}\n\nconst vertical = (side: LabelSide | undefined): boolean => side === \"left\" || side === \"right\";\n\n/** 箱を列と行へ置く。列は全ての区画で共通。 */\nfunction placeBoxes(diagram: Diagram, groups: Group[]): Map<string, Slot> {\n const columns = LOOK.architecture.columns;\n const edges = edgesOf(diagram).map((e) => e.edge);\n const slots = new Map<string, Slot>();\n groups.forEach((group, g) => {\n const inGroup = new Set(group.members);\n const taken = new Set<string>();\n const free = (col: number, row: number): boolean => col >= 0 && col < columns && !taken.has(`${col},${row}`);\n const near = (col: number, row: number): [number, number] => {\n const start = Math.min(columns - 1, Math.max(0, col));\n for (let r = row; ; r++) {\n for (let d = 0; d < columns; d++) {\n for (const c of [start + d, start - d]) if (free(c, r)) return [c, r];\n }\n }\n };\n const put = (id: string, col: number, row: number): void => {\n slots.set(id, { group: g, col, row });\n taken.add(`${col},${row}`);\n };\n let dir = 1;\n const visit = (id: string): void => {\n for (const edge of edges) {\n const partner = edge.from === id ? edge.to : edge.to === id ? edge.from : undefined;\n if (partner === undefined || !inGroup.has(partner) || slots.has(partner)) continue;\n const me = slots.get(id) as Slot;\n const [c, r] = vertical(edge.labelSide) ? near(me.col, me.row + 1) : free(me.col + dir, me.row) ? [me.col + dir, me.row] : near(me.col + dir, me.row);\n put(partner, c, r);\n visit(partner);\n }\n };\n // 前の区画の箱と線で繋がる箱 (起きる順に早い線から) をその箱の列に置き、そこから辿る\n const anchorOf = (id: string): { order: number; col: number } | undefined => {\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i];\n const partner = edge?.from === id ? edge.to : edge?.to === id ? edge.from : undefined;\n const slot = partner === undefined ? undefined : slots.get(partner);\n if (slot && slot.group < g) return { order: i, col: slot.col };\n }\n return undefined;\n };\n let placed = 0;\n for (;;) {\n const rest = group.members.filter((id) => !slots.has(id));\n if (rest.length === 0) break;\n const anchored = rest.map((id) => ({ id, anchor: anchorOf(id) })).filter((a) => a.anchor !== undefined);\n anchored.sort((a, b) => (a.anchor?.order ?? 0) - (b.anchor?.order ?? 0));\n const pick = anchored[0] ?? { id: rest[0] as string, anchor: undefined };\n const want = pick.anchor?.col ?? 0;\n if (placed === 0) dir = want >= (columns - 1) / 2 ? -1 : 1;\n const [c, r] = free(want, 0) ? [want, 0] : near(want, 0);\n put(pick.id, c, r);\n visit(pick.id);\n placed++;\n }\n });\n // 使っていない列を詰める\n const used = [...new Set([...slots.values()].map((s) => s.col))].sort((a, b) => a - b);\n for (const slot of slots.values()) slot.col = used.indexOf(slot.col);\n return slots;\n}\n\n/** 区画の名前の行。空白があれば真ん中に近い空白で 2 行に折る。 */\nfunction nameLines(name: string): string[] {\n const spaces = [...name.matchAll(/ /g)].map((m) => m.index);\n if (spaces.length === 0) return [name];\n const at = spaces.reduce((best, i) => (Math.abs(i - name.length / 2) < Math.abs(best - name.length / 2) ? i : best));\n return [name.slice(0, at), name.slice(at + 1)];\n}\n\nfunction headerSize(region: Region): { w: number; h: number; lines: string[] } {\n const { icon, nameY, line, inset } = LOOK.region;\n const lines = nameLines(region.name);\n const w = Math.max(icon, ...lines.map((l) => textWidth(l, TYPE.regionName)), textWidth(region.note ?? \"\", TYPE.regionNote));\n // 名前の最後の行の下と、添え書きの下まで\n const h = nameY - inset + (lines.length - 1) * line + (region.note ? line : 0) + LOOK.gap / 2;\n return { w, h, lines };\n}\n\nfunction arrange(diagram: Diagram, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): Layout {\n const { box: B, region: R, architecture: A, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const regionColor = regionColors(diagram);\n const edges = edgesOf(diagram);\n\n // 列の幅と列の間。隣の列を横に結ぶ名前のある線は、名前が収まるまで間を広げる (広げすぎる時は脇へ寄せる)\n const columnCount = Math.max(1, ...[...slots.values()].map((s) => s.col + 1));\n const widths = new Map(diagram.boxes.map((b) => [b.id, boxWidth(diagram, b.id, true)]));\n const colW = Array.from({ length: columnCount }, (_, c) => Math.max(B.minW, ...[...slots].filter(([, s]) => s.col === c).map(([id]) => widths.get(id) ?? B.minW)));\n const between = Array.from({ length: Math.max(0, columnCount - 1) }, () => A.columnGap as number);\n for (const { edge } of edges) {\n const a = slots.get(edge.from);\n const b = slots.get(edge.to);\n if (!a || !b || edge.label === undefined || a.group !== b.group || a.row !== b.row || Math.abs(a.col - b.col) !== 1 || vertical(edge.labelSide)) continue;\n const need = textWidth(edge.label, labelStyle(edge.label)) + LOOK.label.padX * 2 + A.labelRoom * 2;\n const i = Math.min(a.col, b.col);\n if (need <= A.maxColumnGap) between[i] = Math.max(between[i] ?? 0, need);\n }\n const headers = groups.map((g) => (g.region ? headerSize(g.region) : undefined));\n const headerW = Math.max(0, ...headers.map((h) => (h ? h.w + R.inset * 2 : 0)));\n const colLeft: number[] = [];\n for (let c = 0; c < columnCount; c++) colLeft.push(c === 0 ? margin + (headerW > 0 ? headerW : R.pad) : (colLeft[c - 1] as number) + (colW[c - 1] as number) + (between[c - 1] as number));\n const center = (c: number): number => (colLeft[c] as number) + (colW[c] as number) / 2;\n\n // 帯を上から積む\n const boxes: SceneBox[] = [];\n const bands: { group: number; y: number; h: number; rows: number }[] = [];\n let cursor = margin;\n groups.forEach((group, g) => {\n const rows = Math.max(1, ...group.members.map((id) => (slots.get(id)?.row ?? 0) + 1));\n const room = rooms[g] as Room;\n const top = cursor + R.pad + room.top;\n for (const id of group.members) {\n const slot = slots.get(id) as Slot;\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths.get(id) ?? B.minW;\n const cx = center(slot.col);\n const y = top + slot.row * (B.h + A.rowGap);\n boxes.push({\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y,\n w,\n h: B.h,\n cx,\n cy: y + B.h / 2,\n });\n }\n const contentBottom = top + rows * B.h + (rows - 1) * A.rowGap;\n const header = headers[g];\n const h = Math.max(contentBottom + R.pad + room.bottom - cursor, header ? header.h + R.inset * 2 : 0, group.region ? R.minH : 0);\n bands.push({ group: g, y: cursor, h, rows });\n cursor += h + R.gap;\n });\n const bandsBottom = cursor - R.gap;\n\n const byId = new Map(boxes.map((b) => [b.id, b]));\n const bandOf = (id: string) => bands[slots.get(id)?.group ?? 0] as (typeof bands)[number];\n const blocked = (points: Point[], a: string, b: string): boolean =>\n boxes.some((box) => {\n if (box.id === a || box.id === b) return false;\n const pad = LOOK.label.search;\n for (let i = 1; i < points.length; i++) {\n const [x1, y1] = points[i - 1] as Point;\n const [x2, y2] = points[i] as Point;\n if (Math.min(x1, x2) <= box.x + box.w + pad && Math.max(x1, x2) >= box.x - pad && Math.min(y1, y2) <= box.y + box.h + pad && Math.max(y1, y2) >= box.y - pad) return true;\n }\n return false;\n });\n // 箱の下 (上) の、次の行か次の帯との間の真ん中\n const laneBelow = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) < band.rows - 1 ? box.y + box.h + A.rowGap / 2 : Math.min(box.y + box.h + R.pad / 2, band.y + band.h - LOOK.edge.inset);\n };\n const laneAbove = (id: string): number => {\n const box = byId.get(id) as SceneBox;\n const band = bandOf(id);\n return (slots.get(id)?.row ?? 0) > 0 ? box.y - A.rowGap / 2 : Math.max(box.y - R.pad / 2, band.y + LOOK.edge.inset);\n };\n const inset = LOOK.edge.inset;\n const route = (from: string, to: string): Point[] => {\n const a = byId.get(from) as SceneBox;\n const b = byId.get(to) as SceneBox;\n const sa = slots.get(from) as Slot;\n const sb = slots.get(to) as Slot;\n if (sa.group === sb.group && sa.row === sb.row) {\n const right = b.cx > a.cx;\n const straight: Point[] = [\n [right ? a.x + a.w : a.x, a.cy],\n [right ? b.x - inset : b.x + b.w + inset, b.cy],\n ];\n if (!blocked(straight, from, to)) return straight;\n const lane = laneBelow(from);\n return [\n [a.cx, a.y + a.h],\n [a.cx, lane],\n [b.cx, lane],\n [b.cx, b.y + b.h + inset],\n ];\n }\n const down = b.cy > a.cy;\n const leave: Point = [a.cx, down ? a.y + a.h : a.y];\n const enter: Point = [b.cx, down ? b.y - inset : b.y + b.h + inset];\n if (sa.col === sb.col) {\n const straight: Point[] = [leave, enter];\n if (!blocked(straight, from, to)) return straight;\n const x = a.x + a.w + (between[sa.col] ?? A.columnGap) / 2;\n return [\n [a.x + a.w, a.cy],\n [x, a.cy],\n [x, b.cy],\n [b.x + b.w + inset, b.cy],\n ];\n }\n const right = b.cx > a.cx;\n const lane = down ? laneBelow(from) : laneAbove(from);\n const candidates: Point[][] = [\n [leave, [a.cx, b.cy], [right ? b.x - inset : b.x + b.w + inset, b.cy]],\n [[right ? a.x + a.w : a.x, a.cy], [b.cx, a.cy], enter],\n [leave, [a.cx, lane], [b.cx, lane], enter],\n ];\n return candidates.find((points) => !blocked(points, from, to)) ?? (candidates[2] as Point[]);\n };\n\n const sceneEdges: SceneEdge[] = edges.map(({ step, event, edge }) => {\n const target = byId.get(edge.to) as SceneBox;\n return {\n step,\n event,\n from: edge.from,\n to: edge.to,\n points: route(edge.from, edge.to),\n color: edgeColor(edge, colors),\n carry: edge.carry,\n settle: [target.cx, target.cy + B.iconY],\n };\n });\n // 同じ 2 つの箱を行きと帰りで結ぶまっすぐな線は、少しずらして重ならないようにする\n for (const edge of sceneEdges) {\n if (edge.points.length !== 2) continue;\n const back = sceneEdges.some((other) => other.from === edge.to && other.to === edge.from && other.points.length === 2);\n if (!back) continue;\n const [p, q] = edge.points as [Point, Point];\n const flat = Math.abs(q[1] - p[1]) < Math.abs(q[0] - p[0]);\n const d = (edge.from < edge.to ? 1 : -1) * LOOK.edge.parallel;\n edge.points = edge.points.map(([x, y]) => (flat ? [x, y + d] : [x + d, y]));\n }\n\n const regions: SceneRegion[] = [];\n groups.forEach((group, g) => {\n const band = bands[g] as (typeof bands)[number];\n const header = headers[g];\n if (!group.region || !header) return;\n regions.push({\n id: group.region.id,\n lines: header.lines,\n ...(group.region.note !== undefined ? { note: group.region.note } : {}),\n ...(group.region.icon !== undefined ? { icon: group.region.icon } : {}),\n color: regionColor.get(group.region.id) ?? \"slate\",\n x: margin,\n y: band.y,\n w: 0,\n h: band.h,\n header: { x: margin + R.inset, y: band.y + R.inset, w: header.w, h: header.h },\n });\n });\n\n const labels: SceneLabel[] = [];\n for (const edge of sceneEdges) {\n const source = diagram.steps[edge.step]?.events[edge.event];\n if (source?.type !== \"edge\" || source.label === undefined) continue;\n const soft: Rect[] = [...regions.map((r) => r.header), ...labels.filter((l) => l.step === edge.step)];\n labels.push(\n placeLabel(\n { step: edge.step, event: edge.event, text: source.label, points: edge.points, color: edge.color, ...(source.labelSide ? { side: source.labelSide } : {}) },\n { hard: boxes, soft },\n ),\n );\n }\n\n const layout: Layout = { kind: \"architecture\", width: 0, height: 0, regions, boxes, lifelines: [], edges: sceneEdges, labels, actions: [], badges: [] };\n // 名前が左へ出たら、帯の中身を右へ寄せる。帯は図の幅いっぱいに引き直す\n const shift = labels.length > 0 ? Math.max(0, margin + LOOK.label.soft - Math.min(...labels.map((l) => l.x))) : 0;\n if (shift > 0) shiftContent(layout, shift, 0);\n const contentRight = Math.max(...boxes.map((b) => b.x + b.w + R.pad), ...labels.map((l) => l.x + l.w + LOOK.label.soft), ...sceneEdges.flatMap((e) => e.points.map((p) => p[0] + R.pad)));\n const width = Math.max(contentRight + margin, stripNeed(diagram) + margin * 2);\n for (const region of regions) region.w = width - margin * 2;\n const strip = layoutStrip(diagram, margin, bandsBottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bandsBottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = diagram.steps.map((step, s) => {\n const edge = sceneEdges.find((e) => e.step === s);\n if (!edge) return cornerBadge(step.events, s, layout);\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n });\n return layout;\n}\n\n/** 区画の中を結ぶ線の名前が帯の外へ出ていたら、その分だけ帯の上か下を広げる。広げたら true。 */\nfunction grow(layout: Layout, groups: Group[], slots: Map<string, Slot>, rooms: Room[]): boolean {\n let grown = false;\n const soft = LOOK.label.soft;\n for (const label of layout.labels) {\n const edge = layout.edges.find((e) => e.step === label.step && e.event === label.event);\n const a = edge && slots.get(edge.from);\n const b = edge && slots.get(edge.to);\n if (!a || !b || a.group !== b.group || !groups[a.group]?.region) continue;\n const region = layout.regions.find((r) => r.id === groups[a.group]?.region?.id);\n const room = rooms[a.group];\n if (!region || !room) continue;\n const over = region.y + soft - label.y;\n const under = label.y + label.h - (region.y + region.h - soft);\n if (over > 0) {\n room.top += over;\n grown = true;\n }\n if (under > 0) {\n room.bottom += under;\n grown = true;\n }\n }\n return grown;\n}\n","/**\n * 時系列図の置き場所。\n *\n * 生存線の頭の箱を上に横 1 列に並べ、段で起きる線と処理を起きる順に 1 行ずつ下へ積む。\n * 生存線の間は、箱の幅と、その間を走る線の名前が収まる幅を取る。中身の帯は一番下に置く。\n */\nimport { LOOK, TYPE } from \"../look/values\";\nimport type { Diagram } from \"../schema\";\nimport { textWidth } from \"./measure\";\nimport {\n badgeOnPath,\n boxColors,\n cornerBadge,\n boxWidth,\n edgeColor,\n labelStyle,\n type Layout,\n layoutStrip,\n type Point,\n placeLabel,\n type SceneAction,\n type SceneBadge,\n type SceneBox,\n type SceneEdge,\n type SceneLabel,\n shiftContent,\n stripNeed,\n} from \"./scene\";\n\nexport function layoutSequence(diagram: Diagram): Layout {\n const { box: B, sequence: Q, label: L, margin, gap } = LOOK;\n const colors = boxColors(diagram);\n const listed = diagram.sequence?.lifelines ?? [];\n const order = [...listed, ...diagram.boxes.map((b) => b.id).filter((id) => !listed.includes(id))];\n const column = new Map(order.map((id, i) => [id, i]));\n const widths = order.map((id) => boxWidth(diagram, id, false));\n\n // 生存線の間。隣の箱どうしの隙間を取り、名前のある線が走る間は名前が収まるまで広げる\n const spacing = widths.slice(1).map((w, i) => (widths[i] as number) / 2 + w / 2 + Q.columnGap);\n const needs: { from: number; to: number; need: number }[] = [];\n for (const step of diagram.steps) {\n for (const event of step.events) {\n if (event.type !== \"edge\" || event.label === undefined) continue;\n const a = column.get(event.from) ?? 0;\n const b = column.get(event.to) ?? 0;\n const w = textWidth(event.label, labelStyle(event.label)) + L.padX * 2;\n if (a === b) {\n // 自分へ戻る線は名前を右に置くので、右の生存線までに輪と名前が収まる幅を取る\n if (a < spacing.length) needs.push({ from: a, to: a + 1, need: Q.selfW + L.side + w + Q.labelRoom });\n } else {\n needs.push({ from: Math.min(a, b), to: Math.max(a, b), need: w + Q.labelRoom * 2 });\n }\n }\n }\n needs.sort((x, y) => x.to - x.from - (y.to - y.from));\n for (const { from, to, need } of needs) {\n let have = 0;\n for (let i = from; i < to; i++) have += spacing[i] ?? 0;\n if (have >= need) continue;\n const add = (need - have) / (to - from);\n for (let i = from; i < to; i++) spacing[i] = (spacing[i] ?? 0) + add;\n }\n const xs: number[] = [];\n order.forEach((_, i) => xs.push(i === 0 ? margin + (widths[0] as number) / 2 : (xs[i - 1] as number) + (spacing[i - 1] as number)));\n\n const boxes: SceneBox[] = order.map((id, i) => {\n const source = diagram.boxes.find((b) => b.id === id);\n const w = widths[i] as number;\n const cx = xs[i] as number;\n return {\n id,\n name: source?.name ?? id,\n ...(source?.sub !== undefined ? { sub: source.sub } : {}),\n ...(source?.icon !== undefined ? { icon: source.icon } : {}),\n color: colors.get(id) ?? \"slate\",\n x: cx - w / 2,\n y: margin,\n w,\n h: B.h,\n cx,\n cy: margin + B.h / 2,\n };\n });\n const headBottom = margin + B.h;\n\n // 行を積む。線は上か下に名前を、処理は札を持つので、行ごとに上下に要る高さが違う\n const edges: SceneEdge[] = [];\n const actions: SceneAction[] = [];\n const requests: Parameters<typeof placeLabel>[0][] = [];\n let y = headBottom + Q.firstRow;\n let below = 0;\n let first = true;\n diagram.steps.forEach((step, s) => {\n step.events.forEach((event, e) => {\n if (event.type !== \"edge\" && event.type !== \"action\") return;\n let above: number;\n let under: number;\n if (event.type === \"edge\") {\n const side = event.labelSide ?? \"above\";\n const self = event.from === event.to;\n const named = event.label !== undefined;\n above = named && side === \"above\" ? L.offset + L.h / 2 : gap;\n under = self ? Q.selfH + gap : named && side === \"below\" ? L.offset + L.h / 2 : gap;\n } else {\n above = LOOK.action.h / 2;\n under = LOOK.action.h / 2;\n }\n y = first ? y + above : y + Math.max(Q.minPitch, below + Q.rowGap + above) + (e === 0 && s > 0 ? Q.stepGap : 0);\n first = false;\n below = under;\n\n if (event.type === \"edge\") {\n const xf = xs[column.get(event.from) ?? 0] as number;\n const xt = xs[column.get(event.to) ?? 0] as number;\n const dir = Math.sign(xt - xf) || 1;\n const points: Point[] =\n xf === xt\n ? [\n [xf, y],\n [xf + Q.selfW, y],\n [xf + Q.selfW, y + Q.selfH],\n [xf + LOOK.edge.inset, y + Q.selfH],\n ]\n : [\n [xf, y],\n [xt - dir * LOOK.edge.inset, y],\n ];\n const color = edgeColor(event, colors);\n edges.push({ step: s, event: e, from: event.from, to: event.to, points, color, carry: event.carry });\n if (event.label !== undefined) {\n requests.push({\n step: s,\n event: e,\n text: event.label,\n points,\n color,\n ...(event.labelSide ? { side: event.labelSide } : xf === xt ? { side: \"right\" as const } : {}),\n });\n }\n } else {\n // 札は生存線の上の番号の丸を隠さないよう、丸の右に出す (#3017)\n const x = xs[column.get(event.box) ?? 0] as number;\n const w = textWidth(event.label, TYPE.action) + LOOK.action.padX * 2;\n actions.push({ step: s, event: e, box: event.box, text: event.label, color: colors.get(event.box) ?? \"slate\", x: x + LOOK.badge.r + 4, y: y - LOOK.action.h / 2, w, h: LOOK.action.h });\n }\n });\n });\n const bottom = (first ? headBottom : y + below) + Q.tail;\n const lifelines = order.map((id, i) => ({ id, x: xs[i] as number, y1: headBottom, y2: bottom }));\n\n const labels: SceneLabel[] = [];\n for (const request of requests) {\n const soft = [...labels.filter((l) => l.step === request.step), ...actions];\n labels.push(placeLabel(request, { hard: boxes, soft }));\n }\n\n const layout: Layout = { kind: \"sequence\", width: 0, height: 0, regions: [], boxes, lifelines, edges, labels, actions, badges: [] };\n\n // 図の幅。名前が左に出たら全体を右へ寄せ、右端は一番右の物に余白を足した所\n const lefts = [...boxes.map((b) => b.x), ...labels.map((l) => l.x), ...actions.map((a) => a.x)];\n const shift = Math.max(0, margin - Math.min(...lefts));\n if (shift > 0) shiftContent(layout, shift, 0);\n const rights = [...boxes.map((b) => b.x + b.w), ...labels.map((l) => l.x + l.w), ...actions.map((a) => a.x + a.w), ...edges.flatMap((edge) => edge.points.map((p) => p[0]))];\n const width = Math.max(Math.max(...rights) + margin, stripNeed(diagram) + margin * 2);\n const strip = layoutStrip(diagram, margin, bottom + gap, width - margin * 2);\n layout.width = width;\n layout.height = (strip ? strip.y + strip.h : bottom) + margin;\n if (strip) layout.strip = strip;\n layout.badges = badges(diagram, layout);\n return layout;\n}\n\n/**\n * 段の番号。その段の最初の線の始まりに置き、線が無ければ処理する箱の生存線の上、無ければ書き換わる箱の角。\n * 処理の札はその段の終わりに消えるので、札に付けると止め絵で丸だけが浮く (#3017)。\n */\nfunction badges(diagram: Diagram, layout: Layout): SceneBadge[] {\n return diagram.steps.map((step, s) => {\n const edge = layout.edges.find((e) => e.step === s);\n if (edge) {\n const [x, y] = badgeOnPath(edge.points);\n return { step: s, x, y, color: edge.color };\n }\n const action = layout.actions.find((a) => a.step === s);\n const lifeline = action && layout.lifelines.find((l) => l.id === action.box);\n if (action && lifeline) return { step: s, x: lifeline.x, y: action.y + action.h / 2, color: action.color };\n return cornerBadge(step.events, s, layout);\n });\n}\n","/**\n * 段ごとの始まりと長さと、線、運ぶ物、線の名前、段の番号が見える時刻の表。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/** 箱の下の小さな字。基準線を `y` に置き、起きたことに合わせて書き換わる。 */\nfunction subLines(box: SceneBox, m: Motion, changes: SubChange[], y: number): string {\n const seq: SubChange[] = [[0, box.sub ?? \"\", \"dg-ss\"], ...changes];\n return seq\n .map(([t, text, cls], k) => {\n const next = seq[k + 1]?.[0];\n const anim = k === 0 ? (next === undefined ? \"\" : m.until(next - MOTION.untilFade)) : next === undefined ? m.rise(t) : m.rise(t, next - MOTION.untilFade);\n if (text === \"\") return \"\";\n return `<g${anim ? ` class=\"dg-a\" style=\"${anim}\"` : \"\"}><text class=\"${cls}\" x=\"${r1(box.cx)}\" y=\"${r1(y)}\" text-anchor=\"middle\">${esc(text)}</text></g>`;\n })\n .join(\"\");\n}\n\n/** 箱の地と縁。上端 `y` から高さ `h`。動く段 (`act` の間) は縁に色を付け、外側に淡い光を足す。 */\nfunction cardFrame(box: SceneBox, ctx: Ctx, act: string | undefined, y: number, h: number): string {\n const rect = (cls: string, extra = \"\"): string => `<rect class=\"${cls}\" x=\"${r1(box.x)}\" y=\"${r1(y)}\" width=\"${r1(box.w)}\" height=\"${h}\" rx=\"${LOOK.box.radius}\"${extra}/>`;\n return `${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-halo\")}</g>` : \"\"}${rect(\"dg-st\", ` ${ctx.sh}`)}${act ? `<g class=\"dg-a\" style=\"${act}\">${rect(\"dg-on\")}</g>` : \"\"}`;\n}\n\n/** 箱。動く段は縁に色を付け、外側に淡い光を足す。下の小さな字は起きたことに合わせて書き換わる。 */\nexport function card(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { icon, iconRadius, iconScale, iconY, nameY, subY } = LOOK.box;\n const subs = subLines(box, ctx.m, changes, box.cy + subY);\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n const mark =\n box.icon && ICONS[box.icon]\n ? `<rect class=\"dg-ic\" x=\"${r1(box.cx - icon / 2)}\" y=\"${r1(box.cy + iconY - icon / 2)}\" width=\"${icon}\" height=\"${icon}\" rx=\"${iconRadius}\"/>${glyph(box.icon, box.cx, box.cy + iconY, iconScale)}`\n : \"\";\n return (\n `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, box.y, box.h)}` +\n `${mark}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(box.cy + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`\n );\n}\n\n/**\n * 寄って追う時系列図の窓の上端に貼る頭の箱 (#3120)。図の頭の箱と同じ横の位置と縁で、アイコンを外して名前と下の字の 2 段にする。\n * 携帯の幅では窓が低く、図の頭の箱のままでは窓の高さの 3 割を頭の列が取るため。\n */\nexport function headCard(box: SceneBox, ctx: Ctx, on: number[], changes: SubChange[]): string {\n const { pad, h, nameY, subY } = LOOK.follow.head;\n const subs = subLines(box, ctx.m, changes, pad + subY);\n const act = on.length > 0 ? activeKf(ctx, on) : undefined;\n return `<g style=\"${cs(box.color)}\">${cardFrame(box, ctx, act, pad, h)}<text class=\"dg-sn\" x=\"${r1(box.cx)}\" y=\"${r1(pad + nameY)}\" text-anchor=\"middle\">${esc(box.name)}</text>${subs}</g>`;\n}\n\nexport function lifeline(x: number, y1: number, y2: number): string {\n return `<line class=\"dg-ll\" x1=\"${r1(x)}\" y1=\"${r1(y1)}\" x2=\"${r1(x)}\" y2=\"${r1(y2)}\"/>`;\n}\n\n/**\n * 線。点線で道を見せておき、その段で色の線を引いて、段の終わりまで流れる点で向きを見せる。\n * 済んだ段は薄く残し、最後の段の後に通った道を全て濃くし直す。\n */\nexport function edge(e: SceneEdge, time: EdgeTime, ctx: Ctx): { base: string; lit: string } {\n const { m } = ctx;\n const d = pathOf(e.points);\n const head = arrowHead(e.points);\n const { start: a, drawn: b, end } = time;\n const tail: Frame[] = [\n [end, { opacity: 1 }, EASE.inOut],\n [end + 0.4, { opacity: 0.45 }],\n [ctx.end + 0.3, { opacity: 0.45 }, EASE.inOut],\n [ctx.end + 1, { opacity: 0.95 }],\n [m.last, { opacity: 0.95 }, EASE.inOut],\n [m.total, { opacity: 0 }],\n ];\n const line = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 1 }],\n [a, { opacity: 0, \"stroke-dashoffset\": 1 }, EASE.inOut],\n [a + 0.05, { opacity: 1 }],\n [b, { \"stroke-dashoffset\": 0 }],\n [m.last, { \"stroke-dashoffset\": 0 }],\n [m.total, { \"stroke-dashoffset\": 1 }],\n ...tail,\n ]);\n const hk = m.kf([[0, { opacity: 0 }], [b - 0.05, { opacity: 0 }], [b, { opacity: 1 }], ...tail]);\n const run = -(end - b) * 26;\n const flow = m.kf([\n [0, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b, { opacity: 0, \"stroke-dashoffset\": 0 }],\n [b + 0.25, { opacity: 0.9 }],\n [end - 0.1, { opacity: 0.9 }, EASE.inOut],\n [end + 0.2, { opacity: 0, \"stroke-dashoffset\": run }],\n [m.total, { opacity: 0, \"stroke-dashoffset\": run }],\n ]);\n return {\n base: `<path class=\"dg-e\" d=\"${d}\"/><path class=\"dg-eh\" d=\"${head}\"/>`,\n lit: `<g style=\"${cs(e.color)}\"><path class=\"dg-e-on dg-a\" pathLength=\"1\" d=\"${d}\" style=\"${line}\"/><path class=\"dg-eh-on dg-a\" d=\"${head}\" style=\"${hk}\"/><path class=\"dg-flow dg-a\" d=\"${d}\" style=\"${flow}\"/></g>`,\n };\n}\n\n/** 線の名前の札。その段の間だけ出し、段の終わりまでに消え終わる。 */\nexport function label(l: SceneLabel, time: LabelTime, ctx: Ctx): string {\n const ja = l.family === \"sans\" ? \" dg-capj\" : \"\";\n const { radius } = LOOK.label;\n return `<g class=\"dg-cap${ja} dg-a\" style=\"${cs(l.color)};${ctx.m.rise(time.start, time.end, true)}\"><rect x=\"${r1(l.x)}\" y=\"${r1(l.y)}\" width=\"${r1(l.w)}\" height=\"${l.h}\" rx=\"${radius}\"/><text x=\"${r1(l.x + l.w / 2)}\" y=\"${r1(l.y + l.h / 2 + LOOK.baseline.label)}\" text-anchor=\"middle\">${esc(l.text)}</text></g>`;\n}\n\n/** 時系列図の箱の中の処理の札。その段の間だけ生存線の上に出す。 */\nexport function action(a: SceneAction, at: number, until: number, ctx: Ctx): string {\n return `<g class=\"dg-act dg-a\" style=\"${cs(a.color)};${ctx.m.rise(at, until, true)}\"><rect x=\"${r1(a.x)}\" y=\"${r1(a.y)}\" width=\"${r1(a.w)}\" height=\"${a.h}\" rx=\"${LOOK.action.radius}\"/><text x=\"${r1(a.x + a.w / 2)}\" y=\"${r1(a.y + a.h / 2 + LOOK.baseline.action)}\" text-anchor=\"middle\">${esc(a.text)}</text></g>`;\n}\n\nfunction carrierShape(e: SceneEdge, sh: string): string {\n const C = LOOK.carrier;\n if (e.carry.kind === \"coin\") return `<circle class=\"dg-coin\" r=\"${C.coinR}\"/><circle class=\"dg-coin-in\" r=\"${C.coinIn}\"/>`;\n if (e.carry.kind === \"tag\") {\n const text = e.carry.text;\n const ja = hasWide(text);\n const w = textWidth(text, ja ? TYPE.carrierJa : TYPE.carrier) + C.tagPadX * 2;\n return `<rect class=\"dg-car\" x=\"${r1(-w / 2)}\" y=\"${-C.tagH / 2}\" width=\"${r1(w)}\" height=\"${C.tagH}\" rx=\"${C.tagH / 2}\" ${sh}/><text class=\"dg-car-t${ja ? \" dg-car-tj\" : \"\"}\" y=\"${LOOK.baseline.carrier}\" text-anchor=\"middle\">${esc(text)}</text>`;\n }\n return `<rect class=\"dg-env\" x=\"${-C.envW / 2}\" y=\"${-C.envH / 2}\" width=\"${C.envW}\" height=\"${C.envH}\" rx=\"3\" ${sh}/><path class=\"dg-env-in\" d=\"M -8 -4.5 L 0 1.5 L 8 -4.5\"/>`;\n}\n\nconst easeInOut = (t: number): number => (t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2);\n\n/** 運ぶ物。線の上を走り、着いた先 (`settle`) へ寄って、次の同じ主役が出発するまで留まる。 */\nexport function carrier(e: SceneEdge, time: CarrierTime, ctx: Ctx): string {\n const { m } = ctx;\n const n = LOOK.carrier.samples;\n const length = pathLength(e.points);\n const { depart: a, arrive: b, start: from, end: gone } = time;\n const path: [number, number, number][] = [];\n for (let k = 0; k <= n; k++) {\n const [x, y] = along(e.points, easeInOut(k / n) * length);\n path.push([a + ((b - a) * k) / n, x, y]);\n }\n const first = path[0] as [number, number, number];\n const lastPoint = path[path.length - 1] as [number, number, number];\n const rest: Point = e.settle ?? [lastPoint[1], lastPoint[2]];\n const pts: [number, number, number][] = [[0, first[1], first[2]], ...path];\n if (e.settle) pts.push([Math.min(b + 0.3, Math.max(gone, b + 0.01)), rest[0], rest[1]]);\n pts.push([gone, rest[0], rest[1]], [m.total, rest[0], rest[1]]);\n // 次の運ぶ物と入れ替わる時は、重なって 2 つに見えないよう素早く消す\n const fade = gone < m.last ? 0.05 : 0.18;\n return `<g class=\"dg-a\" style=\"${m.move(pts, m.blink(from + 0.02, gone, fade))}\">${carrierShape(e, ctx.sh)}</g>`;\n}\n\n/** 段の番号。まだ来ていない段は出さず、今の段は塗り、済んだ段は縁取りに変えて番号を読めるまま残す。 */\nexport function badge(b: SceneBadge, ctx: Ctx): string {\n const { m } = ctx;\n const span = ctx.t.steps[b.step] as Span;\n const a = span.start;\n const e = span.end;\n const { r, ring: rr } = LOOK.badge;\n const fill = m.kf([\n [0, { opacity: 0, transform: \"scale(.5)\" }],\n [a, { opacity: 0, transform: \"scale(.5)\" }, EASE.pop],\n [a + 0.35, { opacity: 1, transform: \"scale(1)\" }],\n [e, { opacity: 1, transform: \"scale(1)\" }, EASE.inOut],\n [e + 0.4, { opacity: 0, transform: \"scale(1)\" }],\n [m.total, { opacity: 0, transform: \"scale(.5)\" }],\n ]);\n const past = m.kf([[0, { opacity: 0 }], [e, { opacity: 0 }, EASE.inOut], [e + 0.4, { opacity: 1 }], [m.last, { opacity: 1 }, EASE.inOut], [m.total, { opacity: 0 }]]);\n const ring = m.kf([\n [0, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.05, { opacity: 0, transform: \"scale(1)\" }],\n [a + 0.1, { opacity: 0.7, transform: \"scale(1)\" }, EASE.out],\n [a + 0.9, { opacity: 0, transform: \"scale(2.3)\" }],\n [m.total, { opacity: 0, transform: \"scale(1)\" }],\n ]);\n const x = r1(b.x);\n const y = r1(b.y);\n const ty = r1(b.y + LOOK.baseline.badge);\n const no = b.step + 1;\n return (\n `<g class=\"dg-bd\" data-step=\"${b.step}\" style=\"${cs(b.color)}\"><circle class=\"dg-bdr dg-popc dg-a\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\" style=\"${ring}\"/>` +\n `<g class=\"dg-a\" style=\"${past}\"><circle class=\"dg-bdp\" cx=\"${x}\" cy=\"${y}\" r=\"${rr}\"/><text class=\"dg-bdpt\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g>` +\n `<g class=\"dg-popc dg-a\" style=\"${fill}\"><circle class=\"dg-bdf\" cx=\"${x}\" cy=\"${y}\" r=\"${r}\"/><text class=\"dg-bdft\" x=\"${x}\" y=\"${ty}\" text-anchor=\"middle\">${no}</text></g></g>`\n );\n}\n\n/** 中身の帯の 1 欄の移り変わり。値と札は、次の値か札が来るまで出る。 */\nexport interface FieldChange {\n at: number;\n value?: string;\n tag?: string;\n color: ColorKey;\n}\n\nexport function strip(s: SceneStrip, changes: Map<string, FieldChange[]>, ctx: Ctx): string {\n const { m, sh } = ctx;\n const S = LOOK.strip;\n const my = s.y + S.h / 2;\n const parts = [\n `<rect class=\"dg-strip\" x=\"${r1(s.x + 0.5)}\" y=\"${r1(s.y + 0.5)}\" width=\"${r1(s.w - 1)}\" height=\"${r1(s.h - 1)}\" rx=\"${LOOK.region.radius}\" ${sh}/>`,\n `<g style=\"${cs(\"slate\")}\"><rect class=\"dg-bi\" x=\"${r1(s.x + S.pad)}\" y=\"${r1(my - S.icon / 2)}\" width=\"${S.icon}\" height=\"${S.icon}\" rx=\"${LOOK.box.iconRadius}\"/>${glyph(\"env\", s.x + S.pad + S.icon / 2, my, 0.78)}</g>`,\n `<text class=\"dg-sh\" x=\"${r1(s.x + S.titleX)}\" y=\"${r1(my + LOOK.baseline.stripTitle)}\">${esc(s.title)}</text>`,\n ];\n s.fields.forEach((field, i) => {\n const prev = s.fields[i - 1];\n if (prev && prev.y === field.y) {\n const sx = field.x - S.fieldGap / 2;\n parts.push(`<line class=\"dg-sep\" x1=\"${r1(sx)}\" y1=\"${r1(field.y + S.sepInset)}\" x2=\"${r1(sx)}\" y2=\"${r1(field.y + S.h - S.sepInset)}\"/>`);\n }\n parts.push(`<text class=\"dg-fl\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.nameY)}\">${esc(field.name)}</text>`);\n const list = changes.get(field.name) ?? [];\n const values = list.filter((c) => c.value !== undefined);\n const tags = list.filter((c) => c.tag !== undefined);\n values.forEach((c, k) => {\n const next = values[k + 1]?.at;\n const value = c.value as string;\n const anim = next === undefined ? m.rise(c.at) : m.rise(c.at, next - MOTION.untilFade);\n parts.push(`<g class=\"dg-a\" style=\"${anim}\"><text class=\"${hasWide(value) ? \"dg-fvj\" : \"dg-fv\"}\" x=\"${r1(field.x)}\" y=\"${r1(field.y + S.valueY)}\">${esc(value)}</text></g>`);\n });\n tags.forEach((c, k) => {\n const next = tags[k + 1]?.at;\n const tag = c.tag as string;\n // 札は、その時に出ている値の右に置く\n const shown = [...values].reverse().find((v) => v.at <= c.at + 1e-9)?.value;\n const x = field.x + (shown ? textWidth(shown, hasWide(shown) ? TYPE.fieldValueJa : TYPE.fieldValue) + S.tagGap : 0);\n const w = textWidth(tag, TYPE.tag) + S.tagPadX * 2;\n const y = field.y + S.valueY - S.tagH / 2 - LOOK.baseline.tag;\n parts.push(\n `<g class=\"dg-tg dg-popc dg-a\" style=\"${cs(c.color)};${next === undefined ? m.pop(c.at) : m.pop(c.at, next - MOTION.untilFade)}\"><rect x=\"${r1(x)}\" y=\"${r1(y)}\" width=\"${r1(w)}\" height=\"${S.tagH}\" rx=\"${S.tagH / 2}\"/><text x=\"${r1(x + w / 2)}\" y=\"${r1(y + S.tagH / 2 + LOOK.baseline.tag)}\" text-anchor=\"middle\">${esc(tag)}</text></g>`,\n );\n });\n });\n return parts.join(\"\");\n}\n","/**\n * 時刻の点の並びから CSS の keyframes を組む道具。見本帳の `engine.js` の `kf` / `vis` / `rise` / `pop` / `move` を写す。\n *\n * 動きは全て 1 周 `total` 秒の keyframes で、点の時刻は 1 周の中の割合 (%) に直す。\n * 性質ごとに独立して補間されるので、点ごとに変える性質だけを書く。\n */\nimport { EASE, LOOK, MOTION } from \"../look/values\";\n\nexport type Props = Record<string, string | number>;\nexport type Frame = [time: number, props: Props, ease?: string];\n\nconst r2 = (v: number): number => Math.round(v * 100) / 100;\n\nexport class Motion {\n readonly frames: string[] = [];\n private count = 0;\n\n constructor(\n private readonly prefix: string,\n readonly total: number,\n readonly last: number,\n ) {}\n\n private pct(t: number): number {\n return +((Math.min(Math.max(t, 0), this.total) / this.total) * 100).toFixed(3);\n }\n\n /** keyframes を 1 つ足し、その名前を付ける style の字を返す。 */\n kf(points: Frame[]): string {\n const name = `${this.prefix}-${this.count++}`;\n const at = new Map<number, { props: Props; ease?: string }>();\n for (const [t, props, ease] of [...points].sort((a, b) => a[0] - b[0])) {\n const p = this.pct(t);\n const cur = at.get(p) ?? { props: {} };\n Object.assign(cur.props, props);\n if (ease) cur.ease = ease;\n at.set(p, cur);\n }\n const body = [...at]\n .map(([p, { props, ease }]) => {\n const d = Object.entries(props).map(([k, v]) => `${k}:${v}`);\n if (ease) d.push(`animation-timing-function:${ease}`);\n return `${p}%{${d.join(\";\")}}`;\n })\n .join(\"\");\n this.frames.push(`@keyframes ${name}{${body}}`);\n return `animation-name:${name}`;\n }\n\n /** `a` で出て `b` から消える。`within` を立てると `b` までに消え終わる。 */\n vis(a: number, b = this.last, o: { f?: number; on?: Props; off?: Props; ein?: string; within?: boolean } = {}): string {\n const f = o.f ?? MOTION.fade;\n const on = o.on ?? {};\n const off = o.off ?? {};\n const out = o.within ? Math.max(a + f, b - f) : b;\n return this.kf([\n [0, { opacity: 0, ...off }],\n [a, { opacity: 0, ...off }, o.ein ?? EASE.out],\n [a + f, { opacity: 1, ...on }],\n [out, { opacity: 1, ...on }, EASE.inOut],\n [Math.min(out + f, this.total), { opacity: 0, ...off }],\n [this.total, { opacity: 0, ...off }],\n ]);\n }\n\n /** 少し下から浮いて出る。 */\n rise(a: number, b = this.last, within = false): string {\n return this.vis(a, b, { on: { transform: \"translateY(0)\" }, off: { transform: `translateY(${LOOK.rise}px)` }, within });\n }\n\n /** 小さな所から弾んで出る。 */\n pop(a: number, b = this.last): string {\n return this.vis(a, b, { f: MOTION.popFade, ein: EASE.pop, on: { transform: \"scale(1)\" }, off: { transform: `scale(${LOOK.popFrom})` } });\n }\n\n /** 初めから出ていて `b` で消える。 */\n until(b: number): string {\n const f = MOTION.untilFade;\n return this.kf([\n [0, { opacity: 1 }],\n [b, { opacity: 1 }, EASE.inOut],\n [b + f, { opacity: 0 }],\n [this.last, { opacity: 0 }],\n [this.total, { opacity: 1 }],\n ]);\n }\n\n /** 点を辿って動く。`[時刻, x, y, 大きさ, 次の点までの緩急]` の並び。 */\n move(points: [number, number, number, number?, string?][], extra: Frame[] = []): string {\n return this.kf(\n points.map(([t, x, y, s = 1, ease]): Frame => [t, { transform: `translate(${r2(x)}px,${r2(y)}px) scale(${s})` }, ease]).concat(extra),\n );\n }\n\n /** `a` から `b` まで見え、`fade` 秒で消える。 */\n blink(a: number, b: number, fade: number): Frame[] {\n return [\n [0, { opacity: 0 }],\n [a - 0.01, { opacity: 0 }],\n [a, { opacity: 1 }],\n [b, { opacity: 1 }],\n [b + fade, { opacity: 0 }],\n [this.total, { opacity: 0 }],\n ];\n }\n}\n","/**\n * 原本の JSON から図を描く入口。置き場所と時刻の表を作り、部品を重なりの順に並べて SVG にする。\n *\n * 動きは全て SVG の中の CSS の keyframes が回す。1 周の長さは `--T`、止める時刻は `--at`、\n * 止めるか流すかは `--play` の変数で外から変えられる (頁に置く `player.ts` がこれを使う)。\n * 色と字は値の表から CSS の変数として 1 度だけ書き、部品はその変数だけを読む。\n */\nimport { FIGURE_TEXT } from \"../figure-text\";\nimport { layoutArchitecture } from \"../layout/architecture\";\nimport { textWidth } from \"../layout/measure\";\nimport type { Layout, Rect } from \"../layout/scene\";\nimport { layoutSequence } from \"../layout/sequence\";\nimport { FONTS } from \"../look/fonts\";\nimport { type ColorKey, EASE, FONT_VARS, LOOK, MOTION, type Palette, paletteVars, resolvePalette, type TextStyle, type Theme, TYPE } from \"../look/values\";\nimport { readDiagram } from \"../version\";\nimport type { Diagram, ViewMode } from \"../schema\";\nimport { buildTimeline, type Span, type Timeline } from \"../timeline\";\nimport type { NotationLang } from \"../words\";\nimport { action, badge, band, card, carrier, type Ctx, cs, edge, esc, type FieldChange, headCard, label, lifeline, strip, type SubChange } from \"./parts\";\nimport { Motion } from \"./motion\";\n\nexport interface RenderOptions {\n /** 色味の名前。書かないか知らない名前なら紙と墨 */\n palette?: string;\n theme?: Theme;\n /** 描く部品が出す字 (断りの文、全体図の札、読み上げの名前) の言葉。書かなければ日本語 (#3001) */\n lang?: NotationLang;\n}\n\nexport interface Rendered {\n svg: string;\n palette: string;\n theme: Theme;\n /** 書き手が原本で決めた見せ方 */\n view?: ViewMode;\n fonts: { sans: string; mono: string };\n layout: Layout;\n timeline: Timeline;\n diagram: Diagram;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst mix = (pct: number, base = \"var(--surf)\"): string => `color-mix(in srgb,var(--c) ${pct}%,${base})`;\nconst S = LOOK.stroke;\nconst X = LOOK.mix;\n\n/** 部品の見た目。どの値も値の表から読む。 */\nconst PART_CSS = [\n \".dg{display:block;width:100%;height:auto;overflow:visible}\",\n \".dg .dg-a{animation-duration:var(--T);animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both;animation-delay:calc(var(--at,0) * -1s);animation-play-state:var(--play,running)}\",\n \".dg .dg-popc{transform-box:fill-box;transform-origin:center}\",\n \".dg-bg{fill:var(--bg)}\",\n \".dg-band{fill:color-mix(in srgb,var(--c) var(--tint),var(--bg));stroke:color-mix(in srgb,var(--c) var(--edge),transparent)}\",\n `.dg-bi{fill:${mix(X.regionIcon)};stroke:${mix(X.regionIconEdge, \"transparent\")}}`,\n `.dg-bz{${font(TYPE.regionName)};fill:var(--ct)}`,\n `.dg-bx{${font(TYPE.regionNote)};fill:var(--mute)}`,\n \".dg-st{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-halo{fill:none;stroke:var(--c);stroke-width:${S.halo};stroke-opacity:.16}`,\n `.dg-on{fill:none;stroke:var(--c);stroke-width:${S.on}}`,\n `.dg-ic{fill:${mix(X.icon)}}`,\n `.dg-gl{fill:none;stroke:var(--c);stroke-width:${S.glyph};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-sn{${font(TYPE.boxName)};fill:var(--ink)}`,\n `.dg-ss{${font(TYPE.boxSub)};fill:var(--mute)}`,\n `.dg-ss-ok{${font(TYPE.boxSubStrong)};fill:var(--ct)}`,\n `.dg-ss-act{${font(TYPE.boxSubStrong)};fill:var(--ink)}`,\n `.dg-ll{stroke:var(--line);stroke-width:${S.lifeline};stroke-dasharray:3 4}`,\n `.dg-e{fill:none;stroke:var(--line);stroke-width:${S.edge};stroke-linecap:round;stroke-dasharray:0 ${LOOK.edge.ghostDash}}`,\n `.dg-eh{fill:none;stroke:var(--line);stroke-width:${S.arrow};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-e-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-dasharray:1 2}`,\n `.dg-eh-on{fill:none;stroke:var(--c);stroke-width:${S.edgeOn};stroke-linecap:round;stroke-linejoin:round}`,\n `.dg-flow{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linecap:round;stroke-dasharray:1.5 ${LOOK.edge.flowDash}}`,\n \".dg-bd{cursor:pointer}\",\n \".dg-bdf{fill:var(--c)}\",\n `.dg-bdft{${font(TYPE.badge)};fill:var(--on-c)}`,\n `.dg-bdr{fill:none;stroke:var(--c);stroke-width:${S.badgeRing}}`,\n `.dg-bdp{fill:${mix(X.badgePast)};stroke:${mix(X.badgePastEdge, \"transparent\")};stroke-width:${S.hair}}`,\n `.dg-bdpt{${font(TYPE.badge)};fill:var(--ct)}`,\n `.dg-cap rect,.dg-act rect{fill:${mix(X.cap)};stroke:${mix(X.capEdge, \"transparent\")}}`,\n `.dg-cap text{${font(TYPE.label)};fill:var(--ct)}`,\n `.dg-capj text{${font(TYPE.labelJa)}}`,\n `.dg-act text{${font(TYPE.action)};fill:var(--ct)}`,\n \".dg-car{fill:var(--carry,var(--ink))}\",\n `.dg-car-t{${font(TYPE.carrier)};fill:var(--bg)}`,\n `.dg-car-tj{${font(TYPE.carrierJa)}}`,\n `.dg-env{fill:var(--carry,var(--ink));stroke:var(--surf);stroke-width:${S.envelope}}`,\n `.dg-env-in{fill:none;stroke:var(--surf);stroke-width:${S.flow};stroke-linejoin:round;stroke-linecap:round}`,\n \".dg-coin{fill:var(--coin);stroke:var(--surf);stroke-width:1.2}\",\n \".dg-coin-in{fill:none;stroke:var(--coinin);stroke-width:1.1}\",\n \".dg-strip{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-sep{stroke:var(--hair);stroke-width:${S.hair}}`,\n `.dg-sh{${font(TYPE.stripTitle)};fill:var(--ink)}`,\n `.dg-fl{${font(TYPE.fieldName)};fill:var(--mute)}`,\n `.dg-fv{${font(TYPE.fieldValue)};fill:var(--ink)}`,\n `.dg-fvj{${font(TYPE.fieldValueJa)};fill:var(--ink)}`,\n \".dg-tg rect{fill:var(--c)}\",\n `.dg-tg text{${font(TYPE.tag)};fill:var(--on-c)}`,\n \".dg-vp-bg{fill:var(--bg)}\",\n \".dg-vp-frame{fill:none;stroke:var(--hair)}\",\n \".dg-hd-bg{fill:var(--bg)}\",\n \".dg-mm-bg{fill:var(--surf);stroke:var(--hair)}\",\n `.dg-mm-t{${font(TYPE.miniTitle)};fill:var(--mute)}`,\n \".dg-mm-world{fill:var(--sunk);stroke:var(--hair)}\",\n `.dg-mm-band{fill:${mix(X.miniBand)};stroke:${mix(X.miniBandEdge, \"transparent\")};stroke-width:.6}`,\n `.dg-mm-card{fill:${mix(X.mini)}}`,\n `.dg-mm-vp{fill:color-mix(in srgb,var(--ink) ${X.view}%,transparent);stroke:var(--ink);stroke-width:${S.badgeRing};vector-effect:non-scaling-stroke}`,\n].join(\"\");\n\n/** 同じ原本と同じ見た目からは同じ名前になるよう、中身から短い名前を作る (keyframes の名前が頁の中で混ざらないため)。 */\nfunction nameOf(text: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0).toString(36);\n}\n\n/** 各箱が動く段。線の両端、処理、字の書き換えの箱。 */\nfunction involved(diagram: Diagram): Map<string, number[]> {\n const on = new Map<string, Set<number>>();\n const add = (id: string, s: number): void => {\n on.set(id, (on.get(id) ?? new Set()).add(s));\n };\n diagram.steps.forEach((step, s) => {\n for (const event of step.events) {\n if (event.type === \"edge\") {\n add(event.from, s);\n add(event.to, s);\n } else if (event.type === \"action\" || event.type === \"swap\") add(event.box, s);\n }\n });\n return new Map([...on].map(([id, steps]) => [id, [...steps].sort((a, b) => a - b)]));\n}\n\n/** 箱の下の字の移り変わり。書き換えはそのまま残し、構成図の処理はその段の間だけ出して元へ戻す。 */\nfunction subChanges(diagram: Diagram, timeline: Timeline, actionsInBox: boolean): Map<string, SubChange[]> {\n type Raw = { t: number; order: number; box: string; set?: string; act?: string | null };\n const raw: Raw[] = [];\n let order = 0;\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type === \"swap\") raw.push({ t: time.at, order: order++, box: event.box, set: event.text });\n if (actionsInBox && event?.type === \"action\") {\n raw.push({ t: time.at, order: order++, box: event.box, act: event.label });\n raw.push({ t: (timeline.steps[time.step] as Span).end, order: order++, box: event.box, act: null });\n }\n }\n raw.sort((a, b) => a.t - b.t || a.order - b.order);\n const out = new Map<string, SubChange[]>();\n for (const box of diagram.boxes) {\n let base: [string, string] = [box.sub ?? \"\", \"dg-ss\"];\n let acting: string | undefined;\n let shown = base.join(\"|\");\n const list: SubChange[] = [];\n for (const change of raw.filter((r) => r.box === box.id)) {\n // 書き換えは、出ている処理の字も置き換える\n if (change.set !== undefined) {\n base = [change.set, \"dg-ss-ok\"];\n acting = undefined;\n }\n if (change.act !== undefined) acting = change.act ?? undefined;\n const now: [string, string] = acting !== undefined ? [acting, \"dg-ss-act\"] : base;\n if (now.join(\"|\") === shown) continue;\n shown = now.join(\"|\");\n list.push([change.t, now[0], now[1]]);\n }\n // すぐ次の字に替わる字は読めないので出さない\n const kept = list.filter((change, k) => {\n const next = list[k + 1];\n return next === undefined || next[0] - change[0] >= MOTION.minShow;\n });\n out.set(box.id, kept);\n }\n return out;\n}\n\nfunction fieldChanges(diagram: Diagram, timeline: Timeline, layout: Layout): Map<string, FieldChange[]> {\n const out = new Map<string, FieldChange[]>();\n for (const time of timeline.events) {\n const event = diagram.steps[time.step]?.events[time.event];\n if (event?.type !== \"strip\") continue;\n const color: ColorKey = layout.badges[time.step]?.color ?? \"slate\";\n const list = out.get(event.field) ?? [];\n list.push({ at: time.at, color, ...(event.value !== undefined ? { value: event.value } : {}), ...(event.tag !== undefined ? { tag: event.tag } : {}) });\n out.set(event.field, list);\n }\n return out;\n}\n\nexport interface FollowFrame {\n /** 枠の幅 (px)。寄って追う窓はこの幅で、字を原寸で見せる */\n width: number;\n /** 枠の中で見える高さ (px)。渡すと、窓と全体図をこの高さに収め (#3047)、窓をこの高さまで伸ばす (#3053)。枠の高さが図で伸びる置き場では渡さない */\n height?: number;\n /** 隅の全体図の札の言葉。渡し忘れを型の検査で止めるため、省けない欄にする */\n lang: NotationLang;\n}\n\n/** 図を描く。`follow` を渡すと、寄って追う窓と隅の全体図で描く。 */\nexport function drawSvg(diagram: Diagram, layout: Layout, timeline: Timeline, palette: Palette, theme: Theme, follow?: FollowFrame): string {\n // 札の言葉で全体図の地の幅が変わりうるので、同じ頁に置いた別の言葉の図と名前を分ける\n const id = nameOf(`${JSON.stringify(diagram)}|${palette.id}|${theme}|${follow ? `${follow.width}|${follow.lang}` : \"\"}`);\n const m = new Motion(`dg${id}`, timeline.total, timeline.last);\n const ctx: Ctx = { m, t: timeline, sh: `filter=\"url(#dg-sh-${id})\"`, end: (timeline.steps[timeline.steps.length - 1] as Span).end };\n const on = involved(diagram);\n const subs = subChanges(diagram, timeline, layout.kind === \"architecture\");\n\n const L = { band: [] as string[], base: [] as string[], lit: [] as string[], node: [] as string[], badge: [] as string[], top: [] as string[] };\n for (const region of layout.regions) L.band.push(band(region));\n if (layout.strip) L.band.push(strip(layout.strip, fieldChanges(diagram, timeline, layout), ctx));\n for (const line of layout.lifelines) L.base.push(lifeline(line.x, line.y1, line.y2));\n for (const e of layout.edges) {\n const time = timeline.edges.find((t) => t.step === e.step && t.event === e.event);\n if (!time) continue;\n const drawn = edge(e, time, ctx);\n L.base.push(drawn.base);\n L.lit.push(drawn.lit);\n }\n for (const box of layout.boxes) L.node.push(card(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? []));\n for (const b of layout.badges) L.badge.push(badge(b, ctx));\n for (const l of layout.labels) {\n const time = timeline.labels.find((t) => t.step === l.step && t.event === l.event);\n if (time) L.top.push(label(l, time, ctx));\n }\n for (const a of layout.actions) {\n const time = timeline.events.find((t) => t.step === a.step && t.event === a.event);\n if (time) L.top.push(action(a, time.at, (timeline.steps[a.step] as Span).end, ctx));\n }\n for (const time of timeline.carriers) {\n const e = layout.edges.find((x) => x.step === time.step && x.event === time.event);\n if (e) L.top.push(carrier(e, time, ctx));\n }\n const content = Object.values(L)\n .map((parts) => parts.join(\"\"))\n .join(\"\");\n\n const { near, far, nearY, farY } = LOOK.shadow;\n const shadow = `<filter id=\"dg-sh-${id}\" x=\"-20%\" y=\"-30%\" width=\"140%\" height=\"180%\"><feDropShadow dx=\"0\" dy=\"${nearY}\" stdDeviation=\"${near}\" style=\"flood-color:var(--sh);flood-opacity:var(--shA)\"/><feDropShadow dx=\"0\" dy=\"${farY}\" stdDeviation=\"${far}\" style=\"flood-color:var(--sh);flood-opacity:var(--shB)\"/></filter>`;\n // 寄って追う時系列図は、頭の箱を窓の上端に貼る頭の列にも描く (#3118)。頭の列の箱はアイコンを外した 2 段 (#3120)。止めて見せる図では描かない\n const heads = follow && layout.kind === \"sequence\" ? layout.boxes.map((box) => headCard(box, ctx, on.get(box.id) ?? [], subs.get(box.id) ?? [])).join(\"\") : \"\";\n const view = follow ? followView(layout, timeline, diagram, m, id, content, follow, heads) : { body: `<rect class=\"dg-bg\" width=\"${layout.width}\" height=\"${layout.height}\" rx=\"${LOOK.region.radius}\"/>${content}`, w: layout.width, h: layout.height };\n const css = `.dg-${id}{${FONT_VARS};--T:${timeline.total}s;${paletteVars(palette, theme)}}${PART_CSS}${m.frames.join(\"\")}`;\n return (\n `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"dg dg-${id}\" viewBox=\"0 0 ${Math.ceil(view.w)} ${Math.ceil(view.h)}\" width=\"${Math.ceil(view.w)}\" height=\"${Math.ceil(view.h)}\" role=\"img\" aria-label=\"${esc(diagram.title)}\" data-dragon=\"figure\" data-view=\"${follow ? \"follow\" : \"fixed\"}\">` +\n `<style>${css}</style><defs>${shadow}</defs>${view.body}</svg>`\n );\n}\n\n/** 四角を全部囲む四角。 */\nfunction union(rects: Rect[]): Rect {\n const x = Math.min(...rects.map((r) => r.x));\n const y = Math.min(...rects.map((r) => r.y));\n return { x, y, w: Math.max(...rects.map((r) => r.x + r.w)) - x, h: Math.max(...rects.map((r) => r.y + r.h)) - y };\n}\n\n/** 段で動く物が占める所。 */\nfunction focusOf(layout: Layout, diagram: Diagram, step: number): Rect | undefined {\n const rects = focusParts(layout, diagram, step);\n return rects.length === 0 ? undefined : union(rects);\n}\n\n/**\n * 番号の丸が窓から外れる段で、窓に入れる所 (#3046)。\n * 丸とその周りを起点に、丸に近い動く物から順に、窓 (`vw` × `vh`) に収まる間だけ囲む。収まらない物は飛ばして次を見る\n */\nfunction badgeFocus(badge: { x: number; y: number }, parts: Rect[], vw: number, vh: number): Rect {\n const room = LOOK.badge.r + LOOK.follow.badgeRoom;\n const { x: bx, y: by } = badge;\n const away = (p: Rect): number => Math.hypot(Math.max(0, p.x - bx, bx - p.x - p.w), Math.max(0, p.y - by, by - p.y - p.h));\n let held: Rect = { x: bx - room, y: by - room, w: room * 2, h: room * 2 };\n for (const p of [...parts].sort((a, b) => away(a) - away(b))) {\n const next = union([held, p]);\n if (next.w <= vw && next.h <= vh) held = next;\n }\n return held;\n}\n\n/** 段で動く物を 1 つずつ。 */\nfunction focusParts(layout: Layout, diagram: Diagram, step: number): Rect[] {\n const rects: Rect[] = [];\n for (const e of layout.edges.filter((x) => x.step === step)) {\n const xs = e.points.map((p) => p[0]);\n const ys = e.points.map((p) => p[1]);\n rects.push({ x: Math.min(...xs), y: Math.min(...ys), w: Math.max(...xs) - Math.min(...xs), h: Math.max(...ys) - Math.min(...ys) });\n }\n rects.push(...layout.labels.filter((l) => l.step === step), ...layout.actions.filter((a) => a.step === step));\n for (const event of diagram.steps[step]?.events ?? []) {\n const ids = event.type === \"edge\" ? [event.from, event.to] : event.type === \"action\" || event.type === \"swap\" ? [event.box] : [];\n for (const id of ids) {\n const box = layout.boxes.find((b) => b.id === id);\n // 時系列図の頭の箱は遠いので、線の行だけを見る\n if (box && (layout.kind === \"architecture\" || event.type === \"swap\")) rects.push(box);\n }\n }\n return rects;\n}\n\n/**\n * 寄って追う窓。段ごとに動く所へ寄り、窓の外の全体図に今見ている所の枠を同じ動きで出す。\n * 全体図は窓に重ねると今動く線や箱を覆うので、窓の外に置く (#3042)。\n * 縦長の全体図は窓の右に列を取り、横長の全体図は窓の下に置く。失う窓の幅か図の高さの小さい側を選ぶ。\n * 枠の中で見える高さを渡された時は、窓と全体図がその高さに入るまで窓を低くする (#3047)。\n * 枠が余る時は窓を広げ、図の原寸の幅と、見える高さか図の高さまで使う。全体図は今の大きさのまま置く (#3053)。\n * 枠の幅が `LOOK.follow.narrow` より狭い時は、縦長の全体図を出さずに窓へ枠の幅の全部を渡す (#3055)。\n * 段で動く物を全部囲んだ所の真ん中に寄せると今の段の番号の丸が窓から外れる段では、丸に近い動く物から窓に収まるだけ囲んだ所へ寄せる (#3046)。\n * 時系列図は頭の箱 `heads` を窓の上端の頭の列に貼り、窓が横に動く時だけ一緒に動かす。頭の箱は図の上端に在り、線を追う窓からは外れるため。\n * 窓は頭の列の下の残りの高さで動く物を真ん中に見せる (#3118)。\n * 頭の列の箱はアイコンを外した 2 段にして低く貼り、線は図の頭の箱の下から見せ始める (#3120)。\n */\nfunction followView(layout: Layout, timeline: Timeline, diagram: Diagram, m: Motion, id: string, content: string, follow: FollowFrame, heads: string): { body: string; w: number; h: number } {\n const F = LOOK.follow;\n const M = LOOK.mini;\n const frameWidth = Math.max(1, follow.width);\n const full = Math.min(layout.width, frameWidth);\n const title = FIGURE_TEXT[follow.lang].overview;\n /** 窓の高さ `vh` の時の全体図の寸法。全体図は窓の高さで縮むので、窓を低くしたら測り直す */\n const sized = (vh: number) => {\n // 全体図の寸法は枠の幅と窓の高さで決め、置き場所に依らない\n const mw = Math.min(M.w, full * 0.4, ((vh * 0.4) / layout.height) * layout.width);\n const k = mw / layout.width;\n const mh = layout.height * k;\n // 地の幅は図の縦横の比で決まるので、縦に長い図では札より狭くなる。その時は地を札の幅まで広げ、図は広げた地の真ん中に置く\n const bw = Math.max(mw, Math.ceil(textWidth(title, TYPE.miniTitle)));\n // 縦横の比は窓の高さに依らないので、低くしても全体図の置き場所は変わらない\n return { vh, mw, k, mh, bw, bgW: bw + M.pad * 2, bgH: mh + M.pad * 2 + M.title, beside: mh > mw };\n };\n const natural = sized(Math.min(layout.height, Math.max(F.minH, full * F.aspect)));\n // 携帯の幅では縦長の全体図の列が枠の幅の 3 割を取り、窓が図の横の 3 割ほどしか見せない。その時は全体図を出さない。\n // 横長の全体図は窓の下に出して幅を取らないので、狭い枠でも出す\n const bare = natural.beside && frameWidth < F.narrow;\n // 窓の右の全体図は窓の高さの中に収まり、窓の下の全体図は窓の高さに足される\n const room = follow.height === undefined ? Number.POSITIVE_INFINITY : natural.beside ? follow.height : follow.height - natural.bgH - M.inset;\n // 見える高さが窓より低ければ窓と全体図を縮め、高ければ全体図はそのままに窓を図の高さまで伸ばす。\n // 全体図も伸ばすと、狭い枠では右の全体図の列が太って窓が狭くなる\n const { vh, mw, k, mh, bw, bgW, bgH, beside } =\n room < natural.vh ? sized(Math.max(F.fitMinH, room)) : { ...natural, vh: Number.isFinite(room) ? Math.min(layout.height, room) : natural.vh };\n // 右の全体図の列は枠の余りに置き、窓は図の原寸の幅まで広げる。枠が図より狭い時は今までどおり枠の幅から列を引く\n const vw = beside && !bare ? Math.min(layout.width, frameWidth - bgW - M.inset) : full;\n const clampX = (x: number): number => Math.min(layout.width - vw / 2, Math.max(vw / 2, x));\n // 時系列図は窓の上端に頭の列を貼るので、動く物は頭の列の下の残りの高さ `below` に見せる (#3118)。\n // 線は図の頭の箱の下 `top` から見せ始め、図の頭の箱は頭の列の下か窓の上に隠す (#3120)\n const top = heads === \"\" ? 0 : Math.max(...layout.boxes.map((b) => b.y + b.h)) + F.headRoom;\n const strip = heads === \"\" ? 0 : F.head.pad * 2 + F.head.h;\n const below = vh - strip;\n /** 頭の列の下の残りの窓の真ん中の高さを、図の頭の箱の下と図の下端で止める */\n const clampY = (y: number): number => Math.min(layout.height - below / 2, Math.max(top + below / 2, y));\n const r = LOOK.badge.r;\n let prev: [number, number] = [layout.width / 2, layout.height / 2];\n // 頭の列の下の残りの窓の真ん中。窓の真ん中は、これより頭の列の高さの半分だけ上に在る\n const middles = timeline.steps.map((_, s) => {\n const f = focusOf(layout, diagram, s);\n prev = f ? [f.x + f.w / 2, f.y + f.h / 2] : prev;\n const at: [number, number] = [clampX(prev[0]), clampY(prev[1])];\n // 動く物を全部囲んだ所が窓より大きいと、その端に在る番号の丸が窓から外れる。その段だけ丸の近くへ寄せ直す (#3046)\n const b = layout.badges.find((x) => x.step === s);\n if (!b || (Math.abs(b.x - at[0]) <= vw / 2 - r && Math.abs(b.y - at[1]) <= below / 2 - r)) return at;\n const near = badgeFocus(b, focusParts(layout, diagram, s), vw, below);\n // 動く物の無い次の段は、寄せ直した窓のまま止める\n prev = [near.x + near.w / 2, near.y + near.h / 2];\n return [clampX(prev[0]), clampY(prev[1])] as [number, number];\n });\n const centers = middles.map(([x, y]): [number, number] => [x, y - strip / 2]);\n const c0 = centers[0] as [number, number];\n const cam: [number, number, number, number?, string?][] = [\n [0, c0[0], c0[1]],\n [(timeline.steps[0] as Span).start, c0[0], c0[1]],\n ];\n centers.forEach((c, s) => {\n if (s === 0) return;\n const before = centers[s - 1] as [number, number];\n const start = (timeline.steps[s] as Span).start;\n cam.push([start, before[0], before[1], 1, EASE.inOut], [start + F.ease, c[0], c[1]]);\n });\n const cl = centers[centers.length - 1] as [number, number];\n cam.push([timeline.last, cl[0], cl[1], 1, EASE.inOut], [timeline.total, c0[0], c0[1]]);\n const camKf = m.move(cam.map(([t, cx, cy, s, e]) => [t, vw / 2 - cx, vh / 2 - cy, s, e]));\n\n // 右に出す時は窓の上端に揃え、下に出す時は窓の右端から内へ寄せる\n const bgX = beside ? vw + M.inset : vw - bgW - M.inset;\n const bgY = beside ? 0 : vh + M.inset;\n const bx = bgX + M.pad;\n const mx = bx + (bw - mw) / 2;\n const my = bgY + M.pad + M.title;\n /**\n * 全体図の地と札と、今見ている所の枠。窓と同じ動きで枠を動かす。\n * 時系列図の枠は頭の列の下の線を見せる所だけを囲む。頭の箱は頭の列に常に出ているため (#3122)\n */\n const overview = (): { clip: string; body: string } => {\n const shapes = [\n ...layout.regions.map((r) => `<rect class=\"dg-mm-band\" style=\"${cs(r.color)}\" x=\"${mx + r.x * k}\" y=\"${my + r.y * k}\" width=\"${r.w * k}\" height=\"${r.h * k}\" rx=\"3\"/>`),\n ...layout.boxes.map((b) => `<rect class=\"dg-mm-card\" style=\"${cs(b.color)}\" x=\"${mx + b.x * k}\" y=\"${my + b.y * k}\" width=\"${b.w * k}\" height=\"${b.h * k}\" rx=\"1.5\"/>`),\n ].join(\"\");\n const vp = m.move(cam.map(([t, cx, cy, , e]) => [t, mx + (cx - vw / 2) * k, my + (cy - vh / 2) * k, 1, e]));\n return {\n clip: `<clipPath id=\"dg-mm-${id}\"><rect x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\" rx=\"4\"/></clipPath>`,\n body:\n `<rect class=\"dg-mm-bg\" x=\"${bgX}\" y=\"${bgY}\" width=\"${bgW}\" height=\"${bgH}\" rx=\"${M.radius}\"/>` +\n `<text class=\"dg-mm-t\" x=\"${bx}\" y=\"${my - M.pad + 2}\">${title}</text>` +\n `<g clip-path=\"url(#dg-mm-${id})\"><rect class=\"dg-mm-world\" x=\"${mx}\" y=\"${my}\" width=\"${mw}\" height=\"${mh}\"/>${shapes}<rect class=\"dg-mm-vp dg-a\"${strip === 0 ? \"\" : ` y=\"${strip * k}\"`} width=\"${vw * k}\" height=\"${(vh - strip) * k}\" rx=\"2\" style=\"${vp}\"/></g>`,\n };\n };\n const mini = bare ? { clip: \"\", body: \"\" } : overview();\n // 頭の列は窓の中身の上に重ね、窓と同じ時刻と緩急で横にだけ動かす (#3118)\n const head =\n strip === 0\n ? \"\"\n : `<g class=\"dg-hd\"><rect class=\"dg-hd-bg\" width=\"${vw}\" height=\"${strip}\"/><line class=\"dg-sep\" x1=\"0\" y1=\"${strip}\" x2=\"${vw}\" y2=\"${strip}\"/>` +\n `<g class=\"dg-a\" style=\"${m.move(cam.map(([t, cx, , s, e]) => [t, vw / 2 - cx, 0, s, e]))}\">${heads}</g></g>`;\n const body =\n `<defs><clipPath id=\"dg-vp-${id}\"><rect width=\"${vw}\" height=\"${vh}\" rx=\"${LOOK.region.radius}\"/></clipPath>${mini.clip}</defs>` +\n `<g clip-path=\"url(#dg-vp-${id})\"><rect class=\"dg-vp-bg\" width=\"${vw}\" height=\"${vh}\"/><g class=\"dg-a\" style=\"${camKf}\">${content}</g>${head}</g>` +\n `<rect class=\"dg-vp-frame\" x=\"0.5\" y=\"0.5\" width=\"${vw - 1}\" height=\"${vh - 1}\" rx=\"${LOOK.region.radius}\"/>${mini.body}`;\n return { body, w: beside && !bare ? vw + M.inset + bgW : full, h: beside ? vh : bgY + bgH };\n}\n\n/** 原本の JSON から図を描く。原本が形に合わない時は、誤りの場所を添えて断る。 */\nexport function renderDiagram(input: unknown, options: RenderOptions = {}): Rendered {\n const lang = options.lang ?? \"ja\";\n const read = readDiagram(input, { lang });\n if (!read.ok) throw new Error(FIGURE_TEXT[lang].cannotDraw(read.errors.map((e) => `${e.pointer} ${e.message}`).join(\" / \")));\n const diagram = read.diagram;\n const palette = resolvePalette(options.palette);\n const theme: Theme = options.theme === \"dark\" ? \"dark\" : \"light\";\n const layout = diagram.kind === \"sequence\" ? layoutSequence(diagram) : layoutArchitecture(diagram);\n const timeline = buildTimeline(diagram);\n return {\n svg: drawSvg(diagram, layout, timeline, palette, theme),\n palette: palette.id,\n theme,\n ...(diagram.view ? { view: diagram.view } : {}),\n fonts: { ...FONTS },\n layout,\n timeline,\n diagram,\n };\n}\n","/**\n * 見せ方を字の大きさで選ぶ。\n *\n * 全体を枠の幅へ収めた時の箱の名前の字が 10.5px 以上なら、全体を止めて中だけ動かす (`fixed`)。\n * 下回るなら、動く所へ寄って追い、隅の全体図で今どこかを示す (`follow`)。\n * 枠の高さを渡すと、全体を枠の幅と高さの両方へ収めた時の字で選ぶ (#3047)。高さの決まった置き場で、縦に長い図を縮めすぎないため。\n * 書き手が原本の `view` で決めた時は、字の大きさに関わらずそれに従う。\n */\nimport { READABLE_PX, TYPE } from \"./look/values\";\nimport type { Rendered } from \"./render/svg\";\nimport type { ViewMode } from \"./schema\";\n\nexport function chooseView(rendered: Pick<Rendered, \"layout\" | \"view\">, frameWidth: number, frameHeight?: number): { mode: ViewMode; textPx: number } {\n const byWidth = Math.max(0, frameWidth) / rendered.layout.width;\n const scale = frameHeight === undefined ? byWidth : Math.min(byWidth, Math.max(0, frameHeight) / rendered.layout.height);\n const textPx = scale * TYPE.boxName.size;\n if (rendered.view) return { mode: rendered.view, textPx };\n return { mode: textPx >= READABLE_PX ? \"fixed\" : \"follow\", textPx };\n}\n","/**\n * 頁に図を置いて動かす。\n *\n * 動きを嫌う設定 (`prefers-reduced-motion: reduce`) は描く前に読み、その人には一瞬も自動再生せず、\n * 段ごとの止め絵を釦で送る。各段の題と本文は、読み上げの道具が段の順に読める番号付きの一覧として置き、\n * 図そのものは読み上げから隠して同じ中身を 2 度読ませない。\n * 見せ方は枠の幅で選び (`view.ts`)、寄って追う時は窓と全体図で描き直す。\n * 釦と段の一覧の読み上げの名前と全体図の札は、渡した言葉 (`options.lang`、書かなければ日本語) で出す (#3001)。\n * 段が替わるたびに `options.onStep` で今の段を知らせ、頁の側が段の札や進み具合を出せるようにする (#3031)。\n * 段の本文の帯は本文の最も長い段の高さに保ち、段を送っても図の大きさと位置を変えない (#3049)。\n * 帯の中身の幅が `LOOK.player.narrow` より狭い時は、段を送る釦を指で押せる大きさにして段の番号と上の段に並べ、\n * 題と本文をその下の段の全幅に置く (#3057、#3069)。\n */\nimport { FIGURE_TEXT } from \"./figure-text\";\nimport { FONT_VARS, LOOK, paletteVars, resolvePalette, type TextStyle, TYPE } from \"./look/values\";\nimport { drawSvg, type RenderOptions, renderDiagram } from \"./render/svg\";\nimport type { Span } from \"./timeline\";\nimport { chooseView } from \"./view\";\n\nexport interface PlayerOptions extends RenderOptions {\n /** 段が替わるたびに今の段 (0 から) を受け取る。置いた時にも最初の段で 1 度呼ぶ。頁の側で段の札や進み具合を出す時に使う (#3031) */\n onStep?: (step: number) => void;\n /**\n * 図を、図の枠の中で見える高さに収める (#3047)。高さに収めると字が読めない図は寄って追う図にし、寄って追う窓と全体図をその高さに収める。\n * 枠の高さが決まっている置き場 (カタログの拡大の重ね窓) で使う。枠の高さが図に合わせて伸びる置き場で使うと、描くたびに低くなる\n */\n fitHeight?: boolean;\n}\n\nexport interface Player {\n /** 今の段 (0 から) */\n readonly step: number;\n /** 動いているか */\n readonly playing: boolean;\n next(): void;\n prev(): void;\n play(): void;\n pause(): void;\n destroy(): void;\n}\n\nconst font = (t: TextStyle): string => `font:${t.weight} ${t.size}px var(--${t.family})`;\nconst px = (v: number): string => `${v}px`;\n\nfunction playerCss(): string {\n const P = LOOK.player;\n const hidden = px(P.hidden);\n return [\n `.dg-player{display:flex;flex-direction:column;gap:${px(P.gap)};color:var(--ink)}`,\n `.dg-player .dg-frame{border-radius:${px(P.radius)};overflow:hidden}`,\n // 並べ方は帯の中身の幅で選ぶ。帯の中の 1 段 (`.dg-row`) が並べ替わり、帯の左右の余白は置いた頁が帯に付ける\n `.dg-bar{container:dg-bar/inline-size}`,\n `.dg-row{display:flex;align-items:flex-start;gap:${px(P.gap)}}`,\n `.dg-btns{display:flex;gap:${px(P.gap / 2)};flex:none}`,\n `.dg-btn{width:${px(P.button)};height:${px(P.button)};border-radius:${px(P.radius)};border:${px(LOOK.stroke.hair)} solid var(--hair);background:var(--surf);color:var(--ink);${font(TYPE.button)};cursor:pointer}`,\n `.dg-btn:focus-visible{outline:${px(P.focus)} solid var(--c-blue);outline-offset:${px(P.focus)}}`,\n `.dg-say{display:flex;gap:${px(P.gap)};min-width:0}`,\n `.dg-no{${font(TYPE.stepNo)};color:var(--mute);padding-top:${px(P.focus)}}`,\n `.dg-txt{display:grid;grid-template-columns:minmax(0,1fr);min-width:0}`,\n `.dg-txt>*{grid-area:1/1}`,\n `.dg-room{visibility:hidden}`,\n `.dg-tt{${font(TYPE.stepTitle)};margin:0}`,\n `.dg-tb{${font(TYPE.stepBody)};color:var(--ink2);margin:0;white-space:pre-line}`,\n `.dg-sr{position:absolute;width:${hidden};height:${hidden};margin:-${hidden};padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}`,\n // 狭い帯 (携帯の幅) では、段を送る釦を指で押せる大きさにし、その横に番号を置き、\n // 題を 2 段目、本文を 3 段目に置いてどちらも帯の全幅を使う (#3057、#3069)。\n // 釦を大きくすると横に題を置く幅が足りず題が細かく折れるため、題は釦の段に置かない。\n // 題と本文を包む箱を外して写しも同じ升に重ねるので、2 段目は最も高い題、3 段目は最も長い本文の高さになる。\n // 題と本文の間は広い帯と同じく空けず、釦の段の下にだけ間を取って、帯が高くなる分を抑える\n `@container dg-bar (width < ${px(P.narrow)}){` +\n `.dg-row{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:0 ${px(P.gap)}}` +\n `.dg-say,.dg-txt,.dg-txt>*{display:contents}` +\n `.dg-btns{grid-area:1/1;margin-bottom:${px(P.gap / 2)}}` +\n `.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}` +\n `.dg-no{grid-area:1/2;display:flex;align-items:center;min-height:${px(P.touch)};padding-top:0}` +\n `.dg-tt{grid-area:2/1/3/3}` +\n `.dg-tb{grid-area:3/1/4/3}` +\n `}`,\n // 指で触る時は、広い帯でも段を送る釦を指で押せる大きさにする (#3076)。並びは横 1 列のまま変えない。\n // 広い帯は本文が 2 行あれば帯の高さが変わらず、本文の無い帯だけが釦の分だけ高くなる\n `@media (pointer: coarse){.dg-btn{width:${px(P.touch)};height:${px(P.touch)}}}`,\n ].join(\"\");\n}\n\nfunction ensureCss(doc: Document): void {\n if (doc.getElementById(\"dragon-player-css\")) return;\n const style = doc.createElement(\"style\");\n style.id = \"dragon-player-css\";\n style.textContent = playerCss();\n doc.head.appendChild(style);\n}\n\n/** 釦に出す字。HTML に書き出す時は、この字も字の file に残す。 */\nexport const BUTTON_TEXT = { prev: \"‹\", pause: \"❚❚\", play: \"▶\", next: \"›\" } as const;\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n/** 段の番号の札 (`01/12`)。`step` は 0 から数える。 */\nexport const stepNo = (step: number, count: number): string => `${pad(step + 1)}/${pad(count)}`;\n\nexport function mountDiagram(host: HTMLElement, diagram: unknown, options: PlayerOptions = {}): Player {\n const doc = host.ownerDocument;\n const win = doc.defaultView;\n // 描く前に読む。描いた後に読むと、動きを嫌う人にも一瞬だけ流れてしまう\n const reduce = Boolean(win?.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches);\n const rendered = renderDiagram(diagram, options);\n const lang = options.lang ?? \"ja\";\n const words = FIGURE_TEXT[lang];\n const palette = resolvePalette(rendered.palette);\n const { timeline } = rendered;\n const steps = rendered.diagram.steps;\n const count = steps.length;\n\n ensureCss(doc);\n const root = doc.createElement(\"div\");\n root.className = \"dg-player\";\n root.dataset.dragon = \"player\";\n root.setAttribute(\"style\", `${FONT_VARS};${paletteVars(palette, rendered.theme)}`);\n\n const frame = doc.createElement(\"div\");\n frame.className = \"dg-frame\";\n const button = (name: string, label: string, text: string): HTMLButtonElement => {\n const b = doc.createElement(\"button\");\n b.type = \"button\";\n b.className = \"dg-btn\";\n b.dataset.dragon = name;\n b.setAttribute(\"aria-label\", label);\n b.textContent = text;\n return b;\n };\n const prevButton = button(\"prev\", words.prev, BUTTON_TEXT.prev);\n const toggleButton = button(\"toggle\", words.pause, BUTTON_TEXT.pause);\n const nextButton = button(\"next\", words.next, BUTTON_TEXT.next);\n const buttons = doc.createElement(\"div\");\n buttons.className = \"dg-btns\";\n // 置いた頁の言葉と違っても、釦の名前を名前の言葉の声で読ませる\n buttons.setAttribute(\"lang\", lang);\n buttons.append(prevButton, toggleButton, nextButton);\n\n // 見える語り。読み上げには下の一覧を読ませるので、こちらは読み上げから隠す\n const say = doc.createElement(\"div\");\n say.className = \"dg-say\";\n say.setAttribute(\"aria-hidden\", \"true\");\n const no = doc.createElement(\"div\");\n no.className = \"dg-no\";\n no.dataset.dragon = \"step-no\";\n const text = doc.createElement(\"div\");\n text.className = \"dg-txt\";\n const title = doc.createElement(\"p\");\n title.className = \"dg-tt\";\n title.dataset.dragon = \"step-title\";\n const body = doc.createElement(\"p\");\n body.className = \"dg-tb\";\n body.dataset.dragon = \"step-body\";\n const live = doc.createElement(\"div\");\n live.append(title, body);\n text.append(live);\n // 全部の段の題と本文の写しを今の段と同じ升に重ね、見た目からは隠して場所だけを取る。\n // 帯の高さが本文の最も長い段で決まり、段を送っても図の枠が伸び縮みしない (#3049)\n for (const step of steps) {\n const room = doc.createElement(\"div\");\n room.className = \"dg-room\";\n room.dataset.dragon = \"caption-room\";\n const roomTitle = doc.createElement(\"p\");\n roomTitle.className = \"dg-tt\";\n roomTitle.textContent = step.title;\n const roomBody = doc.createElement(\"p\");\n roomBody.className = \"dg-tb\";\n roomBody.textContent = step.body;\n room.append(roomTitle, roomBody);\n text.append(room);\n }\n say.append(no, text);\n // 狭い帯では語りの箱を外して番号と題と本文を釦と同じ升の並びに置く (#3057)。\n // 箱を外した要素の読み上げからの隠し方に頼らず、見える語りの 1 つずつも読み上げから隠す\n for (const shown of [no, title, body]) shown.setAttribute(\"aria-hidden\", \"true\");\n const row = doc.createElement(\"div\");\n row.className = \"dg-row\";\n row.append(buttons, say);\n const bar = doc.createElement(\"div\");\n bar.className = \"dg-bar\";\n bar.append(row);\n\n // 読み上げの道具が段の順に読む一覧。見た目からは外すが、読み上げからは隠さない\n const list = doc.createElement(\"ol\");\n list.className = \"dg-sr\";\n list.dataset.dragon = \"steps\";\n list.setAttribute(\"aria-label\", words.steps(rendered.diagram.title));\n for (const step of steps) {\n const item = doc.createElement(\"li\");\n const head = doc.createElement(\"strong\");\n head.textContent = step.title;\n item.append(head);\n for (const line of step.body.split(\"\\n\")) {\n const p = doc.createElement(\"p\");\n p.textContent = line;\n item.append(p);\n }\n list.append(item);\n }\n\n root.append(frame, bar, list);\n host.append(root);\n\n const frameWidth = (): number => frame.clientWidth || host.clientWidth || rendered.layout.width;\n /** 高さに収めると頼まれた時だけ、図の枠の中で見える高さ (上下の余白を除く)。測れない時は `undefined` で、幅だけで決める */\n const frameHeight = (): number | undefined => {\n if (!options.fitHeight || !win) return undefined;\n const style = win.getComputedStyle(frame);\n const inner = frame.clientHeight - (Number.parseFloat(style.paddingTop) || 0) - (Number.parseFloat(style.paddingBottom) || 0);\n return inner > 0 ? inner : undefined;\n };\n let mode = chooseView(rendered, frameWidth(), frameHeight()).mode;\n let width = frameWidth();\n let height = frameHeight();\n let svg: SVGSVGElement | null = null;\n let step = 0;\n let playing = !reduce;\n let at = reduce ? (timeline.stills[0] ?? 0) : 0;\n let born = Date.now();\n\n /** 動きの変数を付けた図を置き直す。置き直すと動きの時計が最初から数え直される */\n const place = (markup?: string): void => {\n let next: SVGSVGElement | null;\n if (markup !== undefined) {\n const holder = doc.createElement(\"div\");\n holder.innerHTML = markup;\n next = holder.querySelector(\"svg\");\n } else {\n next = svg ? (svg.cloneNode(true) as SVGSVGElement) : null;\n }\n if (!next) return;\n next.setAttribute(\"aria-hidden\", \"true\");\n next.removeAttribute(\"role\");\n next.removeAttribute(\"aria-label\");\n next.style.setProperty(\"--at\", String(at));\n next.style.setProperty(\"--play\", playing ? \"running\" : \"paused\");\n next.dataset.motion = playing ? \"play\" : \"still\";\n if (svg) svg.replaceWith(next);\n else frame.append(next);\n svg = next;\n born = Date.now();\n };\n const markup = (): string => (mode === \"follow\" ? drawSvg(rendered.diagram, rendered.layout, timeline, palette, rendered.theme, { width, ...(height === undefined ? {} : { height }), lang }) : rendered.svg);\n\n const now = (): number => (playing ? (at + (Date.now() - born) / 1000) % timeline.total : at);\n const stepAt = (t: number): number => {\n let found = 0;\n timeline.steps.forEach((span: Span, i) => {\n if (span.start <= t) found = i;\n });\n return found;\n };\n const show = (): void => {\n const current = steps[step];\n no.textContent = stepNo(step, count);\n title.textContent = current?.title ?? \"\";\n body.textContent = current?.body ?? \"\";\n toggleButton.setAttribute(\"aria-label\", playing ? words.pause : words.play);\n toggleButton.textContent = playing ? BUTTON_TEXT.pause : BUTTON_TEXT.play;\n options.onStep?.(step);\n };\n const restart = (t: number, play: boolean): void => {\n at = t;\n playing = play;\n place();\n show();\n };\n const go = (target: number): void => {\n step = Math.min(count - 1, Math.max(0, target));\n const span = timeline.steps[step] as Span;\n restart(playing ? span.start : (timeline.stills[step] ?? span.start), playing);\n };\n\n place(markup());\n show();\n\n const timer = win?.setInterval(() => {\n if (!playing) return;\n const s = stepAt(now());\n if (s !== step) {\n step = s;\n show();\n }\n }, 120);\n const onPrev = (): void => go(step - 1);\n const onNext = (): void => go(step + 1);\n const onToggle = (): void => (playing ? restart(now(), false) : restart(at, true));\n // 段の番号を押すとその段へ移る\n const onFigure = (event: Event): void => {\n const target = (event.target as Element | null)?.closest?.(\"[data-step]\");\n const s = target ? Number(target.getAttribute(\"data-step\")) : Number.NaN;\n if (Number.isInteger(s)) go(s);\n };\n prevButton.addEventListener(\"click\", onPrev);\n nextButton.addEventListener(\"click\", onNext);\n toggleButton.addEventListener(\"click\", onToggle);\n frame.addEventListener(\"click\", onFigure);\n\n // 枠の大きさが変わったら見せ方を選び直す。寄って追う窓は幅 (高さに収める時は高さも) で決まるので、変われば描き直す\n const Observer = (win as (Window & { ResizeObserver?: typeof ResizeObserver }) | null)?.ResizeObserver;\n const observer = Observer\n ? new Observer(() => {\n const w = frameWidth();\n const h = frameHeight();\n const chosen = chooseView(rendered, w, h).mode;\n if (chosen === mode && (mode === \"fixed\" || (w === width && h === height))) return;\n const t = now();\n mode = chosen;\n width = w;\n height = h;\n at = t;\n place(markup());\n })\n : undefined;\n observer?.observe(frame);\n\n return {\n get step() {\n return step;\n },\n get playing() {\n return playing;\n },\n next: onNext,\n prev: onPrev,\n play: () => {\n if (!playing) restart(at, true);\n },\n pause: () => {\n if (playing) restart(now(), false);\n },\n destroy: () => {\n if (timer !== undefined) win?.clearInterval(timer);\n observer?.disconnect();\n prevButton.removeEventListener(\"click\", onPrev);\n nextButton.removeEventListener(\"click\", onNext);\n toggleButton.removeEventListener(\"click\", onToggle);\n frame.removeEventListener(\"click\", onFigure);\n root.remove();\n },\n };\n}\n"]}
|