ScrollSync passes additional parameters to child function in order to enable more complex scroll-driven UI changes.
Added optional headerRenderer property to FlexColumn to enable custom FlexTable header cells.
Decoupled x/y axes in Grid when determining whether or not to enable overflow.
This results in more robustly handling issues like the one reported in PR #133.
It also comes with the small cost of partially obscuring a small part of cells (the area used by a scrollbar).
Fixed edge-case where always-on scrollbars were not hidden once shown (see issue #116).
Separated CommonJS and UMD builds and pointed package.json's main target at the CommonJS build.
Also moved the ES6 modules build from /es to /dist/es to reduce the amount of clutter in the packaged dir.
Changed Grid child key attributes again to reduce the number of elements created as a result of scrolling.
This dramatically improves perforamance without introducing any known regressions.
Thanks to @cesarandreu for consulting on this release.
Reverted transform: translate positioning to old top / left positioning to address performance concerns reported via PR #124 and issue #94.
Updated ES6 module build to be Rollup-friendly by way of es2015-rollup Babel preset.
Also cleaned up NPM package to suppress unnecessary files (via new .npmignore).
Fixes long-standing slow wheel scrolling issue that affected certain browsers such as Firefox (see issue #2). Big thanks to James Long (@jlongster), Markus Stange (@mstange), and Dan Abramov (@gaearon) for their help with this fix.
Added optional onResize callback property to AutoSizer. This method is invoked any time the AutoSizer detects a resize. It is passed width and height named parameters.
Added optional minWidth and maxWidth properties to FlexColumn to enable greater flexibility with regard to table-column layout.
Marked FlexColumn width property as required since ommitting this property can lead to uneven column layouts.
Added ColumnSizer high-order component for auto-calculating column widths for Grid cells.
Added webkit-transform style to Grid cells for iOS 8 support.
Version 5 includes the following changes.
(For more background information refer to the Version 5 Roadmap wiki page.)
At a high-level the purpose of this release is to make HOCs more easily composible in order to support a wider variety of them in the future.
A secondary goal was to cut redundant code from VirtualScroll and rely more heavily on the base Grid component.
- Refactored
FlexTableandVirtualScrollto be HOCs that useGridinternally. This change makeswidtha required attribute for all virtualized components. A simple upgrade strategy is to use theAutoSizerHOC (learn more here). - Changed globally exported library name (for use with vanilla
<script>tags) towindow.ReactVirtualizedinstead ofwindow["react-virtualized"](see issue #86). - Removed
horizontalPaddingandverticalPaddingproperties fromFlexTable. These properties were redundant. Such padding should be the responsibility of the parent container and taken into consideration by the injectedwidthandheight. - Refactored
InfiniteLoaderandAutoSizerto require function children so as to be more easily composable with each other and new HOCs likeScrollSync(learn more here). AutoSizerno longer supports aclassNameproperty or uses the global 'AutoSizer' class.
- Added ES6 module and
jsnext:maintarget to enable tree-shaking support. - Updated
onScrollproperty to specific total scrollable area so that offsets can be converted into percentages if desired (learn more here). - Replaced
top/leftcell positioning withtransform: translate()for small performance gains. (This may become configurable in the future if any negative impact on performance is noticed.) - Created
ScrollSyncHOC for synchronizing scrolling between two or more virtualized components (learn more here).
FlexTable and VirtualScroll get a new property, overscanRowsCount. Grid gets overscanRowsCount and overscanColumnsCount.
These properties can be used to reduce visual flicker around the sides of virtualized components when quickly scrolling.
overscanRowsCount defaults to 10 and overscanColumnsCount defaults to 0; adjust as necessary based on the size of your lists and cells.
FlexTable sets a default value of 0 for headerHeight to more gracefully support disableHeader use case.
AutoSizer component now takes padding into consideration before setting the width and height of its children.
Updated InfiniteLoader to better reflect required properties. (isRowLoaded, rowsCount, and threshold were not marked as required before.)
Updated InfiniteLoader to support being composable within an AutoSizer HOC. If either a width or height attribute are specified on InfiniteLoader they will be bundled through to the loader's child component.
Fixed AutoSizer bug that caused it to prevent parent flex containers from shrinking in some contexts.
Added scrollToIndex property to FlexTable to be passed through to inner Grid.
Better gaurd against NaN values for clientWidth and offsetWidth for test environments using jsdom.
Added react-dom to the Webpack :externals node to avoid including it in the build.
This fixes the bad 4.6.3 and 4.6.4 builds. Sorry!
Moved react-dom from dependencies to peerDependencies to fix bad 4.6.3 build.
Fixed edge-case sizing bug with FlexTable headers and always-on scrollbars (see issue #80 for more info).
Replaced single occurence of Number.isNaN with isNaN to avoid IE compatibility issues. Maybe in the future I will add a polyfill dependency but I did not intend to introduce this without a major version bump so I'm removing it.
Removes event.stopPropagation since it was unnecessary to prevent keyboard event bubbling, only to prevent the default browser behavior.
Relocated a couple of static style properties from inline style object to exported CSS file for easier customization.
Added Grid__cell and VirtualScroll__row classes.
Added onScroll callback to Grid, FlexTable, and VirtualScroll.
Added scrollToCell method to Grid and scrollToRow to FlexTable, and VirtualScroll.
Added -ms-flex and -webkit-flex browser prefixes to FlexTable cells.
Fixed invalid function reference in Grid triggered by specifying an initial scrollToRow property.
Fixed distribution to include new Grid component as an export.
Added new Grid component for virtualizing rows and columns .
Updated AutoSizer component to support managing only width or height (in addition to both).
Fixed small CSS property misnaming issue.
FlexTable now supports dynamic row-heights (in the same way as VirtualScroll).
Set VirtualScroll default style to width: 100% to be more inline with default FlexTable behavior.
Replaced React.cloneElement with wrapper element in order to:
- Better support for pure function components; (they were not compatible with inline style positioning).
- Relax the requirement of
rowRendererhaving to specify akey. - Support
React.PropTypes.nodechildren (including plain strings, numbers, etc.) instead of just elements.
Added -webkit-overflow-scrolling: touch for smoother inertial scrolling on mobile devices.
Additional columnData parameter passed to onHeaderClick callback.
Removed an unused dependency on 'inline-style-prefixer' from the package.json.
CSS styles have been split into their own, separately loaded stylesheet. This simplifies universal/isomorphic use cases without breaking vendor prefixing. This change means that you'll need to import the following additional file. This only needs to be done once (usually during bootstrapping).
import 'react-virtualized/styles.css';In this release the width property of the FlexTable component was removed. Tables will now grow to fill 100% of the width of their parent container.
The AutoSizer's ChildComponent attribute has been removed in favor of using a regular react child. For example:
<AutoSizer
ChildComponent={VirtualScroll}
{...props}
/>Should instead be this:
<AutoSizer>
<VirtualScroll {...props}/>
</AutoSizer>New onHeaderClick property added to FlexTable. Thanks to @olslash for the contribution!
Added high-order InfiniteLoader component to manage just-in-time fetching of data as a user scrolls up or down in a list.
For more information about this component refer to the API docs.
Fixed small NPE when up/down arrow key was used while an empty VirtualScroll was in-focus.
CSS styles have been split into two groups: functional styles (eg. position, overflow) and presentational styles (eg. text-transform, color) and both have been converted to inline styles rather than being loaded as CSS. This was done primarily to simplify usage for universal/isomorphic rendering.
For more information on customizing styles refer to the documentation...
Changed Autosizer component to support a single child instead of the ChildComponent property.
(For backwards compatibility purposes the ChildComponent property will continue to be supported.)
Defer loading of element resize code until componentDidMount to avoid undefined document and body references.
This was breaking server-side rendering.
Uglify dist build to remove dead code.
Improved checks for undefined document and window in hopes of better supporting server-side rendering.
Replaced invalid rowHeight instanceof Number check with typeof rowHeight === 'number' in VirtualScroll.
Moved onRowsRendered to componentDidUpdate (instead of render) to keep render free of side-effects.
Added tests to ensure that the callback is only invoked once per start/stop index pair (and not again unless the indices change).
Added check for undefined document before accessing attachEvent to avoid causing problems with server-side rendering.
Cell title now only set if rendered cell contents are a string. This fixes issue #35.
VirtualScroll and FlexTable now support dynamic row heights by accepting a function as the rowHeight property.
Added AutoSizer component for wrapping FlexTable or VirtualScroll and growing to fill the parent container. This should hopefully simplify usage of these components.
FlexTable and VirtualScroll offer new callback property onRowsRendered to be invoked with a params object { startIndex, stopIndex } after rows have been rendered.
FlexTable's rowClassName property can now be either a string or a function in order to support dynamic row classes (eg. alternating colors).
Added onRowClick property to FlexTable.
Fixed a few minor FlexTable font styles to use relative sizes instead of custom ones
Added optional noRowsRenderer property to VirtualScroll and FlexTable.
This property can be used to render loading indicators or placeholder content for empty lists.
Set shouldPureComponentUpdate on component prototypes instead of instances.
Dropped half-ass support for React 0.13. This module has always depended on React 0.14 but it was checking in previous versions and trying to be backwards compatible with 0.13. Since that check is no longer in place, this is a major version bump (even though there is no real new functionality being added).
Fixed package.json dependencies by moving classnames, raf, and react-pure-render out of peerDependencies and into dependencies.
Same as version 1.0.2; published just to update NPM keyword and description.
Removed default row-border styling from FlexTable and added new :rowClassName property.
Updated to use ReactDOM.findDOMNode instead of getDOMNode (but added backwards-compatible check for < React v0.14).
Package JSON updated so that "main" entry points to dist/react-virtualized.js to provide easier integration for users that don't want Babel/Webpack to have to process their node_modules folder.
Added keypress scrolling support.
Added "main" entry to package.json.
Added CSS auto-prefixing to support Safari and other, older browsers.
Initial release.