{"version":3,"file":"pagination.mjs","sources":["../../../../../../packages/components/pagination/src/pagination.ts"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  h,\n  provide,\n  ref,\n  watch,\n} from 'vue'\nimport {\n  buildProps,\n  debugWarn,\n  definePropType,\n  getVsColor,\n  iconPropType,\n  isNumber,\n  mutable,\n} from '@vuesax-alpha/utils'\nimport { useColorProp, useNamespace } from '@vuesax-alpha/hooks'\nimport { paginationContextKey } from '@vuesax-alpha/tokens'\nimport { ChevronLeft, ChevronRight } from '@vuesax-alpha/icons-vue'\n\nimport Next from './components/next.vue'\nimport Prev from './components/prev.vue'\nimport Sizes from './components/sizes.vue'\nimport Jumper from './components/jumper.vue'\nimport Total from './components/total.vue'\nimport Pager from './components/pager.vue'\n\nimport type { ExtractPropTypes, VNode } from 'vue'\n\n/**\n * It it user's responsibility to guarantee that the value of props.total... is number\n * (same as pageSize, defaultPageSize, currentPage, defaultCurrentPage, pageCount)\n * Otherwise we can reasonable infer that the corresponding field is absent\n */\nconst isAbsent = (v: unknown): v is undefined => typeof v !== 'number'\ntype LayoutKey =\n  | 'prev'\n  | 'pager'\n  | 'next'\n  | 'jumper'\n  | '->'\n  | 'total'\n  | 'slot'\n  | 'sizes'\n\nexport const paginationProps = buildProps({\n  /**\n   * @description Component color - Accept Vuesax's color, Hex, rgb\n   */\n  color: useColorProp,\n\n  /** @description total item count */\n  total: { type: Number },\n\n  /** @description default initial value of current page */\n  defaultCurrentPage: { type: Number },\n\n  /** @description current page number */\n  currentPage: { type: Number },\n\n  /** @description default initial value of page size */\n  defaultPageSize: { type: Number },\n\n  /** @description options of item count per page */\n  pageSize: { type: Number },\n\n  /**\n   * @description total page count. Set either `total` or `page-count` and pages will be displayed; if you need `page-sizes`, `total` is required\n   */\n  pageCount: { type: Number },\n\n  /**\n   * @description number of pages to show. Pagination collapses when the total page count exceeds this value\n   */\n  pagerCount: {\n    type: Number,\n    validator: (value: unknown) => {\n      return (\n        isNumber(value) &&\n        Math.trunc(value) === value &&\n        value > 4 &&\n        value < 22 &&\n        value % 2 === 1\n      )\n    },\n    default: 7,\n  },\n\n  /** @description layout of Pagination, an array or string elements separated with a comma */\n  layout: {\n    type: definePropType<LayoutKey[] | LayoutKey>([String, Array]),\n    default: () =>\n      mutable([\n        'prev',\n        'pager',\n        'next',\n        'jumper',\n        '->',\n        'total',\n        'slot',\n        'sizes',\n      ] as const),\n  },\n\n  /** @description item count of each page */\n  pageSizes: {\n    type: definePropType<number[]>(Array),\n    default: () => mutable([10, 20, 30, 40, 50, 100] as const),\n  },\n\n  /** @description */\n  hideOnSinglePage: { type: Boolean },\n\n  /** @description text for the prev button */\n  prevText: {\n    type: String,\n    default: '',\n  },\n  /** @description icon for the prev button, higher priority of `prev-text` */\n  prevIcon: {\n    type: iconPropType,\n    default: () => ChevronLeft,\n  },\n  /** @description text for the next button */\n  nextText: {\n    type: String,\n    default: '',\n  },\n  /** @description icon for the next button, higher priority of `next-text` */\n  nextIcon: {\n    type: iconPropType,\n    default: () => ChevronRight,\n  },\n\n  /** @description Determine if the pagination is infinite. */\n  infinite: { type: Boolean, default: false },\n\n  /** @description Add a progress bar to the component determined by the current page and the total (length) of pages. */\n  progress: { type: Boolean },\n\n  /** @description Change the margin between the items causing them to be fully glued and the radius is removed making them square. */\n  notMargin: { type: Boolean },\n\n  /** @description Makes the buttons not have the internal number and changes its size. */\n  buttonsDotted: { type: Boolean, default: false },\n\n  shape: {\n    type: String,\n    values: ['circle', 'square'] as const,\n    default: '',\n  },\n\n  /** @description Determine if the entire component is in the disabled state. */\n  disabled: { type: Boolean, default: false },\n\n  /** @description Determine which items are in the disabled state. */\n  disabledItems: {\n    type: definePropType<number[]>(Array),\n    default: (): number[] => [],\n  },\n\n  /** @description Determine which items are in the charging state. */\n  loadingItems: {\n    type: definePropType<number[]>(Array),\n    default: (): number[] => [],\n  },\n} as const)\n\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>\n\nexport const paginationEmits = {\n  'update:current-page': (val: number) => isNumber(val),\n  'update:page-size': (val: number) => isNumber(val),\n  'size-change': (val: number) => isNumber(val),\n  'page-change': (val: number) => isNumber(val),\n  'prev-click': (val: number) => isNumber(val),\n  'next-click': (val: number) => isNumber(val),\n}\n\nexport type PaginationEmits = typeof paginationEmits\n\nconst COMPONENT_NAME = 'VsPagination'\n\nexport default defineComponent({\n  name: COMPONENT_NAME,\n  props: paginationProps,\n  emits: paginationEmits,\n  setup(props, { emit, slots }) {\n    const ns = useNamespace('pagination')\n\n    const vnodeProps = getCurrentInstance()!.vnode.props || {}\n\n    // we can find @xxx=\"xxx\" props on `vnodeProps` to check if user bind corresponding events\n    const hasCurrentPageListener =\n      'onUpdate:currentPage' in vnodeProps ||\n      'onUpdate:current-page' in vnodeProps ||\n      'onCurrentChange' in vnodeProps\n    const hasPageSizeListener =\n      'onUpdate:pageSize' in vnodeProps ||\n      'onUpdate:page-size' in vnodeProps ||\n      'onSizeChange' in vnodeProps\n\n    const assertValidUsage = computed(() => {\n      // Users have to set either one, otherwise count of pages cannot be determined\n      if (isAbsent(props.total) && isAbsent(props.pageCount))\n        return 'need to set props `total` or `pageCount`, otherwise count of pages cannot be determined.'\n\n      // <pagination ...otherProps :current-page=\"xxx\" /> without corresponding listener is forbidden now\n      // Users have to use two way binding of `currentPage`\n      // If users just want to provide a default value, `defaultCurrentPage` is here for you\n      if (!isAbsent(props.currentPage) && !hasCurrentPageListener)\n        return 'You have to use v-model binding of `currentPage`.\\nIf you just want to provide a default value, `defaultCurrentPage` is here for you.'\n\n      // When you want to change sizes, things get more complex, detailed below\n      // Basically the most important value we need is page count\n      // either directly from props.pageCount\n      // or calculated from props.total\n      // we will take props.pageCount precedence over props.total\n      if (props.layout.includes('sizes')) {\n        if (!isAbsent(props.pageCount)) {\n          // if props.pageCount is assign by user, then user have to watch pageSize change\n          // and recalculate pageCount\n          if (!hasPageSizeListener)\n            return 'Your layout having `sizes`. If `pageCount` is assign, then you have to watch `pageSize` change and recalculate `pageCount`.'\n        } else if (!isAbsent(props.total)) {\n          // Otherwise, we will see if user have props.pageSize defined\n          // If so, meaning user want to have pageSize controlled himself/herself from component\n          // Thus page size listener is required\n          // users are account for page size change\n          if (!isAbsent(props.pageSize)) {\n            if (!hasPageSizeListener) {\n              return 'Your layout having `sizes`. If you have `pageSize` defined, meaning you want to have `pageSize` controlled yourself from component. Thus page size `listener` is required, you are account for `pageSize` changed.'\n            }\n          } else {\n            // (else block just for explaination)\n            // else page size is controlled by pagination internally\n          }\n        }\n      }\n      return true\n    })\n\n    const innerPageSize = ref(\n      isAbsent(props.defaultPageSize) ? 10 : props.defaultPageSize\n    )\n\n    const innerCurrentPage = ref(\n      isAbsent(props.defaultCurrentPage) ? 1 : props.defaultCurrentPage\n    )\n\n    const pageSizeBridge = computed({\n      get() {\n        return isAbsent(props.pageSize) ? innerPageSize.value : props.pageSize\n      },\n      set(v: number) {\n        if (isAbsent(props.pageSize)) {\n          innerPageSize.value = v\n        }\n        if (hasPageSizeListener) {\n          emit('update:page-size', v)\n          emit('size-change', v)\n        }\n      },\n    })\n\n    const pageCountBridge = computed<number>(() => {\n      let pageCount = 0\n      if (!isAbsent(props.pageCount)) {\n        pageCount = props.pageCount\n      } else if (!isAbsent(props.total)) {\n        pageCount = Math.max(1, Math.ceil(props.total / pageSizeBridge.value))\n      }\n      return pageCount\n    })\n\n    const currentPageBridge = computed<number>({\n      get() {\n        return isAbsent(props.currentPage)\n          ? innerCurrentPage.value\n          : props.currentPage\n      },\n      set(v) {\n        let newCurrentPage = v\n        if (v < 1) {\n          newCurrentPage = props.infinite ? pageCountBridge.value : 1\n        } else if (v > pageCountBridge.value) {\n          newCurrentPage = props.infinite ? 1 : pageCountBridge.value\n        }\n        if (isAbsent(props.currentPage)) {\n          innerCurrentPage.value = newCurrentPage\n        }\n        if (hasCurrentPageListener) {\n          emit('update:current-page', newCurrentPage)\n          emit('page-change', newCurrentPage)\n        }\n      },\n    })\n\n    watch(currentPageBridge, (newValue, oldValue) => {\n      if (isPagerDisabled(newValue) || isPagerLoading(newValue)) {\n        let newVal = newValue\n        if (newValue > oldValue) {\n          newVal += 1\n        } else {\n          newVal -= 1\n        }\n\n        if (newVal > pageCountBridge.value) {\n          newVal = props.infinite ? 1 : oldValue\n        } else if (newVal <= 0) {\n          newVal = props.infinite ? pageCountBridge.value : newValue + 1\n        }\n\n        currentPageBridge.value = newVal\n      }\n    })\n\n    watch(pageCountBridge, (val) => {\n      if (currentPageBridge.value > val) currentPageBridge.value = val\n    })\n\n    const isPagerLoading = (pager = Number.NaN) =>\n      props.loadingItems.includes(pager)\n\n    const isPagerDisabled = (pager = Number.NaN) =>\n      props.disabled || props.disabledItems.includes(pager)\n\n    function handleCurrentChange(val: number) {\n      currentPageBridge.value = val\n    }\n\n    function handleSizeChange(val: number) {\n      pageSizeBridge.value = val\n      const newPageCount = pageCountBridge.value\n      if (currentPageBridge.value > newPageCount) {\n        currentPageBridge.value = newPageCount\n      }\n    }\n\n    function prev() {\n      if (props.disabled) return\n      currentPageBridge.value -= 1\n      emit('prev-click', currentPageBridge.value)\n    }\n\n    function next() {\n      if (props.disabled) return\n      currentPageBridge.value += 1\n      emit('next-click', currentPageBridge.value)\n    }\n\n    function addClass(element: any, cls: string) {\n      if (element) {\n        if (!element.props) {\n          element.props = {}\n        }\n        element.props.class = [element.props.class, cls].join(' ')\n      }\n    }\n\n    provide(paginationContextKey, {\n      pageCount: pageCountBridge,\n      disabled: computed(() => props.disabled),\n      currentPage: currentPageBridge,\n      buttonsDotted: computed(() => props.buttonsDotted),\n      infinite: computed(() => props.infinite),\n      loadingItems: computed(() => props.loadingItems),\n      disabledItems: computed(() => props.disabledItems),\n      isPagerDisabled,\n      isPagerLoading,\n      changeEvent: handleCurrentChange,\n      handleSizeChange,\n    })\n\n    return () => {\n      if (assertValidUsage.value != true) {\n        debugWarn(COMPONENT_NAME, assertValidUsage.value)\n        return null\n      }\n      if (!props.layout.length) return null\n      if (props.hideOnSinglePage && pageCountBridge.value <= 1) return null\n\n      const rootChildren: Array<VNode | VNode[] | null> = []\n      const rightWrapperChildren: Array<VNode | VNode[] | null> = []\n      const rightWrapperRoot = h(\n        'div',\n        { class: ns.e('rightwrapper') },\n        rightWrapperChildren\n      )\n      const TEMPLATE_MAP: Record<\n        Exclude<LayoutKey, '->'>,\n        VNode | VNode[] | null\n      > = {\n        prev: h(Prev, {\n          prevText: props.prevText,\n          prevIcon: props.prevIcon,\n          onClick: prev,\n        }),\n        jumper: h(Jumper),\n        pager: h(Pager, {\n          color: props.color,\n          progress: props.progress,\n          pagerCount: props.pagerCount,\n          onChange: handleCurrentChange,\n        }),\n        next: h(Next, {\n          nextText: props.nextText,\n          nextIcon: props.nextIcon,\n          onClick: next,\n        }),\n        sizes: h(Sizes, {\n          pageSize: pageSizeBridge.value,\n          pageSizes: props.pageSizes,\n        }),\n        slot:\n          slots?.default?.({\n            currentPage: currentPageBridge.value,\n            total: props.total,\n            pageSize: pageSizeBridge.value,\n            pageSizes: props.pageSizes,\n            pagerCount: props.pagerCount,\n          }) ?? null,\n        total: h(Total, { total: isAbsent(props.total) ? 0 : props.total }),\n      }\n\n      const components = props.layout\n        .toString()\n        .split(',')\n        .map((item: string) => item.trim()) as LayoutKey[]\n\n      let haveRightWrapper = false\n\n      components.forEach((c) => {\n        if (c === '->') {\n          haveRightWrapper = true\n          return\n        }\n        if (!haveRightWrapper) {\n          rootChildren.push(TEMPLATE_MAP[c])\n        } else {\n          rightWrapperChildren.push(TEMPLATE_MAP[c])\n        }\n      })\n\n      addClass(rootChildren[0], ns.is('first'))\n      addClass(rootChildren[rootChildren.length - 1], ns.is('last'))\n\n      if (haveRightWrapper && rightWrapperChildren.length > 0) {\n        addClass(rightWrapperChildren[0], ns.is('first'))\n        addClass(\n          rightWrapperChildren[rightWrapperChildren.length - 1],\n          ns.is('last')\n        )\n        rootChildren.push(rightWrapperRoot)\n      }\n      return h(\n        'div',\n        {\n          role: 'pagination',\n          'aria-label': 'pagination',\n          class: [\n            ns.b(),\n            ns.is(props.shape),\n            ns.is('buttons-dotted', props.buttonsDotted),\n            ns.is('not-margin', props.notMargin),\n          ],\n          style: ns.cssVar({\n            color: getVsColor(props.color),\n          }),\n        },\n        rootChildren\n      )\n    }\n  },\n})\n"],"names":[],"mappings":"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"}