ข้ามไปเนื้อหา
WhereUI

ค้นหาในเอกสาร

ค้นหาชื่อ component หรือหน้าเอกสาร

Accordion

จาก shadcn

แผ่นพับเปิด-ปิดแสดงเนื้อหายาวเป็นหัวข้อ ใช้ทำคำถามที่พบบ่อยหรือกลุ่มเงื่อนไขเอกสาร เปิดหลายหัวข้อพร้อมกันได้

ผู้กู้ต้องเป็นพนักงานที่ผ่านการทดลองงานแล้ว และมีผู้อนุมัติระดับหัวหน้าแผนกขึ้นไป เช่น น้ำใจ หรือ ปี่

คิดตามอัตราของกองทุน ไม่เกินร้อยละ 3 ต่อปี คิดจากยอดคงเหลือจริงทุกสิ้นเดือน

ติดตั้ง

Terminal
pnpm dlx shadcn@latest add @whereui/accordion

ต้องผูก registry และติดตั้ง @whereui/theme นำหน้าเสมอเมื่อติดตั้งครั้งแรก

การใช้งาน

import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"<Accordion defaultValue={["เงื่อนไข"]}>  <AccordionItem value="เงื่อนไข">    <AccordionTrigger>เงื่อนไขการกู้</AccordionTrigger>    <AccordionContent>รายละเอียด…</AccordionContent>  </AccordionItem></Accordion>

ตัวอย่างเพิ่มเติม

ปิดใช้งาน

ชื่อ-สกุล ตำแหน่ง และหน่วยงานปัจจุบัน แก้ไขได้ด้วยตนเอง

ข้อควรรู้

  • ค่า value ของแต่ละหัวข้อต้องไม่ซ้ำกันในชุดเดียว
  • เปิดหลายหัวข้อพร้อมกันได้โดยค่าเริ่มต้น ส่ง defaultValue เป็นอาร์เรย์ได้หลายค่า

ซอร์สโค้ด

components/ui/accordion.tsx
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion"import { cn } from "cn"import { ChevronDownIcon, ChevronUpIcon } from "lucide-react"function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {  return (    <AccordionPrimitive.Root      data-slot="accordion"      className={cn("flex w-full flex-col", className)}      {...props}    />  )}function AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {  return (    <AccordionPrimitive.Item      data-slot="accordion-item"      className={cn("not-last:border-b", className)}      {...props}    />  )}function AccordionTrigger({  className,  children,  ...props}: AccordionPrimitive.Trigger.Props) {  return (    <AccordionPrimitive.Header className="flex">      <AccordionPrimitive.Trigger        data-slot="accordion-trigger"        className={cn(          "group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground",          className        )}        {...props}      >        {children}        <ChevronDownIcon data-slot="accordion-trigger-icon" className="pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden" />        <ChevronUpIcon data-slot="accordion-trigger-icon" className="pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline" />      </AccordionPrimitive.Trigger>    </AccordionPrimitive.Header>  )}function AccordionContent({  className,  children,  ...props}: AccordionPrimitive.Panel.Props) {  return (    <AccordionPrimitive.Panel      data-slot="accordion-content"      className="overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up"      {...props}    >      <div        className={cn(          "h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",          className        )}      >        {children}      </div>    </AccordionPrimitive.Panel>  )}export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }