{"version":3,"file":"Pagination.cjs","names":["Box","usePaginationContext","factory","useProps","PaginationItems","PaginationLabel","PaginationRoot","Group","PaginationFirst","PaginationPrevious","PaginationNext","PaginationLast","classes","PaginationControl","PaginationDots"],"sources":["../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import { Box, factory, Factory, MantineSpacing, useProps } from '../../core';\nimport { Group } from '../Group/Group';\nimport { usePaginationContext } from './Pagination.context';\nimport { PaginationIcon } from './Pagination.icons';\nimport {\n  PaginationControl,\n  type PaginationControlProps,\n} from './PaginationControl/PaginationControl';\nimport { PaginationDots, type PaginationDotsProps } from './PaginationDots/PaginationDots';\nimport {\n  PaginationFirst,\n  PaginationLast,\n  PaginationNext,\n  PaginationPrevious,\n  type PaginationEdgeProps,\n} from './PaginationEdges/PaginationEdges';\nimport { PaginationItems, type PaginationItemsProps } from './PaginationItems/PaginationItems';\nimport {\n  PaginationFormatLabel,\n  PaginationLabel,\n  type PaginationLabelProps,\n} from './PaginationLabel/PaginationLabel';\nimport {\n  PaginationRoot,\n  PaginationRootCssVariables,\n  PaginationRootProps,\n  PaginationRootStylesNames,\n} from './PaginationRoot/PaginationRoot';\nimport classes from './Pagination.module.css';\nexport type PaginationStylesNames = PaginationRootStylesNames;\nexport type PaginationCssVariables = PaginationRootCssVariables;\n\nexport interface PaginationProps extends PaginationRootProps {\n  /** If set, first/last controls are displayed @default false */\n  withEdges?: boolean;\n\n  /** If set, next/previous controls are displayed @default true */\n  withControls?: boolean;\n\n  /** Props passed down to next/previous/first/last controls */\n  getControlProps?: (control: 'first' | 'previous' | 'last' | 'next') => Record<string, any>;\n\n  /** Next control icon component */\n  nextIcon?: PaginationIcon;\n\n  /** Previous control icon component */\n  previousIcon?: PaginationIcon;\n\n  /** Last control icon component */\n  lastIcon?: PaginationIcon;\n\n  /** First control icon component */\n  firstIcon?: PaginationIcon;\n\n  /** Dots icon component */\n  dotsIcon?: PaginationIcon;\n\n  /** Key of `theme.spacing`, gap between controls @default 8 */\n  gap?: MantineSpacing;\n\n  /** If set, the pagination is hidden when only one page is available (`total={1}`) @default false */\n  hideWithOnePage?: boolean;\n\n  /** If set to `false`, page number buttons are hidden, only next/previous controls remain @default `true` */\n  withPages?: boolean;\n\n  /** Function to format the label text displayed in responsive mode */\n  formatLabel?: PaginationFormatLabel;\n}\n\nexport type PaginationFactory = Factory<{\n  props: PaginationProps;\n  ref: HTMLDivElement;\n  stylesNames: PaginationStylesNames;\n  vars: PaginationCssVariables;\n  staticComponents: {\n    Root: typeof PaginationRoot;\n    Control: typeof PaginationControl;\n    Dots: typeof PaginationDots;\n    First: typeof PaginationFirst;\n    Last: typeof PaginationLast;\n    Next: typeof PaginationNext;\n    Previous: typeof PaginationPrevious;\n    Items: typeof PaginationItems;\n    Label: typeof PaginationLabel;\n  };\n}>;\n\nconst defaultProps = {\n  withControls: true,\n  withPages: true,\n  siblings: 1,\n  boundaries: 1,\n  gap: 8,\n} satisfies Partial<PaginationProps>;\n\ninterface PaginationItemsGroupProps {\n  children: React.ReactNode;\n}\n\nfunction PaginationItemsGroup({ children }: PaginationItemsGroupProps) {\n  const ctx = usePaginationContext();\n  return <Box {...ctx.getStyles('items')}>{children}</Box>;\n}\n\nexport const Pagination = factory<PaginationFactory>((_props) => {\n  const props = useProps('Pagination', defaultProps, _props);\n  const {\n    withEdges,\n    withControls,\n    getControlProps,\n    nextIcon,\n    previousIcon,\n    lastIcon,\n    firstIcon,\n    dotsIcon,\n    total,\n    gap,\n    hideWithOnePage,\n    withPages,\n    layout,\n    formatLabel,\n    ...others\n  } = props;\n\n  if (total <= 0 || (hideWithOnePage && total === 1)) {\n    return null;\n  }\n\n  const isResponsive = layout === 'responsive';\n\n  const pagesContent = withPages ? (\n    isResponsive ? (\n      <>\n        <PaginationItemsGroup>\n          <PaginationItems dotsIcon={dotsIcon} />\n        </PaginationItemsGroup>\n        <PaginationLabel formatLabel={formatLabel} />\n      </>\n    ) : (\n      <PaginationItems dotsIcon={dotsIcon} />\n    )\n  ) : null;\n\n  return (\n    <PaginationRoot total={total} layout={layout} {...others}>\n      <Group gap={gap}>\n        {withEdges && <PaginationFirst icon={firstIcon} {...getControlProps?.('first')} />}\n        {withControls && (\n          <PaginationPrevious icon={previousIcon} {...getControlProps?.('previous')} />\n        )}\n        {pagesContent}\n        {withControls && <PaginationNext icon={nextIcon} {...getControlProps?.('next')} />}\n        {withEdges && <PaginationLast icon={lastIcon} {...getControlProps?.('last')} />}\n      </Group>\n    </PaginationRoot>\n  );\n});\n\nPagination.classes = classes;\nPagination.displayName = '@mantine/core/Pagination';\nPagination.Root = PaginationRoot;\nPagination.Control = PaginationControl;\nPagination.Dots = PaginationDots;\nPagination.First = PaginationFirst;\nPagination.Last = PaginationLast;\nPagination.Next = PaginationNext;\nPagination.Previous = PaginationPrevious;\nPagination.Items = PaginationItems;\nPagination.Label = PaginationLabel;\n\nexport namespace Pagination {\n  export type Props = PaginationProps;\n  export type StylesNames = PaginationStylesNames;\n  export type CssVariables = PaginationCssVariables;\n  export type Factory = PaginationFactory;\n\n  export namespace Root {\n    export type Props = PaginationRootProps;\n  }\n\n  export namespace Control {\n    export type Props = PaginationControlProps;\n  }\n\n  export namespace Dots {\n    export type Props = PaginationDotsProps;\n  }\n\n  export namespace Edge {\n    export type Props = PaginationEdgeProps;\n  }\n\n  export namespace Items {\n    export type Props = PaginationItemsProps;\n  }\n\n  export namespace Label {\n    export type Props = PaginationLabelProps;\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAwFA,MAAM,eAAe;CACnB,cAAc;CACd,WAAW;CACX,UAAU;CACV,YAAY;CACZ,KAAK;AACP;AAMA,SAAS,qBAAqB,EAAE,YAAuC;CAErE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;EAAK,GADAC,2BAAAA,qBACM,CAAC,CAAC,UAAU,OAAO;EAAI;CAAc,CAAA;AACzD;AAEA,MAAa,aAAaC,gBAAAA,SAA4B,WAAW;CAE/D,MAAM,EACJ,WACA,cACA,iBACA,UACA,cACA,UACA,WACA,UACA,OACA,KACA,iBACA,WACA,QACA,aACA,GAAG,WAhBSC,kBAAAA,SAAS,cAAc,cAAc,MAiB3C;CAER,IAAI,SAAS,KAAM,mBAAmB,UAAU,GAC9C,OAAO;CAKT,MAAM,eAAe,YAFA,WAAW,eAI5B,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,iBAAD,EAA2B,SAAW,CAAA,EAClB,CAAA,GACtB,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,iBAAD,EAA8B,YAAc,CAAA,CAC5C,EAAA,CAAA,IAEF,iBAAA,GAAA,kBAAA,IAAA,CAACD,wBAAAA,iBAAD,EAA2B,SAAW,CAAA,IAEtC;CAEJ,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,uBAAAA,gBAAD;EAAuB;EAAe;EAAQ,GAAI;YAChD,iBAAA,GAAA,kBAAA,KAAA,CAACC,cAAAA,OAAD;GAAY;aAAZ;IACG,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,iBAAD;KAAiB,MAAM;KAAW,GAAI,kBAAkB,OAAO;IAAI,CAAA;IAChF,gBACC,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,oBAAD;KAAoB,MAAM;KAAc,GAAI,kBAAkB,UAAU;IAAI,CAAA;IAE7E;IACA,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,gBAAD;KAAgB,MAAM;KAAU,GAAI,kBAAkB,MAAM;IAAI,CAAA;IAChF,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,gBAAD;KAAgB,MAAM;KAAU,GAAI,kBAAkB,MAAM;IAAI,CAAA;GACzE;;CACO,CAAA;AAEpB,CAAC;AAED,WAAW,UAAUC,0BAAAA;AACrB,WAAW,cAAc;AACzB,WAAW,OAAON,uBAAAA;AAClB,WAAW,UAAUO,0BAAAA;AACrB,WAAW,OAAOC,uBAAAA;AAClB,WAAW,QAAQN,wBAAAA;AACnB,WAAW,OAAOG,wBAAAA;AAClB,WAAW,OAAOD,wBAAAA;AAClB,WAAW,WAAWD,wBAAAA;AACtB,WAAW,QAAQL,wBAAAA;AACnB,WAAW,QAAQC,wBAAAA"}