DiffDaily Deep & Concise - OSS変更の定点観測
トップに戻る

basecamp/lexxy

https://github.com/basecamp/lexxy

見出し内での水平線挿入クラッシュを `$insertNodeToNearestRoot` で修正

見出しなど特定ノード内のカーソル位置に `HorizontalDividerNode` を挿入するとエラーが発生していた問題を修正。独自の挿入ロジックを Lexical 標準の `$insertNodeToNearestRoot` に置き換えることで、ルート直下への正しい配置を保証しつつコードも簡潔になりました。

2026年05月29日 Claude Sonnet 4.6

プロンプトメニューの表示方向を強制指定する `vertical-direction` 属性を追加

`lexxy-prompt` 要素に `vertical-direction` 属性が追加され、プロンプトメニューの表示方向を `top`(上向き)または `bottom`(下向き)に強制指定できるようになりました。固定要素やフローティング要素がビューポート内を覆う場合でも、自動計算に頼らず意図した方向にメニューを表示できます。既存の自動判定ロジックはそのまま維持されており、後方互換性も保たれています。

2026年05月29日 Claude Sonnet 4.6

`<lexxy-prompt>`に`only-at`属性とコンテンツタイプゲートの迂回を追加

`<lexxy-prompt>`にトリガーの発火位置を正規表現で制御する`only-at`属性が追加された。ドキュメント全体のテキストを参照する`$textBeforeOffset`関数を新設し、行頭限定や単語途中など多様なユースケースに対応する。あわせて`insert-editable-text`プロンプトがエディタのアタッチメント制限を受けずに常にトリガーリスナーを登録できるよう、コンテンツタイプゲートの短絡処理も追加された。

2026年05月29日 Claude Sonnet 4.6

ImageGalleryNodeの単一子要素アンラップ時に`$makeSafeForRoot`を適用

Trixギャラリーに`&nbsp;`やメンションなど予期しない単一子要素が含まれる場合に発生していたクラッシュを修正。`replaceWithSingularChild()`内の`this.replace(child)`を`this.replace($makeSafeForRoot(child))`に変更する1行の修正で、ルートに追加できない要素を安全に変換するようにしました。

2026年05月29日 Claude Sonnet 4.6

プロンプトのはみ出しをウィンドウではなくエディタ境界で制御する

エディタがモーダル内に表示された際に右端付近のプロンプトポップオーバーがはみ出す問題を修正。クリッピング判定の基準をウィンドウ幅(`window.innerWidth`)からエディタ自身の右端座標(`editorRect.right`)に変更することで、どの埋め込みコンテキストでもプロンプトがエディタ範囲内に収まるようになった。

2026年05月28日 Claude Sonnet 4.6

ギャラリー内での `Shift+Enter` が引き起こす不正なルートノードを修正

ギャラリー内で `Shift+Enter` を押すと `LineBreakNode` がルートノードの直接の子として昇格し `error #99` が発生していた問題を修正。`$makeSafeForRoot` の条件分岐ロジックを `$isSafeForRoot` として独立させ、「安全なノード型」を肯定的に定義する形に整理しました。あわせて Playwright のカスタムマッチャー `toHaveNoErrors` を用いたコンソール監視ヘルパーが追加されています。

2026年05月27日 Claude Sonnet 4.6

サンドボックスの各テンプレートが正常にロードされることを検証するシステムテストを追加

Lexxyのサンドボックス環境に対するシステムテストを新設し、各テンプレートのロード時クラッシュとTurbo Frameを経由したナビゲーション時の問題を自動検出できるようになりました。直前のバグ修正(#1068)を契機に追加されたもので、SandboxController::ALLOWED_TEMPLATESを参照してテストケースを動的生成することで、テンプレート追加時の更新漏れも防止しています。

2026年05月26日 Claude Sonnet 4.6

ツールバーのトップレベルに取り消し線・下線ボタンを移動

lexxyエディタのツールバーで、取り消し線(Strikethrough)と下線(Underline)のボタンがフォーマットドロップダウンの中から外れ、bold・italicと並ぶトップレベルに移動しました。pressed-stateロジックの簡略化と、テストヘルパーのボタン位置非依存化も同時に行われており、今後のツールバー設定機能追加に向けた基盤整備を兼ねた変更です。

2026年05月26日 Claude Sonnet 4.6

ツールバーのオーバーフロー計算が `data-prevent-overflow` 要素を正しく考慮するよう修正

ツールバーのオーバーフロー計算が `data-prevent-overflow` 属性を持つ要素を無視していたバグを修正。エクステンション経由で挿入された「オーバーフロー禁止」ボタンがコンテナ幅をはみ出す問題を、計算順序と参照先の整理によって解消しました。

2026年05月26日 Claude Sonnet 4.6

AndroidのソフトキーボードでプロンプトアイテムをSpaceキーで選択できない問題を修正

AndroidのソフトキーボードはLexicalの `KEY_SPACE_COMMAND` を発火しないため、プロンプトのスペース選択が機能しない問題を修正。`INPUT_COMMAND` を追加リッスンし、`inputType=insertText` かつ `data=" "` の場合に既存の選択ロジックへ委譲することで対応しています。

2026年05月26日 Claude Sonnet 4.6

ソフト改行を段落境界として扱うブロックツールの改善

ツールバーのQuote・Code・Heading・Listなどのブロック変換ツールが、`<br>`によるソフト改行を段落境界として正しく認識するようになりました。Lexical の Caret API を活用した新関数 `$expandSelectionToLineBreaksAndSplitAtEdges` を各ブロック変換処理の前処理として共通適用することで、段落オフセット選択を含む多様な選択状態において「選択行のみを変換し、残りの行を`<br>`付きで保持する」という一貫した動作を実現しています。

2026年05月25日 Claude Sonnet 4.6

Blockquote の `<br>` 境界処理をキャレットネイティブなAPIで再実装

PR #1049 で導入されたソフト改行境界の処理ロジックを、Lexical のキャレット API を直接活用する形に再設計したリファクタリングです。単一の `$splitParagraphsAtLineBreakBoundaries` 関数を「外側の境界で分割する `$expandSelectionToLineBreaksAndSplitAtEdges`」と「内側の `<br>` を爆発させる `$splitSelectedParagraphsAtInnerLineBreaks`」に分割し、責務を明確化しました。キャレットをデータの基本単位として一貫して扱い、変換コストを1箇所に集約することで、コードの保守性が向上しています。

2026年05月25日 Claude Sonnet 4.6

ツールバーのオーバーフロー検出を `clientWidth` ベースに刷新

scrollWidth と独自計算に依存していたツールバーのオーバーフロー判定を、clientWidth / offsetWidth を使うシンプルな実装に刷新。#compactMenu() の責務を #showOverflowMenu()・#getOverflowWidth()・#reclaimWidth() に分割することで可読性を高めつつ、強制レイアウトを防ぐシングルパス設計は維持されています。

2026年05月25日 Claude Sonnet 4.6

CSSリント警告の解消:`text-wrap`・`resize`・`user-select`を`@supports`でラップ

Baseline 2023未満のCSS機能に対するESLintの`css/use-baseline`警告を解消するため、`text-wrap`・`resize`・`user-select`などのプロパティを`@supports`クエリでラップするよう変更されました。`::selection`のみESLintコメントによる個別抑制を採用しており、プロパティごとに対処方法を使い分けるアプローチが取られています。

2026年05月25日 Claude Sonnet 4.6

Lexicalの初期化をrAFで遅延させてナビゲーションのラグを解消

LexxyエディタのconnectedCallback内の初期化処理をrequestAnimationFrameで遅延させ、Turbo morphと同時に発生していたナビゲーション時のラグ(50〜100ms)を解消しました。Lexicalの持つ強制レイアウトフラッシュがmorphのDOM変更全体に波及していた問題に対し、DOM確定後に初期化することで競合を回避しています。合わせてイベントリスナーの登録をregisterRootListenerベースに統一し、ルート要素のライフサイクル管理を堅牢化しています。

2026年05月25日 Claude Sonnet 4.6

エディタのフォームバリデーションAPI実装とアップロード中のフォーム送信防止

`LexicalEditorElement`がElementInternals Validity APIに完全対応し、`required`属性・`checkValidity`・`setValidity`をサポートしました。ファイルアップロード中はフォームが無効状態に設定され、すべてのアップロード完了まで送信が防止されます。エクステンション単位でバリデーション状態を管理するMap構造が採用され、複数エクステンションが互いに干渉せずバリデーションロジックを実装できる拡張可能な設計になっています。

2026年05月23日 Claude Sonnet 4.6

Android IMEのキーボード点滅を防ぐ、プロンプトナビゲーションのフォーカス管理改善

プロンプトメニューのナビゲーション中に `listItem.focus()` がAndroid IMEのソフトキーボードを毎キーストロークで再表示させる問題を修正しました。`aria-activedescendant` 属性の更新のみでスクリーンリーダーへのアナウンスが可能なため、フォーカス移動そのものを廃止し、その補正として存在した `Selection.preservingSelection()` も合わせて削除されています。

2026年05月23日 Claude Sonnet 4.6

App ShareSheetのURL貼り付けをリンクとして処理する

App ShareSheetからURLを共有した際にクリップボードへ `text/uri-list` のみが格納されるケースを、リンクとして正しく処理できるようになりました。`#isOnlyURLPasted` の判定条件を `=== 2` の厳格な等値比較から `<= 2` の上限チェックへ緩和し、単独の `text/uri-list` も受け入れながら既存のSafari対応(`text/plain` + `text/uri-list`)との互換性を維持しています。

2026年05月19日 Claude Sonnet 4.6

ブラウザ互換性の強化:browserslist導入、`checkVisibility`ポリフィル、Lexical v0.44更新

LexxyにRailsの`:modern`設定と同等のbrowserslist定義が追加され、eslint-plugin-compatによる非対応APIの静的検出とSafari向け`Element.checkVisibility()`ポリフィルが整備されました。あわせてLexical v0.44へのアップデートによりネストリストのHTML出力バグも解消されています。

2026年05月15日 Claude Sonnet 4.6

Lexicalのトリプルクリックハンドラを上流で無効化し、選択動作を修正

Lexicalのトリプルクリックハンドラがソフト改行を含む段落の選択やトリプルクリックドラッグを破壊する問題に対し、キャプチャフェーズでstopPropagationを呼ぶ`PreventLexicalTripleClickExtension`を追加して対処しました。Lexxy独自の見出しツールとテーブルがLexicalのハンドラで保護しようとしていた問題を再現しないことを根拠に、上流の修正が行われるまでの暫定措置として最小限の変更で封じ込めています。

2026年05月15日 Claude Sonnet 4.6
1 2 3 … 10 次へ

© 2026 DiffDaily - Powered by AI

タケユー・ウェブ