{"version":3,"file":"Accordion.cjs","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { useId, useUncontrolled } from '@raikou/hooks';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  ExtendComponent,\n  Factory,\n  getRadius,\n  getSafeId,\n  getWithProps,\n  RaikouRadius,\n  RaikouThemeComponent,\n  rem,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { AccordionProvider } from './Accordion.context';\nimport { AccordionChevronPosition, AccordionHeadingOrder, AccordionValue } from './Accordion.types';\nimport { AccordionChevron } from './AccordionChevron';\nimport { AccordionControl } from './AccordionControl/AccordionControl';\nimport { AccordionItem } from './AccordionItem/AccordionItem';\nimport { AccordionPanel } from './AccordionPanel/AccordionPanel';\nimport {\n  AccordionChevronStyle,\n  AccordionContentStyle,\n  AccordionControlStyle,\n  AccordionIconStyle,\n  AccordionItemStyle,\n  AccordionItemTitleStyle,\n  AccordionLabelStyle,\n  AccordionPanelStyle,\n  AccordionRootStyle,\n} from './Accordion.css';\n\nexport type AccordionStylesNames =\n  | 'root'\n  | 'content'\n  | 'item'\n  | 'panel'\n  | 'icon'\n  | 'chevron'\n  | 'label'\n  | 'itemTitle'\n  | 'control';\n\nexport type AccordionVariant = 'default' | 'contained' | 'filled' | 'separated';\nexport type AccordionCssVariables = {\n  root: '--accordion-transition-duration' | '--accordion-chevron-size' | '--accordion-radius';\n};\n\nexport interface AccordionProps<Multiple extends boolean = false>\n  extends BoxProps,\n    StylesApiProps<AccordionFactory>,\n    ElementProps<'div', 'value' | 'defaultValue' | 'onChange'> {\n  /** Determines whether multiple items can be opened at a time, `false` by default */\n  multiple?: Multiple;\n\n  /** Value for controlled component */\n  value?: AccordionValue<Multiple>;\n\n  /** Default value for uncontrolled component */\n  defaultValue?: AccordionValue<Multiple>;\n\n  /** Called when value changes */\n  onChange?: (value: AccordionValue<Multiple>) => void;\n\n  /** Determines whether arrow key presses should loop though items (first to last and last to first), `true` by default */\n  loop?: boolean;\n\n  /** Transition duration in ms, `200` by default */\n  transitionDuration?: number;\n\n  /** Determines whether chevron rotation should be disabled, `false` by default */\n  disableChevronRotation?: boolean;\n\n  /** Position of the chevron relative to the item label, `right` by default */\n  chevronPosition?: AccordionChevronPosition;\n\n  /** Size of the chevron icon container, `24` by default */\n  chevronSize?: number | string;\n\n  /** Heading order, has no effect on visuals */\n  order?: AccordionHeadingOrder;\n\n  /** Custom chevron icon that will be used in all items */\n  chevron?: React.ReactNode;\n\n  /** Key of `theme.radius` or any valid CSS value to set border-radius. Numbers are converted to rem. `theme.defaultRadius` by default. */\n  radius?: RaikouRadius;\n}\n\nexport type AccordionFactory = Factory<{\n  props: AccordionProps;\n  ref: HTMLDivElement;\n  stylesNames: AccordionStylesNames;\n  vars: AccordionCssVariables;\n  variant: AccordionVariant;\n}>;\n\nconst defaultProps: Partial<AccordionProps> = {\n  multiple: false,\n  disableChevronRotation: false,\n  chevronPosition: 'right',\n  variant: 'default',\n  chevron: <AccordionChevron />,\n};\n\nconst varsResolver = createVarsResolver<AccordionFactory>(\n  (_, { transitionDuration, chevronSize, radius }) => ({\n    root: {\n      '--accordion-transition-duration':\n        transitionDuration === undefined ? undefined : `${transitionDuration}ms`,\n      '--accordion-chevron-size': chevronSize === undefined ? undefined : rem(chevronSize),\n      '--accordion-radius': radius === undefined ? undefined : getRadius(radius),\n    },\n  })\n);\n\nexport function Accordion<Multiple extends boolean = false>(_props: AccordionProps<Multiple>) {\n  const props = useProps('Accordion', defaultProps as AccordionProps<Multiple>, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    children,\n    multiple,\n    value,\n    defaultValue,\n    onChange,\n    id,\n    loop,\n    transitionDuration,\n    disableChevronRotation,\n    chevronPosition,\n    chevronSize,\n    order,\n    chevron,\n    variant,\n    radius,\n    ...others\n  } = props;\n\n  const uid = useId(id);\n  const [_value, handleChange] = useUncontrolled({\n    value,\n    defaultValue,\n    finalValue: multiple ? ([] as any) : null,\n    onChange,\n  });\n\n  const isItemActive = (itemValue: string) =>\n    Array.isArray(_value) ? _value.includes(itemValue) : itemValue === _value;\n\n  const handleItemChange = (itemValue: string) => {\n    const nextValue: AccordionValue<Multiple> = Array.isArray(_value)\n      ? _value.includes(itemValue)\n        ? _value.filter((selectedValue) => selectedValue !== itemValue)\n        : [..._value, itemValue]\n      : itemValue === _value\n        ? null\n        : (itemValue as any);\n\n    handleChange(nextValue);\n  };\n\n  const getStyles = useStyles<AccordionFactory>({\n    name: 'Accordion',\n    classes: {\n      root: AccordionRootStyle,\n      content: AccordionContentStyle,\n      item: AccordionItemStyle,\n      panel: AccordionPanelStyle,\n      icon: AccordionIconStyle,\n      chevron: AccordionChevronStyle,\n      label: AccordionLabelStyle,\n      itemTitle: AccordionItemTitleStyle,\n      control: AccordionControlStyle,\n    },\n    props: props as AccordionProps,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  return (\n    <AccordionProvider\n      value={{\n        isItemActive,\n        onChange: handleItemChange,\n        getControlId: getSafeId(\n          `${uid}-control`,\n          'Accordion.Item component was rendered with invalid value or without value'\n        ),\n        getRegionId: getSafeId(\n          `${uid}-panel`,\n          'Accordion.Item component was rendered with invalid value or without value'\n        ),\n        transitionDuration,\n        disableChevronRotation,\n        chevronPosition,\n        order,\n        chevron,\n        loop,\n        getStyles,\n        variant,\n        unstyled,\n      }}\n    >\n      <Box {...getStyles('root')} id={uid} {...others} variant={variant} data-accordion>\n        {children}\n      </Box>\n    </AccordionProvider>\n  );\n}\n\nconst extendAccordion = (c: ExtendComponent<AccordionFactory>): RaikouThemeComponent => c;\n\nAccordion.extend = extendAccordion;\nAccordion.withProps = getWithProps<AccordionProps, AccordionProps>(Accordion as any);\nAccordion.displayName = '@raikou/core/Accordion';\nAccordion.Item = AccordionItem;\nAccordion.Panel = AccordionPanel;\nAccordion.Control = AccordionControl;\nAccordion.Chevron = AccordionChevron;\n"],"names":["AccordionChevron","createVarsResolver","rem","getRadius","useProps","useId","useUncontrolled","useStyles","AccordionRootStyle","AccordionContentStyle","AccordionItemStyle","AccordionPanelStyle","AccordionIconStyle","AccordionChevronStyle","AccordionLabelStyle","AccordionItemTitleStyle","AccordionControlStyle","jsx","AccordionProvider","getSafeId","Box","getWithProps","AccordionItem","AccordionPanel","AccordionControl"],"mappings":"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"}