Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Panda CSS と Ark UI ではじめる個人開発

Panda CSS と Ark UI ではじめる個人開発

https://aegis.connpass.com/event/317419/ の登壇資料です!

ikuma-t

May 24, 2024
Tweet

More Decks by ikuma-t

Other Decks in Programming

Transcript

  1. Panda CSS Chakra UI が開発している ゼロランタイム CSS in JS ライブラリ

    https://panda-css.com/ 本物のパンダは和歌山でみるのがおすすめ
  2. Panda CSS の 2 つの側面 Styling engine Token generator sea.80

    text-button-normal 個人で使う分には まずスタイリング(左側)できればOK
  3. Panda CSS のスタイリング記法 1. Object Literal(Atomic Styles / Shorthand Properties)

    2. Template Literals(`css` / `styled`) 3. Patterns 4. Recipes 5. Slot Recipes Panda CSSでスタイリングを行うための記法は以下のとおり。
  4. 基本は Object Literal(Atomic Style)を使う • Object Literal は Panda CSS

    の推奨。過不足なく使える。 ◦ Utilitiesは短縮してかけるが、CSS-in-JS自体が補完を行えるのでそこまで恩恵を感じ ない。通常のCSSプロパティを使った方が移行容易性・保守性は良さそう。 ◦ Template Literal は一部生成されない内容がある。 • ある程度利用パターンが見えている場合(共通のコンポーネント)には、適 宜 Recipes / Slot Recipes も使える。 • Patterns は無秩序にならなそうなら便利に使える。
  5. • panda.config.ts のオプションを指定すると、不要なプロパティや値を生成 しないことができる(補完にも出なくなる)。 • shorthands: ショートハンドプロパティの生成を制限 ◦ 例)backgroundColor は使えるが、bg

    が使えなくなる。 • strictPropertyValues:一部のCSSプロパティについて、無効な値の設定 をできないようにする ◦ 例)display: “hoge” はエラー。display: “grid”や”flex”はOK。 使わないプロパティや値 / 無効な値に対する規約
  6. やりすぎな気もするけど、patterns も消せる • panda css には Preset と呼ばれる設定集がある。 • デフォルトでは次の

    2 種類の Preset が適用されている。 ◦ @pandacss/preset-base:pattern や 擬似要素を定義している。 ◦ @pandacss/preset-panda: デフォルトのカラーパレットなどを定義している。 • Preset は npm として提供されており、またインターフェースとして Config のオブジェクトを返すだけなので、patterns を省いたオブジェクトで Config を再構成すると、patterns が生成されなくなる。 ◦ https://panda-css.com/docs/customization/presets#which-panda-presets-will -be-included-
  7. 余談)Zag 用語 • Zag:方向を急激に変えること。Zag.js のアプローチの革新性を示してい る。 • zag it!:「Zag.jsでコンポーネント作ろうぜ!」 •

    zagger:Zag.js を使っている人 • zagadat:Zag.js を使ったときの感覚 • zag nation:Zag.js のコミュニティ
  8. Zag.jsをざっくり掴む - State Machine - コンポーネントの状態を State Machine で管理するライブラリ Dialogの場合(簡略版)

    closed open open close 薄暗い背景を表示 薄暗い背景を非表示 data-state=”open” data-state=”closed” (共通)適切な aria 属性を付与 状態に応じたdata属性の付与 アクセシビリティの考慮 状態に応じたDOMの変更
  9. Zag.js からArk UI へ State Machine Connect Custom Hook HTML

    Dialog.Title Dialog.Content Dialog.Description Dialog.Trigger Dialog.CloseTrigger Dialog.Backdrop Dialog
  10. 補足:Atomic Slot Recipes と Config Slot Recipes • slot recipesを構成する方法には、sva(Atomic

    Slot Recipes)と、 defineSlotRecipes(Config Slot Recipes)がある。 • 前者のCSSはJust in timeで生成されるため、パフォーマンス的には後者 のほうが優れている。 • デザインシステムなどの共通化が多くある場合は後者を利用する。このと き、Storybookですべてのパターンが生成されないので注意が必要 (staticCSSというオプションで回避できる。)
  11. Factory を使って共通 コンポーネントを作る • Ark UI には Button や Input

    といったコンポーネ ントはない。 • factory を使うと、 asChild が付与されたコ ンポーネントを作れる