UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 40.7 kB
{"version":3,"file":"pagination.mjs","sources":["../../../components/pagination/pagination.tsx"],"sourcesContent":["import { Icon } from '@/components/icon'\nimport { NumberInput } from '@/components/number-input'\nimport { Renderer } from '@/components/renderer'\nimport { Select } from '@/components/select'\n\nimport {\n Transition,\n computed,\n defineComponent,\n nextTick,\n onMounted,\n onUpdated,\n reactive,\n ref,\n renderSlot,\n toRef,\n watch\n} from 'vue'\n\nimport {\n createSizeProp,\n emitEvent,\n getCountWord,\n getCountWordOnly,\n useIcons,\n useLocale,\n useNameHelper,\n useProps\n} from '@vexip-ui/config'\nimport { createSlotRender, useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide, isClient, isNull, range } from '@vexip-ui/utils'\nimport { paginationProps } from './props'\n\nconst enum PaginationMode {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right'\n}\n\nexport default defineComponent({\n name: 'Pagination',\n props: paginationProps,\n emits: ['update:active', 'update:page-size'],\n setup(_props, { slots, emit, expose }) {\n const props = useProps('pagination', _props, {\n size: createSizeProp(),\n locale: null,\n total: {\n default: 0,\n validator: value => value >= 0,\n static: true\n },\n noBorder: false,\n background: false,\n pageSize: {\n default: 10,\n validator: value => value > 0\n },\n sizeOptions: () => [10, 20, 50, 100],\n itemCount: {\n default: 7,\n validator: value => Number.isInteger(value) && value > 6\n },\n active: {\n default: 1,\n validator: value => value > 0,\n static: true\n },\n disabled: false,\n disableItem: {\n default: () => false,\n isFunc: true\n },\n turnPageCount: 5,\n itemUnit: null,\n plugins: {\n default: () => [],\n validator: value => Array.isArray(value)\n },\n noTitle: false,\n itemTag: 'li',\n listTag: null,\n slots: () => ({})\n })\n\n const { isRtl } = useRtl()\n const nh = useNameHelper('pagination')\n const icons = useIcons()\n const midPagers = ref<number[]>([])\n const currentActive = ref(props.active)\n const currentPageSize = ref(props.pageSize)\n const mode = ref(PaginationMode.LEFT)\n const inPrevEllipsis = ref(false)\n const inNextEllipsis = ref(false)\n const jumpValue = ref(props.active)\n const itemElList = reactive<HTMLElement[]>([])\n\n const locale = useLocale('pagination', toRef(props, 'locale'))\n\n const { target: wrapper } = useModifier({\n passive: false,\n onKeyDown: (event, modifier) => {\n if (props.disabled) return\n\n decide(\n [\n [\n () => modifier.up || modifier.down || modifier.left || modifier.right,\n () => {\n const sign = modifier.up || modifier.left ? -1 : 1\n\n if (isClient && document.activeElement) {\n const index = itemElList.findIndex(el => el === document.activeElement)\n\n if (!~index) return\n\n const target = itemElList[boundRange(index + sign, 0, itemElList.length - 1)]\n\n target.focus()\n }\n }\n ],\n [\n () => modifier.enter || modifier.space,\n () => {\n if (document && document.activeElement) {\n const index = itemElList.findIndex(el => el === document.activeElement)\n\n if (!~index) {\n const activeClass = nh.bem('item', 'active')\n const activeEl = itemElList.find(el => el.classList.contains(activeClass))\n\n activeEl?.focus()\n }\n }\n }\n ]\n ],\n {\n beforeMatchAny: () => event.preventDefault(),\n afterMatchAny: modifier.resetAll\n }\n )\n }\n })\n\n const className = computed(() => {\n return {\n [nh.b()]: true,\n [nh.bs('vars')]: true,\n [nh.bm('inherit')]: props.inherit,\n [nh.bm(props.size)]: props.size !== 'default',\n [nh.bm('background')]: props.background,\n [nh.bm('no-border')]: props.noBorder,\n [nh.bm('disabled')]: props.disabled\n }\n })\n const pagerCount = computed(() => {\n return Math.ceil(props.total / (currentPageSize.value || 1)) || 1\n })\n const useEllipsis = computed(() => pagerCount.value > props.itemCount)\n const disabledPrev = computed(() => {\n const count = queryEnabledActive(1, 1)\n\n return count >= pagerCount.value || currentActive.value === count\n })\n const disabledNext = computed(() => {\n const count = queryEnabledActive(pagerCount.value, -1)\n\n return count <= 1 || currentActive.value === count\n })\n const prevTurnPageTitle = computed(() => {\n return `${locale.value.prev} ${getCountWord(locale.value.page, props.turnPageCount)}`\n })\n const nextTurnPageTitle = computed(() => {\n return `${locale.value.next} ${getCountWord(locale.value.page, props.turnPageCount)}`\n })\n const prevEllipsisTarget = computed(() => {\n if (!useEllipsis.value) return 0\n\n let active = queryEnabledActive(currentActive.value - props.turnPageCount, -1)\n\n if (active < 1) {\n active = queryEnabledActive(1, 1)\n\n if (active >= currentActive.value) return 0\n }\n\n return active\n })\n const nextEllipsisTarget = computed(() => {\n if (!useEllipsis.value) return 0\n\n let active = queryEnabledActive(currentActive.value + props.turnPageCount, 1)\n\n if (active > pagerCount.value) {\n active = queryEnabledActive(pagerCount.value, -1)\n\n if (active <= currentActive.value) return 0\n }\n\n return active\n })\n const sizeObjectOptions = computed(() => {\n return props.sizeOptions.map(size => {\n return {\n value: size,\n label: `${size} ${locale.value.perPage}`\n }\n })\n })\n const pluginOrders = computed(() => {\n const plugins = props.plugins\n const pagerPosition = plugins.findIndex(isNull)\n\n return {\n total: plugins.findIndex(p => p === 'total') - pagerPosition,\n size: plugins.findIndex(p => p === 'size') - pagerPosition,\n jump: plugins.findIndex(p => p === 'jump') - pagerPosition\n }\n })\n const jumpInputWidth = computed(() => {\n if (!props.plugins.includes('jump')) return 0\n\n let pageCount = 0\n\n if (props.plugins.includes('size')) {\n pageCount = Math.ceil(props.total / (Math.min(...props.sizeOptions) || 10))\n } else {\n pageCount = Math.ceil(props.total / (props.pageSize || 10))\n }\n\n return pageCount.toString().length * 10 + 30\n })\n\n watch(\n () => props.active,\n value => {\n changeActive(value, false)\n }\n )\n watch(() => props.itemCount, computePagers)\n watch(pagerCount, computePagers)\n watch(\n () => props.pageSize,\n value => {\n currentPageSize.value = value\n }\n )\n watch(currentPageSize, (value, prevValue) => {\n emit('update:page-size', value)\n emitEvent(props.onPageSizeChange, value)\n\n // 按当前页的第一条数据计算新的页码\n const anchor = Math.ceil((prevValue * (currentActive.value - 1) + 1) / value)\n\n let active = queryEnabledActive(anchor, 1)\n\n if (active > pagerCount.value) {\n active = queryEnabledActive(anchor - 1, -1)\n\n if (active < 1) active = 0\n }\n\n currentActive.value = active\n computePagers()\n })\n\n expose({ changeActive, handlePrev, handleNext })\n\n onMounted(() => {\n nextTick(computePagers)\n })\n\n onUpdated(() => {\n if (!wrapper.value) return\n\n itemElList.length = 0\n itemElList.push(\n ...Array.from(\n wrapper.value.querySelectorAll<HTMLElement>(\n `${nh.cbe('item')}:not(${nh.cbem('item', 'disabled')})`\n )\n )\n )\n })\n\n function queryEnabledActive(active: number, step: number) {\n step = step / Math.abs(step)\n\n while (props.disableItem(active)) {\n active += step\n\n if (active < 1 || active > pagerCount.value) break\n }\n\n return active\n }\n\n function handleChange(value: number) {\n if (currentActive.value === value) return\n\n currentActive.value = value\n jumpValue.value = value\n\n computePagers()\n emit('update:active', value)\n emitEvent(props.onChange, value)\n }\n\n function changeActive(active: number, focus = true) {\n active = parseInt(active.toString())\n\n if (props.disabled || active < 1 || active > pagerCount.value || props.disableItem(active)) {\n return\n }\n\n handleChange(active)\n\n if (isClient && focus) {\n const activeEl = itemElList.find(el => el === document.activeElement)\n\n activeEl?.blur()\n nextTick(() => {\n itemElList.find(el => el.tabIndex >= 0)?.focus()\n })\n }\n }\n\n function handlePrev() {\n if (!disabledPrev.value && !props.disabled) {\n const active = queryEnabledActive(currentActive.value - 1, -1)\n\n if (active >= 1) changeActive(active)\n }\n }\n\n function handleNext() {\n if (!disabledNext.value && !props.disabled) {\n const active = queryEnabledActive(currentActive.value + 1, 1)\n\n if (active <= pagerCount.value) changeActive(active)\n }\n }\n\n function computePagers() {\n let pagers: number[]\n\n if (pagerCount.value <= props.itemCount) {\n // 未超过最大值,显示所有页号\n pagers = range(pagerCount.value)\n } else {\n const numberCount = props.itemCount - 2 // 显示为数字的页号\n const criticalCount = Math.ceil(props.itemCount / 2) // 切换模式的关键计数\n\n if (currentActive.value < criticalCount) {\n // 出现后侧一个省略号,前侧连续\n pagers = range(numberCount)\n pagers.push(pagerCount.value)\n\n mode.value = PaginationMode.LEFT\n } else if (currentActive.value <= pagerCount.value - criticalCount) {\n // 出现两个省略号,中间连续\n let count = numberCount - 2\n\n // 保持中间数字的页号数目为单数\n if (count % 2 === 0) {\n count -= 1\n }\n\n pagers = range(count, currentActive.value - (count - 1) / 2) // 同 Math.floor(count / 2)\n pagers.unshift(1)\n pagers.push(pagerCount.value)\n\n mode.value = PaginationMode.CENTER\n } else {\n // 出现前侧一个省略号,后侧连续\n pagers = range(numberCount, pagerCount.value - numberCount + 1)\n pagers.unshift(1)\n\n mode.value = PaginationMode.RIGHT\n }\n }\n\n if (pagers.length === 1) {\n midPagers.value = []\n }\n\n midPagers.value = pagers.slice(1, -1)\n }\n\n function enterPrevEllipsis() {\n inPrevEllipsis.value = true\n }\n\n function leavePrevEllipsis() {\n inPrevEllipsis.value = false\n }\n\n function clickPrevEllipsis() {\n if (!props.disabled && prevEllipsisTarget.value) {\n changeActive(prevEllipsisTarget.value)\n }\n }\n\n function enterNextEllipsis() {\n inNextEllipsis.value = true\n }\n\n function leaveNextEllipsis() {\n inNextEllipsis.value = false\n }\n\n function clickNextEllipsis() {\n if (!props.disabled && nextEllipsisTarget.value) {\n changeActive(nextEllipsisTarget.value)\n }\n }\n\n function handleJumpPage(active: number) {\n active = Math.max(Math.min(parseInt(active.toString()), pagerCount.value), 1)\n\n const originActive = active\n\n if (active !== currentActive.value) {\n const step = active > currentActive.value ? 1 : -1\n\n active = queryEnabledActive(originActive, step)\n\n if (step > 0 ? active > pagerCount.value : active < 1) {\n active = queryEnabledActive(originActive, -step)\n\n if (step > 0 ? active < 1 : active > pagerCount.value) {\n active = 0\n }\n }\n\n handleChange(active)\n }\n\n nextTick(() => {\n jumpValue.value = currentActive.value\n })\n }\n\n function renderPrev(Tag: any) {\n const disabled = props.disabled || disabledPrev.value\n const arrow = isRtl.value ? icons.value.angleRight : icons.value.angleLeft\n\n return (\n <Tag\n ref={el => el && !disabledPrev.value && itemElList.push(el as any)}\n class={[\n nh.be('item'),\n nh.bem('item', 'prev'),\n disabled ? nh.bem('item', 'disabled') : ''\n ]}\n title={props.noTitle ? undefined : locale.value.prevPage}\n role={'menuitem'}\n tabindex={'-1'}\n aria-label={locale.value.prevPage}\n aria-hidden={disabled ? 'true' : undefined}\n onClick={handlePrev}\n onKeydownEnter={handlePrev}\n onKeydownSpace={handlePrev}\n >\n {renderSlot(slots, 'prev', { disabled }, () => [\n <Renderer renderer={props.slots.prev} data={{ disabled }}>\n <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n </Renderer>\n ])}\n </Tag>\n )\n }\n\n function renderNext(Tag: any) {\n const disabled = props.disabled || disabledNext.value\n const arrow = isRtl.value ? icons.value.angleLeft : icons.value.angleRight\n\n return (\n <Tag\n ref={el => el && !disabledNext.value && itemElList.push(el as any)}\n class={[\n nh.be('item'),\n nh.bem('item', 'next'),\n disabled ? nh.bem('item', 'disabled') : ''\n ]}\n title={props.noTitle ? undefined : locale.value.nextPage}\n role={'menuitem'}\n tabindex={'-1'}\n aria-label={locale.value.nextPage}\n aria-hidden={disabled ? 'true' : undefined}\n onClick={handleNext}\n onKeydownEnter={handleNext}\n onKeydownSpace={handleNext}\n >\n {renderSlot(slots, 'next', { disabled }, () => [\n <Renderer renderer={props.slots.next} data={{ disabled }}>\n <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n </Renderer>\n ])}\n </Tag>\n )\n }\n\n function renderPrevEllipsis(Tag: any) {\n if (!useEllipsis.value || mode.value === PaginationMode.LEFT) return null\n\n const disabled = props.disabled || !prevEllipsisTarget.value\n\n return (\n <Tag\n ref={el => el && prevEllipsisTarget.value && itemElList.push(el as any)}\n class={{\n [nh.be('item')]: true,\n [nh.bem('item', 'more')]: true,\n [nh.bem('item', 'disabled')]: disabled\n }}\n title={props.noTitle ? undefined : prevTurnPageTitle.value}\n role={'menuitem'}\n tabindex={'-1'}\n aria-label={prevTurnPageTitle.value}\n onClick={clickPrevEllipsis}\n onKeydownEnter={clickPrevEllipsis}\n onKeydownSpace={clickPrevEllipsis}\n onMouseenter={enterPrevEllipsis}\n onMouseleave={leavePrevEllipsis}\n >\n {createSlotRender(slots, ['prev-jump', 'prevJump'], () => {\n const arrow = isRtl.value ? icons.value.anglesRight : icons.value.anglesLeft\n\n return (\n <Transition name={nh.ns('fade')}>\n {!disabled && inPrevEllipsis.value ? (\n <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n ) : (\n <Icon\n {...icons.value.ellipsis}\n scale={+(icons.value.ellipsis.scale || 1)}\n style={'position: absolute'}\n ></Icon>\n )}\n </Transition>\n )\n })({ disabled, entered: inPrevEllipsis.value })}\n </Tag>\n )\n }\n\n function renderNextEllipsis(Tag: any) {\n if (!useEllipsis.value || mode.value === PaginationMode.RIGHT) return null\n\n const disabled = props.disabled || !nextEllipsisTarget.value\n\n return (\n <Tag\n ref={el => el && nextEllipsisTarget.value && itemElList.push(el as any)}\n class={{\n [nh.be('item')]: true,\n [nh.bem('item', 'more')]: true,\n [nh.bem('item', 'disabled')]: disabled\n }}\n title={props.noTitle ? undefined : nextTurnPageTitle.value}\n role={'menuitem'}\n tabindex={'-1'}\n aria-label={nextTurnPageTitle.value}\n onClick={clickNextEllipsis}\n onKeydownEnter={clickNextEllipsis}\n onKeydownSpace={clickNextEllipsis}\n onMouseenter={enterNextEllipsis}\n onMouseleave={leaveNextEllipsis}\n >\n {createSlotRender(slots, ['next-jump', 'nextJump'], () => {\n const arrow = isRtl.value ? icons.value.anglesLeft : icons.value.anglesRight\n\n return (\n <Transition name={nh.ns('fade')}>\n {!disabled && inNextEllipsis.value ? (\n <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n ) : (\n <Icon\n {...icons.value.ellipsis}\n scale={+(icons.value.ellipsis.scale || 1)}\n style={'position: absolute'}\n ></Icon>\n )}\n </Transition>\n )\n })({ disabled: !nextEllipsisTarget.value, entered: inNextEllipsis.value })}\n </Tag>\n )\n }\n\n function renderItem(Tag: any, page: number) {\n const disabled = props.disabled || props.disableItem(page)\n const active = currentActive.value === page\n\n return (\n <Tag\n ref={el => el && itemElList.push(el as any)}\n class={{\n [nh.be('item')]: true,\n [nh.bem('item', 'disabled')]: disabled,\n [nh.bem('item', 'active')]: active\n }}\n title={props.noTitle ? undefined : page}\n role={'menuitemradio'}\n tabindex={active ? '0' : '-1'}\n aria-posinset={page}\n aria-setsize={pagerCount.value}\n aria-disabled={disabled ? 'true' : undefined}\n onClick={() => changeActive(page)}\n onKeydownEnter={() => changeActive(page)}\n onKeydownSpace={() => changeActive(page)}\n >\n {renderSlot(slots, 'item', { page, disabled, active }, () => [\n <Renderer renderer={props.slots.item} data={{ page, disabled, active }}>\n {page}\n </Renderer>\n ])}\n </Tag>\n )\n }\n\n function renderTotalPlugin() {\n if (!props.plugins.includes('total')) return null\n\n return (\n <div\n class={[nh.be('total'), pluginOrders.value.total < 0 && nh.bem('total', 'prefix')]}\n style={{ order: pluginOrders.value.total }}\n >\n {`${locale.value.total} ${getCountWord(\n props.itemUnit ?? locale.value.itemUnit,\n props.total\n )}`}\n </div>\n )\n }\n\n function renderSizePlugin() {\n if (!props.plugins.includes('size')) return null\n\n return (\n <div\n class={[nh.be('size'), pluginOrders.value.size < 0 && nh.bem('size', 'prefix')]}\n style={{ order: pluginOrders.value.size }}\n >\n <Select\n v-model:value={currentPageSize.value}\n inherit\n class={nh.be('size-select')}\n options={sizeObjectOptions.value}\n filter={false}\n multiple={false}\n clearable={false}\n ></Select>\n </div>\n )\n }\n\n function renderJumpPlugin() {\n if (!props.plugins.includes('jump')) return null\n\n return (\n <div\n class={[nh.be('jump'), pluginOrders.value.jump < 0 && nh.bem('jump', 'prefix')]}\n style={{ order: pluginOrders.value.jump }}\n >\n {locale.value.jumpTo}\n <NumberInput\n v-model:value={jumpValue.value}\n inherit\n class={nh.be('jump-input')}\n clearable={false}\n sync={false}\n style={{ width: `${jumpInputWidth.value}px` }}\n onChange={handleJumpPage}\n ></NumberInput>\n {getCountWordOnly(locale.value.page, 1)}\n </div>\n )\n }\n\n return () => {\n const ItemTag = props.itemTag || 'li'\n const ListTag = (props.listTag as any) || (ItemTag === 'li' ? 'ul' : 'div')\n\n return (\n <div class={className.value}>\n <ListTag\n ref={wrapper}\n class={nh.be('list')}\n role={'menubar'}\n aria-label={'Pagination'}\n aria-disabled={props.disabled ? 'true' : undefined}\n >\n {renderPrev(ItemTag)}\n {renderItem(ItemTag, 1)}\n {renderPrevEllipsis(ItemTag)}\n {midPagers.value.map(page => renderItem(ItemTag, page))}\n {renderNextEllipsis(ItemTag)}\n {pagerCount.value > 1 && renderItem(ItemTag, pagerCount.value)}\n {renderNext(ItemTag)}\n </ListTag>\n {renderTotalPlugin()}\n {renderSizePlugin()}\n {renderJumpPlugin()}\n </div>\n )\n }\n }\n})\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","PaginationMode","defineComponent","name","props","paginationProps","emits","setup","_props","slots","emit","expose","useProps","size","createSizeProp","locale","total","default","validator","value","static","noBorder","background","pageSize","sizeOptions","itemCount","Number","isInteger","active","disabled","disableItem","isFunc","turnPageCount","itemUnit","plugins","Array","isArray","noTitle","itemTag","listTag","isRtl","useRtl","nh","useNameHelper","icons","useIcons","midPagers","ref","currentActive","currentPageSize","mode","LEFT","inPrevEllipsis","inNextEllipsis","jumpValue","itemElList","reactive","useLocale","toRef","target","wrapper","useModifier","passive","onKeyDown","event","modifier","decide","up","down","left","right","sign","isClient","document","activeElement","index","findIndex","el","boundRange","length","focus","enter","space","activeClass","bem","activeEl","find","classList","contains","beforeMatchAny","preventDefault","afterMatchAny","resetAll","className","computed","b","bs","bm","inherit","pagerCount","Math","ceil","useEllipsis","disabledPrev","count","queryEnabledActive","disabledNext","prevTurnPageTitle","prev","getCountWord","page","nextTurnPageTitle","next","prevEllipsisTarget","nextEllipsisTarget","sizeObjectOptions","map","label","perPage","pluginOrders","pagerPosition","isNull","p","jump","jumpInputWidth","includes","pageCount","min","watch","changeActive","computePagers","prevValue","emitEvent","onPageSizeChange","anchor","handlePrev","handleNext","onMounted","nextTick","onUpdated","push","from","querySelectorAll","cbe","cbem","step","abs","handleChange","onChange","parseInt","blur","tabIndex","pagers","range","numberCount","criticalCount","unshift","CENTER","RIGHT","slice","enterPrevEllipsis","leavePrevEllipsis","clickPrevEllipsis","enterNextEllipsis","leaveNextEllipsis","clickNextEllipsis","handleJumpPage","max","originActive","renderPrev","Tag","_slot","arrow","angleRight","angleLeft","_createVNode","be","undefined","prevPage","renderSlot","Renderer","Icon","_mergeProps","scale","renderNext","_slot2","nextPage","renderPrevEllipsis","_slot3","createSlotRender","anglesRight","anglesLeft","Transition","ns","ellipsis","entered","renderNextEllipsis","_slot4","renderItem","_slot5","onClick","onKeydownEnter","onKeydownSpace","item","renderTotalPlugin","order","renderSizePlugin","Select","$event","renderJumpPlugin","jumpTo","NumberInput","width","getCountWordOnly","ItemTag","ListTag"],"mappings":"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"}