{"version":3,"file":"Cluster.cjs","sources":["../../../../src/components/Layout/Cluster/Cluster.tsx"],"sourcesContent":["'use client'\n\nimport {\n  type ComponentPropsWithoutRef,\n  type ElementType,\n  type ForwardedRef,\n  type PropsWithChildren,\n  useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { genericsForwardRef } from '../../../libs/util'\nimport { useSectionWrapper } from '../../SectioningContent'\n\nimport type { Gap, SeparateGap } from '../../../types'\n\nexport const clusterClassNameGenerator = tv({\n  base: 'shr-flex-wrap [&:empty]:shr-gap-0',\n  variants: {\n    inline: {\n      true: 'shr-inline-flex',\n      false: 'shr-flex',\n    },\n    rowGap: {\n      // 動的生成も考えたが、tailwindcss が検知できないためベタ書きしている\n      0: 'shr-gap-y-0',\n      0.25: 'shr-gap-y-0.25',\n      0.5: 'shr-gap-y-0.5',\n      0.75: 'shr-gap-y-0.75',\n      1: 'shr-gap-y-1',\n      1.25: 'shr-gap-y-1.25',\n      1.5: 'shr-gap-y-1.5',\n      2: 'shr-gap-y-2',\n      2.5: 'shr-gap-y-2.5',\n      3: 'shr-gap-y-3',\n      3.5: 'shr-gap-y-3.5',\n      4: 'shr-gap-y-4',\n      8: 'shr-gap-y-8',\n      X3S: 'shr-gap-y-0.25',\n      XXS: 'shr-gap-y-0.5',\n      XS: 'shr-gap-y-1',\n      S: 'shr-gap-y-1.5',\n      M: 'shr-gap-y-2',\n      L: 'shr-gap-y-2.5',\n      XL: 'shr-gap-y-3',\n      XXL: 'shr-gap-y-3.5',\n      X3L: 'shr-gap-y-4',\n    } as { [key in Gap]: string },\n    columnGap: {\n      0: 'shr-gap-x-0',\n      0.25: 'shr-gap-x-0.25',\n      0.5: 'shr-gap-x-0.5',\n      0.75: 'shr-gap-x-0.75',\n      1: 'shr-gap-x-1',\n      1.25: 'shr-gap-x-1.25',\n      1.5: 'shr-gap-x-1.5',\n      2: 'shr-gap-x-2',\n      2.5: 'shr-gap-x-2.5',\n      3: 'shr-gap-x-3',\n      3.5: 'shr-gap-x-3.5',\n      4: 'shr-gap-x-4',\n      8: 'shr-gap-x-8',\n      X3S: 'shr-gap-x-0.25',\n      XXS: 'shr-gap-x-0.5',\n      XS: 'shr-gap-x-1',\n      S: 'shr-gap-x-1.5',\n      M: 'shr-gap-x-2',\n      L: 'shr-gap-x-2.5',\n      XL: 'shr-gap-x-3',\n      XXL: 'shr-gap-x-3.5',\n      X3L: 'shr-gap-x-4',\n    } as { [key in Gap]: string },\n    align: {\n      start: 'shr-items-start',\n      'flex-start': 'shr-items-start',\n      end: 'shr-items-end',\n      'flex-end': 'shr-items-end',\n      center: 'shr-items-center',\n      baseline: 'shr-items-baseline',\n      stretch: 'shr-items-stretch',\n    },\n    justify: {\n      normal: 'shr-justify-normal',\n      start: 'shr-justify-start',\n      'flex-start': 'shr-justify-start',\n      end: 'shr-justify-end',\n      'flex-end': 'shr-justify-end',\n      center: 'shr-justify-center',\n      'space-between': 'shr-justify-between',\n      'space-around': 'shr-justify-around',\n      'space-evenly': 'shr-justify-evenly',\n      stretch: 'shr-justify-stretch',\n    },\n  },\n})\n\ntype Props<T extends ElementType> = PropsWithChildren<\n  Omit<VariantProps<typeof clusterClassNameGenerator>, 'rowGap' | 'columnGap'> & {\n    as?: T\n    gap?: Gap | SeparateGap\n  }\n> &\n  ComponentPropsWithoutRef<T>\n\nconst ActualCluster = <T extends ElementType = 'div'>(\n  { as, gap = 0.5, inline = false, align, justify, className, ...rest }: Props<T>,\n  ref: ForwardedRef<HTMLDivElement>,\n) => {\n  const gaps = useMemo(() => {\n    if (gap instanceof Object) {\n      return gap\n    }\n\n    return {\n      row: gap,\n      column: gap,\n    }\n  }, [gap])\n\n  const actualClassName = useMemo(\n    () =>\n      clusterClassNameGenerator({\n        inline,\n        rowGap: gaps.row,\n        columnGap: gaps.column,\n        align,\n        justify,\n        className,\n      }),\n    [inline, gaps.row, gaps.column, align, justify, className],\n  )\n\n  const Component = as || 'div'\n  const Wrapper = useSectionWrapper(Component)\n  const body = <Component {...rest} ref={ref} className={actualClassName} />\n\n  if (Wrapper) {\n    return <Wrapper>{body}</Wrapper>\n  }\n\n  return body\n}\n\nexport const Cluster = genericsForwardRef(ActualCluster)\n"],"names":[],"mappings":";;;;;;;;;;;AAgBO;AACL;AACA;AACE;AACE;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACF;AACF;AAUD;AAIE;AACE;AACE;;;AAIA;AACA;;AAEJ;;;;;;;;AAWK;AAIL;AACA;AACA;;AAGE;;AAGF;AACF;;;;"}