{"version":3,"sources":["../../src/components/Expandable.tsx"],"sourcesContent":["import type { PropsWithChildren, ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport clsx from 'clsx'\n\ntype IconBuilder = (expanded: boolean) => ReactNode\n\nexport type ExpandableProps = PropsWithChildren<{\n  label: ReactNode,\n  icon?: IconBuilder,\n  initialExpansion?: boolean,\n  /**\n   * Whether the expansion should only happen when the header is clicked or on the entire component\n   */\n  clickOnlyOnHeader?: boolean,\n  className?: string,\n  headerClassName?: string,\n}>\n\nconst DefaultIcon: IconBuilder = (expanded) => expanded ?\n  (<ChevronUp size={16} className=\"min-w-[16px]\"/>)\n  : (<ChevronDown size={16} className=\"min-w-[16px]\"/>)\n\n/**\n * A Component for showing and hiding content\n */\nexport const Expandable = forwardRef<HTMLDivElement, ExpandableProps>(({\n                                                                         children,\n                                                                         label,\n                                                                         icon,\n                                                                         initialExpansion = false,\n                                                                         clickOnlyOnHeader = true,\n                                                                         className = '',\n                                                                         headerClassName = ''\n                                                                       }, ref) => {\n  const [isExpanded, setIsExpanded] = useState(initialExpansion)\n  icon ??= DefaultIcon\n\n  return (\n    <div\n      ref={ref}\n      className={clsx('col bg-surface text-on-surface group rounded-lg shadow-sm', { 'cursor-pointer': !clickOnlyOnHeader }, className)}\n      onClick={() => !clickOnlyOnHeader && setIsExpanded(!isExpanded)}\n    >\n      <button\n        className={clsx('btn-md rounded-lg justify-between items-center bg-surface text-on-surface', { 'group-hover:brightness-95': !isExpanded }, headerClassName)}\n        onClick={() => clickOnlyOnHeader && setIsExpanded(!isExpanded)}\n      >\n        {label}\n        {icon(isExpanded)}\n      </button>\n      {isExpanded && (\n        <div className=\"col\">\n          {children}\n        </div>\n      )}\n    </div>\n  )\n})\n\nExpandable.displayName = 'Expandable'\n"],"mappings":";AACA,SAAS,YAAY,gBAAgB;AACrC,SAAS,aAAa,iBAAiB;AACvC,OAAO,UAAU;AAiBd,cAwBG,YAxBH;AADH,IAAM,cAA2B,CAAC,aAAa,WAC5C,oBAAC,aAAU,MAAM,IAAI,WAAU,gBAAc,IAC3C,oBAAC,eAAY,MAAM,IAAI,WAAU,gBAAc;AAK7C,IAAM,aAAa,WAA4C,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,kBAAkB;AACpB,GAAG,QAAQ;AAChF,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,gBAAgB;AAC7D,WAAS;AAET,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,KAAK,6DAA6D,EAAE,kBAAkB,CAAC,kBAAkB,GAAG,SAAS;AAAA,MAChI,SAAS,MAAM,CAAC,qBAAqB,cAAc,CAAC,UAAU;AAAA,MAE9D;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,KAAK,6EAA6E,EAAE,6BAA6B,CAAC,WAAW,GAAG,eAAe;AAAA,YAC1J,SAAS,MAAM,qBAAqB,cAAc,CAAC,UAAU;AAAA,YAE5D;AAAA;AAAA,cACA,KAAK,UAAU;AAAA;AAAA;AAAA,QAClB;AAAA,QACC,cACC,oBAAC,SAAI,WAAU,OACZ,UACH;AAAA;AAAA;AAAA,EAEJ;AAEJ,CAAC;AAED,WAAW,cAAc;","names":[]}