@@ -2,15 +2,13 @@ import { type Interpolation, type Theme, useTheme } from "@emotion/react";
2
2
import LockIcon from "@mui/icons-material/Lock" ;
3
3
import LockOpenIcon from "@mui/icons-material/LockOpen" ;
4
4
import SensorsIcon from "@mui/icons-material/Sensors" ;
5
- import MUIButton from "@mui/material/Button" ;
6
- import CircularProgress from "@mui/material/CircularProgress" ;
7
5
import FormControl from "@mui/material/FormControl" ;
8
6
import Link from "@mui/material/Link" ;
9
7
import MenuItem from "@mui/material/MenuItem" ;
10
8
import Select from "@mui/material/Select" ;
11
9
import Stack from "@mui/material/Stack" ;
12
10
import TextField from "@mui/material/TextField" ;
13
- import Tooltip from "@mui/material/Tooltip" ;
11
+ import MUITooltip from "@mui/material/Tooltip" ;
14
12
import { API } from "api/api" ;
15
13
import {
16
14
deleteWorkspacePortShare ,
@@ -33,14 +31,25 @@ import {
33
31
HelpTooltipTitle ,
34
32
} from "components/HelpTooltip/HelpTooltip" ;
35
33
import { Spinner } from "components/Spinner/Spinner" ;
34
+ import {
35
+ Tooltip ,
36
+ TooltipContent ,
37
+ TooltipProvider ,
38
+ TooltipTrigger ,
39
+ } from "components/Tooltip/Tooltip" ;
36
40
import {
37
41
Popover ,
38
42
PopoverContent ,
39
43
PopoverTrigger ,
40
44
} from "components/deprecated/Popover/Popover" ;
41
45
import { type FormikContextType , useFormik } from "formik" ;
42
46
import { type ClassName , useClassName } from "hooks/useClassName" ;
43
- import { ChevronDownIcon , ExternalLinkIcon , X as XIcon } from "lucide-react" ;
47
+ import {
48
+ ChevronDownIcon ,
49
+ ExternalLinkIcon ,
50
+ ShareIcon ,
51
+ X as XIcon ,
52
+ } from "lucide-react" ;
44
53
import { useDashboard } from "modules/dashboard/useDashboard" ;
45
54
import { type FC , useState } from "react" ;
46
55
import { useMutation , useQuery } from "react-query" ;
@@ -77,26 +86,13 @@ export const PortForwardButton: FC<PortForwardButtonProps> = (props) => {
77
86
return (
78
87
< Popover >
79
88
< PopoverTrigger >
80
- < MUIButton
81
- disabled = { ! portsQuery . data }
82
- size = "small"
83
- variant = "text"
84
- endIcon = { < ChevronDownIcon className = "size-4" /> }
85
- css = { { fontSize : 13 , padding : "8px 12px" } }
86
- startIcon = {
87
- portsQuery . data ? (
88
- < div >
89
- < span css = { styles . portCount } >
90
- { portsQuery . data . ports . length }
91
- </ span >
92
- </ div >
93
- ) : (
94
- < CircularProgress size = { 10 } />
95
- )
96
- }
97
- >
89
+ < Button disabled = { ! portsQuery . data } size = "sm" variant = "subtle" >
90
+ < Spinner loading = { ! portsQuery . data } >
91
+ < span css = { styles . portCount } > { portsQuery . data ?. ports . length } </ span >
92
+ </ Spinner >
98
93
Open ports
99
- </ MUIButton >
94
+ < ChevronDownIcon className = "size-4" />
95
+ </ Button >
100
96
</ PopoverTrigger >
101
97
< PopoverContent horizontal = "right" classes = { { paper } } >
102
98
< PortForwardPopoverView
@@ -203,14 +199,14 @@ export const PortForwardPopoverView: FC<PortForwardPopoverViewProps> = ({
203
199
canSharePorts && template . max_port_share_level === "public" ;
204
200
205
201
const disabledPublicMenuItem = (
206
- < Tooltip title = "This workspace template does not allow sharing ports with unauthenticated users." >
202
+ < MUITooltip title = "This workspace template does not allow sharing ports with unauthenticated users." >
207
203
{ /* Tooltips don't work directly on disabled MenuItem components so you must wrap in div. */ }
208
204
< div >
209
205
< MenuItem value = "public" disabled >
210
206
Public
211
207
</ MenuItem >
212
208
</ div >
213
- </ Tooltip >
209
+ </ MUITooltip >
214
210
) ;
215
211
216
212
return (
@@ -297,24 +293,17 @@ export const PortForwardPopoverView: FC<PortForwardPopoverViewProps> = ({
297
293
required
298
294
css = { styles . newPortInput }
299
295
/>
300
- < MUIButton
301
- type = "submit"
302
- size = "small"
303
- variant = "text"
304
- css = { {
305
- paddingLeft : 12 ,
306
- paddingRight : 12 ,
307
- minWidth : 0 ,
308
- } }
309
- >
310
- < ExternalLinkIcon
311
- className = "size-icon-xs"
312
- css = { {
313
- flexShrink : 0 ,
314
- color : theme . palette . text . primary ,
315
- } }
316
- />
317
- </ MUIButton >
296
+ < TooltipProvider >
297
+ < Tooltip >
298
+ < TooltipTrigger asChild >
299
+ < Button type = "submit" size = "icon" variant = "subtle" >
300
+ < ExternalLinkIcon />
301
+ < span className = "sr-only" > Connect to port</ span >
302
+ </ Button >
303
+ </ TooltipTrigger >
304
+ < TooltipContent > Connect to port</ TooltipContent >
305
+ </ Tooltip >
306
+ </ TooltipProvider >
318
307
</ form >
319
308
</ Stack >
320
309
</ Stack >
@@ -369,21 +358,29 @@ export const PortForwardPopoverView: FC<PortForwardPopoverViewProps> = ({
369
358
alignItems = "center"
370
359
>
371
360
{ canSharePorts && (
372
- < MUIButton
373
- size = "small"
374
- variant = "text"
375
- onClick = { async ( ) => {
376
- await upsertSharedPortMutation . mutateAsync ( {
377
- agent_name : agent . name ,
378
- port : port . port ,
379
- protocol : listeningPortProtocol ,
380
- share_level : "authenticated" ,
381
- } ) ;
382
- await sharedPortsQuery . refetch ( ) ;
383
- } }
384
- >
385
- Share
386
- </ MUIButton >
361
+ < TooltipProvider >
362
+ < Tooltip >
363
+ < TooltipTrigger asChild >
364
+ < Button
365
+ size = "icon"
366
+ variant = "subtle"
367
+ onClick = { async ( ) => {
368
+ await upsertSharedPortMutation . mutateAsync ( {
369
+ agent_name : agent . name ,
370
+ port : port . port ,
371
+ protocol : listeningPortProtocol ,
372
+ share_level : "authenticated" ,
373
+ } ) ;
374
+ await sharedPortsQuery . refetch ( ) ;
375
+ } }
376
+ >
377
+ < ShareIcon />
378
+ < span className = "sr-only" > Share</ span >
379
+ </ Button >
380
+ </ TooltipTrigger >
381
+ < TooltipContent > Share this port</ TooltipContent >
382
+ </ Tooltip >
383
+ </ TooltipProvider >
387
384
) }
388
385
</ Stack >
389
386
</ Stack >
@@ -483,10 +480,9 @@ export const PortForwardPopoverView: FC<PortForwardPopoverViewProps> = ({
483
480
) }
484
481
</ Select >
485
482
</ FormControl >
486
- < MUIButton
487
- size = "small"
488
- variant = "text"
489
- css = { styles . deleteButton }
483
+ < Button
484
+ size = "sm"
485
+ variant = "subtle"
490
486
onClick = { async ( ) => {
491
487
await deleteSharedPortMutation . mutateAsync ( {
492
488
agent_name : agent . name ,
@@ -502,7 +498,7 @@ export const PortForwardPopoverView: FC<PortForwardPopoverViewProps> = ({
502
498
color : theme . palette . text . primary ,
503
499
} }
504
500
/>
505
- </ MUIButton >
501
+ </ Button >
506
502
</ Stack >
507
503
</ Stack >
508
504
) ;
@@ -617,11 +613,6 @@ const styles = {
617
613
} ,
618
614
} ) ,
619
615
620
- deleteButton : ( ) => ( {
621
- minWidth : 30 ,
622
- padding : 0 ,
623
- } ) ,
624
-
625
616
newPortForm : ( theme ) => ( {
626
617
border : `1px solid ${ theme . palette . divider } ` ,
627
618
borderRadius : "4px" ,
0 commit comments