react-grid-layout 2.2.0 → 2.2.1
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/README.md +14 -55
- package/dist/{ResponsiveGridLayout-BkHF9YHa.d.mts → ResponsiveGridLayout-DqK__izz.d.mts} +1 -1
- package/dist/{ResponsiveGridLayout-CLn16-X3.d.ts → ResponsiveGridLayout-MbDNfJ8M.d.ts} +1 -1
- package/dist/{calculate-DsVTldEE.d.ts → calculate-9RxGrt-U.d.ts} +1 -1
- package/dist/{calculate-DwbL1D06.d.mts → calculate-FbCWy8x1.d.mts} +1 -1
- package/dist/{chunk-2TEFHZC4.js → chunk-2DDROKB2.js} +10 -153
- package/dist/chunk-2DDROKB2.js.map +1 -0
- package/dist/{chunk-NQUM7RXX.js → chunk-3CEWSUXL.js} +52 -46
- package/dist/chunk-3CEWSUXL.js.map +1 -0
- package/dist/{chunk-OWK47QTG.mjs → chunk-AZ6K3JIJ.mjs} +22 -16
- package/dist/chunk-AZ6K3JIJ.mjs.map +1 -0
- package/dist/chunk-PBQSHIID.js +4 -0
- package/dist/{chunk-7ELO5FRW.js.map → chunk-PBQSHIID.js.map} +1 -1
- package/dist/{chunk-43GDBEG4.js → chunk-QGXQSZII.js} +34 -39
- package/dist/chunk-QGXQSZII.js.map +1 -0
- package/dist/{chunk-OH26KG7Y.mjs → chunk-XYPIYYYQ.mjs} +12 -153
- package/dist/chunk-XYPIYYYQ.mjs.map +1 -0
- package/dist/{chunk-MUNIXYTV.mjs → chunk-YFVX5RDK.mjs} +27 -32
- package/dist/chunk-YFVX5RDK.mjs.map +1 -0
- package/dist/chunk-ZWN22PS2.mjs +3 -0
- package/dist/{chunk-526JND3R.mjs.map → chunk-ZWN22PS2.mjs.map} +1 -1
- package/dist/core.d.mts +6 -32
- package/dist/core.d.ts +6 -32
- package/dist/core.js +41 -49
- package/dist/core.mjs +2 -2
- package/dist/extras.d.mts +2 -2
- package/dist/extras.d.ts +2 -2
- package/dist/extras.js +0 -72
- package/dist/extras.js.map +1 -1
- package/dist/extras.mjs +0 -72
- package/dist/extras.mjs.map +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +24 -24
- package/dist/index.mjs +4 -4
- package/dist/legacy.d.mts +2 -2
- package/dist/legacy.d.ts +2 -2
- package/dist/legacy.js +13 -13
- package/dist/legacy.mjs +2 -2
- package/dist/{position-CXNzFxI0.d.mts → position-CetgOHhD.d.mts} +1 -1
- package/dist/{position-Dk0FRWA9.d.ts → position-DhZqWO1-.d.ts} +1 -1
- package/dist/react.d.mts +11 -14
- package/dist/react.d.ts +11 -14
- package/dist/react.js +18 -18
- package/dist/react.mjs +4 -4
- package/dist/{responsive-BB5d98xz.d.mts → responsive-DLRtE8v8.d.ts} +3 -3
- package/dist/{responsive-BXI-GCXG.d.ts → responsive-T0N0GmBB.d.mts} +3 -3
- package/dist/{types-CokovIMH.d.mts → types-BiXsdXr7.d.mts} +5 -16
- package/dist/{types-CokovIMH.d.ts → types-BiXsdXr7.d.ts} +5 -16
- package/index-dev.js +2 -3
- package/package.json +1 -1
- package/dist/chunk-2TEFHZC4.js.map +0 -1
- package/dist/chunk-43GDBEG4.js.map +0 -1
- package/dist/chunk-526JND3R.mjs +0 -3
- package/dist/chunk-7ELO5FRW.js +0 -4
- package/dist/chunk-MUNIXYTV.mjs.map +0 -1
- package/dist/chunk-NQUM7RXX.js.map +0 -1
- package/dist/chunk-OH26KG7Y.mjs.map +0 -1
- package/dist/chunk-OWK47QTG.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk2DDROKB2_js = require('./chunk-2DDROKB2.js');
|
|
4
4
|
var chunkBJFPTW5Q_js = require('./chunk-BJFPTW5Q.js');
|
|
5
5
|
var React2 = require('react');
|
|
6
6
|
var reactDraggable = require('react-draggable');
|
|
@@ -48,7 +48,7 @@ function GridItem(props) {
|
|
|
48
48
|
i,
|
|
49
49
|
resizeHandles,
|
|
50
50
|
resizeHandle,
|
|
51
|
-
constraints =
|
|
51
|
+
constraints = chunk2DDROKB2_js.defaultConstraints,
|
|
52
52
|
layoutItem,
|
|
53
53
|
layout = [],
|
|
54
54
|
onDragStart: onDragStartProp,
|
|
@@ -129,14 +129,14 @@ function GridItem(props) {
|
|
|
129
129
|
return positionStrategy.calcStyle(pos2);
|
|
130
130
|
}
|
|
131
131
|
if (useCSSTransforms) {
|
|
132
|
-
return
|
|
132
|
+
return chunk2DDROKB2_js.setTransform(pos2);
|
|
133
133
|
}
|
|
134
|
-
const styleObj =
|
|
134
|
+
const styleObj = chunk2DDROKB2_js.setTopLeft(pos2);
|
|
135
135
|
if (usePercentages) {
|
|
136
136
|
return {
|
|
137
137
|
...styleObj,
|
|
138
|
-
left:
|
|
139
|
-
width:
|
|
138
|
+
left: chunk2DDROKB2_js.perc(pos2.left / containerWidth),
|
|
139
|
+
width: chunk2DDROKB2_js.perc(pos2.width / containerWidth)
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
142
|
return styleObj;
|
|
@@ -187,7 +187,7 @@ function GridItem(props) {
|
|
|
187
187
|
newPosition.top,
|
|
188
188
|
newPosition.left
|
|
189
189
|
);
|
|
190
|
-
const { x: newX, y: newY } =
|
|
190
|
+
const { x: newX, y: newY } = chunk2DDROKB2_js.applyPositionConstraints(
|
|
191
191
|
constraints,
|
|
192
192
|
effectiveLayoutItem,
|
|
193
193
|
rawPos.x,
|
|
@@ -231,7 +231,7 @@ function GridItem(props) {
|
|
|
231
231
|
dragPositionRef.current.top,
|
|
232
232
|
dragPositionRef.current.left
|
|
233
233
|
);
|
|
234
|
-
const { x: startX, y: startY } =
|
|
234
|
+
const { x: startX, y: startY } = chunk2DDROKB2_js.applyPositionConstraints(
|
|
235
235
|
constraints,
|
|
236
236
|
effectiveLayoutItem,
|
|
237
237
|
rawPos2.x,
|
|
@@ -260,7 +260,7 @@ function GridItem(props) {
|
|
|
260
260
|
const newPosition = { top, left };
|
|
261
261
|
dragPositionRef.current = newPosition;
|
|
262
262
|
const rawPos = chunkBJFPTW5Q_js.calcXYRaw(positionParams, top, left);
|
|
263
|
-
const { x: newX, y: newY } =
|
|
263
|
+
const { x: newX, y: newY } = chunk2DDROKB2_js.applyPositionConstraints(
|
|
264
264
|
constraints,
|
|
265
265
|
effectiveLayoutItem,
|
|
266
266
|
rawPos.x,
|
|
@@ -308,7 +308,7 @@ function GridItem(props) {
|
|
|
308
308
|
setDragging(false);
|
|
309
309
|
dragPositionRef.current = { left: 0, top: 0 };
|
|
310
310
|
const rawPos = chunkBJFPTW5Q_js.calcXYRaw(positionParams, top, left);
|
|
311
|
-
const { x: newX, y: newY } =
|
|
311
|
+
const { x: newX, y: newY } = chunk2DDROKB2_js.applyPositionConstraints(
|
|
312
312
|
constraints,
|
|
313
313
|
effectiveLayoutItem,
|
|
314
314
|
rawPos.x,
|
|
@@ -337,7 +337,7 @@ function GridItem(props) {
|
|
|
337
337
|
if (!handler) return;
|
|
338
338
|
let updatedSize;
|
|
339
339
|
if (node) {
|
|
340
|
-
updatedSize =
|
|
340
|
+
updatedSize = chunk2DDROKB2_js.resizeItemInDirection(
|
|
341
341
|
resizeHandle2,
|
|
342
342
|
position,
|
|
343
343
|
size,
|
|
@@ -356,7 +356,7 @@ function GridItem(props) {
|
|
|
356
356
|
updatedSize.width,
|
|
357
357
|
updatedSize.height
|
|
358
358
|
);
|
|
359
|
-
const { w: newW, h: newH } =
|
|
359
|
+
const { w: newW, h: newH } = chunk2DDROKB2_js.applySizeConstraints(
|
|
360
360
|
constraints,
|
|
361
361
|
effectiveLayoutItem,
|
|
362
362
|
rawSize.w,
|
|
@@ -598,9 +598,9 @@ function GridLayout(props) {
|
|
|
598
598
|
dragConfig: dragConfigProp,
|
|
599
599
|
resizeConfig: resizeConfigProp,
|
|
600
600
|
dropConfig: dropConfigProp,
|
|
601
|
-
positionStrategy =
|
|
601
|
+
positionStrategy = chunk2DDROKB2_js.defaultPositionStrategy,
|
|
602
602
|
compactor: compactorProp,
|
|
603
|
-
constraints =
|
|
603
|
+
constraints = chunk2DDROKB2_js.defaultConstraints,
|
|
604
604
|
// Layout data
|
|
605
605
|
layout: propsLayout = [],
|
|
606
606
|
droppingItem: droppingItemProp,
|
|
@@ -621,19 +621,19 @@ function GridLayout(props) {
|
|
|
621
621
|
onDropDragOver: onDropDragOverProp = noop
|
|
622
622
|
} = props;
|
|
623
623
|
const gridConfig = React2.useMemo(
|
|
624
|
-
() => ({ ...
|
|
624
|
+
() => ({ ...chunk2DDROKB2_js.defaultGridConfig, ...gridConfigProp }),
|
|
625
625
|
[gridConfigProp]
|
|
626
626
|
);
|
|
627
627
|
const dragConfig = React2.useMemo(
|
|
628
|
-
() => ({ ...
|
|
628
|
+
() => ({ ...chunk2DDROKB2_js.defaultDragConfig, ...dragConfigProp }),
|
|
629
629
|
[dragConfigProp]
|
|
630
630
|
);
|
|
631
631
|
const resizeConfig = React2.useMemo(
|
|
632
|
-
() => ({ ...
|
|
632
|
+
() => ({ ...chunk2DDROKB2_js.defaultResizeConfig, ...resizeConfigProp }),
|
|
633
633
|
[resizeConfigProp]
|
|
634
634
|
);
|
|
635
635
|
const dropConfig = React2.useMemo(
|
|
636
|
-
() => ({ ...
|
|
636
|
+
() => ({ ...chunk2DDROKB2_js.defaultDropConfig, ...dropConfigProp }),
|
|
637
637
|
[dropConfigProp]
|
|
638
638
|
);
|
|
639
639
|
const { cols, rowHeight, maxRows, margin, containerPadding } = gridConfig;
|
|
@@ -654,7 +654,7 @@ function GridLayout(props) {
|
|
|
654
654
|
defaultItem: defaultDropItem,
|
|
655
655
|
onDragOver: dropConfigOnDragOver
|
|
656
656
|
} = dropConfig;
|
|
657
|
-
const compactor = compactorProp ??
|
|
657
|
+
const compactor = compactorProp ?? chunk2DDROKB2_js.getCompactor("vertical");
|
|
658
658
|
const compactType = compactor.type;
|
|
659
659
|
const allowOverlap = compactor.allowOverlap;
|
|
660
660
|
const preventCollision = compactor.preventCollision ?? false;
|
|
@@ -944,6 +944,13 @@ function GridLayout(props) {
|
|
|
944
944
|
);
|
|
945
945
|
const removeDroppingPlaceholder = React2.useCallback(() => {
|
|
946
946
|
const currentLayout = layoutRef.current;
|
|
947
|
+
const hasDroppingItem = currentLayout.some((l) => l.i === droppingItem.i);
|
|
948
|
+
if (!hasDroppingItem) {
|
|
949
|
+
setDroppingDOMNode(null);
|
|
950
|
+
setActiveDrag(null);
|
|
951
|
+
setDroppingPosition(void 0);
|
|
952
|
+
return;
|
|
953
|
+
}
|
|
947
954
|
const newLayout = compactor.compact(
|
|
948
955
|
currentLayout.filter((l) => l.i !== droppingItem.i),
|
|
949
956
|
cols
|
|
@@ -1054,6 +1061,9 @@ function GridLayout(props) {
|
|
|
1054
1061
|
e.preventDefault();
|
|
1055
1062
|
e.stopPropagation();
|
|
1056
1063
|
dragEnterCounterRef.current--;
|
|
1064
|
+
if (dragEnterCounterRef.current < 0) {
|
|
1065
|
+
dragEnterCounterRef.current = 0;
|
|
1066
|
+
}
|
|
1057
1067
|
if (dragEnterCounterRef.current === 0) {
|
|
1058
1068
|
removeDroppingPlaceholder();
|
|
1059
1069
|
}
|
|
@@ -1233,7 +1243,7 @@ var DEFAULT_COLS = {
|
|
|
1233
1243
|
};
|
|
1234
1244
|
var noop2 = () => {
|
|
1235
1245
|
};
|
|
1236
|
-
function synchronizeLayoutWithChildren2(initialLayout, children, cols,
|
|
1246
|
+
function synchronizeLayoutWithChildren2(initialLayout, children, cols, compactor) {
|
|
1237
1247
|
const layout = [];
|
|
1238
1248
|
React2__default.default.Children.forEach(children, (child) => {
|
|
1239
1249
|
if (!React2__default.default.isValidElement(child) || child.key === null) return;
|
|
@@ -1276,7 +1286,7 @@ function synchronizeLayoutWithChildren2(initialLayout, children, cols, compactTy
|
|
|
1276
1286
|
}
|
|
1277
1287
|
});
|
|
1278
1288
|
const corrected = chunkBJFPTW5Q_js.correctBounds(layout, { cols });
|
|
1279
|
-
return
|
|
1289
|
+
return compactor.compact(corrected, cols);
|
|
1280
1290
|
}
|
|
1281
1291
|
function ResponsiveGridLayout(props) {
|
|
1282
1292
|
const {
|
|
@@ -1296,17 +1306,17 @@ function ResponsiveGridLayout(props) {
|
|
|
1296
1306
|
onWidthChange = noop2,
|
|
1297
1307
|
...restProps
|
|
1298
1308
|
} = props;
|
|
1299
|
-
const compactor = compactorProp ??
|
|
1309
|
+
const compactor = compactorProp ?? chunk2DDROKB2_js.getCompactor("vertical");
|
|
1300
1310
|
const compactType = compactor.type;
|
|
1301
1311
|
const allowOverlap = compactor.allowOverlap;
|
|
1302
1312
|
const initialBreakpoint = React2.useMemo(() => {
|
|
1303
|
-
return propBreakpoint ??
|
|
1313
|
+
return propBreakpoint ?? chunk2DDROKB2_js.getBreakpointFromWidth(breakpoints, width);
|
|
1304
1314
|
}, []);
|
|
1305
1315
|
const initialCols = React2.useMemo(() => {
|
|
1306
|
-
return
|
|
1316
|
+
return chunk2DDROKB2_js.getColsFromBreakpoint(initialBreakpoint, colsConfig);
|
|
1307
1317
|
}, [initialBreakpoint, colsConfig]);
|
|
1308
1318
|
const initialLayout = React2.useMemo(() => {
|
|
1309
|
-
return
|
|
1319
|
+
return chunk2DDROKB2_js.findOrGenerateResponsiveLayout(
|
|
1310
1320
|
propsLayouts,
|
|
1311
1321
|
breakpoints,
|
|
1312
1322
|
initialBreakpoint,
|
|
@@ -1331,17 +1341,17 @@ function ResponsiveGridLayout(props) {
|
|
|
1331
1341
|
}, [layouts]);
|
|
1332
1342
|
const derivedLayout = React2.useMemo(() => {
|
|
1333
1343
|
if (!fastEquals.deepEqual(propsLayouts, prevLayoutsRef.current)) {
|
|
1334
|
-
return
|
|
1344
|
+
return chunk2DDROKB2_js.findOrGenerateResponsiveLayout(
|
|
1335
1345
|
propsLayouts,
|
|
1336
1346
|
breakpoints,
|
|
1337
1347
|
breakpoint,
|
|
1338
1348
|
breakpoint,
|
|
1339
1349
|
cols,
|
|
1340
|
-
|
|
1350
|
+
compactor
|
|
1341
1351
|
);
|
|
1342
1352
|
}
|
|
1343
1353
|
return null;
|
|
1344
|
-
}, [propsLayouts, breakpoints, breakpoint, cols,
|
|
1354
|
+
}, [propsLayouts, breakpoints, breakpoint, cols, compactor]);
|
|
1345
1355
|
const effectiveLayout = derivedLayout ?? layout;
|
|
1346
1356
|
React2.useEffect(() => {
|
|
1347
1357
|
if (derivedLayout !== null) {
|
|
@@ -1353,12 +1363,7 @@ function ResponsiveGridLayout(props) {
|
|
|
1353
1363
|
}, [derivedLayout, propsLayouts]);
|
|
1354
1364
|
React2.useEffect(() => {
|
|
1355
1365
|
if (compactType !== prevCompactTypeRef.current) {
|
|
1356
|
-
const newLayout =
|
|
1357
|
-
chunkBJFPTW5Q_js.cloneLayout(effectiveLayout),
|
|
1358
|
-
compactType,
|
|
1359
|
-
cols,
|
|
1360
|
-
allowOverlap
|
|
1361
|
-
);
|
|
1366
|
+
const newLayout = compactor.compact(chunkBJFPTW5Q_js.cloneLayout(effectiveLayout), cols);
|
|
1362
1367
|
const newLayouts = {
|
|
1363
1368
|
...layoutsRef.current,
|
|
1364
1369
|
[breakpoint]: newLayout
|
|
@@ -1371,6 +1376,7 @@ function ResponsiveGridLayout(props) {
|
|
|
1371
1376
|
}
|
|
1372
1377
|
}, [
|
|
1373
1378
|
compactType,
|
|
1379
|
+
compactor,
|
|
1374
1380
|
effectiveLayout,
|
|
1375
1381
|
cols,
|
|
1376
1382
|
allowOverlap,
|
|
@@ -1386,28 +1392,27 @@ function ResponsiveGridLayout(props) {
|
|
|
1386
1392
|
);
|
|
1387
1393
|
const colsChanged = !fastEquals.deepEqual(colsConfig, prevColsRef.current);
|
|
1388
1394
|
if (widthChanged || breakpointPropChanged || breakpointsChanged || colsChanged) {
|
|
1389
|
-
const newBreakpoint = propBreakpoint ??
|
|
1390
|
-
const newCols =
|
|
1395
|
+
const newBreakpoint = propBreakpoint ?? chunk2DDROKB2_js.getBreakpointFromWidth(breakpoints, width);
|
|
1396
|
+
const newCols = chunk2DDROKB2_js.getColsFromBreakpoint(newBreakpoint, colsConfig);
|
|
1391
1397
|
const lastBreakpoint = breakpoint;
|
|
1392
1398
|
if (lastBreakpoint !== newBreakpoint || breakpointsChanged || colsChanged) {
|
|
1393
1399
|
const newLayouts = { ...layoutsRef.current };
|
|
1394
1400
|
if (!newLayouts[lastBreakpoint]) {
|
|
1395
1401
|
newLayouts[lastBreakpoint] = chunkBJFPTW5Q_js.cloneLayout(layout);
|
|
1396
1402
|
}
|
|
1397
|
-
let newLayout =
|
|
1403
|
+
let newLayout = chunk2DDROKB2_js.findOrGenerateResponsiveLayout(
|
|
1398
1404
|
newLayouts,
|
|
1399
1405
|
breakpoints,
|
|
1400
1406
|
newBreakpoint,
|
|
1401
1407
|
lastBreakpoint,
|
|
1402
1408
|
newCols,
|
|
1403
|
-
|
|
1409
|
+
compactor
|
|
1404
1410
|
);
|
|
1405
1411
|
newLayout = synchronizeLayoutWithChildren2(
|
|
1406
1412
|
newLayout,
|
|
1407
1413
|
children,
|
|
1408
1414
|
newCols,
|
|
1409
|
-
|
|
1410
|
-
allowOverlap
|
|
1415
|
+
compactor
|
|
1411
1416
|
);
|
|
1412
1417
|
newLayouts[newBreakpoint] = newLayout;
|
|
1413
1418
|
setBreakpoint(newBreakpoint);
|
|
@@ -1418,11 +1423,11 @@ function ResponsiveGridLayout(props) {
|
|
|
1418
1423
|
onBreakpointChange(newBreakpoint, newCols);
|
|
1419
1424
|
onLayoutChange(newLayout, newLayouts);
|
|
1420
1425
|
}
|
|
1421
|
-
const currentMargin2 =
|
|
1426
|
+
const currentMargin2 = chunk2DDROKB2_js.getIndentationValue(
|
|
1422
1427
|
propMargin,
|
|
1423
1428
|
newBreakpoint
|
|
1424
1429
|
);
|
|
1425
|
-
const currentPadding = propContainerPadding ?
|
|
1430
|
+
const currentPadding = propContainerPadding ? chunk2DDROKB2_js.getIndentationValue(
|
|
1426
1431
|
propContainerPadding,
|
|
1427
1432
|
newBreakpoint
|
|
1428
1433
|
) : null;
|
|
@@ -1441,6 +1446,7 @@ function ResponsiveGridLayout(props) {
|
|
|
1441
1446
|
cols,
|
|
1442
1447
|
layout,
|
|
1443
1448
|
children,
|
|
1449
|
+
compactor,
|
|
1444
1450
|
compactType,
|
|
1445
1451
|
allowOverlap,
|
|
1446
1452
|
propMargin,
|
|
@@ -1464,14 +1470,14 @@ function ResponsiveGridLayout(props) {
|
|
|
1464
1470
|
[breakpoint, onLayoutChange]
|
|
1465
1471
|
);
|
|
1466
1472
|
const currentMargin = React2.useMemo(() => {
|
|
1467
|
-
return
|
|
1473
|
+
return chunk2DDROKB2_js.getIndentationValue(
|
|
1468
1474
|
propMargin,
|
|
1469
1475
|
breakpoint
|
|
1470
1476
|
);
|
|
1471
1477
|
}, [propMargin, breakpoint]);
|
|
1472
1478
|
const currentContainerPadding = React2.useMemo(() => {
|
|
1473
1479
|
if (propContainerPadding === null) return null;
|
|
1474
|
-
return
|
|
1480
|
+
return chunk2DDROKB2_js.getIndentationValue(
|
|
1475
1481
|
propContainerPadding,
|
|
1476
1482
|
breakpoint
|
|
1477
1483
|
);
|
|
@@ -1503,5 +1509,5 @@ function ResponsiveGridLayout(props) {
|
|
|
1503
1509
|
exports.GridItem = GridItem;
|
|
1504
1510
|
exports.GridLayout = GridLayout;
|
|
1505
1511
|
exports.ResponsiveGridLayout = ResponsiveGridLayout;
|
|
1506
|
-
//# sourceMappingURL=chunk-
|
|
1507
|
-
//# sourceMappingURL=chunk-
|
|
1512
|
+
//# sourceMappingURL=chunk-3CEWSUXL.js.map
|
|
1513
|
+
//# sourceMappingURL=chunk-3CEWSUXL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/components/GridItem.tsx","../src/react/components/GridLayout.tsx","../src/react/components/ResponsiveGridLayout.tsx"],"names":["defaultConstraints","useState","useRef","useMemo","useCallback","pos","setTransform","setTopLeft","perc","calcXYRaw","applyPositionConstraints","rawPos","calcGridItemWHPx","clamp","calcGridColWidth","resizeHandle","resizeItemInDirection","calcWHRaw","applySizeConstraints","calcGridItemPosition","useEffect","React","clsx","jsx","Resizable","DraggableCore","cloneLayoutItem","bottom","correctBounds","defaultPositionStrategy","defaultGridConfig","defaultDragConfig","defaultResizeConfig","defaultDropConfig","getCompactor","deepEqual","getLayoutItem","moveElement","withLayoutItem","getAllCollisions","calcXY","jsxs","noop","synchronizeLayoutWithChildren","getBreakpointFromWidth","getColsFromBreakpoint","findOrGenerateResponsiveLayout","cloneLayout","currentMargin","getIndentationValue"],"mappings":"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","file":"chunk-3CEWSUXL.js","sourcesContent":["/**\n * GridItem component\n *\n * An individual item within a grid layout. Handles dragging and resizing.\n */\n\nimport React, {\n useRef,\n useState,\n useCallback,\n useEffect,\n useMemo,\n type ReactElement,\n type CSSProperties\n} from \"react\";\nimport { DraggableCore, type DraggableEventHandler } from \"react-draggable\";\nimport { Resizable } from \"react-resizable\";\nimport clsx from \"clsx\";\n\nimport type {\n Position,\n DroppingPosition,\n ResizeHandleAxis,\n GridDragEvent,\n GridResizeEvent,\n LayoutConstraint,\n ConstraintContext,\n Layout,\n LayoutItem as LayoutItemType,\n PositionStrategy\n} from \"../../core/types.js\";\nimport type { PositionParams } from \"../../core/calculate.js\";\nimport {\n calcGridItemPosition,\n calcGridItemWHPx,\n calcGridColWidth,\n calcXYRaw,\n calcWHRaw,\n clamp\n} from \"../../core/calculate.js\";\nimport {\n applyPositionConstraints,\n applySizeConstraints,\n defaultConstraints\n} from \"../../core/constraints.js\";\nimport {\n setTransform,\n setTopLeft,\n perc,\n resizeItemInDirection\n} from \"../../core/position.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype PartialPosition = { top: number; left: number };\n\nexport type GridItemCallback<Data extends GridDragEvent | GridResizeEvent> = (\n i: string,\n w: number,\n h: number,\n data: Data\n) => void;\n\nexport type ResizeHandle =\n | ReactElement\n | ((\n resizeHandleAxis: ResizeHandleAxis,\n ref: React.Ref<HTMLElement>\n ) => ReactElement);\n\n// Internal callback data type with typed handle\ninterface ResizeCallbackData {\n node: HTMLElement;\n size: { width: number; height: number };\n handle: ResizeHandleAxis;\n}\n\n// react-resizable callback type (handle is string)\ntype ReactResizableCallback = (\n e: React.SyntheticEvent,\n data: {\n node: HTMLElement;\n size: { width: number; height: number };\n handle: string;\n }\n) => void;\n\nexport interface GridItemProps {\n /** Child element to render */\n children: ReactElement;\n /** Number of columns in the grid */\n cols: number;\n /** Width of the container in pixels */\n containerWidth: number;\n /** Margin between items [x, y] */\n margin: readonly [number, number];\n /** Padding inside the container [x, y] */\n containerPadding: readonly [number, number];\n /** Height of each row in pixels */\n rowHeight: number;\n /** Maximum number of rows */\n maxRows: number;\n /** Whether the item can be dragged */\n isDraggable: boolean;\n /** Whether the item can be resized */\n isResizable: boolean;\n /** Whether the item is bounded within the container */\n isBounded: boolean;\n /** Whether the item is static (can't be moved/resized) */\n static?: boolean;\n /** Use CSS transforms instead of top/left */\n useCSSTransforms?: boolean;\n /** Use percentage widths for server rendering */\n usePercentages?: boolean;\n /** Scale factor for transforms */\n transformScale?: number;\n /** Position strategy for custom positioning (#2217) */\n positionStrategy?: PositionStrategy;\n /** Drag threshold in pixels before drag starts (#2217) */\n dragThreshold?: number;\n /** Current position of a dropping element */\n droppingPosition?: DroppingPosition;\n\n /** Additional class name */\n className?: string;\n /** Additional styles */\n style?: CSSProperties;\n\n /** CSS selector for draggable handle */\n handle?: string;\n /** CSS selector for cancel handle */\n cancel?: string;\n\n /** X position in grid units */\n x: number;\n /** Y position in grid units */\n y: number;\n /** Width in grid units */\n w: number;\n /** Height in grid units */\n h: number;\n\n /** Minimum width in grid units */\n minW?: number;\n /** Maximum width in grid units */\n maxW?: number;\n /** Minimum height in grid units */\n minH?: number;\n /** Maximum height in grid units */\n maxH?: number;\n\n /** Unique identifier */\n i: string;\n\n /** Which resize handles to show */\n resizeHandles?: ResizeHandleAxis[];\n /** Custom resize handle */\n resizeHandle?: ResizeHandle;\n\n /** Layout constraints for position/size limiting */\n constraints?: LayoutConstraint[];\n\n /** The layout item data (for per-item constraints) */\n layoutItem?: LayoutItemType;\n\n /** Current layout (for constraint context) */\n layout?: Layout;\n\n /** Called when drag starts */\n onDragStart?: GridItemCallback<GridDragEvent>;\n /** Called during drag */\n onDrag?: GridItemCallback<GridDragEvent>;\n /** Called when drag stops */\n onDragStop?: GridItemCallback<GridDragEvent>;\n /** Called when resize starts */\n onResizeStart?: GridItemCallback<GridResizeEvent>;\n /** Called during resize */\n onResize?: GridItemCallback<GridResizeEvent>;\n /** Called when resize stops */\n onResizeStop?: GridItemCallback<GridResizeEvent>;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * GridItem - An individual item within a grid layout.\n *\n * Wraps a child element with drag and resize functionality.\n */\nexport function GridItem(props: GridItemProps): ReactElement {\n const {\n children,\n cols,\n containerWidth,\n margin,\n containerPadding,\n rowHeight,\n maxRows,\n isDraggable,\n isResizable,\n isBounded,\n static: isStatic,\n useCSSTransforms = true,\n usePercentages = false,\n transformScale = 1,\n positionStrategy,\n dragThreshold = 0,\n droppingPosition,\n className = \"\",\n style,\n handle = \"\",\n cancel = \"\",\n x,\n y,\n w,\n h,\n minW = 1,\n maxW = Infinity,\n minH = 1,\n maxH = Infinity,\n i,\n resizeHandles,\n resizeHandle,\n constraints = defaultConstraints,\n layoutItem,\n layout = [],\n onDragStart: onDragStartProp,\n onDrag: onDragProp,\n onDragStop: onDragStopProp,\n onResizeStart: onResizeStartProp,\n onResize: onResizeProp,\n onResizeStop: onResizeStopProp\n } = props;\n\n // State\n const [dragging, setDragging] = useState(false);\n const [resizing, setResizing] = useState(false);\n\n // Refs for position tracking (avoid state for React 18 batching)\n const elementRef = useRef<HTMLDivElement>(null);\n const dragPositionRef = useRef<PartialPosition>({ left: 0, top: 0 });\n const resizePositionRef = useRef<Position>({\n top: 0,\n left: 0,\n width: 0,\n height: 0\n });\n\n // Previous dropping position for comparison\n const prevDroppingPositionRef = useRef<DroppingPosition | undefined>(\n undefined\n );\n\n // Ref to current layout - Critical for preventing infinite update loops (#2210).\n // The dropping item effect depends on onDrag, which needs layout for constraints.\n // If we included layout directly, onDrag would be recreated on every layout change,\n // causing the effect to re-run and update layout again, creating an infinite loop.\n const layoutRef = useRef<Layout>(layout);\n layoutRef.current = layout;\n\n // Drag threshold tracking (#2217)\n // Tracks whether we're waiting to exceed the threshold before starting the drag\n const dragPendingRef = useRef(false);\n const initialDragClientRef = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n const thresholdExceededRef = useRef(false);\n\n // Position parameters\n const positionParams: PositionParams = useMemo(\n () => ({\n cols,\n containerPadding: containerPadding as [number, number],\n containerWidth,\n margin: margin as [number, number],\n maxRows,\n rowHeight\n }),\n [cols, containerPadding, containerWidth, margin, maxRows, rowHeight]\n );\n\n // Constraint context for applying constraints\n // Note: This does NOT include layout in its dependencies to prevent infinite loops (#2210).\n // The layout is accessed via layoutRef.current inside the callbacks that use this context.\n const constraintContext: ConstraintContext = useMemo(\n () => ({\n cols,\n maxRows,\n containerWidth,\n containerHeight: 0, // Auto-height grids don't have a fixed container height\n rowHeight,\n margin,\n // Use empty layout here - the actual layout will be accessed via layoutRef when needed\n // This prevents the context from changing when layout changes, avoiding callback recreation\n layout: []\n }),\n [cols, maxRows, containerWidth, rowHeight, margin]\n );\n\n // Create a getter for constraint context with current layout\n // This is called inside callbacks to get fresh layout data without causing re-renders\n const getConstraintContext = useCallback(\n (): ConstraintContext => ({\n ...constraintContext,\n layout: layoutRef.current\n }),\n [constraintContext]\n );\n\n // Effective layout item (use provided or create from props)\n const effectiveLayoutItem: LayoutItemType = useMemo(\n () =>\n layoutItem ?? {\n i,\n x,\n y,\n w,\n h,\n minW,\n maxW,\n minH,\n maxH\n },\n [layoutItem, i, x, y, w, h, minW, maxW, minH, maxH]\n );\n\n // ============================================================================\n // Style Creation\n // ============================================================================\n\n const createStyle = useCallback(\n (pos: Position): CSSProperties => {\n // Use custom positionStrategy.calcStyle() if provided (#2217)\n if (positionStrategy?.calcStyle) {\n return positionStrategy.calcStyle(pos);\n }\n\n // Default positioning based on useCSSTransforms\n if (useCSSTransforms) {\n return setTransform(pos) as CSSProperties;\n }\n\n const styleObj = setTopLeft(pos) as CSSProperties;\n\n if (usePercentages) {\n return {\n ...styleObj,\n left: perc(pos.left / containerWidth),\n width: perc(pos.width / containerWidth)\n };\n }\n\n return styleObj;\n },\n [positionStrategy, useCSSTransforms, usePercentages, containerWidth]\n );\n\n // ============================================================================\n // Drag Handlers\n // ============================================================================\n\n const onDragStart: DraggableEventHandler = useCallback(\n (e, { node }) => {\n if (!onDragStartProp) return;\n\n const { offsetParent } = node;\n if (!offsetParent) return;\n\n const parentRect = offsetParent.getBoundingClientRect();\n const clientRect = node.getBoundingClientRect();\n\n const cLeft = clientRect.left / transformScale;\n const pLeft = parentRect.left / transformScale;\n const cTop = clientRect.top / transformScale;\n const pTop = parentRect.top / transformScale;\n\n // Use custom positionStrategy.calcDragPosition() if provided (#2217)\n let newPosition: PartialPosition;\n if (positionStrategy?.calcDragPosition) {\n const mouseEvent = e as unknown as MouseEvent;\n newPosition = positionStrategy.calcDragPosition(\n mouseEvent.clientX,\n mouseEvent.clientY,\n mouseEvent.clientX - clientRect.left,\n mouseEvent.clientY - clientRect.top\n );\n } else {\n newPosition = {\n left: cLeft - pLeft + offsetParent.scrollLeft,\n top: cTop - pTop + offsetParent.scrollTop\n };\n }\n\n dragPositionRef.current = newPosition;\n\n // Threshold support (#2217) - if threshold is set, delay calling onDragStartProp\n // until the mouse has moved at least `dragThreshold` pixels\n if (dragThreshold > 0) {\n const mouseEvent = e as unknown as MouseEvent;\n initialDragClientRef.current = {\n x: mouseEvent.clientX,\n y: mouseEvent.clientY\n };\n dragPendingRef.current = true;\n thresholdExceededRef.current = false;\n setDragging(true);\n return; // Don't call onDragStartProp yet\n }\n\n setDragging(true);\n\n // Calculate raw position and apply constraints\n const rawPos = calcXYRaw(\n positionParams,\n newPosition.top,\n newPosition.left\n );\n const { x: newX, y: newY } = applyPositionConstraints(\n constraints,\n effectiveLayoutItem,\n rawPos.x,\n rawPos.y,\n getConstraintContext()\n );\n\n onDragStartProp(i, newX, newY, {\n e: e as unknown as Event,\n node,\n newPosition\n });\n },\n [\n onDragStartProp,\n transformScale,\n positionParams,\n positionStrategy,\n dragThreshold,\n constraints,\n effectiveLayoutItem,\n getConstraintContext,\n i\n ]\n );\n\n const onDrag: DraggableEventHandler = useCallback(\n (e, { node, deltaX, deltaY }) => {\n if (!onDragProp || !dragging) return;\n\n const mouseEvent = e as unknown as MouseEvent;\n\n // Threshold support (#2217) - check if we've exceeded the threshold\n if (dragPendingRef.current && !thresholdExceededRef.current) {\n const dx = mouseEvent.clientX - initialDragClientRef.current.x;\n const dy = mouseEvent.clientY - initialDragClientRef.current.y;\n const distance = Math.hypot(dx, dy);\n\n if (distance < dragThreshold) {\n // Haven't exceeded threshold yet, don't trigger drag\n return;\n }\n\n // Threshold exceeded! Call onDragStartProp first, then continue with onDrag\n thresholdExceededRef.current = true;\n dragPendingRef.current = false;\n\n // Call onDragStartProp now that threshold is exceeded\n if (onDragStartProp) {\n const rawPos = calcXYRaw(\n positionParams,\n dragPositionRef.current.top,\n dragPositionRef.current.left\n );\n const { x: startX, y: startY } = applyPositionConstraints(\n constraints,\n effectiveLayoutItem,\n rawPos.x,\n rawPos.y,\n getConstraintContext()\n );\n onDragStartProp(i, startX, startY, {\n e: e as unknown as Event,\n node,\n newPosition: dragPositionRef.current\n });\n }\n }\n\n let top = dragPositionRef.current.top + deltaY;\n let left = dragPositionRef.current.left + deltaX;\n\n // Pixel-level boundary calculations (isBounded affects pixel position)\n if (isBounded) {\n const { offsetParent } = node;\n if (offsetParent) {\n const bottomBoundary =\n offsetParent.clientHeight -\n calcGridItemWHPx(h, rowHeight, margin[1]);\n top = clamp(top, 0, bottomBoundary);\n\n const colWidth = calcGridColWidth(positionParams);\n const rightBoundary =\n containerWidth - calcGridItemWHPx(w, colWidth, margin[0]);\n left = clamp(left, 0, rightBoundary);\n }\n }\n\n const newPosition: PartialPosition = { top, left };\n dragPositionRef.current = newPosition;\n\n // Calculate raw position and apply constraints\n const rawPos = calcXYRaw(positionParams, top, left);\n const { x: newX, y: newY } = applyPositionConstraints(\n constraints,\n effectiveLayoutItem,\n rawPos.x,\n rawPos.y,\n getConstraintContext()\n );\n\n onDragProp(i, newX, newY, {\n e: e as unknown as Event,\n node,\n newPosition\n });\n },\n [\n onDragProp,\n onDragStartProp,\n dragging,\n dragThreshold,\n isBounded,\n h,\n rowHeight,\n margin,\n positionParams,\n containerWidth,\n w,\n i,\n constraints,\n effectiveLayoutItem,\n getConstraintContext\n ]\n );\n\n const onDragStop: DraggableEventHandler = useCallback(\n (e, { node }) => {\n if (!onDragStopProp || !dragging) return;\n\n // Reset threshold tracking (#2217)\n const wasPending = dragPendingRef.current;\n dragPendingRef.current = false;\n thresholdExceededRef.current = false;\n initialDragClientRef.current = { x: 0, y: 0 };\n\n // If threshold was never exceeded, don't call onDragStopProp\n // since onDragStartProp was never called\n if (wasPending) {\n setDragging(false);\n dragPositionRef.current = { left: 0, top: 0 };\n return;\n }\n\n const { left, top } = dragPositionRef.current;\n const newPosition: PartialPosition = { top, left };\n\n setDragging(false);\n dragPositionRef.current = { left: 0, top: 0 };\n\n // Calculate raw position and apply constraints\n const rawPos = calcXYRaw(positionParams, top, left);\n const { x: newX, y: newY } = applyPositionConstraints(\n constraints,\n effectiveLayoutItem,\n rawPos.x,\n rawPos.y,\n getConstraintContext()\n );\n\n onDragStopProp(i, newX, newY, {\n e: e as unknown as Event,\n node,\n newPosition\n });\n },\n [\n onDragStopProp,\n dragging,\n positionParams,\n constraints,\n effectiveLayoutItem,\n getConstraintContext,\n i\n ]\n );\n\n // ============================================================================\n // Resize Handlers\n // ============================================================================\n\n const onResizeHandler = useCallback(\n (\n e: React.SyntheticEvent,\n { node, size, handle: resizeHandle }: ResizeCallbackData,\n position: Position,\n handlerName: \"onResizeStart\" | \"onResize\" | \"onResizeStop\"\n ) => {\n const handler =\n handlerName === \"onResizeStart\"\n ? onResizeStartProp\n : handlerName === \"onResize\"\n ? onResizeProp\n : onResizeStopProp;\n\n if (!handler) return;\n\n // Sizing based on resize direction\n let updatedSize: Position;\n if (node) {\n updatedSize = resizeItemInDirection(\n resizeHandle,\n position,\n size as Position,\n containerWidth\n );\n } else {\n updatedSize = {\n ...size,\n top: position.top,\n left: position.left\n } as Position;\n }\n\n resizePositionRef.current = updatedSize;\n\n // Calculate raw grid dimensions and apply constraints\n const rawSize = calcWHRaw(\n positionParams,\n updatedSize.width,\n updatedSize.height\n );\n const { w: newW, h: newH } = applySizeConstraints(\n constraints,\n effectiveLayoutItem,\n rawSize.w,\n rawSize.h,\n resizeHandle,\n getConstraintContext()\n );\n\n handler(i, newW, newH, {\n e: e.nativeEvent,\n node,\n size: updatedSize,\n handle: resizeHandle\n });\n },\n [\n onResizeStartProp,\n onResizeProp,\n onResizeStopProp,\n containerWidth,\n positionParams,\n i,\n constraints,\n effectiveLayoutItem,\n getConstraintContext\n ]\n );\n\n const handleResizeStart: ReactResizableCallback = useCallback(\n (e, data) => {\n setResizing(true);\n const pos = calcGridItemPosition(positionParams, x, y, w, h);\n const typedData: ResizeCallbackData = {\n ...data,\n handle: data.handle as ResizeHandleAxis\n };\n onResizeHandler(e, typedData, pos, \"onResizeStart\");\n },\n [onResizeHandler, positionParams, x, y, w, h]\n );\n\n const handleResize: ReactResizableCallback = useCallback(\n (e, data) => {\n const pos = calcGridItemPosition(positionParams, x, y, w, h);\n const typedData: ResizeCallbackData = {\n ...data,\n handle: data.handle as ResizeHandleAxis\n };\n onResizeHandler(e, typedData, pos, \"onResize\");\n },\n [onResizeHandler, positionParams, x, y, w, h]\n );\n\n const handleResizeStop: ReactResizableCallback = useCallback(\n (e, data) => {\n setResizing(false);\n resizePositionRef.current = { top: 0, left: 0, width: 0, height: 0 };\n const pos = calcGridItemPosition(positionParams, x, y, w, h);\n const typedData: ResizeCallbackData = {\n ...data,\n handle: data.handle as ResizeHandleAxis\n };\n onResizeHandler(e, typedData, pos, \"onResizeStop\");\n },\n [onResizeHandler, positionParams, x, y, w, h]\n );\n\n // ============================================================================\n // Dropping Item Support\n // ============================================================================\n\n useEffect(() => {\n if (!droppingPosition) return;\n\n const node = elementRef.current;\n if (!node) return;\n\n const prevDroppingPosition = prevDroppingPositionRef.current || {\n left: 0,\n top: 0\n };\n\n const shouldDrag =\n dragging &&\n (droppingPosition.left !== prevDroppingPosition.left ||\n droppingPosition.top !== prevDroppingPosition.top);\n\n if (!dragging) {\n // Start drag - simulate the draggable callback data\n const fakeData = {\n node,\n deltaX: droppingPosition.left,\n deltaY: droppingPosition.top,\n lastX: 0,\n lastY: 0,\n x: droppingPosition.left,\n y: droppingPosition.top\n };\n onDragStart(droppingPosition.e as unknown as MouseEvent, fakeData);\n } else if (shouldDrag) {\n // Continue drag\n const deltaX = droppingPosition.left - dragPositionRef.current.left;\n const deltaY = droppingPosition.top - dragPositionRef.current.top;\n\n const fakeData = {\n node,\n deltaX,\n deltaY,\n lastX: dragPositionRef.current.left,\n lastY: dragPositionRef.current.top,\n x: droppingPosition.left,\n y: droppingPosition.top\n };\n onDrag(droppingPosition.e as unknown as MouseEvent, fakeData);\n }\n\n prevDroppingPositionRef.current = droppingPosition;\n }, [droppingPosition, dragging, onDragStart, onDrag]);\n\n // ============================================================================\n // Render\n // ============================================================================\n\n const pos = calcGridItemPosition(\n positionParams,\n x,\n y,\n w,\n h,\n dragging ? dragPositionRef.current : null,\n resizing ? resizePositionRef.current : null\n );\n\n const child = React.Children.only(children);\n\n // Calculate constraints for resizing\n // Note: We use wide-open constraints for react-resizable and let our pluggable\n // constraint system handle the actual limits. This allows constraints to be\n // fully controllable via the constraints prop.\n const minGridUnit = calcGridItemPosition(positionParams, 0, 0, 1, 1);\n const minConstraints: [number, number] = [\n minGridUnit.width,\n minGridUnit.height\n ];\n const maxConstraints: [number, number] = [Infinity, Infinity];\n\n // Get child props safely\n const childProps = (child as ReactElement<Record<string, unknown>>).props;\n const childClassName = childProps[\"className\"] as string | undefined;\n const childStyle = childProps[\"style\"] as CSSProperties | undefined;\n\n // Create the child element with updated props\n let newChild: ReactElement = React.cloneElement(child, {\n ref: elementRef,\n className: clsx(\"react-grid-item\", childClassName, className, {\n static: isStatic,\n resizing,\n \"react-draggable\": isDraggable,\n \"react-draggable-dragging\": dragging,\n dropping: Boolean(droppingPosition),\n cssTransforms: useCSSTransforms\n }),\n style: {\n ...style,\n ...childStyle,\n ...createStyle(pos)\n }\n } as Record<string, unknown>);\n\n // Wrap with Resizable\n // Cast resizeHandle to match react-resizable's expected type (string instead of ResizeHandleAxis)\n const resizableHandle = resizeHandle as\n | ReactElement\n | ((axis: string, ref: React.Ref<HTMLElement>) => ReactElement)\n | undefined;\n\n newChild = (\n <Resizable\n draggableOpts={{ disabled: !isResizable }}\n className={isResizable ? undefined : \"react-resizable-hide\"}\n width={pos.width}\n height={pos.height}\n minConstraints={minConstraints}\n maxConstraints={maxConstraints}\n onResizeStart={handleResizeStart}\n onResize={handleResize}\n onResizeStop={handleResizeStop}\n transformScale={transformScale}\n resizeHandles={resizeHandles}\n handle={resizableHandle}\n >\n {newChild}\n </Resizable>\n );\n\n // Wrap with DraggableCore\n newChild = (\n <DraggableCore\n disabled={!isDraggable}\n onStart={onDragStart}\n onDrag={onDrag}\n onStop={onDragStop}\n handle={handle}\n cancel={\".react-resizable-handle\" + (cancel ? \",\" + cancel : \"\")}\n scale={transformScale}\n nodeRef={elementRef}\n >\n {newChild}\n </DraggableCore>\n );\n\n return newChild;\n}\n\nexport default GridItem;\n","/**\n * GridLayout component\n *\n * A reactive, fluid grid layout with draggable, resizable components.\n */\n\nimport React, {\n useState,\n useCallback,\n useEffect,\n useRef,\n useMemo,\n type ReactElement,\n type CSSProperties,\n type DragEvent as ReactDragEvent\n} from \"react\";\nimport { deepEqual } from \"fast-equals\";\nimport clsx from \"clsx\";\n\nimport type {\n Layout,\n LayoutItem,\n CompactType,\n DroppingPosition,\n GridDragEvent,\n GridResizeEvent,\n Mutable,\n GridConfig,\n DragConfig,\n ResizeConfig,\n DropConfig,\n PositionStrategy,\n Compactor,\n LayoutConstraint\n} from \"../../core/types.js\";\nimport {\n defaultGridConfig,\n defaultDragConfig,\n defaultResizeConfig,\n defaultDropConfig\n} from \"../../core/types.js\";\nimport type { PositionParams } from \"../../core/calculate.js\";\nimport {\n bottom,\n cloneLayoutItem,\n getLayoutItem,\n moveElement,\n withLayoutItem,\n correctBounds\n} from \"../../core/layout.js\";\nimport { getAllCollisions } from \"../../core/collision.js\";\n// Note: compact from compact-compat.js is NOT used - we use compactor.compact() instead (#2213)\nimport { getCompactor } from \"../../core/compactors.js\";\nimport {\n calcXY,\n calcGridColWidth,\n calcGridItemWHPx\n} from \"../../core/calculate.js\";\nimport { defaultPositionStrategy } from \"../../core/position.js\";\nimport { defaultConstraints } from \"../../core/constraints.js\";\n\nimport { GridItem, type ResizeHandle } from \"./GridItem.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type EventCallback = (\n layout: Layout,\n oldItem: LayoutItem | null,\n newItem: LayoutItem | null,\n placeholder: LayoutItem | null,\n event: Event,\n element?: HTMLElement\n) => void;\n\nexport interface GridLayoutProps {\n // ===========================================================================\n // Required Props\n // ===========================================================================\n\n /** Child elements to render in the grid */\n children: React.ReactNode;\n\n /** Width of the container in pixels */\n width: number;\n\n // ===========================================================================\n // Composable Configuration Interfaces (v2 API)\n // ===========================================================================\n\n /**\n * Grid measurement configuration.\n * @see GridConfig\n */\n gridConfig?: Partial<GridConfig>;\n\n /**\n * Drag behavior configuration.\n * @see DragConfig\n */\n dragConfig?: Partial<DragConfig>;\n\n /**\n * Resize behavior configuration.\n * @see ResizeConfig\n */\n resizeConfig?: Partial<ResizeConfig>;\n\n /**\n * External drop configuration.\n * @see DropConfig\n */\n dropConfig?: Partial<DropConfig>;\n\n /**\n * CSS positioning strategy.\n * Use transformStrategy (default), absoluteStrategy, or createScaledStrategy(scale).\n * @see PositionStrategy\n */\n positionStrategy?: PositionStrategy;\n\n /**\n * Layout compaction strategy.\n * Use verticalCompactor (default), horizontalCompactor, or noCompactor.\n * @see Compactor\n */\n compactor?: Compactor;\n\n /**\n * Layout constraints for position and size limiting.\n * Applied during drag/resize operations.\n * Default: [gridBounds, minMaxSize]\n * @see LayoutConstraint\n */\n constraints?: LayoutConstraint[];\n\n // ===========================================================================\n // Layout Data\n // ===========================================================================\n\n /** Layout definition */\n layout?: Layout;\n\n /** Item to use when dropping from outside */\n droppingItem?: LayoutItem;\n\n // ===========================================================================\n // Container Props\n // ===========================================================================\n\n /** Whether to auto-size the container height */\n autoSize?: boolean;\n\n /** Additional class name */\n className?: string;\n\n /** Additional styles */\n style?: CSSProperties;\n\n /** Ref to the container element */\n innerRef?: React.Ref<HTMLDivElement>;\n\n // ===========================================================================\n // Callbacks\n // ===========================================================================\n\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout) => void;\n\n /** Called when drag starts */\n onDragStart?: EventCallback;\n\n /** Called during drag */\n onDrag?: EventCallback;\n\n /** Called when drag stops */\n onDragStop?: EventCallback;\n\n /** Called when resize starts */\n onResizeStart?: EventCallback;\n\n /** Called during resize */\n onResize?: EventCallback;\n\n /** Called when resize stops */\n onResizeStop?: EventCallback;\n\n /** Called when an item is dropped from outside */\n onDrop?: (layout: Layout, item: LayoutItem | undefined, e: Event) => void;\n\n /** Called when dragging over the grid */\n onDropDragOver?: (\n e: ReactDragEvent\n ) =>\n | { w?: number; h?: number; dragOffsetX?: number; dragOffsetY?: number }\n | false\n | void;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nconst noop = () => {};\n\nconst layoutClassName = \"react-grid-layout\";\n\n// Check for Firefox\nlet isFirefox = false;\ntry {\n isFirefox = /firefox/i.test(navigator.userAgent);\n} catch {\n /* Ignore */\n}\n\n/**\n * Compare children arrays for equality\n */\nfunction childrenEqual(a: React.ReactNode, b: React.ReactNode): boolean {\n const aArr = React.Children.toArray(a);\n const bArr = React.Children.toArray(b);\n\n if (aArr.length !== bArr.length) return false;\n\n for (let i = 0; i < aArr.length; i++) {\n const aChild = aArr[i] as ReactElement;\n const bChild = bArr[i] as ReactElement;\n if (aChild?.key !== bChild?.key) return false;\n }\n\n return true;\n}\n\n/**\n * Synchronize layout with children\n */\nfunction synchronizeLayoutWithChildren(\n initialLayout: Layout,\n children: React.ReactNode,\n cols: number,\n compactor: Compactor\n): Layout {\n const layout: LayoutItem[] = [];\n const childKeys = new Set<string>();\n\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child) || child.key === null) return;\n const key = String(child.key);\n childKeys.add(key);\n\n // Find existing layout item\n const existingItem = initialLayout.find(l => l.i === key);\n\n if (existingItem) {\n layout.push(cloneLayoutItem(existingItem));\n } else {\n // Create new layout item from child data-grid prop\n const childProps = child.props as { \"data-grid\"?: Partial<LayoutItem> };\n const dataGrid = childProps[\"data-grid\"];\n\n if (dataGrid) {\n layout.push({\n i: key,\n x: dataGrid.x ?? 0,\n y: dataGrid.y ?? 0,\n w: dataGrid.w ?? 1,\n h: dataGrid.h ?? 1,\n minW: dataGrid.minW,\n maxW: dataGrid.maxW,\n minH: dataGrid.minH,\n maxH: dataGrid.maxH,\n static: dataGrid.static,\n isDraggable: dataGrid.isDraggable,\n isResizable: dataGrid.isResizable,\n resizeHandles: dataGrid.resizeHandles,\n isBounded: dataGrid.isBounded\n });\n } else {\n // Create default layout item\n layout.push({\n i: key,\n x: 0,\n y: bottom(layout),\n w: 1,\n h: 1\n });\n }\n }\n });\n\n // Correct bounds and compact using the compactor's compact method (#2213)\n const corrected = correctBounds(layout, { cols });\n return compactor.compact(corrected, cols);\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * GridLayout - A reactive, fluid grid layout with draggable, resizable components.\n */\nexport function GridLayout(props: GridLayoutProps): ReactElement {\n const {\n // Required\n children,\n width,\n\n // Composable config interfaces\n gridConfig: gridConfigProp,\n dragConfig: dragConfigProp,\n resizeConfig: resizeConfigProp,\n dropConfig: dropConfigProp,\n positionStrategy = defaultPositionStrategy,\n compactor: compactorProp,\n constraints = defaultConstraints,\n\n // Layout data\n layout: propsLayout = [],\n droppingItem: droppingItemProp,\n\n // Container props\n autoSize = true,\n className = \"\",\n style = {},\n innerRef,\n\n // Callbacks\n onLayoutChange = noop,\n onDragStart: onDragStartProp = noop,\n onDrag: onDragProp = noop,\n onDragStop: onDragStopProp = noop,\n onResizeStart: onResizeStartProp = noop,\n onResize: onResizeProp = noop,\n onResizeStop: onResizeStopProp = noop,\n onDrop: onDropProp = noop,\n onDropDragOver: onDropDragOverProp = noop\n } = props;\n\n // Resolve config interfaces with defaults\n const gridConfig: GridConfig = useMemo(\n () => ({ ...defaultGridConfig, ...gridConfigProp }),\n [gridConfigProp]\n );\n const dragConfig: DragConfig = useMemo(\n () => ({ ...defaultDragConfig, ...dragConfigProp }),\n [dragConfigProp]\n );\n const resizeConfig: ResizeConfig = useMemo(\n () => ({ ...defaultResizeConfig, ...resizeConfigProp }),\n [resizeConfigProp]\n );\n const dropConfig: DropConfig = useMemo(\n () => ({ ...defaultDropConfig, ...dropConfigProp }),\n [dropConfigProp]\n );\n\n // Destructure resolved configs for convenience\n const { cols, rowHeight, maxRows, margin, containerPadding } = gridConfig;\n const {\n enabled: isDraggable,\n bounded: isBounded,\n handle: draggableHandle,\n cancel: draggableCancel,\n threshold: dragThreshold\n } = dragConfig;\n const {\n enabled: isResizable,\n handles: resizeHandles,\n handleComponent: resizeHandle\n } = resizeConfig;\n const {\n enabled: isDroppable,\n defaultItem: defaultDropItem,\n onDragOver: dropConfigOnDragOver\n } = dropConfig;\n\n // Get compactor (use provided or get from type)\n const compactor = compactorProp ?? getCompactor(\"vertical\");\n const compactType = compactor.type;\n const allowOverlap = compactor.allowOverlap;\n const preventCollision = compactor.preventCollision ?? false;\n\n // Resolve dropping item - memoized to avoid unstable reference in useCallback dependencies\n const droppingItem = useMemo(\n () =>\n droppingItemProp ?? {\n i: \"__dropping-elem__\",\n ...defaultDropItem\n },\n [droppingItemProp, defaultDropItem]\n );\n\n // Position strategy values\n const useCSSTransforms = positionStrategy.type === \"transform\";\n const transformScale = positionStrategy.scale;\n\n const effectiveContainerPadding = containerPadding ?? margin;\n\n // State\n const [mounted, setMounted] = useState(false);\n const [layout, setLayout] = useState<Layout>(() =>\n synchronizeLayoutWithChildren(propsLayout, children, cols, compactor)\n );\n const [activeDrag, setActiveDrag] = useState<LayoutItem | null>(null);\n const [resizing, setResizing] = useState(false);\n const [droppingDOMNode, setDroppingDOMNode] = useState<ReactElement | null>(\n null\n );\n const [droppingPosition, setDroppingPosition] = useState<\n DroppingPosition | undefined\n >();\n\n // Refs for tracking previous state\n const oldDragItemRef = useRef<LayoutItem | null>(null);\n const oldResizeItemRef = useRef<LayoutItem | null>(null);\n const oldLayoutRef = useRef<Layout | null>(null);\n const dragEnterCounterRef = useRef(0);\n const prevLayoutRef = useRef<Layout>(layout);\n const prevPropsLayoutRef = useRef<Layout>(propsLayout);\n const prevChildrenRef = useRef<React.ReactNode>(children);\n const prevCompactTypeRef = useRef<CompactType>(compactType);\n\n // Ref to current layout - Critical for preventing infinite update loops (#2204).\n // This allows callbacks to access the latest layout without including `layout`\n // in dependency arrays, which would cause callbacks to be recreated on every\n // layout change and trigger infinite re-renders via GridItem's useEffect.\n const layoutRef = useRef<Layout>(layout);\n layoutRef.current = layout;\n\n // Mount effect - call onLayoutChange with initial layout if it differs from props\n useEffect(() => {\n setMounted(true);\n // Possibly call back with layout on mount. This should be done after correcting the layout width\n // to ensure we don't rerender with the wrong width.\n if (!deepEqual(layout, propsLayout)) {\n onLayoutChange(layout);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Only run on mount\n\n // Sync layout from props\n useEffect(() => {\n if (activeDrag) return; // Don't update during drag\n if (droppingDOMNode) return; // Don't update during drop from outside\n\n const layoutChanged = !deepEqual(propsLayout, prevPropsLayoutRef.current);\n const childrenChanged = !childrenEqual(children, prevChildrenRef.current);\n const compactTypeChanged = compactType !== prevCompactTypeRef.current;\n\n if (layoutChanged || childrenChanged || compactTypeChanged) {\n const baseLayout = layoutChanged ? propsLayout : layout;\n const newLayout = synchronizeLayoutWithChildren(\n baseLayout,\n children,\n cols,\n compactor\n );\n setLayout(newLayout);\n }\n\n prevPropsLayoutRef.current = propsLayout;\n prevChildrenRef.current = children;\n prevCompactTypeRef.current = compactType;\n }, [\n propsLayout,\n children,\n cols,\n compactType,\n compactor,\n activeDrag,\n droppingDOMNode,\n layout\n ]);\n\n // Layout change callback\n useEffect(() => {\n if (!activeDrag && !deepEqual(layout, prevLayoutRef.current)) {\n prevLayoutRef.current = layout;\n onLayoutChange(layout);\n }\n }, [layout, activeDrag, onLayoutChange]);\n\n // ============================================================================\n // Container Height\n // ============================================================================\n\n const containerHeight = useMemo((): string | undefined => {\n if (!autoSize) return undefined;\n const nbRow = bottom(layout);\n const containerPaddingY = effectiveContainerPadding[1];\n return (\n nbRow * rowHeight + (nbRow - 1) * margin[1] + containerPaddingY * 2 + \"px\"\n );\n }, [autoSize, layout, rowHeight, margin, effectiveContainerPadding]);\n\n // ============================================================================\n // Drag Handlers\n // ============================================================================\n\n const onDragStart = useCallback(\n (i: string, _x: number, _y: number, data: GridDragEvent) => {\n const currentLayout = layoutRef.current;\n const l = getLayoutItem(currentLayout, i);\n if (!l) return;\n\n const placeholder: LayoutItem = {\n w: l.w,\n h: l.h,\n x: l.x,\n y: l.y,\n i\n };\n\n oldDragItemRef.current = cloneLayoutItem(l);\n oldLayoutRef.current = currentLayout;\n setActiveDrag(placeholder);\n\n onDragStartProp(currentLayout, l, l, null, data.e, data.node);\n },\n [onDragStartProp]\n );\n\n const onDrag = useCallback(\n (i: string, x: number, y: number, data: GridDragEvent) => {\n const currentLayout = layoutRef.current;\n const oldDragItem = oldDragItemRef.current;\n const l = getLayoutItem(currentLayout, i);\n if (!l) return;\n\n const placeholder: LayoutItem = {\n w: l.w,\n h: l.h,\n x: l.x,\n y: l.y,\n i\n };\n\n // Move the element\n const newLayout = moveElement(\n currentLayout,\n l,\n x,\n y,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n onDragProp(newLayout, oldDragItem, l, placeholder, data.e, data.node);\n\n // Use compactor.compact() - it handles allowOverlap internally (#2213)\n setLayout(compactor.compact(newLayout, cols));\n setActiveDrag(placeholder);\n },\n [preventCollision, compactType, cols, allowOverlap, compactor, onDragProp]\n );\n\n const onDragStop = useCallback(\n (i: string, x: number, y: number, data: GridDragEvent) => {\n if (!activeDrag) return;\n\n const currentLayout = layoutRef.current;\n const oldDragItem = oldDragItemRef.current;\n const l = getLayoutItem(currentLayout, i);\n if (!l) return;\n\n const newLayout = moveElement(\n currentLayout,\n l,\n x,\n y,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n // Use compactor.compact() - it handles allowOverlap internally (#2213)\n const finalLayout = compactor.compact(newLayout, cols);\n\n onDragStopProp(finalLayout, oldDragItem, l, null, data.e, data.node);\n\n const oldLayout = oldLayoutRef.current;\n oldDragItemRef.current = null;\n oldLayoutRef.current = null;\n setActiveDrag(null);\n setLayout(finalLayout);\n\n if (oldLayout && !deepEqual(oldLayout, finalLayout)) {\n onLayoutChange(finalLayout);\n }\n },\n [\n activeDrag,\n preventCollision,\n compactType,\n cols,\n allowOverlap,\n compactor,\n onDragStopProp,\n onLayoutChange\n ]\n );\n\n // ============================================================================\n // Resize Handlers\n // ============================================================================\n\n const onResizeStart = useCallback(\n (i: string, _w: number, _h: number, data: GridResizeEvent) => {\n const currentLayout = layoutRef.current;\n const l = getLayoutItem(currentLayout, i);\n if (!l) return;\n\n oldResizeItemRef.current = cloneLayoutItem(l);\n oldLayoutRef.current = currentLayout;\n setResizing(true);\n\n onResizeStartProp(currentLayout, l, l, null, data.e, data.node);\n },\n [onResizeStartProp]\n );\n\n const onResize = useCallback(\n (i: string, w: number, h: number, data: GridResizeEvent) => {\n const currentLayout = layoutRef.current;\n const oldResizeItem = oldResizeItemRef.current;\n const { handle } = data;\n\n let shouldMoveItem = false;\n let newX: number | undefined;\n let newY: number | undefined;\n\n const [newLayout, l] = withLayoutItem(currentLayout, i, item => {\n newX = item.x;\n newY = item.y;\n\n // Handle corner/edge resizing that affects position\n if ([\"sw\", \"w\", \"nw\", \"n\", \"ne\"].includes(handle)) {\n if ([\"sw\", \"nw\", \"w\"].includes(handle)) {\n newX = item.x + (item.w - w);\n w = item.x !== newX && newX < 0 ? item.w : w;\n newX = newX < 0 ? 0 : newX;\n }\n\n if ([\"ne\", \"n\", \"nw\"].includes(handle)) {\n newY = item.y + (item.h - h);\n h = item.y !== newY && newY < 0 ? item.h : h;\n newY = newY < 0 ? 0 : newY;\n }\n\n shouldMoveItem = true;\n }\n\n // Check for collisions if preventCollision is enabled\n if (preventCollision && !allowOverlap) {\n const collisions = getAllCollisions(currentLayout, {\n ...item,\n w,\n h,\n x: newX ?? item.x,\n y: newY ?? item.y\n }).filter(layoutItem => layoutItem.i !== item.i);\n\n if (collisions.length > 0) {\n newY = item.y;\n h = item.h;\n newX = item.x;\n w = item.w;\n shouldMoveItem = false;\n }\n }\n\n (item as Mutable<LayoutItem>).w = w;\n (item as Mutable<LayoutItem>).h = h;\n\n return item;\n });\n\n if (!l) return;\n\n let finalLayout = newLayout;\n if (shouldMoveItem && newX !== undefined && newY !== undefined) {\n finalLayout = moveElement(\n newLayout,\n l,\n newX,\n newY,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n }\n\n const placeholder: LayoutItem = {\n w: l.w,\n h: l.h,\n x: l.x,\n y: l.y,\n i,\n static: true\n };\n\n onResizeProp(\n finalLayout,\n oldResizeItem,\n l,\n placeholder,\n data.e,\n data.node\n );\n\n // Use compactor.compact() - it handles allowOverlap internally (#2213)\n setLayout(compactor.compact(finalLayout, cols));\n setActiveDrag(placeholder);\n },\n [preventCollision, compactType, cols, allowOverlap, compactor, onResizeProp]\n );\n\n const onResizeStop = useCallback(\n (i: string, _w: number, _h: number, data: GridResizeEvent) => {\n const currentLayout = layoutRef.current;\n const oldResizeItem = oldResizeItemRef.current;\n const l = getLayoutItem(currentLayout, i);\n\n // Use compactor.compact() - it handles allowOverlap internally (#2213)\n const finalLayout = compactor.compact(currentLayout, cols);\n\n onResizeStopProp(\n finalLayout,\n oldResizeItem,\n l ?? null,\n null,\n data.e,\n data.node\n );\n\n const oldLayout = oldLayoutRef.current;\n oldResizeItemRef.current = null;\n oldLayoutRef.current = null;\n setActiveDrag(null);\n setResizing(false);\n setLayout(finalLayout);\n\n if (oldLayout && !deepEqual(oldLayout, finalLayout)) {\n onLayoutChange(finalLayout);\n }\n },\n [cols, compactor, onResizeStopProp, onLayoutChange]\n );\n\n // ============================================================================\n // Drop Handlers\n // ============================================================================\n\n const removeDroppingPlaceholder = useCallback(() => {\n // Guard against being called when there's no dropping item (#2210)\n // This makes the function idempotent and safe to call multiple times\n const currentLayout = layoutRef.current;\n const hasDroppingItem = currentLayout.some(l => l.i === droppingItem.i);\n if (!hasDroppingItem) {\n // Nothing to remove, just ensure state is clean\n setDroppingDOMNode(null);\n setActiveDrag(null);\n setDroppingPosition(undefined);\n return;\n }\n\n // Use compactor.compact() - it handles allowOverlap internally (#2213)\n const newLayout = compactor.compact(\n currentLayout.filter(l => l.i !== droppingItem.i),\n cols\n );\n\n setLayout(newLayout);\n setDroppingDOMNode(null);\n setActiveDrag(null);\n setDroppingPosition(undefined);\n }, [droppingItem.i, cols, compactor]);\n\n const handleDragOver = useCallback(\n (e: ReactDragEvent): void | false => {\n e.preventDefault();\n e.stopPropagation();\n\n // Firefox hack\n if (\n isFirefox &&\n !(e.nativeEvent.target as HTMLElement)?.classList.contains(\n layoutClassName\n )\n ) {\n return false;\n }\n\n // Use dropConfig.onDragOver if provided, otherwise fall back to onDropDragOver prop (#2212)\n // dropConfig.onDragOver uses native DragEvent, onDropDragOver uses React's DragEvent\n const rawResult = dropConfigOnDragOver\n ? dropConfigOnDragOver(e.nativeEvent as DragEvent)\n : onDropDragOverProp(e);\n if (rawResult === false) {\n if (droppingDOMNode) {\n removeDroppingPlaceholder();\n }\n return false;\n }\n const {\n dragOffsetX = 0,\n dragOffsetY = 0,\n ...onDragOverResult\n } = rawResult ?? {};\n\n const finalDroppingItem = { ...droppingItem, ...onDragOverResult };\n const gridRect = e.currentTarget.getBoundingClientRect();\n\n // Calculate position params for proper column width calculation\n const positionParams: PositionParams = {\n cols,\n margin: margin as [number, number],\n maxRows,\n rowHeight,\n containerWidth: width,\n containerPadding: effectiveContainerPadding as [number, number]\n };\n\n // Calculate actual column width accounting for margins and padding\n const actualColWidth = calcGridColWidth(positionParams);\n\n // Calculate item dimensions in pixels including margins between cells\n const itemPixelWidth = calcGridItemWHPx(\n finalDroppingItem.w,\n actualColWidth,\n (margin as [number, number])[0]\n );\n const itemPixelHeight = calcGridItemWHPx(\n finalDroppingItem.h,\n rowHeight,\n (margin as [number, number])[1]\n );\n\n // Center the dropping item by offsetting by half its size\n const itemCenterOffsetX = itemPixelWidth / 2;\n const itemCenterOffsetY = itemPixelHeight / 2;\n\n // Calculate mouse position relative to grid, accounting for drag offset and item centering\n const rawGridX =\n e.clientX - gridRect.left + dragOffsetX - itemCenterOffsetX;\n const rawGridY =\n e.clientY - gridRect.top + dragOffsetY - itemCenterOffsetY;\n\n // Clamp to prevent negative positions (calcXY handles upper bound clamping)\n const clampedGridX = Math.max(0, rawGridX);\n const clampedGridY = Math.max(0, rawGridY);\n\n const newDroppingPosition: DroppingPosition = {\n left: clampedGridX / transformScale,\n top: clampedGridY / transformScale,\n e: e.nativeEvent\n };\n\n if (!droppingDOMNode) {\n const calculatedPosition = calcXY(\n positionParams,\n clampedGridY,\n clampedGridX,\n finalDroppingItem.w,\n finalDroppingItem.h\n );\n\n setDroppingDOMNode(<div key={finalDroppingItem.i} />);\n setDroppingPosition(newDroppingPosition);\n setLayout([\n ...layoutRef.current,\n {\n ...finalDroppingItem,\n x: calculatedPosition.x,\n y: calculatedPosition.y,\n static: false,\n isDraggable: true\n }\n ]);\n } else if (droppingPosition) {\n const shouldUpdate =\n droppingPosition.left !== newDroppingPosition.left ||\n droppingPosition.top !== newDroppingPosition.top;\n if (shouldUpdate) {\n setDroppingPosition(newDroppingPosition);\n }\n }\n },\n [\n droppingDOMNode,\n droppingPosition,\n droppingItem,\n dropConfigOnDragOver,\n onDropDragOverProp,\n removeDroppingPlaceholder,\n transformScale,\n cols,\n margin,\n maxRows,\n rowHeight,\n width,\n effectiveContainerPadding\n ]\n );\n\n const handleDragLeave = useCallback(\n (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragEnterCounterRef.current--;\n\n // Guard against negative counter (#2210)\n // This can happen in edge cases with event timing or bubbling\n if (dragEnterCounterRef.current < 0) {\n dragEnterCounterRef.current = 0;\n }\n\n if (dragEnterCounterRef.current === 0) {\n removeDroppingPlaceholder();\n }\n },\n [removeDroppingPlaceholder]\n );\n\n const handleDragEnter = useCallback((e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragEnterCounterRef.current++;\n }, []);\n\n const handleDrop = useCallback(\n (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const currentLayout = layoutRef.current;\n const item = currentLayout.find(l => l.i === droppingItem.i);\n dragEnterCounterRef.current = 0;\n removeDroppingPlaceholder();\n onDropProp(currentLayout, item, e.nativeEvent);\n },\n [droppingItem.i, removeDroppingPlaceholder, onDropProp]\n );\n\n // ============================================================================\n // Render Helpers\n // ============================================================================\n\n const processGridItem = useCallback(\n (\n child: ReactElement,\n isDroppingItem?: boolean\n ): ReactElement | null | undefined => {\n if (!child || !child.key) return null;\n\n const l = getLayoutItem(layout, String(child.key));\n if (!l) return null;\n\n const draggable =\n typeof l.isDraggable === \"boolean\"\n ? l.isDraggable\n : !l.static && isDraggable;\n const resizable =\n typeof l.isResizable === \"boolean\"\n ? l.isResizable\n : !l.static && isResizable;\n const resizeHandlesOptions = l.resizeHandles || [...resizeHandles];\n const bounded = draggable && isBounded && l.isBounded !== false;\n\n // Cast resize handle to expected type (function signature is compatible)\n const resizeHandleElement = resizeHandle as ResizeHandle | undefined;\n\n return (\n <GridItem\n key={l.i}\n containerWidth={width}\n cols={cols}\n margin={margin}\n containerPadding={effectiveContainerPadding}\n maxRows={maxRows}\n rowHeight={rowHeight}\n cancel={draggableCancel}\n handle={draggableHandle}\n onDragStart={onDragStart}\n onDrag={onDrag}\n onDragStop={onDragStop}\n onResizeStart={onResizeStart}\n onResize={onResize}\n onResizeStop={onResizeStop}\n isDraggable={draggable}\n isResizable={resizable}\n isBounded={bounded}\n useCSSTransforms={useCSSTransforms && mounted}\n usePercentages={!mounted}\n transformScale={transformScale}\n positionStrategy={positionStrategy}\n dragThreshold={dragThreshold}\n w={l.w}\n h={l.h}\n x={l.x}\n y={l.y}\n i={l.i}\n minH={l.minH}\n minW={l.minW}\n maxH={l.maxH}\n maxW={l.maxW}\n static={l.static}\n droppingPosition={isDroppingItem ? droppingPosition : undefined}\n resizeHandles={resizeHandlesOptions}\n resizeHandle={resizeHandleElement}\n constraints={constraints}\n layoutItem={l}\n layout={layout}\n >\n {child}\n </GridItem>\n );\n },\n [\n layout,\n width,\n cols,\n margin,\n effectiveContainerPadding,\n maxRows,\n rowHeight,\n draggableCancel,\n draggableHandle,\n onDragStart,\n onDrag,\n onDragStop,\n onResizeStart,\n onResize,\n onResizeStop,\n isDraggable,\n isResizable,\n isBounded,\n useCSSTransforms,\n mounted,\n transformScale,\n positionStrategy,\n dragThreshold,\n droppingPosition,\n resizeHandles,\n resizeHandle,\n constraints\n ]\n );\n\n const renderPlaceholder = (): ReactElement | null => {\n if (!activeDrag) return null;\n\n return (\n <GridItem\n w={activeDrag.w}\n h={activeDrag.h}\n x={activeDrag.x}\n y={activeDrag.y}\n i={activeDrag.i}\n className={`react-grid-placeholder ${resizing ? \"placeholder-resizing\" : \"\"}`}\n containerWidth={width}\n cols={cols}\n margin={margin}\n containerPadding={effectiveContainerPadding}\n maxRows={maxRows}\n rowHeight={rowHeight}\n isDraggable={false}\n isResizable={false}\n isBounded={false}\n useCSSTransforms={useCSSTransforms}\n transformScale={transformScale}\n constraints={constraints}\n layout={layout}\n >\n <div />\n </GridItem>\n );\n };\n\n // ============================================================================\n // Render\n // ============================================================================\n\n const mergedClassName = clsx(layoutClassName, className);\n const mergedStyle: CSSProperties = {\n height: containerHeight,\n ...style\n };\n\n return (\n <div\n ref={innerRef}\n className={mergedClassName}\n style={mergedStyle}\n onDrop={isDroppable ? handleDrop : undefined}\n onDragLeave={isDroppable ? handleDragLeave : undefined}\n onDragEnter={isDroppable ? handleDragEnter : undefined}\n onDragOver={isDroppable ? handleDragOver : undefined}\n >\n {React.Children.map(children, child => {\n if (!React.isValidElement(child)) return null;\n return processGridItem(child);\n })}\n {isDroppable && droppingDOMNode && processGridItem(droppingDOMNode, true)}\n {renderPlaceholder()}\n </div>\n );\n}\n\nexport default GridLayout;\n","/**\n * ResponsiveGridLayout component\n *\n * A responsive grid layout that automatically adjusts to container width.\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useMemo,\n useCallback,\n type ReactElement\n} from \"react\";\nimport { deepEqual } from \"fast-equals\";\n\nimport type {\n Layout,\n LayoutItem,\n Breakpoint,\n Breakpoints,\n ResponsiveLayouts,\n Compactor\n} from \"../../core/types.js\";\nimport { cloneLayout, correctBounds } from \"../../core/layout.js\";\nimport {\n getBreakpointFromWidth,\n getColsFromBreakpoint,\n findOrGenerateResponsiveLayout,\n getIndentationValue\n} from \"../../core/responsive.js\";\nimport { getCompactor } from \"../../core/compactors.js\";\nimport { bottom } from \"../../core/layout.js\";\n\nimport { GridLayout, type GridLayoutProps } from \"./GridLayout.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ResponsiveGridLayoutProps<\n B extends Breakpoint = string\n> extends Omit<GridLayoutProps, \"gridConfig\" | \"layout\" | \"onLayoutChange\"> {\n /** Current breakpoint (optional, auto-detected from width) */\n breakpoint?: B;\n /** Breakpoint definitions (name → min-width) */\n breakpoints?: Breakpoints<B>;\n /** Column counts per breakpoint */\n cols?: Breakpoints<B>;\n /** Layouts for each breakpoint */\n layouts?: ResponsiveLayouts<B>;\n /** Row height (default: 150) */\n rowHeight?: number;\n /** Maximum rows (default: Infinity) */\n maxRows?: number;\n /** Margin between items - can be fixed or per-breakpoint */\n margin?:\n | readonly [number, number]\n | Partial<Record<B, readonly [number, number]>>;\n /** Container padding - can be fixed or per-breakpoint */\n containerPadding?:\n | readonly [number, number]\n | Partial<Record<B, readonly [number, number] | null>>\n | null;\n /** Compactor for layout compaction */\n compactor?: Compactor;\n /** Called when breakpoint changes */\n onBreakpointChange?: (newBreakpoint: B, cols: number) => void;\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout, layouts: ResponsiveLayouts<B>) => void;\n /** Called when width changes */\n onWidthChange?: (\n containerWidth: number,\n margin: readonly [number, number],\n cols: number,\n containerPadding: readonly [number, number] | null\n ) => void;\n}\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nconst DEFAULT_BREAKPOINTS: Breakpoints<string> = {\n lg: 1200,\n md: 996,\n sm: 768,\n xs: 480,\n xxs: 0\n};\n\nconst DEFAULT_COLS: Breakpoints<string> = {\n lg: 12,\n md: 10,\n sm: 6,\n xs: 4,\n xxs: 2\n};\n\nconst noop = () => {};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Synchronize layout with children - use compactor.compact() (#2213)\n */\nfunction synchronizeLayoutWithChildren(\n initialLayout: Layout,\n children: React.ReactNode,\n cols: number,\n compactor: Compactor\n): Layout {\n const layout: LayoutItem[] = [];\n\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child) || child.key === null) return;\n const key = String(child.key);\n\n // Find existing layout item\n const existingItem = initialLayout.find(l => l.i === key);\n\n if (existingItem) {\n layout.push({\n ...existingItem,\n i: key\n });\n } else {\n // Create new layout item from child data-grid prop\n const childProps = child.props as { \"data-grid\"?: Partial<LayoutItem> };\n const dataGrid = childProps[\"data-grid\"];\n\n if (dataGrid) {\n layout.push({\n i: key,\n x: dataGrid.x ?? 0,\n y: dataGrid.y ?? 0,\n w: dataGrid.w ?? 1,\n h: dataGrid.h ?? 1,\n minW: dataGrid.minW,\n maxW: dataGrid.maxW,\n minH: dataGrid.minH,\n maxH: dataGrid.maxH,\n static: dataGrid.static,\n isDraggable: dataGrid.isDraggable,\n isResizable: dataGrid.isResizable,\n resizeHandles: dataGrid.resizeHandles,\n isBounded: dataGrid.isBounded\n });\n } else {\n // Create default layout item\n layout.push({\n i: key,\n x: 0,\n y: bottom(layout),\n w: 1,\n h: 1\n });\n }\n }\n });\n\n // Correct bounds and compact - use compactor.compact() (#2213)\n const corrected = correctBounds(layout, { cols });\n return compactor.compact(corrected, cols);\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResponsiveGridLayout - A responsive grid layout that adjusts to container width.\n */\nexport function ResponsiveGridLayout<B extends Breakpoint = string>(\n props: ResponsiveGridLayoutProps<B>\n): ReactElement {\n const {\n children,\n width,\n breakpoint: propBreakpoint,\n breakpoints = DEFAULT_BREAKPOINTS as Breakpoints<B>,\n cols: colsConfig = DEFAULT_COLS as Breakpoints<B>,\n layouts: propsLayouts = {} as ResponsiveLayouts<B>,\n rowHeight = 150,\n maxRows = Infinity,\n margin: propMargin = [10, 10] as readonly [number, number],\n containerPadding: propContainerPadding = null,\n compactor: compactorProp,\n onBreakpointChange = noop,\n onLayoutChange = noop,\n onWidthChange = noop,\n ...restProps\n } = props;\n\n // Get compactor (use provided or default to vertical)\n const compactor = compactorProp ?? getCompactor(\"vertical\");\n const compactType = compactor.type;\n const allowOverlap = compactor.allowOverlap;\n\n // Calculate initial state\n const initialBreakpoint = useMemo(() => {\n return propBreakpoint ?? getBreakpointFromWidth(breakpoints, width);\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const initialCols = useMemo(() => {\n return getColsFromBreakpoint(initialBreakpoint, colsConfig);\n }, [initialBreakpoint, colsConfig]);\n\n // Use compactType for initial layout as compactor reference isn't stable here\n // findOrGenerateResponsiveLayout accepts both CompactType and Compactor (#2213)\n const initialLayout = useMemo(() => {\n return findOrGenerateResponsiveLayout(\n propsLayouts,\n breakpoints,\n initialBreakpoint,\n initialBreakpoint,\n initialCols,\n compactType\n );\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // State\n const [breakpoint, setBreakpoint] = useState<B>(initialBreakpoint);\n const [cols, setCols] = useState<number>(initialCols);\n const [layout, setLayout] = useState<Layout>(initialLayout);\n const [layouts, setLayouts] = useState<ResponsiveLayouts<B>>(propsLayouts);\n\n // Refs for tracking changes\n const prevWidthRef = useRef(width);\n const prevBreakpointRef = useRef(propBreakpoint);\n const prevBreakpointsRef = useRef(breakpoints);\n const prevColsRef = useRef(colsConfig);\n const prevLayoutsRef = useRef(propsLayouts);\n const prevCompactTypeRef = useRef(compactType);\n\n // Ref to always have current layouts value (avoids stale closure in callbacks)\n const layoutsRef = useRef(layouts);\n\n // Keep layoutsRef in sync with layouts state\n useEffect(() => {\n layoutsRef.current = layouts;\n }, [layouts]);\n\n // Derive layout synchronously from props during render (not in useEffect which runs after render)\n // This prevents the timing issue where GridLayout sees children before the layout is updated\n // Use compactor directly (#2213)\n const derivedLayout: Layout | null = useMemo(() => {\n if (!deepEqual(propsLayouts, prevLayoutsRef.current)) {\n // Props changed, derive new layout synchronously\n return findOrGenerateResponsiveLayout(\n propsLayouts,\n breakpoints,\n breakpoint,\n breakpoint,\n cols,\n compactor\n );\n }\n return null; // No change needed\n }, [propsLayouts, breakpoints, breakpoint, cols, compactor]);\n\n // The effective layout to pass to GridLayout - use derived if available, else state\n const effectiveLayout = derivedLayout ?? layout;\n\n // Update state and refs in effect (for consistency on future renders)\n useEffect(() => {\n if (derivedLayout !== null) {\n setLayout(derivedLayout);\n setLayouts(propsLayouts);\n layoutsRef.current = propsLayouts;\n prevLayoutsRef.current = propsLayouts;\n }\n }, [derivedLayout, propsLayouts]);\n\n // Handle compactType changes - use compactor.compact() (#2213)\n useEffect(() => {\n if (compactType !== prevCompactTypeRef.current) {\n // Re-compact the current layout with the new compactType\n // Use effectiveLayout to avoid stale data when layouts are being synced\n const newLayout = compactor.compact(cloneLayout(effectiveLayout), cols);\n const newLayouts = {\n ...layoutsRef.current,\n [breakpoint]: newLayout\n } as ResponsiveLayouts<B>;\n\n setLayout(newLayout);\n setLayouts(newLayouts);\n layoutsRef.current = newLayouts;\n onLayoutChange(newLayout, newLayouts);\n prevCompactTypeRef.current = compactType;\n }\n }, [\n compactType,\n compactor,\n effectiveLayout,\n cols,\n allowOverlap,\n breakpoint,\n onLayoutChange\n ]);\n\n // Handle width changes\n useEffect(() => {\n const widthChanged = width !== prevWidthRef.current;\n const breakpointPropChanged = propBreakpoint !== prevBreakpointRef.current;\n const breakpointsChanged = !deepEqual(\n breakpoints,\n prevBreakpointsRef.current\n );\n const colsChanged = !deepEqual(colsConfig, prevColsRef.current);\n\n if (\n widthChanged ||\n breakpointPropChanged ||\n breakpointsChanged ||\n colsChanged\n ) {\n const newBreakpoint =\n propBreakpoint ?? getBreakpointFromWidth(breakpoints, width);\n const newCols = getColsFromBreakpoint(newBreakpoint, colsConfig);\n const lastBreakpoint = breakpoint;\n\n // Breakpoint change\n if (\n lastBreakpoint !== newBreakpoint ||\n breakpointsChanged ||\n colsChanged\n ) {\n const newLayouts = { ...layoutsRef.current } as ResponsiveLayouts<B>;\n\n // Preserve current layout if not in new layouts\n if (!newLayouts[lastBreakpoint]) {\n (newLayouts as Record<B, Layout>)[lastBreakpoint] =\n cloneLayout(layout);\n }\n\n // Find or generate new layout - use compactor (#2213)\n let newLayout = findOrGenerateResponsiveLayout(\n newLayouts,\n breakpoints,\n newBreakpoint,\n lastBreakpoint,\n newCols,\n compactor\n );\n\n // Sync with children - use compactor (#2213)\n newLayout = synchronizeLayoutWithChildren(\n newLayout,\n children,\n newCols,\n compactor\n );\n\n // Store new layout\n (newLayouts as Record<B, Layout>)[newBreakpoint] = newLayout;\n\n // Update state\n setBreakpoint(newBreakpoint);\n setCols(newCols);\n setLayout(newLayout);\n setLayouts(newLayouts);\n layoutsRef.current = newLayouts;\n\n // Callbacks\n onBreakpointChange(newBreakpoint, newCols);\n onLayoutChange(newLayout, newLayouts);\n }\n\n // Get margin and padding for callback\n const currentMargin = getIndentationValue(\n propMargin as Parameters<typeof getIndentationValue>[0],\n newBreakpoint\n );\n const currentPadding = propContainerPadding\n ? getIndentationValue(\n propContainerPadding as Parameters<typeof getIndentationValue>[0],\n newBreakpoint\n )\n : null;\n\n // Width change callback\n onWidthChange(width, currentMargin, newCols, currentPadding);\n\n // Update refs\n prevWidthRef.current = width;\n prevBreakpointRef.current = propBreakpoint;\n prevBreakpointsRef.current = breakpoints;\n prevColsRef.current = colsConfig;\n }\n }, [\n width,\n propBreakpoint,\n breakpoints,\n colsConfig,\n breakpoint,\n cols,\n layout,\n children,\n compactor,\n compactType,\n allowOverlap,\n propMargin,\n propContainerPadding,\n onBreakpointChange,\n onLayoutChange,\n onWidthChange\n ]);\n\n // Handle layout change from GridLayout\n const handleLayoutChange = useCallback(\n (newLayout: Layout) => {\n // Use layoutsRef.current to avoid stale closure issues\n const currentLayouts = layoutsRef.current;\n const newLayouts = {\n ...currentLayouts,\n [breakpoint]: newLayout\n } as ResponsiveLayouts<B>;\n\n setLayout(newLayout);\n setLayouts(newLayouts);\n layoutsRef.current = newLayouts;\n onLayoutChange(newLayout, newLayouts);\n },\n [breakpoint, onLayoutChange]\n );\n\n // Get margin and padding for current breakpoint\n const currentMargin = useMemo(() => {\n return getIndentationValue(\n propMargin as Parameters<typeof getIndentationValue>[0],\n breakpoint\n );\n }, [propMargin, breakpoint]);\n\n const currentContainerPadding = useMemo(() => {\n if (propContainerPadding === null) return null;\n return getIndentationValue(\n propContainerPadding as Parameters<typeof getIndentationValue>[0],\n breakpoint\n );\n }, [propContainerPadding, breakpoint]);\n\n // Build grid config for current breakpoint\n const gridConfig = useMemo(\n () => ({\n cols,\n rowHeight,\n maxRows,\n margin: currentMargin,\n containerPadding: currentContainerPadding\n }),\n [cols, rowHeight, maxRows, currentMargin, currentContainerPadding]\n );\n\n return (\n <GridLayout\n {...restProps}\n width={width}\n gridConfig={gridConfig}\n compactor={compactor}\n onLayoutChange={handleLayoutChange}\n layout={effectiveLayout}\n >\n {children}\n </GridLayout>\n );\n}\n\nexport default ResponsiveGridLayout;\n"]}
|