@@ -11,6 +11,10 @@ import type {
1111 PanelConstraints ,
1212 PanelImperativeHandle
1313} from "../../components/panel/types" ;
14+ import {
15+ mockGetComputedStyle ,
16+ setDefaultElementStyle
17+ } from "../../utils/test/mockGetComputedStyle" ;
1418import { mountGroup } from "../mountGroup" ;
1519import { subscribeToMountedGroup } from "../mutable-state/groups" ;
1620import { mockGroup } from "../test/mockGroup" ;
@@ -294,23 +298,67 @@ describe("getImperativePanelMethods", () => {
294298 } ) ;
295299
296300 describe ( "resize" , ( ) => {
301+ describe ( "units" , ( ) => {
302+ test ( "accepts percentage units" , ( ) => {
303+ const { panelApis } = init ( [ { } , { } ] ) ;
304+ panelApis [ 0 ] . resize ( "35%" ) ;
305+
306+ expect ( onLayoutChange ) . toHaveBeenCalledTimes ( 1 ) ;
307+ expect ( onLayoutChange ) . toHaveBeenCalledWith ( [ 35 , 65 ] ) ;
308+ } ) ;
309+
310+ test ( "accepts pixel units" , ( ) => {
311+ // Computed group size is 1,000
312+ const { panelApis } = init ( [ { } , { } ] ) ;
313+ panelApis [ 0 ] . resize ( 400 ) ;
314+
315+ expect ( onLayoutChange ) . toHaveBeenCalledTimes ( 1 ) ;
316+ expect ( onLayoutChange ) . toHaveBeenCalledWith ( [ 40 , 60 ] ) ;
317+ } ) ;
318+
319+ test ( "accepts rem units" , ( ) => {
320+ setDefaultElementStyle ( {
321+ fontSize : 16 ,
322+ writingMode : ""
323+ } as unknown as CSSStyleDeclaration ) ;
324+ mockGetComputedStyle ( ) ;
325+
326+ const { panelApis } = init ( [ { } , { } ] ) ;
327+ panelApis [ 0 ] . resize ( "10rem" ) ;
328+
329+ expect ( onLayoutChange ) . toHaveBeenCalledTimes ( 1 ) ;
330+ expect ( onLayoutChange ) . toHaveBeenCalledWith ( [ 16 , 84 ] ) ;
331+ } ) ;
332+
333+ test ( "accepts viewport units" , ( ) => {
334+ window . innerHeight = 2000 ;
335+ window . innerWidth = 2000 ;
336+
337+ const { panelApis } = init ( [ { } , { } ] ) ;
338+ panelApis [ 0 ] . resize ( "15vw" ) ;
339+
340+ expect ( onLayoutChange ) . toHaveBeenCalledTimes ( 1 ) ;
341+ expect ( onLayoutChange ) . toHaveBeenCalledWith ( [ 30 , 70 ] ) ;
342+ } ) ;
343+ } ) ;
344+
297345 test ( "ignores a no-op size update" , ( ) => {
298346 const { panelApis } = init ( [ { defaultSize : 10 } , { } ] ) ;
299- panelApis [ 0 ] . resize ( 10 ) ;
347+ panelApis [ 0 ] . resize ( "10%" ) ;
300348
301349 expect ( onLayoutChange ) . not . toHaveBeenCalled ( ) ;
302350 } ) ;
303351
304352 test ( "ignores an invalid size update" , ( ) => {
305353 const { panelApis } = init ( [ { defaultSize : 10 , minSize : 10 } , { } ] ) ;
306- panelApis [ 0 ] . resize ( 0 ) ;
354+ panelApis [ 0 ] . resize ( "0%" ) ;
307355
308356 expect ( onLayoutChange ) . not . toHaveBeenCalled ( ) ;
309357 } ) ;
310358
311359 test ( "validates and updates the panel size" , ( ) => {
312360 const { panelApis } = init ( [ { defaultSize : 25 , minSize : 10 } , { } ] ) ;
313- panelApis [ 0 ] . resize ( 0 ) ;
361+ panelApis [ 0 ] . resize ( "0%" ) ;
314362
315363 expect ( onLayoutChange ) . toHaveBeenCalledTimes ( 1 ) ;
316364 expect ( onLayoutChange ) . toHaveBeenCalledWith ( [ 10 , 90 ] ) ;
@@ -322,7 +370,7 @@ describe("getImperativePanelMethods", () => {
322370 { }
323371 ] ) ;
324372
325- panelApis [ 0 ] . resize ( 0 ) ;
373+ panelApis [ 0 ] . resize ( "0%" ) ;
326374
327375 expect ( onLayoutChange ) . toHaveBeenCalledTimes ( 1 ) ;
328376 expect ( onLayoutChange ) . toHaveBeenCalledWith ( [ 10 , 90 ] ) ;
0 commit comments