@react-spectrum/table 3.9.1-nightly.3940 → 3.9.1-nightly.3943
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/import.mjs +22 -40
- package/dist/main.js +21 -39
- package/dist/main.js.map +1 -1
- package/dist/module.js +22 -40
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +31 -31
- package/src/TableView.tsx +19 -36
package/dist/import.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./main.css";
|
|
2
2
|
import {Column as $gyhAV$Column, TableHeader as $e668f3d0f378a712$re_export$TableHeader, TableBody as $e668f3d0f378a712$re_export$TableBody, Section as $e668f3d0f378a712$re_export$Section, Row as $e668f3d0f378a712$re_export$Row, Cell as $e668f3d0f378a712$re_export$Cell, useTableState as $gyhAV$useTableState, TableColumnLayout as $gyhAV$TableColumnLayout} from "@react-stately/table";
|
|
3
3
|
import $gyhAV$spectrumiconsuiArrowDownSmall from "@spectrum-icons/ui/ArrowDownSmall";
|
|
4
|
-
import {mergeProps as $gyhAV$mergeProps,
|
|
4
|
+
import {mergeProps as $gyhAV$mergeProps, scrollIntoView as $gyhAV$scrollIntoView, scrollIntoViewport as $gyhAV$scrollIntoViewport, chain as $gyhAV$chain, isWebKit as $gyhAV$isWebKit} from "@react-aria/utils";
|
|
5
5
|
import {Checkbox as $gyhAV$Checkbox} from "@react-spectrum/checkbox";
|
|
6
6
|
import $gyhAV$spectrumiconsuiChevronDownMedium from "@spectrum-icons/ui/ChevronDownMedium";
|
|
7
7
|
import {useStyleProps as $gyhAV$useStyleProps, useDOMRef as $gyhAV$useDOMRef, classNames as $gyhAV$classNames, useFocusableRef as $gyhAV$useFocusableRef, useIsMobileDevice as $gyhAV$useIsMobileDevice, useUnwrapDOMRef as $gyhAV$useUnwrapDOMRef} from "@react-spectrum/utils";
|
|
@@ -672,7 +672,6 @@ function $cb7d341e8868d81d$export$d9658cdf8c86807() {
|
|
|
672
672
|
|
|
673
673
|
|
|
674
674
|
|
|
675
|
-
|
|
676
675
|
/* eslint-disable jsx-a11y/role-supports-aria-props */
|
|
677
676
|
var $2fc56f9fdd93be52$exports = {};
|
|
678
677
|
$2fc56f9fdd93be52$exports = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"-1 0 31 32\">\n <filter id=\"shadow\">\n <feDropShadow dx=\"0\" dy=\"0.5\" stdDeviation=\"1.2\" flood-opacity=\"0.7\"></feDropShadow>\n </filter>\n <g filter=\"url('#shadow')\" transform=\"translate(.5 0)\">\n <path d=\"M9.5,2c.27614,0,.5,.22388,.5,.5v6.5h3v-1.74951c0-.14893,.12215-.25049,.2513-.25049,.05457,0,.1104,.01819,.15875,.05847l2.58995,2.44153-2.58995,2.44153c-.04837,.04028-.10419,.05847-.15875,.05847-.12914,0-.2513-.10156-.2513-.25049v-1.74951h-3v6.5c0,.27612-.22386,.5-.5,.5h-1c-.27614,0-.5-.22388-.5-.5V2.5c0-.27612,.22386-.5,.5-.5h1Zm0-1h-1c-.82843,0-1.5,.67157-1.5,1.5v14c0,.82843,.67157,1.5,1.5,1.5h1c.82843,0,1.5-.67157,1.5-1.5v-5.5h1v.67757c0,.40416,.1632,.80501,.48197,1.05347,.49639,.3869,1.14001,.33571,1.56838-.02144l.02344-.01953,.0222-.02087,2.97589-2.80537c.20937-.19737,.20937-.53028,0-.72765l-2.97589-2.80537-.0222-.02087-.02345-.01965c-.22456-.18713-.5083-.29028-.79895-.29028-.3208,0-.62624,.12134-.86003,.34167-.24872,.23438-.39136,.56567-.39136,.90881v.74951h-1V2.5c0-.82843-.67157-1.5-1.5-1.5Z\" fill=\"#fff\"></path>\n <path d=\"M10,16.5v-6.5h3v1.74952c0,.21196,.24721,.32775,.41005,.19206l2.58995-2.44158-2.58995-2.44158c-.16283-.13569-.41005-.0199-.41005,.19206v1.74952h-3V2.5c0-.27614-.22386-.5-.5-.5h-1c-.27614,0-.5,.22386-.5,.5v14c0,.27614,.22386,.5,.5,.5h1c.27614,0,.5-.22386,.5-.5Z\"></path>\n </g>\n</svg>\n";
|
|
@@ -955,6 +954,7 @@ function $fc695d2eafc2b351$var$CursorOverlay(props) {
|
|
|
955
954
|
const $fc695d2eafc2b351$export$48a76196cafe3b93 = /*#__PURE__*/ (0, $gyhAV$react).forwardRef($fc695d2eafc2b351$var$Resizer);
|
|
956
955
|
|
|
957
956
|
|
|
957
|
+
|
|
958
958
|
/*
|
|
959
959
|
* Copyright 2023 Adobe. All rights reserved.
|
|
960
960
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -1251,13 +1251,14 @@ function $d14697b14e638114$var$TableView(props, ref) {
|
|
|
1251
1251
|
}
|
|
1252
1252
|
return /*#__PURE__*/ (0, $gyhAV$react).createElement((0, $gyhAV$VirtualizerItem), {
|
|
1253
1253
|
key: reusableView.key,
|
|
1254
|
-
|
|
1255
|
-
|
|
1254
|
+
layoutInfo: reusableView.layoutInfo,
|
|
1255
|
+
virtualizer: reusableView.virtualizer,
|
|
1256
|
+
parent: parent === null || parent === void 0 ? void 0 : parent.layoutInfo,
|
|
1256
1257
|
className: (0, $gyhAV$classNames)((0, (/*@__PURE__*/$parcel$interopDefault($bd5d41f647a296c3$exports))), "spectrum-Table-cellWrapper", (0, $gyhAV$classNames)((0, (/*@__PURE__*/$parcel$interopDefault($325bc3d43b25708b$exports))), {
|
|
1257
1258
|
"react-spectrum-Table-cellWrapper": !reusableView.layoutInfo.estimatedSize,
|
|
1258
1259
|
"react-spectrum-Table-cellWrapper--dropTarget": isDropTarget || isRootDroptarget
|
|
1259
1260
|
}))
|
|
1260
|
-
});
|
|
1261
|
+
}, reusableView.rendered);
|
|
1261
1262
|
};
|
|
1262
1263
|
let renderView = (type, item)=>{
|
|
1263
1264
|
switch(type){
|
|
@@ -1422,8 +1423,9 @@ function $d14697b14e638114$var$TableView(props, ref) {
|
|
|
1422
1423
|
}));
|
|
1423
1424
|
}
|
|
1424
1425
|
// This is a custom Virtualizer that also has a header that syncs its scroll position with the body.
|
|
1425
|
-
function $d14697b14e638114$var$TableVirtualizer(
|
|
1426
|
+
function $d14697b14e638114$var$TableVirtualizer(props) {
|
|
1426
1427
|
var _layout_getLayoutInfo;
|
|
1428
|
+
let { layout: layout , collection: collection , focusedKey: focusedKey , renderView: renderView , renderWrapper: renderWrapper , domRef: domRef , bodyRef: bodyRef , headerRef: headerRef , onVisibleRectChange: onVisibleRectChangeProp , isFocusVisible: isFocusVisible , isVirtualDragging: isVirtualDragging , isRootDropTarget: isRootDropTarget , ...otherProps } = props;
|
|
1427
1429
|
let { direction: direction } = (0, $gyhAV$useLocale)();
|
|
1428
1430
|
let loadingState = collection.body.props.loadingState;
|
|
1429
1431
|
let isLoading = loadingState === "loading" || loadingState === "loadingMore";
|
|
@@ -1447,7 +1449,6 @@ function $d14697b14e638114$var$TableVirtualizer({ layout: layout , collection: c
|
|
|
1447
1449
|
let item = collection.getItem(key);
|
|
1448
1450
|
let column = collection.columns[0];
|
|
1449
1451
|
let virtualizer = state.virtualizer;
|
|
1450
|
-
let modality = (0, $gyhAV$getInteractionModality)();
|
|
1451
1452
|
virtualizer.scrollToItem(key, {
|
|
1452
1453
|
duration: 0,
|
|
1453
1454
|
// Prevent scrolling to the top when clicking on column headers.
|
|
@@ -1459,22 +1460,27 @@ function $d14697b14e638114$var$TableVirtualizer({ layout: layout , collection: c
|
|
|
1459
1460
|
// Sync the scroll positions of the column headers and the body so scrollIntoViewport can
|
|
1460
1461
|
// properly decide if the column is outside the viewport or not
|
|
1461
1462
|
headerRef.current.scrollLeft = bodyRef.current.scrollLeft;
|
|
1462
|
-
if (modality === "keyboard") (0, $gyhAV$scrollIntoViewport)(document.activeElement, {
|
|
1463
|
-
containingElement: domRef.current
|
|
1464
|
-
});
|
|
1465
1463
|
}, [
|
|
1466
1464
|
collection,
|
|
1467
|
-
domRef,
|
|
1468
1465
|
bodyRef,
|
|
1469
1466
|
headerRef,
|
|
1470
1467
|
layout,
|
|
1471
1468
|
state.virtualizer
|
|
1472
1469
|
]);
|
|
1473
|
-
let
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1470
|
+
let memoedVirtualizerProps = (0, $gyhAV$useMemo)(()=>({
|
|
1471
|
+
tabIndex: otherProps.tabIndex,
|
|
1472
|
+
focusedKey: focusedKey,
|
|
1473
|
+
scrollToItem: scrollToItem,
|
|
1474
|
+
isLoading: isLoading,
|
|
1475
|
+
onLoadMore: onLoadMore
|
|
1476
|
+
}), [
|
|
1477
|
+
otherProps.tabIndex,
|
|
1478
|
+
focusedKey,
|
|
1479
|
+
scrollToItem,
|
|
1480
|
+
isLoading,
|
|
1481
|
+
onLoadMore
|
|
1482
|
+
]);
|
|
1483
|
+
let { virtualizerProps: virtualizerProps , scrollViewProps: { onVisibleRectChange: onVisibleRectChange } } = (0, $gyhAV$useVirtualizer)(memoedVirtualizerProps, state, domRef);
|
|
1478
1484
|
// this effect runs whenever the contentSize changes, it doesn't matter what the content size is
|
|
1479
1485
|
// only that it changes in a resize, and when that happens, we want to sync the body to the
|
|
1480
1486
|
// header scroll position
|
|
@@ -1501,30 +1507,6 @@ function $d14697b14e638114$var$TableVirtualizer({ layout: layout , collection: c
|
|
|
1501
1507
|
bodyRef,
|
|
1502
1508
|
headerRef
|
|
1503
1509
|
]);
|
|
1504
|
-
let onVisibleRectChange = (0, $gyhAV$useCallback)((rect)=>{
|
|
1505
|
-
state.setVisibleRect(rect);
|
|
1506
|
-
if (!isLoading && onLoadMore) {
|
|
1507
|
-
let scrollOffset = state.virtualizer.contentSize.height - rect.height * 2;
|
|
1508
|
-
if (rect.y > scrollOffset) onLoadMore();
|
|
1509
|
-
}
|
|
1510
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1511
|
-
}, [
|
|
1512
|
-
onLoadMore,
|
|
1513
|
-
isLoading,
|
|
1514
|
-
state.setVisibleRect,
|
|
1515
|
-
state.virtualizer
|
|
1516
|
-
]);
|
|
1517
|
-
(0, $gyhAV$useLayoutEffect)(()=>{
|
|
1518
|
-
if (!isLoading && onLoadMore && !state.isAnimating) {
|
|
1519
|
-
if (state.contentSize.height <= state.virtualizer.visibleRect.height) onLoadMore();
|
|
1520
|
-
}
|
|
1521
|
-
}, [
|
|
1522
|
-
state.contentSize,
|
|
1523
|
-
state.virtualizer,
|
|
1524
|
-
state.isAnimating,
|
|
1525
|
-
onLoadMore,
|
|
1526
|
-
isLoading
|
|
1527
|
-
]);
|
|
1528
1510
|
let resizerPosition = layout.getResizerPosition() - 2;
|
|
1529
1511
|
let resizerAtEdge = resizerPosition > Math.max(state.virtualizer.contentSize.width, state.virtualizer.visibleRect.width) - 3;
|
|
1530
1512
|
// this should be fine, every movement of the resizer causes a rerender
|
package/dist/main.js
CHANGED
|
@@ -680,7 +680,6 @@ function $18b3deb5c431fa13$export$d9658cdf8c86807() {
|
|
|
680
680
|
|
|
681
681
|
|
|
682
682
|
|
|
683
|
-
|
|
684
683
|
/* eslint-disable jsx-a11y/role-supports-aria-props */
|
|
685
684
|
var $1ed2399e74febaae$exports = {};
|
|
686
685
|
$1ed2399e74febaae$exports = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"-1 0 31 32\">\n <filter id=\"shadow\">\n <feDropShadow dx=\"0\" dy=\"0.5\" stdDeviation=\"1.2\" flood-opacity=\"0.7\"></feDropShadow>\n </filter>\n <g filter=\"url('#shadow')\" transform=\"translate(.5 0)\">\n <path d=\"M9.5,2c.27614,0,.5,.22388,.5,.5v6.5h3v-1.74951c0-.14893,.12215-.25049,.2513-.25049,.05457,0,.1104,.01819,.15875,.05847l2.58995,2.44153-2.58995,2.44153c-.04837,.04028-.10419,.05847-.15875,.05847-.12914,0-.2513-.10156-.2513-.25049v-1.74951h-3v6.5c0,.27612-.22386,.5-.5,.5h-1c-.27614,0-.5-.22388-.5-.5V2.5c0-.27612,.22386-.5,.5-.5h1Zm0-1h-1c-.82843,0-1.5,.67157-1.5,1.5v14c0,.82843,.67157,1.5,1.5,1.5h1c.82843,0,1.5-.67157,1.5-1.5v-5.5h1v.67757c0,.40416,.1632,.80501,.48197,1.05347,.49639,.3869,1.14001,.33571,1.56838-.02144l.02344-.01953,.0222-.02087,2.97589-2.80537c.20937-.19737,.20937-.53028,0-.72765l-2.97589-2.80537-.0222-.02087-.02345-.01965c-.22456-.18713-.5083-.29028-.79895-.29028-.3208,0-.62624,.12134-.86003,.34167-.24872,.23438-.39136,.56567-.39136,.90881v.74951h-1V2.5c0-.82843-.67157-1.5-1.5-1.5Z\" fill=\"#fff\"></path>\n <path d=\"M10,16.5v-6.5h3v1.74952c0,.21196,.24721,.32775,.41005,.19206l2.58995-2.44158-2.58995-2.44158c-.16283-.13569-.41005-.0199-.41005,.19206v1.74952h-3V2.5c0-.27614-.22386-.5-.5-.5h-1c-.27614,0-.5,.22386-.5,.5v14c0,.27614,.22386,.5,.5,.5h1c.27614,0,.5-.22386,.5-.5Z\"></path>\n </g>\n</svg>\n";
|
|
@@ -963,6 +962,7 @@ function $2877766f94c67a67$var$CursorOverlay(props) {
|
|
|
963
962
|
const $2877766f94c67a67$export$48a76196cafe3b93 = /*#__PURE__*/ (0, ($parcel$interopDefault($3fpzo$react))).forwardRef($2877766f94c67a67$var$Resizer);
|
|
964
963
|
|
|
965
964
|
|
|
965
|
+
|
|
966
966
|
/*
|
|
967
967
|
* Copyright 2023 Adobe. All rights reserved.
|
|
968
968
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
@@ -1259,13 +1259,14 @@ function $be8a9c035a82f788$var$TableView(props, ref) {
|
|
|
1259
1259
|
}
|
|
1260
1260
|
return /*#__PURE__*/ (0, ($parcel$interopDefault($3fpzo$react))).createElement((0, $3fpzo$reactariavirtualizer.VirtualizerItem), {
|
|
1261
1261
|
key: reusableView.key,
|
|
1262
|
-
|
|
1263
|
-
|
|
1262
|
+
layoutInfo: reusableView.layoutInfo,
|
|
1263
|
+
virtualizer: reusableView.virtualizer,
|
|
1264
|
+
parent: parent === null || parent === void 0 ? void 0 : parent.layoutInfo,
|
|
1264
1265
|
className: (0, $3fpzo$reactspectrumutils.classNames)((0, (/*@__PURE__*/$parcel$interopDefault($982885d0a34882ea$exports))), "spectrum-Table-cellWrapper", (0, $3fpzo$reactspectrumutils.classNames)((0, (/*@__PURE__*/$parcel$interopDefault($4afcd54cfd94dbb9$exports))), {
|
|
1265
1266
|
"react-spectrum-Table-cellWrapper": !reusableView.layoutInfo.estimatedSize,
|
|
1266
1267
|
"react-spectrum-Table-cellWrapper--dropTarget": isDropTarget || isRootDroptarget
|
|
1267
1268
|
}))
|
|
1268
|
-
});
|
|
1269
|
+
}, reusableView.rendered);
|
|
1269
1270
|
};
|
|
1270
1271
|
let renderView = (type, item)=>{
|
|
1271
1272
|
switch(type){
|
|
@@ -1430,8 +1431,9 @@ function $be8a9c035a82f788$var$TableView(props, ref) {
|
|
|
1430
1431
|
}));
|
|
1431
1432
|
}
|
|
1432
1433
|
// This is a custom Virtualizer that also has a header that syncs its scroll position with the body.
|
|
1433
|
-
function $be8a9c035a82f788$var$TableVirtualizer(
|
|
1434
|
+
function $be8a9c035a82f788$var$TableVirtualizer(props) {
|
|
1434
1435
|
var _layout_getLayoutInfo;
|
|
1436
|
+
let { layout: layout , collection: collection , focusedKey: focusedKey , renderView: renderView , renderWrapper: renderWrapper , domRef: domRef , bodyRef: bodyRef , headerRef: headerRef , onVisibleRectChange: onVisibleRectChangeProp , isFocusVisible: isFocusVisible , isVirtualDragging: isVirtualDragging , isRootDropTarget: isRootDropTarget , ...otherProps } = props;
|
|
1435
1437
|
let { direction: direction } = (0, $3fpzo$reactariai18n.useLocale)();
|
|
1436
1438
|
let loadingState = collection.body.props.loadingState;
|
|
1437
1439
|
let isLoading = loadingState === "loading" || loadingState === "loadingMore";
|
|
@@ -1455,7 +1457,6 @@ function $be8a9c035a82f788$var$TableVirtualizer({ layout: layout , collection: c
|
|
|
1455
1457
|
let item = collection.getItem(key);
|
|
1456
1458
|
let column = collection.columns[0];
|
|
1457
1459
|
let virtualizer = state.virtualizer;
|
|
1458
|
-
let modality = (0, $3fpzo$reactariainteractions.getInteractionModality)();
|
|
1459
1460
|
virtualizer.scrollToItem(key, {
|
|
1460
1461
|
duration: 0,
|
|
1461
1462
|
// Prevent scrolling to the top when clicking on column headers.
|
|
@@ -1467,22 +1468,27 @@ function $be8a9c035a82f788$var$TableVirtualizer({ layout: layout , collection: c
|
|
|
1467
1468
|
// Sync the scroll positions of the column headers and the body so scrollIntoViewport can
|
|
1468
1469
|
// properly decide if the column is outside the viewport or not
|
|
1469
1470
|
headerRef.current.scrollLeft = bodyRef.current.scrollLeft;
|
|
1470
|
-
if (modality === "keyboard") (0, $3fpzo$reactariautils.scrollIntoViewport)(document.activeElement, {
|
|
1471
|
-
containingElement: domRef.current
|
|
1472
|
-
});
|
|
1473
1471
|
}, [
|
|
1474
1472
|
collection,
|
|
1475
|
-
domRef,
|
|
1476
1473
|
bodyRef,
|
|
1477
1474
|
headerRef,
|
|
1478
1475
|
layout,
|
|
1479
1476
|
state.virtualizer
|
|
1480
1477
|
]);
|
|
1481
|
-
let
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1478
|
+
let memoedVirtualizerProps = (0, $3fpzo$react.useMemo)(()=>({
|
|
1479
|
+
tabIndex: otherProps.tabIndex,
|
|
1480
|
+
focusedKey: focusedKey,
|
|
1481
|
+
scrollToItem: scrollToItem,
|
|
1482
|
+
isLoading: isLoading,
|
|
1483
|
+
onLoadMore: onLoadMore
|
|
1484
|
+
}), [
|
|
1485
|
+
otherProps.tabIndex,
|
|
1486
|
+
focusedKey,
|
|
1487
|
+
scrollToItem,
|
|
1488
|
+
isLoading,
|
|
1489
|
+
onLoadMore
|
|
1490
|
+
]);
|
|
1491
|
+
let { virtualizerProps: virtualizerProps , scrollViewProps: { onVisibleRectChange: onVisibleRectChange } } = (0, $3fpzo$reactariavirtualizer.useVirtualizer)(memoedVirtualizerProps, state, domRef);
|
|
1486
1492
|
// this effect runs whenever the contentSize changes, it doesn't matter what the content size is
|
|
1487
1493
|
// only that it changes in a resize, and when that happens, we want to sync the body to the
|
|
1488
1494
|
// header scroll position
|
|
@@ -1509,30 +1515,6 @@ function $be8a9c035a82f788$var$TableVirtualizer({ layout: layout , collection: c
|
|
|
1509
1515
|
bodyRef,
|
|
1510
1516
|
headerRef
|
|
1511
1517
|
]);
|
|
1512
|
-
let onVisibleRectChange = (0, $3fpzo$react.useCallback)((rect)=>{
|
|
1513
|
-
state.setVisibleRect(rect);
|
|
1514
|
-
if (!isLoading && onLoadMore) {
|
|
1515
|
-
let scrollOffset = state.virtualizer.contentSize.height - rect.height * 2;
|
|
1516
|
-
if (rect.y > scrollOffset) onLoadMore();
|
|
1517
|
-
}
|
|
1518
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1519
|
-
}, [
|
|
1520
|
-
onLoadMore,
|
|
1521
|
-
isLoading,
|
|
1522
|
-
state.setVisibleRect,
|
|
1523
|
-
state.virtualizer
|
|
1524
|
-
]);
|
|
1525
|
-
(0, $3fpzo$reactariautils.useLayoutEffect)(()=>{
|
|
1526
|
-
if (!isLoading && onLoadMore && !state.isAnimating) {
|
|
1527
|
-
if (state.contentSize.height <= state.virtualizer.visibleRect.height) onLoadMore();
|
|
1528
|
-
}
|
|
1529
|
-
}, [
|
|
1530
|
-
state.contentSize,
|
|
1531
|
-
state.virtualizer,
|
|
1532
|
-
state.isAnimating,
|
|
1533
|
-
onLoadMore,
|
|
1534
|
-
isLoading
|
|
1535
|
-
]);
|
|
1536
1518
|
let resizerPosition = layout.getResizerPosition() - 2;
|
|
1537
1519
|
let resizerAtEdge = resizerPosition > Math.max(state.virtualizer.contentSize.width, state.virtualizer.visibleRect.width) - 3;
|
|
1538
1520
|
// this should be fine, every movement of the resizer causes a rerender
|