diff options
author | Kristóf Marussy <kristof@marussy.com> | 2024-03-23 18:02:45 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2024-03-23 18:07:21 +0100 |
commit | fbd41d395916176dde11bb0e417f1210f34eb4ab (patch) | |
tree | 7384a50b1a90ba5909d8f93f589df661640681e6 | |
parent | Simplify compression (diff) | |
download | blog-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.
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 | --- | ||
2 | SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | SPDX-License-Identifier: CC-BY-4.0 | ||
4 | tags: [css] | ||
5 | authors: kris | ||
6 | slug: first-post | ||
7 | --- | ||
8 | |||
9 | # First post | ||
10 | |||
11 | ## Section | ||
12 | |||
13 | ### Subsection | ||
14 | |||
15 | #### Subsubsection | ||
16 | |||
17 | Testing. | ||
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 | |||
5 | kris: | ||
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 | ||
8 | import type { PluginOptions as ClassicThemeOptions } from '@docusaurus/theme-classic'; | 8 | import type { Options as BlogOptions } from '@docusaurus/plugin-content-blog'; |
9 | import type { Options as PagesOptions } from '@docusaurus/plugin-content-pages'; | ||
10 | import type { Options as ClassicThemeOptions } from '@docusaurus/theme-classic'; | ||
9 | import type { UserThemeConfig } from '@docusaurus/theme-common'; | 11 | import type { UserThemeConfig } from '@docusaurus/theme-common'; |
10 | import type { Config } from '@docusaurus/types'; | 12 | import type { Config } from '@docusaurus/types'; |
11 | import { Config as SwcConfig } from '@swc/core'; | 13 | import { Config as SwcConfig } from '@swc/core'; |
12 | import smartypants from 'remark-smartypants'; | 14 | import smartypants from 'remark-smartypants'; |
13 | 15 | ||
16 | const remarkPlugins = [[smartypants, { dashes: 'oldschool' }]]; | ||
17 | |||
14 | export default { | 18 | export 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 @@ | |||
1 | Copyright (c) Facebook, Inc. and its affiliates. | ||
2 | Copyright (c) 2024 Kristóf Marussy <kristof@marussy.com> | ||
3 | |||
4 | SPDX-License-Identifier: MIT | ||
5 | |||
6 | Parts 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 @@ | |||
1 | SPDX-FileCopyrightText: 2024 Kristóf Marussy <kristof@marussy.com> | ||
2 | |||
3 | SPDX-License-Identifier: MIT | ||
4 | |||
5 | Parts 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 ❤︎ 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 @@ | |||
1 | SPDX-FileCopyrightText: 2024 Kristóf Marussy <kristof@marussy.com> | ||
2 | |||
3 | SPDX-License-Identifier: MIT | ||
4 | |||
5 | Parts 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 @@ | |||
1 | SPDX-FileCopyrightText: 2024 Kristóf Marussy <kristof@marussy.com> | ||
2 | |||
3 | SPDX-License-Identifier: MIT | ||
4 | |||
5 | Parts 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 | |||
7 | import type { Props } from '@theme/BlogListPage'; | ||
8 | import Layout from '@theme/Layout'; | ||
9 | |||
10 | import Blog from './landing/sections/Blog'; | ||
11 | import Contact from './landing/sections/Contact'; | ||
12 | import Hero from './landing/sections/Hero'; | ||
13 | import Publications from './landing/sections/Publications'; | ||
14 | import Research from './landing/sections/Research'; | ||
15 | import Resume from './landing/sections/Resume'; | ||
16 | import TrackActiveSection from './TrackActiveSection'; | ||
17 | |||
18 | export 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 | |||
8 | import Link from '@docusaurus/Link'; | ||
9 | import type { Props } from '@theme/BlogListPage'; | ||
10 | import type { Content } from '@theme/BlogPostPage'; | ||
11 | import Translate from '@docusaurus/Translate'; | ||
12 | import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; | ||
13 | import clsx from 'clsx'; | ||
14 | |||
15 | import Section from '@site/src/components/landing/Section'; | ||
16 | import Subtitle from '@site/src/components/landing/Subtitle'; | ||
17 | |||
18 | import styles from './Blog.module.css'; | ||
19 | import React from 'react'; | ||
20 | |||
21 | const columnLength = 5; | ||
22 | |||
23 | function 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 {dateTimeFormat.format(new Date(content.metadata.date))} | ||
56 | </span> | ||
57 | </li> | ||
58 | ))} | ||
59 | </ul> | ||
60 | </div> | ||
61 | ); | ||
62 | } | ||
63 | |||
64 | export 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 | ||
85 | h1, | 85 | h1, |
86 | h2, | 86 | h2, |
87 | .markdown > h3, | ||
87 | .button { | 88 | .button { |
88 | --casl: 1; | 89 | --casl: 1; |
89 | } | 90 | } |
90 | 91 | ||
91 | h3 { | 92 | h3, |
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 | |||
7 | import Layout from '@theme/Layout'; | ||
8 | |||
9 | import Contact from '@site/src/components/landing/sections/Contact'; | ||
10 | import Hero from '@site/src/components/landing/sections/Hero'; | ||
11 | import Publications from '@site/src/components/landing/sections/Publications'; | ||
12 | import Research from '@site/src/components/landing/sections/Research'; | ||
13 | import Resume from '@site/src/components/landing/sections/Resume'; | ||
14 | import TrackActiveSection from '@site/src/components/TrackActiveSection'; | ||
15 | |||
16 | export 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)$/; | |||
20 | export default function compressionPlugin(): Plugin<void> { | 20 | export 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 | |||
7 | import React from 'react'; | ||
8 | import type { Props } from '@theme/BlogListPage'; | ||
9 | import BlogListPage from '@theme-original/BlogListPage'; | ||
10 | |||
11 | import Landing from '@site/src/components/Landing'; | ||
12 | |||
13 | export 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 | |||
14 | import Link from '@docusaurus/Link'; | ||
15 | import { translate } from '@docusaurus/Translate'; | ||
16 | import { useVisibleBlogSidebarItems } from '@docusaurus/theme-common/internal'; | ||
17 | import type { Props } from '@theme/BlogSidebar/Desktop'; | ||
18 | import React from 'react'; | ||
19 | import clsx from 'clsx'; | ||
20 | |||
21 | import styles from './Desktop.module.css'; | ||
22 | |||
23 | export 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 | ||
14 | import Link from '@docusaurus/Link'; | 14 | import Link from '@docusaurus/Link'; |
15 | import type { Props } from '@theme/Footer/Copyright'; | ||
15 | import clsx from 'clsx'; | 16 | import clsx from 'clsx'; |
16 | import React from 'react'; | 17 | import React from 'react'; |
17 | 18 | ||
@@ -19,7 +20,7 @@ import { CCLicenseLink, LicenseLink } from '@site/src/components/licenses'; | |||
19 | 20 | ||
20 | import styles from './Copyright.module.css'; | 21 | import styles from './Copyright.module.css'; |
21 | 22 | ||
22 | export default function FooterCopyright({ copyright }) { | 23 | export 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'; | |||
18 | import isInternalUrl from '@docusaurus/isInternalUrl'; | 18 | import isInternalUrl from '@docusaurus/isInternalUrl'; |
19 | import { isRegexpStringMatch } from '@docusaurus/theme-common'; | 19 | import { isRegexpStringMatch } from '@docusaurus/theme-common'; |
20 | import IconExternalLink from '@theme/Icon/ExternalLink'; | 20 | import IconExternalLink from '@theme/Icon/ExternalLink'; |
21 | import type { Props } from '@theme/NavbarItem/NavbarNavLink'; | ||
22 | |||
21 | import { useActiveSection } from '@site/src/components/ActiveSectionProvider'; | 23 | import { useActiveSection } from '@site/src/components/ActiveSectionProvider'; |
22 | 24 | ||
23 | export default function NavbarNavLink({ | 25 | export 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 | |||
7 | import React from 'react'; | ||
8 | import type { Props } from '@theme/PaginatorNavLink'; | ||
9 | import PaginatorNavLink from '@theme-original/PaginatorNavLink'; | ||
10 | |||
11 | export 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 | ||
7 | import Head from '@docusaurus/Head'; | ||
7 | import type { Props } from '@theme/Root'; | 8 | import type { Props } from '@theme/Root'; |
8 | import Root from '@theme-original/Root'; | 9 | import Root from '@theme-original/Root'; |
9 | 10 | ||
10 | import ActiveSectionProvider from '@site/src/components/ActiveSectionProvider'; | 11 | import ActiveSectionProvider from '@site/src/components/ActiveSectionProvider'; |
12 | import fontURL from '@site/src/fonts/recursive-latin.woff2?url'; | ||
11 | 13 | ||
12 | export default function RootWrapper(props: Props) { | 14 | export 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 | |||
7 | import Head from '@docusaurus/Head'; | ||
8 | |||
9 | import SiteMetadata from '@theme-original/SiteMetadata'; | ||
10 | |||
11 | import fontURL from '@site/src/fonts/recursive-latin.woff2?url'; | ||
12 | |||
13 | export 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 | ||
@@ -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 | ||