Skies.ui
元件 (Components)

Sidebar 側欄

Skies.ui Sidebar:導航側欄,展開與 icon-only、Context 狀態;Root、Group、Item、Trigger 說明。

Sidebar 側欄

Sidebar 是複合元件,提供完整的應用程式左側導航結構。內建 展開 / 收合(icon-only) 兩種模式,狀態由 Context 統一管理,並可受控或非受控使用。

基本用法

主要內容區域
import {
  SidebarRoot,
  SidebarHeader,
  SidebarContent,
  SidebarGroup,
  SidebarGroupLabel,
  SidebarItem,
} from "@skies-ui/ui";

export function AppLayout({ children }) {
  return (
    <div className="flex h-screen">
      <SidebarRoot>
        <SidebarHeader>
          <span className="font-semibold text-sm">Sky UI</span>
        </SidebarHeader>
        <SidebarContent>
          <SidebarGroup>
            <SidebarGroupLabel>主選單</SidebarGroupLabel>
            <SidebarItem active icon={<HomeIcon />} tooltip="總覽">
              總覽
            </SidebarItem>
            <SidebarItem icon={<UsersIcon />} tooltip="使用者">
              使用者
            </SidebarItem>
          </SidebarGroup>
        </SidebarContent>
      </SidebarRoot>
      <main className="flex-1">{children}</main>
    </div>
  );
}

收合模式

點擊 SidebarTrigger 可切換收合,收合後只顯示圖示。設定 tooltip prop 讓 icon-only 模式仍能提示用途(title 屬性)。

主要內容區域
import { SidebarRoot, SidebarHeader, SidebarTrigger } from "@skies-ui/ui";

<SidebarRoot>
  <SidebarHeader>
    <span className="truncate text-sm font-semibold group-data-[collapsed=true]/sidebar:hidden">Sky UI</span>
    <SidebarTrigger className="ms-auto group-data-[collapsed=true]/sidebar:ms-0" />
  </SidebarHeader>
  {/* ... */}
</SidebarRoot>

受控模式

透過 collapsed + onCollapsedChange 將狀態提升到外部:

"use client";

import { useState } from "react";
import { SidebarRoot } from "@skies-ui/ui";

export function ControlledSidebar() {
  const [collapsed, setCollapsed] = useState(false);

  return (
    <SidebarRoot collapsed={collapsed} onCollapsedChange={setCollapsed}>
      {/* ... */}
    </SidebarRoot>
  );
}

useSidebar hook

子元件可透過 useSidebar() 取得目前狀態:

"use client";

import { useSidebar } from "@skies-ui/ui";

export function MyCustomItem() {
  const { collapsed, setCollapsed } = useSidebar();
  return <span>{collapsed ? "收合中" : "展開中"}</span>;
}

useSidebar 必須在 SidebarRoot 以內使用,否則會拋出錯誤。

將次要操作(登出、設定連結等)放進 Sidebar.Footer

import { SidebarRoot, SidebarHeader, SidebarContent, SidebarFooter, SidebarItem } from "@skies-ui/ui";

<SidebarRoot>
  <SidebarHeader>...</SidebarHeader>
  <SidebarContent>...</SidebarContent>
  <SidebarFooter>
    <SidebarItem icon={<LogOutIcon />} tooltip="登出">
      登出
    </SidebarItem>
  </SidebarFooter>
</SidebarRoot>

API 摘要

Sidebar.Root

Prop型別說明
defaultCollapsedboolean非受控預設值,預設 false
collapsedboolean受控模式下的目前狀態
onCollapsedChange(v: boolean) => void狀態改變回呼
classNamestring額外 class(會覆寫寬度等)

Sidebar.Item

Prop型別說明
iconReactNode顯示在文字左側的圖示(建議 16×16)
activeboolean啟用高亮樣式
tooltipstring收合時作為 title / aria-label

Sidebar.Trigger

Prop型別說明
collapseIconReactNode展開狀態下的圖示(預設 ChevronLeft)
expandIconReactNode收合狀態下的圖示(預設 ChevronRight)

所有子元件均支援 className 與對應 HTML 元素的原生屬性。

On this page