aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-03-23 18:02:45 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-03-23 18:07:21 +0100
commitfbd41d395916176dde11bb0e417f1210f34eb4ab (patch)
tree7384a50b1a90ba5909d8f93f589df661640681e6
parentSimplify compression (diff)
downloadblog-fbd41d395916176dde11bb0e417f1210f34eb4ab.tar.gz
blog-fbd41d395916176dde11bb0e417f1210f34eb4ab.tar.zst
blog-fbd41d395916176dde11bb0e417f1210f34eb4ab.zip
Add blog
Site structure follows SEO tips from https://johnnyreilly.com/how-we-fixed-my-seo * The blog pages have as simple of an URL as possible. To this end, the home page of the site is actually the first index page of the blog. * Customize the blog index page BlogListPage component to show the landing page as the first index page. * Rename /archive to /blog to avoid a dated feel. * Remove the date from post URLs using the slug property.
-rw-r--r--blog/2024-03-25-first-post.mdx17
-rw-r--r--blog/authors.yml10
-rw-r--r--docusaurus.config.ts37
-rw-r--r--i18n/en/code.json289
-rw-r--r--i18n/en/code.json.license6
-rw-r--r--i18n/en/docusaurus-plugin-content-blog/options.json14
-rw-r--r--i18n/en/docusaurus-plugin-content-blog/options.json.license5
-rw-r--r--i18n/en/docusaurus-theme-classic/footer.json22
-rw-r--r--i18n/en/docusaurus-theme-classic/footer.json.license5
-rw-r--r--i18n/en/docusaurus-theme-classic/navbar.json30
-rw-r--r--i18n/en/docusaurus-theme-classic/navbar.json.license5
-rw-r--r--package.json6
-rw-r--r--src/components/ActiveSectionProvider.tsx2
-rw-r--r--src/components/Landing.tsx31
-rw-r--r--src/components/landing/sections/Blog.module.css28
-rw-r--r--src/components/landing/sections/Blog.tsx95
-rw-r--r--src/components/landing/sections/Hero.module.css10
-rw-r--r--src/css/custom.css8
-rw-r--r--src/pages/index.tsx28
-rw-r--r--src/plugins/compressionPlugin.ts10
-rw-r--r--src/theme/BlogListPage.tsx18
-rw-r--r--src/theme/BlogSidebar/Desktop.module.css53
-rw-r--r--src/theme/BlogSidebar/Desktop.tsx55
-rw-r--r--src/theme/Footer/Copyright.tsx (renamed from src/theme/Footer/Copyright.jsx)5
-rw-r--r--src/theme/NavbarItem/NavbarNavLink.tsx (renamed from src/theme/NavbarItem/NavbarNavLink.jsx)4
-rw-r--r--src/theme/PaginatorNavLink.tsx17
-rw-r--r--src/theme/Root.tsx11
-rw-r--r--src/theme/SiteMetadata.jsx28
m---------third-party0
-rw-r--r--yarn.lock233
30 files changed, 894 insertions, 188 deletions
diff --git a/blog/2024-03-25-first-post.mdx b/blog/2024-03-25-first-post.mdx
new file mode 100644
index 0000000..e612116
--- /dev/null
+++ b/blog/2024-03-25-first-post.mdx
@@ -0,0 +1,17 @@
1---
2SPDX-FileCopyrightText: 2024 Kristóf Marussy
3SPDX-License-Identifier: CC-BY-4.0
4tags: [css]
5authors: kris
6slug: first-post
7---
8
9# First post
10
11## Section
12
13### Subsection
14
15#### Subsubsection
16
17Testing.
diff --git a/blog/authors.yml b/blog/authors.yml
new file mode 100644
index 0000000..12a86d9
--- /dev/null
+++ b/blog/authors.yml
@@ -0,0 +1,10 @@
1# SPDX-FileCopyrightText: 2024 Kristóf Marussy
2#
3# SPDX-License-Identifier: CC-BY-4.0
4
5kris:
6 name: Kristóf Marussy
7 title: Software engineering researcher, developer
8 url: https://marussy.com
9 image_url: 'https://marussy.com/profile.webp'
10 email: kristof@marussy.com
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index f19513a..57e8a8e 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -1,16 +1,20 @@
1/* 1/*
2 * Copyright (c) Facebook, Inc. and its affiliates. 2 * Copyright (c) Facebook, Inc. and its affiliates.
3 * Copyright (c) 2023 Kristóf Marussy <kristof@marussy.com> 3 * Copyright (c) 2023-2024 Kristóf Marussy <kristof@marussy.com>
4 * 4 *
5 * SPDX-License-Identifier: MIT 5 * SPDX-License-Identifier: MIT
6 */ 6 */
7 7
8import type { PluginOptions as ClassicThemeOptions } from '@docusaurus/theme-classic'; 8import type { Options as BlogOptions } from '@docusaurus/plugin-content-blog';
9import type { Options as PagesOptions } from '@docusaurus/plugin-content-pages';
10import type { Options as ClassicThemeOptions } from '@docusaurus/theme-classic';
9import type { UserThemeConfig } from '@docusaurus/theme-common'; 11import type { UserThemeConfig } from '@docusaurus/theme-common';
10import type { Config } from '@docusaurus/types'; 12import type { Config } from '@docusaurus/types';
11import { Config as SwcConfig } from '@swc/core'; 13import { Config as SwcConfig } from '@swc/core';
12import smartypants from 'remark-smartypants'; 14import smartypants from 'remark-smartypants';
13 15
16const remarkPlugins = [[smartypants, { dashes: 'oldschool' }]];
17
14export default { 18export default {
15 title: 'Kristóf Marussy', 19 title: 'Kristóf Marussy',
16 url: 'https://marussy.com', 20 url: 'https://marussy.com',
@@ -18,10 +22,23 @@ export default {
18 staticDirectories: ['third-party/static', 'static'], 22 staticDirectories: ['third-party/static', 'static'],
19 plugins: [ 23 plugins: [
20 [ 24 [
25 '@docusaurus/plugin-content-blog',
26 {
27 routeBasePath: '/',
28 archiveBasePath: 'blog',
29 remarkPlugins,
30 feedOptions: {
31 type: 'all',
32 title: 'Kristóf Marussy',
33 description: "Kristóf Marussy's Blog",
34 },
35 } satisfies BlogOptions,
36 ],
37 [
21 '@docusaurus/plugin-content-pages', 38 '@docusaurus/plugin-content-pages',
22 { 39 {
23 remarkPlugins: [[smartypants, { dashes: 'oldschool' }]], 40 remarkPlugins,
24 }, 41 } satisfies PagesOptions,
25 ], 42 ],
26 '@docusaurus/plugin-sitemap', 43 '@docusaurus/plugin-sitemap',
27 './src/plugins/compressionPlugin.ts', 44 './src/plugins/compressionPlugin.ts',
@@ -70,8 +87,8 @@ export default {
70 ], 87 ],
71 }, 88 },
72 { 89 {
73 label: 'CV', 90 label: 'Blog',
74 to: 'pathname:///cv.pdf', 91 to: '/blog',
75 }, 92 },
76 ], 93 ],
77 }, 94 },
@@ -84,6 +101,14 @@ export default {
84 label: 'About', 101 label: 'About',
85 to: '/', 102 to: '/',
86 }, 103 },
104 {
105 label: 'Blog',
106 to: '/blog',
107 },
108 {
109 label: 'Tags',
110 to: '/tags',
111 },
87 ], 112 ],
88 }, 113 },
89 ], 114 ],
diff --git a/i18n/en/code.json b/i18n/en/code.json
new file mode 100644
index 0000000..3bd3ef2
--- /dev/null
+++ b/i18n/en/code.json
@@ -0,0 +1,289 @@
1{
2 "theme.blog.archive.title": {
3 "message": "Blog",
4 "description": "The page & hero title of the blog archive page"
5 },
6 "theme.blog.archive.description": {
7 "message": "All the posts I ever wrote",
8 "description": "The page & hero description of the blog archive page"
9 },
10 "theme.blog.sidebar.navAriaLabel": {
11 "message": "Blog recent posts navigation",
12 "description": "The ARIA label for recent posts in the blog sidebar"
13 },
14 "theme.ErrorPageContent.title": {
15 "message": "This page crashed.",
16 "description": "The title of the fallback page when the page crashed"
17 },
18 "theme.BackToTopButton.buttonAriaLabel": {
19 "message": "Scroll back to top",
20 "description": "The ARIA label for the back to top button"
21 },
22 "theme.colorToggle.ariaLabel": {
23 "message": "Switch between dark and light mode (currently {mode})",
24 "description": "The ARIA label for the navbar color mode toggle"
25 },
26 "theme.colorToggle.ariaLabel.mode.dark": {
27 "message": "dark mode",
28 "description": "The name for the dark color mode"
29 },
30 "theme.colorToggle.ariaLabel.mode.light": {
31 "message": "light mode",
32 "description": "The name for the light color mode"
33 },
34 "theme.docs.breadcrumbs.navAriaLabel": {
35 "message": "Breadcrumbs",
36 "description": "The ARIA label for the breadcrumbs"
37 },
38 "theme.docs.DocCard.categoryDescription": {
39 "message": "{count} items",
40 "description": "The default description for a category card in the generated index about how many items this category includes"
41 },
42 "theme.common.headingLinkTitle": {
43 "message": "Direct link to {heading}",
44 "description": "Title for link to heading"
45 },
46 "theme.navbar.mobileVersionsDropdown.label": {
47 "message": "Versions",
48 "description": "The label for the navbar versions dropdown on mobile view"
49 },
50 "theme.tags.tagsListLabel": {
51 "message": "Tags:",
52 "description": "The label alongside a tag list"
53 },
54 "theme.blog.paginator.navAriaLabel": {
55 "message": "Blog list page navigation",
56 "description": "The ARIA label for the blog pagination"
57 },
58 "theme.blog.paginator.newerEntries": {
59 "message": "Newer Entries",
60 "description": "The label used to navigate to the newer blog posts page (previous page)"
61 },
62 "theme.blog.paginator.olderEntries": {
63 "message": "Older Entries",
64 "description": "The label used to navigate to the older blog posts page (next page)"
65 },
66 "theme.blog.post.paginator.navAriaLabel": {
67 "message": "Blog post page navigation",
68 "description": "The ARIA label for the blog posts pagination"
69 },
70 "theme.blog.post.paginator.newerPost": {
71 "message": "Newer Post",
72 "description": "The blog post button label to navigate to the newer/previous post"
73 },
74 "theme.blog.post.paginator.olderPost": {
75 "message": "Older Post",
76 "description": "The blog post button label to navigate to the older/next post"
77 },
78 "theme.blog.post.plurals": {
79 "message": "One post|{count} posts",
80 "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
81 },
82 "theme.blog.tagTitle": {
83 "message": "{nPosts} tagged with \"{tagName}\"",
84 "description": "The title of the page for a blog tag"
85 },
86 "theme.tags.tagsPageLink": {
87 "message": "View All Tags",
88 "description": "The label of the link targeting the tag list page"
89 },
90 "theme.docs.paginator.navAriaLabel": {
91 "message": "Docs pages",
92 "description": "The ARIA label for the docs pagination"
93 },
94 "theme.docs.paginator.previous": {
95 "message": "Previous",
96 "description": "The label used to navigate to the previous doc"
97 },
98 "theme.docs.paginator.next": {
99 "message": "Next",
100 "description": "The label used to navigate to the next doc"
101 },
102 "theme.docs.tagDocListPageTitle.nDocsTagged": {
103 "message": "One doc tagged|{count} docs tagged",
104 "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
105 },
106 "theme.docs.tagDocListPageTitle": {
107 "message": "{nDocsTagged} with \"{tagName}\"",
108 "description": "The title of the page for a docs tag"
109 },
110 "theme.docs.versionBadge.label": {
111 "message": "Version: {versionLabel}"
112 },
113 "theme.docs.versions.unreleasedVersionLabel": {
114 "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.",
115 "description": "The label used to tell the user that he's browsing an unreleased doc version"
116 },
117 "theme.docs.versions.unmaintainedVersionLabel": {
118 "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.",
119 "description": "The label used to tell the user that he's browsing an unmaintained doc version"
120 },
121 "theme.docs.versions.latestVersionSuggestionLabel": {
122 "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).",
123 "description": "The label used to tell the user to check the latest version"
124 },
125 "theme.docs.versions.latestVersionLinkLabel": {
126 "message": "latest version",
127 "description": "The label used for the latest version suggestion link label"
128 },
129 "theme.common.editThisPage": {
130 "message": "Edit this page",
131 "description": "The link label to edit the current page"
132 },
133 "theme.lastUpdated.atDate": {
134 "message": " on {date}",
135 "description": "The words used to describe on which date a page has been last updated"
136 },
137 "theme.lastUpdated.byUser": {
138 "message": " by {user}",
139 "description": "The words used to describe by who the page has been last updated"
140 },
141 "theme.lastUpdated.lastUpdatedAtBy": {
142 "message": "Last updated{atDate}{byUser}",
143 "description": "The sentence used to display when a page has been last updated, and by who"
144 },
145 "theme.NotFound.title": {
146 "message": "Page Not Found",
147 "description": "The title of the 404 page"
148 },
149 "theme.admonition.caution": {
150 "message": "caution",
151 "description": "The default label used for the Caution admonition (:::caution)"
152 },
153 "theme.admonition.danger": {
154 "message": "danger",
155 "description": "The default label used for the Danger admonition (:::danger)"
156 },
157 "theme.admonition.info": {
158 "message": "info",
159 "description": "The default label used for the Info admonition (:::info)"
160 },
161 "theme.admonition.note": {
162 "message": "note",
163 "description": "The default label used for the Note admonition (:::note)"
164 },
165 "theme.admonition.tip": {
166 "message": "tip",
167 "description": "The default label used for the Tip admonition (:::tip)"
168 },
169 "theme.admonition.warning": {
170 "message": "warning",
171 "description": "The default label used for the Warning admonition (:::warning)"
172 },
173 "theme.AnnouncementBar.closeButtonAriaLabel": {
174 "message": "Close",
175 "description": "The ARIA label for close button of announcement bar"
176 },
177 "theme.CodeBlock.copied": {
178 "message": "Copied",
179 "description": "The copied button label on code blocks"
180 },
181 "theme.CodeBlock.copyButtonAriaLabel": {
182 "message": "Copy code to clipboard",
183 "description": "The ARIA label for copy code blocks button"
184 },
185 "theme.CodeBlock.copy": {
186 "message": "Copy",
187 "description": "The copy button label on code blocks"
188 },
189 "theme.CodeBlock.wordWrapToggle": {
190 "message": "Toggle word wrap",
191 "description": "The title attribute for toggle word wrapping button of code block lines"
192 },
193 "theme.DocSidebarItem.expandCategoryAriaLabel": {
194 "message": "Expand sidebar category '{label}'",
195 "description": "The ARIA label to expand the sidebar category"
196 },
197 "theme.DocSidebarItem.collapseCategoryAriaLabel": {
198 "message": "Collapse sidebar category '{label}'",
199 "description": "The ARIA label to collapse the sidebar category"
200 },
201 "theme.NavBar.navAriaLabel": {
202 "message": "Main",
203 "description": "The ARIA label for the main navigation"
204 },
205 "theme.navbar.mobileLanguageDropdown.label": {
206 "message": "Languages",
207 "description": "The label for the mobile language switcher dropdown"
208 },
209 "theme.TOCCollapsible.toggleButtonLabel": {
210 "message": "On this page",
211 "description": "The label used by the button on the collapsible TOC component"
212 },
213 "theme.NotFound.p1": {
214 "message": "We could not find what you were looking for.",
215 "description": "The first paragraph of the 404 page"
216 },
217 "theme.NotFound.p2": {
218 "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.",
219 "description": "The 2nd paragraph of the 404 page"
220 },
221 "theme.blog.post.readMore": {
222 "message": "Read More",
223 "description": "The label used in blog post item excerpts to link to full blog posts"
224 },
225 "theme.blog.post.readMoreLabel": {
226 "message": "Read more about {title}",
227 "description": "The ARIA label for the link to full blog posts from excerpts"
228 },
229 "theme.blog.post.readingTime.plurals": {
230 "message": "One min read|{readingTime} min read",
231 "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
232 },
233 "theme.docs.breadcrumbs.home": {
234 "message": "Home page",
235 "description": "The ARIA label for the home page in the breadcrumbs"
236 },
237 "theme.docs.sidebar.collapseButtonTitle": {
238 "message": "Collapse sidebar",
239 "description": "The title attribute for collapse button of doc sidebar"
240 },
241 "theme.docs.sidebar.collapseButtonAriaLabel": {
242 "message": "Collapse sidebar",
243 "description": "The title attribute for collapse button of doc sidebar"
244 },
245 "theme.docs.sidebar.navAriaLabel": {
246 "message": "Docs sidebar",
247 "description": "The ARIA label for the sidebar navigation"
248 },
249 "theme.docs.sidebar.closeSidebarButtonAriaLabel": {
250 "message": "Close navigation bar",
251 "description": "The ARIA label for close button of mobile sidebar"
252 },
253 "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
254 "message": "← Back to main menu",
255 "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
256 },
257 "theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
258 "message": "Toggle navigation bar",
259 "description": "The ARIA label for hamburger menu button of mobile navigation"
260 },
261 "theme.docs.sidebar.expandButtonTitle": {
262 "message": "Expand sidebar",
263 "description": "The ARIA label and title attribute for expand button of doc sidebar"
264 },
265 "theme.docs.sidebar.expandButtonAriaLabel": {
266 "message": "Expand sidebar",
267 "description": "The ARIA label and title attribute for expand button of doc sidebar"
268 },
269 "theme.ErrorPageContent.tryAgain": {
270 "message": "Try again",
271 "description": "The label of the button to try again rendering when the React error boundary captures an error"
272 },
273 "theme.common.skipToMainContent": {
274 "message": "Skip to main content",
275 "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
276 },
277 "theme.tags.tagsPageTitle": {
278 "message": "Tags",
279 "description": "The title of the tag list page"
280 },
281 "theme.unlistedContent.title": {
282 "message": "Unlisted page",
283 "description": "The unlisted content banner title"
284 },
285 "theme.unlistedContent.message": {
286 "message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.",
287 "description": "The unlisted content banner message"
288 }
289}
diff --git a/i18n/en/code.json.license b/i18n/en/code.json.license
new file mode 100644
index 0000000..4ef929e
--- /dev/null
+++ b/i18n/en/code.json.license
@@ -0,0 +1,6 @@
1Copyright (c) Facebook, Inc. and its affiliates.
2Copyright (c) 2024 Kristóf Marussy <kristof@marussy.com>
3
4SPDX-License-Identifier: MIT
5
6Parts of this file are automatically generated by `yarn write-translations`.
diff --git a/i18n/en/docusaurus-plugin-content-blog/options.json b/i18n/en/docusaurus-plugin-content-blog/options.json
new file mode 100644
index 0000000..9239ff7
--- /dev/null
+++ b/i18n/en/docusaurus-plugin-content-blog/options.json
@@ -0,0 +1,14 @@
1{
2 "title": {
3 "message": "Blog",
4 "description": "The title for the blog used in SEO"
5 },
6 "description": {
7 "message": "Blog",
8 "description": "The description for the blog used in SEO"
9 },
10 "sidebar.title": {
11 "message": "Recent posts",
12 "description": "The label for the left sidebar"
13 }
14}
diff --git a/i18n/en/docusaurus-plugin-content-blog/options.json.license b/i18n/en/docusaurus-plugin-content-blog/options.json.license
new file mode 100644
index 0000000..cb0715d
--- /dev/null
+++ b/i18n/en/docusaurus-plugin-content-blog/options.json.license
@@ -0,0 +1,5 @@
1SPDX-FileCopyrightText: 2024 Kristóf Marussy <kristof@marussy.com>
2
3SPDX-License-Identifier: MIT
4
5Parts of this file are automatically generated by `yarn write-translations`.
diff --git a/i18n/en/docusaurus-theme-classic/footer.json b/i18n/en/docusaurus-theme-classic/footer.json
new file mode 100644
index 0000000..6d3d635
--- /dev/null
+++ b/i18n/en/docusaurus-theme-classic/footer.json
@@ -0,0 +1,22 @@
1{
2 "link.title.Pages": {
3 "message": "Pages",
4 "description": "The title of the footer links column with title=Pages in the footer"
5 },
6 "link.item.label.About": {
7 "message": "About",
8 "description": "The label of footer link with label=About linking to /"
9 },
10 "link.item.label.Blog": {
11 "message": "Blog",
12 "description": "The label of footer link with label=Blog linking to /blog"
13 },
14 "link.item.label.Tags": {
15 "message": "Tags",
16 "description": "The label of footer link with label=Tags linking to /tags"
17 },
18 "copyright": {
19 "message": "Built with &#x2764;&#xfe0e; and Docusaurus.",
20 "description": "The footer copyright"
21 }
22}
diff --git a/i18n/en/docusaurus-theme-classic/footer.json.license b/i18n/en/docusaurus-theme-classic/footer.json.license
new file mode 100644
index 0000000..cb0715d
--- /dev/null
+++ b/i18n/en/docusaurus-theme-classic/footer.json.license
@@ -0,0 +1,5 @@
1SPDX-FileCopyrightText: 2024 Kristóf Marussy <kristof@marussy.com>
2
3SPDX-License-Identifier: MIT
4
5Parts of this file are automatically generated by `yarn write-translations`.
diff --git a/i18n/en/docusaurus-theme-classic/navbar.json b/i18n/en/docusaurus-theme-classic/navbar.json
new file mode 100644
index 0000000..be85568
--- /dev/null
+++ b/i18n/en/docusaurus-theme-classic/navbar.json
@@ -0,0 +1,30 @@
1{
2 "title": {
3 "message": "Kristóf Marussy",
4 "description": "The title in the navbar"
5 },
6 "item.label.About": {
7 "message": "About",
8 "description": "Navbar item with label About"
9 },
10 "item.label.Blog": {
11 "message": "Blog",
12 "description": "Navbar item with label Blog"
13 },
14 "item.label.Research": {
15 "message": "Research",
16 "description": "Navbar item with label Research"
17 },
18 "item.label.Publications": {
19 "message": "Publications",
20 "description": "Navbar item with label Publications"
21 },
22 "item.label.Resume": {
23 "message": "Resume",
24 "description": "Navbar item with label Resume"
25 },
26 "item.label.Contact": {
27 "message": "Contact",
28 "description": "Navbar item with label Contact"
29 }
30}
diff --git a/i18n/en/docusaurus-theme-classic/navbar.json.license b/i18n/en/docusaurus-theme-classic/navbar.json.license
new file mode 100644
index 0000000..cb0715d
--- /dev/null
+++ b/i18n/en/docusaurus-theme-classic/navbar.json.license
@@ -0,0 +1,5 @@
1SPDX-FileCopyrightText: 2024 Kristóf Marussy <kristof@marussy.com>
2
3SPDX-License-Identifier: MIT
4
5Parts of this file are automatically generated by `yarn write-translations`.
diff --git a/package.json b/package.json
index fc56b75..d4fd289 100644
--- a/package.json
+++ b/package.json
@@ -34,7 +34,7 @@
34 "@docusaurus/theme-common": "^3.1.1", 34 "@docusaurus/theme-common": "^3.1.1",
35 "@docusaurus/utils": "^3.1.1", 35 "@docusaurus/utils": "^3.1.1",
36 "@mdx-js/react": "^3.0.1", 36 "@mdx-js/react": "^3.0.1",
37 "@phosphor-icons/react": "2.1.3", 37 "@phosphor-icons/react": "2.0.15",
38 "@swc/core": "^1.4.8", 38 "@swc/core": "^1.4.8",
39 "clsx": "^2.1.0", 39 "clsx": "^2.1.0",
40 "compression-webpack-plugin": "^11.1.0", 40 "compression-webpack-plugin": "^11.1.0",
@@ -43,7 +43,7 @@
43 "react-dom": "^18.2.0", 43 "react-dom": "^18.2.0",
44 "remark-smartypants": "^2.1.0", 44 "remark-smartypants": "^2.1.0",
45 "responsive-loader": "^3.1.2", 45 "responsive-loader": "^3.1.2",
46 "sharp": "^0.33.2", 46 "sharp": "^0.33.3",
47 "simple-icons": "^11.9.0", 47 "simple-icons": "^11.9.0",
48 "swc-loader": "^0.2.6", 48 "swc-loader": "^0.2.6",
49 "terser-webpack-plugin": "^5.3.10", 49 "terser-webpack-plugin": "^5.3.10",
@@ -55,7 +55,7 @@
55 "@docusaurus/types": "^3.1.1", 55 "@docusaurus/types": "^3.1.1",
56 "@types/babel__core": "^7.20.5", 56 "@types/babel__core": "^7.20.5",
57 "@types/node": "^20.11.30", 57 "@types/node": "^20.11.30",
58 "@types/react": "^18.2.67", 58 "@types/react": "^18.2.69",
59 "cross-env": "^7.0.3", 59 "cross-env": "^7.0.3",
60 "prettier": "^3.2.5", 60 "prettier": "^3.2.5",
61 "typescript": "^5.4.3" 61 "typescript": "^5.4.3"
diff --git a/src/components/ActiveSectionProvider.tsx b/src/components/ActiveSectionProvider.tsx
index 022dbad..0d491ac 100644
--- a/src/components/ActiveSectionProvider.tsx
+++ b/src/components/ActiveSectionProvider.tsx
@@ -46,7 +46,7 @@ export default function ActiveSectionProvider({
46 if (hash === lastHashRef.current) { 46 if (hash === lastHashRef.current) {
47 return; 47 return;
48 } 48 }
49 // Passing `undefined` to `hash` will give contraol pack to react-router. 49 // Passing `undefined` to `hash` will give control back to react-router.
50 const newURL = `${location.pathname}${location.search}${ 50 const newURL = `${location.pathname}${location.search}${
51 hash ?? location.hash 51 hash ?? location.hash
52 }`; 52 }`;
diff --git a/src/components/Landing.tsx b/src/components/Landing.tsx
new file mode 100644
index 0000000..5eac99b
--- /dev/null
+++ b/src/components/Landing.tsx
@@ -0,0 +1,31 @@
1/*
2 * SPDX-FileCopyrightText: 2023 Kristóf Marussy
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7import type { Props } from '@theme/BlogListPage';
8import Layout from '@theme/Layout';
9
10import Blog from './landing/sections/Blog';
11import Contact from './landing/sections/Contact';
12import Hero from './landing/sections/Hero';
13import Publications from './landing/sections/Publications';
14import Research from './landing/sections/Research';
15import Resume from './landing/sections/Resume';
16import TrackActiveSection from './TrackActiveSection';
17
18export default function Home(props: Props) {
19 return (
20 <Layout>
21 <TrackActiveSection>
22 <Hero />
23 <Research />
24 <Blog {...props} />
25 <Publications />
26 <Resume />
27 <Contact />
28 </TrackActiveSection>
29 </Layout>
30 );
31}
diff --git a/src/components/landing/sections/Blog.module.css b/src/components/landing/sections/Blog.module.css
new file mode 100644
index 0000000..6a38a97
--- /dev/null
+++ b/src/components/landing/sections/Blog.module.css
@@ -0,0 +1,28 @@
1/*
2 * SPDX-FileCopyrightText: 2024 Kristóf Marussy
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7.row {
8 margin-bottom: var(--ifm-paragraph-margin-bottom);
9}
10
11.recent-posts {
12 margin-bottom: 0;
13 font-size: var(--ifm-h3-font-size);
14 font-weight: var(--ifm-font-weight-bold);
15 --casl: 0.5;
16 letter-spacing: var(--marussy-heading-tracking);
17}
18
19.date {
20 font-size: 1rem;
21 font-weight: var(--ifm-font-weight-normal);
22 --casl: 0;
23 letter-spacing: 0;
24}
25
26.prev::after {
27 content: ' »';
28}
diff --git a/src/components/landing/sections/Blog.tsx b/src/components/landing/sections/Blog.tsx
new file mode 100644
index 0000000..3ac87db
--- /dev/null
+++ b/src/components/landing/sections/Blog.tsx
@@ -0,0 +1,95 @@
1/*
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 * Copyright (c) 2024 Kristóf Marussy <kristof@marussy.com>
4 *
5 * SPDX-License-Identifier: MIT
6 */
7
8import Link from '@docusaurus/Link';
9import type { Props } from '@theme/BlogListPage';
10import type { Content } from '@theme/BlogPostPage';
11import Translate from '@docusaurus/Translate';
12import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
13import clsx from 'clsx';
14
15import Section from '@site/src/components/landing/Section';
16import Subtitle from '@site/src/components/landing/Subtitle';
17
18import styles from './Blog.module.css';
19import React from 'react';
20
21const columnLength = 5;
22
23function Column({
24 items,
25}: {
26 items: { readonly content: Content }[];
27}): React.ReactNode {
28 // Date time format based on
29 // https://github.com/facebook/docusaurus/blob/6f17d5493877ba38d8b4e0b0d468f44401375c30/packages/docusaurus-theme-common/src/utils/IntlUtils.ts
30 const {
31 i18n: { currentLocale, localeConfigs },
32 } = useDocusaurusContext();
33 const calendar = localeConfigs[currentLocale]!.calendar;
34 const dateTimeFormat = new Intl.DateTimeFormat(currentLocale, {
35 calendar,
36 day: 'numeric',
37 month: 'long',
38 year: 'numeric',
39 timeZone: 'UTC',
40 });
41
42 if (items.length === 0) {
43 return null;
44 }
45
46 return (
47 <div className="col col-6">
48 <ul className={styles['recent-posts']}>
49 {items.map(({ content }) => (
50 <li key={content.metadata.date}>
51 <Link to={content.metadata.permalink}>
52 {content.metadata.title}
53 </Link>{' '}
54 <span className={styles.date}>
55 on&nbsp;{dateTimeFormat.format(new Date(content.metadata.date))}
56 </span>
57 </li>
58 ))}
59 </ul>
60 </div>
61 );
62}
63
64export default function Blog(props: Props) {
65 const {
66 items,
67 metadata: { nextPage },
68 } = props;
69 const columnLength = Math.max(1, Math.ceil(items.length / 2));
70 return (
71 <Section id="blog" title="Blog">
72 <div className="container">
73 <section>
74 <Subtitle icon="🗓️">Recent posts</Subtitle>
75 </section>
76 <div className={clsx('row', styles.row)}>
77 <Column items={items.slice(0, columnLength)} />
78 <Column items={items.slice(columnLength)} />
79 </div>
80 {nextPage && (
81 <p>
82 <Link to={nextPage} className={styles.prev}>
83 <Translate
84 id="theme.blog.paginator.olderEntries"
85 description="The label used to navigate to the older blog posts page (next page)"
86 >
87 Older Entries
88 </Translate>
89 </Link>
90 </p>
91 )}
92 </div>
93 </Section>
94 );
95}
diff --git a/src/components/landing/sections/Hero.module.css b/src/components/landing/sections/Hero.module.css
index 67e7d54..0d0e16e 100644
--- a/src/components/landing/sections/Hero.module.css
+++ b/src/components/landing/sections/Hero.module.css
@@ -11,7 +11,7 @@
11 --ifm-link-hover-color: var(--ifm-link-color); 11 --ifm-link-hover-color: var(--ifm-link-color);
12} 12}
13 13
14@media (max-width: 996px) { 14@media (max-width: 576px) {
15 .hero { 15 .hero {
16 padding-top: 2rem; 16 padding-top: 2rem;
17 padding-bottom: 0; 17 padding-bottom: 0;
@@ -65,11 +65,17 @@
65 font-family: var(--ifm-heading-font-family); 65 font-family: var(--ifm-heading-font-family);
66 font-weight: var(--ifm-heading-font-weight); 66 font-weight: var(--ifm-heading-font-weight);
67 --casl: 1; 67 --casl: 1;
68 font-size: 2.5rem; 68 font-size: 3rem;
69 letter-spacing: var(--marussy-heading-tracking); 69 letter-spacing: var(--marussy-heading-tracking);
70 white-space: pre; 70 white-space: pre;
71} 71}
72 72
73@media (max-width: 576px) {
74 .introduction__name {
75 font-size: 2.5rem;
76 }
77}
78
73.cta { 79.cta {
74 display: flex; 80 display: flex;
75 flex-direction: row; 81 flex-direction: row;
diff --git a/src/css/custom.css b/src/css/custom.css
index c2cda19..bd6e179 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -84,11 +84,13 @@ kbd {
84 84
85h1, 85h1,
86h2, 86h2,
87.markdown > h3,
87.button { 88.button {
88 --casl: 1; 89 --casl: 1;
89} 90}
90 91
91h3 { 92h3,
93.markdown > h4 {
92 --casl: 0.5; 94 --casl: 0.5;
93} 95}
94 96
@@ -107,3 +109,7 @@ h3 {
107 --casl: 0; 109 --casl: 0;
108 --mono: 1; 110 --mono: 1;
109} 111}
112
113.hero__subtitle {
114 font-weight: 500;
115}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
deleted file mode 100644
index 60f86ca..0000000
--- a/src/pages/index.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2023 Kristóf Marussy
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7import Layout from '@theme/Layout';
8
9import Contact from '@site/src/components/landing/sections/Contact';
10import Hero from '@site/src/components/landing/sections/Hero';
11import Publications from '@site/src/components/landing/sections/Publications';
12import Research from '@site/src/components/landing/sections/Research';
13import Resume from '@site/src/components/landing/sections/Resume';
14import TrackActiveSection from '@site/src/components/TrackActiveSection';
15
16export default function Home() {
17 return (
18 <Layout>
19 <TrackActiveSection>
20 <Hero />
21 <Research />
22 <Publications />
23 <Resume />
24 <Contact />
25 </TrackActiveSection>
26 </Layout>
27 );
28}
diff --git a/src/plugins/compressionPlugin.ts b/src/plugins/compressionPlugin.ts
index 7b9feeb..a5bc402 100644
--- a/src/plugins/compressionPlugin.ts
+++ b/src/plugins/compressionPlugin.ts
@@ -20,10 +20,9 @@ const test = /\.(js|css|svg|txt)$/;
20export default function compressionPlugin(): Plugin<void> { 20export default function compressionPlugin(): Plugin<void> {
21 return { 21 return {
22 name: 'marussy-compression-plugin', 22 name: 'marussy-compression-plugin',
23 configureWebpack: (_config, isServer) => 23 configureWebpack: ({ mode }) =>
24 isServer 24 mode === 'production'
25 ? {} 25 ? {
26 : {
27 plugins: [ 26 plugins: [
28 new CompressionPlugin({ 27 new CompressionPlugin({
29 test, 28 test,
@@ -39,6 +38,7 @@ export default function compressionPlugin(): Plugin<void> {
39 minRatio, 38 minRatio,
40 }), 39 }),
41 ], 40 ],
42 }, 41 }
42 : {},
43 }; 43 };
44} 44}
diff --git a/src/theme/BlogListPage.tsx b/src/theme/BlogListPage.tsx
new file mode 100644
index 0000000..b8c7e01
--- /dev/null
+++ b/src/theme/BlogListPage.tsx
@@ -0,0 +1,18 @@
1/*
2 * SPDX-FileCopyrightText: 2024 Kristóf Marussy
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7import React from 'react';
8import type { Props } from '@theme/BlogListPage';
9import BlogListPage from '@theme-original/BlogListPage';
10
11import Landing from '@site/src/components/Landing';
12
13export default function BlogListPageWrapper(props: Props) {
14 if (props.metadata.permalink === '/') {
15 return <Landing {...props} />;
16 }
17 return <BlogListPage {...props} />;
18}
diff --git a/src/theme/BlogSidebar/Desktop.module.css b/src/theme/BlogSidebar/Desktop.module.css
new file mode 100644
index 0000000..4bac5ba
--- /dev/null
+++ b/src/theme/BlogSidebar/Desktop.module.css
@@ -0,0 +1,53 @@
1/*
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 * Copyright (c) 2024 Kristóf Marussy <kristof@marussy.com>
4 *
5 * SPDX-License-Identifier: MIT
6 *
7 * This file was derived from
8 * https://github.com/facebook/docusaurus/blob/6f17d5493877ba38d8b4e0b0d468f44401375c30/packages/docusaurus-theme-classic/src/theme/BlogSidebar/Desktop/styles.module.css
9 * via the `swizzle` mechanism of Docusaurus.
10 *
11 * It was modified to change the sidebar title styling.
12 */
13
14.sidebar {
15 max-height: calc(100vh - (var(--ifm-navbar-height) + 2rem));
16 overflow-y: auto;
17 position: sticky;
18 top: calc(var(--ifm-navbar-height) + 2rem);
19}
20
21.sidebarItemTitle {
22 font-size: 1.5rem;
23 font-weight: var(--ifm-font-weight-bold);
24 --casl: 1;
25 letter-spacing: var(--marussy-heading-tracking);
26}
27
28.sidebarItemList {
29 font-size: 0.9rem;
30}
31
32.sidebarItem {
33 margin-top: 0.7rem;
34}
35
36.sidebarItemLink {
37 color: var(--ifm-font-color-base);
38 display: block;
39}
40
41.sidebarItemLink:hover {
42 text-decoration: none;
43}
44
45.sidebarItemLinkActive {
46 color: var(--ifm-color-primary) !important;
47}
48
49@media (max-width: 996px) {
50 .sidebar {
51 display: none;
52 }
53}
diff --git a/src/theme/BlogSidebar/Desktop.tsx b/src/theme/BlogSidebar/Desktop.tsx
new file mode 100644
index 0000000..d06f239
--- /dev/null
+++ b/src/theme/BlogSidebar/Desktop.tsx
@@ -0,0 +1,55 @@
1/*
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 * Copyright (c) 2024 Kristóf Marussy <kristof@marussy.com>
4 *
5 * SPDX-License-Identifier: MIT
6 *
7 * This file was derived from
8 * https://github.com/facebook/docusaurus/blob/6f17d5493877ba38d8b4e0b0d468f44401375c30/packages/docusaurus-theme-classic/src/theme/BlogSidebar/Desktop/index.tsx
9 * via the `swizzle` mechanism of Docusaurus.
10 *
11 * It was modified to change the sidebar title styling.
12 */
13
14import Link from '@docusaurus/Link';
15import { translate } from '@docusaurus/Translate';
16import { useVisibleBlogSidebarItems } from '@docusaurus/theme-common/internal';
17import type { Props } from '@theme/BlogSidebar/Desktop';
18import React from 'react';
19import clsx from 'clsx';
20
21import styles from './Desktop.module.css';
22
23export default function BlogSidebarDesktop({ sidebar }: Props) {
24 const items = useVisibleBlogSidebarItems(sidebar.items);
25 return (
26 <aside className="col col--3">
27 <nav
28 className={clsx(styles.sidebar, 'thin-scrollbar')}
29 aria-label={translate({
30 id: 'theme.blog.sidebar.navAriaLabel',
31 message: 'Blog recent posts navigation',
32 description: 'The ARIA label for recent posts in the blog sidebar',
33 })}
34 >
35 <div className={clsx(styles.sidebarItemTitle, 'margin-bottom--md')}>
36 <span aria-hidden="true">🗓️</span> {sidebar.title}
37 </div>
38 <ul className={clsx(styles.sidebarItemList, 'clean-list')}>
39 {items.map((item) => (
40 <li key={item.permalink} className={styles.sidebarItem}>
41 <Link
42 isNavLink
43 to={item.permalink}
44 className={styles.sidebarItemLink}
45 activeClassName={styles.sidebarItemLinkActive}
46 >
47 {item.title}
48 </Link>
49 </li>
50 ))}
51 </ul>
52 </nav>
53 </aside>
54 );
55}
diff --git a/src/theme/Footer/Copyright.jsx b/src/theme/Footer/Copyright.tsx
index 648bd42..3125c05 100644
--- a/src/theme/Footer/Copyright.jsx
+++ b/src/theme/Footer/Copyright.tsx
@@ -5,13 +5,14 @@
5 * SPDX-License-Identifier: MIT 5 * SPDX-License-Identifier: MIT
6 * 6 *
7 * This file was derived from 7 * This file was derived from
8 * https://github.com/facebook/docusaurus/blob/c745021b01a8b88d34e1d772278d7171ad8acdf5/packages/docusaurus-theme-classic/src/theme/Footer/Copyright/index.tsx 8 * https://github.com/facebook/docusaurus/blob/cc0bceab9c1678303f6237f5526753edc1b12fc3/packages/docusaurus-theme-classic/src/theme/Footer/Copyright/index.tsx
9 * via the `swizzle` mechanism of Docusaurus. 9 * via the `swizzle` mechanism of Docusaurus.
10 * 10 *
11 * It was modified to embed JSX content directly in the footer. 11 * It was modified to embed JSX content directly in the footer.
12 */ 12 */
13 13
14import Link from '@docusaurus/Link'; 14import Link from '@docusaurus/Link';
15import type { Props } from '@theme/Footer/Copyright';
15import clsx from 'clsx'; 16import clsx from 'clsx';
16import React from 'react'; 17import React from 'react';
17 18
@@ -19,7 +20,7 @@ import { CCLicenseLink, LicenseLink } from '@site/src/components/licenses';
19 20
20import styles from './Copyright.module.css'; 21import styles from './Copyright.module.css';
21 22
22export default function FooterCopyright({ copyright }) { 23export default function FooterCopyright({ copyright }: Props) {
23 return ( 24 return (
24 <div className="footer__copyright"> 25 <div className="footer__copyright">
25 Most content on this site is{' '} 26 Most content on this site is{' '}
diff --git a/src/theme/NavbarItem/NavbarNavLink.jsx b/src/theme/NavbarItem/NavbarNavLink.tsx
index 81de931..a9d7b04 100644
--- a/src/theme/NavbarItem/NavbarNavLink.jsx
+++ b/src/theme/NavbarItem/NavbarNavLink.tsx
@@ -18,6 +18,8 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
18import isInternalUrl from '@docusaurus/isInternalUrl'; 18import isInternalUrl from '@docusaurus/isInternalUrl';
19import { isRegexpStringMatch } from '@docusaurus/theme-common'; 19import { isRegexpStringMatch } from '@docusaurus/theme-common';
20import IconExternalLink from '@theme/Icon/ExternalLink'; 20import IconExternalLink from '@theme/Icon/ExternalLink';
21import type { Props } from '@theme/NavbarItem/NavbarNavLink';
22
21import { useActiveSection } from '@site/src/components/ActiveSectionProvider'; 23import { useActiveSection } from '@site/src/components/ActiveSectionProvider';
22 24
23export default function NavbarNavLink({ 25export default function NavbarNavLink({
@@ -30,7 +32,7 @@ export default function NavbarNavLink({
30 isDropdownLink, 32 isDropdownLink,
31 prependBaseUrlToHref, 33 prependBaseUrlToHref,
32 ...props 34 ...props
33}) { 35}: Props) {
34 const { hash: activeSectionHash } = useActiveSection(); 36 const { hash: activeSectionHash } = useActiveSection();
35 // TODO all this seems hacky 37 // TODO all this seems hacky
36 // {to: 'version'} should probably be forbidden, in favor of {to: '/version'} 38 // {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
diff --git a/src/theme/PaginatorNavLink.tsx b/src/theme/PaginatorNavLink.tsx
new file mode 100644
index 0000000..d0f03f7
--- /dev/null
+++ b/src/theme/PaginatorNavLink.tsx
@@ -0,0 +1,17 @@
1/*
2 * SPDX-FileCopyrightText: 2024 Kristóf Marussy
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7import React from 'react';
8import type { Props } from '@theme/PaginatorNavLink';
9import PaginatorNavLink from '@theme-original/PaginatorNavLink';
10
11export default function PaginatorNavLinkWrapper(props: Props) {
12 const modifiedProps = { ...props };
13 if (modifiedProps.permalink === '/') {
14 modifiedProps.permalink = '/#blog';
15 }
16 return <PaginatorNavLink {...modifiedProps} />;
17}
diff --git a/src/theme/Root.tsx b/src/theme/Root.tsx
index 9459e9f..32462bb 100644
--- a/src/theme/Root.tsx
+++ b/src/theme/Root.tsx
@@ -4,14 +4,25 @@
4 * SPDX-License-Identifier: MIT 4 * SPDX-License-Identifier: MIT
5 */ 5 */
6 6
7import Head from '@docusaurus/Head';
7import type { Props } from '@theme/Root'; 8import type { Props } from '@theme/Root';
8import Root from '@theme-original/Root'; 9import Root from '@theme-original/Root';
9 10
10import ActiveSectionProvider from '@site/src/components/ActiveSectionProvider'; 11import ActiveSectionProvider from '@site/src/components/ActiveSectionProvider';
12import fontURL from '@site/src/fonts/recursive-latin.woff2?url';
11 13
12export default function RootWrapper(props: Props) { 14export default function RootWrapper(props: Props) {
13 return ( 15 return (
14 <ActiveSectionProvider> 16 <ActiveSectionProvider>
17 <Head>
18 <link
19 rel="preload"
20 href={fontURL}
21 as="font"
22 type="font/woff2"
23 crossOrigin="anonymous"
24 />
25 </Head>
15 <Root {...props} /> 26 <Root {...props} />
16 </ActiveSectionProvider> 27 </ActiveSectionProvider>
17 ); 28 );
diff --git a/src/theme/SiteMetadata.jsx b/src/theme/SiteMetadata.jsx
deleted file mode 100644
index 1639677..0000000
--- a/src/theme/SiteMetadata.jsx
+++ /dev/null
@@ -1,28 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2024 Kristóf Marussy
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7import Head from '@docusaurus/Head';
8
9import SiteMetadata from '@theme-original/SiteMetadata';
10
11import fontURL from '@site/src/fonts/recursive-latin.woff2?url';
12
13export default function SiteMetadataWrapper(props) {
14 return (
15 <>
16 <Head>
17 <link
18 rel="preload"
19 href={fontURL}
20 as="font"
21 type="font/woff2"
22 crossOrigin="anonymous"
23 />
24 </Head>
25 <SiteMetadata {...props} />
26 </>
27 );
28}
diff --git a/third-party b/third-party
Subproject 21568f2c77a591823103044a2f9e36e04732d8b Subproject 432b24cad20c076a9fdf267c4aafe76577a8c4c
diff --git a/yarn.lock b/yarn.lock
index b957685..7d43d9d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1895,12 +1895,12 @@ __metadata:
1895 languageName: node 1895 languageName: node
1896 linkType: hard 1896 linkType: hard
1897 1897
1898"@emnapi/runtime@npm:^0.45.0": 1898"@emnapi/runtime@npm:^1.1.0":
1899 version: 0.45.0 1899 version: 1.1.0
1900 resolution: "@emnapi/runtime@npm:0.45.0" 1900 resolution: "@emnapi/runtime@npm:1.1.0"
1901 dependencies: 1901 dependencies:
1902 tslib: "npm:^2.4.0" 1902 tslib: "npm:^2.4.0"
1903 checksum: 10c0/c83052b05efb7147c256bfbb69214c9642fef1dce8d7d901e0314a7b2d2dcd14e1cd75502c6565004847e552658e9913a7e58889c7dca92e240173032f1db5d5 1903 checksum: 10c0/2f8bbcc75e490d92dba65341ba1275e651ad552ecbf4371ef4f156d9a69a216918ece671057b7c7c057e8b410b28946fafcb03cfb9cf0baed5f78cf32468aa67
1904 languageName: node 1904 languageName: node
1905 linkType: hard 1905 linkType: hard
1906 1906
@@ -1920,11 +1920,11 @@ __metadata:
1920 languageName: node 1920 languageName: node
1921 linkType: hard 1921 linkType: hard
1922 1922
1923"@img/sharp-darwin-arm64@npm:0.33.2": 1923"@img/sharp-darwin-arm64@npm:0.33.3":
1924 version: 0.33.2 1924 version: 0.33.3
1925 resolution: "@img/sharp-darwin-arm64@npm:0.33.2" 1925 resolution: "@img/sharp-darwin-arm64@npm:0.33.3"
1926 dependencies: 1926 dependencies:
1927 "@img/sharp-libvips-darwin-arm64": "npm:1.0.1" 1927 "@img/sharp-libvips-darwin-arm64": "npm:1.0.2"
1928 dependenciesMeta: 1928 dependenciesMeta:
1929 "@img/sharp-libvips-darwin-arm64": 1929 "@img/sharp-libvips-darwin-arm64":
1930 optional: true 1930 optional: true
@@ -1932,11 +1932,11 @@ __metadata:
1932 languageName: node 1932 languageName: node
1933 linkType: hard 1933 linkType: hard
1934 1934
1935"@img/sharp-darwin-x64@npm:0.33.2": 1935"@img/sharp-darwin-x64@npm:0.33.3":
1936 version: 0.33.2 1936 version: 0.33.3
1937 resolution: "@img/sharp-darwin-x64@npm:0.33.2" 1937 resolution: "@img/sharp-darwin-x64@npm:0.33.3"
1938 dependencies: 1938 dependencies:
1939 "@img/sharp-libvips-darwin-x64": "npm:1.0.1" 1939 "@img/sharp-libvips-darwin-x64": "npm:1.0.2"
1940 dependenciesMeta: 1940 dependenciesMeta:
1941 "@img/sharp-libvips-darwin-x64": 1941 "@img/sharp-libvips-darwin-x64":
1942 optional: true 1942 optional: true
@@ -1944,67 +1944,67 @@ __metadata:
1944 languageName: node 1944 languageName: node
1945 linkType: hard 1945 linkType: hard
1946 1946
1947"@img/sharp-libvips-darwin-arm64@npm:1.0.1": 1947"@img/sharp-libvips-darwin-arm64@npm:1.0.2":
1948 version: 1.0.1 1948 version: 1.0.2
1949 resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.1" 1949 resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.2"
1950 conditions: os=darwin & cpu=arm64 1950 conditions: os=darwin & cpu=arm64
1951 languageName: node 1951 languageName: node
1952 linkType: hard 1952 linkType: hard
1953 1953
1954"@img/sharp-libvips-darwin-x64@npm:1.0.1": 1954"@img/sharp-libvips-darwin-x64@npm:1.0.2":
1955 version: 1.0.1 1955 version: 1.0.2
1956 resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.1" 1956 resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.2"
1957 conditions: os=darwin & cpu=x64 1957 conditions: os=darwin & cpu=x64
1958 languageName: node 1958 languageName: node
1959 linkType: hard 1959 linkType: hard
1960 1960
1961"@img/sharp-libvips-linux-arm64@npm:1.0.1": 1961"@img/sharp-libvips-linux-arm64@npm:1.0.2":
1962 version: 1.0.1 1962 version: 1.0.2
1963 resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.1" 1963 resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.2"
1964 conditions: os=linux & cpu=arm64 & libc=glibc 1964 conditions: os=linux & cpu=arm64 & libc=glibc
1965 languageName: node 1965 languageName: node
1966 linkType: hard 1966 linkType: hard
1967 1967
1968"@img/sharp-libvips-linux-arm@npm:1.0.1": 1968"@img/sharp-libvips-linux-arm@npm:1.0.2":
1969 version: 1.0.1 1969 version: 1.0.2
1970 resolution: "@img/sharp-libvips-linux-arm@npm:1.0.1" 1970 resolution: "@img/sharp-libvips-linux-arm@npm:1.0.2"
1971 conditions: os=linux & cpu=arm & libc=glibc 1971 conditions: os=linux & cpu=arm & libc=glibc
1972 languageName: node 1972 languageName: node
1973 linkType: hard 1973 linkType: hard
1974 1974
1975"@img/sharp-libvips-linux-s390x@npm:1.0.1": 1975"@img/sharp-libvips-linux-s390x@npm:1.0.2":
1976 version: 1.0.1 1976 version: 1.0.2
1977 resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.1" 1977 resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.2"
1978 conditions: os=linux & cpu=s390x & libc=glibc 1978 conditions: os=linux & cpu=s390x & libc=glibc
1979 languageName: node 1979 languageName: node
1980 linkType: hard 1980 linkType: hard
1981 1981
1982"@img/sharp-libvips-linux-x64@npm:1.0.1": 1982"@img/sharp-libvips-linux-x64@npm:1.0.2":
1983 version: 1.0.1 1983 version: 1.0.2
1984 resolution: "@img/sharp-libvips-linux-x64@npm:1.0.1" 1984 resolution: "@img/sharp-libvips-linux-x64@npm:1.0.2"
1985 conditions: os=linux & cpu=x64 & libc=glibc 1985 conditions: os=linux & cpu=x64 & libc=glibc
1986 languageName: node 1986 languageName: node
1987 linkType: hard 1987 linkType: hard
1988 1988
1989"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.1": 1989"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2":
1990 version: 1.0.1 1990 version: 1.0.2
1991 resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.1" 1991 resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2"
1992 conditions: os=linux & cpu=arm64 & libc=musl 1992 conditions: os=linux & cpu=arm64 & libc=musl
1993 languageName: node 1993 languageName: node
1994 linkType: hard 1994 linkType: hard
1995 1995
1996"@img/sharp-libvips-linuxmusl-x64@npm:1.0.1": 1996"@img/sharp-libvips-linuxmusl-x64@npm:1.0.2":
1997 version: 1.0.1 1997 version: 1.0.2
1998 resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.1" 1998 resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.2"
1999 conditions: os=linux & cpu=x64 & libc=musl 1999 conditions: os=linux & cpu=x64 & libc=musl
2000 languageName: node 2000 languageName: node
2001 linkType: hard 2001 linkType: hard
2002 2002
2003"@img/sharp-linux-arm64@npm:0.33.2": 2003"@img/sharp-linux-arm64@npm:0.33.3":
2004 version: 0.33.2 2004 version: 0.33.3
2005 resolution: "@img/sharp-linux-arm64@npm:0.33.2" 2005 resolution: "@img/sharp-linux-arm64@npm:0.33.3"
2006 dependencies: 2006 dependencies:
2007 "@img/sharp-libvips-linux-arm64": "npm:1.0.1" 2007 "@img/sharp-libvips-linux-arm64": "npm:1.0.2"
2008 dependenciesMeta: 2008 dependenciesMeta:
2009 "@img/sharp-libvips-linux-arm64": 2009 "@img/sharp-libvips-linux-arm64":
2010 optional: true 2010 optional: true
@@ -2012,11 +2012,11 @@ __metadata:
2012 languageName: node 2012 languageName: node
2013 linkType: hard 2013 linkType: hard
2014 2014
2015"@img/sharp-linux-arm@npm:0.33.2": 2015"@img/sharp-linux-arm@npm:0.33.3":
2016 version: 0.33.2 2016 version: 0.33.3
2017 resolution: "@img/sharp-linux-arm@npm:0.33.2" 2017 resolution: "@img/sharp-linux-arm@npm:0.33.3"
2018 dependencies: 2018 dependencies:
2019 "@img/sharp-libvips-linux-arm": "npm:1.0.1" 2019 "@img/sharp-libvips-linux-arm": "npm:1.0.2"
2020 dependenciesMeta: 2020 dependenciesMeta:
2021 "@img/sharp-libvips-linux-arm": 2021 "@img/sharp-libvips-linux-arm":
2022 optional: true 2022 optional: true
@@ -2024,11 +2024,11 @@ __metadata:
2024 languageName: node 2024 languageName: node
2025 linkType: hard 2025 linkType: hard
2026 2026
2027"@img/sharp-linux-s390x@npm:0.33.2": 2027"@img/sharp-linux-s390x@npm:0.33.3":
2028 version: 0.33.2 2028 version: 0.33.3
2029 resolution: "@img/sharp-linux-s390x@npm:0.33.2" 2029 resolution: "@img/sharp-linux-s390x@npm:0.33.3"
2030 dependencies: 2030 dependencies:
2031 "@img/sharp-libvips-linux-s390x": "npm:1.0.1" 2031 "@img/sharp-libvips-linux-s390x": "npm:1.0.2"
2032 dependenciesMeta: 2032 dependenciesMeta:
2033 "@img/sharp-libvips-linux-s390x": 2033 "@img/sharp-libvips-linux-s390x":
2034 optional: true 2034 optional: true
@@ -2036,11 +2036,11 @@ __metadata:
2036 languageName: node 2036 languageName: node
2037 linkType: hard 2037 linkType: hard
2038 2038
2039"@img/sharp-linux-x64@npm:0.33.2": 2039"@img/sharp-linux-x64@npm:0.33.3":
2040 version: 0.33.2 2040 version: 0.33.3
2041 resolution: "@img/sharp-linux-x64@npm:0.33.2" 2041 resolution: "@img/sharp-linux-x64@npm:0.33.3"
2042 dependencies: 2042 dependencies:
2043 "@img/sharp-libvips-linux-x64": "npm:1.0.1" 2043 "@img/sharp-libvips-linux-x64": "npm:1.0.2"
2044 dependenciesMeta: 2044 dependenciesMeta:
2045 "@img/sharp-libvips-linux-x64": 2045 "@img/sharp-libvips-linux-x64":
2046 optional: true 2046 optional: true
@@ -2048,11 +2048,11 @@ __metadata:
2048 languageName: node 2048 languageName: node
2049 linkType: hard 2049 linkType: hard
2050 2050
2051"@img/sharp-linuxmusl-arm64@npm:0.33.2": 2051"@img/sharp-linuxmusl-arm64@npm:0.33.3":
2052 version: 0.33.2 2052 version: 0.33.3
2053 resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.2" 2053 resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.3"
2054 dependencies: 2054 dependencies:
2055 "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.1" 2055 "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.2"
2056 dependenciesMeta: 2056 dependenciesMeta:
2057 "@img/sharp-libvips-linuxmusl-arm64": 2057 "@img/sharp-libvips-linuxmusl-arm64":
2058 optional: true 2058 optional: true
@@ -2060,11 +2060,11 @@ __metadata:
2060 languageName: node 2060 languageName: node
2061 linkType: hard 2061 linkType: hard
2062 2062
2063"@img/sharp-linuxmusl-x64@npm:0.33.2": 2063"@img/sharp-linuxmusl-x64@npm:0.33.3":
2064 version: 0.33.2 2064 version: 0.33.3
2065 resolution: "@img/sharp-linuxmusl-x64@npm:0.33.2" 2065 resolution: "@img/sharp-linuxmusl-x64@npm:0.33.3"
2066 dependencies: 2066 dependencies:
2067 "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.1" 2067 "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.2"
2068 dependenciesMeta: 2068 dependenciesMeta:
2069 "@img/sharp-libvips-linuxmusl-x64": 2069 "@img/sharp-libvips-linuxmusl-x64":
2070 optional: true 2070 optional: true
@@ -2072,25 +2072,25 @@ __metadata:
2072 languageName: node 2072 languageName: node
2073 linkType: hard 2073 linkType: hard
2074 2074
2075"@img/sharp-wasm32@npm:0.33.2": 2075"@img/sharp-wasm32@npm:0.33.3":
2076 version: 0.33.2 2076 version: 0.33.3
2077 resolution: "@img/sharp-wasm32@npm:0.33.2" 2077 resolution: "@img/sharp-wasm32@npm:0.33.3"
2078 dependencies: 2078 dependencies:
2079 "@emnapi/runtime": "npm:^0.45.0" 2079 "@emnapi/runtime": "npm:^1.1.0"
2080 conditions: cpu=wasm32 2080 conditions: cpu=wasm32
2081 languageName: node 2081 languageName: node
2082 linkType: hard 2082 linkType: hard
2083 2083
2084"@img/sharp-win32-ia32@npm:0.33.2": 2084"@img/sharp-win32-ia32@npm:0.33.3":
2085 version: 0.33.2 2085 version: 0.33.3
2086 resolution: "@img/sharp-win32-ia32@npm:0.33.2" 2086 resolution: "@img/sharp-win32-ia32@npm:0.33.3"
2087 conditions: os=win32 & cpu=ia32 2087 conditions: os=win32 & cpu=ia32
2088 languageName: node 2088 languageName: node
2089 linkType: hard 2089 linkType: hard
2090 2090
2091"@img/sharp-win32-x64@npm:0.33.2": 2091"@img/sharp-win32-x64@npm:0.33.3":
2092 version: 0.33.2 2092 version: 0.33.3
2093 resolution: "@img/sharp-win32-x64@npm:0.33.2" 2093 resolution: "@img/sharp-win32-x64@npm:0.33.3"
2094 conditions: os=win32 & cpu=x64 2094 conditions: os=win32 & cpu=x64
2095 languageName: node 2095 languageName: node
2096 linkType: hard 2096 linkType: hard
@@ -2270,13 +2270,13 @@ __metadata:
2270 languageName: node 2270 languageName: node
2271 linkType: hard 2271 linkType: hard
2272 2272
2273"@phosphor-icons/react@npm:2.1.3": 2273"@phosphor-icons/react@npm:2.0.15":
2274 version: 2.1.3 2274 version: 2.0.15
2275 resolution: "@phosphor-icons/react@npm:2.1.3" 2275 resolution: "@phosphor-icons/react@npm:2.0.15"
2276 peerDependencies: 2276 peerDependencies:
2277 react: ">= 16.8" 2277 react: ">= 16.8"
2278 react-dom: ">= 16.8" 2278 react-dom: ">= 16.8"
2279 checksum: 10c0/be64fdeeb101911c13c0e9897f00072e55f2eb50c317dd75ae09afca787640d29f18d5a1d006829344128656b2fa7cf165d55c2d3092b94fb26f0a58abbfb0c9 2279 checksum: 10c0/b7e60e1adb4440e5fa2930d780ff693ed1540da363354ed005e8d8690b3a94f40e5c3cd62c411b8bbcd847d623e4722bdb1d8a9a372cb9474a087d4794adad78
2280 languageName: node 2280 languageName: node
2281 linkType: hard 2281 linkType: hard
2282 2282
@@ -3069,14 +3069,14 @@ __metadata:
3069 languageName: node 3069 languageName: node
3070 linkType: hard 3070 linkType: hard
3071 3071
3072"@types/react@npm:*, @types/react@npm:^18.2.67": 3072"@types/react@npm:*, @types/react@npm:^18.2.69":
3073 version: 18.2.67 3073 version: 18.2.69
3074 resolution: "@types/react@npm:18.2.67" 3074 resolution: "@types/react@npm:18.2.69"
3075 dependencies: 3075 dependencies:
3076 "@types/prop-types": "npm:*" 3076 "@types/prop-types": "npm:*"
3077 "@types/scheduler": "npm:*" 3077 "@types/scheduler": "npm:*"
3078 csstype: "npm:^3.0.2" 3078 csstype: "npm:^3.0.2"
3079 checksum: 10c0/d8c49476ca8c96cbbcd8b1fd1bf881396dbf548fdadb0b6463d0bb262e5013e0a239994842d09e74f9c21dcaf620555bc1f1485f8578b0498af87bc06291f5a2 3079 checksum: 10c0/239b947ed8576a271057a6f571d0967098074b101a2bece244e88093dc8fb2f020872c463b8e78b2049334ba99158f6eef5960e51f73a389f86eee39b835d846
3080 languageName: node 3080 languageName: node
3081 linkType: hard 3081 linkType: hard
3082 3082
@@ -4943,10 +4943,10 @@ __metadata:
4943 languageName: node 4943 languageName: node
4944 linkType: hard 4944 linkType: hard
4945 4945
4946"detect-libc@npm:^2.0.2": 4946"detect-libc@npm:^2.0.3":
4947 version: 2.0.2 4947 version: 2.0.3
4948 resolution: "detect-libc@npm:2.0.2" 4948 resolution: "detect-libc@npm:2.0.3"
4949 checksum: 10c0/a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11 4949 checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7
4950 languageName: node 4950 languageName: node
4951 linkType: hard 4951 linkType: hard
4952 4952
@@ -7507,11 +7507,11 @@ __metadata:
7507 "@docusaurus/types": "npm:^3.1.1" 7507 "@docusaurus/types": "npm:^3.1.1"
7508 "@docusaurus/utils": "npm:^3.1.1" 7508 "@docusaurus/utils": "npm:^3.1.1"
7509 "@mdx-js/react": "npm:^3.0.1" 7509 "@mdx-js/react": "npm:^3.0.1"
7510 "@phosphor-icons/react": "npm:2.1.3" 7510 "@phosphor-icons/react": "npm:2.0.15"
7511 "@swc/core": "npm:^1.4.8" 7511 "@swc/core": "npm:^1.4.8"
7512 "@types/babel__core": "npm:^7.20.5" 7512 "@types/babel__core": "npm:^7.20.5"
7513 "@types/node": "npm:^20.11.30" 7513 "@types/node": "npm:^20.11.30"
7514 "@types/react": "npm:^18.2.67" 7514 "@types/react": "npm:^18.2.69"
7515 clsx: "npm:^2.1.0" 7515 clsx: "npm:^2.1.0"
7516 compression-webpack-plugin: "npm:^11.1.0" 7516 compression-webpack-plugin: "npm:^11.1.0"
7517 cross-env: "npm:^7.0.3" 7517 cross-env: "npm:^7.0.3"
@@ -7521,7 +7521,7 @@ __metadata:
7521 react-dom: "npm:^18.2.0" 7521 react-dom: "npm:^18.2.0"
7522 remark-smartypants: "npm:^2.1.0" 7522 remark-smartypants: "npm:^2.1.0"
7523 responsive-loader: "npm:^3.1.2" 7523 responsive-loader: "npm:^3.1.2"
7524 sharp: "npm:^0.33.2" 7524 sharp: "npm:^0.33.3"
7525 simple-icons: "npm:^11.9.0" 7525 simple-icons: "npm:^11.9.0"
7526 swc-loader: "npm:^0.2.6" 7526 swc-loader: "npm:^0.2.6"
7527 terser-webpack-plugin: "npm:^5.3.10" 7527 terser-webpack-plugin: "npm:^5.3.10"
@@ -10599,6 +10599,17 @@ __metadata:
10599 languageName: node 10599 languageName: node
10600 linkType: hard 10600 linkType: hard
10601 10601
10602"semver@npm:^7.6.0":
10603 version: 7.6.0
10604 resolution: "semver@npm:7.6.0"
10605 dependencies:
10606 lru-cache: "npm:^6.0.0"
10607 bin:
10608 semver: bin/semver.js
10609 checksum: 10c0/fbfe717094ace0aa8d6332d7ef5ce727259815bd8d8815700853f4faf23aacbd7192522f0dc5af6df52ef4fa85a355ebd2f5d39f554bd028200d6cf481ab9b53
10610 languageName: node
10611 linkType: hard
10612
10602"send@npm:0.18.0": 10613"send@npm:0.18.0":
10603 version: 0.18.0 10614 version: 0.18.0
10604 resolution: "send@npm:0.18.0" 10615 resolution: "send@npm:0.18.0"
@@ -10721,32 +10732,32 @@ __metadata:
10721 languageName: node 10732 languageName: node
10722 linkType: hard 10733 linkType: hard
10723 10734
10724"sharp@npm:^0.33.2": 10735"sharp@npm:^0.33.3":
10725 version: 0.33.2 10736 version: 0.33.3
10726 resolution: "sharp@npm:0.33.2" 10737 resolution: "sharp@npm:0.33.3"
10727 dependencies: 10738 dependencies:
10728 "@img/sharp-darwin-arm64": "npm:0.33.2" 10739 "@img/sharp-darwin-arm64": "npm:0.33.3"
10729 "@img/sharp-darwin-x64": "npm:0.33.2" 10740 "@img/sharp-darwin-x64": "npm:0.33.3"
10730 "@img/sharp-libvips-darwin-arm64": "npm:1.0.1" 10741 "@img/sharp-libvips-darwin-arm64": "npm:1.0.2"
10731 "@img/sharp-libvips-darwin-x64": "npm:1.0.1" 10742 "@img/sharp-libvips-darwin-x64": "npm:1.0.2"
10732 "@img/sharp-libvips-linux-arm": "npm:1.0.1" 10743 "@img/sharp-libvips-linux-arm": "npm:1.0.2"
10733 "@img/sharp-libvips-linux-arm64": "npm:1.0.1" 10744 "@img/sharp-libvips-linux-arm64": "npm:1.0.2"
10734 "@img/sharp-libvips-linux-s390x": "npm:1.0.1" 10745 "@img/sharp-libvips-linux-s390x": "npm:1.0.2"
10735 "@img/sharp-libvips-linux-x64": "npm:1.0.1" 10746 "@img/sharp-libvips-linux-x64": "npm:1.0.2"
10736 "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.1" 10747 "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.2"
10737 "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.1" 10748 "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.2"
10738 "@img/sharp-linux-arm": "npm:0.33.2" 10749 "@img/sharp-linux-arm": "npm:0.33.3"
10739 "@img/sharp-linux-arm64": "npm:0.33.2" 10750 "@img/sharp-linux-arm64": "npm:0.33.3"
10740 "@img/sharp-linux-s390x": "npm:0.33.2" 10751 "@img/sharp-linux-s390x": "npm:0.33.3"
10741 "@img/sharp-linux-x64": "npm:0.33.2" 10752 "@img/sharp-linux-x64": "npm:0.33.3"
10742 "@img/sharp-linuxmusl-arm64": "npm:0.33.2" 10753 "@img/sharp-linuxmusl-arm64": "npm:0.33.3"
10743 "@img/sharp-linuxmusl-x64": "npm:0.33.2" 10754 "@img/sharp-linuxmusl-x64": "npm:0.33.3"
10744 "@img/sharp-wasm32": "npm:0.33.2" 10755 "@img/sharp-wasm32": "npm:0.33.3"
10745 "@img/sharp-win32-ia32": "npm:0.33.2" 10756 "@img/sharp-win32-ia32": "npm:0.33.3"
10746 "@img/sharp-win32-x64": "npm:0.33.2" 10757 "@img/sharp-win32-x64": "npm:0.33.3"
10747 color: "npm:^4.2.3" 10758 color: "npm:^4.2.3"
10748 detect-libc: "npm:^2.0.2" 10759 detect-libc: "npm:^2.0.3"
10749 semver: "npm:^7.5.4" 10760 semver: "npm:^7.6.0"
10750 dependenciesMeta: 10761 dependenciesMeta:
10751 "@img/sharp-darwin-arm64": 10762 "@img/sharp-darwin-arm64":
10752 optional: true 10763 optional: true
@@ -10786,7 +10797,7 @@ __metadata:
10786 optional: true 10797 optional: true
10787 "@img/sharp-win32-x64": 10798 "@img/sharp-win32-x64":
10788 optional: true 10799 optional: true
10789 checksum: 10c0/4727fcf5e3e680f2f837f897c9fcff765a43a60c802ccb7064ab939b06318695e0d5d900039adb104370c1e675743bba16a514632193cbee64eae522270adc48 10800 checksum: 10c0/12f5203426595b4e64c807162a6d52358b591d25fbb414a51fe38861584759fba38485be951ed98d15be3dfe21f2def5336f78ca35bf8bbd22d88cc78ca03f2a
10790 languageName: node 10801 languageName: node
10791 linkType: hard 10802 linkType: hard
10792 10803