{"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,KAAK;;;;;AAM5F,MAAa,yBAAyB,cAA2C,KAAK;AAEtF,MAAa,8BAA8B,IAAI,0BAA0B;AACzE,MAAa,2BAA2B,IAAI,uBAAuB;AAenE,MAAa,6BAA6B,MACvC,EACC,UACA,cACA,WACA,QACA,SACA,aACA,cACA,sCACI;AAqBJ,QAAO,oBAAC,2BAAD;EAA2B,OApBpB,eACL;GACL;GACA;GACA;GACA,gBAAgB,YAAY,QAAQ;GACpC;GACA,oBAAoB,QAClB,aAAa,CAAC,SAAS,IAAI,EAAE,kCAAkC,UAAU,IAAI;GAChF,GACD;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAE2C;EAAG;EAAqC,CAAA;EAEzF;AAED,2BAA2B,cAAc"}