From 2321c068f98bd122d056654b23bf70069c674419 Mon Sep 17 00:00:00 2001 From: EwdErna Date: Sun, 25 Oct 2026 10:44:17 +0900 Subject: [PATCH] =?UTF-8?q?provisional:=20IDX=20Editor=E3=81=AE=E4=BD=9C?= =?UTF-8?q?=E3=82=8A=E7=9B=B4=E3=81=97=E3=81=AE=E7=AF=84=E5=9B=B2=E3=81=A8?= =?UTF-8?q?=E3=80=81=E6=89=80=E6=84=9F=E3=81=8C=E5=AE=9A=E3=82=81=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=AA=E3=81=84=E6=93=8D=E4=BD=9C=E3=81=AE=E7=B4=B0?= =?UTF-8?q?=E9=83=A8=E3=82=92=E4=BB=AE=E3=81=AB=E6=B1=BA=E3=82=81=E3=82=8B?= =?UTF-8?q?(T-31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - IdxPanel を捨てて ui/idx/ に作り直す。order の操作は domain/ の純粋関数にし、rows.ts は変えずに使う - 表示する構成はエディタ内の状態にし、output.variantSelection を書き換えない - ドロップ先のキーの幅で挿入・入れ替えを分け、隠れたキーのくっつき先と、連番の並べ直しでの動き方を決める - 半身の分け方、向きの指定、プレビューでのずらし方、取り込みの照合方法を決める Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GzX13A7HseQz9n6etGbFDg --- provisional/decisions.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/provisional/decisions.md b/provisional/decisions.md index ca48bf0..54ab72a 100644 --- a/provisional/decisions.md +++ b/provisional/decisions.md @@ -121,6 +121,40 @@ ISO Enter・BAE等の異形キー(`w2`・`h2`・`x2`・`y2` のいずれかを 覆すときに影響する箇所: `mock/src/ui/phy/`、6の行判定の関数とそのテスト。 +### T-31 IDX Editorの作り直し + +`ui/panels/IdxPanel.vue` を捨て、`ui/idx/` に一から作る。入力は [idx-editor-feedback.md](idx-editor-feedback.md)「方向が合意できたもの」。 +`order` の操作(挿入・入れ替え・連番の並べ直し・走査・取り込みの照合)は `domain/` に純粋関数として置いてテストし、行と列の判定は `domain/rows.ts` を変えずに使う。 +`ui/phy/viewport.ts` の純粋関数は使ってよいが、`ui/phy/` は変えない。 +理由: 所感は画面の操作の作り直しで、`IdxFile` の形と `domain/idx.ts` は変える理由がない。 + +所感が定めていない部分は、下のとおり仮に決める。 + +- 表示する構成: エディタ内の状態として持ち、開いたときは `output.variantSelection`(欠けたグループは既定)から始める。 + 切り替えても `output` は書き換えず、Undoにも積まない。 +- 画面: 左にバリアントのツリー、中央にキャンバス、右に並べ替え(プリセット・取り込み・未登録の登録)と選択中のキーの情報。 + キーには選んだ構成での出力番号を出す。未登録のキーは番号を出さず、未登録と分かる見た目にする。並びのリストは置かない。 +- 選択: クリックで1つ、Shift/Ctrl+クリックで追加・解除、何もない場所からのドラッグで範囲選択、Escと何もない場所のクリックで解除。 +- ドロップの判定: ドロップ先のキーの幅を4等分し、左端の1/4は「そのキーの前へ挿入」、右端の1/4は「後へ挿入」、中央は入れ替え。 + 回転したキーはキーの向きで測る。ドラッグ中は挿入位置の線か入れ替えの印を出す。何もない場所へのドロップは取り消し。 + ドラッグで動かすのは押したキー1つだけ。未登録のキーをドロップすると、その位置に登録する(入れ替えはしない)。 +- 隠れたキーのくっつき先: 前後で最も近い表示中のキーを候補にし、VariantGroupの祖先を共有するほうへ付ける。 + 両方と共有する、どちらとも共有しない場合は手前に付ける。手前がなければ後ろに付ける。 + 表示中のキーに挟まれた隠れたキーの並びは、後ろに付くキーが出たら、そこから先をすべて後ろに付ける(順序を保つため)。 +- 連番の並べ直し(プリセット・取り込みの共通操作): 渡された列のキーを、列の先頭キーがあった位置から連続して置く。 + 列に入らない表示中のキーは、互いの順序を保つ。列に未登録のキーがあれば登録する。 + 隠れたキーは、くっついている表示中のキーと一緒に動く(ドラッグでの移動と異なる)。 +- 左右の半身: 判定した列のうち、隣り合う列の隙間が最も大きい所で分ける。最大の隙間が0.5U未満なら、範囲の中央のx座標で分ける。 + 回転したキーは、外接矩形で行と列を判定する。 +- 向き: 行優先・列優先は全体に1つ(通常 / 左右逆)。半身ごと・行ごとに左右交互は、左手側と右手側に別々に指定する。 + マトリクス順は向きを持たず、row→colの順に並べ、ELCで位置が決まらないキーは今の順序のまま末尾に置く。 +- プレビュー: 行で走査する方式は行を線で結んで色分けし、列を選んで↑/↓で行の割り当てをずらす。 + 列優先は列を結び、行を選んで←/→でずらす。仮の出力番号と半身の境界も出す。Escで取り消し、適用で1回のUndo単位にする。 +- 取り込み(QMK `keyboard.json` の `layout[]`、VIA定義の `layouts.keymap`、KLE JSON): 各キーの位置・回転を、表示中のキーの位置・回転と照合する(1対1、許容差0.01U)。 + 照合できたキーの列を連番の並べ直しに渡し、照合できなかった数を表示する。QMKで複数のレイアウトがあれば選ばせる。 + +覆すときに影響する箇所: `mock/src/ui/idx/`、`mock/src/domain/` の IDX の並べ替え関数とそのテスト、`mock/e2e/idx.spec.ts`。 + ## B. 明示的な未決事項 ### 未確認事項