@react-stately/layout 3.13.10-nightly.4681 → 3.13.10-nightly.4683
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ListLayout.main.js +22 -21
- package/dist/ListLayout.main.js.map +1 -1
- package/dist/ListLayout.mjs +22 -21
- package/dist/ListLayout.module.js +22 -21
- package/dist/ListLayout.module.js.map +1 -1
- package/dist/TableLayout.main.js +5 -5
- package/dist/TableLayout.main.js.map +1 -1
- package/dist/TableLayout.mjs +5 -5
- package/dist/TableLayout.module.js +5 -5
- package/dist/TableLayout.module.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/ListLayout.ts +28 -21
- package/src/TableLayout.ts +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-stately/layout/src/TableLayout.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DropTarget, Key} from '@react-types/shared';\nimport {getChildNodes} from '@react-stately/collections';\nimport {GridNode} from '@react-types/grid';\nimport {InvalidationContext, LayoutInfo, Point, Rect, Size} from '@react-stately/virtualizer';\nimport {LayoutNode, ListLayout, ListLayoutOptions, ListLayoutProps} from './ListLayout';\nimport {TableCollection} from '@react-types/table';\nimport {TableColumnLayout} from '@react-stately/table';\n\nexport interface TableLayoutOptions<T> extends ListLayoutOptions<T> {\n scrollContainer?: 'table' | 'body'\n}\n\nexport interface TableLayoutProps extends ListLayoutProps {\n columnWidths?: Map<Key, number>\n}\n\nexport class TableLayout<T> extends ListLayout<T> {\n collection: TableCollection<T>;\n lastCollection: TableCollection<T>;\n columnWidths: Map<Key, number>;\n stickyColumnIndices: number[];\n isLoading = false;\n lastPersistedKeys: Set<Key> = null;\n persistedIndices: Map<Key, number[]> = new Map();\n scrollContainer: 'table' | 'body';\n private disableSticky: boolean;\n\n constructor(options: TableLayoutOptions<T>) {\n super(options);\n this.scrollContainer = options.scrollContainer || 'table';\n this.stickyColumnIndices = [];\n this.disableSticky = this.checkChrome105();\n }\n\n private columnsChanged(newCollection: TableCollection<T>, oldCollection: TableCollection<T> | null) {\n return !oldCollection || \n newCollection.columns !== oldCollection.columns &&\n newCollection.columns.length !== oldCollection.columns.length ||\n newCollection.columns.some((c, i) =>\n c.key !== oldCollection.columns[i].key ||\n c.props.width !== oldCollection.columns[i].props.width ||\n c.props.minWidth !== oldCollection.columns[i].props.minWidth ||\n c.props.maxWidth !== oldCollection.columns[i].props.maxWidth\n );\n }\n\n validate(invalidationContext: InvalidationContext<TableLayoutProps>): void {\n let newCollection = this.virtualizer.collection as TableCollection<T>;\n\n // If columnWidths were provided via layoutOptions, update those.\n // Otherwise, calculate column widths ourselves.\n if (invalidationContext.layoutOptions?.columnWidths) {\n if (invalidationContext.layoutOptions.columnWidths !== this.columnWidths) {\n this.columnWidths = invalidationContext.layoutOptions.columnWidths;\n invalidationContext.sizeChanged = true;\n }\n } else if (invalidationContext.sizeChanged || this.columnsChanged(newCollection, this.collection)) {\n let columnLayout = new TableColumnLayout({});\n this.columnWidths = columnLayout.buildColumnWidths(this.virtualizer.visibleRect.width, newCollection, new Map());\n invalidationContext.sizeChanged = true;\n }\n\n super.validate(invalidationContext);\n }\n\n protected buildCollection(): LayoutNode[] {\n // Track whether we were previously loading. This is used to adjust the animations of async loading vs inserts.\n let loadingState = this.collection.body.props.loadingState;\n this.isLoading = loadingState === 'loading' || loadingState === 'loadingMore';\n this.stickyColumnIndices = [];\n\n for (let column of this.collection.columns) {\n // The selection cell and any other sticky columns always need to be visible.\n // In addition, row headers need to be in the DOM for accessibility labeling.\n if (column.props.isDragButtonCell || column.props.isSelectionCell || this.collection.rowHeaderColumnKeys.has(column.key)) {\n this.stickyColumnIndices.push(column.index);\n }\n }\n\n let header = this.buildColumnHeader();\n let body = this.buildBody(this.scrollContainer === 'body' ? 0 : header.layoutInfo.rect.height);\n this.lastPersistedKeys = null;\n\n body.layoutInfo.rect.width = Math.max(header.layoutInfo.rect.width, body.layoutInfo.rect.width);\n this.contentSize = new Size(body.layoutInfo.rect.width, body.layoutInfo.rect.maxY);\n return [\n header,\n body\n ];\n }\n\n private buildColumnHeader(): LayoutNode {\n let rect = new Rect(0, 0, 0, 0);\n let layoutInfo = new LayoutInfo('header', this.collection.head?.key ?? 'header', rect);\n layoutInfo.isSticky = true;\n layoutInfo.zIndex = 1;\n\n let y = 0;\n let width = 0;\n let children: LayoutNode[] = [];\n for (let headerRow of this.collection.headerRows) {\n let layoutNode = this.buildChild(headerRow, 0, y, layoutInfo.key);\n layoutNode.layoutInfo.parentKey = layoutInfo.key;\n y = layoutNode.layoutInfo.rect.maxY;\n width = Math.max(width, layoutNode.layoutInfo.rect.width);\n layoutNode.index = children.length;\n children.push(layoutNode);\n }\n\n rect.width = width;\n rect.height = y;\n\n this.layoutInfos.set(layoutInfo.key, layoutInfo);\n\n return {\n layoutInfo,\n children,\n validRect: layoutInfo.rect\n };\n }\n\n private buildHeaderRow(headerRow: GridNode<T>, x: number, y: number): LayoutNode {\n let rect = new Rect(0, y, 0, 0);\n let row = new LayoutInfo('headerrow', headerRow.key, rect);\n\n let height = 0;\n let columns: LayoutNode[] = [];\n for (let cell of getChildNodes(headerRow, this.collection)) {\n let layoutNode = this.buildChild(cell, x, y, row.key);\n layoutNode.layoutInfo.parentKey = row.key;\n x = layoutNode.layoutInfo.rect.maxX;\n height = Math.max(height, layoutNode.layoutInfo.rect.height);\n layoutNode.index = columns.length;\n columns.push(layoutNode);\n }\n for (let [i, layout] of columns.entries()) {\n layout.layoutInfo.zIndex = columns.length - i + 1;\n }\n\n this.setChildHeights(columns, height);\n\n rect.height = height;\n rect.width = x;\n\n return {\n layoutInfo: row,\n children: columns,\n validRect: rect\n };\n }\n\n private setChildHeights(children: LayoutNode[], height: number) {\n for (let child of children) {\n if (child.layoutInfo.rect.height !== height) {\n // Need to copy the layout info before we mutate it.\n child.layoutInfo = child.layoutInfo.copy();\n this.layoutInfos.set(child.layoutInfo.key, child.layoutInfo);\n\n child.layoutInfo.rect.height = height;\n }\n }\n }\n\n // used to get the column widths when rendering to the DOM\n private getRenderedColumnWidth(node: GridNode<T>) {\n let colspan = node.colspan ?? 1;\n let colIndex = node.colIndex ?? node.index;\n let width = 0;\n for (let i = colIndex; i < colIndex + colspan; i++) {\n let column = this.collection.columns[i];\n if (column?.key != null) {\n width += this.columnWidths.get(column.key);\n }\n }\n\n return width;\n }\n\n private getEstimatedHeight(node: GridNode<T>, width: number, height: number, estimatedHeight: number) {\n let isEstimated = false;\n\n // If no explicit height is available, use an estimated height.\n if (height == null) {\n // If a previous version of this layout info exists, reuse its height.\n // Mark as estimated if the size of the overall collection view changed,\n // or the content of the item changed.\n let previousLayoutNode = this.layoutNodes.get(node.key);\n if (previousLayoutNode) {\n height = previousLayoutNode.layoutInfo.rect.height;\n isEstimated = node !== previousLayoutNode.node || width !== previousLayoutNode.layoutInfo.rect.width || previousLayoutNode.layoutInfo.estimatedSize;\n } else {\n height = estimatedHeight;\n isEstimated = true;\n }\n }\n\n return {height, isEstimated};\n }\n\n private buildColumn(node: GridNode<T>, x: number, y: number): LayoutNode {\n let width = this.getRenderedColumnWidth(node);\n let {height, isEstimated} = this.getEstimatedHeight(node, width, this.headingHeight, this.estimatedHeadingHeight);\n let rect = new Rect(x, y, width, height);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n layoutInfo.isSticky = !this.disableSticky && (node.props?.isDragButtonCell || node.props?.isSelectionCell);\n layoutInfo.zIndex = layoutInfo.isSticky ? 2 : 1;\n layoutInfo.estimatedSize = isEstimated;\n layoutInfo.allowOverflow = true;\n\n return {\n layoutInfo,\n validRect: layoutInfo.rect\n };\n }\n\n private buildBody(y: number): LayoutNode {\n let rect = new Rect(0, y, 0, 0);\n let layoutInfo = new LayoutInfo('rowgroup', this.collection.body.key, rect);\n\n let startY = y;\n let skipped = 0;\n let width = 0;\n let children: LayoutNode[] = [];\n for (let [i, node] of [...getChildNodes(this.collection.body, this.collection)].entries()) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight) + 1;\n\n // Skip rows before the valid rectangle unless they are already cached.\n if (y + rowHeight < this.validRect.y && !this.isValid(node, y)) {\n y += rowHeight;\n skipped++;\n continue;\n }\n\n let layoutNode = this.buildChild(node, 0, y, layoutInfo.key);\n layoutNode.layoutInfo.parentKey = layoutInfo.key;\n layoutNode.index = i;\n y = layoutNode.layoutInfo.rect.maxY;\n width = Math.max(width, layoutNode.layoutInfo.rect.width);\n children.push(layoutNode);\n\n if (y > this.validRect.maxY) {\n // Estimate the remaining height for rows that we don't need to layout right now.\n y += (this.collection.size - (skipped + children.length)) * rowHeight;\n break;\n }\n }\n\n if (this.isLoading) {\n // Add some margin around the loader to ensure that scrollbars don't flicker in and out.\n let rect = new Rect(40, Math.max(y, 40), (width || this.virtualizer.visibleRect.width) - 80, children.length === 0 ? this.virtualizer.visibleRect.height - 80 : 60);\n let loader = new LayoutInfo('loader', 'loader', rect);\n loader.parentKey = layoutInfo.key;\n loader.isSticky = !this.disableSticky && children.length === 0;\n this.layoutInfos.set('loader', loader);\n children.push({layoutInfo: loader, validRect: loader.rect});\n y = loader.rect.maxY;\n width = Math.max(width, rect.width);\n } else if (children.length === 0) {\n if (this.enableEmptyState) {\n let rect = new Rect(40, Math.max(y, 40), this.virtualizer.visibleRect.width - 80, this.virtualizer.visibleRect.height - 80);\n let empty = new LayoutInfo('empty', 'empty', rect);\n empty.parentKey = layoutInfo.key;\n empty.isSticky = !this.disableSticky;\n this.layoutInfos.set('empty', empty);\n children.push({layoutInfo: empty, validRect: empty.rect});\n y = empty.rect.maxY;\n width = Math.max(width, rect.width);\n } else {\n y = this.virtualizer.visibleRect.maxY;\n }\n }\n\n rect.width = width;\n rect.height = y - startY;\n\n this.layoutInfos.set(layoutInfo.key, layoutInfo);\n\n return {\n layoutInfo,\n children,\n validRect: layoutInfo.rect.intersection(this.validRect)\n };\n }\n\n protected buildNode(node: GridNode<T>, x: number, y: number): LayoutNode {\n switch (node.type) {\n case 'headerrow':\n return this.buildHeaderRow(node, x, y);\n case 'item':\n return this.buildRow(node, x, y);\n case 'column':\n case 'placeholder':\n return this.buildColumn(node, x, y);\n case 'cell':\n return this.buildCell(node, x, y);\n default:\n throw new Error('Unknown node type ' + node.type);\n }\n }\n\n private buildRow(node: GridNode<T>, x: number, y: number): LayoutNode {\n let rect = new Rect(x, y, 0, 0);\n let layoutInfo = new LayoutInfo('row', node.key, rect);\n\n let children: LayoutNode[] = [];\n let height = 0;\n for (let [i, child] of [...getChildNodes(node, this.collection)].entries()) {\n if (child.type === 'cell') {\n if (x > this.validRect.maxX) {\n // Adjust existing cached layoutInfo to ensure that it is out of view.\n // This can happen due to column resizing.\n let layoutNode = this.layoutNodes.get(child.key);\n if (layoutNode) {\n layoutNode.layoutInfo.rect.x = x;\n x += layoutNode.layoutInfo.rect.width;\n }\n } else {\n let layoutNode = this.buildChild(child, x, y, layoutInfo.key);\n x = layoutNode.layoutInfo.rect.maxX;\n height = Math.max(height, layoutNode.layoutInfo.rect.height);\n layoutNode.index = i;\n children.push(layoutNode);\n }\n }\n }\n\n this.setChildHeights(children, height);\n\n rect.width = this.layoutInfos.get(this.collection.head?.key ?? 'header').rect.width;\n rect.height = height + 1; // +1 for bottom border\n\n return {\n layoutInfo,\n children,\n validRect: rect.intersection(this.validRect)\n };\n }\n\n private buildCell(node: GridNode<T>, x: number, y: number): LayoutNode {\n let width = this.getRenderedColumnWidth(node);\n let {height, isEstimated} = this.getEstimatedHeight(node, width, this.rowHeight, this.estimatedRowHeight);\n let rect = new Rect(x, y, width, height);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n layoutInfo.isSticky = !this.disableSticky && (node.props?.isDragButtonCell || node.props?.isSelectionCell);\n layoutInfo.zIndex = layoutInfo.isSticky ? 2 : 1;\n layoutInfo.estimatedSize = isEstimated;\n\n return {\n layoutInfo,\n validRect: rect\n };\n }\n\n getVisibleLayoutInfos(rect: Rect) {\n // Adjust rect to keep number of visible rows consistent.\n // (only if height > 1 for getDropTargetFromPoint)\n if (rect.height > 1) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight) + 1; // +1 for border\n rect.y = Math.floor(rect.y / rowHeight) * rowHeight;\n rect.height = Math.ceil(rect.height / rowHeight) * rowHeight;\n }\n\n // If layout hasn't yet been done for the requested rect, union the\n // new rect with the existing valid rect, and recompute.\n this.layoutIfNeeded(rect);\n\n let res: LayoutInfo[] = [];\n\n this.buildPersistedIndices();\n for (let node of this.rootNodes) {\n res.push(node.layoutInfo);\n this.addVisibleLayoutInfos(res, node, rect);\n }\n\n return res;\n }\n\n private addVisibleLayoutInfos(res: LayoutInfo[], node: LayoutNode, rect: Rect) {\n if (!node.children || node.children.length === 0) {\n return;\n }\n\n switch (node.layoutInfo.type) {\n case 'header': {\n for (let child of node.children) {\n res.push(child.layoutInfo);\n this.addVisibleLayoutInfos(res, child, rect);\n }\n break;\n }\n case 'rowgroup': {\n let firstVisibleRow = this.binarySearch(node.children, rect.topLeft, 'y');\n let lastVisibleRow = this.binarySearch(node.children, rect.bottomRight, 'y');\n\n // Add persisted rows before the visible rows.\n let persistedRowIndices = this.persistedIndices.get(node.layoutInfo.key);\n let persistIndex = 0;\n while (\n persistedRowIndices &&\n persistIndex < persistedRowIndices.length &&\n persistedRowIndices[persistIndex] < firstVisibleRow\n ) {\n let idx = persistedRowIndices[persistIndex];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n this.addVisibleLayoutInfos(res, node.children[idx], rect);\n }\n persistIndex++;\n }\n\n for (let i = firstVisibleRow; i <= lastVisibleRow; i++) {\n // Skip persisted rows that overlap with visible cells.\n while (persistedRowIndices && persistIndex < persistedRowIndices.length && persistedRowIndices[persistIndex] < i) {\n persistIndex++;\n }\n\n res.push(node.children[i].layoutInfo);\n this.addVisibleLayoutInfos(res, node.children[i], rect);\n }\n\n // Add persisted rows after the visible rows.\n while (persistedRowIndices && persistIndex < persistedRowIndices.length) {\n let idx = persistedRowIndices[persistIndex++];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n this.addVisibleLayoutInfos(res, node.children[idx], rect);\n }\n }\n break;\n }\n case 'headerrow':\n case 'row': {\n let firstVisibleCell = this.binarySearch(node.children, rect.topLeft, 'x');\n let lastVisibleCell = this.binarySearch(node.children, rect.topRight, 'x');\n let stickyIndex = 0;\n\n // Add persisted/sticky cells before the visible cells.\n let persistedCellIndices = this.persistedIndices.get(node.layoutInfo.key) || this.stickyColumnIndices;\n while (stickyIndex < persistedCellIndices.length && persistedCellIndices[stickyIndex] < firstVisibleCell) {\n let idx = persistedCellIndices[stickyIndex];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n }\n stickyIndex++;\n }\n\n for (let i = firstVisibleCell; i <= lastVisibleCell; i++) {\n // Skip sticky cells that overlap with visible cells.\n while (stickyIndex < persistedCellIndices.length && persistedCellIndices[stickyIndex] < i) {\n stickyIndex++;\n }\n\n res.push(node.children[i].layoutInfo);\n }\n\n // Add any remaining sticky cells after the visible cells.\n while (stickyIndex < persistedCellIndices.length) {\n let idx = persistedCellIndices[stickyIndex++];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n }\n }\n break;\n }\n default:\n throw new Error('Unknown node type ' + node.layoutInfo.type);\n }\n }\n\n private binarySearch(items: LayoutNode[], point: Point, axis: 'x' | 'y') {\n let low = 0;\n let high = items.length - 1;\n while (low <= high) {\n let mid = (low + high) >> 1;\n let item = items[mid];\n\n if ((axis === 'x' && item.layoutInfo.rect.maxX <= point.x) || (axis === 'y' && item.layoutInfo.rect.maxY <= point.y)) {\n low = mid + 1;\n } else if ((axis === 'x' && item.layoutInfo.rect.x > point.x) || (axis === 'y' && item.layoutInfo.rect.y > point.y)) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n\n return Math.max(0, Math.min(items.length - 1, low));\n }\n\n private buildPersistedIndices() {\n if (this.virtualizer.persistedKeys === this.lastPersistedKeys) {\n return;\n }\n\n this.lastPersistedKeys = this.virtualizer.persistedKeys;\n this.persistedIndices.clear();\n\n // Build a map of parentKey => indices of children to persist.\n for (let key of this.virtualizer.persistedKeys) {\n let layoutInfo = this.layoutInfos.get(key);\n\n // Walk up ancestors so parents are also persisted if children are.\n while (layoutInfo && layoutInfo.parentKey) {\n let collectionNode = this.collection.getItem(layoutInfo.key);\n let indices = this.persistedIndices.get(layoutInfo.parentKey);\n if (!indices) {\n // stickyColumnIndices are always persisted along with any cells from persistedKeys.\n indices = collectionNode?.type === 'cell' || collectionNode?.type === 'column' ? [...this.stickyColumnIndices] : [];\n this.persistedIndices.set(layoutInfo.parentKey, indices);\n }\n\n let index = this.layoutNodes.get(layoutInfo.key).index;\n\n if (!indices.includes(index)) {\n indices.push(index);\n }\n\n layoutInfo = this.layoutInfos.get(layoutInfo.parentKey);\n }\n }\n\n for (let indices of this.persistedIndices.values()) {\n indices.sort((a, b) => a - b);\n }\n }\n\n // Checks if Chrome version is 105 or greater\n private checkChrome105() {\n if (typeof window === 'undefined' || window.navigator == null) {\n return false;\n }\n\n let isChrome105;\n if (window.navigator['userAgentData']) {\n isChrome105 = window.navigator['userAgentData']?.brands.some(b => b.brand === 'Chromium' && Number(b.version) === 105);\n } else {\n let regex = /Chrome\\/(\\d+)/;\n let matches = regex.exec(window.navigator.userAgent);\n isChrome105 = matches && matches.length >= 2 && Number(matches[1]) === 105;\n }\n\n return isChrome105;\n }\n\n getDropTargetFromPoint(x: number, y: number, isValidDropTarget: (target: DropTarget) => boolean): DropTarget {\n x += this.virtualizer.visibleRect.x;\n y += this.virtualizer.visibleRect.y;\n\n // Offset for height of header row\n y -= this.virtualizer.layout.getVisibleLayoutInfos(new Rect(x, y, 1, 1)).find(info => info.type === 'headerrow')?.rect.height;\n\n // Custom variation of this.virtualizer.keyAtPoint that ignores body\n let key: Key;\n let point = new Point(x, y);\n let rectAtPoint = new Rect(point.x, point.y, 1, 1);\n let layoutInfos = this.virtualizer.layout.getVisibleLayoutInfos(rectAtPoint).filter(info => info.type === 'row');\n\n // Layout may return multiple layout infos in the case of\n // persisted keys, so find the first one that actually intersects.\n for (let layoutInfo of layoutInfos) {\n if (layoutInfo.rect.intersects(rectAtPoint)) {\n key = layoutInfo.key;\n }\n }\n\n if (key == null || this.collection.size === 0) {\n return {type: 'root'};\n }\n\n let layoutInfo = this.getLayoutInfo(key);\n let rect = layoutInfo.rect;\n let target: DropTarget = {\n type: 'item',\n key: layoutInfo.key,\n dropPosition: 'on'\n };\n\n // If dropping on the item isn't accepted, try the target before or after depending on the y position.\n // Otherwise, if dropping on the item is accepted, still try the before/after positions if within 10px\n // of the top or bottom of the item.\n if (!isValidDropTarget(target)) {\n if (y <= rect.y + rect.height / 2 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n } else if (y <= rect.y + 10 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (y >= rect.maxY - 10 && isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n\n return target;\n }\n}\n"],"names":[],"version":3,"file":"TableLayout.module.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/layout/src/TableLayout.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DropTarget, Key} from '@react-types/shared';\nimport {getChildNodes} from '@react-stately/collections';\nimport {GridNode} from '@react-types/grid';\nimport {InvalidationContext, LayoutInfo, Point, Rect, Size} from '@react-stately/virtualizer';\nimport {LayoutNode, ListLayout, ListLayoutOptions, ListLayoutProps} from './ListLayout';\nimport {TableCollection} from '@react-types/table';\nimport {TableColumnLayout} from '@react-stately/table';\n\nexport interface TableLayoutOptions<T> extends ListLayoutOptions<T> {\n scrollContainer?: 'table' | 'body'\n}\n\nexport interface TableLayoutProps extends ListLayoutProps {\n columnWidths?: Map<Key, number>\n}\n\nexport class TableLayout<T> extends ListLayout<T> {\n collection: TableCollection<T>;\n lastCollection: TableCollection<T>;\n columnWidths: Map<Key, number>;\n stickyColumnIndices: number[];\n isLoading = false;\n lastPersistedKeys: Set<Key> = null;\n persistedIndices: Map<Key, number[]> = new Map();\n scrollContainer: 'table' | 'body';\n private disableSticky: boolean;\n\n constructor(options: TableLayoutOptions<T>) {\n super(options);\n this.scrollContainer = options.scrollContainer || 'table';\n this.stickyColumnIndices = [];\n this.disableSticky = this.checkChrome105();\n }\n\n private columnsChanged(newCollection: TableCollection<T>, oldCollection: TableCollection<T> | null) {\n return !oldCollection || \n newCollection.columns !== oldCollection.columns &&\n newCollection.columns.length !== oldCollection.columns.length ||\n newCollection.columns.some((c, i) =>\n c.key !== oldCollection.columns[i].key ||\n c.props.width !== oldCollection.columns[i].props.width ||\n c.props.minWidth !== oldCollection.columns[i].props.minWidth ||\n c.props.maxWidth !== oldCollection.columns[i].props.maxWidth\n );\n }\n\n validate(invalidationContext: InvalidationContext<TableLayoutProps>): void {\n let newCollection = this.virtualizer.collection as TableCollection<T>;\n\n // If columnWidths were provided via layoutOptions, update those.\n // Otherwise, calculate column widths ourselves.\n if (invalidationContext.layoutOptions?.columnWidths) {\n if (invalidationContext.layoutOptions.columnWidths !== this.columnWidths) {\n this.columnWidths = invalidationContext.layoutOptions.columnWidths;\n invalidationContext.sizeChanged = true;\n }\n } else if (invalidationContext.sizeChanged || this.columnsChanged(newCollection, this.collection)) {\n let columnLayout = new TableColumnLayout({});\n this.columnWidths = columnLayout.buildColumnWidths(this.virtualizer.visibleRect.width, newCollection, new Map());\n invalidationContext.sizeChanged = true;\n }\n\n super.validate(invalidationContext);\n }\n\n protected buildCollection(): LayoutNode[] {\n // Track whether we were previously loading. This is used to adjust the animations of async loading vs inserts.\n let loadingState = this.collection.body.props.loadingState;\n this.isLoading = loadingState === 'loading' || loadingState === 'loadingMore';\n this.stickyColumnIndices = [];\n\n for (let column of this.collection.columns) {\n // The selection cell and any other sticky columns always need to be visible.\n // In addition, row headers need to be in the DOM for accessibility labeling.\n if (column.props.isDragButtonCell || column.props.isSelectionCell || this.collection.rowHeaderColumnKeys.has(column.key)) {\n this.stickyColumnIndices.push(column.index);\n }\n }\n\n let header = this.buildColumnHeader();\n let body = this.buildBody(this.scrollContainer === 'body' ? 0 : header.layoutInfo.rect.height);\n this.lastPersistedKeys = null;\n\n body.layoutInfo.rect.width = Math.max(header.layoutInfo.rect.width, body.layoutInfo.rect.width);\n this.contentSize = new Size(body.layoutInfo.rect.width, body.layoutInfo.rect.maxY);\n return [\n header,\n body\n ];\n }\n\n private buildColumnHeader(): LayoutNode {\n let rect = new Rect(0, 0, 0, 0);\n let layoutInfo = new LayoutInfo('header', this.collection.head?.key ?? 'header', rect);\n layoutInfo.isSticky = true;\n layoutInfo.zIndex = 1;\n\n let y = 0;\n let width = 0;\n let children: LayoutNode[] = [];\n for (let headerRow of this.collection.headerRows) {\n let layoutNode = this.buildChild(headerRow, 0, y, layoutInfo.key);\n layoutNode.layoutInfo.parentKey = layoutInfo.key;\n y = layoutNode.layoutInfo.rect.maxY;\n width = Math.max(width, layoutNode.layoutInfo.rect.width);\n layoutNode.index = children.length;\n children.push(layoutNode);\n }\n\n rect.width = width;\n rect.height = y;\n\n this.layoutInfos.set(layoutInfo.key, layoutInfo);\n\n return {\n layoutInfo,\n children,\n validRect: layoutInfo.rect\n };\n }\n\n private buildHeaderRow(headerRow: GridNode<T>, x: number, y: number): LayoutNode {\n let rect = new Rect(0, y, 0, 0);\n let row = new LayoutInfo('headerrow', headerRow.key, rect);\n\n let height = 0;\n let columns: LayoutNode[] = [];\n for (let cell of getChildNodes(headerRow, this.collection)) {\n let layoutNode = this.buildChild(cell, x, y, row.key);\n layoutNode.layoutInfo.parentKey = row.key;\n x = layoutNode.layoutInfo.rect.maxX;\n height = Math.max(height, layoutNode.layoutInfo.rect.height);\n layoutNode.index = columns.length;\n columns.push(layoutNode);\n }\n for (let [i, layout] of columns.entries()) {\n layout.layoutInfo.zIndex = columns.length - i + 1;\n }\n\n this.setChildHeights(columns, height);\n\n rect.height = height;\n rect.width = x;\n\n return {\n layoutInfo: row,\n children: columns,\n validRect: rect\n };\n }\n\n private setChildHeights(children: LayoutNode[], height: number) {\n for (let child of children) {\n if (child.layoutInfo.rect.height !== height) {\n // Need to copy the layout info before we mutate it.\n child.layoutInfo = child.layoutInfo.copy();\n this.layoutInfos.set(child.layoutInfo.key, child.layoutInfo);\n\n child.layoutInfo.rect.height = height;\n }\n }\n }\n\n // used to get the column widths when rendering to the DOM\n private getRenderedColumnWidth(node: GridNode<T>) {\n let colspan = node.colspan ?? 1;\n let colIndex = node.colIndex ?? node.index;\n let width = 0;\n for (let i = colIndex; i < colIndex + colspan; i++) {\n let column = this.collection.columns[i];\n if (column?.key != null) {\n width += this.columnWidths.get(column.key);\n }\n }\n\n return width;\n }\n\n private getEstimatedHeight(node: GridNode<T>, width: number, height: number, estimatedHeight: number) {\n let isEstimated = false;\n\n // If no explicit height is available, use an estimated height.\n if (height == null) {\n // If a previous version of this layout info exists, reuse its height.\n // Mark as estimated if the size of the overall collection view changed,\n // or the content of the item changed.\n let previousLayoutNode = this.layoutNodes.get(node.key);\n if (previousLayoutNode) {\n height = previousLayoutNode.layoutInfo.rect.height;\n isEstimated = node !== previousLayoutNode.node || width !== previousLayoutNode.layoutInfo.rect.width || previousLayoutNode.layoutInfo.estimatedSize;\n } else {\n height = estimatedHeight;\n isEstimated = true;\n }\n }\n\n return {height, isEstimated};\n }\n\n private buildColumn(node: GridNode<T>, x: number, y: number): LayoutNode {\n let width = this.getRenderedColumnWidth(node);\n let {height, isEstimated} = this.getEstimatedHeight(node, width, this.headingHeight, this.estimatedHeadingHeight);\n let rect = new Rect(x, y, width, height);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n layoutInfo.isSticky = !this.disableSticky && (node.props?.isDragButtonCell || node.props?.isSelectionCell);\n layoutInfo.zIndex = layoutInfo.isSticky ? 2 : 1;\n layoutInfo.estimatedSize = isEstimated;\n layoutInfo.allowOverflow = true;\n\n return {\n layoutInfo,\n validRect: layoutInfo.rect\n };\n }\n\n private buildBody(y: number): LayoutNode {\n let rect = new Rect(0, y, 0, 0);\n let layoutInfo = new LayoutInfo('rowgroup', this.collection.body.key, rect);\n\n let startY = y;\n let skipped = 0;\n let width = 0;\n let children: LayoutNode[] = [];\n for (let [i, node] of [...getChildNodes(this.collection.body, this.collection)].entries()) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight) + 1;\n\n // Skip rows before the valid rectangle unless they are already cached.\n if (y + rowHeight < this.requestedRect.y && !this.isValid(node, y)) {\n y += rowHeight;\n skipped++;\n continue;\n }\n\n let layoutNode = this.buildChild(node, 0, y, layoutInfo.key);\n layoutNode.layoutInfo.parentKey = layoutInfo.key;\n layoutNode.index = i;\n y = layoutNode.layoutInfo.rect.maxY;\n width = Math.max(width, layoutNode.layoutInfo.rect.width);\n children.push(layoutNode);\n\n if (y > this.requestedRect.maxY) {\n // Estimate the remaining height for rows that we don't need to layout right now.\n y += (this.collection.size - (skipped + children.length)) * rowHeight;\n break;\n }\n }\n\n if (this.isLoading) {\n // Add some margin around the loader to ensure that scrollbars don't flicker in and out.\n let rect = new Rect(40, Math.max(y, 40), (width || this.virtualizer.visibleRect.width) - 80, children.length === 0 ? this.virtualizer.visibleRect.height - 80 : 60);\n let loader = new LayoutInfo('loader', 'loader', rect);\n loader.parentKey = layoutInfo.key;\n loader.isSticky = !this.disableSticky && children.length === 0;\n this.layoutInfos.set('loader', loader);\n children.push({layoutInfo: loader, validRect: loader.rect});\n y = loader.rect.maxY;\n width = Math.max(width, rect.width);\n } else if (children.length === 0) {\n if (this.enableEmptyState) {\n let rect = new Rect(40, Math.max(y, 40), this.virtualizer.visibleRect.width - 80, this.virtualizer.visibleRect.height - 80);\n let empty = new LayoutInfo('empty', 'empty', rect);\n empty.parentKey = layoutInfo.key;\n empty.isSticky = !this.disableSticky;\n this.layoutInfos.set('empty', empty);\n children.push({layoutInfo: empty, validRect: empty.rect});\n y = empty.rect.maxY;\n width = Math.max(width, rect.width);\n } else {\n y = this.virtualizer.visibleRect.maxY;\n }\n }\n\n rect.width = width;\n rect.height = y - startY;\n\n this.layoutInfos.set(layoutInfo.key, layoutInfo);\n\n return {\n layoutInfo,\n children,\n validRect: layoutInfo.rect.intersection(this.requestedRect)\n };\n }\n\n protected buildNode(node: GridNode<T>, x: number, y: number): LayoutNode {\n switch (node.type) {\n case 'headerrow':\n return this.buildHeaderRow(node, x, y);\n case 'item':\n return this.buildRow(node, x, y);\n case 'column':\n case 'placeholder':\n return this.buildColumn(node, x, y);\n case 'cell':\n return this.buildCell(node, x, y);\n default:\n throw new Error('Unknown node type ' + node.type);\n }\n }\n\n private buildRow(node: GridNode<T>, x: number, y: number): LayoutNode {\n let rect = new Rect(x, y, 0, 0);\n let layoutInfo = new LayoutInfo('row', node.key, rect);\n\n let children: LayoutNode[] = [];\n let height = 0;\n for (let [i, child] of [...getChildNodes(node, this.collection)].entries()) {\n if (child.type === 'cell') {\n if (x > this.requestedRect.maxX) {\n // Adjust existing cached layoutInfo to ensure that it is out of view.\n // This can happen due to column resizing.\n let layoutNode = this.layoutNodes.get(child.key);\n if (layoutNode) {\n layoutNode.layoutInfo.rect.x = x;\n x += layoutNode.layoutInfo.rect.width;\n }\n } else {\n let layoutNode = this.buildChild(child, x, y, layoutInfo.key);\n x = layoutNode.layoutInfo.rect.maxX;\n height = Math.max(height, layoutNode.layoutInfo.rect.height);\n layoutNode.index = i;\n children.push(layoutNode);\n }\n }\n }\n\n this.setChildHeights(children, height);\n\n rect.width = this.layoutInfos.get(this.collection.head?.key ?? 'header').rect.width;\n rect.height = height + 1; // +1 for bottom border\n\n return {\n layoutInfo,\n children,\n validRect: rect.intersection(this.requestedRect)\n };\n }\n\n private buildCell(node: GridNode<T>, x: number, y: number): LayoutNode {\n let width = this.getRenderedColumnWidth(node);\n let {height, isEstimated} = this.getEstimatedHeight(node, width, this.rowHeight, this.estimatedRowHeight);\n let rect = new Rect(x, y, width, height);\n let layoutInfo = new LayoutInfo(node.type, node.key, rect);\n layoutInfo.isSticky = !this.disableSticky && (node.props?.isDragButtonCell || node.props?.isSelectionCell);\n layoutInfo.zIndex = layoutInfo.isSticky ? 2 : 1;\n layoutInfo.estimatedSize = isEstimated;\n\n return {\n layoutInfo,\n validRect: rect\n };\n }\n\n getVisibleLayoutInfos(rect: Rect) {\n // Adjust rect to keep number of visible rows consistent.\n // (only if height > 1 for getDropTargetFromPoint)\n if (rect.height > 1) {\n let rowHeight = (this.rowHeight ?? this.estimatedRowHeight) + 1; // +1 for border\n rect.y = Math.floor(rect.y / rowHeight) * rowHeight;\n rect.height = Math.ceil(rect.height / rowHeight) * rowHeight;\n }\n\n // If layout hasn't yet been done for the requested rect, union the\n // new rect with the existing valid rect, and recompute.\n this.layoutIfNeeded(rect);\n\n let res: LayoutInfo[] = [];\n\n this.buildPersistedIndices();\n for (let node of this.rootNodes) {\n res.push(node.layoutInfo);\n this.addVisibleLayoutInfos(res, node, rect);\n }\n\n return res;\n }\n\n private addVisibleLayoutInfos(res: LayoutInfo[], node: LayoutNode, rect: Rect) {\n if (!node.children || node.children.length === 0) {\n return;\n }\n\n switch (node.layoutInfo.type) {\n case 'header': {\n for (let child of node.children) {\n res.push(child.layoutInfo);\n this.addVisibleLayoutInfos(res, child, rect);\n }\n break;\n }\n case 'rowgroup': {\n let firstVisibleRow = this.binarySearch(node.children, rect.topLeft, 'y');\n let lastVisibleRow = this.binarySearch(node.children, rect.bottomRight, 'y');\n\n // Add persisted rows before the visible rows.\n let persistedRowIndices = this.persistedIndices.get(node.layoutInfo.key);\n let persistIndex = 0;\n while (\n persistedRowIndices &&\n persistIndex < persistedRowIndices.length &&\n persistedRowIndices[persistIndex] < firstVisibleRow\n ) {\n let idx = persistedRowIndices[persistIndex];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n this.addVisibleLayoutInfos(res, node.children[idx], rect);\n }\n persistIndex++;\n }\n\n for (let i = firstVisibleRow; i <= lastVisibleRow; i++) {\n // Skip persisted rows that overlap with visible cells.\n while (persistedRowIndices && persistIndex < persistedRowIndices.length && persistedRowIndices[persistIndex] < i) {\n persistIndex++;\n }\n\n res.push(node.children[i].layoutInfo);\n this.addVisibleLayoutInfos(res, node.children[i], rect);\n }\n\n // Add persisted rows after the visible rows.\n while (persistedRowIndices && persistIndex < persistedRowIndices.length) {\n let idx = persistedRowIndices[persistIndex++];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n this.addVisibleLayoutInfos(res, node.children[idx], rect);\n }\n }\n break;\n }\n case 'headerrow':\n case 'row': {\n let firstVisibleCell = this.binarySearch(node.children, rect.topLeft, 'x');\n let lastVisibleCell = this.binarySearch(node.children, rect.topRight, 'x');\n let stickyIndex = 0;\n\n // Add persisted/sticky cells before the visible cells.\n let persistedCellIndices = this.persistedIndices.get(node.layoutInfo.key) || this.stickyColumnIndices;\n while (stickyIndex < persistedCellIndices.length && persistedCellIndices[stickyIndex] < firstVisibleCell) {\n let idx = persistedCellIndices[stickyIndex];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n }\n stickyIndex++;\n }\n\n for (let i = firstVisibleCell; i <= lastVisibleCell; i++) {\n // Skip sticky cells that overlap with visible cells.\n while (stickyIndex < persistedCellIndices.length && persistedCellIndices[stickyIndex] < i) {\n stickyIndex++;\n }\n\n res.push(node.children[i].layoutInfo);\n }\n\n // Add any remaining sticky cells after the visible cells.\n while (stickyIndex < persistedCellIndices.length) {\n let idx = persistedCellIndices[stickyIndex++];\n if (idx < node.children.length) {\n res.push(node.children[idx].layoutInfo);\n }\n }\n break;\n }\n default:\n throw new Error('Unknown node type ' + node.layoutInfo.type);\n }\n }\n\n private binarySearch(items: LayoutNode[], point: Point, axis: 'x' | 'y') {\n let low = 0;\n let high = items.length - 1;\n while (low <= high) {\n let mid = (low + high) >> 1;\n let item = items[mid];\n\n if ((axis === 'x' && item.layoutInfo.rect.maxX <= point.x) || (axis === 'y' && item.layoutInfo.rect.maxY <= point.y)) {\n low = mid + 1;\n } else if ((axis === 'x' && item.layoutInfo.rect.x > point.x) || (axis === 'y' && item.layoutInfo.rect.y > point.y)) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n\n return Math.max(0, Math.min(items.length - 1, low));\n }\n\n private buildPersistedIndices() {\n if (this.virtualizer.persistedKeys === this.lastPersistedKeys) {\n return;\n }\n\n this.lastPersistedKeys = this.virtualizer.persistedKeys;\n this.persistedIndices.clear();\n\n // Build a map of parentKey => indices of children to persist.\n for (let key of this.virtualizer.persistedKeys) {\n let layoutInfo = this.layoutInfos.get(key);\n\n // Walk up ancestors so parents are also persisted if children are.\n while (layoutInfo && layoutInfo.parentKey) {\n let collectionNode = this.collection.getItem(layoutInfo.key);\n let indices = this.persistedIndices.get(layoutInfo.parentKey);\n if (!indices) {\n // stickyColumnIndices are always persisted along with any cells from persistedKeys.\n indices = collectionNode?.type === 'cell' || collectionNode?.type === 'column' ? [...this.stickyColumnIndices] : [];\n this.persistedIndices.set(layoutInfo.parentKey, indices);\n }\n\n let index = this.layoutNodes.get(layoutInfo.key).index;\n\n if (!indices.includes(index)) {\n indices.push(index);\n }\n\n layoutInfo = this.layoutInfos.get(layoutInfo.parentKey);\n }\n }\n\n for (let indices of this.persistedIndices.values()) {\n indices.sort((a, b) => a - b);\n }\n }\n\n // Checks if Chrome version is 105 or greater\n private checkChrome105() {\n if (typeof window === 'undefined' || window.navigator == null) {\n return false;\n }\n\n let isChrome105;\n if (window.navigator['userAgentData']) {\n isChrome105 = window.navigator['userAgentData']?.brands.some(b => b.brand === 'Chromium' && Number(b.version) === 105);\n } else {\n let regex = /Chrome\\/(\\d+)/;\n let matches = regex.exec(window.navigator.userAgent);\n isChrome105 = matches && matches.length >= 2 && Number(matches[1]) === 105;\n }\n\n return isChrome105;\n }\n\n getDropTargetFromPoint(x: number, y: number, isValidDropTarget: (target: DropTarget) => boolean): DropTarget {\n x += this.virtualizer.visibleRect.x;\n y += this.virtualizer.visibleRect.y;\n\n // Offset for height of header row\n y -= this.virtualizer.layout.getVisibleLayoutInfos(new Rect(x, y, 1, 1)).find(info => info.type === 'headerrow')?.rect.height;\n\n // Custom variation of this.virtualizer.keyAtPoint that ignores body\n let key: Key;\n let point = new Point(x, y);\n let rectAtPoint = new Rect(point.x, point.y, 1, 1);\n let layoutInfos = this.virtualizer.layout.getVisibleLayoutInfos(rectAtPoint).filter(info => info.type === 'row');\n\n // Layout may return multiple layout infos in the case of\n // persisted keys, so find the first one that actually intersects.\n for (let layoutInfo of layoutInfos) {\n if (layoutInfo.rect.intersects(rectAtPoint)) {\n key = layoutInfo.key;\n }\n }\n\n if (key == null || this.collection.size === 0) {\n return {type: 'root'};\n }\n\n let layoutInfo = this.getLayoutInfo(key);\n let rect = layoutInfo.rect;\n let target: DropTarget = {\n type: 'item',\n key: layoutInfo.key,\n dropPosition: 'on'\n };\n\n // If dropping on the item isn't accepted, try the target before or after depending on the y position.\n // Otherwise, if dropping on the item is accepted, still try the before/after positions if within 10px\n // of the top or bottom of the item.\n if (!isValidDropTarget(target)) {\n if (y <= rect.y + rect.height / 2 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n } else if (y <= rect.y + 10 && isValidDropTarget({...target, dropPosition: 'before'})) {\n target.dropPosition = 'before';\n } else if (y >= rect.maxY - 10 && isValidDropTarget({...target, dropPosition: 'after'})) {\n target.dropPosition = 'after';\n }\n\n return target;\n }\n}\n"],"names":[],"version":3,"file":"TableLayout.module.js.map"}
|
package/dist/types.d.ts
CHANGED
|
@@ -56,8 +56,10 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
56
56
|
protected loaderHeight: number;
|
|
57
57
|
protected placeholderHeight: number;
|
|
58
58
|
protected enableEmptyState: boolean;
|
|
59
|
-
|
|
59
|
+
/** The rectangle containing currently valid layout infos. */
|
|
60
60
|
protected validRect: Rect;
|
|
61
|
+
/** The rectangle of requested layout infos so far. */
|
|
62
|
+
protected requestedRect: Rect;
|
|
61
63
|
/**
|
|
62
64
|
* Creates a new ListLayout with options. See the list of properties below for a description
|
|
63
65
|
* of the options that can be provided.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;AAgBA,8BAA8B,CAAC,IAAI;IACjC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAC;AAGF;IACE,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;IACE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAID;;;;;;;;;GASG;AACH,wBAAwB,CAAC,CAAE,SAAQ,OAAO,KAAK,CAAC,CAAC,EAAE,eAAe,CAAE,YAAW,kBAAkB;IAC/F,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACzC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACvC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;IACrF,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5C,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5C,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC;IAC5B,SAAS,CAAC,UAAU,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,cAAc,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC;IAClC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACxC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACpC,SAAS,CAAC,
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/layout/src/packages/@react-stately/layout/src/ListLayout.ts","packages/@react-stately/layout/src/packages/@react-stately/layout/src/TableLayout.ts","packages/@react-stately/layout/src/packages/@react-stately/layout/src/index.ts","packages/@react-stately/layout/src/index.ts"],"sourcesContent":[null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport type {ListLayoutOptions, ListLayoutProps, LayoutNode} from './ListLayout';\nexport type {TableLayoutOptions, TableLayoutProps} from './TableLayout';\nexport {ListLayout} from './ListLayout';\nexport {TableLayout} from './TableLayout';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-stately/layout",
|
|
3
|
-
"version": "3.13.10-nightly.
|
|
3
|
+
"version": "3.13.10-nightly.4683+4e3af379e",
|
|
4
4
|
"description": "Spectrum UI components in React",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"url": "https://github.com/adobe/react-spectrum"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-stately/collections": "3.0.0-nightly.
|
|
26
|
-
"@react-stately/table": "3.11.9-nightly.
|
|
27
|
-
"@react-stately/virtualizer": "3.7.2-nightly.
|
|
28
|
-
"@react-types/grid": "3.2.7-nightly.
|
|
29
|
-
"@react-types/shared": "3.0.0-nightly.
|
|
30
|
-
"@react-types/table": "3.9.6-nightly.
|
|
25
|
+
"@react-stately/collections": "3.0.0-nightly.2971+4e3af379e",
|
|
26
|
+
"@react-stately/table": "3.11.9-nightly.4683+4e3af379e",
|
|
27
|
+
"@react-stately/virtualizer": "3.7.2-nightly.4683+4e3af379e",
|
|
28
|
+
"@react-types/grid": "3.2.7-nightly.4683+4e3af379e",
|
|
29
|
+
"@react-types/shared": "3.0.0-nightly.2971+4e3af379e",
|
|
30
|
+
"@react-types/table": "3.9.6-nightly.4683+4e3af379e",
|
|
31
31
|
"@swc/helpers": "^0.5.0"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"publishConfig": {
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "4e3af379e569faac3b374e0ed5a98b2a19cd92c3"
|
|
40
40
|
}
|
package/src/ListLayout.ts
CHANGED
|
@@ -74,8 +74,10 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
74
74
|
protected loaderHeight: number;
|
|
75
75
|
protected placeholderHeight: number;
|
|
76
76
|
protected enableEmptyState: boolean;
|
|
77
|
-
|
|
77
|
+
/** The rectangle containing currently valid layout infos. */
|
|
78
78
|
protected validRect: Rect;
|
|
79
|
+
/** The rectangle of requested layout infos so far. */
|
|
80
|
+
protected requestedRect: Rect;
|
|
79
81
|
|
|
80
82
|
/**
|
|
81
83
|
* Creates a new ListLayout with options. See the list of properties below for a description
|
|
@@ -98,8 +100,8 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
98
100
|
this.rootNodes = [];
|
|
99
101
|
this.lastWidth = 0;
|
|
100
102
|
this.lastCollection = null;
|
|
101
|
-
this.lastValidRect = new Rect();
|
|
102
103
|
this.validRect = new Rect();
|
|
104
|
+
this.requestedRect = new Rect();
|
|
103
105
|
this.contentSize = new Size();
|
|
104
106
|
}
|
|
105
107
|
|
|
@@ -147,9 +149,8 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
147
149
|
return;
|
|
148
150
|
}
|
|
149
151
|
|
|
150
|
-
if (!this.
|
|
151
|
-
this.
|
|
152
|
-
this.validRect = this.validRect.union(rect);
|
|
152
|
+
if (!this.requestedRect.containsRect(rect)) {
|
|
153
|
+
this.requestedRect = this.requestedRect.union(rect);
|
|
153
154
|
this.rootNodes = this.buildCollection();
|
|
154
155
|
} else {
|
|
155
156
|
// Ensure all of the persisted keys are available.
|
|
@@ -165,11 +166,10 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
165
166
|
// If the layout info wasn't found, it might be outside the bounds of the area that we've
|
|
166
167
|
// computed layout for so far. This can happen when accessing a random key, e.g pressing Home/End.
|
|
167
168
|
// Compute the full layout and try again.
|
|
168
|
-
if (!this.layoutInfos.has(key) && this.
|
|
169
|
-
this.
|
|
170
|
-
this.validRect = new Rect(0, 0, Infinity, Infinity);
|
|
169
|
+
if (!this.layoutInfos.has(key) && this.requestedRect.area < this.contentSize.area && this.lastCollection) {
|
|
170
|
+
this.requestedRect = new Rect(0, 0, Infinity, Infinity);
|
|
171
171
|
this.rootNodes = this.buildCollection();
|
|
172
|
-
this.
|
|
172
|
+
this.requestedRect = new Rect(0, 0, this.contentSize.width, this.contentSize.height);
|
|
173
173
|
return true;
|
|
174
174
|
}
|
|
175
175
|
|
|
@@ -194,8 +194,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
194
194
|
// Otherwise we can reuse cached layout infos outside the current visible rect.
|
|
195
195
|
this.invalidateEverything = this.shouldInvalidateEverything(invalidationContext);
|
|
196
196
|
if (this.invalidateEverything) {
|
|
197
|
-
this.
|
|
198
|
-
this.validRect = this.virtualizer.visibleRect.copy();
|
|
197
|
+
this.requestedRect = this.virtualizer.visibleRect.copy();
|
|
199
198
|
}
|
|
200
199
|
|
|
201
200
|
this.rootNodes = this.buildCollection();
|
|
@@ -217,6 +216,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
217
216
|
this.lastWidth = this.virtualizer.visibleRect.width;
|
|
218
217
|
this.lastCollection = this.collection;
|
|
219
218
|
this.invalidateEverything = false;
|
|
219
|
+
this.validRect = this.requestedRect.copy();
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
protected buildCollection(): LayoutNode[] {
|
|
@@ -227,7 +227,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
227
227
|
let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);
|
|
228
228
|
|
|
229
229
|
// Skip rows before the valid rectangle unless they are already cached.
|
|
230
|
-
if (node.type === 'item' && y + rowHeight < this.
|
|
230
|
+
if (node.type === 'item' && y + rowHeight < this.requestedRect.y && !this.isValid(node, y)) {
|
|
231
231
|
y += rowHeight;
|
|
232
232
|
skipped++;
|
|
233
233
|
continue;
|
|
@@ -237,7 +237,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
237
237
|
y = layoutNode.layoutInfo.rect.maxY;
|
|
238
238
|
nodes.push(layoutNode);
|
|
239
239
|
|
|
240
|
-
if (node.type === 'item' && y > this.
|
|
240
|
+
if (node.type === 'item' && y > this.requestedRect.maxY) {
|
|
241
241
|
y += (this.collection.size - (nodes.length + skipped)) * rowHeight;
|
|
242
242
|
break;
|
|
243
243
|
}
|
|
@@ -272,8 +272,8 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
272
272
|
cached &&
|
|
273
273
|
cached.node === node &&
|
|
274
274
|
y === (cached.header || cached.layoutInfo).rect.y &&
|
|
275
|
-
cached.layoutInfo.rect.intersects(this.
|
|
276
|
-
cached.validRect.containsRect(cached.layoutInfo.rect.intersection(this.
|
|
275
|
+
cached.layoutInfo.rect.intersects(this.validRect) &&
|
|
276
|
+
cached.validRect.containsRect(cached.layoutInfo.rect.intersection(this.requestedRect))
|
|
277
277
|
);
|
|
278
278
|
}
|
|
279
279
|
|
|
@@ -327,7 +327,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
327
327
|
let rowHeight = (this.rowHeight ?? this.estimatedRowHeight);
|
|
328
328
|
|
|
329
329
|
// Skip rows before the valid rectangle unless they are already cached.
|
|
330
|
-
if (y + rowHeight < this.
|
|
330
|
+
if (y + rowHeight < this.requestedRect.y && !this.isValid(node, y)) {
|
|
331
331
|
y += rowHeight;
|
|
332
332
|
skipped++;
|
|
333
333
|
continue;
|
|
@@ -337,7 +337,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
337
337
|
y = layoutNode.layoutInfo.rect.maxY;
|
|
338
338
|
children.push(layoutNode);
|
|
339
339
|
|
|
340
|
-
if (y > this.
|
|
340
|
+
if (y > this.requestedRect.maxY) {
|
|
341
341
|
// Estimate the remaining height for rows that we don't need to layout right now.
|
|
342
342
|
y += ([...getChildNodes(node, this.collection)].length - (children.length + skipped)) * rowHeight;
|
|
343
343
|
break;
|
|
@@ -350,7 +350,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
350
350
|
header,
|
|
351
351
|
layoutInfo,
|
|
352
352
|
children,
|
|
353
|
-
validRect: layoutInfo.rect.intersection(this.
|
|
353
|
+
validRect: layoutInfo.rect.intersection(this.requestedRect)
|
|
354
354
|
};
|
|
355
355
|
}
|
|
356
356
|
|
|
@@ -387,7 +387,7 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
387
387
|
return {
|
|
388
388
|
layoutInfo: header,
|
|
389
389
|
children: [],
|
|
390
|
-
validRect: header.rect.intersection(this.
|
|
390
|
+
validRect: header.rect.intersection(this.requestedRect)
|
|
391
391
|
};
|
|
392
392
|
}
|
|
393
393
|
|
|
@@ -444,6 +444,13 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
444
444
|
newLayoutInfo.rect.height = size.height;
|
|
445
445
|
this.layoutInfos.set(key, newLayoutInfo);
|
|
446
446
|
|
|
447
|
+
// Items after this layoutInfo will need to be repositioned to account for the new height.
|
|
448
|
+
// Adjust the validRect so that only items above remain valid.
|
|
449
|
+
this.validRect.height = Math.min(this.validRect.height, layoutInfo.rect.y - this.validRect.y);
|
|
450
|
+
|
|
451
|
+
// The requestedRect also needs to be adjusted to account for the height difference.
|
|
452
|
+
this.requestedRect.height += newLayoutInfo.rect.height - layoutInfo.rect.height;
|
|
453
|
+
|
|
447
454
|
// Invalidate layout for this layout node and all parents
|
|
448
455
|
this.updateLayoutNode(key, layoutInfo, newLayoutInfo);
|
|
449
456
|
|
|
@@ -462,8 +469,8 @@ export class ListLayout<T> extends Layout<Node<T>, ListLayoutProps> implements D
|
|
|
462
469
|
private updateLayoutNode(key: Key, oldLayoutInfo: LayoutInfo, newLayoutInfo: LayoutInfo) {
|
|
463
470
|
let n = this.layoutNodes.get(key);
|
|
464
471
|
if (n) {
|
|
465
|
-
// Invalidate by
|
|
466
|
-
n.validRect =
|
|
472
|
+
// Invalidate by intersecting the validRect of this node with the overall validRect.
|
|
473
|
+
n.validRect = n.validRect.intersection(this.validRect);
|
|
467
474
|
|
|
468
475
|
// Replace layout info in LayoutNode
|
|
469
476
|
if (n.header === oldLayoutInfo) {
|
package/src/TableLayout.ts
CHANGED
|
@@ -237,7 +237,7 @@ export class TableLayout<T> extends ListLayout<T> {
|
|
|
237
237
|
let rowHeight = (this.rowHeight ?? this.estimatedRowHeight) + 1;
|
|
238
238
|
|
|
239
239
|
// Skip rows before the valid rectangle unless they are already cached.
|
|
240
|
-
if (y + rowHeight < this.
|
|
240
|
+
if (y + rowHeight < this.requestedRect.y && !this.isValid(node, y)) {
|
|
241
241
|
y += rowHeight;
|
|
242
242
|
skipped++;
|
|
243
243
|
continue;
|
|
@@ -250,7 +250,7 @@ export class TableLayout<T> extends ListLayout<T> {
|
|
|
250
250
|
width = Math.max(width, layoutNode.layoutInfo.rect.width);
|
|
251
251
|
children.push(layoutNode);
|
|
252
252
|
|
|
253
|
-
if (y > this.
|
|
253
|
+
if (y > this.requestedRect.maxY) {
|
|
254
254
|
// Estimate the remaining height for rows that we don't need to layout right now.
|
|
255
255
|
y += (this.collection.size - (skipped + children.length)) * rowHeight;
|
|
256
256
|
break;
|
|
@@ -290,7 +290,7 @@ export class TableLayout<T> extends ListLayout<T> {
|
|
|
290
290
|
return {
|
|
291
291
|
layoutInfo,
|
|
292
292
|
children,
|
|
293
|
-
validRect: layoutInfo.rect.intersection(this.
|
|
293
|
+
validRect: layoutInfo.rect.intersection(this.requestedRect)
|
|
294
294
|
};
|
|
295
295
|
}
|
|
296
296
|
|
|
@@ -318,7 +318,7 @@ export class TableLayout<T> extends ListLayout<T> {
|
|
|
318
318
|
let height = 0;
|
|
319
319
|
for (let [i, child] of [...getChildNodes(node, this.collection)].entries()) {
|
|
320
320
|
if (child.type === 'cell') {
|
|
321
|
-
if (x > this.
|
|
321
|
+
if (x > this.requestedRect.maxX) {
|
|
322
322
|
// Adjust existing cached layoutInfo to ensure that it is out of view.
|
|
323
323
|
// This can happen due to column resizing.
|
|
324
324
|
let layoutNode = this.layoutNodes.get(child.key);
|
|
@@ -344,7 +344,7 @@ export class TableLayout<T> extends ListLayout<T> {
|
|
|
344
344
|
return {
|
|
345
345
|
layoutInfo,
|
|
346
346
|
children,
|
|
347
|
-
validRect: rect.intersection(this.
|
|
347
|
+
validRect: rect.intersection(this.requestedRect)
|
|
348
348
|
};
|
|
349
349
|
}
|
|
350
350
|
|