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
17 KiB

{"ast":null,"code":"import createGrid from '../builders/build-grid.mjs';\nimport { AUTO_ALIGNMENT, CENTERED_ALIGNMENT, END_ALIGNMENT, START_ALIGNMENT, SMART_ALIGNMENT } from '../defaults.mjs';\nimport { isNumber } from '../../../../utils/types.mjs';\nimport { throwError } from '../../../../utils/error.mjs';\nconst SCOPE = \"ElFixedSizeGrid\";\nconst FixedSizeGrid = createGrid({\n name: \"ElFixedSizeGrid\",\n getColumnPosition: ({\n columnWidth\n }, index) => [columnWidth, index * columnWidth],\n getRowPosition: ({\n rowHeight\n }, index) => [rowHeight, index * rowHeight],\n getEstimatedTotalHeight: ({\n totalRow,\n rowHeight\n }) => rowHeight * totalRow,\n getEstimatedTotalWidth: ({\n totalColumn,\n columnWidth\n }) => columnWidth * totalColumn,\n getColumnOffset: ({\n totalColumn,\n columnWidth,\n width\n }, columnIndex, alignment, scrollLeft, _, scrollBarWidth) => {\n width = Number(width);\n const lastColumnOffset = Math.max(0, totalColumn * columnWidth - width);\n const maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n const minOffset = Math.max(0, columnIndex * columnWidth - width + scrollBarWidth + columnWidth);\n if (alignment === \"smart\") {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n alignment = AUTO_ALIGNMENT;\n } else {\n alignment = CENTERED_ALIGNMENT;\n }\n }\n switch (alignment) {\n case START_ALIGNMENT:\n return maxOffset;\n case END_ALIGNMENT:\n return minOffset;\n case CENTERED_ALIGNMENT:\n {\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n if (middleOffset < Math.ceil(width / 2)) {\n return 0;\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset;\n } else {\n return middleOffset;\n }\n }\n case AUTO_ALIGNMENT:\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n getRowOffset: ({\n rowHeight,\n height,\n totalRow\n }, rowIndex, align, scrollTop, _, scrollBarWidth) => {\n height = Number(height);\n const lastRowOffset = Math.max(0, totalRow * rowHeight - height);\n const maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n const minOffset = Math.max(0, rowIndex * rowHeight - height + scrollBarWidth + rowHeight);\n if (align === SMART_ALIGNMENT) {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = AUTO_ALIGNMENT;\n } else {\n align = CENTERED_ALIGNMENT;\n }\n }\n switch (align) {\n case START_ALIGNMENT:\n return maxOffset;\n case END_ALIGNMENT:\n return minOffset;\n case CENTERED_ALIGNMENT:\n {\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n if (middleOffset < Math.ceil(height / 2)) {\n return 0;\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset;\n } else {\n return middleOffset;\n }\n }\n case AUTO_ALIGNMENT:\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n getColumnStartIndexForOffset: ({\n columnWidth,\n totalColumn\n }, scrollLeft) => Math.max(0, Math.min(totalColumn - 1, Math.floor(scrollLeft / columnWidth))),\n getColumnStopIndexForStartIndex: ({\n columnWidth,\n totalColumn,\n width\n }, startIndex, scrollLeft) => {\n const left = startIndex * columnWidth;\n const visibleColumnsCount = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(totalColumn - 1, startIndex + visibleColumnsCount - 1));\n },\n getRowStartIndexForOffset: ({\n rowHeight,\n totalRow\n }, scrollTop) => Math.max(0, Math.min(totalRow - 1, Math.floor(scrollTop / rowHeight))),\n getRowStopIndexForStartIndex: ({\n rowHeight,\n totalRow,\n height\n }, startIndex, scrollTop) => {\n const top = startIndex * rowHeight;\n const numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(totalRow - 1, startIndex + numVisibleRows - 1));\n },\n initCache: () => void 0,\n clearCache: true,\n validateProps: ({\n columnWidth,\n rowHeight\n }) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (!isNumber(columnWidth)) {\n throwError(SCOPE, `\n \"columnWidth\" must be passed as number,\n instead ${typeof columnWidth} was given.\n `);\n }\n if (!isNumber(rowHeight)) {\n throwError(SCOPE, `\n \"columnWidth\" must be passed as number,\n instead ${typeof rowHeight} was given.\n `);\n }\n }\n }\n});\nexport { FixedSizeGrid as default };","map":{"version":3,"names":["SCOPE","FixedSizeGrid","createGrid","name","getColumnPosition","columnWidth","index","getRowPosition","rowHeight","getEstimatedTotalHeight","totalRow","getEstimatedTotalWidth","totalColumn","getColumnOffset","width","columnIndex","alignment","scrollLeft","_","scrollBarWidth","Number","lastColumnOffset","Math","max","maxOffset","min","minOffset","AUTO_ALIGNMENT","CENTERED_ALIGNMENT","START_ALIGNMENT","END_ALIGNMENT","middleOffset","round","ceil","floor","getRowOffset","height","rowIndex","align","scrollTop","lastRowOffset","SMART_ALIGNMENT","getColumnStartIndexForOffset","getColumnStopIndexForStartIndex","startIndex","left","visibleColumnsCount","getRowStartIndexForOffset","getRowStopIndexForStartIndex","top","numVisibleRows","initCache","clearCache","validateProps","process","env","NODE_ENV","isNumber","throwError"],"sources":["../../../../../../../packages/components/virtual-list/src/components/fixed-size-grid.ts"],"sourcesContent":["import { isNumber, throwError } from '@element-plus/utils'\nimport createGrid from '../builders/build-grid'\n\nimport {\n AUTO_ALIGNMENT,\n CENTERED_ALIGNMENT,\n END_ALIGNMENT,\n SMART_ALIGNMENT,\n START_ALIGNMENT,\n} from '../defaults'\n\nconst SCOPE = 'ElFixedSizeGrid'\n\nconst FixedSizeGrid = createGrid({\n name: 'ElFixedSizeGrid',\n getColumnPosition: ({ columnWidth }, index) => [\n columnWidth as number,\n index * (columnWidth as number),\n ],\n\n getRowPosition: ({ rowHeight }, index) => [\n rowHeight as number,\n index * (rowHeight as number),\n ],\n\n getEstimatedTotalHeight: ({ totalRow, rowHeight }) =>\n (rowHeight as number) * totalRow,\n\n getEstimatedTotalWidth: ({ totalColumn, columnWidth }) =>\n (columnWidth as number) * totalColumn,\n\n getColumnOffset: (\n { totalColumn, columnWidth, width },\n columnIndex,\n alignment,\n scrollLeft,\n _,\n scrollBarWidth\n ) => {\n width = Number(width)\n const lastColumnOffset = Math.max(\n 0,\n totalColumn * (columnWidth as number) - width\n )\n const maxOffset = Math.min(\n lastColumnOffset,\n columnIndex * (columnWidth as number)\n )\n const minOffset = Math.max(\n 0,\n columnIndex * (columnWidth as number) -\n width +\n scrollBarWidth +\n (columnWidth as number)\n )\n\n if (alignment === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n alignment = AUTO_ALIGNMENT\n } else {\n alignment = CENTERED_ALIGNMENT\n }\n }\n\n switch (alignment) {\n case START_ALIGNMENT:\n return maxOffset\n case END_ALIGNMENT:\n return minOffset\n case CENTERED_ALIGNMENT: {\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2)\n if (middleOffset < Math.ceil(width / 2)) {\n return 0\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset\n } else {\n return middleOffset\n }\n }\n case AUTO_ALIGNMENT:\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft\n } else if (minOffset > maxOffset) {\n return minOffset\n } else if (scrollLeft < minOffset) {\n return minOffset\n } else {\n return maxOffset\n }\n }\n },\n\n getRowOffset: (\n { rowHeight, height, totalRow },\n rowIndex,\n align,\n scrollTop,\n _,\n scrollBarWidth\n ): number => {\n height = Number(height)\n const lastRowOffset = Math.max(0, totalRow * (rowHeight as number) - height)\n const maxOffset = Math.min(lastRowOffset, rowIndex * (rowHeight as number))\n const minOffset = Math.max(\n 0,\n rowIndex * (rowHeight as number) -\n height +\n scrollBarWidth +\n (rowHeight as number)\n )\n\n if (align === SMART_ALIGNMENT) {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = AUTO_ALIGNMENT\n } else {\n align = CENTERED_ALIGNMENT\n }\n }\n\n switch (align) {\n case START_ALIGNMENT:\n return maxOffset\n case END_ALIGNMENT:\n return minOffset\n case CENTERED_ALIGNMENT: {\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2)\n if (middleOffset < Math.ceil(height / 2)) {\n return 0\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset\n } else {\n return middleOffset\n }\n }\n case AUTO_ALIGNMENT:\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop\n } else if (minOffset > maxOffset) {\n return minOffset\n } else if (scrollTop < minOffset) {\n return minOffset\n } else {\n return maxOffset\n }\n }\n },\n\n getColumnStartIndexForOffset: ({ columnWidth, totalColumn }, scrollLeft) =>\n Math.max(\n 0,\n Math.min(\n totalColumn - 1,\n Math.floor(scrollLeft / (columnWidth as number))\n )\n ),\n\n getColumnStopIndexForStartIndex: (\n { columnWidth, totalColumn, width },\n startIndex: number,\n scrollLeft: number\n ): number => {\n const left = startIndex * (columnWidth as number)\n const visibleColumnsCount = Math.ceil(\n ((width as number) + scrollLeft - left) / (columnWidth as number)\n )\n return Math.max(\n 0,\n Math.min(totalColumn - 1, startIndex + visibleColumnsCount - 1)\n )\n },\n\n getRowStartIndexForOffset: (\n { rowHeight, totalRow },\n scrollTop: number\n ): number =>\n Math.max(\n 0,\n Math.min(totalRow - 1, Math.floor(scrollTop / (rowHeight as number)))\n ),\n\n getRowStopIndexForStartIndex: (\n { rowHeight, totalRow, height },\n startIndex: number,\n scrollTop: number\n ): number => {\n const top = startIndex * (rowHeight as number)\n const numVisibleRows = Math.ceil(\n ((height as number) + scrollTop - top) / (rowHeight as number)\n )\n return Math.max(\n 0,\n Math.min(\n totalRow - 1,\n startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n )\n )\n },\n /**\n * Fixed size grid does not need this cache\n * Using any to bypass it, TODO: Using type inference to fix this.\n */\n initCache: () => undefined as any,\n\n clearCache: true,\n\n validateProps: ({ columnWidth, rowHeight }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!isNumber(columnWidth)) {\n throwError(\n SCOPE,\n `\n \"columnWidth\" must be passed as number,\n instead ${typeof columnWidth} was given.\n `\n )\n }\n\n if (!isNumber(rowHeight)) {\n throwError(\n SCOPE,\n `\n \"columnWidth\" must be passed as number,\n instead ${typeof rowHeight} was given.\n `\n )\n }\n }\n },\n})\n\nexport default FixedSizeGrid\n"],"mappings":";;;;AASA,MAAMA,KAAK,GAAG,iBAAiB;AAC1B,MAACC,aAAa,GAAGC,UAAU,CAAC;EAC/BC,IAAI,EAAE,iBAAiB;EACvBC,iBAAiB,EAAEA,CAAC;IAAEC;EAAW,CAAE,EAAEC,KAAK,KAAK,CAC7CD,WAAW,EACXC,KAAK,GAAGD,WAAW,CACpB;EACDE,cAAc,EAAEA,CAAC;IAAEC;EAAS,CAAE,EAAEF,KAAK,KAAK,CACxCE,SAAS,EACTF,KAAK,GAAGE,SAAS,CAClB;EACDC,uBAAuB,EAAEA,CAAC;IAAEC,QAAQ;IAAEF;EAAS,CAAE,KAAKA,SAAS,GAAGE,QAAQ;EAC1EC,sBAAsB,EAAEA,CAAC;IAAEC,WAAW;IAAEP;EAAW,CAAE,KAAKA,WAAW,GAAGO,WAAW;EACnFC,eAAe,EAAEA,CAAC;IAAED,WAAW;IAAEP,WAAW;IAAES;EAAK,CAAE,EAAEC,WAAW,EAAEC,SAAS,EAAEC,UAAU,EAAEC,CAAC,EAAEC,cAAc,KAAK;IAC/GL,KAAK,GAAGM,MAAM,CAACN,KAAK,CAAC;IACrB,MAAMO,gBAAgB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEX,WAAW,GAAGP,WAAW,GAAGS,KAAK,CAAC;IACvE,MAAMU,SAAS,GAAGF,IAAI,CAACG,GAAG,CAACJ,gBAAgB,EAAEN,WAAW,GAAGV,WAAW,CAAC;IACvE,MAAMqB,SAAS,GAAGJ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAER,WAAW,GAAGV,WAAW,GAAGS,KAAK,GAAGK,cAAc,GAAGd,WAAW,CAAC;IAC/F,IAAIW,SAAS,KAAK,OAAO,EAAE;MACzB,IAAIC,UAAU,IAAIS,SAAS,GAAGZ,KAAK,IAAIG,UAAU,IAAIO,SAAS,GAAGV,KAAK,EAAE;QACtEE,SAAS,GAAGW,cAAc;MAClC,CAAO,MAAM;QACLX,SAAS,GAAGY,kBAAkB;MACtC;IACA;IACI,QAAQZ,SAAS;MACf,KAAKa,eAAe;QAClB,OAAOL,SAAS;MAClB,KAAKM,aAAa;QAChB,OAAOJ,SAAS;MAClB,KAAKE,kBAAkB;QAAE;UACvB,MAAMG,YAAY,GAAGT,IAAI,CAACU,KAAK,CAACN,SAAS,GAAG,CAACF,SAAS,GAAGE,SAAS,IAAI,CAAC,CAAC;UACxE,IAAIK,YAAY,GAAGT,IAAI,CAACW,IAAI,CAACnB,KAAK,GAAG,CAAC,CAAC,EAAE;YACvC,OAAO,CAAC;UAClB,CAAS,MAAM,IAAIiB,YAAY,GAAGV,gBAAgB,GAAGC,IAAI,CAACY,KAAK,CAACpB,KAAK,GAAG,CAAC,CAAC,EAAE;YAClE,OAAOO,gBAAgB;UACjC,CAAS,MAAM;YACL,OAAOU,YAAY;UAC7B;QACA;MACM,KAAKJ,cAAc;MACnB;QACE,IAAIV,UAAU,IAAIS,SAAS,IAAIT,UAAU,IAAIO,SAAS,EAAE;UACtD,OAAOP,UAAU;QAC3B,CAAS,MAAM,IAAIS,SAAS,GAAGF,SAAS,EAAE;UAChC,OAAOE,SAAS;QAC1B,CAAS,MAAM,IAAIT,UAAU,GAAGS,SAAS,EAAE;UACjC,OAAOA,SAAS;QAC1B,CAAS,MAAM;UACL,OAAOF,SAAS;QAC1B;IACA;EACA,CAAG;EACDW,YAAY,EAAEA,CAAC;IAAE3B,SAAS;IAAE4B,MAAM;IAAE1B;EAAQ,CAAE,EAAE2B,QAAQ,EAAEC,KAAK,EAAEC,SAAS,EAAErB,CAAC,EAAEC,cAAc,KAAK;IAChGiB,MAAM,GAAGhB,MAAM,CAACgB,MAAM,CAAC;IACvB,MAAMI,aAAa,GAAGlB,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEb,QAAQ,GAAGF,SAAS,GAAG4B,MAAM,CAAC;IAChE,MAAMZ,SAAS,GAAGF,IAAI,CAACG,GAAG,CAACe,aAAa,EAAEH,QAAQ,GAAG7B,SAAS,CAAC;IAC/D,MAAMkB,SAAS,GAAGJ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEc,QAAQ,GAAG7B,SAAS,GAAG4B,MAAM,GAAGjB,cAAc,GAAGX,SAAS,CAAC;IACzF,IAAI8B,KAAK,KAAKG,eAAe,EAAE;MAC7B,IAAIF,SAAS,IAAIb,SAAS,GAAGU,MAAM,IAAIG,SAAS,IAAIf,SAAS,GAAGY,MAAM,EAAE;QACtEE,KAAK,GAAGX,cAAc;MAC9B,CAAO,MAAM;QACLW,KAAK,GAAGV,kBAAkB;MAClC;IACA;IACI,QAAQU,KAAK;MACX,KAAKT,eAAe;QAClB,OAAOL,SAAS;MAClB,KAAKM,aAAa;QAChB,OAAOJ,SAAS;MAClB,KAAKE,kBAAkB;QAAE;UACvB,MAAMG,YAAY,GAAGT,IAAI,CAACU,KAAK,CAACN,SAAS,GAAG,CAACF,SAAS,GAAGE,SAAS,IAAI,CAAC,CAAC;UACxE,IAAIK,YAAY,GAAGT,IAAI,CAACW,IAAI,CAACG,MAAM,GAAG,CAAC,CAAC,EAAE;YACxC,OAAO,CAAC;UAClB,CAAS,MAAM,IAAIL,YAAY,GAAGS,aAAa,GAAGlB,IAAI,CAACY,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,EAAE;YAChE,OAAOI,aAAa;UAC9B,CAAS,MAAM;YACL,OAAOT,YAAY;UAC7B;QACA;MACM,KAAKJ,cAAc;MACnB;QACE,IAAIY,SAAS,IAAIb,SAAS,IAAIa,SAAS,IAAIf,SAAS,EAAE;UACpD,OAAOe,SAAS;QAC1B,CAAS,MAAM,IAAIb,SAAS,GAAGF,SAAS,EAAE;UAChC,OAAOE,SAAS;QAC1B,CAAS,MAAM,IAAIa,SAAS,GAAGb,SAAS,EAAE;UAChC,OAAOA,SAAS;QAC1B,CAAS,MAAM;UACL,OAAOF,SAAS;QAC1B;IACA;EACA,CAAG;EACDkB,4BAA4B,EAAEA,CAAC;IAAErC,WAAW;IAAEO;EAAW,CAAE,EAAEK,UAAU,KAAKK,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACG,GAAG,CAACb,WAAW,GAAG,CAAC,EAAEU,IAAI,CAACY,KAAK,CAACjB,UAAU,GAAGZ,WAAW,CAAC,CAAC,CAAC;EACxJsC,+BAA+B,EAAEA,CAAC;IAAEtC,WAAW;IAAEO,WAAW;IAAEE;EAAK,CAAE,EAAE8B,UAAU,EAAE3B,UAAU,KAAK;IAChG,MAAM4B,IAAI,GAAGD,UAAU,GAAGvC,WAAW;IACrC,MAAMyC,mBAAmB,GAAGxB,IAAI,CAACW,IAAI,CAAC,CAACnB,KAAK,GAAGG,UAAU,GAAG4B,IAAI,IAAIxC,WAAW,CAAC;IAChF,OAAOiB,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACG,GAAG,CAACb,WAAW,GAAG,CAAC,EAAEgC,UAAU,GAAGE,mBAAmB,GAAG,CAAC,CAAC,CAAC;EACvF,CAAG;EACDC,yBAAyB,EAAEA,CAAC;IAAEvC,SAAS;IAAEE;EAAQ,CAAE,EAAE6B,SAAS,KAAKjB,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACG,GAAG,CAACf,QAAQ,GAAG,CAAC,EAAEY,IAAI,CAACY,KAAK,CAACK,SAAS,GAAG/B,SAAS,CAAC,CAAC,CAAC;EACzIwC,4BAA4B,EAAEA,CAAC;IAAExC,SAAS;IAAEE,QAAQ;IAAE0B;EAAM,CAAE,EAAEQ,UAAU,EAAEL,SAAS,KAAK;IACxF,MAAMU,GAAG,GAAGL,UAAU,GAAGpC,SAAS;IAClC,MAAM0C,cAAc,GAAG5B,IAAI,CAACW,IAAI,CAAC,CAACG,MAAM,GAAGG,SAAS,GAAGU,GAAG,IAAIzC,SAAS,CAAC;IACxE,OAAOc,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACG,GAAG,CAACf,QAAQ,GAAG,CAAC,EAAEkC,UAAU,GAAGM,cAAc,GAAG,CAAC,CAAC,CAAC;EAC/E,CAAG;EACDC,SAAS,EAAEA,CAAA,KAAM,KAAK,CAAC;EACvBC,UAAU,EAAE,IAAI;EAChBC,aAAa,EAAEA,CAAC;IAAEhD,WAAW;IAAEG;EAAS,CAAE,KAAK;IAC7C,IAAI8C,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAACC,QAAQ,CAACpD,WAAW,CAAC,EAAE;QAC1BqD,UAAU,CAAC1D,KAAK,EAAE;AAC1B;AACA,sBAAsB,OAAOK,WAAW;AACxC,SAAS,CAAC;MACV;MACM,IAAI,CAACoD,QAAQ,CAACjD,SAAS,CAAC,EAAE;QACxBkD,UAAU,CAAC1D,KAAK,EAAE;AAC1B;AACA,sBAAsB,OAAOQ,SAAS;AACtC,SAAS,CAAC;MACV;IACA;EACA;AACA,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}