{"version":3,"sources":["../src/components/Accordation/Accordation.tsx"],"sourcesContent":["import {\n  forwardRef,\n  HTMLAttributes,\n  KeyboardEvent,\n  ReactNode,\n  useId,\n  useState,\n  useEffect,\n} from 'react';\nimport { CardBase } from '../Card/Card';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { cn } from '../../utils/utils';\n\ninterface CardAccordationProps extends HTMLAttributes<HTMLDivElement> {\n  trigger: ReactNode;\n  children: ReactNode;\n  defaultExpanded?: boolean;\n  expanded?: boolean;\n  onToggleExpanded?: (isExpanded: boolean) => void;\n  value?: string;\n  disabled?: boolean;\n  /** Additional class for the trigger button */\n  triggerClassName?: string;\n  /** Additional class for the content wrapper */\n  contentClassName?: string;\n}\n\nconst CardAccordation = forwardRef<HTMLDivElement, CardAccordationProps>(\n  (\n    {\n      trigger,\n      children,\n      className,\n      defaultExpanded = false,\n      expanded: controlledExpanded,\n      onToggleExpanded,\n      value,\n      disabled = false,\n      triggerClassName,\n      contentClassName,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n    const generatedId = useId();\n\n    // Use value as ID base for better semantics, fallback to generated ID\n    const contentId = value ? `accordion-content-${value}` : generatedId;\n    const headerId = value\n      ? `accordion-header-${value}`\n      : `${generatedId}-header`;\n\n    // Determine if component is controlled\n    const isControlled = controlledExpanded !== undefined;\n    const isExpanded = isControlled ? controlledExpanded : internalExpanded;\n\n    // Sync internal state when controlled value changes\n    useEffect(() => {\n      if (isControlled) {\n        setInternalExpanded(controlledExpanded);\n      }\n    }, [isControlled, controlledExpanded]);\n\n    const handleToggle = () => {\n      if (disabled) return;\n\n      const newExpanded = !isExpanded;\n\n      if (!isControlled) {\n        setInternalExpanded(newExpanded);\n      }\n\n      onToggleExpanded?.(newExpanded);\n    };\n\n    const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n      if (disabled) return;\n\n      if (event.key === 'Enter' || event.key === ' ') {\n        event.preventDefault();\n        handleToggle();\n      }\n    };\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"vertical\"\n        padding=\"none\"\n        minHeight=\"none\"\n        className={cn('overflow-hidden', className)}\n        {...props}\n      >\n        {/* Clickable header */}\n        <button\n          id={headerId}\n          type=\"button\"\n          onClick={handleToggle}\n          onKeyDown={handleKeyDown}\n          disabled={disabled}\n          className={cn(\n            'w-full cursor-pointer not-aria-expanded:rounded-xl aria-expanded:rounded-t-xl flex items-center justify-between gap-3 text-left transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-950 focus-visible:ring-inset pl-2 pr-10',\n            disabled && 'cursor-not-allowed text-text-400',\n            triggerClassName\n          )}\n          aria-expanded={isExpanded}\n          aria-controls={contentId}\n          aria-disabled={disabled}\n          data-value={value}\n        >\n          {trigger}\n\n          <CaretRightIcon\n            size={20}\n            className={cn(\n              'transition-transform duration-200 flex-shrink-0',\n              disabled ? 'text-gray-400' : 'text-text-700',\n              isExpanded ? 'rotate-90' : 'rotate-0'\n            )}\n            data-testid=\"accordion-caret\"\n          />\n        </button>\n\n        {/* Expandable content */}\n        <section\n          id={contentId}\n          aria-labelledby={headerId}\n          aria-hidden={!isExpanded}\n          className={cn(\n            'transition-all duration-300 ease-in-out overflow-hidden',\n            isExpanded ? 'opacity-100' : 'max-h-0 opacity-0'\n          )}\n          data-testid=\"accordion-content\"\n          data-value={value}\n        >\n          <div className={cn('p-4 pt-0', contentClassName)}>{children}</div>\n        </section>\n      </CardBase>\n    );\n  }\n);\n\nCardAccordation.displayName = 'CardAccordation';\n\nexport { CardAccordation };\nexport type { CardAccordationProps };\n"],"mappings":";;;;;;;;AAAA;AAAA,EACE;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,sBAAsB;AAqFvB,SAkBE,KAlBF;AApER,IAAM,kBAAkB;AAAA,EACtB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,eAAe;AACxE,UAAM,cAAc,MAAM;AAG1B,UAAM,YAAY,QAAQ,qBAAqB,KAAK,KAAK;AACzD,UAAM,WAAW,QACb,oBAAoB,KAAK,KACzB,GAAG,WAAW;AAGlB,UAAM,eAAe,uBAAuB;AAC5C,UAAM,aAAa,eAAe,qBAAqB;AAGvD,cAAU,MAAM;AACd,UAAI,cAAc;AAChB,4BAAoB,kBAAkB;AAAA,MACxC;AAAA,IACF,GAAG,CAAC,cAAc,kBAAkB,CAAC;AAErC,UAAM,eAAe,MAAM;AACzB,UAAI,SAAU;AAEd,YAAM,cAAc,CAAC;AAErB,UAAI,CAAC,cAAc;AACjB,4BAAoB,WAAW;AAAA,MACjC;AAEA,yBAAmB,WAAW;AAAA,IAChC;AAEA,UAAM,gBAAgB,CAAC,UAA4C;AACjE,UAAI,SAAU;AAEd,UAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,cAAM,eAAe;AACrB,qBAAa;AAAA,MACf;AAAA,IACF;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,QAAO;AAAA,QACP,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,WAAW,GAAG,mBAAmB,SAAS;AAAA,QACzC,GAAG;AAAA,QAGJ;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,cACJ,MAAK;AAAA,cACL,SAAS;AAAA,cACT,WAAW;AAAA,cACX;AAAA,cACA,WAAW;AAAA,gBACT;AAAA,gBACA,YAAY;AAAA,gBACZ;AAAA,cACF;AAAA,cACA,iBAAe;AAAA,cACf,iBAAe;AAAA,cACf,iBAAe;AAAA,cACf,cAAY;AAAA,cAEX;AAAA;AAAA,gBAED;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM;AAAA,oBACN,WAAW;AAAA,sBACT;AAAA,sBACA,WAAW,kBAAkB;AAAA,sBAC7B,aAAa,cAAc;AAAA,oBAC7B;AAAA,oBACA,eAAY;AAAA;AAAA,gBACd;AAAA;AAAA;AAAA,UACF;AAAA,UAGA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,cACJ,mBAAiB;AAAA,cACjB,eAAa,CAAC;AAAA,cACd,WAAW;AAAA,gBACT;AAAA,gBACA,aAAa,gBAAgB;AAAA,cAC/B;AAAA,cACA,eAAY;AAAA,cACZ,cAAY;AAAA,cAEZ,8BAAC,SAAI,WAAW,GAAG,YAAY,gBAAgB,GAAI,UAAS;AAAA;AAAA,UAC9D;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,gBAAgB,cAAc;","names":[]}