@@ -22,26 +22,29 @@ import { Switch } from './switch';
2222import Hider from './Hider' ;
2323import { Button } from './button' ;
2424import { BsBoxArrowRight } from "react-icons/bs" ;
25+ import { Switcher } from './Switcher' ;
26+ import { FaLongArrowAltRight } from "react-icons/fa" ;
27+
2528
2629const ExportImageSettings = ( ) => {
2730 const {
2831 includeBackground, includeColorbar, doubleSize, cbarLoc, cbarNum,
2932 useCustomRes, customRes, includeAxis, mainTitle, cbarLabel, cbarUnits, animate, timeRate,
30- frames, frameRate, orbit, useTime, loopTime, keyFrameEditor , preview, pingpong
33+ frames, frameRate, orbit, useTime, loopTime, orbitDeg , orbitDir , preview, pingpong
3134 } = useImageExportStore ( useShallow ( state => ( {
3235 includeBackground : state . includeBackground , includeColorbar : state . includeColorbar ,
3336 doubleSize : state . doubleSize , cbarLoc : state . cbarLoc , cbarNum : state . cbarNum , useCustomRes : state . useCustomRes ,
3437 customRes : state . customRes , includeAxis : state . includeAxis , mainTitle : state . mainTitle , cbarLabel : state . cbarLabel ,
3538 cbarUnits :state . cbarUnits , animate : state . animate , timeRate :state . timeRate , frames : state . frames , frameRate : state . frameRate ,
36- orbit : state . orbit , useTime :state . useTime , loopTime : state . loopTime , keyFrameEditor :state . keyFrameEditor ,
39+ orbit : state . orbit , useTime :state . useTime , loopTime : state . loopTime , orbitDeg :state . orbitDeg , orbitDir : state . orbitDir ,
3740 preview :state . preview , pingpong :state . pingpong
3841 } ) ) )
3942
4043 const { ExportImg, EnableExport, setIncludeBackground, setIncludeColorbar,
4144 setDoubleSize, setCbarLoc, setCbarNum, setUseCustomRes, setCustomRes, setIncludeAxis,
4245 setHideAxis, setHideAxisControls, setMainTitle, setCbarLabel, setAnimate,
4346 setFrames, setFrameRate, setTimeRate, setOrbit, setUseTime, setLoopTime, setKeyFrameEditor,
44- setCbarUnits, setPingpong, setPreview, setPreviewExtent} = useImageExportStore . getState ( )
47+ setCbarUnits, setPingpong, setPreview, setPreviewExtent, setOrbitDeg } = useImageExportStore . getState ( )
4548
4649 interface CapitalizeFn {
4750 ( str : string ) : string ;
@@ -131,7 +134,7 @@ const ExportImageSettings = () => {
131134 />
132135 </ button >
133136 < Hider show = { showSettings } className = 'col-span-2' >
134- < div className = "grid grid-cols-[auto_60px] items-center gap-2 " >
137+ < div className = "grid grid-cols-[auto_60px] items-center gap-1 " >
135138 < label htmlFor = "includeBG" > Include Background</ label >
136139 < Switch id = 'includeBG' checked = { includeBackground } onCheckedChange = { e => setIncludeBackground ( e ) } />
137140 { plotType != 'sphere' &&
@@ -147,8 +150,8 @@ const ExportImageSettings = () => {
147150 < div className = 'col-span-2 flex justify-between' >
148151 < label htmlFor = "colorbar-loc " > Colorbar < br /> Location</ label >
149152 < div id = 'colorbar-loc' >
150- < Select value = { cbarLoc } onValueChange = { e => setCbarLoc ( e ) } >
151- < SelectTrigger >
153+ < Select value = { cbarLoc } onValueChange = { e => setCbarLoc ( e ) } >
154+ < SelectTrigger >
152155 < SelectValue placeholder = { cbarLoc } />
153156 </ SelectTrigger >
154157 < SelectContent >
@@ -161,7 +164,7 @@ const ExportImageSettings = () => {
161164 </ div >
162165 < div className = "grid grid-cols-[auto_60px] items-center gap-2" >
163166 < label htmlFor = "cbarNum" > Number of Ticks</ label >
164- < Input id = 'cbarNum' type = "number" min = { 0 } max = { 20 } step = { 1 } value = { cbarNum } onChange = { e => setCbarNum ( parseInt ( e . target . value ) ) } />
167+ < Input className = 'h-[26px]' id = 'cbarNum' type = "number" min = { 0 } max = { 20 } step = { 1 } value = { cbarNum } onChange = { e => setCbarNum ( parseInt ( e . target . value ) ) } />
165168 </ div >
166169 < div className = 'border-b my-2' />
167170 </ Hider >
@@ -173,11 +176,11 @@ const ExportImageSettings = () => {
173176 < div className = 'grid grid-cols-[50%_50%] col-span-2 ' >
174177 < div className = 'flex flex-col items-center' >
175178 < h1 > Width</ h1 >
176- < Input id = 'cbarNum' type = "number" value = { customRes [ 0 ] } onChange = { e => setCustomRes ( [ parseInt ( e . target . value ) , customRes [ 1 ] ] ) } />
179+ < Input className = 'h-[26px]' id = 'cbarNum' type = "number" value = { customRes [ 0 ] } onChange = { e => setCustomRes ( [ parseInt ( e . target . value ) , customRes [ 1 ] ] ) } />
177180 </ div >
178181 < div className = 'flex flex-col items-center' >
179182 < h1 > Height</ h1 >
180- < Input id = 'cbarNum' type = "number" value = { customRes [ 1 ] } onChange = { e => setCustomRes ( [ customRes [ 0 ] , parseInt ( e . target . value ) ] ) } />
183+ < Input className = 'h-[26px]' id = 'cbarNum' type = "number" value = { customRes [ 1 ] } onChange = { e => setCustomRes ( [ customRes [ 0 ] , parseInt ( e . target . value ) ] ) } />
181184 </ div >
182185 < Button className = { `col-span-2 ${ previewState ? 'bg-red-600' : '' } ` }
183186 variant = 'outline'
@@ -216,24 +219,37 @@ const ExportImageSettings = () => {
216219 < Switch id = 'useAnimate' checked = { animate } onCheckedChange = { e => setAnimate ( e ) } />
217220 { /* Animation Settings */ }
218221 < Hider show = { animate } className = 'col-span-2 ' >
219- < div className = "grid grid-cols-[auto_80px] items-center gap-2 mb-2" >
222+ < div className = "grid grid-cols-[auto_80px] items-center gap-1 mb-2" >
220223 < label htmlFor = "frames" > Frames</ label >
221- < Input id = "frames" type = 'number' step = { 1 } value = { frames } onChange = { e => setFrames ( parseInt ( e . target . value ) ) } />
222-
224+ < Input className = 'h-[26px]' id = "frames" type = 'number' step = { 1 } value = { frames } onChange = { e => setFrames ( parseInt ( e . target . value ) ) } />
223225 < label htmlFor = "fps" > FPS</ label >
224- < Input id = "fps" type = 'number' step = { 1 } value = { frameRate } onChange = { e => setFrameRate ( parseInt ( e . target . value ) ) } />
226+ < Input className = 'h-[26px]' id = "fps" type = 'number' step = { 1 } value = { frameRate } onChange = { e => setFrameRate ( parseInt ( e . target . value ) ) } />
225227 </ div >
226228 < div className = "grid grid-cols-[auto_60px] items-center gap-2" >
227229
228-
229230 < label htmlFor = "useOrbit" > Orbit</ label >
230231 < Switch id = "useOrbit" checked = { orbit } onCheckedChange = { e => setOrbit ( e ) } />
231232
232233 < Hider show = { orbit } className = 'col-span-2' >
233- < div className = "grid grid-cols-[auto_60px] items-center gap-2 mb-2" >
234+ < div className = "grid grid-cols-[auto_80px] items-center gap-2 mb-2" >
235+ < label htmlFor = "orbitDeg" > Orbit Degrees</ label >
236+ < Input id = "orbitDeg" type = 'number' step = { 1 } value = { orbitDeg } onChange = { e => setOrbitDeg ( parseInt ( e . target . value ) ) } />
237+ </ div >
238+ < div className = "grid grid-cols-[auto_60px] items-center gap-2 mb-2" >
239+ < label htmlFor = "orbitDir" > Direction</ label >
240+ < FaLongArrowAltRight id = 'orbitDir' onClick = { ( ) => useImageExportStore . getState ( ) . flipOrbitDir ( ) }
241+ style = { {
242+ transform : `${ orbitDir ? "rotate(180deg)" : "" } ` ,
243+ transition : ".25s" ,
244+ cursor :"pointer"
245+ } }
246+ size = { 26 }
247+ />
234248 < label htmlFor = "useOrbit" > Ping-Pong</ label >
235249 < Switch id = "useOrbit" checked = { pingpong } onCheckedChange = { e => setPingpong ( e ) } />
236250 </ div >
251+
252+ < div className = 'border-b my-2' />
237253 </ Hider >
238254
239255 < label htmlFor = "useTime" > Animate Time</ label >
@@ -258,11 +274,8 @@ const ExportImageSettings = () => {
258274 </ Button >
259275
260276 </ div >
261- < div className = "grid grid-cols-[auto_60px] items-center gap-2 my-2" >
262- < label htmlFor = "usePreview" > Export Preview</ label >
263- < Switch id = "usePreview" checked = { preview } onCheckedChange = { e => setPreview ( e ) } />
264- </ div >
265-
277+ < div className = 'my-2' />
278+ < Switcher leftText = 'Preview' rightText = 'Final' state = { preview } onClick = { ( ) => setPreview ( ! preview ) } />
266279 </ Hider >
267280 </ div >
268281 </ Hider >
0 commit comments