{"version":3,"sources":["../src/collapsible/index.native.tsx"],"names":["Platform","UIManager","useTheme","useState","LayoutAnimation","jsxs","View","Pressable","spacing","jsx","Text"],"mappings":";;;;;;;;;AAkBA,IAAIA,oBAAA,CAAS,EAAA,KAAO,SAAA,IAAaC,qBAAA,CAAU,qCAAA,EAAuC;AAChF,EAAAA,qBAAA,CAAU,sCAAsC,IAAI,CAAA;AACtD;AAaO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,eAAA,EAAS;AAC5B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,cAAA,CAAkB,eAAe,KAAK,CAAA;AACtE,EAAA,MAAM,SAAS,IAAA,IAAQ,QAAA;AAEvB,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,QAAA,EAAU;AACd,IAAAC,2BAAA,CAAgB,aAAA,CAAcA,2BAAA,CAAgB,OAAA,CAAQ,aAAa,CAAA;AACnE,IAAA,IAAI,IAAA,KAAS,MAAA,EAAW,WAAA,CAAY,CAAC,MAAM,CAAA;AAC3C,IAAA,YAAA,GAAe,CAAC,MAAM,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,uBACEC,eAAA,CAACC,oBAAK,KAAA,EACJ,QAAA,EAAA;AAAA,oBAAAD,eAAA;AAAA,MAACE,qBAAA;AAAA,MAAA;AAAA,QACC,iBAAA,EAAkB,QAAA;AAAA,QAClB,kBAAA,EAAoB,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAS;AAAA,QACjD,OAAA,EAAS,MAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,aAAA,EAAe,KAAA;AAAA,UACf,UAAA,EAAY,QAAA;AAAA,UACZ,GAAA,EAAKC,aAAQ,CAAC,CAAA;AAAA,UACd,eAAA,EAAiBA,aAAQ,CAAC;AAAA,SAC5B;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,oBAAK,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,CAAO,WAAW,SAAA,EAAW,CAAC,EAAE,MAAA,EAAQ,SAAS,OAAA,GAAU,MAAA,EAAQ,CAAA,IAAK,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BAC/FD,cAAA,CAACC,gBAAA,EAAA,EAAK,KAAA,EAAO,EAAE,MAAM,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,IAAA,IAAS,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACrF;AAAA;AAAA;AAAA,KACH;AAAA,IACC,MAAA,mBAASD,cAAA,CAACH,gBAAA,EAAA,EAAK,KAAA,EAAO,EAAE,aAAA,EAAeE,YAAA,CAAQ,CAAC,CAAA,EAAE,EAAI,QAAA,EAAS,CAAA,GAAU;AAAA,GAAA,EAC5E,CAAA;AAEJ","file":"collapsible.native.cjs","sourcesContent":["/**\n * Collapsible (native). Titled expand/collapse region. Uses\n * LayoutAnimation for a light height transition without pulling in\n * Reanimated; the chevron flips via a rotate transform.\n */\nimport { useState, type ReactNode } from \"react\";\nimport {\n  LayoutAnimation,\n  Platform,\n  Pressable,\n  Text,\n  UIManager,\n  View,\n  type ViewStyle,\n} from \"react-native\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { spacing } from \"@plyxui/core\";\n\nif (Platform.OS === \"android\" && UIManager.setLayoutAnimationEnabledExperimental) {\n  UIManager.setLayoutAnimationEnabledExperimental(true);\n}\n\nexport interface CollapsibleProps {\n  title: ReactNode;\n  aside?: ReactNode;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  disabled?: boolean;\n  style?: ViewStyle;\n  children?: ReactNode;\n}\n\nexport function Collapsible({\n  title,\n  aside,\n  open,\n  defaultOpen,\n  onOpenChange,\n  disabled,\n  style,\n  children,\n}: CollapsibleProps) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<boolean>(defaultOpen ?? false);\n  const isOpen = open ?? internal;\n\n  const toggle = () => {\n    if (disabled) return;\n    LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n    if (open === undefined) setInternal(!isOpen);\n    onOpenChange?.(!isOpen);\n  };\n\n  return (\n    <View style={style}>\n      <Pressable\n        accessibilityRole=\"button\"\n        accessibilityState={{ expanded: isOpen, disabled }}\n        onPress={toggle}\n        style={{\n          flexDirection: \"row\",\n          alignItems: \"center\",\n          gap: spacing[2],\n          paddingVertical: spacing[3],\n        }}\n      >\n        <Text style={{ color: colors.textMuted, transform: [{ rotate: isOpen ? \"90deg\" : \"0deg\" }] }}>▸</Text>\n        <Text style={{ flex: 1, fontSize: 14, fontWeight: \"600\", color: colors.text }}>{title}</Text>\n        {aside}\n      </Pressable>\n      {isOpen ? <View style={{ paddingBottom: spacing[3] }}>{children}</View> : null}\n    </View>\n  );\n}\n"]}