Skip to content
fandhe-frontendcore v0.4.3
GitHub

Splitter

fandhe-frontend-pre-styled-ui の splitter mod が提供するスタイル済み Splitter 部品です。

複数パネルの境界をドラッグでリサイズできる部品です。panel は --fandhe-splitter-size custom property を通じてのみ動的な flex-basis を伝え、resize_trigger は role="separator" + aria-controls を固定付与します。状態機械(Splitter)は headless-ui 側にあり、pre-styled-ui からは再エクスポートしません。

関連 API: fandhe-frontend-pre-styled-ui API / fandhe-frontend-headless-ui API

Demo

パネルサイズ状態機械 Splitter の静的掲示(水平 2 パネル・垂直 3 パネル)。resize-trigger は role="separator" + aria-valuemin/max/now(先行パネルのサイズ %)+ aria-controls を持ちます(ドラッグ・キーボード操作は wasm 層のスコープ外)。

Panel A
Panel B
Top
Middle
Bottom

With handle(resize_trigger_indicator を渡した合成パターン)

Panel A
Panel B

Nested(panel の children に別の splitter::root を渡す合成パターン)

One
Two
Three

Features

  • panel は --fandhe-splitter-size custom property を通じてのみ動的な flex-basis を伝える唯一のパーツ(crates/pre-styled-ui/src/splitter.rs:688-697)
  • resize_trigger は role="separator" + aria-controls を固定付与する(splitter.rs:930-935)
  • panel_index が範囲外の場合は style 属性自体を省略する fail-closed 動作(splitter.rs:694-697, 908-913)
  • resize_trigger_indicator は resize_trigger の children として渡したときのみ描画される(shadcn/ui withHandle prop 相当の合成パターン、イシュー #2038)
  • resize_trigger は ::after で視覚上の太さを変えずに当たり判定のみを外側へ拡張する(data-orientation で拡張方向を切り替え、--fandhe-splitter-hit-extension で拡張幅を上書き可、イシュー #2202)

Anatomy

root
  panel
  resize-trigger
    resize-trigger-indicator

API Reference

Arguments

NameTypeDefaultDescription
disabledboolfalseroot/resize_trigger の無効化状態(splitter.rs:672-686)。

Data Attributes

PartAttributeObserved Values
paneldata-idshowcase-splitter-h-panel-a, showcase-splitter-h-panel-b, showcase-splitter-nested-inner-panel-a, showcase-splitter-nested-inner-panel-b, showcase-splitter-nested-outer-panel-a, showcase-splitter-nested-outer-panel-b, showcase-splitter-v-panel-0, showcase-splitter-v-panel-1, showcase-splitter-v-panel-2, showcase-splitter-wh-panel-a, showcase-splitter-wh-panel-b
paneldata-index0, 1, 2
paneldata-orientationhorizontal, vertical
resize-triggerdata-idshowcase-splitter-h-panel-a:showcase-splitter-h-panel-b, showcase-splitter-nested-inner-panel-a:showcase-splitter-nested-inner-panel-b, showcase-splitter-nested-outer-panel-a:showcase-splitter-nested-outer-panel-b, showcase-splitter-v-panel-0:showcase-splitter-v-panel-1, showcase-splitter-v-panel-1:showcase-splitter-v-panel-2, showcase-splitter-wh-panel-a:showcase-splitter-wh-panel-b
resize-triggerdata-orientationhorizontal, vertical
rootdata-orientationhorizontal, vertical

CSS Variables

VariableDefault
--fandhe-splitter-hit-extension0.25rem
--fandhe-splitter-hit-inset—
--fandhe-splitter-panel-paddingvar(--fandhe-space-3)
--fandhe-splitter-root-disabled-hover-bgvar(--fandhe-palette-emphasized, var(--fandhe-color-accent-emphasized))
--fandhe-splitter-sizeauto
--fandhe-splitter-trigger-size0.25rem

Examples

Two panels

50/50 の 2 パネルと resize_trigger 1 個の例です。

A
B

With handle

resize_trigger_indicator を渡すとハンドル中央にグリップ表現が付きます。

A
B

Nested

panel の children に別の splitter::root を渡すと入れ子構成になります。

One
Two
Three

Accessibility

WAI-ARIA

AttributeDescription
role="separator" + aria-controls(resize_trigger)リサイズハンドルが操作対象パネルを aria-controls で指し示す(splitter.rs:930-935)。