https://github.com/basecamp/lexxy
Rails の content_tag が html_safe な値を属性値として扱う際にエスケープを行わないため、HTML エンティティが実際のタグとして解釈される問題を修正。to_str による html_safe 属性の除去により、エディタ内のコードブロックが正しく表示されるようになりました。
Provisional Paragraphs機能の導入により、Safari特有のAttachmentNodeキャプション入力バグへの回避策(57行)が削除されました。DecoratorNodeの前後に選択可能なノードが自動保証されることで、ブラウザ固有の処理が不要になり、キャプションのフォーカス管理もシンプル化されています。
Lexxyのテストから固定時間待機(sleep)を削除し、Lexicalの`onUpdate`コールバックと`requestAnimationFrame`を組み合わせた非同期待機機構を導入。エディタの更新完了を確実に待つことで、テストの信頼性と効率性を向上。
Lexicalエディタの選択範囲APIに`selection.getFormat()`と`selection.nearestNodeOfType()`を追加。Webツールバーとネイティブツールバーが統一された書式判定・ノード検索インターフェースを共有できるようになり、カスタムヘルパー関数をLexical標準ユーティリティに置き換えることでコードの一貫性とメンテナンス性を向上。
LexxyのRich Textエディタで、アップロード中および失敗した添付ファイルがDOM出力から除外されるよう変更。ActionTextAttachmentUploadNodeの`exportDOM()`が`null`を返すことで、未完了のアップロードがフォーム送信時のHTMLに含まれなくなり、データ整合性が向上しました。
Lexxyが、DecoratorNodeの選択処理をカスタムイベントベースからLexical標準の `CLICK_COMMAND` ハンドラベースに移行しました。この変更により、内部イベントシステムが完全に削除され、コードが36行削減されています。
Lexicalのカーソル制御を改善するProvisionalParagraphNodeを導入。DecoratorNodeとエディタ境界の間での選択を自然にし、画像ギャラリーなどの複雑なコンポーネント実装を容易にします。
Lexxyのコアパッケージであるlexicalとextensionを、推移的依存関係から明示的な依存関係に変更。依存関係の宣言を明確化することで、将来的なバージョン競合リスクを軽減し、より安定した管理を実現。
複数の拡張機能実装を統一的な LexxyExtension 基底クラスへ移行。拡張機能が自身の有効化条件を定義することで、エディタ本体の条件分岐を削減し、mergeRegister によるクリーンアップ処理でライフサイクル管理を改善。
LexxyエディタのDOM構造から二重の`<div>`ラッピングを削除し、`editor.update()`内の関数が新しい更新ループを作成しないようリファクタリング。これによりエディタの初期化が簡潔になり、不要な再レンダリングが削減されました。
LexxyのSandboxページがTurbo Frameベースに再実装され、プリセット切り替えがURLルーティングで実現されました。Stimulusの動的ロードを排除し、各プリセットへの直リンクとブラウザ履歴の統合を可能にしています。
Lexxyエディタでスタイル付きテキストをペーストした直後のタイピングで、ペースト元のスタイルが保持される問題を修正。selectionオブジェクトにも正規化されたスタイルとフォーマットを適用することで、ペースト後の入力が一貫した正規化ルールに従うようになりました。
Lexxyでカスタムタグ名を設定した際にHTMLが読み込まれない競合状態を修正。カスタム要素の登録を`setTimeout`で遅延実行することで、`Lexxy.configure`の設定が確実に先行して適用されるようになりました。
Lexicalエディタの添付ファイルノードをリファクタリングし、兄弟ノード間の相互更新による競合状態を解消。カスタムイベントシステムを削除し、ノード自身がエディタ参照を保持してアップロード処理を管理する設計に変更しました。
Lexxyエディタのツールバーダイアログ(ドロップダウン)のクローズ処理を、クリックアウトサイドハンドラーからエディタの選択変更イベントに移行。ツールバーをエディタの一部として扱うよう、フォーカスイベントの定義を見直し、`lexxy:focus`/`lexxy:blur`がエディタ要素全体(ツールバーを含む)を対象とするように変更されました。
Lexxyのプロンプト機能で複数文字列(`by:`、`group:`など)をトリガーとして使用できるようになりました。従来の単一文字検出ロジックを、文字列長を考慮した部分文字列抽出に変更し、後方互換性を保ちながら拡張しています。
Lexxyのツールバーでオーバーフローメニューが不要な場合でも表示される問題と、Safariで125%以上のズーム時に誤判定が発生する問題を修正。オーバーフローメニュー自体の幅を判定から除外し、Safari対応として1pxのマージンを追加しました。
LexxyエディタのハイライトドロップダウンUIを改善し、Tailwind CSSとの互換性を向上。複数のボタングループを単一コンテナに統合し、CSS変数による動的レイアウト調整を実現。リストとリンクのスタイルを明示的に指定することで、CSSリセットとの競合を回避。
Lexxyエディタのテーブル編集機能が全面刷新されました。UIでは行・列操作の専用ドロップダウン、ビジュアルフィードバック、セル選択の改善が実装され、内部では`TableHandler`が`TableController`と`TableTools`に分割され、責務が明確化されました。テーブル関連の設定は新しい`TablesLexicalExtension`に統合され、保守性が向上しています。
LexxyのTable機能がLexical Extension APIを使用した形式にリファクタリングされました。テーブル関連のコード(Node定義、プラグイン登録、バグ修正)を`TablesLexicalExtension`として分離し、エディタコアの実装をよりモジュール化しています。