{"version":3,"file":"UPagination.mjs","names":["makeComponentProps","makeTagProps","genericComponent","propsFactory","useRender","ref","computed","onMounted","UntitledColorTypes","UButton","UPaginationNumber","useEventListener","throttle","makeUPaginationProps","_objectSpread","modelValue","type","String","required","shape","align","undefined","pagesCount","UPagination","name","props","emits","change","value","updateModelValue","setup","_ref","emit","isMinimalPagination","containerWidth","paginationContainer","containerWidthBreakPoint","count","parseInt","numbers","Array","from","_","index","updateActivePage","pageNumber","toString","activePageIndex","getDisplayedPages","centralPage","displayedLeftPages","displayedRightPages","slice","concat","_toConsumableArray","goToPreviousPage","goToNextPage","pageCount","updateContainerWidth","console","log","computedStyle","getComputedStyle","margin","parseFloat","marginLeft","marginRight","clientWidth","window","alignClasses","_ref2","_defineProperty","prependButtonClasses","_ref3","buttonType","linkGray","secondaryGray","appendButtonClasses","_ref4","_createVNode","_default","map","page","onClick"],"sources":["../../../src/components/UPagination/UPagination.tsx"],"sourcesContent":["import { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\nimport { genericComponent, propsFactory, useRender } from '@/utils'\nimport { ExtractPropTypes, PropType, ref, computed, onMounted } from 'vue'\nimport UntitledColorTypes from '@/types/untitledColorTypes'\nimport { UButton } from '@/components'\nimport { UPaginationNumber } from '@/components'\nimport { useEventListener } from '@vueuse/core'\nimport { throttle } from '@/utils/throttle'\n\nexport const makeUPaginationProps = propsFactory(\n  {\n    modelValue: {\n      type: String,\n      default: '0',\n      required: false,\n    },\n    type: {\n      type: String,\n      default: 'default',\n      required: false,\n    },\n    shape: {\n      type: String,\n      default: 'square',\n      required: false,\n    },\n    align: {\n      type: [String, undefined] as PropType<string | undefined>,\n      required: false,\n    },\n    pagesCount: {\n      type: String,\n      default: '0',\n      required: false,\n    },\n    ...makeComponentProps(),\n    ...makeTagProps(),\n  },\n  'UPagination'\n)\n\nexport type UPaginationProps = ExtractPropTypes<typeof makeUPaginationProps>\n\nexport const UPagination = genericComponent()({\n  name: 'UPagination',\n\n  props: makeUPaginationProps(),\n\n  emits: {\n    change: (value: number) => true,\n    'update:modelValue': (value: string) => true,\n  },\n\n  setup(props, { emit }) {\n    const isMinimalPagination = ref(false)\n    const containerWidth = ref(0)\n    const paginationContainer = ref<HTMLElement | null>(null)\n    const containerWidthBreakPoint = 640\n    const count = parseInt(props.pagesCount, 10)\n    const numbers = Array.from(Array(count), (_, index) => index + 1)\n\n    const updateActivePage = (pageNumber: number) => {\n      emit('change', pageNumber)\n      emit('update:modelValue', pageNumber.toString())\n    }\n\n    const activePageIndex = computed(() => {\n      return parseInt(props.modelValue, 10)\n    })\n\n    const getDisplayedPages = computed(() => {\n      if (count <= 6) {\n        return numbers\n      }\n\n      const centralPage = count / 2\n      let displayedLeftPages: number[] = []\n      let displayedRightPages: number[] = []\n\n      if (activePageIndex.value >= centralPage) {\n        displayedLeftPages = numbers.slice(0, 3)\n        displayedRightPages = [\n          numbers[activePageIndex.value - 2],\n          numbers[activePageIndex.value - 1],\n          numbers[activePageIndex.value],\n        ]\n      } else if (activePageIndex.value < centralPage) {\n        displayedLeftPages = [\n          numbers[activePageIndex.value - 2],\n          numbers[activePageIndex.value - 1],\n          numbers[activePageIndex.value],\n        ]\n        displayedRightPages = numbers.slice(-3)\n      }\n\n      if (activePageIndex.value === 1) {\n        displayedLeftPages = numbers.slice(0, 3)\n      }\n\n      if (activePageIndex.value === count) {\n        displayedRightPages = numbers.slice(-3)\n      }\n\n      return [...displayedLeftPages, '...', ...displayedRightPages]\n    })\n\n    const goToPreviousPage = () => {\n      if (activePageIndex.value) {\n        updateActivePage(activePageIndex.value - 1)\n      }\n    }\n\n    const goToNextPage = () => {\n      const pageCount = parseInt(props.pagesCount, 10)\n      if (activePageIndex.value < pageCount) {\n        updateActivePage(activePageIndex.value + 1)\n      }\n    }\n\n    const updateContainerWidth = () => {\n      console.log('Called!')\n      if (!paginationContainer.value) {\n        return false\n      }\n\n      const computedStyle = getComputedStyle(paginationContainer.value)\n      const margin =\n        parseFloat(computedStyle.marginLeft) +\n        parseFloat(computedStyle.marginRight)\n      containerWidth.value = paginationContainer.value.clientWidth + margin\n\n      isMinimalPagination.value =\n        containerWidth.value <= containerWidthBreakPoint\n    }\n\n    onMounted(() => {\n      updateContainerWidth()\n    })\n\n    useEventListener(window, 'resize', throttle(updateContainerWidth, 100))\n\n    const alignClasses = computed(() => ({\n      ['left-0']: props.align === 'left',\n      ['right-0']: props.align === 'right',\n      ['transform left-1/2 transform -translate-x-1/2']:\n        props.align === 'center' ||\n        props.align === undefined ||\n        isMinimalPagination.value,\n    }))\n\n    const prependButtonClasses = computed(() => ({\n      ['absolute']: props.align === 'left' || props.align === 'right',\n      ['left-0']: props.align === 'right',\n      ['right-72']: props.align === 'left',\n    }))\n\n    const buttonType = computed(() => {\n      return props.type === 'default' && !isMinimalPagination.value\n        ? UntitledColorTypes.linkGray\n        : UntitledColorTypes.secondaryGray\n    })\n\n    const appendButtonClasses = computed(() => ({\n      ['absolute']: props.align === 'left' || props.align === 'right',\n      ['left-99']: props.align === 'right',\n      ['right-0']: props.align === 'left',\n    }))\n\n    useRender(() => {\n      return (\n        <div ref={paginationContainer} class={[props.class, 'relative']}>\n          <div class=\"w-full flex justify-between items-center\">\n            <div class={prependButtonClasses.value}>\n              <UButton\n                class=\"previous\"\n                prependIcon={\n                  props.type === 'default' ||\n                  (props.type === 'minimal' && props.align === undefined) ||\n                  isMinimalPagination.value\n                    ? 'arrowLeft'\n                    : ''\n                }\n                type={buttonType.value}\n                onClick={goToPreviousPage}\n              >\n                {!isMinimalPagination.value ? 'Previous' : null}\n              </UButton>\n            </div>\n\n            {(props.align === undefined || props.align === 'center') &&\n            !isMinimalPagination.value ? (\n              <div class=\"w-fit flex justify-center gap-0 items-center\">\n                {getDisplayedPages.value.map((page, index) => (\n                  <UPaginationNumber\n                    key={index}\n                    shape={props.shape}\n                    is-active={page === numbers[activePageIndex.value - 1]}\n                    onClick={() => updateActivePage(page as number)}\n                    class={page === '...' ? 'pointer-events-none' : ''}\n                  >\n                    {page}\n                  </UPaginationNumber>\n                ))}\n              </div>\n            ) : null}\n            {props.align === 'left' ||\n            props.align === 'right' ||\n            isMinimalPagination.value ? (\n              <div\n                class={[\n                  alignClasses.value,\n                  'absolute text-text-sm text-gray-700 font-medium',\n                ]}\n              >\n                {'Page ' +\n                  (activePageIndex.value + 1) +\n                  ' of ' +\n                  props.pagesCount}\n              </div>\n            ) : null}\n\n            <div class={appendButtonClasses.value}>\n              <UButton\n                class=\"next\"\n                appendIcon={\n                  props.type === 'default' ||\n                  (props.type === 'minimal' && props.align === undefined) ||\n                  isMinimalPagination.value\n                    ? 'arrowRight'\n                    : ''\n                }\n                type={buttonType.value}\n                onClick={goToNextPage}\n              >\n                {!isMinimalPagination.value ? 'Next' : null}\n              </UButton>\n            </div>\n          </div>\n        </div>\n      )\n    })\n\n    return {\n      count,\n      updateActivePage,\n      goToNextPage,\n      goToPreviousPage,\n    }\n  },\n})\n\nexport type UPagination = InstanceType<typeof UPagination>\n"],"mappings":"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"}