A social knowledge tool for researchers built on ATProto
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'development' of https://github.com/cosmik-network/semble into development

+2054 -124
+23 -1
src/modules/cards/infrastructure/repositories/DrizzleCardQueryRepository.ts
··· 173 173 // Build the sort order 174 174 const orderDirection = sortOrder === SortOrder.ASC ? asc : desc; 175 175 176 + // First, get the collection to know its author 177 + const collectionQuery = this.db 178 + .select({ 179 + authorId: collections.authorId, 180 + }) 181 + .from(collections) 182 + .where(eq(collections.id, collectionId)); 183 + 184 + const collectionResult = await collectionQuery; 185 + 186 + if (collectionResult.length === 0) { 187 + return { 188 + items: [], 189 + totalCount: 0, 190 + hasMore: false, 191 + }; 192 + } 193 + 194 + const collectionAuthorId = collectionResult[0]!.authorId; 195 + 176 196 // Get URL cards in the collection 177 197 const cardsQuery = this.db 178 198 .select({ ··· 207 227 208 228 const cardIds = cardsResult.map((card) => card.id); 209 229 210 - // Get note cards for these URL cards (parentCardId matches, type = NOTE) 230 + // Get note cards for these URL cards, but only by the collection author 211 231 const notesQuery = this.db 212 232 .select({ 213 233 id: cards.id, ··· 215 235 contentData: cards.contentData, 216 236 }) 217 237 .from(cards) 238 + .innerJoin(libraryMemberships, eq(cards.id, libraryMemberships.cardId)) 218 239 .where( 219 240 and( 220 241 eq(cards.type, CardTypeEnum.NOTE), 221 242 inArray(cards.parentCardId, cardIds), 243 + eq(libraryMemberships.userId, collectionAuthorId), 222 244 ), 223 245 ); 224 246
+84 -14
src/modules/cards/tests/infrastructure/DrizzleCardQueryRepository.getCardsInCollection.integration.test.ts
··· 191 191 expect(card2Result?.cardContent.title).toBeUndefined(); // No metadata provided 192 192 }); 193 193 194 - it('should include connected note cards for collection cards', async () => { 194 + it('should only include notes by collection author, not notes by other users', async () => { 195 195 // Create URL card 196 - const url = URL.create('https://example.com/collection-article').unwrap(); 196 + const url = URL.create('https://example.com/shared-article').unwrap(); 197 197 const urlCard = new CardBuilder() 198 198 .withCuratorId(curatorId.value) 199 199 .withUrlCard(url) 200 200 .buildOrThrow(); 201 201 202 + urlCard.addToLibrary(curatorId); 203 + 202 204 await cardRepository.save(urlCard); 203 205 204 - // Create note card connected to URL card 205 - const noteCard = new CardBuilder() 206 + // Create note by collection author 207 + const authorNote = new CardBuilder() 206 208 .withCuratorId(curatorId.value) 207 - .withNoteCard( 208 - 'This is my note about the collection article', 209 - 'Collection Note', 210 - ) 209 + .withNoteCard('Note by collection author', 'Author Note') 210 + .withParentCard(urlCard.cardId) 211 + .buildOrThrow(); 212 + 213 + authorNote.addToLibrary(curatorId); 214 + 215 + await cardRepository.save(authorNote); 216 + 217 + // Create note by different user on the same URL card 218 + const otherUserNote = new CardBuilder() 219 + .withCuratorId(otherCuratorId.value) 220 + .withNoteCard('Note by other user', 'Other User Note') 211 221 .withParentCard(urlCard.cardId) 212 222 .buildOrThrow(); 213 223 214 - await cardRepository.save(noteCard); 224 + otherUserNote.addToLibrary(otherCuratorId); 225 + 226 + await cardRepository.save(otherUserNote); 215 227 216 - // Create collection and add URL card 228 + // Create collection authored by curatorId and add URL card 217 229 const collection = Collection.create( 218 230 { 219 231 authorId: curatorId, 220 - name: 'Collection with Notes', 232 + name: 'Collection by First User', 221 233 accessType: CollectionAccessType.OPEN, 222 234 collaboratorIds: [], 223 235 createdAt: new Date(), ··· 243 255 expect(result.items).toHaveLength(1); 244 256 const urlCardResult = result.items[0]; 245 257 258 + // Should only include the note by the collection author, not the other user's note 246 259 expect(urlCardResult?.note).toBeDefined(); 247 - expect(urlCardResult?.note?.id).toBe(noteCard.cardId.getStringValue()); 248 - expect(urlCardResult?.note?.text).toBe( 249 - 'This is my note about the collection article', 260 + expect(urlCardResult?.note?.id).toBe(authorNote.cardId.getStringValue()); 261 + expect(urlCardResult?.note?.text).toBe('Note by collection author'); 262 + }); 263 + 264 + it('should not include notes when only other users have notes, not collection author', async () => { 265 + // Create URL card 266 + const url = URL.create( 267 + 'https://example.com/article-with-other-notes', 268 + ).unwrap(); 269 + const urlCard = new CardBuilder() 270 + .withCuratorId(curatorId.value) 271 + .withUrlCard(url) 272 + .buildOrThrow(); 273 + 274 + urlCard.addToLibrary(curatorId); 275 + 276 + await cardRepository.save(urlCard); 277 + 278 + // Create note by different user on the URL card (NO note by collection author) 279 + const otherUserNote = new CardBuilder() 280 + .withCuratorId(otherCuratorId.value) 281 + .withNoteCard('Note by other user only', 'Other User Note') 282 + .withParentCard(urlCard.cardId) 283 + .buildOrThrow(); 284 + 285 + otherUserNote.addToLibrary(otherCuratorId); 286 + 287 + await cardRepository.save(otherUserNote); 288 + 289 + // Create collection authored by curatorId and add URL card 290 + const collection = Collection.create( 291 + { 292 + authorId: curatorId, 293 + name: 'Collection with Other User Notes Only', 294 + accessType: CollectionAccessType.OPEN, 295 + collaboratorIds: [], 296 + createdAt: new Date(), 297 + updatedAt: new Date(), 298 + }, 299 + new UniqueEntityID(), 300 + ).unwrap(); 301 + 302 + collection.addCard(urlCard.cardId, curatorId); 303 + await collectionRepository.save(collection); 304 + 305 + // Query cards in collection 306 + const result = await queryRepository.getCardsInCollection( 307 + collection.collectionId.getStringValue(), 308 + { 309 + page: 1, 310 + limit: 10, 311 + sortBy: CardSortField.UPDATED_AT, 312 + sortOrder: SortOrder.DESC, 313 + }, 250 314 ); 315 + 316 + expect(result.items).toHaveLength(1); 317 + const urlCardResult = result.items[0]; 318 + 319 + // Should not include any note since only other users have notes, not the collection author 320 + expect(urlCardResult?.note).toBeUndefined(); 251 321 }); 252 322 253 323 it('should not include note cards that are not connected to collection URL cards', async () => {
+57 -48
src/webapp/app/(auth)/login/page.tsx
··· 18 18 import SembleLogo from '@/assets/semble-logo.svg'; 19 19 import { useAuth } from '@/hooks/useAuth'; 20 20 import { useRouter, useSearchParams } from 'next/navigation'; 21 + import Link from 'next/link'; 21 22 22 23 function InnerPage() { 23 24 const { isAuthenticated, isLoading } = useAuth(); ··· 66 67 } 67 68 68 69 return ( 69 - <Stack gap="xl" maw={300}> 70 - <Stack gap={'xs'}> 71 - <Image 72 - src={SembleLogo.src} 73 - alt="Semble logo" 74 - w={48} 75 - h={64.5} 76 - mx={'auto'} 77 - /> 78 - <Title order={1} ta="center"> 79 - Welcome back 80 - </Title> 81 - </Stack> 82 - <LoginForm /> 83 - <Stack align="center" gap={0}> 84 - <Text fw={500} c={'stone'}> 85 - {"Don't have an account? "} 86 - <Anchor href="/signup" fw={500}> 87 - Sign up 88 - </Anchor> 89 - </Text> 90 - <Popover withArrow shadow="sm"> 91 - <PopoverTarget> 92 - <Button 93 - variant="white" 94 - size="md" 95 - fw={500} 96 - fs={'italic'} 97 - c={'stone'} 98 - rightSection={<IoMdHelpCircleOutline size={22} />} 99 - > 100 - How your Cosmik Network account works 101 - </Button> 102 - </PopoverTarget> 103 - <PopoverDropdown> 104 - <Text fw={500} ta="center" maw={380}> 105 - When you sign up today, you’ll create a Bluesky account. In near 106 - future, your account will be seamlessly migrated to our{' '} 107 - <Anchor 108 - href="https://cosmik.network" 109 - target="_blank" 70 + <Stack gap={'xl'} align="center"> 71 + <Stack gap="xl" maw={300}> 72 + <Stack gap={'xs'}> 73 + <Image 74 + src={SembleLogo.src} 75 + alt="Semble logo" 76 + w={48} 77 + h={64.5} 78 + mx={'auto'} 79 + /> 80 + <Title order={1} ta="center"> 81 + Welcome back 82 + </Title> 83 + </Stack> 84 + <LoginForm /> 85 + <Stack align="center" gap={0}> 86 + <Text fw={500} c={'stone'}> 87 + {"Don't have an account? "} 88 + <Anchor href="/signup" fw={500}> 89 + Sign up 90 + </Anchor> 91 + </Text> 92 + <Popover withArrow shadow="sm"> 93 + <PopoverTarget> 94 + <Button 95 + variant="white" 96 + size="md" 110 97 fw={500} 111 - c={'blue'} 98 + fs={'italic'} 99 + c={'stone'} 100 + rightSection={<IoMdHelpCircleOutline size={22} />} 112 101 > 113 - Cosmik Network 114 - </Anchor> 115 - . 116 - </Text> 117 - </PopoverDropdown> 118 - </Popover> 102 + How your Cosmik Network account works 103 + </Button> 104 + </PopoverTarget> 105 + <PopoverDropdown> 106 + <Text fw={500} ta="center" maw={380}> 107 + When you sign up today, you’ll create a Bluesky account. In near 108 + future, your account will be seamlessly migrated to our{' '} 109 + <Anchor 110 + href="https://cosmik.network" 111 + target="_blank" 112 + fw={500} 113 + c={'blue'} 114 + > 115 + Cosmik Network 116 + </Anchor> 117 + . 118 + </Text> 119 + </PopoverDropdown> 120 + </Popover> 121 + </Stack> 119 122 </Stack> 123 + <Text fw={500} ta={'center'} c={'dark.1'}> 124 + By continuing, you agree to our{' '} 125 + <Anchor component={Link} href={'/privacy-policy'} c="dark.2" fw={600}> 126 + Privacy Policy 127 + </Anchor> 128 + </Text> 120 129 </Stack> 121 130 ); 122 131 }
+50
src/webapp/app/(auth)/privacy-policy/layout.tsx
··· 1 + import { 2 + Container, 3 + Stack, 4 + Image, 5 + Text, 6 + Anchor, 7 + ActionIcon, 8 + Box, 9 + Button, 10 + Group, 11 + } from '@mantine/core'; 12 + import CosmikLogo from '@/assets/cosmik-logo-full.svg'; 13 + import SembleLogo from '@/assets/semble-logo.svg'; 14 + import { Metadata } from 'next'; 15 + import Link from 'next/link'; 16 + import { FaBluesky, FaGithub, FaDiscord } from 'react-icons/fa6'; 17 + import { RiArrowRightUpLine } from 'react-icons/ri'; 18 + 19 + export const metadata: Metadata = { 20 + title: 'Privacy Policy', 21 + description: `Follow your peers' research trails. Surface and discover new connections. Built on ATProto so you own your data.`, 22 + }; 23 + 24 + interface Props { 25 + children: React.ReactNode; 26 + } 27 + 28 + export default function Layout(props: Props) { 29 + return ( 30 + <Container p="md" size="sm"> 31 + <Stack align="start"> 32 + <Anchor component={Link} href={'/'}> 33 + <Image src={SembleLogo.src} alt="Semble logo" w={'auto'} h={50} /> 34 + </Anchor> 35 + <Stack>{props.children}</Stack> 36 + <Box component="footer" px={'md'} py={'xs'} mt={'xl'} mx={'auto'}> 37 + <Button 38 + component={Link} 39 + href="/" 40 + variant="light" 41 + color="dark.1" 42 + fw={600} 43 + > 44 + Back to home 45 + </Button> 46 + </Box> 47 + </Stack> 48 + </Container> 49 + ); 50 + }
+157
src/webapp/app/(auth)/privacy-policy/page.mdx
··· 1 + import { Divider } from '@mantine/core'; 2 + 3 + # Privacy Policy 4 + 5 + Last updated: @September 4, 2025 6 + 7 + ## Introduction 8 + 9 + Semble (this app is run by Cosmik Network which is fiscally sponsored by [Homeworld.bio](http://Homeworld.bio) (referred to here as "we" or "us" or "Semble"). 10 + 11 + This Privacy Policy sets out how we collect and use any data you may provide us. By using Semble, you agree to the collection and use of information in accordance with this policy. 12 + 13 + Semble is an open-source software available on the [GitHub repo](https://github.com/cosmik-network/semble). Other instances or derivatives hosted elsewhere are not covered by this policy. 14 + 15 + ## Our Principles 16 + 17 + Your privacy is critically important to us. We have a few fundamental principles: 18 + 19 + - We collect your personal information only when we need it. 20 + - We don't share your personal information except to comply with the law, develop our products, or protect our rights. 21 + - **We will never sell your data** to third parties. 22 + - We don't store personal information unless required for the on-going operation of our services. 23 + - We make every effort to protect your privacy by using secure technology and carefully choosing trusted third-parties to work with when necessary. 24 + - No spam! We'll only send you communications about Semble-related products and services, and we will make it easy to opt out. 25 + 26 + ## How We Collect Information 27 + 28 + We collect information from you when you connect your ATProto account and when you use our app. 29 + 30 + ### ATProto Account Connection 31 + 32 + When you connect your ATProto account to Semble, we access your profile information including your handle, display name, avatar, and authentication data. This allows us to sync your content and provide our services. 33 + 34 + ### Content and Activity 35 + 36 + We collect and mirror content you create and publish through our app, including posts, media, likes, reposts, follows, and other social activities. This mirrored data helps us provide faster performance and offline access. 37 + 38 + ### Technical Information 39 + 40 + We may retain server logs and collect non-personally-identifying information of the sort that web browsers and servers typically make available, in order to better understand how our users interact with Semble. This includes device information, IP addresses, timestamps, and error logs for debugging and security purposes. 41 + 42 + We also use cookies and similar technologies for things like keeping you logged into your account and compiling aggregate data about app usage so that we can offer better experiences and tools in the future. 43 + 44 + We may work with trusted third-party service providers to assist us with things like sending notifications, analytics, and app infrastructure. These service providers are not permitted to use the information collected on our behalf except to help us conduct and improve our business. 45 + 46 + ## How We Use Information 47 + 48 + The information we collect from you may be used in one of the following ways: 49 + 50 + - **To personalize your experience** — your information helps us to better respond to your individual needs. 51 + - **To improve Semble** — we continually strive to improve based on the information and feedback we receive from you. 52 + - **To improve customer service** — your information helps us to more effectively respond to your requests and support needs. 53 + - **To send periodic communications** — we may use your contact information to send you updates, notifications, and responses to requests or questions. 54 + - **To sync with ATProto** — we mirror your data to provide seamless integration with the ATProto network. 55 + 56 + ## Important: ATProto Network Considerations 57 + 58 + **Please understand**: When you publish content through our app to ATProto, your content becomes part of the decentralized ATProto network. This means: 59 + 60 + - Your annotations, cards, and collections are stored on your Personal Data Server (PDS), which may be operated by third parties with their own privacy policies 61 + - Your public content is accessible through the Bluesky firehose and other ATProto indexers 62 + - Other ATProto applications can access your public annotations and collections 63 + - This data distribution is inherent to the ATProto protocol and outside our direct control 64 + 65 + We maintain mirrors of your ATProto data on our servers to improve app performance, but the decentralized nature of ATProto means your data exists beyond just our systems. 66 + 67 + ## How We Protect Your Information 68 + 69 + The security of your personal information is important to us, and we do our best to ensure it remains secure. We implement a variety of security measures including encryption, access controls, and regular security audits to maintain the safety of your personal information. 70 + 71 + However, we advise you to remember that no method of information transmission or storage is 100% secure. While we strive to do our best to protect your information, we cannot guarantee its absolute security. 72 + 73 + ## Your Data Rights 74 + 75 + At any time, you may request a copy of all your personal data we store, including your account info. You may also request that we correct any inaccurate or incomplete data we have about you, or that we delete all your personal data from our systems. To make any of these requests, please email us and we'll get back to you within 48 hours. 76 + 77 + You have several choices available when it comes to information about you: 78 + 79 + - **Limit the information that you provide**: you can choose what content to publish and what profile information to share. Please keep in mind that if you limit this information, certain features of Semble may not be accessible. 80 + - **Opt out of communications**: you may opt out of receiving emails from us, or unsubscribe at any time. If you opt out of promotional communications, we may still send you other communications, like those about your account and legal notices. 81 + - **Disconnect your account**: you can disconnect your ATProto account from Semble at any time through app settings. Your data will remain on the ATProto network according to that protocol's specifications. 82 + - **Close your account**: while we'd be sad to see you go, you can close your account if you no longer want to use Semble. Send us a note if you'd like to permanently delete your mirrored data from our servers. Please keep in mind that your data may continue to exist on the ATProto network, and we may retain some information when reasonably needed for compliance with legal obligations or for our legitimate business interests. 83 + 84 + ## Information Disclosure 85 + 86 + We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. **We will never sell your data.** This does not include trusted third parties who assist us in operating our app, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. 87 + 88 + We may also release your information when we believe release is appropriate to comply with the law, enforce our policies, or protect ours or others' rights, property, or safety. However, non-personally identifiable information may be provided to other parties for analytics or other uses. 89 + 90 + ### ATProto and Bluesky Network Sharing 91 + 92 + Content you publish through our app is automatically shared across the ATProto network according to the protocol's specifications. In practice, this means your public annotations and collections become accessible through Bluesky's infrastructure and other ATProto applications. This sharing is inherent to how the protocol works and is largely managed by Bluesky's systems. 93 + 94 + We may occasionally link to third party products or services from our app. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these linked sites. 95 + 96 + ## European General Data Protection Regulation (GDPR) 97 + 98 + If you are located in a country that falls under the scope of the GDPR, data protection laws give you certain rights with respect to your personal data, subject to any exemptions provided by the law, including the rights to: 99 + 100 + - Request access to your personal data 101 + - Request correction or deletion of your personal data 102 + - Object to our use and processing of your personal data 103 + - Request that we limit our use and processing of your personal data 104 + - Request portability of your personal data 105 + 106 + You also have the right to make a complaint to a government supervisory authority. 107 + 108 + ## California Consumer Privacy Act (CCPA) 109 + 110 + The California Consumer Privacy Act ("CCPA") requires us to provide California residents with additional information about the categories of personal information we collect and share. 111 + 112 + In the last 12 months, we collected the following categories of personal information from California residents: 113 + 114 + - Identifiers (like your ATProto handle, contact information, and device identifiers) 115 + - Internet or other electronic network activity information (such as your usage of Semble) 116 + - Geolocation data (such as your location based on your IP address) 117 + - Audio, electronic, visual or similar information (such as content you post) 118 + 119 + If you are a California resident, you have additional rights under the CCPA, including the right to: 120 + 121 + If you are a California resident, you have additional rights under the CCPA regarding data we directly control, including the right to: 122 + 123 + - Request to know what personal information we collect and how we use it (limited to our app's direct data collection) 124 + - Request deletion of personal information we collect or maintain (our mirrored data only; ATProto network data is governed separately) 125 + - Opt out of any sale of personal information (note: we do not sell personal information) 126 + - Not receive discriminatory treatment for exercising your rights 127 + 128 + **Note**: These rights apply to data under our direct control. For data stored on ATProto/Bluesky infrastructure, you may need to exercise rights through those platforms directly. 129 + 130 + ## COPPA 131 + 132 + Our app and services are directed to people who are at least 13 years old or older. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act), do not use this app. 133 + 134 + ## International Users 135 + 136 + If you are located outside the US, please note that your information may be transferred to and processed in the US, where our servers are located. 137 + 138 + ## Your Consent 139 + 140 + By using our app, you consent to our privacy policy. 141 + 142 + ## Changes to This Privacy Policy 143 + 144 + Although most changes are likely to be minor, we may change our Privacy Policy from time to time. We encourage users to frequently check this page for any changes. If we make changes, we will notify you by revising the change log below, and, in some cases, we may provide additional notice (like an app notification or email). Your further use of Semble after a change to our Privacy Policy will be subject to the updated policy. 145 + 146 + ## Contact Us 147 + 148 + If you have any questions or concerns, please send an email to [hello@cosmik.network](mailto:hello@cosmik.network) . We take all privacy concerns very seriously and will respond appropriately and quickly. 149 + 150 + <Divider /> 151 + 152 + This document is made available under a Creative Commons BY-SA License. Thanks to [Leaflet](https://leaflet.pub/) for their example. 153 + 154 + **Changelog** 155 + 156 + September 4, 2025 – Initial draft for review 157 + September 25, 2025 - Initial version published
+39 -37
src/webapp/app/page.tsx
··· 182 182 > 183 183 Follow our blog for updates 184 184 </Button> 185 - <Text c="dark.1" fw={600} ta="center"> 186 - Made by &nbsp; 187 - <Anchor 188 - href="https://cosmik.network/" 189 - target="_blank" 190 - style={{ verticalAlign: 'middle' }} 191 - > 192 - <Box 193 - component="span" 194 - display="inline-flex" 195 - style={{ verticalAlign: 'middle' }} 196 - > 197 - <Image 198 - src={CosmikLogo.src} 199 - alt="Cosmik logo" 200 - w={92} 201 - h={28.4} 202 - /> 203 - </Box> 204 - </Anchor> 205 - &nbsp;&nbsp; 206 - <Text c="dark.1" fw={600} span> 207 - with support from&nbsp; 185 + <Stack align="center" gap={'0'}> 186 + <Text c="dark.1" fw={600} ta="center"> 187 + Made by &nbsp; 208 188 <Anchor 209 - href="https://www.openphilanthropy.org/" 189 + href="https://cosmik.network/" 210 190 target="_blank" 211 - c="dark.2" 212 - fw={600} 213 - > 214 - Open Philanthropy 215 - </Anchor>{' '} 216 - and{' '} 217 - <Anchor 218 - href="https://astera.org/" 219 - target="_blank" 220 - c="dark.2" 221 - fw={600} 191 + style={{ verticalAlign: 'middle' }} 222 192 > 223 - Astera 193 + <Box 194 + component="span" 195 + display="inline-flex" 196 + style={{ verticalAlign: 'middle' }} 197 + > 198 + <Image 199 + src={CosmikLogo.src} 200 + alt="Cosmik logo" 201 + w={92} 202 + h={28.4} 203 + /> 204 + </Box> 224 205 </Anchor> 206 + &nbsp;&nbsp; 207 + <Text c="dark.1" fw={600} span> 208 + with support from&nbsp; 209 + <Anchor 210 + href="https://www.openphilanthropy.org/" 211 + target="_blank" 212 + c="dark.2" 213 + fw={600} 214 + > 215 + Open Philanthropy 216 + </Anchor>{' '} 217 + and{' '} 218 + <Anchor 219 + href="https://astera.org/" 220 + target="_blank" 221 + c="dark.2" 222 + fw={600} 223 + > 224 + Astera 225 + </Anchor> 226 + </Text> 225 227 </Text> 226 - </Text> 228 + </Stack> 227 229 </Stack> 228 230 </Box> 229 231 </Stack>
+23
src/webapp/mdx-components.tsx
··· 1 + import { Title, Text, List, ListItem, Anchor } from '@mantine/core'; 2 + import type { MDXComponents } from 'mdx/types'; 3 + import Link from 'next/link'; 4 + 5 + const components: MDXComponents = { 6 + h1: ({ children }) => <Title order={1}>{children}</Title>, 7 + h2: ({ children }) => <Title order={2}>{children}</Title>, 8 + h3: ({ children }) => <Title order={3}>{children}</Title>, 9 + h4: ({ children }) => <Title order={4}>{children}</Title>, 10 + p: ({ children }) => <Text fw={500}>{children}</Text>, 11 + a: ({ children, href }) => ( 12 + <Anchor component={Link} href={href} c="blue" fw={600}> 13 + {children} 14 + </Anchor> 15 + ), 16 + ul: ({ children }) => <List type="unordered">{children}</List>, 17 + ol: ({ children }) => <List type="ordered">{children}</List>, 18 + li: ({ children }) => <ListItem fw={500}>{children}</ListItem>, 19 + }; 20 + 21 + export function useMDXComponents(): MDXComponents { 22 + return components; 23 + }
-6
src/webapp/next.config.js
··· 1 - /** @type {import('next').NextConfig} */ 2 - const nextConfig = { 3 - reactStrictMode: false, 4 - }; 5 - 6 - module.exports = nextConfig;
+17
src/webapp/next.config.mjs
··· 1 + import createMDX from '@next/mdx'; 2 + 3 + /** @type {import('next').NextConfig} */ 4 + const nextConfig = { 5 + reactStrictMode: false, 6 + 7 + // Configure `pageExtensions` to include markdown and MDX files 8 + pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'], 9 + // Optionally, add any other Next.js config below 10 + }; 11 + 12 + const withMDX = createMDX({ 13 + // Add markdown plugins here, as desired 14 + }); 15 + 16 + // Merge MDX config with Next.js config 17 + export default withMDX(nextConfig);
+1600 -18
src/webapp/package-lock.json
··· 15 15 "@mantine/hooks": "^8.1.3", 16 16 "@mantine/modals": "^8.1.3", 17 17 "@mantine/notifications": "^8.1.3", 18 + "@mdx-js/loader": "^3.1.1", 19 + "@mdx-js/react": "^3.1.1", 20 + "@next/mdx": "^15.5.4", 18 21 "@tanstack/react-query": "^5.85.5", 22 + "@types/mdx": "^2.0.13", 19 23 "@vercel/analytics": "^1.5.0", 20 24 "date-fns": "^4.1.0", 21 25 "dayjs": "^1.11.13", ··· 2073 2077 "react": "^18.x || ^19.x" 2074 2078 } 2075 2079 }, 2080 + "node_modules/@mdx-js/loader": { 2081 + "version": "3.1.1", 2082 + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-3.1.1.tgz", 2083 + "integrity": "sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ==", 2084 + "dependencies": { 2085 + "@mdx-js/mdx": "^3.0.0", 2086 + "source-map": "^0.7.0" 2087 + }, 2088 + "funding": { 2089 + "type": "opencollective", 2090 + "url": "https://opencollective.com/unified" 2091 + }, 2092 + "peerDependencies": { 2093 + "webpack": ">=5" 2094 + }, 2095 + "peerDependenciesMeta": { 2096 + "webpack": { 2097 + "optional": true 2098 + } 2099 + } 2100 + }, 2101 + "node_modules/@mdx-js/loader/node_modules/source-map": { 2102 + "version": "0.7.6", 2103 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 2104 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 2105 + "engines": { 2106 + "node": ">= 12" 2107 + } 2108 + }, 2109 + "node_modules/@mdx-js/mdx": { 2110 + "version": "3.1.1", 2111 + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", 2112 + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", 2113 + "dependencies": { 2114 + "@types/estree": "^1.0.0", 2115 + "@types/estree-jsx": "^1.0.0", 2116 + "@types/hast": "^3.0.0", 2117 + "@types/mdx": "^2.0.0", 2118 + "acorn": "^8.0.0", 2119 + "collapse-white-space": "^2.0.0", 2120 + "devlop": "^1.0.0", 2121 + "estree-util-is-identifier-name": "^3.0.0", 2122 + "estree-util-scope": "^1.0.0", 2123 + "estree-walker": "^3.0.0", 2124 + "hast-util-to-jsx-runtime": "^2.0.0", 2125 + "markdown-extensions": "^2.0.0", 2126 + "recma-build-jsx": "^1.0.0", 2127 + "recma-jsx": "^1.0.0", 2128 + "recma-stringify": "^1.0.0", 2129 + "rehype-recma": "^1.0.0", 2130 + "remark-mdx": "^3.0.0", 2131 + "remark-parse": "^11.0.0", 2132 + "remark-rehype": "^11.0.0", 2133 + "source-map": "^0.7.0", 2134 + "unified": "^11.0.0", 2135 + "unist-util-position-from-estree": "^2.0.0", 2136 + "unist-util-stringify-position": "^4.0.0", 2137 + "unist-util-visit": "^5.0.0", 2138 + "vfile": "^6.0.0" 2139 + }, 2140 + "funding": { 2141 + "type": "opencollective", 2142 + "url": "https://opencollective.com/unified" 2143 + } 2144 + }, 2145 + "node_modules/@mdx-js/mdx/node_modules/estree-walker": { 2146 + "version": "3.0.3", 2147 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 2148 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 2149 + "dependencies": { 2150 + "@types/estree": "^1.0.0" 2151 + } 2152 + }, 2153 + "node_modules/@mdx-js/mdx/node_modules/source-map": { 2154 + "version": "0.7.6", 2155 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 2156 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 2157 + "engines": { 2158 + "node": ">= 12" 2159 + } 2160 + }, 2076 2161 "node_modules/@mdx-js/react": { 2077 - "version": "3.1.0", 2078 - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", 2079 - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", 2080 - "dev": true, 2162 + "version": "3.1.1", 2163 + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", 2164 + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", 2081 2165 "dependencies": { 2082 2166 "@types/mdx": "^2.0.0" 2083 2167 }, ··· 2252 2336 }, 2253 2337 "engines": { 2254 2338 "node": ">= 6" 2339 + } 2340 + }, 2341 + "node_modules/@next/mdx": { 2342 + "version": "15.5.4", 2343 + "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-15.5.4.tgz", 2344 + "integrity": "sha512-QUc14KkswCau2/Lul13t13v8QYRiEh3aeyUMUix5mK/Zd8c/J9NQuVvLGhxS7fxGPU+fOcv0GaXqZshkvNaX7A==", 2345 + "dependencies": { 2346 + "source-map": "^0.7.0" 2347 + }, 2348 + "peerDependencies": { 2349 + "@mdx-js/loader": ">=0.15.0", 2350 + "@mdx-js/react": ">=0.15.0" 2351 + }, 2352 + "peerDependenciesMeta": { 2353 + "@mdx-js/loader": { 2354 + "optional": true 2355 + }, 2356 + "@mdx-js/react": { 2357 + "optional": true 2358 + } 2359 + } 2360 + }, 2361 + "node_modules/@next/mdx/node_modules/source-map": { 2362 + "version": "0.7.6", 2363 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 2364 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 2365 + "engines": { 2366 + "node": ">= 12" 2255 2367 } 2256 2368 }, 2257 2369 "node_modules/@next/swc-darwin-arm64": { ··· 7265 7377 "@types/har-format": "*" 7266 7378 } 7267 7379 }, 7380 + "node_modules/@types/debug": { 7381 + "version": "4.1.12", 7382 + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", 7383 + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", 7384 + "dependencies": { 7385 + "@types/ms": "*" 7386 + } 7387 + }, 7268 7388 "node_modules/@types/deep-eql": { 7269 7389 "version": "4.0.2", 7270 7390 "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", ··· 7280 7400 "node_modules/@types/estree": { 7281 7401 "version": "1.0.8", 7282 7402 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 7283 - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 7284 - "devOptional": true 7403 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" 7404 + }, 7405 + "node_modules/@types/estree-jsx": { 7406 + "version": "1.0.5", 7407 + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", 7408 + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", 7409 + "dependencies": { 7410 + "@types/estree": "*" 7411 + } 7285 7412 }, 7286 7413 "node_modules/@types/filesystem": { 7287 7414 "version": "0.0.36", ··· 7304 7431 "integrity": "sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==", 7305 7432 "dev": true 7306 7433 }, 7434 + "node_modules/@types/hast": { 7435 + "version": "3.0.4", 7436 + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", 7437 + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", 7438 + "dependencies": { 7439 + "@types/unist": "*" 7440 + } 7441 + }, 7307 7442 "node_modules/@types/http-cache-semantics": { 7308 7443 "version": "4.0.4", 7309 7444 "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", ··· 7316 7451 "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", 7317 7452 "dev": true 7318 7453 }, 7454 + "node_modules/@types/mdast": { 7455 + "version": "4.0.4", 7456 + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", 7457 + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", 7458 + "dependencies": { 7459 + "@types/unist": "*" 7460 + } 7461 + }, 7319 7462 "node_modules/@types/mdx": { 7320 7463 "version": "2.0.13", 7321 7464 "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", 7322 - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", 7323 - "dev": true 7465 + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" 7466 + }, 7467 + "node_modules/@types/ms": { 7468 + "version": "2.1.0", 7469 + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", 7470 + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" 7324 7471 }, 7325 7472 "node_modules/@types/node": { 7326 7473 "version": "20.19.11", ··· 7341 7488 "version": "19.1.8", 7342 7489 "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", 7343 7490 "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", 7344 - "devOptional": true, 7345 7491 "dependencies": { 7346 7492 "csstype": "^3.0.2" 7347 7493 } ··· 7366 7512 "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", 7367 7513 "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", 7368 7514 "dev": true 7515 + }, 7516 + "node_modules/@types/unist": { 7517 + "version": "3.0.3", 7518 + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", 7519 + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" 7369 7520 }, 7370 7521 "node_modules/@typescript-eslint/eslint-plugin": { 7371 7522 "version": "8.32.1", ··· 7587 7738 "node_modules/@ungap/structured-clone": { 7588 7739 "version": "1.3.0", 7589 7740 "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", 7590 - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", 7591 - "dev": true 7741 + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" 7592 7742 }, 7593 7743 "node_modules/@unrs/resolver-binding-darwin-arm64": { 7594 7744 "version": "1.7.2", ··· 8160 8310 "version": "8.15.0", 8161 8311 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 8162 8312 "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 8163 - "devOptional": true, 8164 8313 "bin": { 8165 8314 "acorn": "bin/acorn" 8166 8315 }, ··· 8172 8321 "version": "5.3.2", 8173 8322 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 8174 8323 "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 8175 - "dev": true, 8176 8324 "peerDependencies": { 8177 8325 "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 8178 8326 } ··· 8490 8638 "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", 8491 8639 "dev": true 8492 8640 }, 8641 + "node_modules/astring": { 8642 + "version": "1.9.0", 8643 + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", 8644 + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", 8645 + "bin": { 8646 + "astring": "bin/astring" 8647 + } 8648 + }, 8493 8649 "node_modules/async-function": { 8494 8650 "version": "1.0.0", 8495 8651 "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", ··· 8577 8733 "node": ">= 0.4" 8578 8734 } 8579 8735 }, 8736 + "node_modules/bail": { 8737 + "version": "2.0.2", 8738 + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", 8739 + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", 8740 + "funding": { 8741 + "type": "github", 8742 + "url": "https://github.com/sponsors/wooorm" 8743 + } 8744 + }, 8580 8745 "node_modules/balanced-match": { 8581 8746 "version": "1.0.2", 8582 8747 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 8888 9053 } 8889 9054 ] 8890 9055 }, 9056 + "node_modules/ccount": { 9057 + "version": "2.0.1", 9058 + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", 9059 + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", 9060 + "funding": { 9061 + "type": "github", 9062 + "url": "https://github.com/sponsors/wooorm" 9063 + } 9064 + }, 8891 9065 "node_modules/chai": { 8892 9066 "version": "5.3.1", 8893 9067 "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.1.tgz", ··· 8926 9100 "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", 8927 9101 "dev": true 8928 9102 }, 9103 + "node_modules/character-entities": { 9104 + "version": "2.0.2", 9105 + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", 9106 + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", 9107 + "funding": { 9108 + "type": "github", 9109 + "url": "https://github.com/sponsors/wooorm" 9110 + } 9111 + }, 9112 + "node_modules/character-entities-html4": { 9113 + "version": "2.1.0", 9114 + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", 9115 + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", 9116 + "funding": { 9117 + "type": "github", 9118 + "url": "https://github.com/sponsors/wooorm" 9119 + } 9120 + }, 9121 + "node_modules/character-entities-legacy": { 9122 + "version": "3.0.0", 9123 + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", 9124 + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", 9125 + "funding": { 9126 + "type": "github", 9127 + "url": "https://github.com/sponsors/wooorm" 9128 + } 9129 + }, 9130 + "node_modules/character-reference-invalid": { 9131 + "version": "2.0.1", 9132 + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", 9133 + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", 9134 + "funding": { 9135 + "type": "github", 9136 + "url": "https://github.com/sponsors/wooorm" 9137 + } 9138 + }, 8929 9139 "node_modules/chardet": { 8930 9140 "version": "0.7.0", 8931 9141 "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", ··· 9062 9272 "@types/estree": "^1.0.0" 9063 9273 } 9064 9274 }, 9275 + "node_modules/collapse-white-space": { 9276 + "version": "2.1.0", 9277 + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", 9278 + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", 9279 + "funding": { 9280 + "type": "github", 9281 + "url": "https://github.com/sponsors/wooorm" 9282 + } 9283 + }, 9065 9284 "node_modules/color": { 9066 9285 "version": "4.2.3", 9067 9286 "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", ··· 9101 9320 "dependencies": { 9102 9321 "color-name": "^1.0.0", 9103 9322 "simple-swizzle": "^0.2.2" 9323 + } 9324 + }, 9325 + "node_modules/comma-separated-tokens": { 9326 + "version": "2.0.3", 9327 + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", 9328 + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", 9329 + "funding": { 9330 + "type": "github", 9331 + "url": "https://github.com/sponsors/wooorm" 9104 9332 } 9105 9333 }, 9106 9334 "node_modules/commander": { ··· 9450 9678 "version": "4.4.1", 9451 9679 "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 9452 9680 "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 9453 - "dev": true, 9454 9681 "dependencies": { 9455 9682 "ms": "^2.1.3" 9456 9683 }, ··· 9461 9688 "supports-color": { 9462 9689 "optional": true 9463 9690 } 9691 + } 9692 + }, 9693 + "node_modules/decode-named-character-reference": { 9694 + "version": "1.2.0", 9695 + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", 9696 + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", 9697 + "dependencies": { 9698 + "character-entities": "^2.0.0" 9699 + }, 9700 + "funding": { 9701 + "type": "github", 9702 + "url": "https://github.com/sponsors/wooorm" 9464 9703 } 9465 9704 }, 9466 9705 "node_modules/decompress-response": { ··· 9579 9818 "version": "2.0.3", 9580 9819 "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 9581 9820 "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 9582 - "dev": true, 9583 - "peer": true, 9584 9821 "engines": { 9585 9822 "node": ">=6" 9586 9823 } ··· 9601 9838 "version": "1.1.0", 9602 9839 "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", 9603 9840 "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" 9841 + }, 9842 + "node_modules/devlop": { 9843 + "version": "1.1.0", 9844 + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", 9845 + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", 9846 + "dependencies": { 9847 + "dequal": "^2.0.0" 9848 + }, 9849 + "funding": { 9850 + "type": "github", 9851 + "url": "https://github.com/sponsors/wooorm" 9852 + } 9604 9853 }, 9605 9854 "node_modules/dir-glob": { 9606 9855 "version": "3.0.1", ··· 9980 10229 "url": "https://github.com/sponsors/ljharb" 9981 10230 } 9982 10231 }, 10232 + "node_modules/esast-util-from-estree": { 10233 + "version": "2.0.0", 10234 + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", 10235 + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", 10236 + "dependencies": { 10237 + "@types/estree-jsx": "^1.0.0", 10238 + "devlop": "^1.0.0", 10239 + "estree-util-visit": "^2.0.0", 10240 + "unist-util-position-from-estree": "^2.0.0" 10241 + }, 10242 + "funding": { 10243 + "type": "opencollective", 10244 + "url": "https://opencollective.com/unified" 10245 + } 10246 + }, 10247 + "node_modules/esast-util-from-js": { 10248 + "version": "2.0.1", 10249 + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", 10250 + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", 10251 + "dependencies": { 10252 + "@types/estree-jsx": "^1.0.0", 10253 + "acorn": "^8.0.0", 10254 + "esast-util-from-estree": "^2.0.0", 10255 + "vfile-message": "^4.0.0" 10256 + }, 10257 + "funding": { 10258 + "type": "opencollective", 10259 + "url": "https://opencollective.com/unified" 10260 + } 10261 + }, 9983 10262 "node_modules/esbuild": { 9984 10263 "version": "0.18.20", 9985 10264 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", ··· 10478 10757 "node": ">=4.0" 10479 10758 } 10480 10759 }, 10760 + "node_modules/estree-util-attach-comments": { 10761 + "version": "3.0.0", 10762 + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", 10763 + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", 10764 + "dependencies": { 10765 + "@types/estree": "^1.0.0" 10766 + }, 10767 + "funding": { 10768 + "type": "opencollective", 10769 + "url": "https://opencollective.com/unified" 10770 + } 10771 + }, 10772 + "node_modules/estree-util-build-jsx": { 10773 + "version": "3.0.1", 10774 + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", 10775 + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", 10776 + "dependencies": { 10777 + "@types/estree-jsx": "^1.0.0", 10778 + "devlop": "^1.0.0", 10779 + "estree-util-is-identifier-name": "^3.0.0", 10780 + "estree-walker": "^3.0.0" 10781 + }, 10782 + "funding": { 10783 + "type": "opencollective", 10784 + "url": "https://opencollective.com/unified" 10785 + } 10786 + }, 10787 + "node_modules/estree-util-build-jsx/node_modules/estree-walker": { 10788 + "version": "3.0.3", 10789 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 10790 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 10791 + "dependencies": { 10792 + "@types/estree": "^1.0.0" 10793 + } 10794 + }, 10795 + "node_modules/estree-util-is-identifier-name": { 10796 + "version": "3.0.0", 10797 + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", 10798 + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", 10799 + "funding": { 10800 + "type": "opencollective", 10801 + "url": "https://opencollective.com/unified" 10802 + } 10803 + }, 10804 + "node_modules/estree-util-scope": { 10805 + "version": "1.0.0", 10806 + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", 10807 + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", 10808 + "dependencies": { 10809 + "@types/estree": "^1.0.0", 10810 + "devlop": "^1.0.0" 10811 + }, 10812 + "funding": { 10813 + "type": "opencollective", 10814 + "url": "https://opencollective.com/unified" 10815 + } 10816 + }, 10817 + "node_modules/estree-util-to-js": { 10818 + "version": "2.0.0", 10819 + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", 10820 + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", 10821 + "dependencies": { 10822 + "@types/estree-jsx": "^1.0.0", 10823 + "astring": "^1.8.0", 10824 + "source-map": "^0.7.0" 10825 + }, 10826 + "funding": { 10827 + "type": "opencollective", 10828 + "url": "https://opencollective.com/unified" 10829 + } 10830 + }, 10831 + "node_modules/estree-util-to-js/node_modules/source-map": { 10832 + "version": "0.7.6", 10833 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 10834 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 10835 + "engines": { 10836 + "node": ">= 12" 10837 + } 10838 + }, 10839 + "node_modules/estree-util-visit": { 10840 + "version": "2.0.0", 10841 + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", 10842 + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", 10843 + "dependencies": { 10844 + "@types/estree-jsx": "^1.0.0", 10845 + "@types/unist": "^3.0.0" 10846 + }, 10847 + "funding": { 10848 + "type": "opencollective", 10849 + "url": "https://opencollective.com/unified" 10850 + } 10851 + }, 10481 10852 "node_modules/estree-walker": { 10482 10853 "version": "2.0.2", 10483 10854 "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", ··· 10564 10935 "node": ">=12.0.0" 10565 10936 } 10566 10937 }, 10938 + "node_modules/extend": { 10939 + "version": "3.0.2", 10940 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 10941 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 10942 + }, 10567 10943 "node_modules/external-editor": { 10568 10944 "version": "3.1.0", 10569 10945 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", ··· 11233 11609 "node": ">= 0.4" 11234 11610 } 11235 11611 }, 11612 + "node_modules/hast-util-to-estree": { 11613 + "version": "3.1.3", 11614 + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", 11615 + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", 11616 + "dependencies": { 11617 + "@types/estree": "^1.0.0", 11618 + "@types/estree-jsx": "^1.0.0", 11619 + "@types/hast": "^3.0.0", 11620 + "comma-separated-tokens": "^2.0.0", 11621 + "devlop": "^1.0.0", 11622 + "estree-util-attach-comments": "^3.0.0", 11623 + "estree-util-is-identifier-name": "^3.0.0", 11624 + "hast-util-whitespace": "^3.0.0", 11625 + "mdast-util-mdx-expression": "^2.0.0", 11626 + "mdast-util-mdx-jsx": "^3.0.0", 11627 + "mdast-util-mdxjs-esm": "^2.0.0", 11628 + "property-information": "^7.0.0", 11629 + "space-separated-tokens": "^2.0.0", 11630 + "style-to-js": "^1.0.0", 11631 + "unist-util-position": "^5.0.0", 11632 + "zwitch": "^2.0.0" 11633 + }, 11634 + "funding": { 11635 + "type": "opencollective", 11636 + "url": "https://opencollective.com/unified" 11637 + } 11638 + }, 11639 + "node_modules/hast-util-to-jsx-runtime": { 11640 + "version": "2.3.6", 11641 + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", 11642 + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", 11643 + "dependencies": { 11644 + "@types/estree": "^1.0.0", 11645 + "@types/hast": "^3.0.0", 11646 + "@types/unist": "^3.0.0", 11647 + "comma-separated-tokens": "^2.0.0", 11648 + "devlop": "^1.0.0", 11649 + "estree-util-is-identifier-name": "^3.0.0", 11650 + "hast-util-whitespace": "^3.0.0", 11651 + "mdast-util-mdx-expression": "^2.0.0", 11652 + "mdast-util-mdx-jsx": "^3.0.0", 11653 + "mdast-util-mdxjs-esm": "^2.0.0", 11654 + "property-information": "^7.0.0", 11655 + "space-separated-tokens": "^2.0.0", 11656 + "style-to-js": "^1.0.0", 11657 + "unist-util-position": "^5.0.0", 11658 + "vfile-message": "^4.0.0" 11659 + }, 11660 + "funding": { 11661 + "type": "opencollective", 11662 + "url": "https://opencollective.com/unified" 11663 + } 11664 + }, 11665 + "node_modules/hast-util-whitespace": { 11666 + "version": "3.0.0", 11667 + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", 11668 + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", 11669 + "dependencies": { 11670 + "@types/hast": "^3.0.0" 11671 + }, 11672 + "funding": { 11673 + "type": "opencollective", 11674 + "url": "https://opencollective.com/unified" 11675 + } 11676 + }, 11236 11677 "node_modules/html-escaper": { 11237 11678 "version": "2.0.2", 11238 11679 "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", ··· 11487 11928 "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 11488 11929 "dev": true 11489 11930 }, 11931 + "node_modules/inline-style-parser": { 11932 + "version": "0.2.4", 11933 + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", 11934 + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" 11935 + }, 11490 11936 "node_modules/inquirer": { 11491 11937 "version": "12.5.0", 11492 11938 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.5.0.tgz", ··· 11527 11973 "node": ">= 0.4" 11528 11974 } 11529 11975 }, 11976 + "node_modules/is-alphabetical": { 11977 + "version": "2.0.1", 11978 + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", 11979 + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", 11980 + "funding": { 11981 + "type": "github", 11982 + "url": "https://github.com/sponsors/wooorm" 11983 + } 11984 + }, 11985 + "node_modules/is-alphanumerical": { 11986 + "version": "2.0.1", 11987 + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", 11988 + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", 11989 + "dependencies": { 11990 + "is-alphabetical": "^2.0.0", 11991 + "is-decimal": "^2.0.0" 11992 + }, 11993 + "funding": { 11994 + "type": "github", 11995 + "url": "https://github.com/sponsors/wooorm" 11996 + } 11997 + }, 11530 11998 "node_modules/is-arguments": { 11531 11999 "version": "1.2.0", 11532 12000 "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", ··· 11698 12166 "url": "https://github.com/sponsors/ljharb" 11699 12167 } 11700 12168 }, 12169 + "node_modules/is-decimal": { 12170 + "version": "2.0.1", 12171 + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", 12172 + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", 12173 + "funding": { 12174 + "type": "github", 12175 + "url": "https://github.com/sponsors/wooorm" 12176 + } 12177 + }, 11701 12178 "node_modules/is-docker": { 11702 12179 "version": "2.2.1", 11703 12180 "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", ··· 11776 12253 "node": ">=0.10.0" 11777 12254 } 11778 12255 }, 12256 + "node_modules/is-hexadecimal": { 12257 + "version": "2.0.1", 12258 + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", 12259 + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", 12260 + "funding": { 12261 + "type": "github", 12262 + "url": "https://github.com/sponsors/wooorm" 12263 + } 12264 + }, 11779 12265 "node_modules/is-json": { 11780 12266 "version": "2.0.1", 11781 12267 "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", ··· 11826 12312 "dev": true, 11827 12313 "engines": { 11828 12314 "node": ">=8" 12315 + } 12316 + }, 12317 + "node_modules/is-plain-obj": { 12318 + "version": "4.1.0", 12319 + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", 12320 + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", 12321 + "engines": { 12322 + "node": ">=12" 12323 + }, 12324 + "funding": { 12325 + "url": "https://github.com/sponsors/sindresorhus" 11829 12326 } 11830 12327 }, 11831 12328 "node_modules/is-reference": { ··· 12701 13198 "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", 12702 13199 "dev": true 12703 13200 }, 13201 + "node_modules/longest-streak": { 13202 + "version": "3.1.0", 13203 + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", 13204 + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", 13205 + "funding": { 13206 + "type": "github", 13207 + "url": "https://github.com/sponsors/wooorm" 13208 + } 13209 + }, 12704 13210 "node_modules/loose-envify": { 12705 13211 "version": "1.4.0", 12706 13212 "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", ··· 12806 13312 "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", 12807 13313 "dev": true 12808 13314 }, 13315 + "node_modules/markdown-extensions": { 13316 + "version": "2.0.0", 13317 + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", 13318 + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", 13319 + "engines": { 13320 + "node": ">=16" 13321 + }, 13322 + "funding": { 13323 + "url": "https://github.com/sponsors/sindresorhus" 13324 + } 13325 + }, 12809 13326 "node_modules/math-intrinsics": { 12810 13327 "version": "1.1.0", 12811 13328 "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", ··· 12815 13332 "node": ">= 0.4" 12816 13333 } 12817 13334 }, 13335 + "node_modules/mdast-util-from-markdown": { 13336 + "version": "2.0.2", 13337 + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", 13338 + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", 13339 + "dependencies": { 13340 + "@types/mdast": "^4.0.0", 13341 + "@types/unist": "^3.0.0", 13342 + "decode-named-character-reference": "^1.0.0", 13343 + "devlop": "^1.0.0", 13344 + "mdast-util-to-string": "^4.0.0", 13345 + "micromark": "^4.0.0", 13346 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 13347 + "micromark-util-decode-string": "^2.0.0", 13348 + "micromark-util-normalize-identifier": "^2.0.0", 13349 + "micromark-util-symbol": "^2.0.0", 13350 + "micromark-util-types": "^2.0.0", 13351 + "unist-util-stringify-position": "^4.0.0" 13352 + }, 13353 + "funding": { 13354 + "type": "opencollective", 13355 + "url": "https://opencollective.com/unified" 13356 + } 13357 + }, 13358 + "node_modules/mdast-util-mdx": { 13359 + "version": "3.0.0", 13360 + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", 13361 + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", 13362 + "dependencies": { 13363 + "mdast-util-from-markdown": "^2.0.0", 13364 + "mdast-util-mdx-expression": "^2.0.0", 13365 + "mdast-util-mdx-jsx": "^3.0.0", 13366 + "mdast-util-mdxjs-esm": "^2.0.0", 13367 + "mdast-util-to-markdown": "^2.0.0" 13368 + }, 13369 + "funding": { 13370 + "type": "opencollective", 13371 + "url": "https://opencollective.com/unified" 13372 + } 13373 + }, 13374 + "node_modules/mdast-util-mdx-expression": { 13375 + "version": "2.0.1", 13376 + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", 13377 + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", 13378 + "dependencies": { 13379 + "@types/estree-jsx": "^1.0.0", 13380 + "@types/hast": "^3.0.0", 13381 + "@types/mdast": "^4.0.0", 13382 + "devlop": "^1.0.0", 13383 + "mdast-util-from-markdown": "^2.0.0", 13384 + "mdast-util-to-markdown": "^2.0.0" 13385 + }, 13386 + "funding": { 13387 + "type": "opencollective", 13388 + "url": "https://opencollective.com/unified" 13389 + } 13390 + }, 13391 + "node_modules/mdast-util-mdx-jsx": { 13392 + "version": "3.2.0", 13393 + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", 13394 + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", 13395 + "dependencies": { 13396 + "@types/estree-jsx": "^1.0.0", 13397 + "@types/hast": "^3.0.0", 13398 + "@types/mdast": "^4.0.0", 13399 + "@types/unist": "^3.0.0", 13400 + "ccount": "^2.0.0", 13401 + "devlop": "^1.1.0", 13402 + "mdast-util-from-markdown": "^2.0.0", 13403 + "mdast-util-to-markdown": "^2.0.0", 13404 + "parse-entities": "^4.0.0", 13405 + "stringify-entities": "^4.0.0", 13406 + "unist-util-stringify-position": "^4.0.0", 13407 + "vfile-message": "^4.0.0" 13408 + }, 13409 + "funding": { 13410 + "type": "opencollective", 13411 + "url": "https://opencollective.com/unified" 13412 + } 13413 + }, 13414 + "node_modules/mdast-util-mdxjs-esm": { 13415 + "version": "2.0.1", 13416 + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", 13417 + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", 13418 + "dependencies": { 13419 + "@types/estree-jsx": "^1.0.0", 13420 + "@types/hast": "^3.0.0", 13421 + "@types/mdast": "^4.0.0", 13422 + "devlop": "^1.0.0", 13423 + "mdast-util-from-markdown": "^2.0.0", 13424 + "mdast-util-to-markdown": "^2.0.0" 13425 + }, 13426 + "funding": { 13427 + "type": "opencollective", 13428 + "url": "https://opencollective.com/unified" 13429 + } 13430 + }, 13431 + "node_modules/mdast-util-phrasing": { 13432 + "version": "4.1.0", 13433 + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", 13434 + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", 13435 + "dependencies": { 13436 + "@types/mdast": "^4.0.0", 13437 + "unist-util-is": "^6.0.0" 13438 + }, 13439 + "funding": { 13440 + "type": "opencollective", 13441 + "url": "https://opencollective.com/unified" 13442 + } 13443 + }, 13444 + "node_modules/mdast-util-to-hast": { 13445 + "version": "13.2.0", 13446 + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", 13447 + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", 13448 + "dependencies": { 13449 + "@types/hast": "^3.0.0", 13450 + "@types/mdast": "^4.0.0", 13451 + "@ungap/structured-clone": "^1.0.0", 13452 + "devlop": "^1.0.0", 13453 + "micromark-util-sanitize-uri": "^2.0.0", 13454 + "trim-lines": "^3.0.0", 13455 + "unist-util-position": "^5.0.0", 13456 + "unist-util-visit": "^5.0.0", 13457 + "vfile": "^6.0.0" 13458 + }, 13459 + "funding": { 13460 + "type": "opencollective", 13461 + "url": "https://opencollective.com/unified" 13462 + } 13463 + }, 13464 + "node_modules/mdast-util-to-markdown": { 13465 + "version": "2.1.2", 13466 + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", 13467 + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", 13468 + "dependencies": { 13469 + "@types/mdast": "^4.0.0", 13470 + "@types/unist": "^3.0.0", 13471 + "longest-streak": "^3.0.0", 13472 + "mdast-util-phrasing": "^4.0.0", 13473 + "mdast-util-to-string": "^4.0.0", 13474 + "micromark-util-classify-character": "^2.0.0", 13475 + "micromark-util-decode-string": "^2.0.0", 13476 + "unist-util-visit": "^5.0.0", 13477 + "zwitch": "^2.0.0" 13478 + }, 13479 + "funding": { 13480 + "type": "opencollective", 13481 + "url": "https://opencollective.com/unified" 13482 + } 13483 + }, 13484 + "node_modules/mdast-util-to-string": { 13485 + "version": "4.0.0", 13486 + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", 13487 + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", 13488 + "dependencies": { 13489 + "@types/mdast": "^4.0.0" 13490 + }, 13491 + "funding": { 13492 + "type": "opencollective", 13493 + "url": "https://opencollective.com/unified" 13494 + } 13495 + }, 12818 13496 "node_modules/mdn-data": { 12819 13497 "version": "2.0.30", 12820 13498 "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", ··· 12845 13523 "node": ">= 8" 12846 13524 } 12847 13525 }, 13526 + "node_modules/micromark": { 13527 + "version": "4.0.2", 13528 + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", 13529 + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", 13530 + "funding": [ 13531 + { 13532 + "type": "GitHub Sponsors", 13533 + "url": "https://github.com/sponsors/unifiedjs" 13534 + }, 13535 + { 13536 + "type": "OpenCollective", 13537 + "url": "https://opencollective.com/unified" 13538 + } 13539 + ], 13540 + "dependencies": { 13541 + "@types/debug": "^4.0.0", 13542 + "debug": "^4.0.0", 13543 + "decode-named-character-reference": "^1.0.0", 13544 + "devlop": "^1.0.0", 13545 + "micromark-core-commonmark": "^2.0.0", 13546 + "micromark-factory-space": "^2.0.0", 13547 + "micromark-util-character": "^2.0.0", 13548 + "micromark-util-chunked": "^2.0.0", 13549 + "micromark-util-combine-extensions": "^2.0.0", 13550 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 13551 + "micromark-util-encode": "^2.0.0", 13552 + "micromark-util-normalize-identifier": "^2.0.0", 13553 + "micromark-util-resolve-all": "^2.0.0", 13554 + "micromark-util-sanitize-uri": "^2.0.0", 13555 + "micromark-util-subtokenize": "^2.0.0", 13556 + "micromark-util-symbol": "^2.0.0", 13557 + "micromark-util-types": "^2.0.0" 13558 + } 13559 + }, 13560 + "node_modules/micromark-core-commonmark": { 13561 + "version": "2.0.3", 13562 + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", 13563 + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", 13564 + "funding": [ 13565 + { 13566 + "type": "GitHub Sponsors", 13567 + "url": "https://github.com/sponsors/unifiedjs" 13568 + }, 13569 + { 13570 + "type": "OpenCollective", 13571 + "url": "https://opencollective.com/unified" 13572 + } 13573 + ], 13574 + "dependencies": { 13575 + "decode-named-character-reference": "^1.0.0", 13576 + "devlop": "^1.0.0", 13577 + "micromark-factory-destination": "^2.0.0", 13578 + "micromark-factory-label": "^2.0.0", 13579 + "micromark-factory-space": "^2.0.0", 13580 + "micromark-factory-title": "^2.0.0", 13581 + "micromark-factory-whitespace": "^2.0.0", 13582 + "micromark-util-character": "^2.0.0", 13583 + "micromark-util-chunked": "^2.0.0", 13584 + "micromark-util-classify-character": "^2.0.0", 13585 + "micromark-util-html-tag-name": "^2.0.0", 13586 + "micromark-util-normalize-identifier": "^2.0.0", 13587 + "micromark-util-resolve-all": "^2.0.0", 13588 + "micromark-util-subtokenize": "^2.0.0", 13589 + "micromark-util-symbol": "^2.0.0", 13590 + "micromark-util-types": "^2.0.0" 13591 + } 13592 + }, 13593 + "node_modules/micromark-extension-mdx-expression": { 13594 + "version": "3.0.1", 13595 + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", 13596 + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", 13597 + "funding": [ 13598 + { 13599 + "type": "GitHub Sponsors", 13600 + "url": "https://github.com/sponsors/unifiedjs" 13601 + }, 13602 + { 13603 + "type": "OpenCollective", 13604 + "url": "https://opencollective.com/unified" 13605 + } 13606 + ], 13607 + "dependencies": { 13608 + "@types/estree": "^1.0.0", 13609 + "devlop": "^1.0.0", 13610 + "micromark-factory-mdx-expression": "^2.0.0", 13611 + "micromark-factory-space": "^2.0.0", 13612 + "micromark-util-character": "^2.0.0", 13613 + "micromark-util-events-to-acorn": "^2.0.0", 13614 + "micromark-util-symbol": "^2.0.0", 13615 + "micromark-util-types": "^2.0.0" 13616 + } 13617 + }, 13618 + "node_modules/micromark-extension-mdx-jsx": { 13619 + "version": "3.0.2", 13620 + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", 13621 + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", 13622 + "dependencies": { 13623 + "@types/estree": "^1.0.0", 13624 + "devlop": "^1.0.0", 13625 + "estree-util-is-identifier-name": "^3.0.0", 13626 + "micromark-factory-mdx-expression": "^2.0.0", 13627 + "micromark-factory-space": "^2.0.0", 13628 + "micromark-util-character": "^2.0.0", 13629 + "micromark-util-events-to-acorn": "^2.0.0", 13630 + "micromark-util-symbol": "^2.0.0", 13631 + "micromark-util-types": "^2.0.0", 13632 + "vfile-message": "^4.0.0" 13633 + }, 13634 + "funding": { 13635 + "type": "opencollective", 13636 + "url": "https://opencollective.com/unified" 13637 + } 13638 + }, 13639 + "node_modules/micromark-extension-mdx-md": { 13640 + "version": "2.0.0", 13641 + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", 13642 + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", 13643 + "dependencies": { 13644 + "micromark-util-types": "^2.0.0" 13645 + }, 13646 + "funding": { 13647 + "type": "opencollective", 13648 + "url": "https://opencollective.com/unified" 13649 + } 13650 + }, 13651 + "node_modules/micromark-extension-mdxjs": { 13652 + "version": "3.0.0", 13653 + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", 13654 + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", 13655 + "dependencies": { 13656 + "acorn": "^8.0.0", 13657 + "acorn-jsx": "^5.0.0", 13658 + "micromark-extension-mdx-expression": "^3.0.0", 13659 + "micromark-extension-mdx-jsx": "^3.0.0", 13660 + "micromark-extension-mdx-md": "^2.0.0", 13661 + "micromark-extension-mdxjs-esm": "^3.0.0", 13662 + "micromark-util-combine-extensions": "^2.0.0", 13663 + "micromark-util-types": "^2.0.0" 13664 + }, 13665 + "funding": { 13666 + "type": "opencollective", 13667 + "url": "https://opencollective.com/unified" 13668 + } 13669 + }, 13670 + "node_modules/micromark-extension-mdxjs-esm": { 13671 + "version": "3.0.0", 13672 + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", 13673 + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", 13674 + "dependencies": { 13675 + "@types/estree": "^1.0.0", 13676 + "devlop": "^1.0.0", 13677 + "micromark-core-commonmark": "^2.0.0", 13678 + "micromark-util-character": "^2.0.0", 13679 + "micromark-util-events-to-acorn": "^2.0.0", 13680 + "micromark-util-symbol": "^2.0.0", 13681 + "micromark-util-types": "^2.0.0", 13682 + "unist-util-position-from-estree": "^2.0.0", 13683 + "vfile-message": "^4.0.0" 13684 + }, 13685 + "funding": { 13686 + "type": "opencollective", 13687 + "url": "https://opencollective.com/unified" 13688 + } 13689 + }, 13690 + "node_modules/micromark-factory-destination": { 13691 + "version": "2.0.1", 13692 + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", 13693 + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", 13694 + "funding": [ 13695 + { 13696 + "type": "GitHub Sponsors", 13697 + "url": "https://github.com/sponsors/unifiedjs" 13698 + }, 13699 + { 13700 + "type": "OpenCollective", 13701 + "url": "https://opencollective.com/unified" 13702 + } 13703 + ], 13704 + "dependencies": { 13705 + "micromark-util-character": "^2.0.0", 13706 + "micromark-util-symbol": "^2.0.0", 13707 + "micromark-util-types": "^2.0.0" 13708 + } 13709 + }, 13710 + "node_modules/micromark-factory-label": { 13711 + "version": "2.0.1", 13712 + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", 13713 + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", 13714 + "funding": [ 13715 + { 13716 + "type": "GitHub Sponsors", 13717 + "url": "https://github.com/sponsors/unifiedjs" 13718 + }, 13719 + { 13720 + "type": "OpenCollective", 13721 + "url": "https://opencollective.com/unified" 13722 + } 13723 + ], 13724 + "dependencies": { 13725 + "devlop": "^1.0.0", 13726 + "micromark-util-character": "^2.0.0", 13727 + "micromark-util-symbol": "^2.0.0", 13728 + "micromark-util-types": "^2.0.0" 13729 + } 13730 + }, 13731 + "node_modules/micromark-factory-mdx-expression": { 13732 + "version": "2.0.3", 13733 + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", 13734 + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", 13735 + "funding": [ 13736 + { 13737 + "type": "GitHub Sponsors", 13738 + "url": "https://github.com/sponsors/unifiedjs" 13739 + }, 13740 + { 13741 + "type": "OpenCollective", 13742 + "url": "https://opencollective.com/unified" 13743 + } 13744 + ], 13745 + "dependencies": { 13746 + "@types/estree": "^1.0.0", 13747 + "devlop": "^1.0.0", 13748 + "micromark-factory-space": "^2.0.0", 13749 + "micromark-util-character": "^2.0.0", 13750 + "micromark-util-events-to-acorn": "^2.0.0", 13751 + "micromark-util-symbol": "^2.0.0", 13752 + "micromark-util-types": "^2.0.0", 13753 + "unist-util-position-from-estree": "^2.0.0", 13754 + "vfile-message": "^4.0.0" 13755 + } 13756 + }, 13757 + "node_modules/micromark-factory-space": { 13758 + "version": "2.0.1", 13759 + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", 13760 + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", 13761 + "funding": [ 13762 + { 13763 + "type": "GitHub Sponsors", 13764 + "url": "https://github.com/sponsors/unifiedjs" 13765 + }, 13766 + { 13767 + "type": "OpenCollective", 13768 + "url": "https://opencollective.com/unified" 13769 + } 13770 + ], 13771 + "dependencies": { 13772 + "micromark-util-character": "^2.0.0", 13773 + "micromark-util-types": "^2.0.0" 13774 + } 13775 + }, 13776 + "node_modules/micromark-factory-title": { 13777 + "version": "2.0.1", 13778 + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", 13779 + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", 13780 + "funding": [ 13781 + { 13782 + "type": "GitHub Sponsors", 13783 + "url": "https://github.com/sponsors/unifiedjs" 13784 + }, 13785 + { 13786 + "type": "OpenCollective", 13787 + "url": "https://opencollective.com/unified" 13788 + } 13789 + ], 13790 + "dependencies": { 13791 + "micromark-factory-space": "^2.0.0", 13792 + "micromark-util-character": "^2.0.0", 13793 + "micromark-util-symbol": "^2.0.0", 13794 + "micromark-util-types": "^2.0.0" 13795 + } 13796 + }, 13797 + "node_modules/micromark-factory-whitespace": { 13798 + "version": "2.0.1", 13799 + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", 13800 + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", 13801 + "funding": [ 13802 + { 13803 + "type": "GitHub Sponsors", 13804 + "url": "https://github.com/sponsors/unifiedjs" 13805 + }, 13806 + { 13807 + "type": "OpenCollective", 13808 + "url": "https://opencollective.com/unified" 13809 + } 13810 + ], 13811 + "dependencies": { 13812 + "micromark-factory-space": "^2.0.0", 13813 + "micromark-util-character": "^2.0.0", 13814 + "micromark-util-symbol": "^2.0.0", 13815 + "micromark-util-types": "^2.0.0" 13816 + } 13817 + }, 13818 + "node_modules/micromark-util-character": { 13819 + "version": "2.1.1", 13820 + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", 13821 + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", 13822 + "funding": [ 13823 + { 13824 + "type": "GitHub Sponsors", 13825 + "url": "https://github.com/sponsors/unifiedjs" 13826 + }, 13827 + { 13828 + "type": "OpenCollective", 13829 + "url": "https://opencollective.com/unified" 13830 + } 13831 + ], 13832 + "dependencies": { 13833 + "micromark-util-symbol": "^2.0.0", 13834 + "micromark-util-types": "^2.0.0" 13835 + } 13836 + }, 13837 + "node_modules/micromark-util-chunked": { 13838 + "version": "2.0.1", 13839 + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", 13840 + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", 13841 + "funding": [ 13842 + { 13843 + "type": "GitHub Sponsors", 13844 + "url": "https://github.com/sponsors/unifiedjs" 13845 + }, 13846 + { 13847 + "type": "OpenCollective", 13848 + "url": "https://opencollective.com/unified" 13849 + } 13850 + ], 13851 + "dependencies": { 13852 + "micromark-util-symbol": "^2.0.0" 13853 + } 13854 + }, 13855 + "node_modules/micromark-util-classify-character": { 13856 + "version": "2.0.1", 13857 + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", 13858 + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", 13859 + "funding": [ 13860 + { 13861 + "type": "GitHub Sponsors", 13862 + "url": "https://github.com/sponsors/unifiedjs" 13863 + }, 13864 + { 13865 + "type": "OpenCollective", 13866 + "url": "https://opencollective.com/unified" 13867 + } 13868 + ], 13869 + "dependencies": { 13870 + "micromark-util-character": "^2.0.0", 13871 + "micromark-util-symbol": "^2.0.0", 13872 + "micromark-util-types": "^2.0.0" 13873 + } 13874 + }, 13875 + "node_modules/micromark-util-combine-extensions": { 13876 + "version": "2.0.1", 13877 + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", 13878 + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", 13879 + "funding": [ 13880 + { 13881 + "type": "GitHub Sponsors", 13882 + "url": "https://github.com/sponsors/unifiedjs" 13883 + }, 13884 + { 13885 + "type": "OpenCollective", 13886 + "url": "https://opencollective.com/unified" 13887 + } 13888 + ], 13889 + "dependencies": { 13890 + "micromark-util-chunked": "^2.0.0", 13891 + "micromark-util-types": "^2.0.0" 13892 + } 13893 + }, 13894 + "node_modules/micromark-util-decode-numeric-character-reference": { 13895 + "version": "2.0.2", 13896 + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", 13897 + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", 13898 + "funding": [ 13899 + { 13900 + "type": "GitHub Sponsors", 13901 + "url": "https://github.com/sponsors/unifiedjs" 13902 + }, 13903 + { 13904 + "type": "OpenCollective", 13905 + "url": "https://opencollective.com/unified" 13906 + } 13907 + ], 13908 + "dependencies": { 13909 + "micromark-util-symbol": "^2.0.0" 13910 + } 13911 + }, 13912 + "node_modules/micromark-util-decode-string": { 13913 + "version": "2.0.1", 13914 + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", 13915 + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", 13916 + "funding": [ 13917 + { 13918 + "type": "GitHub Sponsors", 13919 + "url": "https://github.com/sponsors/unifiedjs" 13920 + }, 13921 + { 13922 + "type": "OpenCollective", 13923 + "url": "https://opencollective.com/unified" 13924 + } 13925 + ], 13926 + "dependencies": { 13927 + "decode-named-character-reference": "^1.0.0", 13928 + "micromark-util-character": "^2.0.0", 13929 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 13930 + "micromark-util-symbol": "^2.0.0" 13931 + } 13932 + }, 13933 + "node_modules/micromark-util-encode": { 13934 + "version": "2.0.1", 13935 + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", 13936 + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", 13937 + "funding": [ 13938 + { 13939 + "type": "GitHub Sponsors", 13940 + "url": "https://github.com/sponsors/unifiedjs" 13941 + }, 13942 + { 13943 + "type": "OpenCollective", 13944 + "url": "https://opencollective.com/unified" 13945 + } 13946 + ] 13947 + }, 13948 + "node_modules/micromark-util-events-to-acorn": { 13949 + "version": "2.0.3", 13950 + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", 13951 + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", 13952 + "funding": [ 13953 + { 13954 + "type": "GitHub Sponsors", 13955 + "url": "https://github.com/sponsors/unifiedjs" 13956 + }, 13957 + { 13958 + "type": "OpenCollective", 13959 + "url": "https://opencollective.com/unified" 13960 + } 13961 + ], 13962 + "dependencies": { 13963 + "@types/estree": "^1.0.0", 13964 + "@types/unist": "^3.0.0", 13965 + "devlop": "^1.0.0", 13966 + "estree-util-visit": "^2.0.0", 13967 + "micromark-util-symbol": "^2.0.0", 13968 + "micromark-util-types": "^2.0.0", 13969 + "vfile-message": "^4.0.0" 13970 + } 13971 + }, 13972 + "node_modules/micromark-util-html-tag-name": { 13973 + "version": "2.0.1", 13974 + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", 13975 + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", 13976 + "funding": [ 13977 + { 13978 + "type": "GitHub Sponsors", 13979 + "url": "https://github.com/sponsors/unifiedjs" 13980 + }, 13981 + { 13982 + "type": "OpenCollective", 13983 + "url": "https://opencollective.com/unified" 13984 + } 13985 + ] 13986 + }, 13987 + "node_modules/micromark-util-normalize-identifier": { 13988 + "version": "2.0.1", 13989 + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", 13990 + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", 13991 + "funding": [ 13992 + { 13993 + "type": "GitHub Sponsors", 13994 + "url": "https://github.com/sponsors/unifiedjs" 13995 + }, 13996 + { 13997 + "type": "OpenCollective", 13998 + "url": "https://opencollective.com/unified" 13999 + } 14000 + ], 14001 + "dependencies": { 14002 + "micromark-util-symbol": "^2.0.0" 14003 + } 14004 + }, 14005 + "node_modules/micromark-util-resolve-all": { 14006 + "version": "2.0.1", 14007 + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", 14008 + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", 14009 + "funding": [ 14010 + { 14011 + "type": "GitHub Sponsors", 14012 + "url": "https://github.com/sponsors/unifiedjs" 14013 + }, 14014 + { 14015 + "type": "OpenCollective", 14016 + "url": "https://opencollective.com/unified" 14017 + } 14018 + ], 14019 + "dependencies": { 14020 + "micromark-util-types": "^2.0.0" 14021 + } 14022 + }, 14023 + "node_modules/micromark-util-sanitize-uri": { 14024 + "version": "2.0.1", 14025 + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", 14026 + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", 14027 + "funding": [ 14028 + { 14029 + "type": "GitHub Sponsors", 14030 + "url": "https://github.com/sponsors/unifiedjs" 14031 + }, 14032 + { 14033 + "type": "OpenCollective", 14034 + "url": "https://opencollective.com/unified" 14035 + } 14036 + ], 14037 + "dependencies": { 14038 + "micromark-util-character": "^2.0.0", 14039 + "micromark-util-encode": "^2.0.0", 14040 + "micromark-util-symbol": "^2.0.0" 14041 + } 14042 + }, 14043 + "node_modules/micromark-util-subtokenize": { 14044 + "version": "2.1.0", 14045 + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", 14046 + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", 14047 + "funding": [ 14048 + { 14049 + "type": "GitHub Sponsors", 14050 + "url": "https://github.com/sponsors/unifiedjs" 14051 + }, 14052 + { 14053 + "type": "OpenCollective", 14054 + "url": "https://opencollective.com/unified" 14055 + } 14056 + ], 14057 + "dependencies": { 14058 + "devlop": "^1.0.0", 14059 + "micromark-util-chunked": "^2.0.0", 14060 + "micromark-util-symbol": "^2.0.0", 14061 + "micromark-util-types": "^2.0.0" 14062 + } 14063 + }, 14064 + "node_modules/micromark-util-symbol": { 14065 + "version": "2.0.1", 14066 + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", 14067 + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", 14068 + "funding": [ 14069 + { 14070 + "type": "GitHub Sponsors", 14071 + "url": "https://github.com/sponsors/unifiedjs" 14072 + }, 14073 + { 14074 + "type": "OpenCollective", 14075 + "url": "https://opencollective.com/unified" 14076 + } 14077 + ] 14078 + }, 14079 + "node_modules/micromark-util-types": { 14080 + "version": "2.0.2", 14081 + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", 14082 + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", 14083 + "funding": [ 14084 + { 14085 + "type": "GitHub Sponsors", 14086 + "url": "https://github.com/sponsors/unifiedjs" 14087 + }, 14088 + { 14089 + "type": "OpenCollective", 14090 + "url": "https://opencollective.com/unified" 14091 + } 14092 + ] 14093 + }, 12848 14094 "node_modules/micromatch": { 12849 14095 "version": "4.0.8", 12850 14096 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", ··· 12956 14202 "node_modules/ms": { 12957 14203 "version": "2.1.3", 12958 14204 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 12959 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 12960 - "dev": true 14205 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 12961 14206 }, 12962 14207 "node_modules/msgpackr": { 12963 14208 "version": "1.11.4", ··· 13946 15191 "node": ">=6" 13947 15192 } 13948 15193 }, 15194 + "node_modules/parse-entities": { 15195 + "version": "4.0.2", 15196 + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", 15197 + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", 15198 + "dependencies": { 15199 + "@types/unist": "^2.0.0", 15200 + "character-entities-legacy": "^3.0.0", 15201 + "character-reference-invalid": "^2.0.0", 15202 + "decode-named-character-reference": "^1.0.0", 15203 + "is-alphanumerical": "^2.0.0", 15204 + "is-decimal": "^2.0.0", 15205 + "is-hexadecimal": "^2.0.0" 15206 + }, 15207 + "funding": { 15208 + "type": "github", 15209 + "url": "https://github.com/sponsors/wooorm" 15210 + } 15211 + }, 15212 + "node_modules/parse-entities/node_modules/@types/unist": { 15213 + "version": "2.0.11", 15214 + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", 15215 + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" 15216 + }, 13949 15217 "node_modules/parse-json": { 13950 15218 "version": "5.2.0", 13951 15219 "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", ··· 14520 15788 "react-is": "^16.13.1" 14521 15789 } 14522 15790 }, 15791 + "node_modules/property-information": { 15792 + "version": "7.1.0", 15793 + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", 15794 + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", 15795 + "funding": { 15796 + "type": "github", 15797 + "url": "https://github.com/sponsors/wooorm" 15798 + } 15799 + }, 14523 15800 "node_modules/proto-list": { 14524 15801 "version": "1.2.4", 14525 15802 "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", ··· 14804 16081 "node": ">= 4" 14805 16082 } 14806 16083 }, 16084 + "node_modules/recma-build-jsx": { 16085 + "version": "1.0.0", 16086 + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", 16087 + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", 16088 + "dependencies": { 16089 + "@types/estree": "^1.0.0", 16090 + "estree-util-build-jsx": "^3.0.0", 16091 + "vfile": "^6.0.0" 16092 + }, 16093 + "funding": { 16094 + "type": "opencollective", 16095 + "url": "https://opencollective.com/unified" 16096 + } 16097 + }, 16098 + "node_modules/recma-jsx": { 16099 + "version": "1.0.1", 16100 + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", 16101 + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", 16102 + "dependencies": { 16103 + "acorn-jsx": "^5.0.0", 16104 + "estree-util-to-js": "^2.0.0", 16105 + "recma-parse": "^1.0.0", 16106 + "recma-stringify": "^1.0.0", 16107 + "unified": "^11.0.0" 16108 + }, 16109 + "funding": { 16110 + "type": "opencollective", 16111 + "url": "https://opencollective.com/unified" 16112 + }, 16113 + "peerDependencies": { 16114 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 16115 + } 16116 + }, 16117 + "node_modules/recma-parse": { 16118 + "version": "1.0.0", 16119 + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", 16120 + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", 16121 + "dependencies": { 16122 + "@types/estree": "^1.0.0", 16123 + "esast-util-from-js": "^2.0.0", 16124 + "unified": "^11.0.0", 16125 + "vfile": "^6.0.0" 16126 + }, 16127 + "funding": { 16128 + "type": "opencollective", 16129 + "url": "https://opencollective.com/unified" 16130 + } 16131 + }, 16132 + "node_modules/recma-stringify": { 16133 + "version": "1.0.0", 16134 + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", 16135 + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", 16136 + "dependencies": { 16137 + "@types/estree": "^1.0.0", 16138 + "estree-util-to-js": "^2.0.0", 16139 + "unified": "^11.0.0", 16140 + "vfile": "^6.0.0" 16141 + }, 16142 + "funding": { 16143 + "type": "opencollective", 16144 + "url": "https://opencollective.com/unified" 16145 + } 16146 + }, 14807 16147 "node_modules/redent": { 14808 16148 "version": "3.0.0", 14809 16149 "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", ··· 14904 16244 "url": "https://github.com/sponsors/sindresorhus" 14905 16245 } 14906 16246 }, 16247 + "node_modules/rehype-recma": { 16248 + "version": "1.0.0", 16249 + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", 16250 + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", 16251 + "dependencies": { 16252 + "@types/estree": "^1.0.0", 16253 + "@types/hast": "^3.0.0", 16254 + "hast-util-to-estree": "^3.0.0" 16255 + }, 16256 + "funding": { 16257 + "type": "opencollective", 16258 + "url": "https://opencollective.com/unified" 16259 + } 16260 + }, 14907 16261 "node_modules/relateurl": { 14908 16262 "version": "0.2.7", 14909 16263 "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", ··· 14915 16269 "node": ">= 0.10" 14916 16270 } 14917 16271 }, 16272 + "node_modules/remark-mdx": { 16273 + "version": "3.1.1", 16274 + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", 16275 + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", 16276 + "dependencies": { 16277 + "mdast-util-mdx": "^3.0.0", 16278 + "micromark-extension-mdxjs": "^3.0.0" 16279 + }, 16280 + "funding": { 16281 + "type": "opencollective", 16282 + "url": "https://opencollective.com/unified" 16283 + } 16284 + }, 16285 + "node_modules/remark-parse": { 16286 + "version": "11.0.0", 16287 + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", 16288 + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", 16289 + "dependencies": { 16290 + "@types/mdast": "^4.0.0", 16291 + "mdast-util-from-markdown": "^2.0.0", 16292 + "micromark-util-types": "^2.0.0", 16293 + "unified": "^11.0.0" 16294 + }, 16295 + "funding": { 16296 + "type": "opencollective", 16297 + "url": "https://opencollective.com/unified" 16298 + } 16299 + }, 16300 + "node_modules/remark-rehype": { 16301 + "version": "11.1.2", 16302 + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", 16303 + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", 16304 + "dependencies": { 16305 + "@types/hast": "^3.0.0", 16306 + "@types/mdast": "^4.0.0", 16307 + "mdast-util-to-hast": "^13.0.0", 16308 + "unified": "^11.0.0", 16309 + "vfile": "^6.0.0" 16310 + }, 16311 + "funding": { 16312 + "type": "opencollective", 16313 + "url": "https://opencollective.com/unified" 16314 + } 16315 + }, 14918 16316 "node_modules/resolve": { 14919 16317 "version": "1.22.10", 14920 16318 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", ··· 15508 16906 "source-map": "^0.6.0" 15509 16907 } 15510 16908 }, 16909 + "node_modules/space-separated-tokens": { 16910 + "version": "2.0.2", 16911 + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", 16912 + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", 16913 + "funding": { 16914 + "type": "github", 16915 + "url": "https://github.com/sponsors/wooorm" 16916 + } 16917 + }, 15511 16918 "node_modules/srcset": { 15512 16919 "version": "5.0.1", 15513 16920 "resolved": "https://registry.npmjs.org/srcset/-/srcset-5.0.1.tgz", ··· 15849 17256 "url": "https://github.com/sponsors/ljharb" 15850 17257 } 15851 17258 }, 17259 + "node_modules/stringify-entities": { 17260 + "version": "4.0.4", 17261 + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", 17262 + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", 17263 + "dependencies": { 17264 + "character-entities-html4": "^2.0.0", 17265 + "character-entities-legacy": "^3.0.0" 17266 + }, 17267 + "funding": { 17268 + "type": "github", 17269 + "url": "https://github.com/sponsors/wooorm" 17270 + } 17271 + }, 15852 17272 "node_modules/strip-ansi": { 15853 17273 "version": "6.0.1", 15854 17274 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", ··· 15937 17357 "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", 15938 17358 "dev": true 15939 17359 }, 17360 + "node_modules/style-to-js": { 17361 + "version": "1.1.17", 17362 + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", 17363 + "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", 17364 + "dependencies": { 17365 + "style-to-object": "1.0.9" 17366 + } 17367 + }, 17368 + "node_modules/style-to-object": { 17369 + "version": "1.0.9", 17370 + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", 17371 + "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", 17372 + "dependencies": { 17373 + "inline-style-parser": "0.2.4" 17374 + } 17375 + }, 15940 17376 "node_modules/styled-jsx": { 15941 17377 "version": "5.1.6", 15942 17378 "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", ··· 16402 17838 "tree-kill": "cli.js" 16403 17839 } 16404 17840 }, 17841 + "node_modules/trim-lines": { 17842 + "version": "3.0.1", 17843 + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", 17844 + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", 17845 + "funding": { 17846 + "type": "github", 17847 + "url": "https://github.com/sponsors/wooorm" 17848 + } 17849 + }, 17850 + "node_modules/trough": { 17851 + "version": "2.2.0", 17852 + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", 17853 + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", 17854 + "funding": { 17855 + "type": "github", 17856 + "url": "https://github.com/sponsors/wooorm" 17857 + } 17858 + }, 16405 17859 "node_modules/ts-algebra": { 16406 17860 "version": "2.0.0", 16407 17861 "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", ··· 16685 18139 "url": "https://github.com/sponsors/sindresorhus" 16686 18140 } 16687 18141 }, 18142 + "node_modules/unified": { 18143 + "version": "11.0.5", 18144 + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", 18145 + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", 18146 + "dependencies": { 18147 + "@types/unist": "^3.0.0", 18148 + "bail": "^2.0.0", 18149 + "devlop": "^1.0.0", 18150 + "extend": "^3.0.0", 18151 + "is-plain-obj": "^4.0.0", 18152 + "trough": "^2.0.0", 18153 + "vfile": "^6.0.0" 18154 + }, 18155 + "funding": { 18156 + "type": "opencollective", 18157 + "url": "https://opencollective.com/unified" 18158 + } 18159 + }, 16688 18160 "node_modules/unique-string": { 16689 18161 "version": "3.0.0", 16690 18162 "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", ··· 16700 18172 "url": "https://github.com/sponsors/sindresorhus" 16701 18173 } 16702 18174 }, 18175 + "node_modules/unist-util-is": { 18176 + "version": "6.0.0", 18177 + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", 18178 + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", 18179 + "dependencies": { 18180 + "@types/unist": "^3.0.0" 18181 + }, 18182 + "funding": { 18183 + "type": "opencollective", 18184 + "url": "https://opencollective.com/unified" 18185 + } 18186 + }, 18187 + "node_modules/unist-util-position": { 18188 + "version": "5.0.0", 18189 + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", 18190 + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", 18191 + "dependencies": { 18192 + "@types/unist": "^3.0.0" 18193 + }, 18194 + "funding": { 18195 + "type": "opencollective", 18196 + "url": "https://opencollective.com/unified" 18197 + } 18198 + }, 18199 + "node_modules/unist-util-position-from-estree": { 18200 + "version": "2.0.0", 18201 + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", 18202 + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", 18203 + "dependencies": { 18204 + "@types/unist": "^3.0.0" 18205 + }, 18206 + "funding": { 18207 + "type": "opencollective", 18208 + "url": "https://opencollective.com/unified" 18209 + } 18210 + }, 18211 + "node_modules/unist-util-stringify-position": { 18212 + "version": "4.0.0", 18213 + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", 18214 + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", 18215 + "dependencies": { 18216 + "@types/unist": "^3.0.0" 18217 + }, 18218 + "funding": { 18219 + "type": "opencollective", 18220 + "url": "https://opencollective.com/unified" 18221 + } 18222 + }, 18223 + "node_modules/unist-util-visit": { 18224 + "version": "5.0.0", 18225 + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", 18226 + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", 18227 + "dependencies": { 18228 + "@types/unist": "^3.0.0", 18229 + "unist-util-is": "^6.0.0", 18230 + "unist-util-visit-parents": "^6.0.0" 18231 + }, 18232 + "funding": { 18233 + "type": "opencollective", 18234 + "url": "https://opencollective.com/unified" 18235 + } 18236 + }, 18237 + "node_modules/unist-util-visit-parents": { 18238 + "version": "6.0.1", 18239 + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", 18240 + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", 18241 + "dependencies": { 18242 + "@types/unist": "^3.0.0", 18243 + "unist-util-is": "^6.0.0" 18244 + }, 18245 + "funding": { 18246 + "type": "opencollective", 18247 + "url": "https://opencollective.com/unified" 18248 + } 18249 + }, 16703 18250 "node_modules/universalify": { 16704 18251 "version": "2.0.1", 16705 18252 "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", ··· 16903 18450 "dev": true, 16904 18451 "engines": { 16905 18452 "node": ">= 4" 18453 + } 18454 + }, 18455 + "node_modules/vfile": { 18456 + "version": "6.0.3", 18457 + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", 18458 + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", 18459 + "dependencies": { 18460 + "@types/unist": "^3.0.0", 18461 + "vfile-message": "^4.0.0" 18462 + }, 18463 + "funding": { 18464 + "type": "opencollective", 18465 + "url": "https://opencollective.com/unified" 18466 + } 18467 + }, 18468 + "node_modules/vfile-message": { 18469 + "version": "4.0.3", 18470 + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", 18471 + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", 18472 + "dependencies": { 18473 + "@types/unist": "^3.0.0", 18474 + "unist-util-stringify-position": "^4.0.0" 18475 + }, 18476 + "funding": { 18477 + "type": "opencollective", 18478 + "url": "https://opencollective.com/unified" 16906 18479 } 16907 18480 }, 16908 18481 "node_modules/vite": { ··· 17930 19503 }, 17931 19504 "funding": { 17932 19505 "url": "https://github.com/sponsors/sindresorhus" 19506 + } 19507 + }, 19508 + "node_modules/zwitch": { 19509 + "version": "2.0.4", 19510 + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", 19511 + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", 19512 + "funding": { 19513 + "type": "github", 19514 + "url": "https://github.com/sponsors/wooorm" 17933 19515 } 17934 19516 } 17935 19517 }
+4
src/webapp/package.json
··· 33 33 "@mantine/hooks": "^8.1.3", 34 34 "@mantine/modals": "^8.1.3", 35 35 "@mantine/notifications": "^8.1.3", 36 + "@mdx-js/loader": "^3.1.1", 37 + "@mdx-js/react": "^3.1.1", 38 + "@next/mdx": "^15.5.4", 36 39 "@tanstack/react-query": "^5.85.5", 40 + "@types/mdx": "^2.0.13", 37 41 "@vercel/analytics": "^1.5.0", 38 42 "date-fns": "^4.1.0", 39 43 "dayjs": "^1.11.13",