You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 lines
9.9 KiB

{"ast":null,"code":"import createList from '../builders/build-list.mjs';\nimport { isHorizontal } from '../utils.mjs';\nimport { AUTO_ALIGNMENT, CENTERED_ALIGNMENT, END_ALIGNMENT, START_ALIGNMENT, SMART_ALIGNMENT } from '../defaults.mjs';\nimport { isString } from '@vue/shared';\nimport { throwError } from '../../../../utils/error.mjs';\nconst FixedSizeList = createList({\n name: \"ElFixedSizeList\",\n getItemOffset: ({\n itemSize\n }, index) => index * itemSize,\n getItemSize: ({\n itemSize\n }) => itemSize,\n getEstimatedTotalSize: ({\n total,\n itemSize\n }) => itemSize * total,\n getOffset: ({\n height,\n total,\n itemSize,\n layout,\n width\n }, index, alignment, scrollOffset) => {\n const size = isHorizontal(layout) ? width : height;\n if (process.env.NODE_ENV !== \"production\" && isString(size)) {\n throwError(\"[ElVirtualList]\", `\n You should set\n width/height\n to number when your layout is\n horizontal/vertical\n `);\n }\n const lastItemOffset = Math.max(0, total * itemSize - size);\n const maxOffset = Math.min(lastItemOffset, index * itemSize);\n const minOffset = Math.max(0, (index + 1) * itemSize - size);\n if (alignment === SMART_ALIGNMENT) {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n alignment = AUTO_ALIGNMENT;\n } else {\n alignment = CENTERED_ALIGNMENT;\n }\n }\n switch (alignment) {\n case START_ALIGNMENT:\n {\n return maxOffset;\n }\n case END_ALIGNMENT:\n {\n return minOffset;\n }\n case CENTERED_ALIGNMENT:\n {\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n if (middleOffset < Math.ceil(size / 2)) {\n return 0;\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset;\n } else {\n return middleOffset;\n }\n }\n case AUTO_ALIGNMENT:\n default:\n {\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n }\n },\n getStartIndexForOffset: ({\n total,\n itemSize\n }, offset) => Math.max(0, Math.min(total - 1, Math.floor(offset / itemSize))),\n getStopIndexForStartIndex: ({\n height,\n total,\n itemSize,\n layout,\n width\n }, startIndex, scrollOffset) => {\n const offset = startIndex * itemSize;\n const size = isHorizontal(layout) ? width : height;\n const numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(total - 1, startIndex + numVisibleItems - 1));\n },\n initCache() {\n return void 0;\n },\n clearCache: true,\n validateProps() {}\n});\nexport { FixedSizeList as default };","map":{"version":3,"names":["FixedSizeList","createList","name","getItemOffset","itemSize","index","getItemSize","getEstimatedTotalSize","total","getOffset","height","layout","width","alignment","scrollOffset","size","isHorizontal","process","env","NODE_ENV","isString","throwError","lastItemOffset","Math","max","maxOffset","min","minOffset","SMART_ALIGNMENT","AUTO_ALIGNMENT","CENTERED_ALIGNMENT","START_ALIGNMENT","END_ALIGNMENT","middleOffset","round","ceil","floor","getStartIndexForOffset","offset","getStopIndexForStartIndex","startIndex","numVisibleItems","initCache","clearCache","validateProps"],"sources":["../../../../../../../packages/components/virtual-list/src/components/fixed-size-list.ts"],"sourcesContent":["import { isString, throwError } from '@element-plus/utils'\nimport buildList from '../builders/build-list'\nimport { isHorizontal } from '../utils'\nimport {\n AUTO_ALIGNMENT,\n CENTERED_ALIGNMENT,\n END_ALIGNMENT,\n SMART_ALIGNMENT,\n START_ALIGNMENT,\n} from '../defaults'\n\nimport type { VirtualizedListProps } from '../props'\n\ntype Props = VirtualizedListProps\n\nconst FixedSizeList = buildList({\n name: 'ElFixedSizeList',\n getItemOffset: ({ itemSize }, index) => index * (itemSize as number),\n\n getItemSize: ({ itemSize }) => itemSize as number,\n\n getEstimatedTotalSize: ({ total, itemSize }) => (itemSize as number) * total,\n\n getOffset: (\n { height, total, itemSize, layout, width },\n index,\n alignment,\n scrollOffset\n ) => {\n const size = (isHorizontal(layout) ? width : height) as number\n if (process.env.NODE_ENV !== 'production' && isString(size)) {\n throwError(\n '[ElVirtualList]',\n `\n You should set\n width/height\n to number when your layout is\n horizontal/vertical\n `\n )\n }\n const lastItemOffset = Math.max(0, total * (itemSize as number) - size)\n const maxOffset = Math.min(lastItemOffset, index * (itemSize as number))\n const minOffset = Math.max(0, (index + 1) * (itemSize as number) - size)\n\n if (alignment === SMART_ALIGNMENT) {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n alignment = AUTO_ALIGNMENT\n } else {\n alignment = CENTERED_ALIGNMENT\n }\n }\n\n switch (alignment) {\n case START_ALIGNMENT: {\n return maxOffset\n }\n case END_ALIGNMENT: {\n return minOffset\n }\n case CENTERED_ALIGNMENT: {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2)\n if (middleOffset < Math.ceil(size / 2)) {\n return 0 // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset // near the end\n } else {\n return middleOffset\n }\n }\n case AUTO_ALIGNMENT:\n default: {\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset\n } else if (scrollOffset < minOffset) {\n return minOffset\n } else {\n return maxOffset\n }\n }\n }\n },\n\n getStartIndexForOffset: ({ total, itemSize }, offset) =>\n Math.max(0, Math.min(total - 1, Math.floor(offset / (itemSize as number)))),\n\n getStopIndexForStartIndex: (\n { height, total, itemSize, layout, width }: Props,\n startIndex: number,\n scrollOffset: number\n ) => {\n const offset = startIndex * (itemSize as number)\n const size = isHorizontal(layout) ? width : height\n const numVisibleItems = Math.ceil(\n ((size as number) + scrollOffset - offset) / (itemSize as number)\n )\n return Math.max(\n 0,\n Math.min(\n total - 1,\n // because startIndex is inclusive, so in order to prevent array outbound indexing\n // we need to - 1 to prevent outbound behavior\n startIndex + numVisibleItems - 1\n )\n )\n },\n\n /**\n * Fixed size list does not need this cache\n * Using any to bypass it, TODO: Using type inference to fix this.\n */\n initCache() {\n return undefined as any\n },\n\n clearCache: true,\n\n validateProps() {\n //\n },\n})\n\nexport type FixedSizeListInstance = InstanceType<typeof FixedSizeList>\nexport default FixedSizeList\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}