@@ -62,9 +62,15 @@ const { data: readmeData } = useLazyFetch<ReadmeResponse>(
6262 const version = requestedVersion .value
6363 return version ? ` ${base }/v/${version } ` : base
6464 },
65- { default : () => ({ html: ' ' , playgroundLinks: [], toc: [] }) },
65+ { default : () => ({ html: ' ' , markdown: ' ' , playgroundLinks: [], toc: [] }) },
6666)
6767
68+ const readmeMarkdown = computed (() => readmeData .value ?.markdown ?? ' ' )
69+ const { copied : copiedMarkdown, copy : copyMarkdown } = useClipboard ({
70+ source: readmeMarkdown ,
71+ copiedDuring: 2000 ,
72+ })
73+
6874// Track active TOC item based on scroll position
6975const tocItems = computed (() => readmeData .value ?.toc ?? [])
7076const { activeId : activeTocId, scrollToHeading } = useActiveTocItem (tocItems )
@@ -1136,12 +1142,33 @@ onKeyStroke(
11361142 </a >
11371143 </h2 >
11381144 <ClientOnly >
1139- <ReadmeTocDropdown
1140- v-if =" readmeData?.toc && readmeData.toc.length > 1"
1141- :toc =" readmeData.toc"
1142- :active-id =" activeTocId"
1143- :scroll-to-heading =" scrollToHeading"
1144- />
1145+ <div class =" flex items-center gap-2" >
1146+ <button
1147+ v-if =" readmeData?.markdown"
1148+ type =" button"
1149+ class =" flex items-center h-8 gap-1.5 px-2 py-2 font-mono text-xs bg-bg-subtle border border-border-subtle border-solid rounded-md transition-colors duration-150 hover:(text-fg border-border-hover) active:scale-95 focus:border-border-hover focus-visible:outline-accent/70 hover:text-fg"
1150+ :class =" copiedMarkdown ? 'text-fg' : 'text-fg-muted'"
1151+ :aria-label ="
1152+ copiedMarkdown ? $t('common.copied') : $t('package.readme.copy_markdown')
1153+ "
1154+ @click =" copyMarkdown()"
1155+ >
1156+ <span
1157+ class =" w-3.5 h-3.5"
1158+ :class =" copiedMarkdown ? 'i-carbon:checkmark text-accent' : 'i-carbon:document'"
1159+ aria-hidden =" true"
1160+ />
1161+ <span aria-live =" polite" >{{
1162+ copiedMarkdown ? $t('common.copied') : $t('package.readme.copy_markdown')
1163+ }}</span >
1164+ </button >
1165+ <ReadmeTocDropdown
1166+ v-if =" readmeData?.toc && readmeData.toc.length > 1"
1167+ :toc =" readmeData.toc"
1168+ :active-id =" activeTocId"
1169+ :scroll-to-heading =" scrollToHeading"
1170+ />
1171+ </div >
11451172 </ClientOnly >
11461173 </div >
11471174
0 commit comments