Standard.site landing page built in Next.js

Write documentation + add Link Cards and Markdown button + llm.txt

brookie.blog f5582344 fd9307dd

verified
+3054 -133
+50
app/api/docs/markdown/[...slug]/route.ts
···
··· 1 + import { NextResponse } from 'next/server' 2 + import { readFile } from 'node:fs/promises' 3 + import { join, resolve } from 'node:path' 4 + 5 + // Map of slugs to their file paths 6 + const docsFiles: Record<string, string> = { 7 + 'introduction': 'introduction.mdx', 8 + 'quick-start': 'quick-start.mdx', 9 + 'permissions': 'permissions.mdx', 10 + 'verification': 'verification.mdx', 11 + 'lexicons/publication': 'lexicons/publication.mdx', 12 + 'lexicons/document': 'lexicons/document.mdx', 13 + 'lexicons/subscription': 'lexicons/subscription.mdx', 14 + 'lexicons/theme': 'lexicons/theme.mdx', 15 + 'implementations': 'implementations.mdx', 16 + 'faq': 'faq.mdx', 17 + } 18 + 19 + export async function generateStaticParams() { 20 + return Object.keys(docsFiles).map((slug) => ({ 21 + slug: slug.split('/'), 22 + })) 23 + } 24 + 25 + export async function GET( 26 + request: Request, 27 + { params }: { params: Promise<{ slug: string[] }> } 28 + ) { 29 + try { 30 + const { slug } = await params 31 + const slugPath = slug.join('/') 32 + const fileName = docsFiles[slugPath] 33 + 34 + if (!fileName) { 35 + return new NextResponse('Not found', { status: 404 }) 36 + } 37 + 38 + const filePath = resolve(process.cwd(), 'content', 'docs', fileName) 39 + const markdown = await readFile(filePath, 'utf-8') 40 + 41 + return new NextResponse(markdown, { 42 + headers: { 43 + 'Content-Type': 'text/plain; charset=utf-8', 44 + }, 45 + }) 46 + } catch (error) { 47 + console.error('API Markdown Error:', error) 48 + return new NextResponse('Internal server error', { status: 500 }) 49 + } 50 + }
+10 -6
app/components/Footer.tsx
··· 1 - import { BlueskyLogo, PdslsLogo, StandardSiteLogo, TangledLogo } from '@/app/components' 2 3 export function Footer() { 4 return ( 5 - <div className="flex gap-x-8 lg:gap-x-16 xl:gap-x-24 justify-center border-t border-border bg-base-200 px-8 pt-12 pb-24 sm:py-32"> 6 <section className="hidden md:flex shrink-0 w-32"></section> 7 8 <footer className="flex gap-4 flex-col items-center text-center sm:text-left sm:flex-row sm:items-end sm:justify-between w-xl min-w-0"> ··· 13 Standard.site 14 </span> 15 <span className="font-medium sm:text-sm tracking-tight text-muted-content"> 16 - &copy; { new Date().getFullYear() } 17 </span> 18 </div> 19 </div> ··· 21 <div className="flex flex-col gap-4 items-center sm:items-end sm:gap-8"> 22 <div className="order-last sm:order-first w-fit flex justify-end items-center gap-4"> 23 <a href="https://bsky.app/profile/standard.site" target="_blank"> 24 - <BlueskyLogo className="h-5 w-auto text-muted-content hover:text-muted transition-colors"/> 25 </a> 26 <a href="https://tangled.org/standard.site" target="_blank"> 27 - <TangledLogo className="h-5 w-auto text-muted-content hover:text-muted transition-colors"/> 28 </a> 29 <a href="https://pdsls.dev/at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema" target="_blank"> 30 - <PdslsLogo className="h-5 w-auto text-muted-content hover:text-muted transition-colors"/> 31 </a> 32 </div> 33 <div className="flex flex-col sm:items-end"> ··· 42 </footer> 43 44 <section className="hidden md:flex shrink-0 w-32"></section> 45 </div> 46 ) 47 }
··· 1 + import { BlueskyLogo, PdslsLogo, StandardSiteLogo, TangledLogo, MarkdownButton } from '@/app/components' 2 3 export function Footer() { 4 return ( 5 + <div className="relative flex gap-x-8 lg:gap-x-16 xl:gap-x-24 justify-center border-t border-border bg-base-200 px-8 pt-12 pb-24 sm:py-32"> 6 <section className="hidden md:flex shrink-0 w-32"></section> 7 8 <footer className="flex gap-4 flex-col items-center text-center sm:text-left sm:flex-row sm:items-end sm:justify-between w-xl min-w-0"> ··· 13 Standard.site 14 </span> 15 <span className="font-medium sm:text-sm tracking-tight text-muted-content"> 16 + &copy; {new Date().getFullYear()} 17 </span> 18 </div> 19 </div> ··· 21 <div className="flex flex-col gap-4 items-center sm:items-end sm:gap-8"> 22 <div className="order-last sm:order-first w-fit flex justify-end items-center gap-4"> 23 <a href="https://bsky.app/profile/standard.site" target="_blank"> 24 + <BlueskyLogo className="h-5 w-auto text-muted-content hover:text-muted transition-colors" /> 25 </a> 26 <a href="https://tangled.org/standard.site" target="_blank"> 27 + <TangledLogo className="h-5 w-auto text-muted-content hover:text-muted transition-colors" /> 28 </a> 29 <a href="https://pdsls.dev/at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema" target="_blank"> 30 + <PdslsLogo className="h-5 w-auto text-muted-content hover:text-muted transition-colors" /> 31 </a> 32 </div> 33 <div className="flex flex-col sm:items-end"> ··· 42 </footer> 43 44 <section className="hidden md:flex shrink-0 w-32"></section> 45 + 46 + <div className="absolute bottom-8 right-8"> 47 + <MarkdownButton /> 48 + </div> 49 </div> 50 ) 51 }
+70
app/components/docs/ClickableHeading.tsx
···
··· 1 + 'use client' 2 + 3 + import { useState } from 'react' 4 + import { generateSlug } from '@/app/lib/slug' 5 + 6 + interface ClickableHeadingProps { 7 + level: 1 | 2 | 3 | 4 8 + children: React.ReactNode 9 + } 10 + 11 + export function ClickableHeading({ level, children }: ClickableHeadingProps) { 12 + const [copied, setCopied] = useState(false) 13 + 14 + const text = typeof children === 'string' ? children : extractText(children) 15 + const id = generateSlug(text) 16 + 17 + const handleClick = async () => { 18 + const url = `${window.location.origin}${window.location.pathname}#${id}` 19 + await navigator.clipboard.writeText(url) 20 + setCopied(true) 21 + 22 + // Update URL without scrolling 23 + window.history.pushState({}, '', `#${id}`) 24 + 25 + setTimeout(() => setCopied(false), 2000) 26 + } 27 + 28 + const Tag = `h${level}` as keyof JSX.IntrinsicElements 29 + 30 + const baseClasses = "font-display font-semibold leading-tight tracking-tighter text-base-content group cursor-pointer hover:text-muted transition-colors relative scroll-mt-32" 31 + const levelClasses = { 32 + 1: "text-3xl sm:text-4xl mb-8", 33 + 2: "text-2xl sm:text-3xl mt-12 mb-4", 34 + 3: "text-xl sm:text-2xl tracking-tight mt-8 mb-3", 35 + 4: "text-lg sm:text-xl tracking-tight mt-6 mb-2" 36 + } 37 + 38 + return ( 39 + <Tag 40 + id={id} 41 + className={`${baseClasses} ${levelClasses[level]}`} 42 + onClick={handleClick} 43 + > 44 + <span className="inline-flex items-center gap-2"> 45 + {children} 46 + <span className="opacity-0 group-hover:opacity-100 transition-opacity text-muted"> 47 + {copied ? ( 48 + <svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 49 + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" /> 50 + </svg> 51 + ) : ( 52 + <svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 53 + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" /> 54 + </svg> 55 + )} 56 + </span> 57 + </span> 58 + </Tag> 59 + ) 60 + } 61 + 62 + function extractText(node: React.ReactNode): string { 63 + if (typeof node === 'string') return node 64 + if (typeof node === 'number') return String(node) 65 + if (Array.isArray(node)) return node.map(extractText).join('') 66 + if (node && typeof node === 'object' && 'props' in node) { 67 + return extractText(node.props.children) 68 + } 69 + return '' 70 + }
+104
app/components/docs/LinkCard.tsx
···
··· 1 + 2 + interface LinkCardProps { 3 + title?: string 4 + description?: string 5 + url: string 6 + image?: string 7 + } 8 + 9 + async function fetchOGMetadata(url: string) { 10 + try { 11 + const response = await fetch(url, { 12 + next: { revalidate: 86400 }, // Cache for 24 hours 13 + headers: { 14 + 'User-Agent': 'Mozilla/5.0 (compatible; Standard.site/1.0; +https://standard.site)' 15 + } 16 + }) 17 + 18 + if (!response.ok) { 19 + console.warn(`Failed to fetch ${url}: ${response.status}`) 20 + return null 21 + } 22 + 23 + const html = await response.text() 24 + const urlObj = new URL(url) 25 + 26 + // Extract OG metadata - try both property and name attributes 27 + let ogImage = 28 + html.match(/<meta[^>]*property=["']og:image["'][^>]*content=["']([^"']*)["']/i)?.[1] || 29 + html.match(/<meta[^>]*content=["']([^"']*)["'][^>]*property=["']og:image["']/i)?.[1] 30 + 31 + const ogTitle = 32 + html.match(/<meta[^>]*property=["']og:title["'][^>]*content=["']([^"']*)["']/i)?.[1] || 33 + html.match(/<meta[^>]*content=["']([^"']*)["'][^>]*property=["']og:title["']/i)?.[1] 34 + 35 + const ogDescription = 36 + html.match(/<meta[^>]*property=["']og:description["'][^>]*content=["']([^"']*)["']/i)?.[1] || 37 + html.match(/<meta[^>]*content=["']([^"']*)["'][^>]*property=["']og:description["']/i)?.[1] 38 + 39 + // Resolve relative image URLs to absolute 40 + if (ogImage && !ogImage.startsWith('http')) { 41 + if (ogImage.startsWith('//')) { 42 + ogImage = `${urlObj.protocol}${ogImage}` 43 + } else if (ogImage.startsWith('/')) { 44 + ogImage = `${urlObj.protocol}//${urlObj.host}${ogImage}` 45 + } else { 46 + ogImage = `${urlObj.protocol}//${urlObj.host}/${ogImage}` 47 + } 48 + } 49 + 50 + return { 51 + image: ogImage || null, 52 + title: ogTitle || null, 53 + description: ogDescription || null 54 + } 55 + } catch (error) { 56 + console.error('Failed to fetch OG metadata from', url, error) 57 + return null 58 + } 59 + } 60 + 61 + export async function LinkCard({ title, description, url, image }: LinkCardProps) { 62 + const hostname = new URL(url).hostname.replace('www.', '') 63 + 64 + // Fetch OG metadata if not provided 65 + const metadata = await fetchOGMetadata(url) 66 + 67 + const finalTitle = title || metadata?.title || hostname 68 + const finalDescription = description || metadata?.description || '' 69 + const finalImage = image || metadata?.image 70 + 71 + return ( 72 + <a 73 + href={url} 74 + target="_blank" 75 + rel="noopener noreferrer" 76 + className="group flex gap-4 rounded-2xl border border-border bg-gradient-to-br from-base-200/50 to-base-200 p-4 transition-all hover:border-border/60 hover:shadow-lg not-prose mb-4" 77 + > 78 + <div className="flex min-w-0 flex-1 flex-col gap-2"> 79 + <h3 className="font-mono text-lg font-medium tracking-tight text-base-content group-hover:underline"> 80 + {finalTitle} 81 + </h3> 82 + {finalDescription && ( 83 + <p className="text-sm leading-relaxed tracking-tight text-muted-content"> 84 + {finalDescription} 85 + </p> 86 + )} 87 + <div className="mt-auto text-xs font-medium text-muted-content"> 88 + <span className="font-mono">{hostname}</span> 89 + </div> 90 + </div> 91 + {finalImage && ( 92 + <div className="shrink-0"> 93 + <div className="h-24 w-40 overflow-hidden rounded-xl bg-base-100"> 94 + <img 95 + src={finalImage} 96 + alt={finalTitle} 97 + className="h-full w-full object-cover" 98 + /> 99 + </div> 100 + </div> 101 + )} 102 + </a> 103 + ) 104 + }
+37
app/components/docs/MarkdownButton.tsx
···
··· 1 + 'use client' 2 + 3 + import { usePathname } from 'next/navigation' 4 + 5 + interface MarkdownButtonProps { 6 + slug?: string 7 + } 8 + 9 + export function MarkdownButton({ slug: providedSlug }: MarkdownButtonProps) { 10 + const pathname = usePathname() 11 + 12 + // Detect slug from pathname if not provided 13 + const slug = providedSlug || (() => { 14 + const path = pathname.split(/[?#]/)[0] // Remove query and hash 15 + if (!path.startsWith('/docs/')) return null 16 + const parts = path.split('/').filter(Boolean) 17 + if (parts.length <= 1) return null // Only /docs/ with no slug 18 + return parts.slice(1).join('/') 19 + })() 20 + 21 + if (!slug) return null 22 + 23 + return ( 24 + <a 25 + href={`/api/docs/markdown/${slug}`} 26 + target="_blank" 27 + rel="noopener noreferrer" 28 + className="bg-base-100 text-muted hover:text-base-content hover:bg-base-300 px-3 py-2 rounded-lg border border-border transition-all flex items-center gap-2 text-xs h-fit" 29 + title="View raw markdown" 30 + > 31 + <svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 32 + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" /> 33 + </svg> 34 + Markdown 35 + </a> 36 + ) 37 + }
+3
app/components/docs/StandardSite.tsx
···
··· 1 + export function StandardSite() { 2 + return <span className="text-base-content">Standard.site</span> 3 + }
+24 -2
app/components/docs/Table.tsx
··· 4 } 5 6 export function Table({ headers, rows }: TableProps) { 7 return ( 8 <div className="overflow-x-auto mb-6"> 9 - <table className="w-full text-base border-collapse"> 10 <thead> 11 <tr> 12 {headers.map((header, i) => ( ··· 25 {row.map((cell, j) => ( 26 <td 27 key={j} 28 - className="text-muted border-b border-border px-3 py-2" 29 > 30 {cell} 31 </td>
··· 4 } 5 6 export function Table({ headers, rows }: TableProps) { 7 + const columnCount = headers.length 8 + 9 return ( 10 <div className="overflow-x-auto mb-6"> 11 + <table className="w-full text-base border-collapse table-fixed"> 12 + <colgroup> 13 + {columnCount === 3 ? ( 14 + <> 15 + <col className="w-1/4" /> 16 + <col className="w-1/5" /> 17 + <col /> 18 + </> 19 + ) : columnCount === 4 ? ( 20 + <> 21 + <col className="w-1/4" /> 22 + <col className="w-1/6" /> 23 + <col className="w-1/6" /> 24 + <col /> 25 + </> 26 + ) : ( 27 + headers.map((_, i) => <col key={i} />) 28 + )} 29 + </colgroup> 30 <thead> 31 <tr> 32 {headers.map((header, i) => ( ··· 45 {row.map((cell, j) => ( 46 <td 47 key={j} 48 + className={`text-muted border-b border-border px-3 py-2 ${ 49 + j === 0 ? 'font-mono text-sm break-all' : '' 50 + }`} 51 > 52 {cell} 53 </td>
+4
app/components/docs/index.ts
··· 1 export { DocsSidebar } from './DocsSidebar' 2 export { DocsNav } from './DocsNav' 3 export { Table } from './Table'
··· 1 export { DocsSidebar } from './DocsSidebar' 2 export { DocsNav } from './DocsNav' 3 export { Table } from './Table' 4 + export { LinkCard } from './LinkCard' 5 + export { StandardSite } from './StandardSite' 6 + export { MarkdownButton } from './MarkdownButton' 7 + export { ClickableHeading } from './ClickableHeading'
+3 -3
app/components/sections/DefinitionsSection.tsx
··· 38 </h2> 39 40 <p className="text-base sm:text-xl leading-snug tracking-tight text-muted"> 41 - We currently define two main lexicons that cover the core building 42 - blocks of long-form platforms: where content lives, and what it 43 - contains. 44 </p> 45 46 <TabbedLexiconViewer tabs={ tabs } allSchemas={ allSchemas } />
··· 38 </h2> 39 40 <p className="text-base sm:text-xl leading-snug tracking-tight text-muted"> 41 + We currently define three main lexicons that cover the core building 42 + blocks of long-form platforms: where content lives, what it 43 + contains, and how users connect with publications. 44 </p> 45 46 <TabbedLexiconViewer tabs={ tabs } allSchemas={ allSchemas } />
+1
app/data/content.ts
··· 76 export const LEXICON_TABS = [ 77 'site.standard.publication', 78 'site.standard.document', 79 ]
··· 76 export const LEXICON_TABS = [ 77 'site.standard.publication', 78 'site.standard.document', 79 + 'site.standard.graph.subscription', 80 ]
+5
app/data/docs-nav.ts
··· 14 items: [ 15 { label: 'Introduction', href: '/docs/introduction' }, 16 { label: 'Quick Start', href: '/docs/quick-start' }, 17 ], 18 }, 19 { ··· 21 items: [ 22 { label: 'Publication', href: '/docs/lexicons/publication' }, 23 { label: 'Document', href: '/docs/lexicons/document' }, 24 ], 25 }, 26 { 27 title: 'Resources', 28 items: [ 29 { label: 'FAQ', href: '/docs/faq' }, 30 ], 31 },
··· 14 items: [ 15 { label: 'Introduction', href: '/docs/introduction' }, 16 { label: 'Quick Start', href: '/docs/quick-start' }, 17 + { label: 'Permissions', href: '/docs/permissions' }, 18 + { label: 'Verification', href: '/docs/verification' }, 19 ], 20 }, 21 { ··· 23 items: [ 24 { label: 'Publication', href: '/docs/lexicons/publication' }, 25 { label: 'Document', href: '/docs/lexicons/document' }, 26 + { label: 'Subscription', href: '/docs/lexicons/subscription' }, 27 + { label: 'Theme', href: '/docs/lexicons/theme' }, 28 ], 29 }, 30 { 31 title: 'Resources', 32 items: [ 33 + { label: 'Implementations', href: '/docs/implementations' }, 34 { label: 'FAQ', href: '/docs/faq' }, 35 ], 36 },
+8 -1
app/docs/[...slug]/page.tsx
··· 5 const docsContent: Record<string, () => Promise<{ default: React.ComponentType }>> = { 6 'introduction': () => import('@/content/docs/introduction.mdx'), 7 'quick-start': () => import('@/content/docs/quick-start.mdx'), 8 'lexicons/publication': () => import('@/content/docs/lexicons/publication.mdx'), 9 'lexicons/document': () => import('@/content/docs/lexicons/document.mdx'), 10 'faq': () => import('@/content/docs/faq.mdx'), 11 } 12 ··· 30 31 const { default: Content } = await loader() 32 33 - return <Content /> 34 }
··· 5 const docsContent: Record<string, () => Promise<{ default: React.ComponentType }>> = { 6 'introduction': () => import('@/content/docs/introduction.mdx'), 7 'quick-start': () => import('@/content/docs/quick-start.mdx'), 8 + 'permissions': () => import('@/content/docs/permissions.mdx'), 9 + 'verification': () => import('@/content/docs/verification.mdx'), 10 'lexicons/publication': () => import('@/content/docs/lexicons/publication.mdx'), 11 'lexicons/document': () => import('@/content/docs/lexicons/document.mdx'), 12 + 'lexicons/subscription': () => import('@/content/docs/lexicons/subscription.mdx'), 13 + 'lexicons/theme': () => import('@/content/docs/lexicons/theme.mdx'), 14 + 'implementations': () => import('@/content/docs/implementations.mdx'), 15 'faq': () => import('@/content/docs/faq.mdx'), 16 } 17 ··· 35 36 const { default: Content } = await loader() 37 38 + return ( 39 + <Content /> 40 + ) 41 }
+9
app/globals.css
··· 45 body { 46 font-family : var(--font-inter), var(--font-geist-sans), Arial, Helvetica, sans-serif; 47 }
··· 45 body { 46 font-family : var(--font-inter), var(--font-geist-sans), Arial, Helvetica, sans-serif; 47 } 48 + 49 + /* Softer link underlines */ 50 + a { 51 + text-decoration-color: var(--border); 52 + } 53 + 54 + a:hover { 55 + text-decoration-color: var(--muted-content); 56 + }
+2
app/lib/lexicon.ts
··· 1 import publicationLexicon from "../data/lexicons/publication.json"; 2 import documentLexicon from "../data/lexicons/document.json"; 3 import themeBasicLexicon from "../data/lexicons/theme.basic.json"; 4 import themeColorLexicon from "../data/lexicons/theme.color.json"; 5 import { getDescriptionOverride, getPropertyOrder } from "../data/lexicon-overrides"; ··· 48 const lexiconCache: Record<string, LexiconSchema> = { 49 "site.standard.publication": publicationLexicon as LexiconSchema, 50 "site.standard.document": documentLexicon as LexiconSchema, 51 "site.standard.theme.basic": themeBasicLexicon as LexiconSchema, 52 "site.standard.theme.color": themeColorLexicon as LexiconSchema, 53 };
··· 1 import publicationLexicon from "../data/lexicons/publication.json"; 2 import documentLexicon from "../data/lexicons/document.json"; 3 + import subscriptionLexicon from "../data/lexicons/graph.subscription.json"; 4 import themeBasicLexicon from "../data/lexicons/theme.basic.json"; 5 import themeColorLexicon from "../data/lexicons/theme.color.json"; 6 import { getDescriptionOverride, getPropertyOrder } from "../data/lexicon-overrides"; ··· 49 const lexiconCache: Record<string, LexiconSchema> = { 50 "site.standard.publication": publicationLexicon as LexiconSchema, 51 "site.standard.document": documentLexicon as LexiconSchema, 52 + "site.standard.graph.subscription": subscriptionLexicon as LexiconSchema, 53 "site.standard.theme.basic": themeBasicLexicon as LexiconSchema, 54 "site.standard.theme.color": themeColorLexicon as LexiconSchema, 55 };
+9
app/lib/slug.ts
···
··· 1 + export function generateSlug(text: string): string { 2 + return text 3 + .toString() 4 + .toLowerCase() 5 + .trim() 6 + .replace(/\s+/g, '-') 7 + .replace(/[^\w\-]+/g, '') 8 + .replace(/\-\-+/g, '-') 9 + }
+8 -14
content/docs/faq.mdx
··· 1 # Frequently Asked Questions 2 3 - Common questions about Standard.site and implementing the lexicons. 4 5 ## General 6 7 ### What is Standard.site? 8 9 - Standard.site is a community-driven initiative to create shared lexicon schemas for long-form publishing on AT Protocol. It enables interoperability between different publishing platforms. 10 11 ### Who created Standard.site? 12 13 - Standard.site emerged from conversations between developers building long-form platforms on AT Protocol. It's maintained by the community and grows as builders identify shared needs. 14 - 15 - ### Is Standard.site official? 16 - 17 - Standard.site is a community standard, not an official Bluesky or AT Protocol specification. However, it's designed to work seamlessly with the AT Protocol ecosystem. 18 19 ## Technical 20 21 ### Do I need to use all the lexicons? 22 23 - No. You can implement just the lexicons that make sense for your application. The schemas are designed to work independently while supporting richer integrations when combined. 24 25 ### Can I extend the schemas? 26 27 - The standard focuses on shared metadata fields. You're free to add additional fields in your application, though they may not be understood by other platforms. 28 - 29 - ### How do I validate records? 30 - 31 - Use AT Protocol's standard validation mechanisms. The lexicon schemas define the expected structure, and records are validated against these schemas by the PDS. 32 33 ## Contributing 34 35 ### How can I contribute? 36 37 - Standard.site is developed in the open. Join the conversation on Bluesky, Tangled, or check the project on GitHub to propose changes or additions. 38 39 ### How are changes decided? 40
··· 1 + import { StandardSite } from '@/app/components/docs' 2 + 3 # Frequently Asked Questions 4 5 + Common questions about <StandardSite /> and implementing the lexicons. 6 7 ## General 8 9 ### What is Standard.site? 10 11 + <StandardSite /> is a community-driven initiative to create shared lexicon schemas for long-form publishing on AT Protocol. It enables interoperability between different publishing platforms. 12 13 ### Who created Standard.site? 14 15 + <StandardSite /> emerged from conversations between developers building long-form platforms on AT Protocol. It's maintained by the community and grows as builders identify shared needs. 16 17 ## Technical 18 19 ### Do I need to use all the lexicons? 20 21 + No. Applications can implement just the lexicons that make sense for their use case. The schemas are designed to work independently while supporting richer integrations when combined. 22 23 ### Can I extend the schemas? 24 25 + The standard focuses on shared metadata properties. Applications are free to add additional properties, though they may not be understood by other platforms. 26 27 ## Contributing 28 29 ### How can I contribute? 30 31 + <StandardSite /> is developed in the open. Join the conversation on Bluesky or [Tangled](https://tangled.org/standard.site) to propose changes or additions. 32 33 ### How are changes decided? 34
+43
content/docs/implementations.mdx
···
··· 1 + import { LinkCard } from '@/app/components/docs' 2 + 3 + import { StandardSite } from '@/app/components/docs' 4 + 5 + # Implementations 6 + 7 + Projects and tools using <StandardSite /> lexicons to build interoperable platforms on AT Protocol. 8 + 9 + ## Development Tools 10 + 11 + <LinkCard url="https://site-validator.fly.dev" /> 12 + 13 + ## Migration Tools 14 + 15 + <LinkCard url="https://sequoia.pub/blog/introducing-sequoia/" /> 16 + 17 + ## Indexes & Discovery 18 + 19 + <LinkCard url="https://read.pckt.blog" /> 20 + 21 + <LinkCard url="https://docs.surf" /> 22 + 23 + <LinkCard url="https://standard-search.octet-stream.net/" /> 24 + 25 + ## Building Your Own 26 + 27 + Building a tool or platform using <StandardSite /> lexicons? We'd love to hear about it! <StandardSite /> is a community-driven initiative, and new implementations help grow the ecosystem. 28 + 29 + ### What to Build 30 + 31 + Some ideas for new implementations: 32 + 33 + - **RSS bridges**: Convert <StandardSite /> records to RSS/Atom feeds 34 + - **Static site generators**: Export <StandardSite /> content to static HTML 35 + - **Mobile readers**: Native mobile apps for reading <StandardSite /> content 36 + - **Import tools**: Import content from existing platforms to <StandardSite /> 37 + - **Content management**: Editors for creating <StandardSite /> records 38 + 39 + ## Related 40 + 41 + - [Quick Start](/docs/quick-start) - Start implementing <StandardSite /> 42 + - [Publication lexicon](/docs/lexicons/publication) - Understand publication schemas 43 + - [Document lexicon](/docs/lexicons/document) - Understand document schemas
+17 -12
content/docs/introduction.mdx
··· 1 # Introduction 2 3 - **Standard.site** provides shared lexicons for long-form publishing on AT Protocol. 4 5 ## What is Standard.site? 6 7 - Standard.site is a set of lexicon schemas that enable interoperability between long-form publishing platforms built on AT Protocol. By using shared schemas, content created on one platform can be understood and displayed by any other compatible platform. 8 9 - ## Why use shared lexicons? 10 11 - - **Interoperability**: Your content works across multiple platforms 12 - - **Portability**: Move your content without losing structure 13 - - **Consistency**: Shared vocabulary for publications, documents, and subscriptions 14 - 15 - ## Core concepts 16 17 ### Publications 18 19 - A publication is a container for documents. Think of it as a blog, magazine, or newsletter. Each publication has metadata like a title, description, and avatar. 20 21 ### Documents 22 23 - Documents are individual pieces of content within a publication. They contain the actual written content, along with metadata like title, publish date, and status. 24 25 ### Subscriptions 26 27 - Subscriptions track relationships between users and publications, enabling follow functionality. 28 29 ## Next steps 30 31 - Read the [Quick Start](/docs/quick-start) guide to begin implementing 32 - Explore the [Publication lexicon](/docs/lexicons/publication) schema 33 - - Check out the [FAQ](/docs/faq) for common questions
··· 1 + import { StandardSite } from '@/app/components/docs' 2 + 3 # Introduction 4 5 + <StandardSite /> lexicons bring long-form writing into the social web by linking blog posts and articles to the AT Protocol. This integration helps make published work easier to share and find, while ensuring authors maintain ownership of their writing in the form of records stored on their Personal Data Server (PDS). 6 7 ## What is Standard.site? 8 9 + Our lexicons are built with discovery and connectivity in mind. <StandardSite /> lexicons bridge the gap between writers and the communities they intend to reach. 10 11 + We have two main lexicons that are used to create and manage publications and written documents. In addition to these base lexicons, we maintain a handful of supporting lexicons for social features and utility. 12 13 + ## Core Lexicons 14 15 ### Publications 16 17 + The [`site.standard.publication`](/docs/lexicons/publication) lexicon is a representation of a collection of documents published to the web. It includes important information about a publication including its location on the web, theming information, user preferences, and more. 18 19 ### Documents 20 21 + The [`site.standard.document`](/docs/lexicons/document) lexicon provides metadata for individual documents. Including the document's relation to a publication if applicable, a path to the document, and more information like a document's complete contents. 22 23 ### Subscriptions 24 25 + The [`site.standard.graph.subscription`](/docs/lexicons/subscription) lexicon tracks relationships between users and publications, enabling follow functionality and personalized content feeds across the AT Protocol network. 26 + 27 + ## Design Philosophy 28 + 29 + There are minimal requirements to use these lexicons, ensuring adoptability is as straightforward as possible. As long as the minimum required properties are included in published records, they will be available for other AT Protocol platforms to consume. 30 + 31 + While <StandardSite /> lexicons are lightweight on their own, they can be expanded to fit individual needs if necessary. The existing properties should not be seen as constraints, but rather as starting points. 32 33 ## Next steps 34 35 - Read the [Quick Start](/docs/quick-start) guide to begin implementing 36 - Explore the [Publication lexicon](/docs/lexicons/publication) schema 37 + - Learn about [Verification](/docs/verification) to link records to a domain 38 + - Check out [Implementations](/docs/implementations) to see tools and platforms using <StandardSite />
+47 -32
content/docs/lexicons/document.mdx
··· 2 3 # Document Lexicon 4 5 - The `site.standard.document` lexicon defines the schema for documents within publications. 6 7 ## Overview 8 9 - A document represents an individual piece of content, such as a blog post or article. Documents belong to a publication and contain the actual written content along with metadata. 10 11 ## Schema 12 13 <Table 14 - headers={['Field', 'Type', 'Required', 'Description']} 15 rows={[ 16 - ['publication', 'at-uri', 'Yes', 'Reference to parent publication'], 17 - ['title', 'string', 'Yes', 'Document title'], 18 - ['content', 'string', 'Yes', 'The document content'], 19 - ['status', 'string', 'Yes', 'One of: draft, published, archived'], 20 - ['visibility', 'string', 'No', 'One of: public, subscribers, private'], 21 - ['createdAt', 'datetime', 'Yes', 'When the document was created'], 22 - ['publishedAt', 'datetime', 'No', 'When the document was published'], 23 ]} 24 /> 25 26 - ## Status values 27 28 - - **draft**: Work in progress, not publicly visible 29 - - **published**: Live and visible according to visibility settings 30 - - **archived**: No longer actively displayed but still accessible 31 32 ## Example 33 34 - ```typescript 35 - const document = { 36 - $type: 'site.standard.document', 37 - publication: 'at://did:plc:abc.../site.standard.publication/main', 38 - title: 'Getting Started with AT Protocol', 39 - content: '...', // Your content here 40 - status: 'published', 41 - visibility: 'public', 42 - createdAt: '2024-01-20T14:00:00.000Z', 43 - publishedAt: '2024-01-20T14:30:00.000Z', 44 } 45 ``` 46 47 - ## Content format 48 49 - The content field is intentionally flexible. Standard.site does not prescribe a specific content format, allowing platforms to use: 50 51 - - Markdown 52 - - HTML 53 - - JSON-based rich text 54 - - Custom formats 55 56 - This flexibility enables each platform to optimize for their use case while maintaining interoperability at the metadata level. 57 58 ## Related 59 60 - - [Publication lexicon](/docs/lexicons/publication) - Parent container for documents 61 - [Quick Start](/docs/quick-start) - Implementation guide
··· 2 3 # Document Lexicon 4 5 + The `site.standard.document` lexicon provides metadata for documents published on the web. 6 7 ## Overview 8 9 + Documents may be standalone or associated with a publication. This lexicon can be used to store a document's content and its associated metadata. 10 11 ## Schema 12 13 + ### Required Properties 14 + 15 <Table 16 + headers={['Property', 'Type', 'Description']} 17 rows={[ 18 + ['site', 'string', 'Points to a publication record (at://) or publication URL (https://). Avoid trailing slashes.'], 19 + ['title', 'string', 'Title of the document'], 20 + ['publishedAt', 'datetime', 'Timestamp of the document\'s publish time'], 21 ]} 22 /> 23 24 + ### Optional Properties 25 26 + <Table 27 + headers={['Property', 'Type', 'Description']} 28 + rows={[ 29 + ['path', 'string', 'Combined with site/publication URL to construct canonical URL. Should start with a slash.'], 30 + ['description', 'string', 'Brief description or excerpt from the document'], 31 + ['coverImage', 'blob', 'Image for thumbnail or cover. Less than 1MB in size.'], 32 + ['content', 'union', 'Open union used to define the record\'s content. Each entry must specify a $type.'], 33 + ['textContent', 'string', 'Plaintext representation of the document. Should not contain markdown or formatting.'], 34 + ['bskyPostRef', 'ref', 'Strong reference to a Bluesky post. Useful to track comments off-platform.'], 35 + ['tags', 'array', 'Array of strings to tag or categorize the document. Avoid prepending with hashtags.'], 36 + ['updatedAt', 'datetime', 'Timestamp of the document\'s last edit'], 37 + ]} 38 + /> 39 40 ## Example 41 42 + ```json 43 + { 44 + "$type": "site.standard.document", 45 + "site": "at://did:plc:abc123/site.standard.publication/3lwafzkjqm25s", 46 + "path": "/blog/getting-started", 47 + "title": "Getting Started with Standard.site", 48 + "description": "Learn how to use Standard.site lexicons in your project", 49 + "coverImage": { 50 + "$type": "blob", 51 + "ref": { 52 + "$link": "bafkreiexample123456789" 53 + }, 54 + "mimeType": "image/jpeg", 55 + "size": 245678 56 + }, 57 + "textContent": "Full text of the article...", 58 + "tags": ["tutorial", "atproto"], 59 + "publishedAt": "2024-01-20T14:30:00.000Z" 60 } 61 ``` 62 63 + ## Content Format 64 65 + The content property is an open union, allowing for extensibility. Each entry must specify a `$type` and may be extended with other lexicons to support additional content formats like Markdown, blocks, or other rich text. 66 67 + ## View the Lexicon 68 69 + - [View full lexicon schema](https://pdsls.dev/at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.document) 70 + - [Example record](https://pdsls.dev/at://did:plc:revjuqmkvrw6fnkxppqtszpv/site.standard.document/3mbfqhezge25u) 71 72 ## Related 73 74 + - [Publication lexicon](/docs/lexicons/publication) - Collections of documents 75 + - [Verification](/docs/verification) - Link documents to web pages 76 - [Quick Start](/docs/quick-start) - Implementation guide
+78 -14
content/docs/lexicons/publication.mdx
··· 2 3 # Publication Lexicon 4 5 - The `site.standard.publication` lexicon defines the schema for publications. 6 7 ## Overview 8 9 - A publication represents a container for documents, similar to a blog, magazine, or newsletter. Each user can have multiple publications. 10 11 ## Schema 12 13 <Table 14 - headers={['Field', 'Type', 'Required', 'Description']} 15 rows={[ 16 - ['title', 'string', 'Yes', 'The publication title'], 17 - ['description', 'string', 'No', 'A brief description'], 18 - ['avatar', 'blob', 'No', 'Publication avatar image'], 19 - ['createdAt', 'datetime', 'Yes', 'When the publication was created'], 20 ]} 21 /> 22 23 ## Example 24 25 - ```typescript 26 - const publication = { 27 - $type: 'site.standard.publication', 28 - title: 'Tech Insights', 29 - description: 'Weekly thoughts on technology and software development', 30 - createdAt: '2024-01-15T10:30:00.000Z', 31 } 32 ``` 33 34 ## Related 35 36 - - [Document lexicon](/docs/lexicons/document) - Content within publications 37 - [Quick Start](/docs/quick-start) - Implementation guide
··· 2 3 # Publication Lexicon 4 5 + The `site.standard.publication` lexicon is used to describe information about a particular publication. 6 7 ## Overview 8 9 + A publication represents a collection of documents published to the web. It includes important information about a publication including its location on the web, theming information, user preferences, and more. 10 + 11 + The publication lexicon is not a requirement, but is recommended when publishing collections of related documents. 12 13 ## Schema 14 15 + ### Required Properties 16 + 17 <Table 18 + headers={['Property', 'Type', 'Description']} 19 rows={[ 20 + ['url', 'string', 'Base URL for the publication (ex: https://standard.site). Combined with document path to construct full URLs. Avoid trailing slashes.'], 21 + ['name', 'string', 'The name of the publication'], 22 + ]} 23 + /> 24 + 25 + ### Optional Properties 26 + 27 + <Table 28 + headers={['Property', 'Type', 'Description']} 29 + rows={[ 30 + ['icon', 'blob', 'Square image to identify publication'], 31 + ['description', 'string', 'Description of the publication'], 32 + ['basicTheme', 'ref', 'Simplified publication theme (ref → [site.standard.theme.basic](/docs/lexicons/theme))'], 33 + ['preferences', 'object', 'Platform-specific preferences for the publication'], 34 + ['preferences.showInDiscover', 'boolean', 'Whether the publication should appear in discovery feeds'], 35 ]} 36 /> 37 38 ## Example 39 40 + ```json 41 + { 42 + "$type": "site.standard.publication", 43 + "url": "https://standard.site", 44 + "icon": { 45 + "$type": "blob", 46 + "ref": { 47 + "$link": "bafkreiexample123456789" 48 + }, 49 + "mimeType": "image/png", 50 + "size": 12345 51 + }, 52 + "name": "Standard.site Blog", 53 + "description": "Documentation and updates about Standard.site lexicons", 54 + "basicTheme": { 55 + "$type": "site.standard.theme.basic", 56 + "background": { 57 + "$type": "site.standard.theme.color#rgb", 58 + "r": 255, 59 + "g": 255, 60 + "b": 255 61 + }, 62 + "foreground": { 63 + "$type": "site.standard.theme.color#rgb", 64 + "r": 31, 65 + "g": 41, 66 + "b": 55 67 + }, 68 + "accent": { 69 + "$type": "site.standard.theme.color#rgb", 70 + "r": 59, 71 + "g": 130, 72 + "b": 246 73 + }, 74 + "accentForeground": { 75 + "$type": "site.standard.theme.color#rgb", 76 + "r": 255, 77 + "g": 255, 78 + "b": 255 79 + } 80 + }, 81 + "preferences": { 82 + "showInDiscover": true 83 + } 84 } 85 ``` 86 87 + ## View the Lexicon 88 + 89 + - [View full lexicon schema](https://pdsls.dev/at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.publication) 90 + - [Example record](https://pdsls.dev/at://did:plc:revjuqmkvrw6fnkxppqtszpv/site.standard.publication/3lwafzkjqm25s) 91 + 92 + ## Extensibility 93 + 94 + Lexicons are extendable. Additional properties may be added to better suit the needs of a project. 95 + 96 ## Related 97 98 + - [Document lexicon](/docs/lexicons/document) - Individual documents within publications 99 + - [Theme lexicon](/docs/lexicons/theme) - Publication theming 100 + - [Verification](/docs/verification) - Link publications to a domain 101 - [Quick Start](/docs/quick-start) - Implementation guide
+40
content/docs/lexicons/subscription.mdx
···
··· 1 + import { Table } from '@/app/components/docs' 2 + 3 + # Subscription Lexicon 4 + 5 + The `site.standard.graph.subscription` lexicon tracks relationships between users and publications. 6 + 7 + ## Overview 8 + 9 + Subscriptions enable users to follow publications and receive updates about new content. They represent the social connection between readers and the publications they're interested in. 10 + 11 + ## Schema 12 + 13 + ### Required Properties 14 + 15 + <Table 16 + headers={['Property', 'Type', 'Description']} 17 + rows={[ 18 + ['publication', 'at-uri', 'AT-URI reference to the publication record being subscribed to (ex: at://did:plc:abc123/site.standard.publication/xyz789)'], 19 + ]} 20 + /> 21 + 22 + ## Example 23 + 24 + ```json 25 + { 26 + "$type": "site.standard.graph.subscription", 27 + "publication": "at://did:plc:abc123/site.standard.publication/3lwafzkjqm25s" 28 + } 29 + ``` 30 + 31 + ## View the Lexicon 32 + 33 + - [View full lexicon schema](https://pdsls.dev/at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.graph.subscription) 34 + - [Example record](https://pdsls.dev/at://did:plc:revjuqmkvrw6fnkxppqtszpv/site.standard.graph.subscription/3lz4ynejb4225) 35 + 36 + ## Related 37 + 38 + - [Publication lexicon](/docs/lexicons/publication) - Publications that can be subscribed to 39 + - [Document lexicon](/docs/lexicons/document) - Content from subscribed publications 40 + - [Quick Start](/docs/quick-start) - Implementation guide
+182
content/docs/lexicons/theme.mdx
···
··· 1 + import { Table } from '@/app/components/docs' 2 + 3 + # Theme Lexicon 4 + 5 + The `site.standard.theme.basic` lexicon provides a simplified theme definition for publications, enabling basic color customization for content display across different platforms and applications. 6 + 7 + ## Overview 8 + 9 + This lexicon ensures publications maintain their visual identity across different reading applications and platforms by defining core colors for content display. 10 + 11 + ## Schema 12 + 13 + ### Required Properties 14 + 15 + <Table 16 + headers={['Property', 'Type', 'Description']} 17 + rows={[ 18 + ['background', 'ref', 'Color used for content background (ref → site.standard.theme.color#rgb)'], 19 + ['foreground', 'ref', 'Color used for content text (ref → site.standard.theme.color#rgb)'], 20 + ['accent', 'ref', 'Color used for links and button backgrounds (ref → site.standard.theme.color#rgb)'], 21 + ['accentForeground', 'ref', 'Color used for button text (ref → site.standard.theme.color#rgb)'], 22 + ]} 23 + /> 24 + 25 + ## Color Format 26 + 27 + Colors are defined using the `site.standard.theme.color#rgb` type from the `site.standard.theme.color` lexicon. 28 + 29 + ### RGB Color Type 30 + 31 + Each color is an object with three required integer properties: 32 + 33 + <Table 34 + headers={['Property', 'Type', 'Range', 'Description']} 35 + rows={[ 36 + ['r', 'integer', '0-255', 'Red channel value'], 37 + ['g', 'integer', '0-255', 'Green channel value'], 38 + ['b', 'integer', '0-255', 'Blue channel value'], 39 + ]} 40 + /> 41 + 42 + ### RGBA Color Type 43 + 44 + The `site.standard.theme.color` lexicon also defines an `rgba` type for colors with transparency: 45 + 46 + <Table 47 + headers={['Property', 'Type', 'Range', 'Description']} 48 + rows={[ 49 + ['r', 'integer', '0-255', 'Red channel value'], 50 + ['g', 'integer', '0-255', 'Green channel value'], 51 + ['b', 'integer', '0-255', 'Blue channel value'], 52 + ['a', 'integer', '0-100', 'Alpha (opacity) value, where 0 is transparent and 100 is opaque'], 53 + ]} 54 + /> 55 + 56 + ### Color Roles 57 + 58 + - **background**: Main surface color for content areas 59 + - **foreground**: Default color for body text and content 60 + - **accent**: Color for interactive elements like links and button backgrounds 61 + - **accentForeground**: Text color used on accent-colored backgrounds (ex: button text) 62 + 63 + ## Accessibility 64 + 65 + When defining theme colors, ensure sufficient contrast ratios: 66 + 67 + - **Normal text** (foreground/background): Minimum contrast ratio of 4.5:1 68 + - **Large text** (18pt+): Minimum contrast ratio of 3:1 69 + - **Interactive elements** (accent/accentForeground): Minimum contrast ratio of 4.5:1 70 + 71 + Test color combinations to ensure readability across different devices and lighting conditions. 72 + 73 + ## Usage in Publications 74 + 75 + Include the basic theme in your publication record: 76 + 77 + ```json 78 + { 79 + "$type": "site.standard.publication", 80 + "url": "https://myblog.com", 81 + "name": "My Blog", 82 + "basicTheme": { 83 + "$type": "site.standard.theme.basic", 84 + "background": { 85 + "$type": "site.standard.theme.color#rgb", 86 + "r": 255, 87 + "g": 255, 88 + "b": 255 89 + }, 90 + "foreground": { 91 + "$type": "site.standard.theme.color#rgb", 92 + "r": 31, 93 + "g": 41, 94 + "b": 55 95 + }, 96 + "accent": { 97 + "$type": "site.standard.theme.color#rgb", 98 + "r": 59, 99 + "g": 130, 100 + "b": 246 101 + }, 102 + "accentForeground": { 103 + "$type": "site.standard.theme.color#rgb", 104 + "r": 255, 105 + "g": 255, 106 + "b": 255 107 + } 108 + } 109 + } 110 + ``` 111 + 112 + ### Converting from Hex to RGB 113 + 114 + Convert hex color codes to RGB objects: 115 + 116 + ```typescript 117 + function hexToRgb(hex: string): { r: number; g: number; b: number } { 118 + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex) 119 + return result ? { 120 + r: parseInt(result[1], 16), 121 + g: parseInt(result[2], 16), 122 + b: parseInt(result[3], 16) 123 + } : { r: 0, g: 0, b: 0 } 124 + } 125 + 126 + // Example: Convert #3B82F6 to { r: 59, g: 130, b: 246 } 127 + const accentColor = hexToRgb('#3B82F6') 128 + ``` 129 + 130 + ## Platform Implementation 131 + 132 + ### Rendering Content 133 + 134 + Platforms should: 135 + 1. Read the `basicTheme` from the publication record 136 + 2. Convert RGB values to usable color formats (hex, CSS rgb(), etc.) 137 + 3. Apply theme colors to their UI components 138 + 4. Respect user preferences to override publication themes 139 + 140 + ### Example Implementation 141 + 142 + ```typescript 143 + function rgbToHex(color: { r: number; g: number; b: number }): string { 144 + return `#${color.r.toString(16).padStart(2, '0')}${color.g.toString(16).padStart(2, '0')}${color.b.toString(16).padStart(2, '0')}` 145 + } 146 + 147 + function applyPublicationTheme(theme: BasicTheme) { 148 + document.documentElement.style.setProperty( 149 + '--publication-bg', 150 + rgbToHex(theme.background) 151 + ) 152 + 153 + document.documentElement.style.setProperty( 154 + '--publication-fg', 155 + rgbToHex(theme.foreground) 156 + ) 157 + 158 + document.documentElement.style.setProperty( 159 + '--publication-accent', 160 + rgbToHex(theme.accent) 161 + ) 162 + 163 + document.documentElement.style.setProperty( 164 + '--publication-accent-fg', 165 + rgbToHex(theme.accentForeground) 166 + ) 167 + } 168 + ``` 169 + 170 + ## Best Practices 171 + 172 + 1. **Test accessibility**: Always verify color contrast ratios meet WCAG guidelines 173 + 2. **Consider readability**: Ensure foreground/background combinations are legible 174 + 3. **Test button colors**: Verify accent/accentForeground pairs have sufficient contrast 175 + 4. **Respect user preferences**: Allow users to override publication themes if desired 176 + 5. **Provide all required properties**: All four color properties are required for a valid theme 177 + 178 + ## Related 179 + 180 + - [Publication lexicon](/docs/lexicons/publication) - Publications can include basicTheme 181 + - [Quick Start](/docs/quick-start) - Implementation guide 182 + - [Implementations](/docs/implementations) - See how platforms use theming
+42
content/docs/permissions.mdx
···
··· 1 + import { Table } from '@/app/components/docs' 2 + import { StandardSite } from '@/app/components/docs' 3 + 4 + # Permissions 5 + 6 + <StandardSite /> provides a permission set for applications to access publications, documents, and subscriptions. 7 + 8 + ## Overview 9 + 10 + Applications that interact with <StandardSite /> records on a user's Personal Data Server (PDS) must request appropriate permissions. Our permission set defines which collections an application can read from and write to. 11 + 12 + ## Full <StandardSite /> Access 13 + 14 + The `site.standard.authFull` permission set provides complete access to all <StandardSite /> features. 15 + 16 + ### Requesting Permissions 17 + 18 + Include `site.standard.authFull` in the OAuth scope when requesting user authorization: 19 + 20 + ``` 21 + include:site.standard.authFull 22 + ``` 23 + 24 + ### Granted Permissions 25 + 26 + This permission set grants access to the following collections: 27 + 28 + <Table 29 + headers={['Collection', 'Description']} 30 + rows={[ 31 + ['site.standard.publication', 'Read and write access to publication records'], 32 + ['site.standard.document', 'Read and write access to document records'], 33 + ['site.standard.graph.subscription', 'Read and write access to subscription records'], 34 + ]} 35 + /> 36 + 37 + ## Related 38 + 39 + - [Quick Start](/docs/quick-start) - Get started implementing <StandardSite /> 40 + - [Publication lexicon](/docs/lexicons/publication) - Understanding publication records 41 + - [Document lexicon](/docs/lexicons/document) - Understanding document records 42 + - [Subscription lexicon](/docs/lexicons/subscription) - Understanding subscription records
+71 -29
content/docs/quick-start.mdx
··· 1 # Quick Start 2 3 - Get started with Standard.site lexicons in your AT Protocol application. 4 5 - ## Prerequisites 6 7 - - An AT Protocol application or PDS 8 - - Familiarity with AT Protocol lexicons and records 9 10 - ## Basic implementation 11 12 - ### 1. Reference the lexicons 13 14 - Standard.site lexicons are published under the `site.standard` namespace. The main lexicons are: 15 16 - - `site.standard.publication` - Publication metadata 17 - - `site.standard.document` - Document content and metadata 18 - - `site.standard.subscription` - User-publication relationships 19 20 - ### 2. Create a publication 21 22 - ```typescript 23 - const publication = { 24 - $type: 'site.standard.publication', 25 - title: 'My Blog', 26 - description: 'A personal blog about technology', 27 - createdAt: new Date().toISOString(), 28 } 29 ``` 30 31 - ### 3. Create a document 32 33 - ```typescript 34 - const document = { 35 - $type: 'site.standard.document', 36 - publication: 'at://did:plc:.../site.standard.publication/...', 37 - title: 'My First Post', 38 - content: '...', // Your content format 39 - status: 'published', 40 - createdAt: new Date().toISOString(), 41 } 42 ``` 43 44 - ## Next steps 45 46 - - Learn about the [Publication](/docs/lexicons/publication) schema in detail 47 - - Explore [Document](/docs/lexicons/document) fields and options
··· 1 + import { StandardSite } from '@/app/components/docs' 2 + 3 # Quick Start 4 5 + Get started with <StandardSite /> lexicons. 6 7 + ## What You Need 8 9 + - An AT Protocol [Identity](https://atproto.com/guides/identity) 10 + - A website or blog (any domain works) 11 12 + ## Basic Implementation 13 14 + ### 1. Reference the Lexicons 15 16 + <StandardSite /> lexicons are published under the `site.standard` namespace. The main lexicons are: 17 18 + - [`site.standard.publication`](/docs/lexicons/publication) - Publication metadata 19 + - [`site.standard.document`](/docs/lexicons/document) - Document content and metadata 20 + - [`site.standard.graph.subscription`](/docs/lexicons/subscription) - User-publication relationships 21 22 + ### 2. Create a Publication Record 23 24 + A publication requires a `url` and `name`: 25 + 26 + ```json 27 + { 28 + "$type": "site.standard.publication", 29 + "url": "https://myblog.com", 30 + "name": "My Blog", 31 + "description": "A personal blog about technology", 32 + "preferences": { 33 + "showInDiscover": true 34 + } 35 } 36 ``` 37 38 + ### 3. Verify the Publication 39 40 + Add a `.well-known` endpoint to the domain: 41 + 42 + ``` 43 + https://myblog.com/.well-known/site.standard.publication 44 + ``` 45 + 46 + This should return the publication's AT-URI: 47 + 48 + ``` 49 + at://did:plc:yourDID/site.standard.publication/rkey 50 + ``` 51 + 52 + ### 4. Create a Document Record 53 + 54 + Documents require `site`, `title`, and `publishedAt`: 55 + 56 + ```json 57 + { 58 + "$type": "site.standard.document", 59 + "site": "at://did:plc:abc123/site.standard.publication/3lwafzkjqm25s", 60 + "title": "My First Post", 61 + "path": "/posts/my-first-post", 62 + "description": "An introduction to my blog", 63 + "publishedAt": "2024-01-20T14:30:00.000Z", 64 + "tags": ["introduction", "blog"], 65 + "textContent": "Full text content here..." 66 } 67 ``` 68 69 + ### 5. Verify the Document 70 + 71 + Add a `<link>` tag to the document's HTML: 72 + 73 + ```html 74 + <link 75 + rel="site.standard.document" 76 + href="at://did:plc:yourDID/site.standard.document/rkey" 77 + /> 78 + ``` 79 + 80 + ## Extensibility 81 82 + While the minimum required properties are straightforward, additional properties can be added as needed. The lexicons are designed to be starting points, not constraints. 83 + 84 + ## Next Steps 85 + 86 + - Learn about [Verification](/docs/verification) in detail 87 + - Explore the [Publication](/docs/lexicons/publication) schema 88 + - Review [Document](/docs/lexicons/document) properties and options 89 + - Check out [Implementations](/docs/implementations) for tools and examples
+71
content/docs/verification.mdx
···
··· 1 + import { StandardSite } from '@/app/components/docs' 2 + 3 + # Verification 4 + 5 + Since <StandardSite /> records reference domains and web pages, a verifiable way for these resources to point back to their corresponding records is needed. 6 + 7 + ## Overview 8 + 9 + Verification is accomplished using a `.well-known` endpoint for publications, and an HTML `<link>` tag for documents. 10 + 11 + When an application needs to verify a record, it fetches the appropriate verification endpoint and checks that the returned value matches the record's AT-URI. 12 + 13 + A <StandardSite /> record should only be considered "valid" if the author of the material provides an accurate verification endpoint pointing to the record. 14 + 15 + ## Publication Verification 16 + 17 + To verify a publication, add a `.well-known` endpoint to the domain: 18 + 19 + ``` 20 + /.well-known/site.standard.publication 21 + ``` 22 + 23 + The endpoint should return the AT-URI of the publication record: 24 + 25 + ``` 26 + at://did:plc:abc123/site.standard.publication/rkey 27 + ``` 28 + 29 + ### Non-root Publications 30 + 31 + If the publication does not live at the domain root, append the publication path to the endpoint: 32 + 33 + ``` 34 + /.well-known/site.standard.publication/path/to/publication 35 + ``` 36 + 37 + ## Document Verification 38 + 39 + To verify an individual document, include a `<link>` tag in the document's `<head>` that references its AT-URI. 40 + 41 + ### HTML Example 42 + 43 + ```html 44 + <link 45 + rel="site.standard.document" 46 + href="at://did:plc:xyz789/site.standard.document/rkey" 47 + /> 48 + ``` 49 + 50 + This confirms the association between the rendered document and its `site.standard.document` record. 51 + 52 + ## Verification Flow 53 + 54 + 1. An application discovers a <StandardSite /> record 55 + 2. The record contains a `url` (for publications) or `site` + `path` (for documents) 56 + 3. The application fetches the verification endpoint from that URL 57 + 4. The application checks if the returned AT-URI matches the record 58 + 5. If they match, the record is verified 59 + 60 + ## Best Practices 61 + 62 + - Always implement verification for production records 63 + - Use HTTPS for all publication and document URLs 64 + - Keep AT-URIs consistent across records and verification endpoints 65 + - Update verification endpoints when migrating records to a new DID 66 + 67 + ## Related 68 + 69 + - [Publication lexicon](/docs/lexicons/publication) - Understanding publication records 70 + - [Document lexicon](/docs/lexicons/document) - Understanding document records 71 + - [Quick Start](/docs/quick-start) - Implementation guide
+5 -12
mdx-components.tsx
··· 1 import type { MDXComponents } from 'mdx/types' 2 3 export function useMDXComponents(components: MDXComponents): MDXComponents { 4 return { 5 h1: ({ children }) => ( 6 - <h1 className="font-display font-semibold text-3xl sm:text-4xl leading-tight tracking-tighter text-base-content mb-8"> 7 - {children} 8 - </h1> 9 ), 10 h2: ({ children }) => ( 11 - <h2 className="font-display font-semibold text-2xl sm:text-3xl leading-tight tracking-tighter text-base-content mt-12 mb-4"> 12 - {children} 13 - </h2> 14 ), 15 h3: ({ children }) => ( 16 - <h3 className="font-display font-semibold text-xl sm:text-2xl leading-tight tracking-tight text-base-content mt-8 mb-3"> 17 - {children} 18 - </h3> 19 ), 20 h4: ({ children }) => ( 21 - <h4 className="font-display font-semibold text-lg sm:text-xl leading-tight tracking-tight text-base-content mt-6 mb-2"> 22 - {children} 23 - </h4> 24 ), 25 p: ({ children }) => ( 26 <p className="text-base sm:text-lg leading-relaxed tracking-tight text-muted mb-4">
··· 1 import type { MDXComponents } from 'mdx/types' 2 + import { ClickableHeading } from '@/app/components/docs/ClickableHeading' 3 4 export function useMDXComponents(components: MDXComponents): MDXComponents { 5 return { 6 h1: ({ children }) => ( 7 + <ClickableHeading level={1}>{children}</ClickableHeading> 8 ), 9 h2: ({ children }) => ( 10 + <ClickableHeading level={2}>{children}</ClickableHeading> 11 ), 12 h3: ({ children }) => ( 13 + <ClickableHeading level={3}>{children}</ClickableHeading> 14 ), 15 h4: ({ children }) => ( 16 + <ClickableHeading level={4}>{children}</ClickableHeading> 17 ), 18 p: ({ children }) => ( 19 <p className="text-base sm:text-lg leading-relaxed tracking-tight text-muted mb-4">
+2050 -8
package-lock.json
··· 9 "version": "0.1.0", 10 "dependencies": { 11 "@atproto/api": "^0.18.8", 12 "lucide-react": "^0.562.0", 13 "motion": "^12.23.26", 14 "next": "16.1.0", 15 "react": "19.2.3", 16 "react-dom": "19.2.3", 17 - "react-progressive-blur": "^1.0.6" 18 }, 19 "devDependencies": { 20 "@tailwindcss/postcss": "^4", 21 "@types/node": "^20", 22 "@types/react": "^19", 23 "@types/react-dom": "^19", ··· 1104 "@jridgewell/sourcemap-codec": "^1.4.14" 1105 } 1106 }, 1107 "node_modules/@napi-rs/wasm-runtime": { 1108 "version": "0.2.12", 1109 "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", ··· 1131 "license": "MIT", 1132 "dependencies": { 1133 "fast-glob": "3.3.1" 1134 } 1135 }, 1136 "node_modules/@next/swc-darwin-arm64": { ··· 1607 "tslib": "^2.4.0" 1608 } 1609 }, 1610 "node_modules/@types/estree": { 1611 "version": "1.0.8", 1612 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1613 "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1614 - "dev": true, 1615 "license": "MIT" 1616 }, 1617 "node_modules/@types/json-schema": { 1618 "version": "7.0.15", 1619 "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", ··· 1628 "dev": true, 1629 "license": "MIT" 1630 }, 1631 "node_modules/@types/node": { 1632 "version": "20.19.27", 1633 "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", ··· 1642 "version": "19.2.7", 1643 "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", 1644 "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", 1645 - "dev": true, 1646 "license": "MIT", 1647 "dependencies": { 1648 "csstype": "^3.2.2" ··· 1657 "peerDependencies": { 1658 "@types/react": "^19.2.0" 1659 } 1660 }, 1661 "node_modules/@typescript-eslint/eslint-plugin": { 1662 "version": "8.52.0", ··· 1927 "url": "https://opencollective.com/typescript-eslint" 1928 } 1929 }, 1930 "node_modules/@unrs/resolver-binding-android-arm-eabi": { 1931 "version": "1.11.1", 1932 "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", ··· 2200 "version": "8.15.0", 2201 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 2202 "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 2203 - "dev": true, 2204 "license": "MIT", 2205 "bin": { 2206 "acorn": "bin/acorn" ··· 2213 "version": "5.3.2", 2214 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2215 "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2216 - "dev": true, 2217 "license": "MIT", 2218 "peerDependencies": { 2219 "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" ··· 2435 "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", 2436 "dev": true, 2437 "license": "MIT" 2438 }, 2439 "node_modules/async-function": { 2440 "version": "1.0.0", ··· 2488 "node": ">= 0.4" 2489 } 2490 }, 2491 "node_modules/balanced-match": { 2492 "version": "1.0.2", 2493 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 2642 ], 2643 "license": "CC-BY-4.0" 2644 }, 2645 "node_modules/chalk": { 2646 "version": "4.1.2", 2647 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", ··· 2659 "url": "https://github.com/chalk/chalk?sponsor=1" 2660 } 2661 }, 2662 "node_modules/client-only": { 2663 "version": "0.0.1", 2664 "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 2665 "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", 2666 "license": "MIT" 2667 }, 2668 "node_modules/color-convert": { 2669 "version": "2.0.1", 2670 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", ··· 2684 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2685 "dev": true, 2686 "license": "MIT" 2687 }, 2688 "node_modules/concat-map": { 2689 "version": "0.0.1", ··· 2718 "version": "3.2.3", 2719 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", 2720 "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", 2721 - "dev": true, 2722 "license": "MIT" 2723 }, 2724 "node_modules/damerau-levenshtein": { ··· 2786 "version": "4.4.3", 2787 "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 2788 "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 2789 - "dev": true, 2790 "license": "MIT", 2791 "dependencies": { 2792 "ms": "^2.1.3" ··· 2800 } 2801 } 2802 }, 2803 "node_modules/deep-is": { 2804 "version": "0.1.4", 2805 "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", ··· 2843 "url": "https://github.com/sponsors/ljharb" 2844 } 2845 }, 2846 "node_modules/detect-libc": { 2847 "version": "2.1.2", 2848 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", ··· 2851 "license": "Apache-2.0", 2852 "engines": { 2853 "node": ">=8" 2854 } 2855 }, 2856 "node_modules/doctrine": { ··· 3086 "url": "https://github.com/sponsors/ljharb" 3087 } 3088 }, 3089 "node_modules/escalade": { 3090 "version": "3.2.0", 3091 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", ··· 3523 "node": ">=4.0" 3524 } 3525 }, 3526 "node_modules/esutils": { 3527 "version": "2.0.3", 3528 "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", ··· 3532 "engines": { 3533 "node": ">=0.10.0" 3534 } 3535 }, 3536 "node_modules/fast-deep-equal": { 3537 "version": "3.1.3", ··· 3832 "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 3833 } 3834 }, 3835 "node_modules/glob-parent": { 3836 "version": "6.0.2", 3837 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", ··· 3989 "node": ">= 0.4" 3990 } 3991 }, 3992 "node_modules/hermes-estree": { 3993 "version": "0.25.1", 3994 "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", ··· 4043 "node": ">=0.8.19" 4044 } 4045 }, 4046 "node_modules/internal-slot": { 4047 "version": "1.1.0", 4048 "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", ··· 4058 "node": ">= 0.4" 4059 } 4060 }, 4061 "node_modules/is-array-buffer": { 4062 "version": "3.0.5", 4063 "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", ··· 4216 "url": "https://github.com/sponsors/ljharb" 4217 } 4218 }, 4219 "node_modules/is-extglob": { 4220 "version": "2.1.1", 4221 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", ··· 4275 "node": ">=0.10.0" 4276 } 4277 }, 4278 "node_modules/is-map": { 4279 "version": "2.0.3", 4280 "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", ··· 4326 }, 4327 "funding": { 4328 "url": "https://github.com/sponsors/ljharb" 4329 } 4330 }, 4331 "node_modules/is-regex": { ··· 4932 "dev": true, 4933 "license": "MIT" 4934 }, 4935 "node_modules/loose-envify": { 4936 "version": "1.4.0", 4937 "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", ··· 4974 "@jridgewell/sourcemap-codec": "^1.5.5" 4975 } 4976 }, 4977 "node_modules/math-intrinsics": { 4978 "version": "1.1.0", 4979 "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", ··· 4984 "node": ">= 0.4" 4985 } 4986 }, 4987 "node_modules/merge2": { 4988 "version": "1.4.1", 4989 "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", ··· 4994 "node": ">= 8" 4995 } 4996 }, 4997 "node_modules/micromatch": { 4998 "version": "4.0.8", 4999 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", ··· 5076 "version": "2.1.3", 5077 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 5078 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 5079 - "dev": true, 5080 "license": "MIT" 5081 }, 5082 "node_modules/multiformats": { ··· 5418 "node": ">=6" 5419 } 5420 }, 5421 "node_modules/path-exists": { 5422 "version": "4.0.0", 5423 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", ··· 5525 "react-is": "^16.13.1" 5526 } 5527 }, 5528 "node_modules/punycode": { 5529 "version": "2.3.1", 5530 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", ··· 5597 "react-dom": ">=17.0.0" 5598 } 5599 }, 5600 "node_modules/reflect.getprototypeof": { 5601 "version": "1.0.10", 5602 "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", ··· 5641 "url": "https://github.com/sponsors/ljharb" 5642 } 5643 }, 5644 "node_modules/resolve": { 5645 "version": "1.22.11", 5646 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", ··· 5994 "url": "https://github.com/sponsors/ljharb" 5995 } 5996 }, 5997 "node_modules/source-map-js": { 5998 "version": "1.2.1", 5999 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", ··· 6003 "node": ">=0.10.0" 6004 } 6005 }, 6006 "node_modules/stable-hash": { 6007 "version": "0.0.5", 6008 "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", ··· 6137 "url": "https://github.com/sponsors/ljharb" 6138 } 6139 }, 6140 "node_modules/strip-bom": { 6141 "version": "3.0.0", 6142 "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", ··· 6160 "url": "https://github.com/sponsors/sindresorhus" 6161 } 6162 }, 6163 "node_modules/styled-jsx": { 6164 "version": "5.1.6", 6165 "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", ··· 6298 }, 6299 "engines": { 6300 "node": ">=8.0" 6301 } 6302 }, 6303 "node_modules/ts-api-utils": { ··· 6515 "integrity": "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==", 6516 "license": "MIT" 6517 }, 6518 "node_modules/unrs-resolver": { 6519 "version": "1.11.1", 6520 "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", ··· 6589 "license": "BSD-2-Clause", 6590 "dependencies": { 6591 "punycode": "^2.1.0" 6592 } 6593 }, 6594 "node_modules/which": { ··· 6746 }, 6747 "peerDependencies": { 6748 "zod": "^3.25.0 || ^4.0.0" 6749 } 6750 } 6751 }
··· 9 "version": "0.1.0", 10 "dependencies": { 11 "@atproto/api": "^0.18.8", 12 + "@mdx-js/loader": "^3.1.1", 13 + "@mdx-js/react": "^3.1.1", 14 + "@next/mdx": "^16.1.1", 15 "lucide-react": "^0.562.0", 16 "motion": "^12.23.26", 17 "next": "16.1.0", 18 "react": "19.2.3", 19 "react-dom": "19.2.3", 20 + "react-progressive-blur": "^1.0.6", 21 + "rehype-slug": "^6.0.0", 22 + "remark-gfm": "^4.0.1" 23 }, 24 "devDependencies": { 25 "@tailwindcss/postcss": "^4", 26 + "@types/mdx": "^2.0.13", 27 "@types/node": "^20", 28 "@types/react": "^19", 29 "@types/react-dom": "^19", ··· 1110 "@jridgewell/sourcemap-codec": "^1.4.14" 1111 } 1112 }, 1113 + "node_modules/@mdx-js/loader": { 1114 + "version": "3.1.1", 1115 + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-3.1.1.tgz", 1116 + "integrity": "sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ==", 1117 + "license": "MIT", 1118 + "dependencies": { 1119 + "@mdx-js/mdx": "^3.0.0", 1120 + "source-map": "^0.7.0" 1121 + }, 1122 + "funding": { 1123 + "type": "opencollective", 1124 + "url": "https://opencollective.com/unified" 1125 + }, 1126 + "peerDependencies": { 1127 + "webpack": ">=5" 1128 + }, 1129 + "peerDependenciesMeta": { 1130 + "webpack": { 1131 + "optional": true 1132 + } 1133 + } 1134 + }, 1135 + "node_modules/@mdx-js/mdx": { 1136 + "version": "3.1.1", 1137 + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", 1138 + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", 1139 + "license": "MIT", 1140 + "dependencies": { 1141 + "@types/estree": "^1.0.0", 1142 + "@types/estree-jsx": "^1.0.0", 1143 + "@types/hast": "^3.0.0", 1144 + "@types/mdx": "^2.0.0", 1145 + "acorn": "^8.0.0", 1146 + "collapse-white-space": "^2.0.0", 1147 + "devlop": "^1.0.0", 1148 + "estree-util-is-identifier-name": "^3.0.0", 1149 + "estree-util-scope": "^1.0.0", 1150 + "estree-walker": "^3.0.0", 1151 + "hast-util-to-jsx-runtime": "^2.0.0", 1152 + "markdown-extensions": "^2.0.0", 1153 + "recma-build-jsx": "^1.0.0", 1154 + "recma-jsx": "^1.0.0", 1155 + "recma-stringify": "^1.0.0", 1156 + "rehype-recma": "^1.0.0", 1157 + "remark-mdx": "^3.0.0", 1158 + "remark-parse": "^11.0.0", 1159 + "remark-rehype": "^11.0.0", 1160 + "source-map": "^0.7.0", 1161 + "unified": "^11.0.0", 1162 + "unist-util-position-from-estree": "^2.0.0", 1163 + "unist-util-stringify-position": "^4.0.0", 1164 + "unist-util-visit": "^5.0.0", 1165 + "vfile": "^6.0.0" 1166 + }, 1167 + "funding": { 1168 + "type": "opencollective", 1169 + "url": "https://opencollective.com/unified" 1170 + } 1171 + }, 1172 + "node_modules/@mdx-js/react": { 1173 + "version": "3.1.1", 1174 + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", 1175 + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", 1176 + "license": "MIT", 1177 + "dependencies": { 1178 + "@types/mdx": "^2.0.0" 1179 + }, 1180 + "funding": { 1181 + "type": "opencollective", 1182 + "url": "https://opencollective.com/unified" 1183 + }, 1184 + "peerDependencies": { 1185 + "@types/react": ">=16", 1186 + "react": ">=16" 1187 + } 1188 + }, 1189 "node_modules/@napi-rs/wasm-runtime": { 1190 "version": "0.2.12", 1191 "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", ··· 1213 "license": "MIT", 1214 "dependencies": { 1215 "fast-glob": "3.3.1" 1216 + } 1217 + }, 1218 + "node_modules/@next/mdx": { 1219 + "version": "16.1.6", 1220 + "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-16.1.6.tgz", 1221 + "integrity": "sha512-PT5JR4WPPYOls7WD6xEqUVVI9HDY8kY7XLQsNYB2lSZk5eJSXWu3ECtIYmfR0hZpx8Sg7BKZYKi2+u5OTSEx0w==", 1222 + "license": "MIT", 1223 + "dependencies": { 1224 + "source-map": "^0.7.0" 1225 + }, 1226 + "peerDependencies": { 1227 + "@mdx-js/loader": ">=0.15.0", 1228 + "@mdx-js/react": ">=0.15.0" 1229 + }, 1230 + "peerDependenciesMeta": { 1231 + "@mdx-js/loader": { 1232 + "optional": true 1233 + }, 1234 + "@mdx-js/react": { 1235 + "optional": true 1236 + } 1237 } 1238 }, 1239 "node_modules/@next/swc-darwin-arm64": { ··· 1710 "tslib": "^2.4.0" 1711 } 1712 }, 1713 + "node_modules/@types/debug": { 1714 + "version": "4.1.12", 1715 + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", 1716 + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", 1717 + "license": "MIT", 1718 + "dependencies": { 1719 + "@types/ms": "*" 1720 + } 1721 + }, 1722 "node_modules/@types/estree": { 1723 "version": "1.0.8", 1724 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1725 "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1726 "license": "MIT" 1727 }, 1728 + "node_modules/@types/estree-jsx": { 1729 + "version": "1.0.5", 1730 + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", 1731 + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", 1732 + "license": "MIT", 1733 + "dependencies": { 1734 + "@types/estree": "*" 1735 + } 1736 + }, 1737 + "node_modules/@types/hast": { 1738 + "version": "3.0.4", 1739 + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", 1740 + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", 1741 + "license": "MIT", 1742 + "dependencies": { 1743 + "@types/unist": "*" 1744 + } 1745 + }, 1746 "node_modules/@types/json-schema": { 1747 "version": "7.0.15", 1748 "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", ··· 1757 "dev": true, 1758 "license": "MIT" 1759 }, 1760 + "node_modules/@types/mdast": { 1761 + "version": "4.0.4", 1762 + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", 1763 + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", 1764 + "license": "MIT", 1765 + "dependencies": { 1766 + "@types/unist": "*" 1767 + } 1768 + }, 1769 + "node_modules/@types/mdx": { 1770 + "version": "2.0.13", 1771 + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", 1772 + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", 1773 + "license": "MIT" 1774 + }, 1775 + "node_modules/@types/ms": { 1776 + "version": "2.1.0", 1777 + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", 1778 + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", 1779 + "license": "MIT" 1780 + }, 1781 "node_modules/@types/node": { 1782 "version": "20.19.27", 1783 "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", ··· 1792 "version": "19.2.7", 1793 "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", 1794 "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", 1795 "license": "MIT", 1796 "dependencies": { 1797 "csstype": "^3.2.2" ··· 1806 "peerDependencies": { 1807 "@types/react": "^19.2.0" 1808 } 1809 + }, 1810 + "node_modules/@types/unist": { 1811 + "version": "3.0.3", 1812 + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", 1813 + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", 1814 + "license": "MIT" 1815 }, 1816 "node_modules/@typescript-eslint/eslint-plugin": { 1817 "version": "8.52.0", ··· 2082 "url": "https://opencollective.com/typescript-eslint" 2083 } 2084 }, 2085 + "node_modules/@ungap/structured-clone": { 2086 + "version": "1.3.0", 2087 + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", 2088 + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", 2089 + "license": "ISC" 2090 + }, 2091 "node_modules/@unrs/resolver-binding-android-arm-eabi": { 2092 "version": "1.11.1", 2093 "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", ··· 2361 "version": "8.15.0", 2362 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 2363 "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 2364 "license": "MIT", 2365 "bin": { 2366 "acorn": "bin/acorn" ··· 2373 "version": "5.3.2", 2374 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2375 "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2376 "license": "MIT", 2377 "peerDependencies": { 2378 "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" ··· 2594 "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", 2595 "dev": true, 2596 "license": "MIT" 2597 + }, 2598 + "node_modules/astring": { 2599 + "version": "1.9.0", 2600 + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", 2601 + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", 2602 + "license": "MIT", 2603 + "bin": { 2604 + "astring": "bin/astring" 2605 + } 2606 }, 2607 "node_modules/async-function": { 2608 "version": "1.0.0", ··· 2656 "node": ">= 0.4" 2657 } 2658 }, 2659 + "node_modules/bail": { 2660 + "version": "2.0.2", 2661 + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", 2662 + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", 2663 + "license": "MIT", 2664 + "funding": { 2665 + "type": "github", 2666 + "url": "https://github.com/sponsors/wooorm" 2667 + } 2668 + }, 2669 "node_modules/balanced-match": { 2670 "version": "1.0.2", 2671 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 2820 ], 2821 "license": "CC-BY-4.0" 2822 }, 2823 + "node_modules/ccount": { 2824 + "version": "2.0.1", 2825 + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", 2826 + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", 2827 + "license": "MIT", 2828 + "funding": { 2829 + "type": "github", 2830 + "url": "https://github.com/sponsors/wooorm" 2831 + } 2832 + }, 2833 "node_modules/chalk": { 2834 "version": "4.1.2", 2835 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", ··· 2847 "url": "https://github.com/chalk/chalk?sponsor=1" 2848 } 2849 }, 2850 + "node_modules/character-entities": { 2851 + "version": "2.0.2", 2852 + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", 2853 + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", 2854 + "license": "MIT", 2855 + "funding": { 2856 + "type": "github", 2857 + "url": "https://github.com/sponsors/wooorm" 2858 + } 2859 + }, 2860 + "node_modules/character-entities-html4": { 2861 + "version": "2.1.0", 2862 + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", 2863 + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", 2864 + "license": "MIT", 2865 + "funding": { 2866 + "type": "github", 2867 + "url": "https://github.com/sponsors/wooorm" 2868 + } 2869 + }, 2870 + "node_modules/character-entities-legacy": { 2871 + "version": "3.0.0", 2872 + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", 2873 + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", 2874 + "license": "MIT", 2875 + "funding": { 2876 + "type": "github", 2877 + "url": "https://github.com/sponsors/wooorm" 2878 + } 2879 + }, 2880 + "node_modules/character-reference-invalid": { 2881 + "version": "2.0.1", 2882 + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", 2883 + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", 2884 + "license": "MIT", 2885 + "funding": { 2886 + "type": "github", 2887 + "url": "https://github.com/sponsors/wooorm" 2888 + } 2889 + }, 2890 "node_modules/client-only": { 2891 "version": "0.0.1", 2892 "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 2893 "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", 2894 "license": "MIT" 2895 }, 2896 + "node_modules/collapse-white-space": { 2897 + "version": "2.1.0", 2898 + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", 2899 + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", 2900 + "license": "MIT", 2901 + "funding": { 2902 + "type": "github", 2903 + "url": "https://github.com/sponsors/wooorm" 2904 + } 2905 + }, 2906 "node_modules/color-convert": { 2907 "version": "2.0.1", 2908 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", ··· 2922 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2923 "dev": true, 2924 "license": "MIT" 2925 + }, 2926 + "node_modules/comma-separated-tokens": { 2927 + "version": "2.0.3", 2928 + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", 2929 + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", 2930 + "license": "MIT", 2931 + "funding": { 2932 + "type": "github", 2933 + "url": "https://github.com/sponsors/wooorm" 2934 + } 2935 }, 2936 "node_modules/concat-map": { 2937 "version": "0.0.1", ··· 2966 "version": "3.2.3", 2967 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", 2968 "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", 2969 "license": "MIT" 2970 }, 2971 "node_modules/damerau-levenshtein": { ··· 3033 "version": "4.4.3", 3034 "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 3035 "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 3036 "license": "MIT", 3037 "dependencies": { 3038 "ms": "^2.1.3" ··· 3046 } 3047 } 3048 }, 3049 + "node_modules/decode-named-character-reference": { 3050 + "version": "1.3.0", 3051 + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", 3052 + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", 3053 + "license": "MIT", 3054 + "dependencies": { 3055 + "character-entities": "^2.0.0" 3056 + }, 3057 + "funding": { 3058 + "type": "github", 3059 + "url": "https://github.com/sponsors/wooorm" 3060 + } 3061 + }, 3062 "node_modules/deep-is": { 3063 "version": "0.1.4", 3064 "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", ··· 3102 "url": "https://github.com/sponsors/ljharb" 3103 } 3104 }, 3105 + "node_modules/dequal": { 3106 + "version": "2.0.3", 3107 + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 3108 + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 3109 + "license": "MIT", 3110 + "engines": { 3111 + "node": ">=6" 3112 + } 3113 + }, 3114 "node_modules/detect-libc": { 3115 "version": "2.1.2", 3116 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", ··· 3119 "license": "Apache-2.0", 3120 "engines": { 3121 "node": ">=8" 3122 + } 3123 + }, 3124 + "node_modules/devlop": { 3125 + "version": "1.1.0", 3126 + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", 3127 + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", 3128 + "license": "MIT", 3129 + "dependencies": { 3130 + "dequal": "^2.0.0" 3131 + }, 3132 + "funding": { 3133 + "type": "github", 3134 + "url": "https://github.com/sponsors/wooorm" 3135 } 3136 }, 3137 "node_modules/doctrine": { ··· 3367 "url": "https://github.com/sponsors/ljharb" 3368 } 3369 }, 3370 + "node_modules/esast-util-from-estree": { 3371 + "version": "2.0.0", 3372 + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", 3373 + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", 3374 + "license": "MIT", 3375 + "dependencies": { 3376 + "@types/estree-jsx": "^1.0.0", 3377 + "devlop": "^1.0.0", 3378 + "estree-util-visit": "^2.0.0", 3379 + "unist-util-position-from-estree": "^2.0.0" 3380 + }, 3381 + "funding": { 3382 + "type": "opencollective", 3383 + "url": "https://opencollective.com/unified" 3384 + } 3385 + }, 3386 + "node_modules/esast-util-from-js": { 3387 + "version": "2.0.1", 3388 + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", 3389 + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", 3390 + "license": "MIT", 3391 + "dependencies": { 3392 + "@types/estree-jsx": "^1.0.0", 3393 + "acorn": "^8.0.0", 3394 + "esast-util-from-estree": "^2.0.0", 3395 + "vfile-message": "^4.0.0" 3396 + }, 3397 + "funding": { 3398 + "type": "opencollective", 3399 + "url": "https://opencollective.com/unified" 3400 + } 3401 + }, 3402 "node_modules/escalade": { 3403 "version": "3.2.0", 3404 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", ··· 3836 "node": ">=4.0" 3837 } 3838 }, 3839 + "node_modules/estree-util-attach-comments": { 3840 + "version": "3.0.0", 3841 + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", 3842 + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", 3843 + "license": "MIT", 3844 + "dependencies": { 3845 + "@types/estree": "^1.0.0" 3846 + }, 3847 + "funding": { 3848 + "type": "opencollective", 3849 + "url": "https://opencollective.com/unified" 3850 + } 3851 + }, 3852 + "node_modules/estree-util-build-jsx": { 3853 + "version": "3.0.1", 3854 + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", 3855 + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", 3856 + "license": "MIT", 3857 + "dependencies": { 3858 + "@types/estree-jsx": "^1.0.0", 3859 + "devlop": "^1.0.0", 3860 + "estree-util-is-identifier-name": "^3.0.0", 3861 + "estree-walker": "^3.0.0" 3862 + }, 3863 + "funding": { 3864 + "type": "opencollective", 3865 + "url": "https://opencollective.com/unified" 3866 + } 3867 + }, 3868 + "node_modules/estree-util-is-identifier-name": { 3869 + "version": "3.0.0", 3870 + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", 3871 + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", 3872 + "license": "MIT", 3873 + "funding": { 3874 + "type": "opencollective", 3875 + "url": "https://opencollective.com/unified" 3876 + } 3877 + }, 3878 + "node_modules/estree-util-scope": { 3879 + "version": "1.0.0", 3880 + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", 3881 + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", 3882 + "license": "MIT", 3883 + "dependencies": { 3884 + "@types/estree": "^1.0.0", 3885 + "devlop": "^1.0.0" 3886 + }, 3887 + "funding": { 3888 + "type": "opencollective", 3889 + "url": "https://opencollective.com/unified" 3890 + } 3891 + }, 3892 + "node_modules/estree-util-to-js": { 3893 + "version": "2.0.0", 3894 + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", 3895 + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", 3896 + "license": "MIT", 3897 + "dependencies": { 3898 + "@types/estree-jsx": "^1.0.0", 3899 + "astring": "^1.8.0", 3900 + "source-map": "^0.7.0" 3901 + }, 3902 + "funding": { 3903 + "type": "opencollective", 3904 + "url": "https://opencollective.com/unified" 3905 + } 3906 + }, 3907 + "node_modules/estree-util-visit": { 3908 + "version": "2.0.0", 3909 + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", 3910 + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", 3911 + "license": "MIT", 3912 + "dependencies": { 3913 + "@types/estree-jsx": "^1.0.0", 3914 + "@types/unist": "^3.0.0" 3915 + }, 3916 + "funding": { 3917 + "type": "opencollective", 3918 + "url": "https://opencollective.com/unified" 3919 + } 3920 + }, 3921 + "node_modules/estree-walker": { 3922 + "version": "3.0.3", 3923 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 3924 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 3925 + "license": "MIT", 3926 + "dependencies": { 3927 + "@types/estree": "^1.0.0" 3928 + } 3929 + }, 3930 "node_modules/esutils": { 3931 "version": "2.0.3", 3932 "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", ··· 3936 "engines": { 3937 "node": ">=0.10.0" 3938 } 3939 + }, 3940 + "node_modules/extend": { 3941 + "version": "3.0.2", 3942 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 3943 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 3944 + "license": "MIT" 3945 }, 3946 "node_modules/fast-deep-equal": { 3947 "version": "3.1.3", ··· 4242 "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 4243 } 4244 }, 4245 + "node_modules/github-slugger": { 4246 + "version": "2.0.0", 4247 + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", 4248 + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", 4249 + "license": "ISC" 4250 + }, 4251 "node_modules/glob-parent": { 4252 "version": "6.0.2", 4253 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", ··· 4405 "node": ">= 0.4" 4406 } 4407 }, 4408 + "node_modules/hast-util-heading-rank": { 4409 + "version": "3.0.0", 4410 + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", 4411 + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", 4412 + "license": "MIT", 4413 + "dependencies": { 4414 + "@types/hast": "^3.0.0" 4415 + }, 4416 + "funding": { 4417 + "type": "opencollective", 4418 + "url": "https://opencollective.com/unified" 4419 + } 4420 + }, 4421 + "node_modules/hast-util-to-estree": { 4422 + "version": "3.1.3", 4423 + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", 4424 + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", 4425 + "license": "MIT", 4426 + "dependencies": { 4427 + "@types/estree": "^1.0.0", 4428 + "@types/estree-jsx": "^1.0.0", 4429 + "@types/hast": "^3.0.0", 4430 + "comma-separated-tokens": "^2.0.0", 4431 + "devlop": "^1.0.0", 4432 + "estree-util-attach-comments": "^3.0.0", 4433 + "estree-util-is-identifier-name": "^3.0.0", 4434 + "hast-util-whitespace": "^3.0.0", 4435 + "mdast-util-mdx-expression": "^2.0.0", 4436 + "mdast-util-mdx-jsx": "^3.0.0", 4437 + "mdast-util-mdxjs-esm": "^2.0.0", 4438 + "property-information": "^7.0.0", 4439 + "space-separated-tokens": "^2.0.0", 4440 + "style-to-js": "^1.0.0", 4441 + "unist-util-position": "^5.0.0", 4442 + "zwitch": "^2.0.0" 4443 + }, 4444 + "funding": { 4445 + "type": "opencollective", 4446 + "url": "https://opencollective.com/unified" 4447 + } 4448 + }, 4449 + "node_modules/hast-util-to-jsx-runtime": { 4450 + "version": "2.3.6", 4451 + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", 4452 + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", 4453 + "license": "MIT", 4454 + "dependencies": { 4455 + "@types/estree": "^1.0.0", 4456 + "@types/hast": "^3.0.0", 4457 + "@types/unist": "^3.0.0", 4458 + "comma-separated-tokens": "^2.0.0", 4459 + "devlop": "^1.0.0", 4460 + "estree-util-is-identifier-name": "^3.0.0", 4461 + "hast-util-whitespace": "^3.0.0", 4462 + "mdast-util-mdx-expression": "^2.0.0", 4463 + "mdast-util-mdx-jsx": "^3.0.0", 4464 + "mdast-util-mdxjs-esm": "^2.0.0", 4465 + "property-information": "^7.0.0", 4466 + "space-separated-tokens": "^2.0.0", 4467 + "style-to-js": "^1.0.0", 4468 + "unist-util-position": "^5.0.0", 4469 + "vfile-message": "^4.0.0" 4470 + }, 4471 + "funding": { 4472 + "type": "opencollective", 4473 + "url": "https://opencollective.com/unified" 4474 + } 4475 + }, 4476 + "node_modules/hast-util-to-string": { 4477 + "version": "3.0.1", 4478 + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", 4479 + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", 4480 + "license": "MIT", 4481 + "dependencies": { 4482 + "@types/hast": "^3.0.0" 4483 + }, 4484 + "funding": { 4485 + "type": "opencollective", 4486 + "url": "https://opencollective.com/unified" 4487 + } 4488 + }, 4489 + "node_modules/hast-util-whitespace": { 4490 + "version": "3.0.0", 4491 + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", 4492 + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", 4493 + "license": "MIT", 4494 + "dependencies": { 4495 + "@types/hast": "^3.0.0" 4496 + }, 4497 + "funding": { 4498 + "type": "opencollective", 4499 + "url": "https://opencollective.com/unified" 4500 + } 4501 + }, 4502 "node_modules/hermes-estree": { 4503 "version": "0.25.1", 4504 "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", ··· 4553 "node": ">=0.8.19" 4554 } 4555 }, 4556 + "node_modules/inline-style-parser": { 4557 + "version": "0.2.7", 4558 + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", 4559 + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", 4560 + "license": "MIT" 4561 + }, 4562 "node_modules/internal-slot": { 4563 "version": "1.1.0", 4564 "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", ··· 4574 "node": ">= 0.4" 4575 } 4576 }, 4577 + "node_modules/is-alphabetical": { 4578 + "version": "2.0.1", 4579 + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", 4580 + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", 4581 + "license": "MIT", 4582 + "funding": { 4583 + "type": "github", 4584 + "url": "https://github.com/sponsors/wooorm" 4585 + } 4586 + }, 4587 + "node_modules/is-alphanumerical": { 4588 + "version": "2.0.1", 4589 + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", 4590 + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", 4591 + "license": "MIT", 4592 + "dependencies": { 4593 + "is-alphabetical": "^2.0.0", 4594 + "is-decimal": "^2.0.0" 4595 + }, 4596 + "funding": { 4597 + "type": "github", 4598 + "url": "https://github.com/sponsors/wooorm" 4599 + } 4600 + }, 4601 "node_modules/is-array-buffer": { 4602 "version": "3.0.5", 4603 "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", ··· 4756 "url": "https://github.com/sponsors/ljharb" 4757 } 4758 }, 4759 + "node_modules/is-decimal": { 4760 + "version": "2.0.1", 4761 + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", 4762 + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", 4763 + "license": "MIT", 4764 + "funding": { 4765 + "type": "github", 4766 + "url": "https://github.com/sponsors/wooorm" 4767 + } 4768 + }, 4769 "node_modules/is-extglob": { 4770 "version": "2.1.1", 4771 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", ··· 4825 "node": ">=0.10.0" 4826 } 4827 }, 4828 + "node_modules/is-hexadecimal": { 4829 + "version": "2.0.1", 4830 + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", 4831 + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", 4832 + "license": "MIT", 4833 + "funding": { 4834 + "type": "github", 4835 + "url": "https://github.com/sponsors/wooorm" 4836 + } 4837 + }, 4838 "node_modules/is-map": { 4839 "version": "2.0.3", 4840 "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", ··· 4886 }, 4887 "funding": { 4888 "url": "https://github.com/sponsors/ljharb" 4889 + } 4890 + }, 4891 + "node_modules/is-plain-obj": { 4892 + "version": "4.1.0", 4893 + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", 4894 + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", 4895 + "license": "MIT", 4896 + "engines": { 4897 + "node": ">=12" 4898 + }, 4899 + "funding": { 4900 + "url": "https://github.com/sponsors/sindresorhus" 4901 } 4902 }, 4903 "node_modules/is-regex": { ··· 5504 "dev": true, 5505 "license": "MIT" 5506 }, 5507 + "node_modules/longest-streak": { 5508 + "version": "3.1.0", 5509 + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", 5510 + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", 5511 + "license": "MIT", 5512 + "funding": { 5513 + "type": "github", 5514 + "url": "https://github.com/sponsors/wooorm" 5515 + } 5516 + }, 5517 "node_modules/loose-envify": { 5518 "version": "1.4.0", 5519 "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", ··· 5556 "@jridgewell/sourcemap-codec": "^1.5.5" 5557 } 5558 }, 5559 + "node_modules/markdown-extensions": { 5560 + "version": "2.0.0", 5561 + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", 5562 + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", 5563 + "license": "MIT", 5564 + "engines": { 5565 + "node": ">=16" 5566 + }, 5567 + "funding": { 5568 + "url": "https://github.com/sponsors/sindresorhus" 5569 + } 5570 + }, 5571 + "node_modules/markdown-table": { 5572 + "version": "3.0.4", 5573 + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", 5574 + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", 5575 + "license": "MIT", 5576 + "funding": { 5577 + "type": "github", 5578 + "url": "https://github.com/sponsors/wooorm" 5579 + } 5580 + }, 5581 "node_modules/math-intrinsics": { 5582 "version": "1.1.0", 5583 "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", ··· 5588 "node": ">= 0.4" 5589 } 5590 }, 5591 + "node_modules/mdast-util-find-and-replace": { 5592 + "version": "3.0.2", 5593 + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", 5594 + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", 5595 + "license": "MIT", 5596 + "dependencies": { 5597 + "@types/mdast": "^4.0.0", 5598 + "escape-string-regexp": "^5.0.0", 5599 + "unist-util-is": "^6.0.0", 5600 + "unist-util-visit-parents": "^6.0.0" 5601 + }, 5602 + "funding": { 5603 + "type": "opencollective", 5604 + "url": "https://opencollective.com/unified" 5605 + } 5606 + }, 5607 + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { 5608 + "version": "5.0.0", 5609 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 5610 + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 5611 + "license": "MIT", 5612 + "engines": { 5613 + "node": ">=12" 5614 + }, 5615 + "funding": { 5616 + "url": "https://github.com/sponsors/sindresorhus" 5617 + } 5618 + }, 5619 + "node_modules/mdast-util-from-markdown": { 5620 + "version": "2.0.2", 5621 + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", 5622 + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", 5623 + "license": "MIT", 5624 + "dependencies": { 5625 + "@types/mdast": "^4.0.0", 5626 + "@types/unist": "^3.0.0", 5627 + "decode-named-character-reference": "^1.0.0", 5628 + "devlop": "^1.0.0", 5629 + "mdast-util-to-string": "^4.0.0", 5630 + "micromark": "^4.0.0", 5631 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 5632 + "micromark-util-decode-string": "^2.0.0", 5633 + "micromark-util-normalize-identifier": "^2.0.0", 5634 + "micromark-util-symbol": "^2.0.0", 5635 + "micromark-util-types": "^2.0.0", 5636 + "unist-util-stringify-position": "^4.0.0" 5637 + }, 5638 + "funding": { 5639 + "type": "opencollective", 5640 + "url": "https://opencollective.com/unified" 5641 + } 5642 + }, 5643 + "node_modules/mdast-util-gfm": { 5644 + "version": "3.1.0", 5645 + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", 5646 + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", 5647 + "license": "MIT", 5648 + "dependencies": { 5649 + "mdast-util-from-markdown": "^2.0.0", 5650 + "mdast-util-gfm-autolink-literal": "^2.0.0", 5651 + "mdast-util-gfm-footnote": "^2.0.0", 5652 + "mdast-util-gfm-strikethrough": "^2.0.0", 5653 + "mdast-util-gfm-table": "^2.0.0", 5654 + "mdast-util-gfm-task-list-item": "^2.0.0", 5655 + "mdast-util-to-markdown": "^2.0.0" 5656 + }, 5657 + "funding": { 5658 + "type": "opencollective", 5659 + "url": "https://opencollective.com/unified" 5660 + } 5661 + }, 5662 + "node_modules/mdast-util-gfm-autolink-literal": { 5663 + "version": "2.0.1", 5664 + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", 5665 + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", 5666 + "license": "MIT", 5667 + "dependencies": { 5668 + "@types/mdast": "^4.0.0", 5669 + "ccount": "^2.0.0", 5670 + "devlop": "^1.0.0", 5671 + "mdast-util-find-and-replace": "^3.0.0", 5672 + "micromark-util-character": "^2.0.0" 5673 + }, 5674 + "funding": { 5675 + "type": "opencollective", 5676 + "url": "https://opencollective.com/unified" 5677 + } 5678 + }, 5679 + "node_modules/mdast-util-gfm-footnote": { 5680 + "version": "2.1.0", 5681 + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", 5682 + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", 5683 + "license": "MIT", 5684 + "dependencies": { 5685 + "@types/mdast": "^4.0.0", 5686 + "devlop": "^1.1.0", 5687 + "mdast-util-from-markdown": "^2.0.0", 5688 + "mdast-util-to-markdown": "^2.0.0", 5689 + "micromark-util-normalize-identifier": "^2.0.0" 5690 + }, 5691 + "funding": { 5692 + "type": "opencollective", 5693 + "url": "https://opencollective.com/unified" 5694 + } 5695 + }, 5696 + "node_modules/mdast-util-gfm-strikethrough": { 5697 + "version": "2.0.0", 5698 + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", 5699 + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", 5700 + "license": "MIT", 5701 + "dependencies": { 5702 + "@types/mdast": "^4.0.0", 5703 + "mdast-util-from-markdown": "^2.0.0", 5704 + "mdast-util-to-markdown": "^2.0.0" 5705 + }, 5706 + "funding": { 5707 + "type": "opencollective", 5708 + "url": "https://opencollective.com/unified" 5709 + } 5710 + }, 5711 + "node_modules/mdast-util-gfm-table": { 5712 + "version": "2.0.0", 5713 + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", 5714 + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", 5715 + "license": "MIT", 5716 + "dependencies": { 5717 + "@types/mdast": "^4.0.0", 5718 + "devlop": "^1.0.0", 5719 + "markdown-table": "^3.0.0", 5720 + "mdast-util-from-markdown": "^2.0.0", 5721 + "mdast-util-to-markdown": "^2.0.0" 5722 + }, 5723 + "funding": { 5724 + "type": "opencollective", 5725 + "url": "https://opencollective.com/unified" 5726 + } 5727 + }, 5728 + "node_modules/mdast-util-gfm-task-list-item": { 5729 + "version": "2.0.0", 5730 + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", 5731 + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", 5732 + "license": "MIT", 5733 + "dependencies": { 5734 + "@types/mdast": "^4.0.0", 5735 + "devlop": "^1.0.0", 5736 + "mdast-util-from-markdown": "^2.0.0", 5737 + "mdast-util-to-markdown": "^2.0.0" 5738 + }, 5739 + "funding": { 5740 + "type": "opencollective", 5741 + "url": "https://opencollective.com/unified" 5742 + } 5743 + }, 5744 + "node_modules/mdast-util-mdx": { 5745 + "version": "3.0.0", 5746 + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", 5747 + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", 5748 + "license": "MIT", 5749 + "dependencies": { 5750 + "mdast-util-from-markdown": "^2.0.0", 5751 + "mdast-util-mdx-expression": "^2.0.0", 5752 + "mdast-util-mdx-jsx": "^3.0.0", 5753 + "mdast-util-mdxjs-esm": "^2.0.0", 5754 + "mdast-util-to-markdown": "^2.0.0" 5755 + }, 5756 + "funding": { 5757 + "type": "opencollective", 5758 + "url": "https://opencollective.com/unified" 5759 + } 5760 + }, 5761 + "node_modules/mdast-util-mdx-expression": { 5762 + "version": "2.0.1", 5763 + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", 5764 + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", 5765 + "license": "MIT", 5766 + "dependencies": { 5767 + "@types/estree-jsx": "^1.0.0", 5768 + "@types/hast": "^3.0.0", 5769 + "@types/mdast": "^4.0.0", 5770 + "devlop": "^1.0.0", 5771 + "mdast-util-from-markdown": "^2.0.0", 5772 + "mdast-util-to-markdown": "^2.0.0" 5773 + }, 5774 + "funding": { 5775 + "type": "opencollective", 5776 + "url": "https://opencollective.com/unified" 5777 + } 5778 + }, 5779 + "node_modules/mdast-util-mdx-jsx": { 5780 + "version": "3.2.0", 5781 + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", 5782 + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", 5783 + "license": "MIT", 5784 + "dependencies": { 5785 + "@types/estree-jsx": "^1.0.0", 5786 + "@types/hast": "^3.0.0", 5787 + "@types/mdast": "^4.0.0", 5788 + "@types/unist": "^3.0.0", 5789 + "ccount": "^2.0.0", 5790 + "devlop": "^1.1.0", 5791 + "mdast-util-from-markdown": "^2.0.0", 5792 + "mdast-util-to-markdown": "^2.0.0", 5793 + "parse-entities": "^4.0.0", 5794 + "stringify-entities": "^4.0.0", 5795 + "unist-util-stringify-position": "^4.0.0", 5796 + "vfile-message": "^4.0.0" 5797 + }, 5798 + "funding": { 5799 + "type": "opencollective", 5800 + "url": "https://opencollective.com/unified" 5801 + } 5802 + }, 5803 + "node_modules/mdast-util-mdxjs-esm": { 5804 + "version": "2.0.1", 5805 + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", 5806 + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", 5807 + "license": "MIT", 5808 + "dependencies": { 5809 + "@types/estree-jsx": "^1.0.0", 5810 + "@types/hast": "^3.0.0", 5811 + "@types/mdast": "^4.0.0", 5812 + "devlop": "^1.0.0", 5813 + "mdast-util-from-markdown": "^2.0.0", 5814 + "mdast-util-to-markdown": "^2.0.0" 5815 + }, 5816 + "funding": { 5817 + "type": "opencollective", 5818 + "url": "https://opencollective.com/unified" 5819 + } 5820 + }, 5821 + "node_modules/mdast-util-phrasing": { 5822 + "version": "4.1.0", 5823 + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", 5824 + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", 5825 + "license": "MIT", 5826 + "dependencies": { 5827 + "@types/mdast": "^4.0.0", 5828 + "unist-util-is": "^6.0.0" 5829 + }, 5830 + "funding": { 5831 + "type": "opencollective", 5832 + "url": "https://opencollective.com/unified" 5833 + } 5834 + }, 5835 + "node_modules/mdast-util-to-hast": { 5836 + "version": "13.2.1", 5837 + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", 5838 + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", 5839 + "license": "MIT", 5840 + "dependencies": { 5841 + "@types/hast": "^3.0.0", 5842 + "@types/mdast": "^4.0.0", 5843 + "@ungap/structured-clone": "^1.0.0", 5844 + "devlop": "^1.0.0", 5845 + "micromark-util-sanitize-uri": "^2.0.0", 5846 + "trim-lines": "^3.0.0", 5847 + "unist-util-position": "^5.0.0", 5848 + "unist-util-visit": "^5.0.0", 5849 + "vfile": "^6.0.0" 5850 + }, 5851 + "funding": { 5852 + "type": "opencollective", 5853 + "url": "https://opencollective.com/unified" 5854 + } 5855 + }, 5856 + "node_modules/mdast-util-to-markdown": { 5857 + "version": "2.1.2", 5858 + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", 5859 + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", 5860 + "license": "MIT", 5861 + "dependencies": { 5862 + "@types/mdast": "^4.0.0", 5863 + "@types/unist": "^3.0.0", 5864 + "longest-streak": "^3.0.0", 5865 + "mdast-util-phrasing": "^4.0.0", 5866 + "mdast-util-to-string": "^4.0.0", 5867 + "micromark-util-classify-character": "^2.0.0", 5868 + "micromark-util-decode-string": "^2.0.0", 5869 + "unist-util-visit": "^5.0.0", 5870 + "zwitch": "^2.0.0" 5871 + }, 5872 + "funding": { 5873 + "type": "opencollective", 5874 + "url": "https://opencollective.com/unified" 5875 + } 5876 + }, 5877 + "node_modules/mdast-util-to-string": { 5878 + "version": "4.0.0", 5879 + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", 5880 + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", 5881 + "license": "MIT", 5882 + "dependencies": { 5883 + "@types/mdast": "^4.0.0" 5884 + }, 5885 + "funding": { 5886 + "type": "opencollective", 5887 + "url": "https://opencollective.com/unified" 5888 + } 5889 + }, 5890 "node_modules/merge2": { 5891 "version": "1.4.1", 5892 "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", ··· 5897 "node": ">= 8" 5898 } 5899 }, 5900 + "node_modules/micromark": { 5901 + "version": "4.0.2", 5902 + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", 5903 + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", 5904 + "funding": [ 5905 + { 5906 + "type": "GitHub Sponsors", 5907 + "url": "https://github.com/sponsors/unifiedjs" 5908 + }, 5909 + { 5910 + "type": "OpenCollective", 5911 + "url": "https://opencollective.com/unified" 5912 + } 5913 + ], 5914 + "license": "MIT", 5915 + "dependencies": { 5916 + "@types/debug": "^4.0.0", 5917 + "debug": "^4.0.0", 5918 + "decode-named-character-reference": "^1.0.0", 5919 + "devlop": "^1.0.0", 5920 + "micromark-core-commonmark": "^2.0.0", 5921 + "micromark-factory-space": "^2.0.0", 5922 + "micromark-util-character": "^2.0.0", 5923 + "micromark-util-chunked": "^2.0.0", 5924 + "micromark-util-combine-extensions": "^2.0.0", 5925 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 5926 + "micromark-util-encode": "^2.0.0", 5927 + "micromark-util-normalize-identifier": "^2.0.0", 5928 + "micromark-util-resolve-all": "^2.0.0", 5929 + "micromark-util-sanitize-uri": "^2.0.0", 5930 + "micromark-util-subtokenize": "^2.0.0", 5931 + "micromark-util-symbol": "^2.0.0", 5932 + "micromark-util-types": "^2.0.0" 5933 + } 5934 + }, 5935 + "node_modules/micromark-core-commonmark": { 5936 + "version": "2.0.3", 5937 + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", 5938 + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", 5939 + "funding": [ 5940 + { 5941 + "type": "GitHub Sponsors", 5942 + "url": "https://github.com/sponsors/unifiedjs" 5943 + }, 5944 + { 5945 + "type": "OpenCollective", 5946 + "url": "https://opencollective.com/unified" 5947 + } 5948 + ], 5949 + "license": "MIT", 5950 + "dependencies": { 5951 + "decode-named-character-reference": "^1.0.0", 5952 + "devlop": "^1.0.0", 5953 + "micromark-factory-destination": "^2.0.0", 5954 + "micromark-factory-label": "^2.0.0", 5955 + "micromark-factory-space": "^2.0.0", 5956 + "micromark-factory-title": "^2.0.0", 5957 + "micromark-factory-whitespace": "^2.0.0", 5958 + "micromark-util-character": "^2.0.0", 5959 + "micromark-util-chunked": "^2.0.0", 5960 + "micromark-util-classify-character": "^2.0.0", 5961 + "micromark-util-html-tag-name": "^2.0.0", 5962 + "micromark-util-normalize-identifier": "^2.0.0", 5963 + "micromark-util-resolve-all": "^2.0.0", 5964 + "micromark-util-subtokenize": "^2.0.0", 5965 + "micromark-util-symbol": "^2.0.0", 5966 + "micromark-util-types": "^2.0.0" 5967 + } 5968 + }, 5969 + "node_modules/micromark-extension-gfm": { 5970 + "version": "3.0.0", 5971 + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", 5972 + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", 5973 + "license": "MIT", 5974 + "dependencies": { 5975 + "micromark-extension-gfm-autolink-literal": "^2.0.0", 5976 + "micromark-extension-gfm-footnote": "^2.0.0", 5977 + "micromark-extension-gfm-strikethrough": "^2.0.0", 5978 + "micromark-extension-gfm-table": "^2.0.0", 5979 + "micromark-extension-gfm-tagfilter": "^2.0.0", 5980 + "micromark-extension-gfm-task-list-item": "^2.0.0", 5981 + "micromark-util-combine-extensions": "^2.0.0", 5982 + "micromark-util-types": "^2.0.0" 5983 + }, 5984 + "funding": { 5985 + "type": "opencollective", 5986 + "url": "https://opencollective.com/unified" 5987 + } 5988 + }, 5989 + "node_modules/micromark-extension-gfm-autolink-literal": { 5990 + "version": "2.1.0", 5991 + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", 5992 + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", 5993 + "license": "MIT", 5994 + "dependencies": { 5995 + "micromark-util-character": "^2.0.0", 5996 + "micromark-util-sanitize-uri": "^2.0.0", 5997 + "micromark-util-symbol": "^2.0.0", 5998 + "micromark-util-types": "^2.0.0" 5999 + }, 6000 + "funding": { 6001 + "type": "opencollective", 6002 + "url": "https://opencollective.com/unified" 6003 + } 6004 + }, 6005 + "node_modules/micromark-extension-gfm-footnote": { 6006 + "version": "2.1.0", 6007 + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", 6008 + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", 6009 + "license": "MIT", 6010 + "dependencies": { 6011 + "devlop": "^1.0.0", 6012 + "micromark-core-commonmark": "^2.0.0", 6013 + "micromark-factory-space": "^2.0.0", 6014 + "micromark-util-character": "^2.0.0", 6015 + "micromark-util-normalize-identifier": "^2.0.0", 6016 + "micromark-util-sanitize-uri": "^2.0.0", 6017 + "micromark-util-symbol": "^2.0.0", 6018 + "micromark-util-types": "^2.0.0" 6019 + }, 6020 + "funding": { 6021 + "type": "opencollective", 6022 + "url": "https://opencollective.com/unified" 6023 + } 6024 + }, 6025 + "node_modules/micromark-extension-gfm-strikethrough": { 6026 + "version": "2.1.0", 6027 + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", 6028 + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", 6029 + "license": "MIT", 6030 + "dependencies": { 6031 + "devlop": "^1.0.0", 6032 + "micromark-util-chunked": "^2.0.0", 6033 + "micromark-util-classify-character": "^2.0.0", 6034 + "micromark-util-resolve-all": "^2.0.0", 6035 + "micromark-util-symbol": "^2.0.0", 6036 + "micromark-util-types": "^2.0.0" 6037 + }, 6038 + "funding": { 6039 + "type": "opencollective", 6040 + "url": "https://opencollective.com/unified" 6041 + } 6042 + }, 6043 + "node_modules/micromark-extension-gfm-table": { 6044 + "version": "2.1.1", 6045 + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", 6046 + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", 6047 + "license": "MIT", 6048 + "dependencies": { 6049 + "devlop": "^1.0.0", 6050 + "micromark-factory-space": "^2.0.0", 6051 + "micromark-util-character": "^2.0.0", 6052 + "micromark-util-symbol": "^2.0.0", 6053 + "micromark-util-types": "^2.0.0" 6054 + }, 6055 + "funding": { 6056 + "type": "opencollective", 6057 + "url": "https://opencollective.com/unified" 6058 + } 6059 + }, 6060 + "node_modules/micromark-extension-gfm-tagfilter": { 6061 + "version": "2.0.0", 6062 + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", 6063 + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", 6064 + "license": "MIT", 6065 + "dependencies": { 6066 + "micromark-util-types": "^2.0.0" 6067 + }, 6068 + "funding": { 6069 + "type": "opencollective", 6070 + "url": "https://opencollective.com/unified" 6071 + } 6072 + }, 6073 + "node_modules/micromark-extension-gfm-task-list-item": { 6074 + "version": "2.1.0", 6075 + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", 6076 + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", 6077 + "license": "MIT", 6078 + "dependencies": { 6079 + "devlop": "^1.0.0", 6080 + "micromark-factory-space": "^2.0.0", 6081 + "micromark-util-character": "^2.0.0", 6082 + "micromark-util-symbol": "^2.0.0", 6083 + "micromark-util-types": "^2.0.0" 6084 + }, 6085 + "funding": { 6086 + "type": "opencollective", 6087 + "url": "https://opencollective.com/unified" 6088 + } 6089 + }, 6090 + "node_modules/micromark-extension-mdx-expression": { 6091 + "version": "3.0.1", 6092 + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", 6093 + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", 6094 + "funding": [ 6095 + { 6096 + "type": "GitHub Sponsors", 6097 + "url": "https://github.com/sponsors/unifiedjs" 6098 + }, 6099 + { 6100 + "type": "OpenCollective", 6101 + "url": "https://opencollective.com/unified" 6102 + } 6103 + ], 6104 + "license": "MIT", 6105 + "dependencies": { 6106 + "@types/estree": "^1.0.0", 6107 + "devlop": "^1.0.0", 6108 + "micromark-factory-mdx-expression": "^2.0.0", 6109 + "micromark-factory-space": "^2.0.0", 6110 + "micromark-util-character": "^2.0.0", 6111 + "micromark-util-events-to-acorn": "^2.0.0", 6112 + "micromark-util-symbol": "^2.0.0", 6113 + "micromark-util-types": "^2.0.0" 6114 + } 6115 + }, 6116 + "node_modules/micromark-extension-mdx-jsx": { 6117 + "version": "3.0.2", 6118 + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", 6119 + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", 6120 + "license": "MIT", 6121 + "dependencies": { 6122 + "@types/estree": "^1.0.0", 6123 + "devlop": "^1.0.0", 6124 + "estree-util-is-identifier-name": "^3.0.0", 6125 + "micromark-factory-mdx-expression": "^2.0.0", 6126 + "micromark-factory-space": "^2.0.0", 6127 + "micromark-util-character": "^2.0.0", 6128 + "micromark-util-events-to-acorn": "^2.0.0", 6129 + "micromark-util-symbol": "^2.0.0", 6130 + "micromark-util-types": "^2.0.0", 6131 + "vfile-message": "^4.0.0" 6132 + }, 6133 + "funding": { 6134 + "type": "opencollective", 6135 + "url": "https://opencollective.com/unified" 6136 + } 6137 + }, 6138 + "node_modules/micromark-extension-mdx-md": { 6139 + "version": "2.0.0", 6140 + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", 6141 + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", 6142 + "license": "MIT", 6143 + "dependencies": { 6144 + "micromark-util-types": "^2.0.0" 6145 + }, 6146 + "funding": { 6147 + "type": "opencollective", 6148 + "url": "https://opencollective.com/unified" 6149 + } 6150 + }, 6151 + "node_modules/micromark-extension-mdxjs": { 6152 + "version": "3.0.0", 6153 + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", 6154 + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", 6155 + "license": "MIT", 6156 + "dependencies": { 6157 + "acorn": "^8.0.0", 6158 + "acorn-jsx": "^5.0.0", 6159 + "micromark-extension-mdx-expression": "^3.0.0", 6160 + "micromark-extension-mdx-jsx": "^3.0.0", 6161 + "micromark-extension-mdx-md": "^2.0.0", 6162 + "micromark-extension-mdxjs-esm": "^3.0.0", 6163 + "micromark-util-combine-extensions": "^2.0.0", 6164 + "micromark-util-types": "^2.0.0" 6165 + }, 6166 + "funding": { 6167 + "type": "opencollective", 6168 + "url": "https://opencollective.com/unified" 6169 + } 6170 + }, 6171 + "node_modules/micromark-extension-mdxjs-esm": { 6172 + "version": "3.0.0", 6173 + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", 6174 + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", 6175 + "license": "MIT", 6176 + "dependencies": { 6177 + "@types/estree": "^1.0.0", 6178 + "devlop": "^1.0.0", 6179 + "micromark-core-commonmark": "^2.0.0", 6180 + "micromark-util-character": "^2.0.0", 6181 + "micromark-util-events-to-acorn": "^2.0.0", 6182 + "micromark-util-symbol": "^2.0.0", 6183 + "micromark-util-types": "^2.0.0", 6184 + "unist-util-position-from-estree": "^2.0.0", 6185 + "vfile-message": "^4.0.0" 6186 + }, 6187 + "funding": { 6188 + "type": "opencollective", 6189 + "url": "https://opencollective.com/unified" 6190 + } 6191 + }, 6192 + "node_modules/micromark-factory-destination": { 6193 + "version": "2.0.1", 6194 + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", 6195 + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", 6196 + "funding": [ 6197 + { 6198 + "type": "GitHub Sponsors", 6199 + "url": "https://github.com/sponsors/unifiedjs" 6200 + }, 6201 + { 6202 + "type": "OpenCollective", 6203 + "url": "https://opencollective.com/unified" 6204 + } 6205 + ], 6206 + "license": "MIT", 6207 + "dependencies": { 6208 + "micromark-util-character": "^2.0.0", 6209 + "micromark-util-symbol": "^2.0.0", 6210 + "micromark-util-types": "^2.0.0" 6211 + } 6212 + }, 6213 + "node_modules/micromark-factory-label": { 6214 + "version": "2.0.1", 6215 + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", 6216 + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", 6217 + "funding": [ 6218 + { 6219 + "type": "GitHub Sponsors", 6220 + "url": "https://github.com/sponsors/unifiedjs" 6221 + }, 6222 + { 6223 + "type": "OpenCollective", 6224 + "url": "https://opencollective.com/unified" 6225 + } 6226 + ], 6227 + "license": "MIT", 6228 + "dependencies": { 6229 + "devlop": "^1.0.0", 6230 + "micromark-util-character": "^2.0.0", 6231 + "micromark-util-symbol": "^2.0.0", 6232 + "micromark-util-types": "^2.0.0" 6233 + } 6234 + }, 6235 + "node_modules/micromark-factory-mdx-expression": { 6236 + "version": "2.0.3", 6237 + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", 6238 + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", 6239 + "funding": [ 6240 + { 6241 + "type": "GitHub Sponsors", 6242 + "url": "https://github.com/sponsors/unifiedjs" 6243 + }, 6244 + { 6245 + "type": "OpenCollective", 6246 + "url": "https://opencollective.com/unified" 6247 + } 6248 + ], 6249 + "license": "MIT", 6250 + "dependencies": { 6251 + "@types/estree": "^1.0.0", 6252 + "devlop": "^1.0.0", 6253 + "micromark-factory-space": "^2.0.0", 6254 + "micromark-util-character": "^2.0.0", 6255 + "micromark-util-events-to-acorn": "^2.0.0", 6256 + "micromark-util-symbol": "^2.0.0", 6257 + "micromark-util-types": "^2.0.0", 6258 + "unist-util-position-from-estree": "^2.0.0", 6259 + "vfile-message": "^4.0.0" 6260 + } 6261 + }, 6262 + "node_modules/micromark-factory-space": { 6263 + "version": "2.0.1", 6264 + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", 6265 + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", 6266 + "funding": [ 6267 + { 6268 + "type": "GitHub Sponsors", 6269 + "url": "https://github.com/sponsors/unifiedjs" 6270 + }, 6271 + { 6272 + "type": "OpenCollective", 6273 + "url": "https://opencollective.com/unified" 6274 + } 6275 + ], 6276 + "license": "MIT", 6277 + "dependencies": { 6278 + "micromark-util-character": "^2.0.0", 6279 + "micromark-util-types": "^2.0.0" 6280 + } 6281 + }, 6282 + "node_modules/micromark-factory-title": { 6283 + "version": "2.0.1", 6284 + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", 6285 + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", 6286 + "funding": [ 6287 + { 6288 + "type": "GitHub Sponsors", 6289 + "url": "https://github.com/sponsors/unifiedjs" 6290 + }, 6291 + { 6292 + "type": "OpenCollective", 6293 + "url": "https://opencollective.com/unified" 6294 + } 6295 + ], 6296 + "license": "MIT", 6297 + "dependencies": { 6298 + "micromark-factory-space": "^2.0.0", 6299 + "micromark-util-character": "^2.0.0", 6300 + "micromark-util-symbol": "^2.0.0", 6301 + "micromark-util-types": "^2.0.0" 6302 + } 6303 + }, 6304 + "node_modules/micromark-factory-whitespace": { 6305 + "version": "2.0.1", 6306 + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", 6307 + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", 6308 + "funding": [ 6309 + { 6310 + "type": "GitHub Sponsors", 6311 + "url": "https://github.com/sponsors/unifiedjs" 6312 + }, 6313 + { 6314 + "type": "OpenCollective", 6315 + "url": "https://opencollective.com/unified" 6316 + } 6317 + ], 6318 + "license": "MIT", 6319 + "dependencies": { 6320 + "micromark-factory-space": "^2.0.0", 6321 + "micromark-util-character": "^2.0.0", 6322 + "micromark-util-symbol": "^2.0.0", 6323 + "micromark-util-types": "^2.0.0" 6324 + } 6325 + }, 6326 + "node_modules/micromark-util-character": { 6327 + "version": "2.1.1", 6328 + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", 6329 + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", 6330 + "funding": [ 6331 + { 6332 + "type": "GitHub Sponsors", 6333 + "url": "https://github.com/sponsors/unifiedjs" 6334 + }, 6335 + { 6336 + "type": "OpenCollective", 6337 + "url": "https://opencollective.com/unified" 6338 + } 6339 + ], 6340 + "license": "MIT", 6341 + "dependencies": { 6342 + "micromark-util-symbol": "^2.0.0", 6343 + "micromark-util-types": "^2.0.0" 6344 + } 6345 + }, 6346 + "node_modules/micromark-util-chunked": { 6347 + "version": "2.0.1", 6348 + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", 6349 + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", 6350 + "funding": [ 6351 + { 6352 + "type": "GitHub Sponsors", 6353 + "url": "https://github.com/sponsors/unifiedjs" 6354 + }, 6355 + { 6356 + "type": "OpenCollective", 6357 + "url": "https://opencollective.com/unified" 6358 + } 6359 + ], 6360 + "license": "MIT", 6361 + "dependencies": { 6362 + "micromark-util-symbol": "^2.0.0" 6363 + } 6364 + }, 6365 + "node_modules/micromark-util-classify-character": { 6366 + "version": "2.0.1", 6367 + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", 6368 + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", 6369 + "funding": [ 6370 + { 6371 + "type": "GitHub Sponsors", 6372 + "url": "https://github.com/sponsors/unifiedjs" 6373 + }, 6374 + { 6375 + "type": "OpenCollective", 6376 + "url": "https://opencollective.com/unified" 6377 + } 6378 + ], 6379 + "license": "MIT", 6380 + "dependencies": { 6381 + "micromark-util-character": "^2.0.0", 6382 + "micromark-util-symbol": "^2.0.0", 6383 + "micromark-util-types": "^2.0.0" 6384 + } 6385 + }, 6386 + "node_modules/micromark-util-combine-extensions": { 6387 + "version": "2.0.1", 6388 + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", 6389 + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", 6390 + "funding": [ 6391 + { 6392 + "type": "GitHub Sponsors", 6393 + "url": "https://github.com/sponsors/unifiedjs" 6394 + }, 6395 + { 6396 + "type": "OpenCollective", 6397 + "url": "https://opencollective.com/unified" 6398 + } 6399 + ], 6400 + "license": "MIT", 6401 + "dependencies": { 6402 + "micromark-util-chunked": "^2.0.0", 6403 + "micromark-util-types": "^2.0.0" 6404 + } 6405 + }, 6406 + "node_modules/micromark-util-decode-numeric-character-reference": { 6407 + "version": "2.0.2", 6408 + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", 6409 + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", 6410 + "funding": [ 6411 + { 6412 + "type": "GitHub Sponsors", 6413 + "url": "https://github.com/sponsors/unifiedjs" 6414 + }, 6415 + { 6416 + "type": "OpenCollective", 6417 + "url": "https://opencollective.com/unified" 6418 + } 6419 + ], 6420 + "license": "MIT", 6421 + "dependencies": { 6422 + "micromark-util-symbol": "^2.0.0" 6423 + } 6424 + }, 6425 + "node_modules/micromark-util-decode-string": { 6426 + "version": "2.0.1", 6427 + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", 6428 + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", 6429 + "funding": [ 6430 + { 6431 + "type": "GitHub Sponsors", 6432 + "url": "https://github.com/sponsors/unifiedjs" 6433 + }, 6434 + { 6435 + "type": "OpenCollective", 6436 + "url": "https://opencollective.com/unified" 6437 + } 6438 + ], 6439 + "license": "MIT", 6440 + "dependencies": { 6441 + "decode-named-character-reference": "^1.0.0", 6442 + "micromark-util-character": "^2.0.0", 6443 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 6444 + "micromark-util-symbol": "^2.0.0" 6445 + } 6446 + }, 6447 + "node_modules/micromark-util-encode": { 6448 + "version": "2.0.1", 6449 + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", 6450 + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", 6451 + "funding": [ 6452 + { 6453 + "type": "GitHub Sponsors", 6454 + "url": "https://github.com/sponsors/unifiedjs" 6455 + }, 6456 + { 6457 + "type": "OpenCollective", 6458 + "url": "https://opencollective.com/unified" 6459 + } 6460 + ], 6461 + "license": "MIT" 6462 + }, 6463 + "node_modules/micromark-util-events-to-acorn": { 6464 + "version": "2.0.3", 6465 + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", 6466 + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", 6467 + "funding": [ 6468 + { 6469 + "type": "GitHub Sponsors", 6470 + "url": "https://github.com/sponsors/unifiedjs" 6471 + }, 6472 + { 6473 + "type": "OpenCollective", 6474 + "url": "https://opencollective.com/unified" 6475 + } 6476 + ], 6477 + "license": "MIT", 6478 + "dependencies": { 6479 + "@types/estree": "^1.0.0", 6480 + "@types/unist": "^3.0.0", 6481 + "devlop": "^1.0.0", 6482 + "estree-util-visit": "^2.0.0", 6483 + "micromark-util-symbol": "^2.0.0", 6484 + "micromark-util-types": "^2.0.0", 6485 + "vfile-message": "^4.0.0" 6486 + } 6487 + }, 6488 + "node_modules/micromark-util-html-tag-name": { 6489 + "version": "2.0.1", 6490 + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", 6491 + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", 6492 + "funding": [ 6493 + { 6494 + "type": "GitHub Sponsors", 6495 + "url": "https://github.com/sponsors/unifiedjs" 6496 + }, 6497 + { 6498 + "type": "OpenCollective", 6499 + "url": "https://opencollective.com/unified" 6500 + } 6501 + ], 6502 + "license": "MIT" 6503 + }, 6504 + "node_modules/micromark-util-normalize-identifier": { 6505 + "version": "2.0.1", 6506 + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", 6507 + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", 6508 + "funding": [ 6509 + { 6510 + "type": "GitHub Sponsors", 6511 + "url": "https://github.com/sponsors/unifiedjs" 6512 + }, 6513 + { 6514 + "type": "OpenCollective", 6515 + "url": "https://opencollective.com/unified" 6516 + } 6517 + ], 6518 + "license": "MIT", 6519 + "dependencies": { 6520 + "micromark-util-symbol": "^2.0.0" 6521 + } 6522 + }, 6523 + "node_modules/micromark-util-resolve-all": { 6524 + "version": "2.0.1", 6525 + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", 6526 + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", 6527 + "funding": [ 6528 + { 6529 + "type": "GitHub Sponsors", 6530 + "url": "https://github.com/sponsors/unifiedjs" 6531 + }, 6532 + { 6533 + "type": "OpenCollective", 6534 + "url": "https://opencollective.com/unified" 6535 + } 6536 + ], 6537 + "license": "MIT", 6538 + "dependencies": { 6539 + "micromark-util-types": "^2.0.0" 6540 + } 6541 + }, 6542 + "node_modules/micromark-util-sanitize-uri": { 6543 + "version": "2.0.1", 6544 + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", 6545 + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", 6546 + "funding": [ 6547 + { 6548 + "type": "GitHub Sponsors", 6549 + "url": "https://github.com/sponsors/unifiedjs" 6550 + }, 6551 + { 6552 + "type": "OpenCollective", 6553 + "url": "https://opencollective.com/unified" 6554 + } 6555 + ], 6556 + "license": "MIT", 6557 + "dependencies": { 6558 + "micromark-util-character": "^2.0.0", 6559 + "micromark-util-encode": "^2.0.0", 6560 + "micromark-util-symbol": "^2.0.0" 6561 + } 6562 + }, 6563 + "node_modules/micromark-util-subtokenize": { 6564 + "version": "2.1.0", 6565 + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", 6566 + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", 6567 + "funding": [ 6568 + { 6569 + "type": "GitHub Sponsors", 6570 + "url": "https://github.com/sponsors/unifiedjs" 6571 + }, 6572 + { 6573 + "type": "OpenCollective", 6574 + "url": "https://opencollective.com/unified" 6575 + } 6576 + ], 6577 + "license": "MIT", 6578 + "dependencies": { 6579 + "devlop": "^1.0.0", 6580 + "micromark-util-chunked": "^2.0.0", 6581 + "micromark-util-symbol": "^2.0.0", 6582 + "micromark-util-types": "^2.0.0" 6583 + } 6584 + }, 6585 + "node_modules/micromark-util-symbol": { 6586 + "version": "2.0.1", 6587 + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", 6588 + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", 6589 + "funding": [ 6590 + { 6591 + "type": "GitHub Sponsors", 6592 + "url": "https://github.com/sponsors/unifiedjs" 6593 + }, 6594 + { 6595 + "type": "OpenCollective", 6596 + "url": "https://opencollective.com/unified" 6597 + } 6598 + ], 6599 + "license": "MIT" 6600 + }, 6601 + "node_modules/micromark-util-types": { 6602 + "version": "2.0.2", 6603 + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", 6604 + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", 6605 + "funding": [ 6606 + { 6607 + "type": "GitHub Sponsors", 6608 + "url": "https://github.com/sponsors/unifiedjs" 6609 + }, 6610 + { 6611 + "type": "OpenCollective", 6612 + "url": "https://opencollective.com/unified" 6613 + } 6614 + ], 6615 + "license": "MIT" 6616 + }, 6617 "node_modules/micromatch": { 6618 "version": "4.0.8", 6619 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", ··· 6696 "version": "2.1.3", 6697 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 6698 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 6699 "license": "MIT" 6700 }, 6701 "node_modules/multiformats": { ··· 7037 "node": ">=6" 7038 } 7039 }, 7040 + "node_modules/parse-entities": { 7041 + "version": "4.0.2", 7042 + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", 7043 + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", 7044 + "license": "MIT", 7045 + "dependencies": { 7046 + "@types/unist": "^2.0.0", 7047 + "character-entities-legacy": "^3.0.0", 7048 + "character-reference-invalid": "^2.0.0", 7049 + "decode-named-character-reference": "^1.0.0", 7050 + "is-alphanumerical": "^2.0.0", 7051 + "is-decimal": "^2.0.0", 7052 + "is-hexadecimal": "^2.0.0" 7053 + }, 7054 + "funding": { 7055 + "type": "github", 7056 + "url": "https://github.com/sponsors/wooorm" 7057 + } 7058 + }, 7059 + "node_modules/parse-entities/node_modules/@types/unist": { 7060 + "version": "2.0.11", 7061 + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", 7062 + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", 7063 + "license": "MIT" 7064 + }, 7065 "node_modules/path-exists": { 7066 "version": "4.0.0", 7067 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", ··· 7169 "react-is": "^16.13.1" 7170 } 7171 }, 7172 + "node_modules/property-information": { 7173 + "version": "7.1.0", 7174 + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", 7175 + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", 7176 + "license": "MIT", 7177 + "funding": { 7178 + "type": "github", 7179 + "url": "https://github.com/sponsors/wooorm" 7180 + } 7181 + }, 7182 "node_modules/punycode": { 7183 "version": "2.3.1", 7184 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", ··· 7251 "react-dom": ">=17.0.0" 7252 } 7253 }, 7254 + "node_modules/recma-build-jsx": { 7255 + "version": "1.0.0", 7256 + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", 7257 + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", 7258 + "license": "MIT", 7259 + "dependencies": { 7260 + "@types/estree": "^1.0.0", 7261 + "estree-util-build-jsx": "^3.0.0", 7262 + "vfile": "^6.0.0" 7263 + }, 7264 + "funding": { 7265 + "type": "opencollective", 7266 + "url": "https://opencollective.com/unified" 7267 + } 7268 + }, 7269 + "node_modules/recma-jsx": { 7270 + "version": "1.0.1", 7271 + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", 7272 + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", 7273 + "license": "MIT", 7274 + "dependencies": { 7275 + "acorn-jsx": "^5.0.0", 7276 + "estree-util-to-js": "^2.0.0", 7277 + "recma-parse": "^1.0.0", 7278 + "recma-stringify": "^1.0.0", 7279 + "unified": "^11.0.0" 7280 + }, 7281 + "funding": { 7282 + "type": "opencollective", 7283 + "url": "https://opencollective.com/unified" 7284 + }, 7285 + "peerDependencies": { 7286 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 7287 + } 7288 + }, 7289 + "node_modules/recma-parse": { 7290 + "version": "1.0.0", 7291 + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", 7292 + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", 7293 + "license": "MIT", 7294 + "dependencies": { 7295 + "@types/estree": "^1.0.0", 7296 + "esast-util-from-js": "^2.0.0", 7297 + "unified": "^11.0.0", 7298 + "vfile": "^6.0.0" 7299 + }, 7300 + "funding": { 7301 + "type": "opencollective", 7302 + "url": "https://opencollective.com/unified" 7303 + } 7304 + }, 7305 + "node_modules/recma-stringify": { 7306 + "version": "1.0.0", 7307 + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", 7308 + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", 7309 + "license": "MIT", 7310 + "dependencies": { 7311 + "@types/estree": "^1.0.0", 7312 + "estree-util-to-js": "^2.0.0", 7313 + "unified": "^11.0.0", 7314 + "vfile": "^6.0.0" 7315 + }, 7316 + "funding": { 7317 + "type": "opencollective", 7318 + "url": "https://opencollective.com/unified" 7319 + } 7320 + }, 7321 "node_modules/reflect.getprototypeof": { 7322 "version": "1.0.10", 7323 "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", ··· 7362 "url": "https://github.com/sponsors/ljharb" 7363 } 7364 }, 7365 + "node_modules/rehype-recma": { 7366 + "version": "1.0.0", 7367 + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", 7368 + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", 7369 + "license": "MIT", 7370 + "dependencies": { 7371 + "@types/estree": "^1.0.0", 7372 + "@types/hast": "^3.0.0", 7373 + "hast-util-to-estree": "^3.0.0" 7374 + }, 7375 + "funding": { 7376 + "type": "opencollective", 7377 + "url": "https://opencollective.com/unified" 7378 + } 7379 + }, 7380 + "node_modules/rehype-slug": { 7381 + "version": "6.0.0", 7382 + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", 7383 + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", 7384 + "license": "MIT", 7385 + "dependencies": { 7386 + "@types/hast": "^3.0.0", 7387 + "github-slugger": "^2.0.0", 7388 + "hast-util-heading-rank": "^3.0.0", 7389 + "hast-util-to-string": "^3.0.0", 7390 + "unist-util-visit": "^5.0.0" 7391 + }, 7392 + "funding": { 7393 + "type": "opencollective", 7394 + "url": "https://opencollective.com/unified" 7395 + } 7396 + }, 7397 + "node_modules/remark-gfm": { 7398 + "version": "4.0.1", 7399 + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", 7400 + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", 7401 + "license": "MIT", 7402 + "dependencies": { 7403 + "@types/mdast": "^4.0.0", 7404 + "mdast-util-gfm": "^3.0.0", 7405 + "micromark-extension-gfm": "^3.0.0", 7406 + "remark-parse": "^11.0.0", 7407 + "remark-stringify": "^11.0.0", 7408 + "unified": "^11.0.0" 7409 + }, 7410 + "funding": { 7411 + "type": "opencollective", 7412 + "url": "https://opencollective.com/unified" 7413 + } 7414 + }, 7415 + "node_modules/remark-mdx": { 7416 + "version": "3.1.1", 7417 + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", 7418 + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", 7419 + "license": "MIT", 7420 + "dependencies": { 7421 + "mdast-util-mdx": "^3.0.0", 7422 + "micromark-extension-mdxjs": "^3.0.0" 7423 + }, 7424 + "funding": { 7425 + "type": "opencollective", 7426 + "url": "https://opencollective.com/unified" 7427 + } 7428 + }, 7429 + "node_modules/remark-parse": { 7430 + "version": "11.0.0", 7431 + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", 7432 + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", 7433 + "license": "MIT", 7434 + "dependencies": { 7435 + "@types/mdast": "^4.0.0", 7436 + "mdast-util-from-markdown": "^2.0.0", 7437 + "micromark-util-types": "^2.0.0", 7438 + "unified": "^11.0.0" 7439 + }, 7440 + "funding": { 7441 + "type": "opencollective", 7442 + "url": "https://opencollective.com/unified" 7443 + } 7444 + }, 7445 + "node_modules/remark-rehype": { 7446 + "version": "11.1.2", 7447 + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", 7448 + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", 7449 + "license": "MIT", 7450 + "dependencies": { 7451 + "@types/hast": "^3.0.0", 7452 + "@types/mdast": "^4.0.0", 7453 + "mdast-util-to-hast": "^13.0.0", 7454 + "unified": "^11.0.0", 7455 + "vfile": "^6.0.0" 7456 + }, 7457 + "funding": { 7458 + "type": "opencollective", 7459 + "url": "https://opencollective.com/unified" 7460 + } 7461 + }, 7462 + "node_modules/remark-stringify": { 7463 + "version": "11.0.0", 7464 + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", 7465 + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", 7466 + "license": "MIT", 7467 + "dependencies": { 7468 + "@types/mdast": "^4.0.0", 7469 + "mdast-util-to-markdown": "^2.0.0", 7470 + "unified": "^11.0.0" 7471 + }, 7472 + "funding": { 7473 + "type": "opencollective", 7474 + "url": "https://opencollective.com/unified" 7475 + } 7476 + }, 7477 "node_modules/resolve": { 7478 "version": "1.22.11", 7479 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", ··· 7827 "url": "https://github.com/sponsors/ljharb" 7828 } 7829 }, 7830 + "node_modules/source-map": { 7831 + "version": "0.7.6", 7832 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 7833 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 7834 + "license": "BSD-3-Clause", 7835 + "engines": { 7836 + "node": ">= 12" 7837 + } 7838 + }, 7839 "node_modules/source-map-js": { 7840 "version": "1.2.1", 7841 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", ··· 7845 "node": ">=0.10.0" 7846 } 7847 }, 7848 + "node_modules/space-separated-tokens": { 7849 + "version": "2.0.2", 7850 + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", 7851 + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", 7852 + "license": "MIT", 7853 + "funding": { 7854 + "type": "github", 7855 + "url": "https://github.com/sponsors/wooorm" 7856 + } 7857 + }, 7858 "node_modules/stable-hash": { 7859 "version": "0.0.5", 7860 "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", ··· 7989 "url": "https://github.com/sponsors/ljharb" 7990 } 7991 }, 7992 + "node_modules/stringify-entities": { 7993 + "version": "4.0.4", 7994 + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", 7995 + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", 7996 + "license": "MIT", 7997 + "dependencies": { 7998 + "character-entities-html4": "^2.0.0", 7999 + "character-entities-legacy": "^3.0.0" 8000 + }, 8001 + "funding": { 8002 + "type": "github", 8003 + "url": "https://github.com/sponsors/wooorm" 8004 + } 8005 + }, 8006 "node_modules/strip-bom": { 8007 "version": "3.0.0", 8008 "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", ··· 8026 "url": "https://github.com/sponsors/sindresorhus" 8027 } 8028 }, 8029 + "node_modules/style-to-js": { 8030 + "version": "1.1.21", 8031 + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", 8032 + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", 8033 + "license": "MIT", 8034 + "dependencies": { 8035 + "style-to-object": "1.0.14" 8036 + } 8037 + }, 8038 + "node_modules/style-to-object": { 8039 + "version": "1.0.14", 8040 + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", 8041 + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", 8042 + "license": "MIT", 8043 + "dependencies": { 8044 + "inline-style-parser": "0.2.7" 8045 + } 8046 + }, 8047 "node_modules/styled-jsx": { 8048 "version": "5.1.6", 8049 "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", ··· 8182 }, 8183 "engines": { 8184 "node": ">=8.0" 8185 + } 8186 + }, 8187 + "node_modules/trim-lines": { 8188 + "version": "3.0.1", 8189 + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", 8190 + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", 8191 + "license": "MIT", 8192 + "funding": { 8193 + "type": "github", 8194 + "url": "https://github.com/sponsors/wooorm" 8195 + } 8196 + }, 8197 + "node_modules/trough": { 8198 + "version": "2.2.0", 8199 + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", 8200 + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", 8201 + "license": "MIT", 8202 + "funding": { 8203 + "type": "github", 8204 + "url": "https://github.com/sponsors/wooorm" 8205 } 8206 }, 8207 "node_modules/ts-api-utils": { ··· 8419 "integrity": "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==", 8420 "license": "MIT" 8421 }, 8422 + "node_modules/unified": { 8423 + "version": "11.0.5", 8424 + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", 8425 + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", 8426 + "license": "MIT", 8427 + "dependencies": { 8428 + "@types/unist": "^3.0.0", 8429 + "bail": "^2.0.0", 8430 + "devlop": "^1.0.0", 8431 + "extend": "^3.0.0", 8432 + "is-plain-obj": "^4.0.0", 8433 + "trough": "^2.0.0", 8434 + "vfile": "^6.0.0" 8435 + }, 8436 + "funding": { 8437 + "type": "opencollective", 8438 + "url": "https://opencollective.com/unified" 8439 + } 8440 + }, 8441 + "node_modules/unist-util-is": { 8442 + "version": "6.0.1", 8443 + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", 8444 + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", 8445 + "license": "MIT", 8446 + "dependencies": { 8447 + "@types/unist": "^3.0.0" 8448 + }, 8449 + "funding": { 8450 + "type": "opencollective", 8451 + "url": "https://opencollective.com/unified" 8452 + } 8453 + }, 8454 + "node_modules/unist-util-position": { 8455 + "version": "5.0.0", 8456 + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", 8457 + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", 8458 + "license": "MIT", 8459 + "dependencies": { 8460 + "@types/unist": "^3.0.0" 8461 + }, 8462 + "funding": { 8463 + "type": "opencollective", 8464 + "url": "https://opencollective.com/unified" 8465 + } 8466 + }, 8467 + "node_modules/unist-util-position-from-estree": { 8468 + "version": "2.0.0", 8469 + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", 8470 + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", 8471 + "license": "MIT", 8472 + "dependencies": { 8473 + "@types/unist": "^3.0.0" 8474 + }, 8475 + "funding": { 8476 + "type": "opencollective", 8477 + "url": "https://opencollective.com/unified" 8478 + } 8479 + }, 8480 + "node_modules/unist-util-stringify-position": { 8481 + "version": "4.0.0", 8482 + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", 8483 + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", 8484 + "license": "MIT", 8485 + "dependencies": { 8486 + "@types/unist": "^3.0.0" 8487 + }, 8488 + "funding": { 8489 + "type": "opencollective", 8490 + "url": "https://opencollective.com/unified" 8491 + } 8492 + }, 8493 + "node_modules/unist-util-visit": { 8494 + "version": "5.1.0", 8495 + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", 8496 + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", 8497 + "license": "MIT", 8498 + "dependencies": { 8499 + "@types/unist": "^3.0.0", 8500 + "unist-util-is": "^6.0.0", 8501 + "unist-util-visit-parents": "^6.0.0" 8502 + }, 8503 + "funding": { 8504 + "type": "opencollective", 8505 + "url": "https://opencollective.com/unified" 8506 + } 8507 + }, 8508 + "node_modules/unist-util-visit-parents": { 8509 + "version": "6.0.2", 8510 + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", 8511 + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", 8512 + "license": "MIT", 8513 + "dependencies": { 8514 + "@types/unist": "^3.0.0", 8515 + "unist-util-is": "^6.0.0" 8516 + }, 8517 + "funding": { 8518 + "type": "opencollective", 8519 + "url": "https://opencollective.com/unified" 8520 + } 8521 + }, 8522 "node_modules/unrs-resolver": { 8523 "version": "1.11.1", 8524 "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", ··· 8593 "license": "BSD-2-Clause", 8594 "dependencies": { 8595 "punycode": "^2.1.0" 8596 + } 8597 + }, 8598 + "node_modules/vfile": { 8599 + "version": "6.0.3", 8600 + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", 8601 + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", 8602 + "license": "MIT", 8603 + "dependencies": { 8604 + "@types/unist": "^3.0.0", 8605 + "vfile-message": "^4.0.0" 8606 + }, 8607 + "funding": { 8608 + "type": "opencollective", 8609 + "url": "https://opencollective.com/unified" 8610 + } 8611 + }, 8612 + "node_modules/vfile-message": { 8613 + "version": "4.0.3", 8614 + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", 8615 + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", 8616 + "license": "MIT", 8617 + "dependencies": { 8618 + "@types/unist": "^3.0.0", 8619 + "unist-util-stringify-position": "^4.0.0" 8620 + }, 8621 + "funding": { 8622 + "type": "opencollective", 8623 + "url": "https://opencollective.com/unified" 8624 } 8625 }, 8626 "node_modules/which": { ··· 8778 }, 8779 "peerDependencies": { 8780 "zod": "^3.25.0 || ^4.0.0" 8781 + } 8782 + }, 8783 + "node_modules/zwitch": { 8784 + "version": "2.0.4", 8785 + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", 8786 + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", 8787 + "license": "MIT", 8788 + "funding": { 8789 + "type": "github", 8790 + "url": "https://github.com/sponsors/wooorm" 8791 } 8792 } 8793 }
+61
public/llms.txt
···
··· 1 + # Standard.site Documentation 2 + 3 + ## Overview 4 + Standard.site provides AT Protocol lexicons for long-form publishing on the open social web. 5 + 6 + ## Navigation 7 + 8 + ### Getting Started 9 + - Introduction: https://standard.site/docs/introduction 10 + Overview of Standard.site lexicons and core concepts 11 + 12 + - Quick Start: https://standard.site/docs/quick-start 13 + Step-by-step guide to implementing Standard.site lexicons 14 + 15 + - Permissions: https://standard.site/docs/permissions 16 + Understanding record permissions and access control 17 + 18 + - Verification: https://standard.site/docs/verification 19 + Linking records to domains for authenticity 20 + 21 + ### Core Lexicons 22 + - Publication: https://standard.site/docs/lexicons/publication 23 + `site.standard.publication` - Collection metadata and theming 24 + 25 + - Document: https://standard.site/docs/lexicons/document 26 + `site.standard.document` - Individual document records 27 + 28 + - Subscription: https://standard.site/docs/lexicons/subscription 29 + `site.standard.graph.subscription` - Follow relationships 30 + 31 + - Theme: https://standard.site/docs/lexicons/theme 32 + `site.standard.theme` - Theming configuration 33 + 34 + ### Resources 35 + - Implementations: https://standard.site/docs/implementations 36 + Tools and platforms using Standard.site lexicons 37 + 38 + - FAQ: https://standard.site/docs/faq 39 + Common questions and answers 40 + 41 + ## Features 42 + - All documentation pages support anchor links (click any heading to copy its link) 43 + - Each page provides a "Markdown" link in the footer for direct AI agent consumption 44 + - Full markdown source available via API: /api/docs/markdown/{slug} 45 + 46 + ## API Access 47 + GET /api/docs/markdown/{slug} - Returns the raw markdown content of any documentation page 48 + Example: /api/docs/markdown/introduction 49 + 50 + ## Key Concepts 51 + - AT Protocol: Authenticated Transfer Protocol - decentralized social networking 52 + - PDS: Personal Data Server - stores user data and records 53 + - Lexicons: Schemas that define record types in AT Protocol 54 + - NSID: Namespaced Identifier - unique identifier format for lexicons 55 + 56 + ## Implementation Quick Reference 57 + 1. Create publication record with site.standard.publication lexicon 58 + 2. Create document records with site.standard.document lexicon 59 + 3. Link documents to publication via publication reference 60 + 4. Implement verification to link records to your domain 61 + 5. Support subscription records for follow functionality