{"version":3,"file":"context.mjs","names":[],"sources":["../../src/Accordion/context.tsx"],"sourcesContent":["import type { Key, ReactNode } from 'react';\nimport { createContext, memo, use, useMemo } from 'react';\n\ninterface AccordionItemStateValue {\n  isOpen: boolean;\n  isOpenKey: (key: Key) => boolean;\n  itemKey: Key;\n  onToggle: () => void;\n  onToggleKey: (key: Key) => void;\n  onToggleNestedKey: (key: Key) => void;\n}\n\ninterface AccordionConfigValue {\n  disableAnimation?: boolean;\n  hideIndicator?: boolean;\n  indicatorPlacement?: 'end' | 'start';\n  keepContentMounted?: boolean;\n  motionProps?: any;\n  showDivider?: boolean;\n  variant?: 'filled' | 'outlined' | 'borderless';\n}\n\n/**\n * Per-item context: each AccordionItem gets its own provider, so a toggle\n * only invalidates the value seen by that single item. Sibling items keep\n * the same context value identity and skip re-render.\n */\nexport const AccordionItemStateContext = createContext<AccordionItemStateValue | null>(null);\n\n/**\n * Static config shared by all items. Identity changes only when the user\n * changes config props on <Accordion>, which is rare.\n */\nexport const AccordionConfigContext = createContext<AccordionConfigValue | null>(null);\n\nexport const useAccordionItemState = () => use(AccordionItemStateContext);\nexport const useAccordionConfig = () => use(AccordionConfigContext);\n\ninterface AccordionItemStateProviderProps {\n  children: ReactNode;\n  // Used only to refresh the memoized context for wrapper children when\n  // controlled expanded keys change; direct children use `isOpen`.\n  expandedKeys?: Key[];\n  isOpen: boolean;\n  isOpenKey: (key: Key) => boolean;\n  itemKey: Key;\n  onToggleKey: (key: Key) => void;\n  onToggleKeys: (keys: Key[], preferredKey: Key) => void;\n  preferProviderKeyForNestedItems: boolean;\n}\n\nexport const AccordionItemStateProvider = memo<AccordionItemStateProviderProps>(\n  ({\n    children,\n    expandedKeys,\n    isOpenKey,\n    isOpen,\n    itemKey,\n    onToggleKey,\n    onToggleKeys,\n    preferProviderKeyForNestedItems,\n  }) => {\n    const value = useMemo(\n      () => ({\n        isOpenKey,\n        isOpen,\n        itemKey,\n        onToggle: () => onToggleKey(itemKey),\n        onToggleKey,\n        onToggleNestedKey: (key: Key) =>\n          onToggleKeys([itemKey, key], preferProviderKeyForNestedItems ? itemKey : key),\n      }),\n      [\n        expandedKeys,\n        isOpenKey,\n        isOpen,\n        itemKey,\n        onToggleKey,\n        onToggleKeys,\n        preferProviderKeyForNestedItems,\n      ],\n    );\n    return <AccordionItemStateContext value={value}>{children}</AccordionItemStateContext>;\n  },\n);\n\nAccordionItemStateProvider.displayName = 'AccordionItemStateProvider';\n"],"mappings":";;;;;;;;AA2BA,MAAa,4BAA4B,cAA8C,IAAI;;;;;AAM3F,MAAa,yBAAyB,cAA2C,IAAI;AAErF,MAAa,8BAA8B,IAAI,yBAAyB;AACxE,MAAa,2BAA2B,IAAI,sBAAsB;AAelE,MAAa,6BAA6B,MACvC,EACC,UACA,cACA,WACA,QACA,SACA,aACA,cACA,sCACI;CACJ,MAAM,QAAQ,eACL;EACL;EACA;EACA;EACA,gBAAgB,YAAY,OAAO;EACnC;EACA,oBAAoB,QAClB,aAAa,CAAC,SAAS,GAAG,GAAG,kCAAkC,UAAU,GAAG;CAChF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CACA,OAAO,oBAAC,2BAAD;EAAkC;EAAQ;CAAoC,CAAA;AACvF,CACF;AAEA,2BAA2B,cAAc"}