@@ -824,8 +824,8 @@ const widgets: Widget<any, any>[] = [
824824 const grid = WidgetInstanceGrid . fromSerialized ( options . state . serializedGrid ) ;
825825 const minSize = grid . getMinResizableSize ( ) ;
826826 return {
827- widthInGridUnits : minSize . width + 1 ,
828- heightInGridUnits : minSize . height + 1 ,
827+ widthInGridUnits : Math . max ( minSize . width , WidgetInstanceGrid . MIN_ELEMENT_WIDTH ) + 1 ,
828+ heightInGridUnits : Math . max ( minSize . height , WidgetInstanceGrid . MIN_ELEMENT_HEIGHT ) + 1 ,
829829 } ;
830830 } ,
831831 } ,
@@ -1016,6 +1016,7 @@ const SwappableWidgetInstanceGridContext = React.createContext<{
10161016
10171017function SwappableWidgetInstanceGrid ( props : { gridRef : RefState < WidgetInstanceGrid > , isSingleColumnMode : boolean | "auto" , allowVariableHeight : boolean , isStatic : boolean } ) {
10181018 const [ draggingType , setDraggingType ] = useState < "element" | "var-height" | null > ( null ) ;
1019+ const [ activeElementInitialRect , setActiveElementInitialRect ] = useState < DOMRect | null > ( null ) ; // onDragOver's event.active.rect.current.initial is the intial rect when the *swap* starts, not the drag, so we want to store the initial rect of the drag somewhere
10191020 const [ overElementPosition , setOverElementPosition ] = useState < [ number , number ] | null > ( null ) ;
10201021 const [ overVarHeightSlot , setOverVarHeightSlot ] = useState < [ "before" , string ] | [ "end-of" , number ] | null > ( null ) ;
10211022 const [ hoverElementSwap , setHoverElementSwap ] = useState < [ string , [ number , number , number , number , number , number ] ] | null > ( null ) ;
@@ -1180,24 +1181,28 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
11801181 onDragStart = { ( event ) => {
11811182 setActiveInstanceId ( event . active . id as string ) ;
11821183 setDraggingType ( "element" ) ;
1184+ setActiveElementInitialRect ( event . activatorEvent . target . getBoundingClientRect ( ) ) ;
11831185 } }
11841186 onDragAbort = { ( ) => {
11851187 setHoverElementSwap ( null ) ;
11861188 setActiveInstanceId ( null ) ;
11871189 setOverElementPosition ( null ) ;
11881190 setDraggingType ( null ) ;
1191+ setActiveElementInitialRect ( null ) ;
11891192 } }
11901193 onDragCancel = { ( ) => {
1191- /* setHoverElementSwap(null);
1194+ setHoverElementSwap ( null ) ;
11921195 setActiveInstanceId ( null ) ;
11931196 setOverElementPosition ( null ) ;
1194- setDraggingType(null);*/
1197+ setDraggingType ( null ) ;
1198+ setActiveElementInitialRect ( null ) ;
11951199 } }
11961200 onDragEnd = { ( event ) => {
11971201 setHoverElementSwap ( null ) ;
11981202 setActiveInstanceId ( null ) ;
11991203 setOverElementPosition ( null ) ;
12001204 setDraggingType ( null ) ;
1205+ setActiveElementInitialRect ( null ) ;
12011206
12021207 const widgetId = event . active . id ;
12031208 const widgetElement = [ ...props . gridRef . current . elements ( ) ] . find ( ( { instance } ) => instance ?. id === widgetId ) ;
@@ -1210,6 +1215,8 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
12101215 if ( props . gridRef . current . canSwap ( ...swapArgs ) ) {
12111216 const newGrid = props . gridRef . current . withSwappedElements ( ...swapArgs ) ;
12121217 props . gridRef . set ( newGrid ) ;
1218+ } else {
1219+ alert ( "Cannot swap elements; make sure the new locations are big enough for the widgets" ) ;
12131220 }
12141221 }
12151222 } }
@@ -1234,22 +1241,14 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
12341241 }
12351242 const overId = props . gridRef . current . getElementAt ( overCoordinates [ 0 ] , overCoordinates [ 1 ] ) . instance ?. id ;
12361243 if ( overId && overId !== widgetId ) {
1237- setHoverElementSwap ( [ overId , [
1238- event . over . rect . left - event . active . rect . current . initial . left ,
1239- event . over . rect . top - event . active . rect . current . initial . top ,
1240- event . active . rect . current . initial . width ,
1241- event . active . rect . current . initial . height ,
1242- event . over . rect . width ,
1243- event . over . rect . height ,
1244- ] ] ) ;
1245- console . log ( "newHoverElementSwap" , [
1246- event . over . rect . left - event . active . rect . current . initial . left ,
1247- event . over . rect . top - event . active . rect . current . initial . top ,
1248- event . active . rect . current . initial . width ,
1249- event . active . rect . current . initial . height ,
1250- event . over . rect . width ,
1251- event . over . rect . height ,
1252- ] ) ;
1244+ setHoverElementSwap ( [ overId , [
1245+ event . over . rect . left - activeElementInitialRect . left ,
1246+ event . over . rect . top - activeElementInitialRect . top ,
1247+ activeElementInitialRect . width ,
1248+ activeElementInitialRect . height ,
1249+ event . over . rect . width ,
1250+ event . over . rect . height ,
1251+ ] ] ) ;
12531252 } else {
12541253 setHoverElementSwap ( null ) ;
12551254 }
@@ -1300,8 +1299,8 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
13001299 isEditing = { context . isEditing }
13011300 style = { {
13021301 transform : isHoverSwap ? `translate(${ - hoverElementSwap [ 1 ] [ 0 ] } px, ${ - hoverElementSwap [ 1 ] [ 1 ] } px)` : undefined ,
1303- width : isHoverSwap ? `${ hoverElementSwap [ 1 ] [ 2 ] } px` : ( hoverElementSwap && activeWidgetId === instance . id ? `${ hoverElementSwap [ 1 ] [ 4 ] } px` : undefined ) ,
1304- height : isHoverSwap ? `${ hoverElementSwap [ 1 ] [ 3 ] } px` : ( hoverElementSwap && activeWidgetId === instance . id ? `${ hoverElementSwap [ 1 ] [ 5 ] } px` : undefined ) ,
1302+ minWidth : isHoverSwap ? `${ hoverElementSwap [ 1 ] [ 2 ] } px` : ( hoverElementSwap && activeWidgetId === instance . id ? `${ hoverElementSwap [ 1 ] [ 4 ] } px` : undefined ) ,
1303+ minHeight : isHoverSwap ? `${ hoverElementSwap [ 1 ] [ 3 ] } px` : ( hoverElementSwap && activeWidgetId === instance . id ? `${ hoverElementSwap [ 1 ] [ 5 ] } px` : undefined ) ,
13051304 } }
13061305 isSingleColumnMode = { isSingleColumnMode }
13071306 onDeleteWidget = { async ( ) => {
@@ -1575,8 +1574,8 @@ function Draggable(props: {
15751574 transition : [
15761575 'border-width 0.1s ease' ,
15771576 'box-shadow 0.1s ease' ,
1578- props . activeWidgetId !== props . widgetInstance . id && ( props . activeWidgetId !== null ) ? 'transform 0.2s ease, width 0.2s ease, height 0.2s ease' : undefined ,
1579- props . activeWidgetId === props . widgetInstance . id ? 'width 0.2s ease, height 0.2s ease' : undefined ,
1577+ props . activeWidgetId !== props . widgetInstance . id && ( props . activeWidgetId !== null ) ? 'transform 0.2s ease, min- width 0.2s ease, min- height 0.2s ease' : undefined ,
1578+ props . activeWidgetId === props . widgetInstance . id ? 'min- width 0.2s ease, min- height 0.2s ease' : undefined ,
15801579 ] . filter ( Boolean ) . join ( ', ' ) ,
15811580 ...filterUndefined ( props . style ?? { } ) ,
15821581 transform : `translate3d(${ transform ?. x ?? 0 } px, ${ transform ?. y ?? 0 } px, 0) ${ props . style ?. transform ?? '' } ` ,
0 commit comments