{"version":3,"file":"Group.cjs","sources":["../../../src/components/Group/Group.tsx"],"sourcesContent":["import {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  getSpacing,\n  RaikouSpacing,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { filterFalsyChildren } from './filter-falsy-children/filter-falsy-children';\nimport { GroupRootStyle } from './Group.css';\n\nexport type GroupStylesNames = 'root';\nexport type GroupCssVariables = {\n  root:\n    | '--group-gap'\n    | '--group-align'\n    | '--group-justify'\n    | '--group-wrap'\n    | '--group-child-width';\n};\n\nexport interface GroupStylesCtx {\n  childWidth: string;\n}\n\nexport interface GroupProps extends BoxProps, StylesApiProps<GroupFactory>, ElementProps<'div'> {\n  __size?: any;\n\n  /** Controls `justify-content` CSS property, `'flex-start'` by default */\n  justify?: React.CSSProperties['justifyContent'];\n\n  /** Controls `align-items` CSS property, `'center'` by default */\n  align?: React.CSSProperties['alignItems'];\n\n  /** Controls `flex-wrap` CSS property, `'wrap'` by default */\n  wrap?: React.CSSProperties['flexWrap'];\n\n  /** Key of `theme.spacing` or any valid CSS value for `gap`, numbers are converted to rem, `'md'` by default */\n  gap?: RaikouSpacing;\n\n  /** Determines whether each child element should have `flex-grow: 1` style, `false` by default */\n  grow?: boolean;\n\n  /** Determines whether children should take only dedicated amount of space (`max-width` style is set based on the number of children), `true` by default */\n  preventGrowOverflow?: boolean;\n}\n\nexport type GroupFactory = Factory<{\n  props: GroupProps;\n  ref: HTMLDivElement;\n  stylesNames: GroupStylesNames;\n  vars: GroupCssVariables;\n  ctx: GroupStylesCtx;\n}>;\n\nconst defaultProps: Partial<GroupProps> = {\n  preventGrowOverflow: true,\n  gap: 'md',\n  align: 'center',\n  justify: 'flex-start',\n  wrap: 'wrap',\n};\n\nconst varsResolver = createVarsResolver<GroupFactory>(\n  (_, { grow, preventGrowOverflow, gap, align, justify, wrap }, { childWidth }) => ({\n    root: {\n      '--group-child-width': grow && preventGrowOverflow ? childWidth : undefined,\n      '--group-gap': getSpacing(gap),\n      '--group-align': align,\n      '--group-justify': justify,\n      '--group-wrap': wrap,\n    },\n  })\n);\n\nexport const Group = factory<GroupFactory>((_props, ref) => {\n  const props = useProps('Group', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    children,\n    gap,\n    align,\n    justify,\n    wrap,\n    grow,\n    preventGrowOverflow,\n    vars,\n    variant,\n    __size,\n    mod,\n    ...others\n  } = props;\n\n  const filteredChildren = filterFalsyChildren(children);\n  const childrenCount = filteredChildren.length;\n  const resolvedGap = getSpacing(gap ?? 'md');\n  const childWidth = `calc(${\n    100 / childrenCount\n  }% - (${resolvedGap} - ${resolvedGap} / ${childrenCount}))`;\n\n  const stylesCtx: GroupStylesCtx = { childWidth };\n\n  const getStyles = useStyles<GroupFactory>({\n    name: 'Group',\n    props,\n    stylesCtx,\n    className,\n    style,\n    classes: {\n      root: GroupRootStyle,\n    },\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  return (\n    <Box\n      {...getStyles('root')}\n      ref={ref}\n      variant={variant}\n      mod={[{ grow }, mod]}\n      size={__size}\n      {...others}\n    >\n      {filteredChildren}\n    </Box>\n  );\n});\n\nGroup.displayName = '@raikou/core/Group';\n"],"names":["createVarsResolver","getSpacing","factory","useProps","filterFalsyChildren","useStyles","GroupRootStyle","jsx","Box"],"mappings":";;;;;;;;;;;;;;;;AA4DA,MAAM,YAAoC,GAAA;AAAA,EACxC,mBAAqB,EAAA,IAAA;AAAA,EACrB,GAAK,EAAA,IAAA;AAAA,EACL,KAAO,EAAA,QAAA;AAAA,EACP,OAAS,EAAA,YAAA;AAAA,EACT,IAAM,EAAA;AACR,CAAA;AAEA,MAAM,YAAe,GAAAA,qCAAA;AAAA,EACnB,CAAC,CAAA,EAAG,EAAE,IAAA,EAAM,mBAAqB,EAAA,GAAA,EAAK,KAAO,EAAA,OAAA,EAAS,IAAK,EAAA,EAAG,EAAE,UAAA,EAAkB,MAAA;AAAA,IAChF,IAAM,EAAA;AAAA,MACJ,qBAAA,EAAuB,IAAQ,IAAA,mBAAA,GAAsB,UAAa,GAAA,KAAA,CAAA;AAAA,MAClE,aAAA,EAAeC,mBAAW,GAAG,CAAA;AAAA,MAC7B,eAAiB,EAAA,KAAA;AAAA,MACjB,iBAAmB,EAAA,OAAA;AAAA,MACnB,cAAgB,EAAA;AAAA;AAClB,GACF;AACF,CAAA;AAEO,MAAM,KAAQ,GAAAC,eAAA,CAAsB,CAAC,MAAA,EAAQ,GAAQ,KAAA;AAC1D,EAAA,MAAM,KAAQ,GAAAC,iBAAA,CAAS,OAAS,EAAA,YAAA,EAAc,MAAM,CAAA;AACpD,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,mBAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAG;AAAA,GACD,GAAA,KAAA;AAEJ,EAAM,MAAA,gBAAA,GAAmBC,wCAAoB,QAAQ,CAAA;AACrD,EAAA,MAAM,gBAAgB,gBAAiB,CAAA,MAAA;AACvC,EAAM,MAAA,WAAA,GAAcH,kBAAW,CAAA,GAAA,IAAO,IAAI,CAAA;AAC1C,EAAM,MAAA,UAAA,GAAa,QACjB,GAAM,GAAA,aACR,QAAQ,WAAW,CAAA,GAAA,EAAM,WAAW,CAAA,GAAA,EAAM,aAAa,CAAA,EAAA,CAAA;AAEvD,EAAM,MAAA,SAAA,GAA4B,EAAE,UAAW,EAAA;AAE/C,EAAA,MAAM,YAAYI,mBAAwB,CAAA;AAAA,IACxC,IAAM,EAAA,OAAA;AAAA,IACN,KAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAAC;AAAA,KACR;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAACC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,UAAU,MAAM,CAAA;AAAA,MACpB,GAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAK,EAAA,CAAC,EAAE,IAAA,IAAQ,GAAG,CAAA;AAAA,MACnB,IAAM,EAAA,MAAA;AAAA,MACL,GAAG,MAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAC;AAED,KAAA,CAAM,WAAc,GAAA,oBAAA;;;;"}