{"version":3,"file":"Breadcrumbs.mjs","names":["classes"],"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  MantineSpacing,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport classes from './Breadcrumbs.module.css';\n\nexport type BreadcrumbsStylesNames = 'root' | 'separator' | 'breadcrumb';\nexport type BreadcrumbsCssVariables = {\n  root: '--bc-separator-margin';\n};\n\nexport interface BreadcrumbsProps\n  extends BoxProps, StylesApiProps<BreadcrumbsFactory>, ElementProps<'div'> {\n  /** Separator between children @default '/' */\n  separator?: React.ReactNode;\n\n  /** Controls spacing between separator and breadcrumb @default 'xs' */\n  separatorMargin?: MantineSpacing;\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 = {\n  separator: '/',\n} satisfies Partial<BreadcrumbsProps>;\n\nconst varsResolver = createVarsResolver<BreadcrumbsFactory>((_, { separatorMargin }) => ({\n  root: {\n    '--bc-separator-margin': getSpacing(separatorMargin),\n  },\n}));\n\nexport const Breadcrumbs = factory<BreadcrumbsFactory>((_props) => {\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    attributes,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<BreadcrumbsFactory>({\n    name: 'Breadcrumbs',\n    classes,\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    attributes,\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 as any)?.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 {...getStyles('root')} {...others}>\n      {items}\n    </Box>\n  );\n});\n\nBreadcrumbs.classes = classes;\nBreadcrumbs.varsResolver = varsResolver;\nBreadcrumbs.displayName = '@mantine/core/Breadcrumbs';\n"],"mappings":";;;;;;;;;;;;AAyCA,MAAM,eAAe,EACnB,WAAW,KACZ;AAED,MAAM,eAAe,oBAAwC,GAAG,EAAE,uBAAuB,EACvF,MAAM,EACJ,yBAAyB,WAAW,gBAAgB,EACrD,EACF,EAAE;AAEH,MAAa,cAAc,SAA6B,WAAW;CACjE,MAAM,QAAQ,SAAS,eAAe,cAAc,OAAO;CAC3D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,UACA,WACA,iBACA,YACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAA8B;EAC9C,MAAM;EACN,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,QAAQ,SAAS,QAAQ,SAAS,CAAC,QAA2B,KAAK,OAAO,OAAO,UAAU;EAC/F,MAAM,OAAO,UAAU,MAAM,GAC3B,aAAa,OAAO;GAClB,GAAG,UAAU,cAAc,EAAE,WAAY,MAAM,OAAe,WAAW,CAAC;GAC1E,KAAK;GACN,CAAC,GAEF,8BAAC,OAAD;GAAK,GAAI,UAAU,aAAa;GAAE,KAAK;GAEjC,EADH,MACG;AAGR,MAAI,KAAK,KAAK;AAEd,MAAI,UAAU,MAAM,SAAS,EAC3B,KAAI,KACF,8BAAC,KAAD;GAAK,GAAI,UAAU,YAAY;GAAE,KAAK,aAAa;GAE7C,EADH,UACG,CACP;AAGH,SAAO;IACN,EAAE,CAAC;AAEN,QACE,oBAAC,KAAD;EAAK,GAAI,UAAU,OAAO;EAAE,GAAI;YAC7B;EACG,CAAA;EAER;AAEF,YAAY,UAAUA;AACtB,YAAY,eAAe;AAC3B,YAAY,cAAc"}