import { StyleSheet } from 'react-native';
import { tv } from '../../helpers/external/utils/cn';
import { combineStyles } from '../../helpers/internal/utils';
const root = tv({
slots: {
container: 'accordion__root-container',
separator: 'accordion__root-separator',
},
variants: {
variant: {
default: {
container: '',
separator: '',
},
surface: {
container: 'accordion__root-container--variant-surface',
separator: 'accordion__root-separator--variant-surface',
},
},
},
defaultVariants: {
variant: 'default',
},
});
/**
* Background style definition — absolute-fill container behind the surface
* variant's root container, hosting theme-specific layers (e.g. glass blur)
* or custom content (gradients, images).
*/
const background = tv({
base: 'accordion__root-background',
});
const item = tv({
base: 'accordion__item',
});
const trigger = tv({
base: 'accordion__trigger',
variants: {
variant: {
default: '',
surface: 'accordion__trigger--variant-surface',
},
},
defaultVariants: {
variant: 'default',
},
});
/**
* Indicator style definition
*
* @note ANIMATED PROPERTIES (cannot be set via className):
* The following property is animated and cannot be overridden using Tailwind classes:
* - `transform` (specifically `rotate`) - Animated for expand/collapse rotation transitions
*
* To customize this property, use the `animation` prop on `Accordion.Indicator`:
* ```tsx
*
* ```
*
* To completely disable animated styles and apply your own via className or style prop,
* set `isAnimatedStyleActive={false}` on `Accordion.Indicator`.
*/
const indicator = tv({
base: 'accordion__indicator',
});
const content = tv({
base: 'accordion__content',
variants: {
variant: {
default: '',
surface: 'accordion__content--variant-surface',
},
},
defaultVariants: {
variant: 'default',
},
});
export const accordionClassNames = combineStyles({
root,
background,
item,
trigger,
indicator,
content,
});
export const accordionStyleSheet = StyleSheet.create({
root: {
borderCurve: 'continuous',
},
});
export type RootSlots = keyof ReturnType;