@@ -9,10 +9,13 @@ interface ToolbarProps {
99 mode : ContentMode ;
1010 theme : string ;
1111 size : SizeName ;
12+ width ?: number ;
13+ height ?: number ;
1214 align : Align | undefined ;
1315 fitContent : boolean ;
1416 onThemeChange : ( name : string ) => void ;
1517 onSizeChange : ( size : SizeName ) => void ;
18+ onDimensionsChange : ( width : number , height : number ) => void ;
1619 onAlignChange : ( align : Align ) => void ;
1720 onFitContentChange : ( fitContent : boolean ) => void ;
1821 onExportPng : ( ) => void ;
@@ -25,8 +28,8 @@ interface ToolbarProps {
2528}
2629
2730export function Toolbar ( {
28- mode, theme, size, align, fitContent,
29- onThemeChange, onSizeChange, onAlignChange, onFitContentChange,
31+ mode, theme, size, width , height , align, fitContent,
32+ onThemeChange, onSizeChange, onDimensionsChange , onAlignChange, onFitContentChange,
3033 onExportPng, onExportDeck,
3134 onUndo, onRedo, canUndo, canRedo,
3235 isDirty,
@@ -40,6 +43,31 @@ export function Toolbar({
4043
4144 < ThemePicker current = { theme } onChange = { onThemeChange } />
4245 < SizePicker current = { size } onChange = { onSizeChange } mode = { mode } />
46+ { size === "custom" && (
47+ < div className = "flex items-center gap-1" >
48+ < input
49+ type = "number"
50+ className = "w-16 px-1.5 py-1 text-xs bg-neutral-800 border border-neutral-700 rounded text-neutral-200"
51+ value = { width ?? "" }
52+ onChange = { ( e ) => {
53+ const w = Number ( e . target . value ) ;
54+ if ( e . target . value !== "" && Number . isFinite ( w ) && w > 0 ) onDimensionsChange ( w , height ?? 0 ) ;
55+ } }
56+ title = "Width"
57+ />
58+ < span className = "text-neutral-600 text-xs" > ×</ span >
59+ < input
60+ type = "number"
61+ className = "w-16 px-1.5 py-1 text-xs bg-neutral-800 border border-neutral-700 rounded text-neutral-200"
62+ value = { height ?? "" }
63+ onChange = { ( e ) => {
64+ const h = Number ( e . target . value ) ;
65+ if ( e . target . value !== "" && Number . isFinite ( h ) && h > 0 ) onDimensionsChange ( width ?? 0 , h ) ;
66+ } }
67+ title = "Height"
68+ />
69+ </ div >
70+ ) }
4371 < AlignPicker current = { align } onChange = { onAlignChange } />
4472
4573 < div className = "w-px h-5 bg-neutral-700" />
0 commit comments