@@ -412,6 +412,17 @@ function ExternalLinkIcon(props) {
412412 ) ;
413413}
414414
415+ function Toast ( { message } ) {
416+ if ( ! message ) return null ;
417+ return (
418+ < div className = "fixed bottom-5 left-1/2 z-50 w-[min(520px,calc(100vw-2rem))] -translate-x-1/2" >
419+ < div className = "rounded-2xl border-4 border-zinc-900 bg-white px-4 py-3 text-sm font-semibold shadow-[8px_8px_0_0_#18181b]" >
420+ { message }
421+ </ div >
422+ </ div >
423+ ) ;
424+ }
425+
415426function GitHubMarkIcon ( { size = 28 } ) {
416427 return (
417428 < svg
@@ -556,6 +567,7 @@ export default function GitHubPowerLinksGenerator() {
556567 const [ builderError , setBuilderError ] = useState ( "" ) ;
557568 const [ builderCopiedKey , setBuilderCopiedKey ] = useState ( "" ) ;
558569 const [ searchCopiedKey , setSearchCopiedKey ] = useState ( "" ) ;
570+ const [ toastMessage , setToastMessage ] = useState ( "" ) ;
559571
560572 const cleanUsername = parseUsername ( username ) ;
561573 const cleanRepo = parseRepo ( repo ) ;
@@ -644,7 +656,14 @@ export default function GitHubPowerLinksGenerator() {
644656 } , [ profileLinks , repoLinks ] ) ;
645657
646658 async function copyAll ( ) {
647- await copyToClipboard ( exportText ) ;
659+ const ok = await copyToClipboard ( exportText ) ;
660+ if ( ok ) {
661+ setToastMessage ( "Copied all links as markdown." ) ;
662+ setTimeout ( ( ) => setToastMessage ( "" ) , 1800 ) ;
663+ } else {
664+ setToastMessage ( "Copy failed (clipboard blocked by browser)." ) ;
665+ setTimeout ( ( ) => setToastMessage ( "" ) , 2400 ) ;
666+ }
648667 }
649668
650669 function handleModeChange ( nextMode ) {
@@ -758,6 +777,7 @@ export default function GitHubPowerLinksGenerator() {
758777
759778 return (
760779 < div className = "min-h-screen bg-zinc-100 text-zinc-900" >
780+ < Toast message = { toastMessage } />
761781 < div className = "mx-auto w-full max-w-[1700px] px-4 py-8 sm:px-6 lg:px-8" >
762782 < div className = "mb-8 rounded-3xl border-4 border-zinc-900 bg-white p-6 shadow-[8px_8px_0_0_#18181b]" >
763783 < div className = "flex items-center gap-3" >
0 commit comments