{"version":3,"file":"PaginationRoot.cjs","sources":["../../../../src/components/Pagination/PaginationRoot/PaginationRoot.tsx"],"sourcesContent":["import { usePagination } from '@raikou/hooks';\nimport {\n  Box,\n  BoxProps,\n  createEventHandler,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  getAutoContrastValue,\n  getContrastColor,\n  getFontSize,\n  getRadius,\n  getSize,\n  getThemeColor,\n  RaikouColor,\n  RaikouRadius,\n  RaikouSize,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../../core';\nimport { PaginationProvider } from '../Pagination.context';\nimport {\n  PaginationControlStyle,\n  PaginationDotsStyle,\n  PaginationRootStyle,\n} from '../Pagination.css';\n\nexport type PaginationRootStylesNames = 'root' | 'control' | 'dots';\nexport type PaginationRootCssVariables = {\n  root:\n    | '--pagination-control-size'\n    | '--pagination-control-radius'\n    | '--pagination-control-fz'\n    | '--pagination-active-bg'\n    | '--pagination-active-color';\n};\n\nexport interface PaginationRootProps\n  extends BoxProps,\n    StylesApiProps<PaginationRootFactory>,\n    ElementProps<'div', 'value' | 'onChange'> {\n  /** `height` and `min-width` of controls, `'md'` by default */\n  size?: RaikouSize | (string & {}) | number;\n\n  /** Total number of pages, must be an integer */\n  total: number;\n\n  /** Active page for controlled component, must be an integer in [0, total] interval */\n  value?: number;\n\n  /** Active page for uncontrolled component, must be an integer in [0, total] interval */\n  defaultValue?: number;\n\n  /** Called when page changes */\n  onChange?: (value: number) => void;\n\n  /** Determines whether all controls should be disabled, `false` by default */\n  disabled?: boolean;\n\n  /** Number of siblings displayed on the left/right side of the selected page, `1` by default */\n  siblings?: number;\n\n  /** Number of elements visible on the left/right edges, `1` by default */\n  boundaries?: number;\n\n  /** Key of `theme.colors`, active item color, `theme.primaryColor` by default */\n  color?: RaikouColor;\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  /** Called when next page control is clicked */\n  onNextPage?: () => void;\n\n  /** Called when previous page control is clicked */\n  onPreviousPage?: () => void;\n\n  /** Called when first page control is clicked */\n  onFirstPage?: () => void;\n\n  /** Called when last page control is clicked */\n  onLastPage?: () => void;\n\n  /** Additional props passed down to controls */\n  getItemProps?: (page: number) => Record<string, any>;\n\n  /** Determines whether active item text color should depend on `background-color` of the indicator. If luminosity of the `color` prop is less than `theme.luminosityThreshold`, then `theme.white` will be used for text color, otherwise `theme.black`. Overrides `theme.autoContrast`. */\n  autoContrast?: boolean;\n}\n\nexport type PaginationRootFactory = Factory<{\n  props: PaginationRootProps;\n  ref: HTMLDivElement;\n  stylesNames: PaginationRootStylesNames;\n  vars: PaginationRootCssVariables;\n}>;\n\nconst defaultProps: Partial<PaginationRootProps> = {\n  siblings: 1,\n  boundaries: 1,\n};\n\nconst varsResolver = createVarsResolver<PaginationRootFactory>(\n  (theme, { size, radius, color, autoContrast }) => ({\n    root: {\n      '--pagination-control-radius': radius === undefined ? undefined : getRadius(radius),\n      '--pagination-control-size': getSize(size, 'pagination-control-size'),\n      '--pagination-control-fz': getFontSize(size),\n      '--pagination-active-bg': color ? getThemeColor(color, theme) : undefined,\n      '--pagination-active-color': getAutoContrastValue(autoContrast, theme)\n        ? getContrastColor({ color, theme, autoContrast })\n        : undefined,\n    },\n  })\n);\n\nexport const PaginationRoot = factory<PaginationRootFactory>((_props, ref) => {\n  const props = useProps('PaginationRoot', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    total,\n    value,\n    defaultValue,\n    onChange,\n    disabled,\n    siblings,\n    boundaries,\n    color,\n    radius,\n    onNextPage,\n    onPreviousPage,\n    onFirstPage,\n    onLastPage,\n    getItemProps,\n    autoContrast,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<PaginationRootFactory>({\n    name: 'Pagination',\n    classes: {\n      root: PaginationRootStyle,\n      control: PaginationControlStyle,\n      dots: PaginationDotsStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const { range, setPage, next, previous, active, first, last } = usePagination({\n    page: value,\n    initialPage: defaultValue,\n    onChange,\n    total,\n    siblings,\n    boundaries,\n  });\n\n  const handleNextPage = createEventHandler(onNextPage, next);\n  const handlePreviousPage = createEventHandler(onPreviousPage, previous);\n  const handleFirstPage = createEventHandler(onFirstPage, first);\n  const handleLastPage = createEventHandler(onLastPage, last);\n\n  return (\n    <PaginationProvider\n      value={{\n        total,\n        range,\n        active,\n        disabled,\n        getItemProps,\n        onChange: setPage,\n        onNext: handleNextPage,\n        onPrevious: handlePreviousPage,\n        onFirst: handleFirstPage,\n        onLast: handleLastPage,\n        getStyles,\n      }}\n    >\n      <Box ref={ref} {...getStyles('root')} {...others} />\n    </PaginationProvider>\n  );\n});\n\nPaginationRoot.displayName = '@raikou/core/PaginationRoot';\n"],"names":["createVarsResolver","getRadius","getSize","getFontSize","getThemeColor","getAutoContrastValue","getContrastColor","factory","useProps","useStyles","PaginationRootStyle","PaginationControlStyle","PaginationDotsStyle","usePagination","createEventHandler","jsx","PaginationProvider","Box"],"mappings":"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"}