{"version":3,"file":"Breadcrumbs.mjs","sources":["../../../src/components/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { Children, cloneElement } from 'react';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  getSpacing,\n  isElement,\n  RaikouSpacing,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport {\n  BreadcrumbsBreadcrumbStyle,\n  BreadcrumbsRootStyle,\n  BreadcrumbsSeparatorStyle,\n} from './Breadcrumbs.css';\n\nexport type BreadcrumbsStylesNames = 'root' | 'separator' | 'breadcrumb';\nexport type BreadcrumbsCssVariables = {\n  root: '--bc-separator-margin';\n};\n\nexport interface BreadcrumbsProps\n  extends BoxProps,\n    StylesApiProps<BreadcrumbsFactory>,\n    ElementProps<'div'> {\n  /** Separator between children, `'/'` by default */\n  separator?: React.ReactNode;\n\n  /** Controls spacing between separator and breadcrumb, `'xs'` by default */\n  separatorMargin?: RaikouSpacing;\n\n  /** React nodes that should be separated with `separator` */\n  children: React.ReactNode;\n}\n\nexport type BreadcrumbsFactory = Factory<{\n  props: BreadcrumbsProps;\n  ref: HTMLDivElement;\n  stylesNames: BreadcrumbsStylesNames;\n  vars: BreadcrumbsCssVariables;\n}>;\n\nconst defaultProps: Partial<BreadcrumbsProps> = {\n  separator: '/',\n};\n\nconst varsResolver = createVarsResolver<BreadcrumbsFactory>((_, { separatorMargin }) => ({\n  root: {\n    '--bc-separator-margin': getSpacing(separatorMargin),\n  },\n}));\n\nexport const Breadcrumbs = factory<BreadcrumbsFactory>((_props, ref) => {\n  const props = useProps('Breadcrumbs', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    children,\n    separator,\n    separatorMargin,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<BreadcrumbsFactory>({\n    name: 'Breadcrumbs',\n    classes: {\n      root: BreadcrumbsRootStyle,\n      breadcrumb: BreadcrumbsBreadcrumbStyle,\n      separator: BreadcrumbsSeparatorStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const items = Children.toArray(children).reduce<React.ReactNode[]>((acc, child, index, array) => {\n    const item = isElement(child) ? (\n      cloneElement(child, {\n        ...getStyles('breadcrumb', { className: child.props?.className }),\n        key: index,\n      })\n    ) : (\n      <div {...getStyles('breadcrumb')} key={index}>\n        {child}\n      </div>\n    );\n\n    acc.push(item);\n\n    if (index !== array.length - 1) {\n      acc.push(\n        <Box {...getStyles('separator')} key={`separator-${index}`}>\n          {separator}\n        </Box>\n      );\n    }\n\n    return acc;\n  }, []);\n\n  return (\n    <Box ref={ref} {...getStyles('root')} {...others}>\n      {items}\n    </Box>\n  );\n});\n\nBreadcrumbs.displayName = '@raikou/core/Breadcrumbs';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA+CA,MAAM,YAA0C,GAAA;AAAA,EAC9C,SAAW,EAAA;AACb,CAAA;AAEA,MAAM,eAAe,kBAAuC,CAAA,CAAC,CAAG,EAAA,EAAE,iBAAuB,MAAA;AAAA,EACvF,IAAM,EAAA;AAAA,IACJ,uBAAA,EAAyB,WAAW,eAAe;AAAA;AAEvD,CAAE,CAAA,CAAA;AAEK,MAAM,WAAc,GAAA,OAAA,CAA4B,CAAC,MAAA,EAAQ,GAAQ,KAAA;AACtE,EAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,aAAe,EAAA,YAAA,EAAc,MAAM,CAAA;AAC1D,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAG;AAAA,GACD,GAAA,KAAA;AAEJ,EAAA,MAAM,YAAY,SAA8B,CAAA;AAAA,IAC9C,IAAM,EAAA,aAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,oBAAA;AAAA,MACN,UAAY,EAAA,0BAAA;AAAA,MACZ,SAAW,EAAA;AAAA,KACb;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAA0B,CAAC,GAAA,EAAK,KAAO,EAAA,KAAA,EAAO,KAAU,KAAA;AAC/F,IAAA,MAAM,IAAO,GAAA,SAAA,CAAU,KAAK,CAAA,GAC1B,aAAa,KAAO,EAAA;AAAA,MAClB,GAAG,UAAU,YAAc,EAAA,EAAE,WAAW,KAAM,CAAA,KAAA,EAAO,WAAW,CAAA;AAAA,MAChE,GAAK,EAAA;AAAA,KACN,CAED,mBAAA,aAAA,CAAC,KAAK,EAAA,EAAA,GAAG,UAAU,YAAY,CAAA,EAAG,GAAK,EAAA,KAAA,EAAA,EACpC,KACH,CAAA;AAGF,IAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAEb,IAAI,IAAA,KAAA,KAAU,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9B,MAAI,GAAA,CAAA,IAAA;AAAA,wBACF,aAAA,CAAC,GAAK,EAAA,EAAA,GAAG,SAAU,CAAA,WAAW,GAAG,GAAK,EAAA,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAA,EACrD,SACH;AAAA,OACF;AAAA;AAGF,IAAO,OAAA,GAAA;AAAA,GACT,EAAG,EAAE,CAAA;AAEL,EACE,uBAAA,GAAA,CAAC,OAAI,GAAW,EAAA,GAAG,UAAU,MAAM,CAAA,EAAI,GAAG,MAAA,EACvC,QACH,EAAA,KAAA,EAAA,CAAA;AAEJ,CAAC;AAED,WAAA,CAAY,WAAc,GAAA,0BAAA;;;;"}