@strtehu/ayatori 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +0 -215
  2. package/package.json +8 -2
package/README.md CHANGED
@@ -1,218 +1,3 @@
1
1
  # Ayatori
2
2
 
3
3
  **Ayatori** (あやとり) — 糸で図形を作り、繋ぎ替えて新たな形を紡ぐ日本の遊びに着想を得た、業務フローチャートの双方向エディタ。
4
-
5
- JSON Schema で定義された構造化データと、React Flow ベースのビジュアル編集を双方向で同期する。AI との修正ループを前提としたコメント機構を内蔵し、フローチャートの設計→描画→レビューを一気通貫で行える。
6
-
7
- ---
8
-
9
- ## 特徴
10
-
11
- - **双方向編集** — JSON ⇄ ビジュアルエディタのリアルタイム同期
12
- - **自動レイアウト** — ELK.js による layered アルゴリズムでレーン分離・分岐合流を自動配置
13
- - **4種のノード** — 開始(緑楕円)、終了(二重線楕円)、処理(角丸矩形)、分岐(ダイヤモンド)
14
- - **コメント機構** — ノード/エッジにコメントを付与し、JSON 経由で AI に修正を依頼するワークフローに対応
15
- - **入力検証 + UI通知** — JSON/YAML 読込時にスキーマ検証し、成功/失敗を画面通知
16
- - **キーボード操作** — `⌘/Ctrl+O` 読込 / `⌘/Ctrl+S` 保存 / `⌘/Ctrl+L` 自動レイアウト / `⌘/Ctrl+B` サイドバー開閉
17
- - **3形式エクスポート** — SVG / スタンドアロン HTML / PNG (Retina 対応)
18
- - **日本語ネイティブ** — 全角/半角混在テキストの幅計算、Noto Sans JP フォント
19
-
20
- ---
21
-
22
- ## 技術スタック
23
-
24
- | レイヤー | 技術 |
25
- |---|---|
26
- | フレームワーク | React 19 |
27
- | ビルド | Vite 8 |
28
- | 言語 | TypeScript 5 (strict) |
29
- | ダイアグラム UI | @xyflow/react 12 (React Flow) |
30
- | 自動レイアウト | elkjs |
31
- | スタイリング | Tailwind CSS 3 |
32
- | フォント | Noto Sans JP (Google Fonts) |
33
- | テスト | Vitest |
34
-
35
- ---
36
-
37
- ## セットアップ
38
-
39
- ```bash
40
- npm install
41
- npm run dev
42
- ```
43
-
44
- http://localhost:5173 でエディタが起動する。
45
-
46
- ### その他のコマンド
47
-
48
- ```bash
49
- npm run build # プロダクションビルド
50
- npm run build:lib # ホスティング用ライブラリビルド (dist-lib/ayatori.iife.js)
51
- npm run preview # ビルド結果のプレビュー
52
- npm test # テスト実行
53
- npm run test:watch # テスト (watch モード)
54
- npm run typecheck # 型チェック
55
- npm run lint # ESLint
56
- ```
57
-
58
- ---
59
-
60
- ## 使い方
61
-
62
- ### 1. フローを開く
63
-
64
- 起動後のウェルカム画面から以下のいずれかを選択:
65
-
66
- - **新規フローを作成** — 開始→完了の最小構成で開始
67
- - **JSON ファイルを開く** — 既存の FlowChart Schema JSON を読み込む
68
- - **サンプルを読み込む** — 同梱の `simple-flow.json` / `asis-flow.json`
69
-
70
- ### 2. 編集する
71
-
72
- - ノードをドラッグして配置を調整
73
- - ノード/エッジをクリックしてサイドバーでプロパティを編集
74
- - 「自動レイアウト」ボタンで ELK による自動配置を実行
75
- - サイドバーの「コメント」タブでノードにレビューコメントを追加
76
- - ノード/エッジに未解決コメントがある場合、キャンバス上に赤バッジで件数表示
77
- - フリードローON時に移動したノード位置は JSON/YAML 保存後も維持
78
-
79
- ### 3. エクスポート
80
-
81
- ツールバーから 3 形式でエクスポート:
82
-
83
- - **SVG** — ベクター画像。印刷・埋め込み向け
84
- - **HTML** — スタンドアロン HTML。ブラウザで開ける完結ファイル
85
- - **PNG** — ラスター画像 (2x Retina 対応)
86
-
87
- ### 4. AI との修正ループ
88
-
89
- 1. エディタ上でノードを選択し、コメントを追加
90
- 2. 「JSON を保存」で書き出し
91
- 3. JSON を AI (Claude 等) に渡して修正を依頼
92
- 4. AI が `comments[].resolved: true` にした修正済み JSON を受け取る
93
- 5. 「JSON を開く」で読み込み → 未解決コメントのみバッジ表示
94
-
95
- ---
96
-
97
- ## FlowChart Schema
98
-
99
- すべてのフローは `FlowChartSchema` (v1) で表現される。型定義は `src/types/schema.ts` を参照。
100
-
101
- ```jsonc
102
- {
103
- "schemaVersion": "1",
104
- "meta": { "name": "...", "purpose": "...", "granularity": "business", "version": "2026-03-13" },
105
- "lanes": [{ "id": "lane-0", "label": "担当者", "order": 0 }],
106
- "phases": [],
107
- "nodes": [
108
- { "id": "n1", "type": "start", "label": "開始", "sublabel": null, "lane": "lane-0", ... }
109
- ],
110
- "edges": [
111
- { "id": "e1", "source": "n1", "target": "n2", "type": "normal", "label": null, ... }
112
- ],
113
- "layout": null,
114
- "designNotes": [],
115
- "openQuestions": []
116
- }
117
- ```
118
-
119
- `layout` が `null` の場合、エディタ読込時に自動レイアウトが実行される。
120
-
121
- ---
122
-
123
- ## プロジェクト構造
124
-
125
- ```
126
- src/
127
- ├── types/schema.ts # FlowChart Schema 型定義
128
- ├── schema/
129
- │ ├── validate.ts # JSON バリデーション
130
- │ ├── parse.ts # JSON/YAML 読込 + 検証
131
- │ ├── defaults.ts # ノード種別→スタイル自動判定
132
- │ └── migrate.ts # スキーマバージョン移行
133
- ├── layout/
134
- │ ├── constants.ts # レイアウト定数 (style-guide 準拠)
135
- │ ├── sizing.ts # テキスト計測・図形サイズ計算
136
- │ ├── engine.ts # ELK レイアウトエンジン
137
- │ └── types.ts # レイアウト内部型
138
- ├── editor/
139
- │ ├── FlowEditor.tsx # メインエディタ
140
- │ ├── Toolbar.tsx # ツールバー (ファイル操作・エクスポート)
141
- │ ├── Sidebar.tsx # サイドバー (プロパティ・コメント)
142
- │ ├── nodes/ # カスタムノード (4種)
143
- │ │ ├── StartEndNode.tsx # 開始/終了 (楕円)
144
- │ │ ├── ProcessNode.tsx # 処理 (角丸矩形)
145
- │ │ ├── DecisionNode.tsx # 分岐 (ダイヤモンド)
146
- │ ├── edges/
147
- │ │ └── FlowEdge.tsx # カスタムエッジ (6種描画対応)
148
- │ ├── overlays/
149
- │ │ ├── LaneOverlay.tsx # レーンヘッダー
150
- │ │ ├── PhaseOverlay.tsx # Phase 帯
151
- │ │ └── CommentBadge.tsx # コメントバッジ
152
- │ ├── adapters/
153
- │ │ └── flow-adapter.ts # Schema ⇄ React Flow 変換共通化
154
- │ └── hooks/
155
- │ ├── useFlowState.ts # Schema ⇄ React Flow 双方向変換
156
- │ ├── useAutoLayout.ts # ELK レイアウト実行
157
- │ ├── useComments.ts # コメント管理
158
- │ └── useUndoRedo.ts # Undo/Redo
159
- ├── export/
160
- │ ├── to-svg.ts # SVG エクスポート
161
- │ ├── to-html.ts # スタンドアロン HTML エクスポート
162
- │ └── to-png.ts # PNG エクスポート (Retina 対応)
163
- └── utils/
164
- ├── text-measure.ts # 全角/半角テキスト幅計算
165
- └── id.ts # ID 生成
166
- ```
167
-
168
- ---
169
-
170
- ## テスト
171
-
172
- ```bash
173
- npm test
174
- ```
175
-
176
- | テストファイル | 内容 |
177
- |---|---|
178
- | `tests/editor/import-validation.test.tsx` | ツールバー読込時の成功/失敗通知と検証結果の反映 |
179
- | `tests/editor/flow-state-persistence.test.ts` | 手動配置レイアウト(positions/viewport)の永続化検証 |
180
- | `tests/editor/toolbar.shortcuts.test.tsx` | `⌘/Ctrl+S/L/B` ショートカットの動作検証 |
181
- | `tests/layout/engine.test.ts` | レーン配置・短枝配置・縦方向順序のレイアウト検証 |
182
- | `tests/layout/sizing.test.ts` | テキスト幅計算、図形サイズ計算 (全角/半角/混在) |
183
- | `tests/schema/hydrate.test.ts` | hydrate/dehydrate と YAML roundtrip の整合性 |
184
- | `tests/schema/parse.test.ts` | JSON/YAML 読込時の解析・検証エラー処理 |
185
- | `tests/schema/validate.test.ts` | スキーマバリデーション (必須フィールド・参照整合性・ノード種別) |
186
-
187
- ---
188
-
189
- ---
190
-
191
- ## ホスティング用ライブラリ (Claude Artifact 対応)
192
-
193
- `npm run build:lib` で、`<script>` タグで読み込める自己完結型バンドルを生成する。
194
-
195
- ```html
196
- <script src="ayatori.iife.js"></script>
197
- <div id="root" style="width: 100%; height: 100vh;"></div>
198
- <script>
199
- Ayatori.render({
200
- container: document.getElementById('root'),
201
- yaml: '...', // YAML テキスト
202
- editable: true,
203
- theme: 'auto',
204
- });
205
- </script>
206
- ```
207
-
208
- 機能: 通常版と同等のフルエディタ(サイドバー・YAMLパネル・レーン/フェーズ編集・エクスポート)に加えて、埋め込み版では初期YAMLとの差分がある場合に「編集されています」バナーを表示。
209
-
210
- 詳細は `agent-skill/ayatori-create-artifact/SKILL.md` を参照。
211
-
212
- GitHub Pages にデプロイした場合、埋め込み版のサンプルは `./embed/` で確認できる。
213
-
214
- ---
215
-
216
- ## ライセンス
217
-
218
- MIT
package/package.json CHANGED
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "@strtehu/ayatori",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "description": "Embeddable flowchart editor — a single IIFE bundle with CSS inlined",
6
6
  "license": "MIT",
7
- "keywords": ["flowchart", "editor", "embed", "iife", "react-flow"],
7
+ "keywords": [
8
+ "flowchart",
9
+ "editor",
10
+ "embed",
11
+ "iife",
12
+ "react-flow"
13
+ ],
8
14
  "repository": {
9
15
  "type": "git",
10
16
  "url": "https://github.com/strtehu/ayatori"