Merge pull request #1 from d0zingcat/feature/i18n_locale

This commit is contained in:
2026-01-04 17:46:18 +08:00
committed by GitHub
parent ad3fe1270c
commit a47e678167
8 changed files with 344 additions and 180 deletions

View File

@@ -131,6 +131,74 @@ const Modal = dynamic(
} }
) )
// Helper function to filter recordMap by language
function filterRecordMapByLanguage(
recordMap: types.ExtendedRecordMap,
targetLang: string
): types.ExtendedRecordMap {
// Deep clone collection_query to avoid mutating the original
const newRecordMap: types.ExtendedRecordMap = {
...recordMap,
collection_query: structuredClone(
recordMap.collection_query
) as types.ExtendedRecordMap['collection_query']
}
for (const collectionId of Object.keys(newRecordMap.collection_query || {})) {
const collection = newRecordMap.collection[collectionId]?.value
if (!collection) continue
const schema = collection.schema
if (!schema) continue
const langPropId = Object.keys(schema).find(
(key) => schema[key]?.name?.toLowerCase() === 'language'
)
if (!langPropId) continue
const views = newRecordMap.collection_query[collectionId]
if (!views) continue
for (const viewId of Object.keys(views)) {
const view = views[viewId]
if (view?.collection_group_results?.blockIds) {
const originalBlockIds = view.collection_group_results.blockIds
const filteredBlockIds = originalBlockIds.filter((blockId: string) => {
const block = newRecordMap.block[blockId]?.value
if (!block) return false
const propValue = block.properties?.[langPropId]
// If no language property is set, show the post
if (!propValue) return true
// Validate the property format
if (
!Array.isArray(propValue) ||
propValue.length === 0 ||
!Array.isArray(propValue[0]) ||
typeof propValue[0][0] !== 'string'
) {
// If the language property is present but not in the expected format,
// treat it as if no specific language is set and keep the block.
return true
}
const langText = propValue[0][0].toLowerCase().trim()
// Show if language matches or is set to 'all'
return langText.includes(targetLang) || langText === 'all'
})
view.collection_group_results.blockIds = filteredBlockIds
}
}
}
return newRecordMap
}
function Tweet({ id }: { id: string }) { function Tweet({ id }: { id: string }) {
const { recordMap } = useNotionContext() const { recordMap } = useNotionContext()
const tweet = (recordMap as types.ExtendedTweetRecordMap)?.tweets?.[id] const tweet = (recordMap as types.ExtendedTweetRecordMap)?.tweets?.[id]
@@ -192,6 +260,32 @@ export function NotionPage({
const router = useRouter() const router = useRouter()
const lite = useSearchParam('lite') const lite = useSearchParam('lite')
// Use state to store filtered recordMap, initialized with original
const [filteredRecordMap, setFilteredRecordMap] =
React.useState<types.ExtendedRecordMap | undefined>(recordMap)
// Apply language filtering only after mount to avoid hydration mismatch
React.useEffect(() => {
if (!config.isI18nEnabled || !recordMap) {
setFilteredRecordMap(recordMap)
return
}
const browserLang =
typeof navigator !== 'undefined' && navigator.language
? navigator.language
: 'en'
if (!browserLang) {
setFilteredRecordMap(recordMap)
return
}
const langCode = (browserLang.split('-')[0] || 'en').toLowerCase()
setFilteredRecordMap(filterRecordMapByLanguage(recordMap, langCode))
}, [recordMap, config.isI18nEnabled])
const components = React.useMemo<Partial<NotionComponents>>( const components = React.useMemo<Partial<NotionComponents>>(
() => ({ () => ({
nextLegacyImage: Image, nextLegacyImage: Image,
@@ -220,11 +314,11 @@ export function NotionPage({
if (lite) params.lite = lite if (lite) params.lite = lite
const searchParams = new URLSearchParams(params) const searchParams = new URLSearchParams(params)
return site ? mapPageUrl(site, recordMap!, searchParams) : undefined return site ? mapPageUrl(site, filteredRecordMap!, searchParams) : undefined
}, [site, recordMap, lite]) }, [site, filteredRecordMap, lite])
const keys = Object.keys(recordMap?.block || {}) const keys = Object.keys(filteredRecordMap?.block || {})
const block = recordMap?.block?.[keys[0]!]?.value const block = filteredRecordMap?.block?.[keys[0]!]?.value
// const isRootPage = // const isRootPage =
// parsePageId(block?.id) === parsePageId(site?.rootNotionPageId) // parsePageId(block?.id) === parsePageId(site?.rootNotionPageId)
@@ -238,11 +332,11 @@ export function NotionPage({
() => ( () => (
<PageAside <PageAside
block={block!} block={block!}
recordMap={recordMap!} recordMap={filteredRecordMap!}
isBlogPost={isBlogPost} isBlogPost={isBlogPost}
/> />
), ),
[block, recordMap, isBlogPost] [block, filteredRecordMap, isBlogPost]
) )
const footer = React.useMemo(() => <Footer />, []) const footer = React.useMemo(() => <Footer />, [])
@@ -255,37 +349,37 @@ export function NotionPage({
return <Page404 site={site} pageId={pageId} error={error} /> return <Page404 site={site} pageId={pageId} error={error} />
} }
const title = getBlockTitle(block, recordMap) || site.name const title = getBlockTitle(block, filteredRecordMap) || site.name
console.log('notion page', { console.log('notion page', {
isDev: config.isDev, isDev: config.isDev,
title, title,
pageId, pageId,
rootNotionPageId: site.rootNotionPageId, rootNotionPageId: site.rootNotionPageId,
recordMap recordMap: filteredRecordMap
}) })
if (!config.isServer) { if (!config.isServer) {
// add important objects to the window global for easy debugging // add important objects to the window global for easy debugging
const g = window as any const g = window as any
g.pageId = pageId g.pageId = pageId
g.recordMap = recordMap g.recordMap = filteredRecordMap
g.block = block g.block = block
} }
const canonicalPageUrl = config.isDev const canonicalPageUrl = config.isDev
? undefined ? undefined
: getCanonicalPageUrl(site, recordMap)(pageId) : getCanonicalPageUrl(site, filteredRecordMap)(pageId)
const socialImage = mapImageUrl( const socialImage = mapImageUrl(
getPageProperty<string>('Social Image', block, recordMap) || getPageProperty<string>('Social Image', block, filteredRecordMap) ||
(block as PageBlock).format?.page_cover || (block as PageBlock).format?.page_cover ||
config.defaultPageCover, config.defaultPageCover,
block block
) )
const socialDescription = const socialDescription =
getPageProperty<string>('Description', block, recordMap) || getPageProperty<string>('Description', block, filteredRecordMap) ||
config.description config.description
return ( return (
@@ -310,11 +404,11 @@ export function NotionPage({
)} )}
darkMode={isDarkMode} darkMode={isDarkMode}
components={components} components={components}
recordMap={recordMap} recordMap={filteredRecordMap}
rootPageId={site.rootNotionPageId} rootPageId={site.rootNotionPageId}
rootDomain={site.domain} rootDomain={site.domain}
fullPage={!isLiteMode} fullPage={!isLiteMode}
previewImages={!!recordMap.preview_images} previewImages={!!filteredRecordMap.preview_images}
showCollectionViewDropdown={false} showCollectionViewDropdown={false}
showTableOfContents={showTableOfContents} showTableOfContents={showTableOfContents}
minTableOfContentsItems={minTableOfContentsItems} minTableOfContentsItems={minTableOfContentsItems}

View File

@@ -91,6 +91,9 @@ export const isPreviewImageSupportEnabled: boolean = getSiteConfig(
false false
) )
// Optional whether or not to enable support for i18n
export const isI18nEnabled: boolean = getSiteConfig('isI18nEnabled', false)
// Optional whether or not to include the Notion ID in page URLs or just use slugs // Optional whether or not to include the Notion ID in page URLs or just use slugs
export const includeNotionIdInUrls: boolean = getSiteConfig( export const includeNotionIdInUrls: boolean = getSiteConfig(
'includeNotionIdInUrls', 'includeNotionIdInUrls',

View File

@@ -26,6 +26,7 @@ export interface SiteConfig {
isTweetEmbedSupportEnabled?: boolean isTweetEmbedSupportEnabled?: boolean
isRedisEnabled?: boolean isRedisEnabled?: boolean
isSearchEnabled?: boolean isSearchEnabled?: boolean
isI18nEnabled?: boolean
includeNotionIdInUrls?: boolean includeNotionIdInUrls?: boolean
pageUrlOverrides?: types.PageUrlOverridesMap | null pageUrlOverrides?: types.PageUrlOverridesMap | null

View File

@@ -1,7 +1,31 @@
import useDarkModeImpl from '@fisch0920/use-dark-mode' import useDarkModeImpl from '@fisch0920/use-dark-mode'
// Create a safe storage wrapper for SSR compatibility
const createSafeStorage = () => {
if (typeof window === 'undefined') {
return {
getItem: () => null,
setItem: () => {},
removeItem: () => {},
}
}
// The library expects an object with a localStorage property
return {
getItem: (key: string) => window.localStorage.getItem(key),
setItem: (key: string, value: string) => window.localStorage.setItem(key, value),
removeItem: (key: string) => window.localStorage.removeItem(key),
get localStorage() {
return window.localStorage
}
}
}
export function useDarkMode() { export function useDarkMode() {
const darkMode = useDarkModeImpl(false, { classNameDark: 'dark-mode' }) const darkMode = useDarkModeImpl(false, {
classNameDark: 'dark-mode',
storageProvider: createSafeStorage() as any
})
return { return {
isDarkMode: darkMode.value, isDarkMode: darkMode.value,

View File

@@ -37,6 +37,14 @@ export default withBundleAnalyzer({
return config return config
}, },
turbopack: {
resolveAlias: {
react: './node_modules/react',
'react-dom': './node_modules/react-dom'
}
},
// See https://react-tweet.vercel.app/next#troubleshooting // See https://react-tweet.vercel.app/next#troubleshooting
transpilePackages: ['react-tweet'] transpilePackages: ['react-tweet']
}) })

View File

@@ -38,9 +38,10 @@
"classnames": "^2.5.1", "classnames": "^2.5.1",
"expiry-map": "^2.0.0", "expiry-map": "^2.0.0",
"fathom-client": "^3.4.1", "fathom-client": "^3.4.1",
"katex": "^0.16.27",
"ky": "^1.8.1", "ky": "^1.8.1",
"lqip-modern": "^2.2.1", "lqip-modern": "^2.2.1",
"next": "^15.5.3", "next": "^16.1.1",
"notion-client": "^7.7.0", "notion-client": "^7.7.0",
"notion-types": "^7.7.0", "notion-types": "^7.7.0",
"notion-utils": "^7.7.0", "notion-utils": "^7.7.0",

357
pnpm-lock.yaml generated
View File

@@ -29,6 +29,9 @@ importers:
fathom-client: fathom-client:
specifier: ^3.4.1 specifier: ^3.4.1
version: 3.7.2 version: 3.7.2
katex:
specifier: ^0.16.27
version: 0.16.27
ky: ky:
specifier: ^1.8.1 specifier: ^1.8.1
version: 1.8.1 version: 1.8.1
@@ -36,8 +39,8 @@ importers:
specifier: ^2.2.1 specifier: ^2.2.1
version: 2.2.1 version: 2.2.1
next: next:
specifier: ^15.5.3 specifier: ^16.1.1
version: 15.5.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) version: 16.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
notion-client: notion-client:
specifier: ^7.7.0 specifier: ^7.7.0
version: 7.7.0 version: 7.7.0
@@ -139,8 +142,8 @@ packages:
'@emnapi/runtime@1.3.1': '@emnapi/runtime@1.3.1':
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
'@emnapi/runtime@1.5.0': '@emnapi/runtime@1.8.0':
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} resolution: {integrity: sha512-Z82FDl1ByxqPEPrAYYeTQVlx2FSHPe1qwX465c+96IRS3fTdSYRoJcRxg3g2fEG5I69z1dSEWQlNRRr0/677mg==}
'@epic-web/invariant@1.0.0': '@epic-web/invariant@1.0.0':
resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==}
@@ -225,8 +228,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@img/sharp-darwin-arm64@0.34.4': '@img/sharp-darwin-arm64@0.34.5':
resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@@ -237,8 +240,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@img/sharp-darwin-x64@0.34.4': '@img/sharp-darwin-x64@0.34.5':
resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@@ -248,8 +251,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-darwin-arm64@1.2.3': '@img/sharp-libvips-darwin-arm64@1.2.4':
resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@@ -258,8 +261,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-darwin-x64@1.2.3': '@img/sharp-libvips-darwin-x64@1.2.4':
resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@@ -268,8 +271,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-arm64@1.2.3': '@img/sharp-libvips-linux-arm64@1.2.4':
resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -278,23 +281,28 @@ packages:
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-arm@1.2.3': '@img/sharp-libvips-linux-arm@1.2.4':
resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-ppc64@1.2.3': '@img/sharp-libvips-linux-ppc64@1.2.4':
resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-riscv64@1.2.4':
resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
cpu: [riscv64]
os: [linux]
'@img/sharp-libvips-linux-s390x@1.0.4': '@img/sharp-libvips-linux-s390x@1.0.4':
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-s390x@1.2.3': '@img/sharp-libvips-linux-s390x@1.2.4':
resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
@@ -303,8 +311,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-x64@1.2.3': '@img/sharp-libvips-linux-x64@1.2.4':
resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -313,8 +321,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-libvips-linuxmusl-arm64@1.2.3': '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -323,8 +331,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-libvips-linuxmusl-x64@1.2.3': '@img/sharp-libvips-linuxmusl-x64@1.2.4':
resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -334,8 +342,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linux-arm64@0.34.4': '@img/sharp-linux-arm64@0.34.5':
resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -346,26 +354,32 @@ packages:
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-linux-arm@0.34.4': '@img/sharp-linux-arm@0.34.5':
resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-linux-ppc64@0.34.4': '@img/sharp-linux-ppc64@0.34.5':
resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@img/sharp-linux-riscv64@0.34.5':
resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [riscv64]
os: [linux]
'@img/sharp-linux-s390x@0.33.5': '@img/sharp-linux-s390x@0.33.5':
resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@img/sharp-linux-s390x@0.34.4': '@img/sharp-linux-s390x@0.34.5':
resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
@@ -376,8 +390,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linux-x64@0.34.4': '@img/sharp-linux-x64@0.34.5':
resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -388,8 +402,8 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-arm64@0.34.4': '@img/sharp-linuxmusl-arm64@0.34.5':
resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -400,8 +414,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-x64@0.34.4': '@img/sharp-linuxmusl-x64@0.34.5':
resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -411,13 +425,13 @@ packages:
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32] cpu: [wasm32]
'@img/sharp-wasm32@0.34.4': '@img/sharp-wasm32@0.34.5':
resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32] cpu: [wasm32]
'@img/sharp-win32-arm64@0.34.4': '@img/sharp-win32-arm64@0.34.5':
resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@@ -428,8 +442,8 @@ packages:
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@img/sharp-win32-ia32@0.34.4': '@img/sharp-win32-ia32@0.34.5':
resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
@@ -440,8 +454,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@img/sharp-win32-x64@0.34.4': '@img/sharp-win32-x64@0.34.5':
resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -470,53 +484,53 @@ packages:
'@next/bundle-analyzer@15.3.3': '@next/bundle-analyzer@15.3.3':
resolution: {integrity: sha512-9gddnjACK6yOa5IkmeFyzcwZh2rscsb6ZspTd7tymPYKQM96fJuKjn9HrRtPNKiMm7ExKNadAJqREmHdBgHZ9A==} resolution: {integrity: sha512-9gddnjACK6yOa5IkmeFyzcwZh2rscsb6ZspTd7tymPYKQM96fJuKjn9HrRtPNKiMm7ExKNadAJqREmHdBgHZ9A==}
'@next/env@15.5.3': '@next/env@16.1.1':
resolution: {integrity: sha512-RSEDTRqyihYXygx/OJXwvVupfr9m04+0vH8vyy0HfZ7keRto6VX9BbEk0J2PUk0VGy6YhklJUSrgForov5F9pw==} resolution: {integrity: sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA==}
'@next/swc-darwin-arm64@15.5.3': '@next/swc-darwin-arm64@16.1.1':
resolution: {integrity: sha512-nzbHQo69+au9wJkGKTU9lP7PXv0d1J5ljFpvb+LnEomLtSbJkbZyEs6sbF3plQmiOB2l9OBtN2tNSvCH1nQ9Jg==} resolution: {integrity: sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@next/swc-darwin-x64@15.5.3': '@next/swc-darwin-x64@16.1.1':
resolution: {integrity: sha512-w83w4SkOOhekJOcA5HBvHyGzgV1W/XvOfpkrxIse4uPWhYTTRwtGEM4v/jiXwNSJvfRvah0H8/uTLBKRXlef8g==} resolution: {integrity: sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@next/swc-linux-arm64-gnu@15.5.3': '@next/swc-linux-arm64-gnu@16.1.1':
resolution: {integrity: sha512-+m7pfIs0/yvgVu26ieaKrifV8C8yiLe7jVp9SpcIzg7XmyyNE7toC1fy5IOQozmr6kWl/JONC51osih2RyoXRw==} resolution: {integrity: sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-arm64-musl@15.5.3': '@next/swc-linux-arm64-musl@16.1.1':
resolution: {integrity: sha512-u3PEIzuguSenoZviZJahNLgCexGFhso5mxWCrrIMdvpZn6lkME5vc/ADZG8UUk5K1uWRy4hqSFECrON6UKQBbQ==} resolution: {integrity: sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-x64-gnu@15.5.3': '@next/swc-linux-x64-gnu@16.1.1':
resolution: {integrity: sha512-lDtOOScYDZxI2BENN9m0pfVPJDSuUkAD1YXSvlJF0DKwZt0WlA7T7o3wrcEr4Q+iHYGzEaVuZcsIbCps4K27sA==} resolution: {integrity: sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-linux-x64-musl@15.5.3': '@next/swc-linux-x64-musl@16.1.1':
resolution: {integrity: sha512-9vWVUnsx9PrY2NwdVRJ4dUURAQ8Su0sLRPqcCCxtX5zIQUBES12eRVHq6b70bbfaVaxIDGJN2afHui0eDm+cLg==} resolution: {integrity: sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-win32-arm64-msvc@15.5.3': '@next/swc-win32-arm64-msvc@16.1.1':
resolution: {integrity: sha512-1CU20FZzY9LFQigRi6jM45oJMU3KziA5/sSG+dXeVaTm661snQP6xu3ykGxxwU5sLG3sh14teO/IOEPVsQMRfA==} resolution: {integrity: sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@next/swc-win32-x64-msvc@15.5.3': '@next/swc-win32-x64-msvc@16.1.1':
resolution: {integrity: sha512-JMoLAq3n3y5tKXPQwCK5c+6tmwkuFDa2XAxz8Wm4+IVthdBZdZGh+lmiLUHg9f9IDwIQpUjp+ysd6OkYTyZRZw==} resolution: {integrity: sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -757,6 +771,10 @@ packages:
resolution: {integrity: sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==} resolution: {integrity: sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==}
hasBin: true hasBin: true
baseline-browser-mapping@2.9.11:
resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
hasBin: true
bl@4.1.0: bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
@@ -801,6 +819,9 @@ packages:
caniuse-lite@1.0.30001743: caniuse-lite@1.0.30001743:
resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==}
caniuse-lite@1.0.30001762:
resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==}
canvas@3.2.0: canvas@3.2.0:
resolution: {integrity: sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==} resolution: {integrity: sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==}
engines: {node: ^18.12.0 || >= 20.9.0} engines: {node: ^18.12.0 || >= 20.9.0}
@@ -968,10 +989,6 @@ packages:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
engines: {node: '>=8'} engines: {node: '>=8'}
detect-libc@2.1.0:
resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==}
engines: {node: '>=8'}
detect-libc@2.1.2: detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -1545,8 +1562,8 @@ packages:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
katex@0.16.23: katex@0.16.27:
resolution: {integrity: sha512-7VlC1hsEEolL9xNO05v9VjrvWZePkCVBJqj8ruICxYjZfHaHbaU53AlP+PODyFIXEnaEIEWi3wJy7FPZ95JAVg==} resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==}
hasBin: true hasBin: true
keyv@4.5.4: keyv@4.5.4:
@@ -1686,9 +1703,9 @@ packages:
natural-compare@1.4.0: natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@15.5.3: next@16.1.1:
resolution: {integrity: sha512-r/liNAx16SQj4D+XH/oI1dlpv9tdKJ6cONYPwwcCC46f2NjpaRWY+EKCzULfgQYV6YKXjHBchff2IZBSlZmJNw==} resolution: {integrity: sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} engines: {node: '>=20.9.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
'@opentelemetry/api': ^1.1.0 '@opentelemetry/api': ^1.1.0
@@ -2153,8 +2170,8 @@ packages:
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
sharp@0.34.4: sharp@0.34.5:
resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
shebang-command@2.0.0: shebang-command@2.0.0:
@@ -2492,7 +2509,7 @@ snapshots:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
'@emnapi/runtime@1.5.0': '@emnapi/runtime@1.8.0':
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
@@ -2598,9 +2615,9 @@ snapshots:
'@img/sharp-libvips-darwin-arm64': 1.0.4 '@img/sharp-libvips-darwin-arm64': 1.0.4
optional: true optional: true
'@img/sharp-darwin-arm64@0.34.4': '@img/sharp-darwin-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.2.3 '@img/sharp-libvips-darwin-arm64': 1.2.4
optional: true optional: true
'@img/sharp-darwin-x64@0.33.5': '@img/sharp-darwin-x64@0.33.5':
@@ -2608,60 +2625,63 @@ snapshots:
'@img/sharp-libvips-darwin-x64': 1.0.4 '@img/sharp-libvips-darwin-x64': 1.0.4
optional: true optional: true
'@img/sharp-darwin-x64@0.34.4': '@img/sharp-darwin-x64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.2.3 '@img/sharp-libvips-darwin-x64': 1.2.4
optional: true optional: true
'@img/sharp-libvips-darwin-arm64@1.0.4': '@img/sharp-libvips-darwin-arm64@1.0.4':
optional: true optional: true
'@img/sharp-libvips-darwin-arm64@1.2.3': '@img/sharp-libvips-darwin-arm64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-darwin-x64@1.0.4': '@img/sharp-libvips-darwin-x64@1.0.4':
optional: true optional: true
'@img/sharp-libvips-darwin-x64@1.2.3': '@img/sharp-libvips-darwin-x64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-arm64@1.0.4': '@img/sharp-libvips-linux-arm64@1.0.4':
optional: true optional: true
'@img/sharp-libvips-linux-arm64@1.2.3': '@img/sharp-libvips-linux-arm64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-arm@1.0.5': '@img/sharp-libvips-linux-arm@1.0.5':
optional: true optional: true
'@img/sharp-libvips-linux-arm@1.2.3': '@img/sharp-libvips-linux-arm@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-ppc64@1.2.3': '@img/sharp-libvips-linux-ppc64@1.2.4':
optional: true
'@img/sharp-libvips-linux-riscv64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-s390x@1.0.4': '@img/sharp-libvips-linux-s390x@1.0.4':
optional: true optional: true
'@img/sharp-libvips-linux-s390x@1.2.3': '@img/sharp-libvips-linux-s390x@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-x64@1.0.4': '@img/sharp-libvips-linux-x64@1.0.4':
optional: true optional: true
'@img/sharp-libvips-linux-x64@1.2.3': '@img/sharp-libvips-linux-x64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-arm64@1.0.4': '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-arm64@1.2.3': '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-x64@1.0.4': '@img/sharp-libvips-linuxmusl-x64@1.0.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-x64@1.2.3': '@img/sharp-libvips-linuxmusl-x64@1.2.4':
optional: true optional: true
'@img/sharp-linux-arm64@0.33.5': '@img/sharp-linux-arm64@0.33.5':
@@ -2669,9 +2689,9 @@ snapshots:
'@img/sharp-libvips-linux-arm64': 1.0.4 '@img/sharp-libvips-linux-arm64': 1.0.4
optional: true optional: true
'@img/sharp-linux-arm64@0.34.4': '@img/sharp-linux-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.2.3 '@img/sharp-libvips-linux-arm64': 1.2.4
optional: true optional: true
'@img/sharp-linux-arm@0.33.5': '@img/sharp-linux-arm@0.33.5':
@@ -2679,14 +2699,19 @@ snapshots:
'@img/sharp-libvips-linux-arm': 1.0.5 '@img/sharp-libvips-linux-arm': 1.0.5
optional: true optional: true
'@img/sharp-linux-arm@0.34.4': '@img/sharp-linux-arm@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.2.3 '@img/sharp-libvips-linux-arm': 1.2.4
optional: true optional: true
'@img/sharp-linux-ppc64@0.34.4': '@img/sharp-linux-ppc64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-ppc64': 1.2.3 '@img/sharp-libvips-linux-ppc64': 1.2.4
optional: true
'@img/sharp-linux-riscv64@0.34.5':
optionalDependencies:
'@img/sharp-libvips-linux-riscv64': 1.2.4
optional: true optional: true
'@img/sharp-linux-s390x@0.33.5': '@img/sharp-linux-s390x@0.33.5':
@@ -2694,9 +2719,9 @@ snapshots:
'@img/sharp-libvips-linux-s390x': 1.0.4 '@img/sharp-libvips-linux-s390x': 1.0.4
optional: true optional: true
'@img/sharp-linux-s390x@0.34.4': '@img/sharp-linux-s390x@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.2.3 '@img/sharp-libvips-linux-s390x': 1.2.4
optional: true optional: true
'@img/sharp-linux-x64@0.33.5': '@img/sharp-linux-x64@0.33.5':
@@ -2704,9 +2729,9 @@ snapshots:
'@img/sharp-libvips-linux-x64': 1.0.4 '@img/sharp-libvips-linux-x64': 1.0.4
optional: true optional: true
'@img/sharp-linux-x64@0.34.4': '@img/sharp-linux-x64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.2.3 '@img/sharp-libvips-linux-x64': 1.2.4
optional: true optional: true
'@img/sharp-linuxmusl-arm64@0.33.5': '@img/sharp-linuxmusl-arm64@0.33.5':
@@ -2714,9 +2739,9 @@ snapshots:
'@img/sharp-libvips-linuxmusl-arm64': 1.0.4 '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
optional: true optional: true
'@img/sharp-linuxmusl-arm64@0.34.4': '@img/sharp-linuxmusl-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.2.3 '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
optional: true optional: true
'@img/sharp-linuxmusl-x64@0.33.5': '@img/sharp-linuxmusl-x64@0.33.5':
@@ -2724,9 +2749,9 @@ snapshots:
'@img/sharp-libvips-linuxmusl-x64': 1.0.4 '@img/sharp-libvips-linuxmusl-x64': 1.0.4
optional: true optional: true
'@img/sharp-linuxmusl-x64@0.34.4': '@img/sharp-linuxmusl-x64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.2.3 '@img/sharp-libvips-linuxmusl-x64': 1.2.4
optional: true optional: true
'@img/sharp-wasm32@0.33.5': '@img/sharp-wasm32@0.33.5':
@@ -2734,24 +2759,24 @@ snapshots:
'@emnapi/runtime': 1.3.1 '@emnapi/runtime': 1.3.1
optional: true optional: true
'@img/sharp-wasm32@0.34.4': '@img/sharp-wasm32@0.34.5':
dependencies: dependencies:
'@emnapi/runtime': 1.5.0 '@emnapi/runtime': 1.8.0
optional: true optional: true
'@img/sharp-win32-arm64@0.34.4': '@img/sharp-win32-arm64@0.34.5':
optional: true optional: true
'@img/sharp-win32-ia32@0.33.5': '@img/sharp-win32-ia32@0.33.5':
optional: true optional: true
'@img/sharp-win32-ia32@0.34.4': '@img/sharp-win32-ia32@0.34.5':
optional: true optional: true
'@img/sharp-win32-x64@0.33.5': '@img/sharp-win32-x64@0.33.5':
optional: true optional: true
'@img/sharp-win32-x64@0.34.4': '@img/sharp-win32-x64@0.34.5':
optional: true optional: true
'@ioredis/commands@1.2.0': {} '@ioredis/commands@1.2.0': {}
@@ -2769,9 +2794,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@matejmazur/react-katex@3.1.3(katex@0.16.23)(react@19.1.1)': '@matejmazur/react-katex@3.1.3(katex@0.16.27)(react@19.1.1)':
dependencies: dependencies:
katex: 0.16.23 katex: 0.16.27
react: 19.1.1 react: 19.1.1
'@next/bundle-analyzer@15.3.3': '@next/bundle-analyzer@15.3.3':
@@ -2781,30 +2806,30 @@ snapshots:
- bufferutil - bufferutil
- utf-8-validate - utf-8-validate
'@next/env@15.5.3': {} '@next/env@16.1.1': {}
'@next/swc-darwin-arm64@15.5.3': '@next/swc-darwin-arm64@16.1.1':
optional: true optional: true
'@next/swc-darwin-x64@15.5.3': '@next/swc-darwin-x64@16.1.1':
optional: true optional: true
'@next/swc-linux-arm64-gnu@15.5.3': '@next/swc-linux-arm64-gnu@16.1.1':
optional: true optional: true
'@next/swc-linux-arm64-musl@15.5.3': '@next/swc-linux-arm64-musl@16.1.1':
optional: true optional: true
'@next/swc-linux-x64-gnu@15.5.3': '@next/swc-linux-x64-gnu@16.1.1':
optional: true optional: true
'@next/swc-linux-x64-musl@15.5.3': '@next/swc-linux-x64-musl@16.1.1':
optional: true optional: true
'@next/swc-win32-arm64-msvc@15.5.3': '@next/swc-win32-arm64-msvc@16.1.1':
optional: true optional: true
'@next/swc-win32-x64-msvc@15.5.3': '@next/swc-win32-x64-msvc@16.1.1':
optional: true optional: true
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
@@ -3085,6 +3110,8 @@ snapshots:
baseline-browser-mapping@2.8.5: {} baseline-browser-mapping@2.8.5: {}
baseline-browser-mapping@2.9.11: {}
bl@4.1.0: bl@4.1.0:
dependencies: dependencies:
buffer: 5.7.1 buffer: 5.7.1
@@ -3142,6 +3169,8 @@ snapshots:
caniuse-lite@1.0.30001743: {} caniuse-lite@1.0.30001743: {}
caniuse-lite@1.0.30001762: {}
canvas@3.2.0: canvas@3.2.0:
dependencies: dependencies:
node-addon-api: 7.1.1 node-addon-api: 7.1.1
@@ -3290,9 +3319,6 @@ snapshots:
detect-libc@2.0.3: {} detect-libc@2.0.3: {}
detect-libc@2.1.0:
optional: true
detect-libc@2.1.2: detect-libc@2.1.2:
optional: true optional: true
@@ -4002,7 +4028,7 @@ snapshots:
object.assign: 4.1.7 object.assign: 4.1.7
object.values: 1.2.1 object.values: 1.2.1
katex@0.16.23: katex@0.16.27:
dependencies: dependencies:
commander: 8.3.0 commander: 8.3.0
@@ -4124,25 +4150,26 @@ snapshots:
natural-compare@1.4.0: {} natural-compare@1.4.0: {}
next@15.5.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1): next@16.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies: dependencies:
'@next/env': 15.5.3 '@next/env': 16.1.1
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001743 baseline-browser-mapping: 2.9.11
caniuse-lite: 1.0.30001762
postcss: 8.4.31 postcss: 8.4.31
react: 19.1.1 react: 19.1.1
react-dom: 19.1.1(react@19.1.1) react-dom: 19.1.1(react@19.1.1)
styled-jsx: 5.1.6(react@19.1.1) styled-jsx: 5.1.6(react@19.1.1)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 15.5.3 '@next/swc-darwin-arm64': 16.1.1
'@next/swc-darwin-x64': 15.5.3 '@next/swc-darwin-x64': 16.1.1
'@next/swc-linux-arm64-gnu': 15.5.3 '@next/swc-linux-arm64-gnu': 16.1.1
'@next/swc-linux-arm64-musl': 15.5.3 '@next/swc-linux-arm64-musl': 16.1.1
'@next/swc-linux-x64-gnu': 15.5.3 '@next/swc-linux-x64-gnu': 16.1.1
'@next/swc-linux-x64-musl': 15.5.3 '@next/swc-linux-x64-musl': 16.1.1
'@next/swc-win32-arm64-msvc': 15.5.3 '@next/swc-win32-arm64-msvc': 16.1.1
'@next/swc-win32-x64-msvc': 15.5.3 '@next/swc-win32-x64-msvc': 16.1.1
sharp: 0.34.4 sharp: 0.34.5
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros
@@ -4434,8 +4461,8 @@ snapshots:
react-notion-x@7.7.0(@babel/runtime@7.28.4)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): react-notion-x@7.7.0(@babel/runtime@7.28.4)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies: dependencies:
'@fisch0920/medium-zoom': 1.0.7 '@fisch0920/medium-zoom': 1.0.7
'@matejmazur/react-katex': 3.1.3(katex@0.16.23)(react@19.1.1) '@matejmazur/react-katex': 3.1.3(katex@0.16.27)(react@19.1.1)
katex: 0.16.23 katex: 0.16.27
notion-types: 7.7.0 notion-types: 7.7.0
notion-utils: 7.7.0 notion-utils: 7.7.0
prismjs: 1.30.0 prismjs: 1.30.0
@@ -4673,34 +4700,36 @@ snapshots:
'@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-ia32': 0.33.5
'@img/sharp-win32-x64': 0.33.5 '@img/sharp-win32-x64': 0.33.5
sharp@0.34.4: sharp@0.34.5:
dependencies: dependencies:
'@img/colour': 1.0.0 '@img/colour': 1.0.0
detect-libc: 2.1.0 detect-libc: 2.1.2
semver: 7.7.2 semver: 7.7.3
optionalDependencies: optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.4 '@img/sharp-darwin-arm64': 0.34.5
'@img/sharp-darwin-x64': 0.34.4 '@img/sharp-darwin-x64': 0.34.5
'@img/sharp-libvips-darwin-arm64': 1.2.3 '@img/sharp-libvips-darwin-arm64': 1.2.4
'@img/sharp-libvips-darwin-x64': 1.2.3 '@img/sharp-libvips-darwin-x64': 1.2.4
'@img/sharp-libvips-linux-arm': 1.2.3 '@img/sharp-libvips-linux-arm': 1.2.4
'@img/sharp-libvips-linux-arm64': 1.2.3 '@img/sharp-libvips-linux-arm64': 1.2.4
'@img/sharp-libvips-linux-ppc64': 1.2.3 '@img/sharp-libvips-linux-ppc64': 1.2.4
'@img/sharp-libvips-linux-s390x': 1.2.3 '@img/sharp-libvips-linux-riscv64': 1.2.4
'@img/sharp-libvips-linux-x64': 1.2.3 '@img/sharp-libvips-linux-s390x': 1.2.4
'@img/sharp-libvips-linuxmusl-arm64': 1.2.3 '@img/sharp-libvips-linux-x64': 1.2.4
'@img/sharp-libvips-linuxmusl-x64': 1.2.3 '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
'@img/sharp-linux-arm': 0.34.4 '@img/sharp-libvips-linuxmusl-x64': 1.2.4
'@img/sharp-linux-arm64': 0.34.4 '@img/sharp-linux-arm': 0.34.5
'@img/sharp-linux-ppc64': 0.34.4 '@img/sharp-linux-arm64': 0.34.5
'@img/sharp-linux-s390x': 0.34.4 '@img/sharp-linux-ppc64': 0.34.5
'@img/sharp-linux-x64': 0.34.4 '@img/sharp-linux-riscv64': 0.34.5
'@img/sharp-linuxmusl-arm64': 0.34.4 '@img/sharp-linux-s390x': 0.34.5
'@img/sharp-linuxmusl-x64': 0.34.4 '@img/sharp-linux-x64': 0.34.5
'@img/sharp-wasm32': 0.34.4 '@img/sharp-linuxmusl-arm64': 0.34.5
'@img/sharp-win32-arm64': 0.34.4 '@img/sharp-linuxmusl-x64': 0.34.5
'@img/sharp-win32-ia32': 0.34.4 '@img/sharp-wasm32': 0.34.5
'@img/sharp-win32-x64': 0.34.4 '@img/sharp-win32-arm64': 0.34.5
'@img/sharp-win32-ia32': 0.34.5
'@img/sharp-win32-x64': 0.34.5
optional: true optional: true
shebang-command@2.0.0: shebang-command@2.0.0:

View File

@@ -38,6 +38,10 @@ export default siteConfig({
// environment variables. see the readme for more info // environment variables. see the readme for more info
isRedisEnabled: true, isRedisEnabled: true,
// whether or not to enable support for i18n (optional)
// if enabled, the site will filter posts based on the user's browser language
isI18nEnabled: true,
// map of notion page IDs to URL paths (optional) // map of notion page IDs to URL paths (optional)
// any pages defined here will override their default URL paths // any pages defined here will override their default URL paths
// example: // example: