diff --git a/components/Footer.tsx b/components/Footer.tsx
deleted file mode 100644
index 7321a86..0000000
--- a/components/Footer.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import config from '#config';
-
-export default function Footer() {
- const year = new Date().getFullYear();
- const {site: {startYear: year0 = year, author} = {}} = config;
-
- return ;
-}
diff --git a/components/MDXRoot.tsx b/components/MDXRoot.tsx
index a131ffc..84bb003 100644
--- a/components/MDXRoot.tsx
+++ b/components/MDXRoot.tsx
@@ -1,38 +1,4 @@
-import Head from 'next/head';
-import type {AppProps} from 'next/app';
-import Nav from './Nav';
-import Footer from './Footer';
-import MetaInfo from './MetaInfo';
-import type {HeadingInfo} from '@sup39/rehype-mdx-export-headings';
+import MDXPageFactory from '@sup39/mdx-page';
+import config from '#config';
-export type MDXProps = {
- children: JSX.Element
- router: AppProps['router'],
- meta: Partial<{
- title: string
- description: string
- h1: string
- [key: string]: any
- }>
- headings: HeadingInfo[]
-};
-
-export default function MDXRoot({children, router: {pathname}, meta={}, headings}: MDXProps) {
- const {title, description} = meta;
- const h1 = meta.h1 ?? title;
- return <>
-
- {title}
- {description && }
-
-
-
-
- {h1 ? {h1}
: <>>}
-
- {children}
-
-
-
- >;
-}
+export default MDXPageFactory(config);
diff --git a/components/MetaInfo.tsx b/components/MetaInfo.tsx
deleted file mode 100644
index 603edcf..0000000
--- a/components/MetaInfo.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import config from '#config';
-
-export default function MetaInfo({data}: {data: {[_: string]: any}}) {
- const {metaFields: fields = []} = config;
- return {fields.map(({label, prop}) => {
- const val = data[prop];
- return val == null ? null :
- {label}
- {val}
-
;
- })}
;
-}
diff --git a/components/NavHeader.tsx b/components/NavHeader.tsx
deleted file mode 100644
index 60e5222..0000000
--- a/components/NavHeader.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import Link from 'next/link';
-import config from '#config';
-
-export default function NavHeader({onToggleFold}: {onToggleFold?: ()=>void}) {
- const {site: {name: siteName = 'supMDX'} = {}} = config;
- return ;
-}
diff --git a/components/mdx.tsx b/components/mdx.tsx
deleted file mode 100644
index f86ff6b..0000000
--- a/components/mdx.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-/** ... */
-export function S({
- $: TagName = 'span',
- _: modifier = '',
- className, children, ...props
-}: {
- $?: string,
- _?: string,
-} & React.ComponentProps) {
- const cls = [
- ...(className ? [className] : []),
- ...(modifier.match(/\.(\w+)/g) ?? []),
- ].map(s => s.slice(1)).join(' ');
- return {children};
-}
diff --git a/core/components/heading.tsx b/core/components/heading.tsx
new file mode 100644
index 0000000..b3cd81c
--- /dev/null
+++ b/core/components/heading.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+
+const hx = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;
+export const anchoredHx = Object.fromEntries(hx.map(H => [
+ H,
+ ({children, id, ...props}: React.ComponentProps<(typeof hx)[number]>) => (
+
+ {id && }
+ {children}
+
+ ),
+]));
diff --git a/core/components/index.tsx b/core/components/index.tsx
new file mode 100644
index 0000000..89caab1
--- /dev/null
+++ b/core/components/index.tsx
@@ -0,0 +1,6 @@
+export * from './heading';
+export * from './tag';
+
+import {anchoredHx} from './heading';
+const mdx = {...anchoredHx};
+export default mdx;
diff --git a/core/components/tag.tsx b/core/components/tag.tsx
new file mode 100644
index 0000000..56ba441
--- /dev/null
+++ b/core/components/tag.tsx
@@ -0,0 +1,79 @@
+import React from 'react';
+
+export type TagFactory = {
+ [modifier: string]: TagFactory
+ (children: React.ReactNode): JSX.Element
+ (s: TemplateStringsArray, ...argv: any[]): JSX.Element
+};
+
+export type TagInfo = {
+ tagName: string
+ attrs: Record
+};
+export const AttrProxyHandler: ProxyHandler = {
+ get({tagName, attrs}, modifier) {
+ let extra: TagInfo['attrs'];
+ if (typeof modifier === 'symbol') {
+ extra = {};
+ } else if (modifier.startsWith('#')) {
+ // #id
+ extra = {id: modifier.slice(1)};
+ } else if (modifier.includes('=')) {
+ // attr=value
+ const idx = modifier.indexOf('=');
+ extra = {[modifier.slice(0, idx)]: modifier.slice(idx+1)};
+ } else {
+ // .class
+ extra = {class: attrs.class ? attrs.class+' '+modifier : modifier};
+ }
+ // apply
+ return new Proxy(
+ Object.assign(()=>{}, {tagName, attrs: {...attrs, ...extra}}),
+ AttrProxyHandler,
+ );
+ },
+ apply({
+ tagName,
+ attrs: {class: className, for: htmlFor, style, ...attrs},
+ }, thisArg, args) {
+ const [s, ...argv] = args;
+ const children = s instanceof Array ?
+ s[0]+argv.map((e, i) => `${e}${s[i+1]}`).join('') : s;
+ return React.createElement(
+ tagName,
+ {
+ className,
+ htmlFor,
+ ...(style == null ? {} : {
+ style: Object.fromEntries(style.split(';').flatMap(line => {
+ const idx = line.indexOf(':');
+ if (idx < 0) return [];
+ const key0 = line.slice(0, idx);
+ const value = line.slice(idx+1);
+ // kebab-case to camelCase
+ const ktoks = key0.split('-');
+ const key = ktoks[0] + ktoks.slice(1).map(s => s[0].toUpperCase()+s.slice(1)).join('');
+ return [[key, value]];
+ })),
+ }),
+ ...attrs,
+ },
+ children,
+ );
+ },
+};
+
+export const TagProxyHandler: ProxyHandler> = {
+ get(self, arg) {
+ const tagName = arg.toString();
+ return new Proxy(
+ Object.assign(()=>{}, {tagName, attrs: {}}),
+ AttrProxyHandler,
+ );
+ },
+};
+
+export const T = new Proxy({}, TagProxyHandler);
+export const S = T.span;
+export const C = T.code;
+export const tags = {T, S, C};
diff --git a/core/nav/Nav.tsx b/core/nav/Nav.tsx
new file mode 100644
index 0000000..d505bca
--- /dev/null
+++ b/core/nav/Nav.tsx
@@ -0,0 +1,25 @@
+import {useState} from 'react';
+import type {NavEntryInfo} from './NavEntry';
+import {NavBase, HeadingInfo} from './NavBase';
+import {NavHeader, NavHeaderConfig} from './NavHeader';
+
+export type NavConfig = {
+ site: NavHeaderConfig
+ nav: NavEntryInfo[]
+}
+export type NavProps = {
+ children?: React.ReactNode
+ headings: HeadingInfo[]
+ pathname: string
+ config: NavConfig
+};
+
+export function Nav({config, children, ...props}: NavProps) {
+ const [navFold, setNavFold] = useState(false);
+ return (
+
+ setNavFold(e=>!e)} />
+ {children}
+
+ );
+}
diff --git a/core/nav/NavBase.tsx b/core/nav/NavBase.tsx
new file mode 100644
index 0000000..8f2938a
--- /dev/null
+++ b/core/nav/NavBase.tsx
@@ -0,0 +1,30 @@
+import {NavEntry, NavEntryInfo} from './NavEntry';
+
+export type HeadingInfo = {
+ tagName: string;
+ label: string;
+ id: string;
+};
+export type NavBaseProps = {
+ children?: React.ReactNode
+ headings: HeadingInfo[]
+ pathname: string
+ entries: NavEntryInfo[]
+ className?: string
+}
+
+export function NavBase({
+ children, headings, pathname, entries, className,
+}: NavBaseProps) {
+ const headingsJSX = {headings.map(({label, id}) => -
+ {label}
+
)}
;
+
+ return ;
+}
diff --git a/components/Nav.tsx b/core/nav/NavEntry.tsx
similarity index 51%
rename from components/Nav.tsx
rename to core/nav/NavEntry.tsx
index de5c480..b4b1661 100644
--- a/components/Nav.tsx
+++ b/core/nav/NavEntry.tsx
@@ -1,17 +1,13 @@
import {useState} from 'react';
import Link from 'next/link';
-import NavHeader from './NavHeader';
-import type {HeadingInfo} from '@sup39/rehype-mdx-export-headings';
-import config from '#config';
-
export type NavEntryInfo = {
- name: string
+ label: string
link: string
- children?: NavEntryInfo[]|null
+ children?: NavEntryInfo[]
};
export function NavEntry({
- entry: {name, link, children}, dir, here, children: childrenJSX,
+ entry: {label, link, children}, dir, here, children: childrenJSX,
}: {entry: NavEntryInfo, dir: string, here: string, children?: Body}) {
const href = dir+link;
const isHere = href.replace(/\/$/, '')===here; // remove trailing slash
@@ -21,7 +17,7 @@ export function NavEntry({
const entryCls = 'nav-entry'+(isHere ? ' nav-here' : '');
return children?.length ? <>
-
{name}
+
{label}
{isHere ? childrenJSX : <>>}
@@ -29,27 +25,6 @@ export function NavEntry({
children.map(entry =>
{childrenJSX})
}
> :
- {name}
+ {label}
;
}
-
-export default function Nav({children, headings, pathname}: {
- children?: JSX.Element
- headings: HeadingInfo[]
- pathname: string
-}) {
- const [navFold, setNavFold] = useState(false);
-
- const headingsJSX = {headings.map(({label, id}) => -
- {label}
-
)}
;
-
- return ;
-}
diff --git a/core/nav/NavHeader.tsx b/core/nav/NavHeader.tsx
new file mode 100644
index 0000000..82bb299
--- /dev/null
+++ b/core/nav/NavHeader.tsx
@@ -0,0 +1,36 @@
+import Link from 'next/link';
+
+export type NavHeaderConfig = {
+ title: string
+ subtitle?: string
+ icon?: string | {
+ href: string
+ alt?: string
+ size?: number
+ width?: number
+ height?: number
+ }
+};
+
+export function NavHeader({config, onToggleFold}: {
+ config: NavHeaderConfig
+ onToggleFold?: ()=>void
+}) {
+ const {title, subtitle, icon: icon0} = config;
+ const icon = typeof icon0 === 'string' ? {href: icon0} : icon0;
+ return
+
+ {icon?.href && }
+
+
+
+ ;
+}
diff --git a/core/nav/index.tsx b/core/nav/index.tsx
new file mode 100644
index 0000000..3306a5a
--- /dev/null
+++ b/core/nav/index.tsx
@@ -0,0 +1,7 @@
+export * from './Nav';
+export * from './NavBase';
+export * from './NavEntry';
+export * from './NavHeader';
+
+import {Nav} from './Nav';
+export default Nav;
diff --git a/core/page/Footer.tsx b/core/page/Footer.tsx
new file mode 100644
index 0000000..f4fc5c7
--- /dev/null
+++ b/core/page/Footer.tsx
@@ -0,0 +1,16 @@
+import React from 'react';
+export type FooterConfig = {
+ site: {
+ startYear?: number
+ author: string
+ }
+};
+
+export function Footer({config}: {config: FooterConfig}) {
+ const year = new Date().getFullYear();
+ const {site: {startYear: year0 = year, author}} = config;
+ const yearStr = year>year0 ? `${year0}-${year}` : year;
+ return ;
+}
diff --git a/core/page/MDXPage.tsx b/core/page/MDXPage.tsx
new file mode 100644
index 0000000..0999568
--- /dev/null
+++ b/core/page/MDXPage.tsx
@@ -0,0 +1,83 @@
+import Head from 'next/head';
+import {Nav, NavHeaderConfig} from '@sup39/mdx-nav';
+import {Footer} from './Footer';
+import {MetaInfo} from './MetaInfo';
+import {I18N, LocaleInfo, translate} from './i18n';
+import {I18NNavEntryInfo, translateNav} from './i18n-nav';
+
+type HeadingInfo = {
+ tagName: string;
+ label: string;
+ id: string;
+};
+
+export type MDXProps = {
+ children: JSX.Element
+ router: {pathname: string} & LocaleInfo
+ meta: Partial<{
+ title: I18N
+ description: I18N
+ h1: I18N
+ [key: string]: any
+ }>
+ headings: HeadingInfo[]
+ config: MDXConfig
+};
+
+export type MDXConfig = {
+ site: {
+ startYear?: number
+ author: string
+ title: I18N
+ subtitle?: I18N
+ } & Omit
+ metaFields?: {label: I18N, attr: string}[]
+ nav: I18NNavEntryInfo[]
+}
+
+export function MDXPage({
+ children, router, meta: meta18={}, headings, config,
+}: MDXProps) {
+ const meta = Object.fromEntries(Object.entries(meta18).map(([k, v]) => [
+ k, translate(v, router),
+ ]));
+ const {title, description} = meta;
+ const h1 = meta.h1 ?? title;
+
+ const metaFields = config.metaFields?.map(({label, attr}) => ({
+ label: translate(label, router),
+ attr,
+ })) ?? [];
+
+ const {pathname} = router;
+ const navConfig = {
+ site: {
+ ...config.site,
+ title: translate(config.site.title, router),
+ subtitle: translate(config.site.subtitle, router),
+ },
+ nav: translateNav(config.nav, router),
+ };
+
+ return <>
+
+ {title && {title}}
+ {description && }
+
+
+
+
+ {h1 ? {h1}
: <>>}
+
+ {children}
+
+
+
+ >;
+}
+
+export default function MDXPageFactory(config: MDXConfig) {
+ return function Page({children, ...props}: Omit) {
+ return {children};
+ };
+}
diff --git a/core/page/MetaInfo.tsx b/core/page/MetaInfo.tsx
new file mode 100644
index 0000000..4ccdab4
--- /dev/null
+++ b/core/page/MetaInfo.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+
+export type MetaInfoProps = {
+ data: Record
+ fields: {
+ label: string
+ attr: string
+ }[]
+};
+
+export function MetaInfo({fields, data}: MetaInfoProps) {
+ return {fields.map(({label, attr}) => {
+ const val = data[attr];
+ return val == null ? null :
+ {label}
+ {val}
+
;
+ })}
;
+}
diff --git a/core/page/i18n-nav.ts b/core/page/i18n-nav.ts
new file mode 100644
index 0000000..8cc9af9
--- /dev/null
+++ b/core/page/i18n-nav.ts
@@ -0,0 +1,19 @@
+import type {NavEntryInfo} from '@sup39/mdx-nav';
+import {I18N, translate} from './i18n';
+
+export type I18NNavEntryInfo = {
+ label: I18N
+ link: string
+ children?: I18NNavEntryInfo[]
+};
+
+export function translateNav(
+ nav18: I18NNavEntryInfo[],
+ localeInfo: Parameters[1],
+): NavEntryInfo[] {
+ return nav18.map(e => ({
+ label: translate(e.label, localeInfo),
+ link: e.link,
+ ...(e.children ? {children: translateNav(e.children, localeInfo)} : {}),
+ }));
+}
diff --git a/core/page/i18n.ts b/core/page/i18n.ts
new file mode 100644
index 0000000..9bd15ef
--- /dev/null
+++ b/core/page/i18n.ts
@@ -0,0 +1,29 @@
+export type NonRecordType = boolean|number|bigint|string|symbol|any[];
+export type I18N = (T & NonRecordType) | Record;
+export type LocaleInfo = {
+ locale?: string
+ defaultLocale?: string
+};
+
+export function translate(
+ data: I18N,
+ {locale, defaultLocale=''}: LocaleInfo,
+): T;
+export function translate(
+ data: I18N|null,
+ {locale, defaultLocale=''}: LocaleInfo,
+): null;
+export function translate(
+ data: I18N|undefined,
+ {locale, defaultLocale=''}: LocaleInfo,
+): undefined;
+export function translate(
+ data: I18N|U,
+ {locale, defaultLocale=''}: LocaleInfo,
+): T|U {
+ if (data == null) return data;
+ if (typeof data !== 'object') return data;
+ if (data instanceof Array) return data;
+ return (locale == null ? undefined : data[locale]) ??
+ data[defaultLocale] ?? Object.values(data)[0];
+}
diff --git a/core/page/index.tsx b/core/page/index.tsx
new file mode 100644
index 0000000..50de37a
--- /dev/null
+++ b/core/page/index.tsx
@@ -0,0 +1,8 @@
+export * from './Footer';
+export * from './MDXPage';
+export * from './MetaInfo';
+export * from './i18n';
+export * from './i18n-nav';
+
+import MDXPageFactory from './MDXPage';
+export default MDXPageFactory;
diff --git a/package.json b/package.json
index 0321f15..31c9064 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,8 @@
"*.tsx"
],
"rules": {
- "no-undef": "off"
+ "no-undef": "off",
+ "@next/next/no-img-element": "off"
}
},
{
@@ -41,12 +42,12 @@
"node_modules"
],
"dependencies": {
- "@mdx-js/loader": "^2.1.5",
- "@mdx-js/react": "^2.1.5",
- "@next/mdx": "^13.0.2",
+ "@mdx-js/loader": "^2.3.0",
+ "@mdx-js/react": "^2.3.0",
+ "@next/mdx": "13.0.7",
"@sup39/rehype-mdx-component-wrapper": "^0.1.0",
"@sup39/rehype-mdx-export-headings": "^0.1.1",
- "next": "^13.0.2",
+ "next": "13.0.7",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"rehype-katex": "^6.0.2",
@@ -58,7 +59,7 @@
"yaml-loader": "^0.8.0"
},
"devDependencies": {
- "@sup39/eslint-config-typescript": "^0.1.2",
+ "@sup39/eslint-config-typescript": "^0.1.4",
"@types/node": "18.11.9",
"@types/react": "18.0.24",
"eslint": "^8.26.0",
diff --git a/pages/_app.tsx b/pages/_app.tsx
index 45e9492..05c1315 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,20 +1,11 @@
import React from 'react';
import type {AppProps} from 'next/app';
import {MDXProvider} from '@mdx-js/react';
-import {S} from '@/mdx';
+import mdx from '@sup39/mdx-components';
import '../styles/index.sass';
-// add anchor to all headings having id
-const hx = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;
-const extendedHx = Object.fromEntries(hx.map(H => [H,
- ({children, id, ...props}: React.ComponentProps<(typeof hx)[number]>) =>
- {id && }
- {children}
- ,
-]));
-
export default function App({Component, pageProps, router}: AppProps) {
- return
+ return
;
}
diff --git a/pages/index.mdx b/pages/index.mdx
index 4178613..be9bb92 100644
--- a/pages/index.mdx
+++ b/pages/index.mdx
@@ -3,15 +3,3 @@ title: supMDX
description: You can write any meta data you want
author: me
---
-
-## h2
-### Tables
-|a |b |
-|--|--|
-|cc|dd|
-|ee|ff|
-
-### Katex
-$$
-x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
-$$
diff --git a/supMDX-env.d.ts b/supMDX-env.d.ts
index 9fbd2da..ce450cb 100644
--- a/supMDX-env.d.ts
+++ b/supMDX-env.d.ts
@@ -1,13 +1,6 @@
declare module '#config' {
- import type {NavEntry} from '@/Nav';
- type Config = {
- site: {
- startYear: number
- author: string
- name: string
- }
- metaFields?: {label: string, prop: string}[]
- nav: NavEntry[]
+ import type {MDXConfig} from '@sup39/mdx-page';
+ type Config = MDXConfig & {
};
const config: Config;
export default config;
diff --git a/supMDX.yml b/supMDX.yml
index f7a66ce..2050638 100644
--- a/supMDX.yml
+++ b/supMDX.yml
@@ -1,9 +1,11 @@
site:
- startYear: 2022
+ startYear: 2023
author:
- name:
+ title:
+ subtitle:
+ icon:
metaFields:
- - {prop: author, label: 'Author: '}
- - {prop: createdAt, label: 'Created at '}
- - {prop: updatedAt, label: 'Updated at '}
+ - {attr: author, label: 'Author: '}
+ - {attr: createdAt, label: 'Created at '}
+ - {attr: updatedAt, label: 'Updated at '}
nav: []
diff --git a/tsconfig.json b/tsconfig.json
index 296169a..d79f73a 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,6 +2,7 @@
"compilerOptions": {
"baseUrl": ".",
"paths": {
+ "@sup39/mdx-*": ["core/*"],
"@/*": ["components/*"],
"#/*": ["pages/*"],
"#config": ["supMDX.yml"],
diff --git a/yarn.lock b/yarn.lock
index a885847..b963902 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -72,10 +72,10 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
-"@mdx-js/loader@^2.1.5":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-2.1.5.tgz#4e764c65333530fd786dfe4f36e918dfeac0200b"
- integrity sha512-oXjfTa/iAcMmW8DdQ+hQFodPCLqw5VKT2yoZkLwrZfPVVpUgKrI+5/ZePYq328xxtAUStZmR3ed0PWJrwd5Pkg==
+"@mdx-js/loader@^2.3.0":
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-2.3.0.tgz#56a6b07eb0027b6407e953a97c52bd8619601161"
+ integrity sha512-IqsscXh7Q3Rzb+f5DXYk0HU71PK+WuFsEhf+mSV3fOhpLcEpgsHvTQ2h0T6TlZ5gHOaBeFjkXwB52by7ypMyNg==
dependencies:
"@mdx-js/mdx" "^2.0.0"
source-map "^0.7.0"
@@ -103,18 +103,18 @@
unist-util-visit "^4.0.0"
vfile "^5.0.0"
-"@mdx-js/react@^2.1.5":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.1.5.tgz#8225a867dae6f845ae5b0ec15bb454c23be3f576"
- integrity sha512-3Az1I6SAWA9R38rYjz5rXBrGKeZhq96CSSyQtqY+maPj8stBsoUH5pNcmIixuGkufYsh8F5+ka2CVPo2fycWZw==
+"@mdx-js/react@^2.3.0":
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.3.0.tgz#4208bd6d70f0d0831def28ef28c26149b03180b3"
+ integrity sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==
dependencies:
"@types/mdx" "^2.0.0"
"@types/react" ">=16"
-"@next/env@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.2.tgz#5fbd7b4146175ae406edfb4a38b62de8c880c09d"
- integrity sha512-Qb6WPuRriGIQ19qd6NBxpcrFOfj8ziN7l9eZUfwff5gl4zLXluqtuZPddYZM/oWjN53ZYcuRXzL+oowKyJeYtA==
+"@next/env@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.7.tgz#7b6ccd9006d3fb57c369e3fb62b28e15324141e9"
+ integrity sha512-ZBclBRB7DbkSswXgbJ+muF5RxfgmAuQKAWL8tcm86aZmoiL1ZainxQK0hMcMYdh+IYG8UObAKV2wKB5O+6P4ng==
"@next/eslint-plugin-next@13.0.2":
version "13.0.2"
@@ -123,77 +123,77 @@
dependencies:
glob "7.1.7"
-"@next/mdx@^13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.0.2.tgz#60febdab4ccd4ece87ba99694befe146f0e1307e"
- integrity sha512-udtSlWoOLoHdJvtuGyj3ctXW4fogsQDWU2YXp4Sx4JdsS7VKvJkhTU0Df47nAJsQKCJhQ92h+j7rA+1Dulxxqg==
+"@next/mdx@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.0.7.tgz#34275121ac690c11746780345fc96b456c9d9e72"
+ integrity sha512-ekuxCOO7j/Un7qxIYtuBAQN+bduDAtYDEMEf0OqBQ3ZDWJpQYrJ1kGr0uk1WjW5Z1OH7hV8ZlGwuBvhfjaao8Q==
dependencies:
source-map "^0.7.0"
-"@next/swc-android-arm-eabi@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.2.tgz#66669b8aab5062f554b8e9905d855679aabf0342"
- integrity sha512-X54UQCTFyOGnJP//Z71dPPlp4BCYcQL2ncikKXQcPzVpqPs4C3m+tKC8ivBNH6edAXkppwsLRz1/yQwgSZ9Swg==
+"@next/swc-android-arm-eabi@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.7.tgz#ddbf3d092d22f17238aa34072f5dcb8129d8b23e"
+ integrity sha512-QTEamOK/LCwBf05GZ261rULMbZEpE3TYdjHlXfznV+nXwTztzkBNFXwP67gv2wW44BROzgi/vrR9H8oP+J5jxg==
-"@next/swc-android-arm64@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.2.tgz#c0641d30525e0fb22bf1e2baf6c461d2d9e52f1a"
- integrity sha512-1P00Kv8uKaLubqo7JzPrTqgFAzSOmfb8iwqJrOb9in5IvTRtNGlkR4hU0sXzqbQNM/+SaYxze6Z5ry1IDyb/cQ==
+"@next/swc-android-arm64@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.7.tgz#96f150232eb66da377226f21a371d30389371ed5"
+ integrity sha512-wcy2H0Tl9ME8vKy2GnJZ7Mybwys+43F/Eh2Pvph7mSDpMbYBJ6iA0zeY62iYYXxlZhnAID3+h79FUqUEakkClw==
-"@next/swc-darwin-arm64@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.2.tgz#d7e01a33393e83456dbfdc41446bb8a923968ff7"
- integrity sha512-1zGIOkInkOLRv0QQGZ+3wffYsyKI4vIy62LYTvDWUn7TAYqnmXwougp9NSLqDeagLwgsv2URrykyAFixA/YqxA==
+"@next/swc-darwin-arm64@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.7.tgz#34e80a22573b5321ade8417dfb814cf6e1fd9997"
+ integrity sha512-F/mU7csN1/J2cqXJPMgTQ6MwAbc1pJ6sp6W+X0z5JEY4IFDzxKd3wRc3pCiNF7j8xW381JlNpWxhjCctnNmfaw==
-"@next/swc-darwin-x64@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.2.tgz#d4a3fbe51edf871a675d89a7afdc78174d1e5841"
- integrity sha512-ECDAjoMP1Y90cARaelS6X+k6BQx+MikAYJ8f/eaJrLur44NIOYc9HA/dgcTp5jenguY4yT8V+HCquLjAVle6fA==
+"@next/swc-darwin-x64@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.7.tgz#ecec57211bf54a15872bb44e5ea70c99c2efe785"
+ integrity sha512-636AuRQynCPnIPRVzcCk5B7OMq9XjaYam2T0HeWUCE6y7EqEO3kxiuZ4QmN81T7A6Ydb+JnivYrLelHXmgdj6A==
-"@next/swc-freebsd-x64@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.2.tgz#1b54c3f38d3b36f86663a8dfcc81ea05e01f5172"
- integrity sha512-2DcL/ofQdBnQX3IoI9sjlIAyLCD1oZoUBuhrhWbejvBQjutWrI0JTEv9uG69WcxWhVMm3BCsjv8GK2/68OKp7A==
+"@next/swc-freebsd-x64@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.7.tgz#b4a8a49c3c3d200c9d6c43193b82ee39c6eb1d59"
+ integrity sha512-92XAMzNgQazowZ9t7uZmHRA5VdBl/SwEdrf5UybdfRovsxB4r3+yJWEvFaqYpSEp0gwndbwLokJdpz7OwFdL3Q==
-"@next/swc-linux-arm-gnueabihf@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.2.tgz#18495cff32c0b2182cfbf677614219d7072214da"
- integrity sha512-Y3OQF1CSBSWW2vGkmvOIuOUNqOq8qX7f1ZpcKUVWP3/Uq++DZmVi9d18lgnSe1I3QFqc+nXWyun9ljsN83j0sw==
+"@next/swc-linux-arm-gnueabihf@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.7.tgz#6f550d348c6ece2b25426a53c5be49a3a8fc54a3"
+ integrity sha512-3r1CWl5P6I5n5Yxip8EXv/Rfu2Cp6wVmIOpvmczyUR82j+bcMkwPAcUjNkG/vMCagS4xV7NElrcdGb39iFmfLg==
-"@next/swc-linux-arm64-gnu@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.2.tgz#5fb2563651166c3c6f32bf9e2f9cc6a16a9ef783"
- integrity sha512-mNyzwsFF6kwZYEjnGicx9ksDZYEZvyzEc1BtCu8vdZi/v8UeixQwCiAT6FyYX9uxMPEkzk8qiU0t0u9gvltsKw==
+"@next/swc-linux-arm64-gnu@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.7.tgz#20bd7f25a3af0edb4d3506c005f54212eb9a855b"
+ integrity sha512-RXo8tt6ppiwyS6hpDw3JdAjKcdVewsefxnxk9xOH4mRhMyq9V2lQx0e24X/dRiZqkx3jnWReR2WRrUlgN1UkSQ==
-"@next/swc-linux-arm64-musl@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.2.tgz#b9f33c5e17cfe04aa5769b717284cf80865761e6"
- integrity sha512-M6SdYjWgRrY3tJBxz0663zCRPTu5BRONmxlftKWWHv9LjAJ59neTLaGj4rp0A08DkJglZIoCkLOzLrzST6TGag==
+"@next/swc-linux-arm64-musl@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.7.tgz#f421bedcf2e1ad1ad7c90af1102df83634e92b6a"
+ integrity sha512-RWpnW+bmfXyxyY7iARbueYDGuIF+BEp3etLeYh/RUNHb9PhOHLDgJOG8haGSykud3a6CcyBI8hEjqOhoObaDpw==
-"@next/swc-linux-x64-gnu@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.2.tgz#29efcc2fd0122689d7e06c5b6b0883fe495db2bf"
- integrity sha512-pi63RoxvG4ES1KS06Zpm0MATVIXTs/TIbLbdckeLoM40u1d3mQl/+hSSrLRSxzc2OtyL8fh92sM4gkJrQXAMAw==
+"@next/swc-linux-x64-gnu@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.7.tgz#76cb25d3c00041dabc02e0b3ddd10f9325eb3f60"
+ integrity sha512-/ygUIiMMTYnbKlFs5Ba9J5k/tNxFWy8eI1bBF8UuMTvV8QJHl/aLDiA5dwsei2kk99/cu3eay62JnJXkSk3RSQ==
-"@next/swc-linux-x64-musl@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.2.tgz#d68fdf6eefc57813fa91559c7089b49d6131ecab"
- integrity sha512-9Pv91gfYnDONgjtRm78n64b/c54+azeHtlnqBLTnIFWSMBDRl1/WDkhKWIj3fBGPLimtK7Tko3ULR3og9RRUPw==
+"@next/swc-linux-x64-musl@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.7.tgz#4e49b54b3578f7c4753dd7ac9c5e683914427884"
+ integrity sha512-dLzr6AL77USJN0ejgx5AS8O8SbFlbYTzs0XwAWag4oQpUG2p3ARvxwQgYQ0Z+6EP0zIRZ/XfLkN/mhsyi3m4PA==
-"@next/swc-win32-arm64-msvc@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.2.tgz#acdcb3023045f60cca510f659a2349895e6405bd"
- integrity sha512-Nvewe6YZaizAkGHHprbMkYqQulBjZCHKBGKeFPwoPtOA+a2Qi4pZzc/qXFyC5/2A6Z0mr2U1zg9rd04WBYMwBw==
+"@next/swc-win32-arm64-msvc@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.7.tgz#98f622f9d0e34746e1ec7f25ce436a809a42313d"
+ integrity sha512-+vFIVa82AwqFkpFClKT+n73fGxrhAZ2u1u3mDYEBdxO6c9U4Pj3S5tZFsGFK9kLT/bFvf/eeVOICSLCC7MSgJQ==
-"@next/swc-win32-ia32-msvc@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.2.tgz#a78ee9211471768febac9df915c2a8dbbcd05e41"
- integrity sha512-ZUBYGZw5G3QrqDpRq1EWi3aHmvPZM8ijK5TFL6UbH16cYQ0JpANmuG2P66KB93Qe/lWWzbeAZk/tj1XqwoCuPA==
+"@next/swc-win32-ia32-msvc@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.7.tgz#f27f99aeec4207be7688a417f5934ea4868dadfc"
+ integrity sha512-RNLXIhp+assD39dQY9oHhDxw+/qSJRARKhOFsHfOtf8yEfCHqcKkn3X/L+ih60ntaEqK294y1WkMk6ylotsxwA==
-"@next/swc-win32-x64-msvc@13.0.2":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.2.tgz#e86c2de910cd68a17974db5556d4588737412c68"
- integrity sha512-fA9uW1dm7C0mEYGcKlbmLcVm2sKcye+1kPxh2cM4jVR+kQQMtHWsjIzeSpe2grQLSDan06z4n6hbr8b1c3hA8w==
+"@next/swc-win32-x64-msvc@13.0.7":
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.7.tgz#7aaa6cee723cde844e891e895e5561a60d9fa7f3"
+ integrity sha512-kvdnlLcrnEq72ZP0lqe2Z5NqvB9N5uSCvtXJ0PhKvNncWWd0fEG9Ec9erXgwCmVlM2ytw41k9/uuQ+SVw4Pihw==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -233,17 +233,17 @@
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==
-"@sup39/eslint-config-basic@latest":
+"@sup39/eslint-config-basic@^0.1.5":
version "0.1.5"
resolved "https://registry.yarnpkg.com/@sup39/eslint-config-basic/-/eslint-config-basic-0.1.5.tgz#73520b79d5fe2efafdc615207689c64b7307542c"
integrity sha512-fAYz/rIGkAUzBhQqPKo9w442HRGop71HBa4wnQHeLdySE3LxMyiNtuz5a3TaNrfWm3x+er2TCGq3if/FzRp+5g==
-"@sup39/eslint-config-typescript@^0.1.2":
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/@sup39/eslint-config-typescript/-/eslint-config-typescript-0.1.2.tgz#ef51e08eabe5a0ac46a2509b91b89835f17cc786"
- integrity sha512-c/PGuvT0hyvAgjKXelCLJGR7JXUw9I6zh+dhBSwukaW6p2nhBMAfLjXvuATL4Xo8op/281/8uCRddwPl25FtMA==
+"@sup39/eslint-config-typescript@^0.1.4":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@sup39/eslint-config-typescript/-/eslint-config-typescript-0.1.4.tgz#d5d3c1ac20e160b1f042910e535587e00ce8c871"
+ integrity sha512-0hjNZGUgkrFkeifSMECE0NG65MLEMAgVnpiM6IL+yX4gLjz431DHDY/a//2ptfqWaP30JasFRYVuWp8EIDw+dQ==
dependencies:
- "@sup39/eslint-config-basic" latest
+ "@sup39/eslint-config-basic" "^0.1.5"
"@typescript-eslint/eslint-plugin" "^5"
"@typescript-eslint/parser" "^5"
@@ -257,10 +257,10 @@
resolved "https://registry.yarnpkg.com/@sup39/rehype-mdx-export-headings/-/rehype-mdx-export-headings-0.1.1.tgz#852b22df675ee6904215da200a3cc18ffe153509"
integrity sha512-erq58RWz+KYUOp/75K0kbsKwI4M66LovC44BYpzvaSCyDNEM1Y3j5tgxcAt8VZLrJuSpfzgpVPPnj6fWhTpmtA==
-"@swc/helpers@0.4.11":
- version "0.4.11"
- resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de"
- integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==
+"@swc/helpers@0.4.14":
+ version "0.4.14"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74"
+ integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==
dependencies:
tslib "^2.4.0"
@@ -2621,31 +2621,30 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-next@^13.0.2:
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/next/-/next-13.0.2.tgz#b8c8642c70f736ed91105645391d335fc51c8f62"
- integrity sha512-uQ5z5e4D9mOe8+upy6bQdYYjo/kk1v3jMW87kTy2TgAyAsEO+CkwRnMgyZ4JoHEnhPZLHwh7dk0XymRNLe1gFw==
+next@13.0.7:
+ version "13.0.7"
+ resolved "https://registry.yarnpkg.com/next/-/next-13.0.7.tgz#f07a0cc3afefdb86fb6668048e910a2193e3c1e2"
+ integrity sha512-YfTifqX9vfHm+rSU/H/3xvzOHDkYuMuh4wsvTjiqj9h7qHEF7KHB66X4qrH96Po+ohdid4JY8YVGPziDwdXL0A==
dependencies:
- "@next/env" "13.0.2"
- "@swc/helpers" "0.4.11"
+ "@next/env" "13.0.7"
+ "@swc/helpers" "0.4.14"
caniuse-lite "^1.0.30001406"
postcss "8.4.14"
styled-jsx "5.1.0"
- use-sync-external-store "1.2.0"
optionalDependencies:
- "@next/swc-android-arm-eabi" "13.0.2"
- "@next/swc-android-arm64" "13.0.2"
- "@next/swc-darwin-arm64" "13.0.2"
- "@next/swc-darwin-x64" "13.0.2"
- "@next/swc-freebsd-x64" "13.0.2"
- "@next/swc-linux-arm-gnueabihf" "13.0.2"
- "@next/swc-linux-arm64-gnu" "13.0.2"
- "@next/swc-linux-arm64-musl" "13.0.2"
- "@next/swc-linux-x64-gnu" "13.0.2"
- "@next/swc-linux-x64-musl" "13.0.2"
- "@next/swc-win32-arm64-msvc" "13.0.2"
- "@next/swc-win32-ia32-msvc" "13.0.2"
- "@next/swc-win32-x64-msvc" "13.0.2"
+ "@next/swc-android-arm-eabi" "13.0.7"
+ "@next/swc-android-arm64" "13.0.7"
+ "@next/swc-darwin-arm64" "13.0.7"
+ "@next/swc-darwin-x64" "13.0.7"
+ "@next/swc-freebsd-x64" "13.0.7"
+ "@next/swc-linux-arm-gnueabihf" "13.0.7"
+ "@next/swc-linux-arm64-gnu" "13.0.7"
+ "@next/swc-linux-arm64-musl" "13.0.7"
+ "@next/swc-linux-x64-gnu" "13.0.7"
+ "@next/swc-linux-x64-musl" "13.0.7"
+ "@next/swc-win32-arm64-msvc" "13.0.7"
+ "@next/swc-win32-ia32-msvc" "13.0.7"
+ "@next/swc-win32-x64-msvc" "13.0.7"
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
@@ -3443,11 +3442,6 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
-use-sync-external-store@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
- integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
-
uvu@^0.5.0, uvu@^0.5.6:
version "0.5.6"
resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df"