@@ -7,6 +7,7 @@ import * as Dialog from '@radix-ui/react-dialog';
77import type { AVAEditor , ImageData , ImageSize } from '@ty/slate.ts' ;
88import type { Translations } from '@ty/Types.ts' ;
99import { ToolbarTooltip } from './ToolbarTooltip.tsx' ;
10+ import { Editor } from 'slate' ;
1011
1112export const HighlightColorButton = ( props : SlateButtonProps ) => {
1213 const editor = useSlate ( ) ;
@@ -83,9 +84,13 @@ export const LinkButton = (props: LinkDialogProps) => {
8384
8485 const submit = ( ) => {
8586 props . onSubmit ( url ) ;
87+ setUrl ( '' ) ;
8688 setOpen ( false ) ;
8789 } ;
8890
91+ // @ts -expect-error
92+ const isActive = Editor . marks ( editor ) ?. link ;
93+
8994 return (
9095 < Dialog . Root open = { open } >
9196 < Dialog . Trigger asChild >
@@ -95,10 +100,16 @@ export const LinkButton = (props: LinkDialogProps) => {
95100 >
96101 < Button
97102 className = { `link-button unstyled ${
98- highlightedText ? '' : 'disabled-link-button '
103+ isActive ? 'activated-link-button ' : ''
99104 } `}
100- disabled = { ! highlightedText }
101- onClick = { ( ) => setOpen ( true ) }
105+ onMouseDown = { ( event ) => {
106+ event . preventDefault ( ) ;
107+ if ( isActive ) {
108+ Editor . removeMark ( editor , 'link' ) ;
109+ } else {
110+ setOpen ( true ) ;
111+ }
112+ } }
102113 type = 'button'
103114 >
104115 < props . icon />
@@ -132,7 +143,10 @@ export const LinkButton = (props: LinkDialogProps) => {
132143 < Dialog . Close asChild >
133144 < Button
134145 className = 'unstyled'
135- onClick = { ( ) => setOpen ( false ) }
146+ onClick = { ( ) => {
147+ setUrl ( '' ) ;
148+ setOpen ( false ) ;
149+ } }
136150 role = 'button'
137151 >
138152 { t [ 'cancel' ] }
0 commit comments