コンテンツにスキップ

プロジェクト紹介

@lh-ui/share は、lh-ui コンポーネントファミリー唯一のフレームワーク非依存共有層です。

コンポーネントライブラリの「フレームワークに依存しない半分」を切り出して独立したリポジトリに しています:クラス名計算、ステートマシン、アクセシビリティ属性パック、位置決定エンジン、 仮想スクロール、テーマトークン、国際化メッセージ、コンポーネントスタイルソース。各端の UI ライブラリ(lh-ui-plus / lh-ui-vue2 / lh-ui-react / lh-ui-uniapp)は、公開時には npm 依存として 本パッケージを消費し、ファミリー内のローカル開発では本リポジトリのソースを変更すると各 UI ライブラリに即時反映されます。ビルドもリリースも不要です。

コンポーネントライブラリのロジックのうち、フレームワークのリアクティビティに本当に依存するのは ごく一部です:

  • あるクラス名を付けるべきかどうかは、(size, disabled) => string の純粋な計算;
  • ドロップダウンパネルをどちらへ反転すべきかは、幾何計算;
  • リストがどの行をレンダリングすべきかは、インデックス範囲の計算;
  • 「確定」ボタンのラベルは、言語パックの参照。

これらを純関数として沈殿させれば、4 つの端はそれぞれ書いて、それぞれ間違えて、それぞれ 直す必要がなくなります。フレームワーク層に残る仕事はただひとつ:純関数の出力をテンプレートに 束ね、ユーザーの入力を純関数へ戻すことだけです。

層 内容 数
src/core/<コンポーネント>/ コンポーネント純関数(logic.ts / types.ts)、フレームワークインポートなし 56 コンポーネント
src/core/shared/ コンポーネント横断の共有コア(popper / virtual / sx / keyboard / focus-trap …) 12 モジュール
src/theme/ テーマ TS 側:型 + 5 つのプリセット + ランタイムプリミティブ —
styles/ コンポーネント BEM スタイルの唯一ソース + theme/common/*.scss トークン 58 セットのコンポーネントスタイル
src/locales/ 国際化(LhLocale は純イベントエミッター)+ 6 言語の骨組み —
src/constants/ src/types/ src/utils/ 定数 / 型 / 純ユーティリティ(createNamespace を含む) —

カウントの基準:core は 56 個のコンポーネントディレクトリ、styles は 58 セット—— layout / tree-select はスタイルソースを持ちますがロジックはすべて UI 層にあります (レイアウトコンテナ、ツリーセレクターのフレームワーク側グルー)。config はスタイル ディレクトリでは config-provider という名前です。詳しくはパッケージ構成。

  1. フレームワーク依存ゼロ:src/ 内で import 'vue' | 'react' | '@dcloudio/*' を禁止。 CI grep ゲートが監視します。本パッケージは external: [] で、完全ゼロ依存バンドルです。
  2. スタイル単一ソース:styles/ はファミリー全体のコンポーネント BEM スタイルの唯一ソースで、 どの UI ライブラリもコンポーネント scss のコピーをローカルに持ってはなりません。クロス フレームワークのトランジションクラス名の差異は transition.scss の 3 つの mixin が統合します。
  3. 単体テストは唯一のコピー:core の単体テストは本リポジトリの tests/unit/ にのみ存在し、 3 つのライブラリはこの結果を共有して、重複コピーしません。
  4. リアクティビティは UI 層に帰属:core はデータを生み出すだけ。購読とリアクティブな配線は 各 UI ライブラリの仕事です。そのため LhLocale は純 emitter であり、version の自動増分に よって各端がそれぞれの仕組みで再レンダリングします。
  5. 明暗は同じ品質:すべてのコンポーネントは明色と暗色の両方をデフォルトでサポートします。 コンポーネントは var(--lh-*, fallback) でのみトークンを消費でき、暗色の完全性は verify:styles の第 7 項が監視します。
  • UI ライブラリではない:本パッケージは何もレンダリングせず、コンポーネントランタイムも ありません。すぐ使えるコンポーネントが必要なら、@lh-ui/vue3 / @lh-ui/vue2 などの 各端ライブラリをインストールしてください。
  • どの UI ライブラリにもフレームワークにも依存しない:最下層であり、依存される側で、 依存する側ではありません。
  • デプロイ段階は担わない:テーマカスタマイズが生み出すのは <style> テキストと CSS 変数で、 DOM への注入方法は各端の ConfigProvider が決めます。
lh-ui/
├── lh-ui-share/ ← 本リポジトリ:フレームワーク非依存共有層(core / theme / styles / locales)
├── lh-ui-plus/ Vue3 端(全体を side-effect でスタイル注入)
├── lh-ui-vue2/ Vue2 端(オンデマンドで theme.css + style/<name> を読み込み)
├── lh-ui-react/ React 端
├── lh-ui-uniapp/ uniapp 端
├── docs/ ファミリードキュメントサイト(別リポジトリ)
└── native/ ネイティブ端(android / ios / harmony、applicationId は top.lhgb.*)

リリース順はハード制約です:share が先にリリースし、UI ライブラリが続きます。share を変更 → changeset を書く → リリース → 各ライブラリが pnpm up @lh-ui/share でリグレッション。

Copyright © 2024-2026 FengMo WenXue