import { N as NotationLang, D as Diagram, F as FieldError, C as CheckOptions, a as ColorKey, b as Carry, T as Theme, V as ViewMode } from './schema-B2MTRv66.cjs'; export { B as Box, c as Checked, d as Color, e as DEFAULT_PALETTE, f as DiagramEvent, L as LabelSide, P as PALETTES, g as Palette, R as READABLE_PX, h as Region, S as StatePath, i as Step, r as resolvePalette, v as validateDiagram } from './schema-B2MTRv66.cjs'; /** * 図が使う 2 つの字。どちらも package の依存として同梱する。 * * 描いた SVG は字をこの 2 つの名前でしか名指さない。端末の字の名前を持たないので、 * 同梱した字が読み込まれていない時に、端末の字へ黙って落ちて幅が変わることが無い。 * 頁に字を読み込むのは `@cardenelabs/dragon/fonts` の入口 (`load-fonts.ts`) が持つ。 */ declare const FONTS: { readonly sans: "Noto Sans JP Variable"; readonly mono: "JetBrains Mono Variable"; }; type Family = keyof typeof FONTS; /** * Markdown の中の dragon の囲み (```dragon) を、囲みごとに取り出す。 * * 囲みの開き方と閉じ方は CommonMark に従う。` か ~ を 3 つ以上並べて開き、同じ字を開いた数以上 * 並べて閉じる。閉じていない囲みは文書の終わりまでを中身にする。dragon 以外の言語の囲みの中は読まない。 */ interface Fence { /** 囲みの中身 (記法) */ source: string; /** 中身の 1 行目が文書の何行目か。記法の誤りの行を文書の行に直す時に足す */ line: number; } declare function extractDiagrams(markdown: string): Fence[]; interface LineError { line: number; column: number; message: string; } type Parsed = { ok: true; diagram: Diagram; } | { ok: false; errors: LineError[]; }; interface ParseOptions { /** 誤りの文の言葉。既定は日本語 */ lang?: NotationLang; } declare function parseNotation(notation: string, options?: ParseOptions): Parsed; /** * 図の原本の JSON を、人が書く dragon記法へ書き戻す (#3137)。 * * 並べ方は決まった形に整える。JSON の欄の並び順は見ず、欄の名前で読むので、 * 同じ内容の JSON からは毎回同じ文字列になる。書き手の行の並べ方とコメントは保たない。 * 段の中で起きることは JSON の並び順 (起きる順) のまま書く。 * 状態遷移図の移れる道 (`state.paths`) は、帯の宣言の後、最初の `step` より前に JSON の並びのまま書く (#3163)。 * * `"` で囲むのは要る時だけにする。`[` を含む名前と、`,` か `]` を含む属性の値と、`"` で始まる字を囲む。 * 箱は JSON の並びのまま書き、同じ区画の箱が続く所を 1 つの `group … end` にする。 * 区画の箱が飛び飛びの時は同じ `group` を開き直す。区画の並びが箱の現れる順と違う時と、 * 箱の無い区画がある時は、先に全ての区画を中の無い `group … end` で宣言してから開き直す。 */ declare function printNotation(diagram: Diagram): string; /** この道具が読める原本の版 */ declare const FORMAT_VERSION = 1; type Read = { ok: true; diagram: Diagram; warnings: string[]; } | { ok: false; errors: FieldError[]; }; interface Migrated { changed: boolean; from: number; to: number; } /** 原本を読む。道具より新しい版は描かずに断り、形の誤りは検査の誤りとして返す。誤りの文は `options.lang` (渡さなければ日本語) で出す。 */ declare function readDiagram(input: unknown, options?: CheckOptions): Read; /** * 原本の file を今の版へ移す。今の版の file には触れない。 * * file を読むので、画面で描く入口からは呼ばない。node の file の命令は呼んだ時に初めて読み込む。 */ declare function migrateFile(path: string): Promise; type Point = [number, number]; interface Rect { x: number; y: number; w: number; h: number; } interface SceneBox extends Rect { id: string; name: string; sub?: string; icon?: string; color: ColorKey; cx: number; cy: number; /** 状態遷移図で、どの段も辿り着かない状態。点線の箱で脇道の囲みに描く */ ghost?: boolean; } interface SceneRegion extends Rect { id: string; /** 名前を折り返した行 */ lines: string[]; note?: string; icon?: string; color: ColorKey; /** 名前と印が占める所 */ header: Rect; } /** 線。`step` と `event` は原本の `steps[step].events[event]` を指す。 */ interface SceneEdge { step: number; event: number; from: string; to: string; points: Point[]; color: ColorKey; carry: Carry; /** 着いた運ぶ物が留まる点。無ければ線の終わり */ settle?: Point; } interface SceneLabel extends Rect { step: number; event: number; text: string; family: Family; color: ColorKey; } /** 状態遷移図の、最初の段より前に書いてどの段にも出ない線。点線で描き、運ぶ物を走らせない */ interface ScenePath { from: string; to: string; points: Point[]; label?: Rect & { text: string; family: Family; }; } /** 状態遷移図の始まりと終わりの印。`ghost` は脇道の中の終わりの印 */ interface SceneEnd { kind: "start" | "finish"; x: number; y: number; r: number; ghost: boolean; /** 印の右に添える字 */ text: string; /** 終わりの印へ線を引く状態 */ box?: string; } /** 状態遷移図の脇道の囲み。`title` と `notes` は囲みの左上に置く字 */ interface SceneSide extends Rect { title: string; /** 囲みの名前の下に 1 行ずつ置く添え書き */ notes: string[]; } /** 時系列図の箱の中の処理。生存線の上に札で出す。 */ interface SceneAction extends Rect { step: number; event: number; box: string; text: string; color: ColorKey; } interface SceneBadge { step: number; x: number; y: number; color: ColorKey; } interface SceneLifeline { id: string; x: number; y1: number; y2: number; } interface SceneField { name: string; x: number; y: number; w: number; } /** 状態遷移図の帯の最後の欄。段が辿り着く順に状態を点で並べ、着いた状態を塗る (#3171) */ interface SceneTrail { title: string; states: { box: string; color: ColorKey; }[]; x: number; y: number; w: number; } interface SceneStrip extends Rect { title: string; fields: SceneField[]; trail?: SceneTrail; } interface Layout { kind: Diagram["kind"]; width: number; height: number; regions: SceneRegion[]; boxes: SceneBox[]; lifelines: SceneLifeline[]; edges: SceneEdge[]; labels: SceneLabel[]; actions: SceneAction[]; badges: SceneBadge[]; strip?: SceneStrip; /** 状態遷移図の通らない道。他の図の種類では空 */ paths: ScenePath[]; /** 状態遷移図の始まりと終わりの印。他の図の種類では空 */ ends: SceneEnd[]; /** 状態遷移図の脇道の囲み。通らない状態が無ければ無い */ side?: SceneSide; } /** 秒で表した、見えている間。`end` の時刻は含まない。 */ interface Span { start: number; end: number; } /** 線を引いている間。`start` で引き始め、`drawn` で引き終わり、`end` (段の終わり) まで濃く残す。 */ interface EdgeTime extends Span { step: number; event: number; drawn: number; } /** 運ぶ物が見えている間。`depart` に出発し `arrive` に着く。出発を待つ間と、着いた先で留まる間も含む。 */ interface CarrierTime extends Span { step: number; event: number; who: "main" | "coin"; depart: number; arrive: number; } interface LabelTime extends Span { step: number; event: number; /** 状態遷移図だけが持つ。段が終わった後に薄く残す間 */ after?: Span; } /** 処理、箱の字の書き換え、中身の帯の値が起きる時刻。 */ interface EventTime { step: number; event: number; at: number; } /** 状態遷移図の状態ごとの、光っている間と、済んだ印が出る時刻。運ぶ物が出ていない状態は `done` を持たない */ interface StateTime { box: string; lit: Span[]; done?: number; } interface Timeline { /** 1 周の長さ */ total: number; /** 繰り返す前に消えていく所の始まり */ last: number; steps: Span[]; edges: EdgeTime[]; carriers: CarrierTime[]; labels: LabelTime[]; badges: { step: number; appears: number; }[]; events: EventTime[]; /** 段ごとの止め絵の時刻。その段で起きることが全部見えている */ stills: number[]; /** 状態遷移図だけが持つ */ states?: StateTime[]; } interface RenderOptions { /** 色味の名前。書かないか知らない名前なら紙と墨 */ palette?: string; theme?: Theme; /** 描く部品が出す字 (断りの文、全体図の札、読み上げの名前) の言葉。書かなければ日本語 (#3001) */ lang?: NotationLang; } interface Rendered { svg: string; palette: string; theme: Theme; /** 書き手が原本で決めた見せ方 */ view?: ViewMode; fonts: { sans: string; mono: string; }; layout: Layout; timeline: Timeline; diagram: Diagram; } /** 原本の JSON から図を描く。原本が形に合わない時は、誤りの場所を添えて断る。 */ declare function renderDiagram(input: unknown, options?: RenderOptions): Rendered; interface PlayerOptions extends RenderOptions { /** 段が替わるたびに今の段 (0 から) を受け取る。置いた時にも最初の段で 1 度呼ぶ。頁の側で段の札や進み具合を出す時に使う (#3031) */ onStep?: (step: number) => void; /** * 図を、図の枠の中で見える高さに収める (#3047)。高さに収めると字が読めない図は寄って追う図にし、寄って追う窓と全体図をその高さに収める。 * 枠の高さが決まっている置き場 (カタログの拡大の重ね窓) で使う。枠の高さが図に合わせて伸びる置き場で使うと、描くたびに低くなる */ fitHeight?: boolean; } interface Player { /** 今の段 (0 から) */ readonly step: number; /** 動いているか */ readonly playing: boolean; next(): void; prev(): void; play(): void; pause(): void; destroy(): void; } declare function mountDiagram(host: HTMLElement, diagram: unknown, options?: PlayerOptions): Player; /** * 箱と区画の印の形。どれも (0, 0) を中心に 20 四方へ収める。 * * 見本帳 (`docs/design/base/engine.js` の `G`) と同じ形を持つ。`block` だけは見本帳が絵を手で描いていたので、ここで足した。 * `undo` (戻る矢印) と `yen` (円の印) は、注文の試作 (`docs/design/base/scenes/order.js`) が返品と返金に足した形 (#3171)。 * package の入口からも出し、見本帳の部品「絵」の頁がこの表から使える絵柄の一覧を作る。1 つずつの絵は `iconSvg` が描く (#3172)。 */ declare const ICONS: Readonly>; /** * 絵柄を 1 つだけ描いた SVG (#3172)。見本帳の部品「絵」の頁が、使える絵柄を並べる時に使う。 * 線の太さは箱の印と同じ割合 (印の線の太さ × 印の縮み) で、色は置いた所の字の色 (`currentColor`) を使う。知らない名前は `undefined` */ declare function iconSvg(name: string): string | undefined; declare function chooseView(rendered: Pick, frameWidth: number, frameHeight?: number): { mode: ViewMode; textPx: number; }; export { type CarrierTime, Carry, CheckOptions, ColorKey, Diagram, type EdgeTime, type EventTime, FONTS, FORMAT_VERSION, type Family, type Fence, FieldError, ICONS, type LabelTime, type Layout, type LineError, type Migrated, NotationLang, type ParseOptions, type Parsed, type Player, type PlayerOptions, type Point, type Read, type Rect, type RenderOptions, type Rendered, type SceneAction, type SceneBadge, type SceneBox, type SceneEdge, type SceneEnd, type SceneField, type SceneLabel, type SceneLifeline, type ScenePath, type SceneRegion, type SceneSide, type SceneStrip, type SceneTrail, type Span, type StateTime, Theme, type Timeline, ViewMode, chooseView, extractDiagrams, iconSvg, migrateFile, mountDiagram, parseNotation, printNotation, readDiagram, renderDiagram };