React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion. - yamada-ui/yamada-ui
styled
関数
Yamada UIでは、ネイティブのHTML要素にこの関数を適用することによってスタイル付きコンポーネントを生成している。
この関数の中身はざっくりこんな感じ。
1. shouldForwardPropの設定
引数に渡された要素について、同時に引数として渡されたdisableStyleProp
をベースにして特定のpropsをその要素に設定するかどうかを判定する。
styledOptions.shouldForwardProp
は、その判定結果を保持する。
2. スタイルオブジェクトの生成
toCSSObject
関数を使用して、スタイルオブジェクトを生成している。この時、スタイルオブジェクトはbaseStyle
やdisableStyleProp
を考慮して生成される。
3. Emotionのstyled関数を使用してスタイル付きコンポーネントを作成
ここは、Emotionのstyled
関数を使用してスタイル付きコンポーネントを作ってるだけ。
4. カラーモードを適用するためのラッパーコンポーネントを作成
useColorMode
フックを使用してカラーモードを取得し、data-mode
属性としてコンポーネントに適用してる。
toCSSObject
関数
スタイルオブジェクトを生成する関数。
styled
関数の中身の詳細
CursorのChatで聞いた。正直いまいちピンときてないので後で立ち戻りたい。
- プロパティの抽出:
propsからtheme、css、__css、sxなどのスタイル関連プロパティを抽出します。
- スタイルプロパティのフィルタリング:
filterObject関数を使用して、restからスタイルプロパティをフィルタリングし、propsCSSを生成し> ます。
- ベーススタイルの評価:
runIfFunc関数を使用して、baseStyleを評価し、baseCSSを生成します。
- 最終的なCSSオブジェクトの生成:
assignAfter関数を使用して、__css、baseCSS、propsCSS、sxを結合し、css関数を使用して最終的> なCSSオブジェクトを生成します。
- カスタムCSSの適用:
customCSSが存在する場合、最終的なCSSオブジェクトとカスタムCSSを配列として返します。存在しない> 場合は、最終的なCSSオブジェクトのみを返します。
このようにして、toCSSObject関数は、与えられたプロパティとオプションに基づいて、最終的なスタイルオブジェクトを生成します。