{"version":3,"sources":["../src/collapsible/index.tsx"],"names":["useTheme","useState","jsxs","spacing","jsx"],"mappings":"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","file":"collapsible.cjs","sourcesContent":["/**\n * Collapsible (web). A titled region that expands and collapses — the\n * building block for accordions and expandable resume sections. Height\n * animates via the grid-template-rows 0fr→1fr technique (real height,\n * no magic max-height guess), and the chevron rotates.\n *\n *   <Collapsible title=\"Experience\" defaultOpen>…</Collapsible>\n *   <Collapsible title=\"Advanced\" open={o} onOpenChange={setO}>…</Collapsible>\n */\nimport { useState, type CSSProperties, type ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { spacing } from \"@plyxui/core\";\n\nexport interface CollapsibleProps {\n  title: ReactNode;\n  /** Optional right-aligned adornment in the header (a count, a badge). */\n  aside?: ReactNode;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  disabled?: boolean;\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n}\n\nexport function Collapsible({\n  title,\n  aside,\n  open,\n  defaultOpen,\n  onOpenChange,\n  disabled,\n  className,\n  style,\n  children,\n}: CollapsibleProps) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<boolean>(defaultOpen ?? false);\n  const isControlled = open !== undefined;\n  const isOpen = isControlled ? open : internal;\n\n  const toggle = () => {\n    if (disabled) return;\n    if (!isControlled) setInternal(!isOpen);\n    onOpenChange?.(!isOpen);\n  };\n\n  return (\n    <div className={className} style={style}>\n      <button\n        type=\"button\"\n        aria-expanded={isOpen}\n        disabled={disabled}\n        onClick={toggle}\n        style={{\n          width: \"100%\",\n          display: \"flex\",\n          alignItems: \"center\",\n          gap: spacing[2],\n          padding: `${spacing[3]}px 0`,\n          background: \"transparent\",\n          border: \"none\",\n          cursor: disabled ? \"default\" : \"pointer\",\n          font: \"inherit\",\n          fontSize: 14,\n          fontWeight: 600,\n          color: colors.text,\n          textAlign: \"left\",\n        }}\n      >\n        <span\n          aria-hidden\n          style={{\n            display: \"inline-block\",\n            width: 10,\n            height: 10,\n            borderRight: `1.5px solid ${colors.textMuted}`,\n            borderBottom: `1.5px solid ${colors.textMuted}`,\n            transform: isOpen ? \"rotate(45deg)\" : \"rotate(-45deg)\",\n            transformOrigin: \"center\",\n            transition: \"transform 0.2s cubic-bezier(0.23,1,0.32,1)\",\n            marginRight: 2,\n          }}\n        />\n        <span style={{ flex: 1 }}>{title}</span>\n        {aside}\n      </button>\n      <div\n        style={{\n          display: \"grid\",\n          gridTemplateRows: isOpen ? \"1fr\" : \"0fr\",\n          transition: \"grid-template-rows 0.26s cubic-bezier(0.23,1,0.32,1)\",\n        }}\n      >\n        <div style={{ overflow: \"hidden\" }}>\n          <div style={{ paddingBottom: isOpen ? spacing[3] : 0 }}>{children}</div>\n        </div>\n      </div>\n    </div>\n  );\n}\n"]}