diff options
21 files changed, 1414 insertions, 304 deletions
diff --git a/.prettierignore b/.prettierignore index 4bec27b..4f92f13 100644 --- a/.prettierignore +++ b/.prettierignore | |||
@@ -9,3 +9,6 @@ build/ | |||
9 | node_modules/ | 9 | node_modules/ |
10 | .pnp.cjs | 10 | .pnp.cjs |
11 | .pnp.loader.mjs | 11 | .pnp.loader.mjs |
12 | |||
13 | # See https://github.com/orgs/mdx-js/discussions/2067 | ||
14 | *.mdx | ||
diff --git a/blog/2024-03-25-first-post.mdx b/blog/2024-03-25-first-post.mdx deleted file mode 100644 index e612116..0000000 --- a/blog/2024-03-25-first-post.mdx +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
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/2024-04-05/FontFeaturesToggle.module.css b/blog/2024-04-05/FontFeaturesToggle.module.css new file mode 100644 index 0000000..45c43c8 --- /dev/null +++ b/blog/2024-04-05/FontFeaturesToggle.module.css | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | .container { | ||
8 | display: flex; | ||
9 | flex-direction: row; | ||
10 | flex-wrap: wrap; | ||
11 | column-gap: 1ch; | ||
12 | row-gap: 0; | ||
13 | padding-left: 2ch; | ||
14 | --mono: 1; | ||
15 | } | ||
16 | |||
17 | .prefix { | ||
18 | margin-left: -2ch; | ||
19 | } | ||
20 | |||
21 | .property { | ||
22 | color: var(--prism-property-color); | ||
23 | } | ||
24 | |||
25 | .punctuation { | ||
26 | color: var(--prism-punctuation-color); | ||
27 | } | ||
28 | |||
29 | .string { | ||
30 | color: var(--prism-string-color); | ||
31 | } | ||
32 | |||
33 | .number { | ||
34 | color: var(--prism-number-color); | ||
35 | } | ||
36 | |||
37 | .feature { | ||
38 | display: flex; | ||
39 | flex: 0; | ||
40 | flex-direction: row; | ||
41 | flex-wrap: nowrap; | ||
42 | } | ||
43 | |||
44 | .checkbox { | ||
45 | display: flex; | ||
46 | align-items: center; | ||
47 | justify-content: center; | ||
48 | width: 3ch; | ||
49 | } | ||
diff --git a/blog/2024-04-05/FontFeaturesToggle.tsx b/blog/2024-04-05/FontFeaturesToggle.tsx new file mode 100644 index 0000000..9424748 --- /dev/null +++ b/blog/2024-04-05/FontFeaturesToggle.tsx | |||
@@ -0,0 +1,86 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | import clsx from 'clsx'; | ||
8 | import { useId } from 'react'; | ||
9 | |||
10 | import styles from './FontFeaturesToggle.module.css'; | ||
11 | |||
12 | export const featureNames = ['ss02', 'ss05', 'ss10', 'ss12', 'titl'] as const; | ||
13 | |||
14 | export type FontFeature = (typeof featureNames)[number]; | ||
15 | |||
16 | export type FontFeaturesState = Record<FontFeature, boolean>; | ||
17 | |||
18 | export interface FontFeaturesProps {} | ||
19 | |||
20 | function FontFeatureToggle({ | ||
21 | name, | ||
22 | value, | ||
23 | setValue, | ||
24 | last, | ||
25 | }: { | ||
26 | name: string; | ||
27 | value: boolean; | ||
28 | setValue?: ((newValue: boolean) => void) | undefined; | ||
29 | last: boolean; | ||
30 | }) { | ||
31 | const id = useId(); | ||
32 | const toggle = () => setValue?.(!value); | ||
33 | |||
34 | return ( | ||
35 | <div className={styles.feature}> | ||
36 | <label htmlFor={id} className={styles.string}> | ||
37 | '{name}' | ||
38 | </label>{' '} | ||
39 | <div className={styles.checkbox}> | ||
40 | <input | ||
41 | type="checkbox" | ||
42 | id={id} | ||
43 | checked={value} | ||
44 | disabled={setValue === undefined} | ||
45 | onClick={toggle} | ||
46 | />{' '} | ||
47 | </div> | ||
48 | <div onClick={toggle} className={styles.number}> | ||
49 | {value ? '1' : '0'} | ||
50 | </div> | ||
51 | <div className={clsx(styles.punctuation, styles.comma)}> | ||
52 | {last ? ';' : ','} | ||
53 | </div> | ||
54 | </div> | ||
55 | ); | ||
56 | } | ||
57 | |||
58 | export default function FontFeaturesToggle({ | ||
59 | features, | ||
60 | setFeatures, | ||
61 | }: { | ||
62 | features: FontFeaturesState; | ||
63 | setFeatures?: ((newFeatures: Partial<FontFeaturesState>) => void) | undefined; | ||
64 | }) { | ||
65 | return ( | ||
66 | <div className={styles.container}> | ||
67 | <div className={styles.prefix}> | ||
68 | <span className={styles.property}>font-feature-settings</span> | ||
69 | <span className={styles.punctuation}>:</span> | ||
70 | </div> | ||
71 | {featureNames.map((name, i) => ( | ||
72 | <FontFeatureToggle | ||
73 | key={name} | ||
74 | name={name} | ||
75 | value={features[name]} | ||
76 | setValue={ | ||
77 | setFeatures === undefined | ||
78 | ? undefined | ||
79 | : (newValue) => setFeatures({ [name]: newValue }) | ||
80 | } | ||
81 | last={i === featureNames.length - 1} | ||
82 | /> | ||
83 | ))} | ||
84 | </div> | ||
85 | ); | ||
86 | } | ||
diff --git a/blog/2024-04-05/VariableAxisProvider.tsx b/blog/2024-04-05/VariableAxisProvider.tsx new file mode 100644 index 0000000..bc864b4 --- /dev/null +++ b/blog/2024-04-05/VariableAxisProvider.tsx | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | import { createContext, useCallback, useContext, useState } from 'react'; | ||
8 | |||
9 | export interface VariableAxisValue { | ||
10 | text: string; | ||
11 | wght: number; | ||
12 | slnt: number; | ||
13 | mono: number; | ||
14 | casl: number; | ||
15 | crsv: number; | ||
16 | } | ||
17 | |||
18 | export interface VariableAxisContextValue { | ||
19 | axes: VariableAxisValue; | ||
20 | setAxes(newValue: Partial<VariableAxisValue>): void; | ||
21 | } | ||
22 | |||
23 | const VariableAxisContext = createContext<VariableAxisContextValue | undefined>( | ||
24 | undefined, | ||
25 | ); | ||
26 | |||
27 | export function useVariableAxes(): VariableAxisContextValue { | ||
28 | const value = useContext(VariableAxisContext); | ||
29 | if (value === undefined) { | ||
30 | throw new Error( | ||
31 | 'useVariableAxisContext called outside of VariableAxisProvider', | ||
32 | ); | ||
33 | } | ||
34 | return value; | ||
35 | } | ||
36 | |||
37 | export default function VariableAxisProvider({ | ||
38 | children, | ||
39 | }: { | ||
40 | children: React.ReactNode; | ||
41 | }): JSX.Element { | ||
42 | const [state, setState] = useState<VariableAxisValue>({ | ||
43 | text: 'Qagl0@', | ||
44 | wght: 400, | ||
45 | slnt: 0, | ||
46 | mono: 0, | ||
47 | casl: 0, | ||
48 | crsv: 0.5, | ||
49 | }); | ||
50 | const setAxes = useCallback( | ||
51 | (newValue: Partial<VariableAxisValue>) => { | ||
52 | setState({ | ||
53 | ...state, | ||
54 | ...newValue, | ||
55 | }); | ||
56 | }, | ||
57 | [state], | ||
58 | ); | ||
59 | const value: VariableAxisContextValue = { | ||
60 | axes: state, | ||
61 | setAxes, | ||
62 | }; | ||
63 | return ( | ||
64 | <VariableAxisContext.Provider value={value}> | ||
65 | {children} | ||
66 | </VariableAxisContext.Provider> | ||
67 | ); | ||
68 | } | ||
diff --git a/blog/2024-04-05/VariableAxisSettings.module.css b/blog/2024-04-05/VariableAxisSettings.module.css new file mode 100644 index 0000000..b37dbd5 --- /dev/null +++ b/blog/2024-04-05/VariableAxisSettings.module.css | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | .container { | ||
8 | display: flex; | ||
9 | margin-bottom: var(--ifm-leading); | ||
10 | gap: 1rem; | ||
11 | flex-wrap: wrap; | ||
12 | } | ||
13 | |||
14 | .editor__container { | ||
15 | flex-grow: 1; | ||
16 | position: relative; | ||
17 | overflow: hidden; | ||
18 | font-size: 3rem; | ||
19 | } | ||
20 | |||
21 | .editor, | ||
22 | .editor__spacer { | ||
23 | padding: 0 0.25rem; | ||
24 | } | ||
25 | |||
26 | .editor__spacer { | ||
27 | visibility: hidden; | ||
28 | /* Leave space for the bottom border of the editing area. */ | ||
29 | margin-bottom: 1px; | ||
30 | /* 'titl' takes up a bit more space in proportional font. */ | ||
31 | font-feature-settings: 'titl' !important; | ||
32 | } | ||
33 | |||
34 | .editor__spacer--2 { | ||
35 | margin-top: calc(-1em * var(--ifm-line-height-base) + 1px); | ||
36 | --mono: 1; | ||
37 | } | ||
38 | |||
39 | .editor { | ||
40 | position: absolute; | ||
41 | top: 50%; | ||
42 | left: 50%; | ||
43 | transform: translate(-50%, -50%); | ||
44 | border-bottom: 1px solid var(--ifm-color-emphasis-600); | ||
45 | } | ||
46 | |||
47 | [data-theme='dark'] .editor { | ||
48 | border-bottom-color: var(--ifm-color-emphasis-400); | ||
49 | } | ||
50 | |||
51 | .editor:focus { | ||
52 | background: var(--ifm-code-background); | ||
53 | border-bottom-color: var(--ifm-font-color-base); | ||
54 | } | ||
55 | |||
56 | .code { | ||
57 | flex-grow: 1000; | ||
58 | padding: var(--ifm-pre-padding); | ||
59 | border-radius: var(--ifm-code-border-radius); | ||
60 | container-type: inline-size; | ||
61 | flex-basis: calc(2 * var(--ifm-pre-padding) + 360px); | ||
62 | box-shadow: var(--ifm-global-shadow-lw); | ||
63 | } | ||
64 | |||
65 | .sliders { | ||
66 | max-width: 100%; | ||
67 | display: grid; | ||
68 | grid-template-columns: max-content 1fr 5ch; | ||
69 | column-gap: 0.5em; | ||
70 | } | ||
71 | |||
72 | .label { | ||
73 | color: var(--prism-variable-color); | ||
74 | --mono: 1; | ||
75 | } | ||
76 | |||
77 | .label--property { | ||
78 | color: var(--prism-property-color); | ||
79 | } | ||
80 | |||
81 | .slider { | ||
82 | min-width: 0; | ||
83 | } | ||
84 | |||
85 | .label::after { | ||
86 | content: ':'; | ||
87 | color: var(--prism-punctuation-color); | ||
88 | } | ||
89 | |||
90 | .value { | ||
91 | color: var(--prism-number-color); | ||
92 | --mono: 1; | ||
93 | } | ||
94 | |||
95 | .value::after { | ||
96 | content: ';'; | ||
97 | color: var(--prism-punctuation-color); | ||
98 | } | ||
99 | |||
100 | @container (max-width: 360px) { | ||
101 | .sliders { | ||
102 | grid-template-columns: 1fr 5ch; | ||
103 | } | ||
104 | |||
105 | .label { | ||
106 | grid-column: 1 / span 2; | ||
107 | } | ||
108 | } | ||
109 | |||
110 | .no-features { | ||
111 | font-feature-settings: normal !important; | ||
112 | } | ||
diff --git a/blog/2024-04-05/VariableAxisSettings.tsx b/blog/2024-04-05/VariableAxisSettings.tsx new file mode 100644 index 0000000..b288767 --- /dev/null +++ b/blog/2024-04-05/VariableAxisSettings.tsx | |||
@@ -0,0 +1,184 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | import clsx from 'clsx'; | ||
8 | import { useEffect, useId, useState } from 'react'; | ||
9 | import { usePrismTheme } from '@docusaurus/theme-common'; | ||
10 | |||
11 | import { | ||
12 | type VariableAxisValue, | ||
13 | useVariableAxes, | ||
14 | } from './VariableAxisProvider'; | ||
15 | import styles from './VariableAxisSettings.module.css'; | ||
16 | |||
17 | function PreviewEditor({ | ||
18 | editorClassName, | ||
19 | }: { | ||
20 | editorClassName?: string | undefined; | ||
21 | }) { | ||
22 | const { | ||
23 | axes: { text, wght, slnt, mono, casl, crsv }, | ||
24 | setAxes, | ||
25 | } = useVariableAxes(); | ||
26 | const [editor, setEditor] = useState<HTMLDivElement | null>(null); | ||
27 | useEffect(() => { | ||
28 | if (editor !== null && editor.textContent !== text) { | ||
29 | editor.textContent = text; | ||
30 | } | ||
31 | }, [editor, text]); | ||
32 | |||
33 | return ( | ||
34 | <div className={styles.editor__container}> | ||
35 | <div aria-hidden="true" className={styles.editor__spacer}> | ||
36 | {text} | ||
37 | </div> | ||
38 | <div | ||
39 | aria-hidden="true" | ||
40 | className={clsx(styles.editor__spacer, styles['editor__spacer--2'])} | ||
41 | > | ||
42 | {text} | ||
43 | </div> | ||
44 | <div | ||
45 | contentEditable | ||
46 | suppressContentEditableWarning | ||
47 | spellCheck={false} | ||
48 | onInput={(event) => setAxes({ text: event.currentTarget.textContent })} | ||
49 | ref={setEditor} | ||
50 | className={clsx(styles.editor, editorClassName)} | ||
51 | style={ | ||
52 | { | ||
53 | fontWeight: wght, | ||
54 | '--slnt': slnt, | ||
55 | '--mono': mono, | ||
56 | '--casl': casl, | ||
57 | '--crsv': crsv, | ||
58 | } as React.CSSProperties | ||
59 | } | ||
60 | /> | ||
61 | </div> | ||
62 | ); | ||
63 | } | ||
64 | |||
65 | const highlightingTypes = [ | ||
66 | 'function', | ||
67 | 'number', | ||
68 | 'property', | ||
69 | 'punctuation', | ||
70 | 'string', | ||
71 | 'variable', | ||
72 | ]; | ||
73 | |||
74 | function CodeBlockBox({ children }: { children: React.ReactNode }) { | ||
75 | const theme = usePrismTheme(); | ||
76 | |||
77 | const customProps: Record<string, string> = {}; | ||
78 | theme.styles.forEach((style) => { | ||
79 | const color = style.style.color; | ||
80 | if (color === undefined || style.languages !== undefined) { | ||
81 | return; | ||
82 | } | ||
83 | style.types.forEach((type) => { | ||
84 | if (highlightingTypes.indexOf(type) >= 0) { | ||
85 | customProps[`--prism-${type}-color`] = color; | ||
86 | } | ||
87 | }); | ||
88 | }); | ||
89 | |||
90 | return ( | ||
91 | <div | ||
92 | className={styles.code} | ||
93 | style={{ | ||
94 | backgroundColor: theme.plain.backgroundColor, | ||
95 | color: theme.plain.color, | ||
96 | ...customProps, | ||
97 | }} | ||
98 | > | ||
99 | {children} | ||
100 | </div> | ||
101 | ); | ||
102 | } | ||
103 | |||
104 | function VariableAxisSliders() { | ||
105 | return ( | ||
106 | <div className={styles.sliders}> | ||
107 | <VariableAxisSlider | ||
108 | axis="wght" | ||
109 | label="font-weight" | ||
110 | min={300} | ||
111 | max={1000} | ||
112 | step={10} | ||
113 | /> | ||
114 | <VariableAxisSlider axis="slnt" min={-15} max={0} step={1} /> | ||
115 | <VariableAxisSlider axis="mono" min={0} max={1} step={0.01} /> | ||
116 | <VariableAxisSlider axis="casl" min={0} max={1} step={0.01} /> | ||
117 | <VariableAxisSlider axis="crsv" min={0} max={1} step={0.5} /> | ||
118 | </div> | ||
119 | ); | ||
120 | } | ||
121 | |||
122 | function VariableAxisSlider({ | ||
123 | axis, | ||
124 | label, | ||
125 | min, | ||
126 | max, | ||
127 | step, | ||
128 | }: { | ||
129 | axis: keyof VariableAxisValue; | ||
130 | label?: string; | ||
131 | min: number; | ||
132 | max: number; | ||
133 | step: number; | ||
134 | }) { | ||
135 | const id = useId(); | ||
136 | const { axes, setAxes } = useVariableAxes(); | ||
137 | return ( | ||
138 | <> | ||
139 | <label | ||
140 | className={clsx(styles.label, { | ||
141 | [styles['label--property']]: label !== undefined, | ||
142 | })} | ||
143 | htmlFor={id} | ||
144 | > | ||
145 | {label ?? `--${axis}`} | ||
146 | </label> | ||
147 | <input | ||
148 | id={id} | ||
149 | type="range" | ||
150 | min={min} | ||
151 | max={max} | ||
152 | step={step} | ||
153 | value={axes[axis]} | ||
154 | onChange={(event) => setAxes({ [axis]: Number(event.target.value) })} | ||
155 | className={styles.slider} | ||
156 | /> | ||
157 | <div className={styles.value}>{axes[axis]}</div> | ||
158 | </> | ||
159 | ); | ||
160 | } | ||
161 | |||
162 | export default function VariableAxisSettings({ | ||
163 | editorClassName, | ||
164 | features, | ||
165 | children, | ||
166 | }: { | ||
167 | editorClassName?: string | undefined; | ||
168 | features?: boolean; | ||
169 | children?: React.ReactNode; | ||
170 | }) { | ||
171 | return ( | ||
172 | <div className={styles.container}> | ||
173 | <PreviewEditor | ||
174 | editorClassName={clsx(editorClassName, { | ||
175 | [styles['no-features']]: !features, | ||
176 | })} | ||
177 | /> | ||
178 | <CodeBlockBox> | ||
179 | <VariableAxisSliders /> | ||
180 | {children} | ||
181 | </CodeBlockBox> | ||
182 | </div> | ||
183 | ); | ||
184 | } | ||
diff --git a/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesPreview.tsx b/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesPreview.tsx new file mode 100644 index 0000000..af99e6e --- /dev/null +++ b/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesPreview.tsx | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | import FontFeaturesToggle from './FontFeaturesToggle'; | ||
8 | import { useVariableAxes } from './VariableAxisProvider'; | ||
9 | import VariableAxisSettings from './VariableAxisSettings'; | ||
10 | |||
11 | export default function VariableAxisSettingsWithFontFeaturesToggle() { | ||
12 | const { | ||
13 | axes: { casl, mono }, | ||
14 | } = useVariableAxes(); | ||
15 | return ( | ||
16 | <VariableAxisSettings features> | ||
17 | <FontFeaturesToggle | ||
18 | features={{ | ||
19 | ss02: casl < 0.001, | ||
20 | ss05: true, | ||
21 | ss10: mono > 0.501, | ||
22 | ss12: mono > 0.501, | ||
23 | titl: casl >= 0.001, | ||
24 | }} | ||
25 | /> | ||
26 | </VariableAxisSettings> | ||
27 | ); | ||
28 | } | ||
diff --git a/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesToggle.module.css b/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesToggle.module.css new file mode 100644 index 0000000..337c243 --- /dev/null +++ b/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesToggle.module.css | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | .features { | ||
8 | --ss02: 0; | ||
9 | --ss05: 0; | ||
10 | --ss10: 0; | ||
11 | --ss12: 0; | ||
12 | --titl: 0; | ||
13 | font-feature-settings: | ||
14 | 'ss02' var(--ss02), | ||
15 | 'ss05' var(--ss05), | ||
16 | 'ss10' var(--ss10), | ||
17 | 'ss12' var(--ss12), | ||
18 | 'titl' var(--titl) !important; | ||
19 | } | ||
20 | |||
21 | .ss02 { | ||
22 | --ss02: 1; | ||
23 | } | ||
24 | |||
25 | .ss05 { | ||
26 | --ss05: 1; | ||
27 | } | ||
28 | |||
29 | .ss10 { | ||
30 | --ss10: 1; | ||
31 | } | ||
32 | |||
33 | .ss12 { | ||
34 | --ss12: 1; | ||
35 | } | ||
36 | |||
37 | .titl { | ||
38 | --titl: 1; | ||
39 | } | ||
diff --git a/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesToggle.tsx b/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesToggle.tsx new file mode 100644 index 0000000..9234a7c --- /dev/null +++ b/blog/2024-04-05/VariableAxisSettingsWithFontFeaturesToggle.tsx | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | import clsx from 'clsx'; | ||
8 | import { useState } from 'react'; | ||
9 | |||
10 | import FontFeaturesToggle, { | ||
11 | featureNames, | ||
12 | type FontFeaturesState, | ||
13 | } from './FontFeaturesToggle'; | ||
14 | import VariableAxisSettings from './VariableAxisSettings'; | ||
15 | import styles from './VariableAxisSettingsWithFontFeaturesToggle.module.css'; | ||
16 | |||
17 | export default function VariableAxisSettingsWithFontFeaturesToggle() { | ||
18 | const [state, setState] = useState<FontFeaturesState>({ | ||
19 | ss02: false, | ||
20 | ss05: false, | ||
21 | ss10: false, | ||
22 | ss12: false, | ||
23 | titl: false, | ||
24 | }); | ||
25 | |||
26 | return ( | ||
27 | <VariableAxisSettings | ||
28 | editorClassName={clsx( | ||
29 | styles.features, | ||
30 | featureNames.map((name) => ({ [styles[name]]: state[name] })), | ||
31 | )} | ||
32 | > | ||
33 | <FontFeaturesToggle | ||
34 | features={state} | ||
35 | setFeatures={(newFeatures) => | ||
36 | setState({ | ||
37 | ...state, | ||
38 | ...newFeatures, | ||
39 | }) | ||
40 | } | ||
41 | /> | ||
42 | </VariableAxisSettings> | ||
43 | ); | ||
44 | } | ||
diff --git a/blog/2024-04-05/VariableAxisSettingsWithToggle.module.css b/blog/2024-04-05/VariableAxisSettingsWithToggle.module.css new file mode 100644 index 0000000..0ec27d6 --- /dev/null +++ b/blog/2024-04-05/VariableAxisSettingsWithToggle.module.css | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2023 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | .checkbox__container { | ||
8 | margin-top: 0.25rem; | ||
9 | color: var(--ifm-font-color-base); | ||
10 | } | ||
diff --git a/blog/2024-04-05/VariableAxisSettingsWithToggle.tsx b/blog/2024-04-05/VariableAxisSettingsWithToggle.tsx new file mode 100644 index 0000000..c04bec9 --- /dev/null +++ b/blog/2024-04-05/VariableAxisSettingsWithToggle.tsx | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | * | ||
4 | * SPDX-License-Identifier: MIT | ||
5 | */ | ||
6 | |||
7 | import { useId, useState } from 'react'; | ||
8 | |||
9 | import VariableAxisSettings from './VariableAxisSettings'; | ||
10 | import styles from './VariableAxisSettingsWithToggle.module.css'; | ||
11 | |||
12 | export default function VariableAxisSettingsWithToggle() { | ||
13 | const id = useId(); | ||
14 | const [features, setFeatures] = useState(true); | ||
15 | return ( | ||
16 | <VariableAxisSettings features={features}> | ||
17 | <div className={styles.checkbox__container}> | ||
18 | <input | ||
19 | type="checkbox" | ||
20 | id={id} | ||
21 | checked={features} | ||
22 | onChange={() => setFeatures(!features)} | ||
23 | /> | ||
24 | <label htmlFor={id}>Toggle font features automatically</label> | ||
25 | </div> | ||
26 | </VariableAxisSettings> | ||
27 | ); | ||
28 | } | ||
diff --git a/blog/2024-04-05/recursive-v1.064-opentype_features.png b/blog/2024-04-05/recursive-v1.064-opentype_features.png new file mode 100644 index 0000000..8936132 --- /dev/null +++ b/blog/2024-04-05/recursive-v1.064-opentype_features.png | |||
Binary files differ | |||
diff --git a/blog/2024-04-05/recursive-v1.064-opentype_features.png.license b/blog/2024-04-05/recursive-v1.064-opentype_features.png.license new file mode 100644 index 0000000..275e240 --- /dev/null +++ b/blog/2024-04-05/recursive-v1.064-opentype_features.png.license | |||
@@ -0,0 +1,6 @@ | |||
1 | Copyright 2020 The Recursive Project Authors (https://github.com/arrowtype/recursive) | ||
2 | |||
3 | SPDX-License-Identifier: OFL-1.1 | ||
4 | |||
5 | This file was downloaded from | ||
6 | https://github.com/arrowtype/recursive/blob/6d491202cea5cf6a493ef710cbef2527b9b08939/specimens/repo-artwork/recursive-v1.064-opentype_features.png | ||
diff --git a/blog/2024-04-05/variable-css-font-features.mdx b/blog/2024-04-05/variable-css-font-features.mdx new file mode 100644 index 0000000..b6b640d --- /dev/null +++ b/blog/2024-04-05/variable-css-font-features.mdx | |||
@@ -0,0 +1,322 @@ | |||
1 | --- | ||
2 | SPDX-FileCopyrightText: 2024 Kristóf Marussy | ||
3 | SPDX-License-Identifier: CC-BY-4.0 | ||
4 | slug: variable-css-font-features | ||
5 | title: Variable CSS font features | ||
6 | description: How to set up and use font variation axes in CSS, create a custom subset with OpenType font features, and make the font features switch based on variation settings automatically. | ||
7 | tags: | ||
8 | - css | ||
9 | - design | ||
10 | - frontend | ||
11 | authors: kris | ||
12 | --- | ||
13 | |||
14 | import Tabs from '@theme/Tabs'; | ||
15 | import TabItem from '@theme/TabItem'; | ||
16 | |||
17 | import { LicenseLink, MITLicenseLink } from '../../src/components/licenses'; | ||
18 | |||
19 | export { default as default } from './VariableAxisProvider'; | ||
20 | import VariableAxisSettings from './VariableAxisSettings'; | ||
21 | import VariableAxisSettingsWithFontFeaturesPreview from './VariableAxisSettingsWithFontFeaturesPreview'; | ||
22 | import VariableAxisSettingsWithFontFeaturesToggle from './VariableAxisSettingsWithFontFeaturesToggle'; | ||
23 | import VariableAxisSettingsWithToggle from './VariableAxisSettingsWithToggle'; | ||
24 | |||
25 | As the first post on my blog, I decided to write something a bit more practical than "Hello World!" In particular, I'll show you how I **styled the text on this website.** | ||
26 | |||
27 | I selected [Recursive] as the font family for this site, which is an open source font available under the <LicenseLink to="https://openfontlicense.org/">OFL-1.1</LicenseLink>. It is a [variable font](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide), which means it defines a number of 'variation axes' (parameters) to seamlessly change the shape of the letters. This saved me a lot of headache about selecting a matching font for headings or for code, since all is included in a single font family. | ||
28 | |||
29 | [Recursive]: https://www.recurisve.design/ | ||
30 | |||
31 | In this post, I'll explain how I set up and use the **variation axes** of the font in CSS, how I created a custom subset with OpenType **font features,** and how I made the font features **automatically switch on and off** based on the variation axes' settings. | ||
32 | |||
33 | You can play around with the settings below to get a feel for the effect. You can also edit the text if you want, but I selected the most interesting characters already. | ||
34 | |||
35 | <VariableAxisSettingsWithToggle /> | ||
36 | |||
37 | {/* truncate */} | ||
38 | |||
39 | I tried to make the post helpful for beginners and add a bit of exposition about using variable fonts. [Click here if you're only interested in the punchline!](#automatic-feature-switching) | ||
40 | |||
41 | You can grab [Recursive][recursive] from [Fontsource][fontsource] via the [`@fontsource-variable/recursive`](https://www.npmjs.com/package/@fontsource-variable/recursive) npm package. | ||
42 | We will [create our own subsets](#intermission-font-subsetting) from the original font files later to play with some advanced features. | ||
43 | The font comes in relatively heavy at almost 307 kB for the basic latin subset. | ||
44 | I decided to splurge and use it anyway, because it covers all the font styles I'd possibly need for this website -- it still beats loading 12 separate web fonts of 30 kB each, for example :smirk:. | ||
45 | |||
46 | [fontsource]: https://fontsource.org/fonts/recursive | ||
47 | |||
48 | ## Variation axes | ||
49 | |||
50 | Recursive defines **5 variation axes:** | ||
51 | |||
52 | - The `"wght"` axis controls the weight of the text. | ||
53 | We don't have to do anything special to use this axis, because it is mapped to the `font-weight` CSS property by browsers automatically. | ||
54 | - The `"slnt"` axis controls the slant of the font[^oblique]. | ||
55 | I couldn't get the browser to map this to `font-style: italic` properly, so we'll have to take care of this axis manually[^italic]. | ||
56 | - The `"MONO"` axis blends the font between proportional and monospaced. Browsers don't support this out of the box. | ||
57 | - The `"CASL"` axis blends the font between serious and casual. Browsers don't support this out of the box either. | ||
58 | - The `"CRSV"` axis is the most interesting. At 0, you get normal letters, while at 1 you get <span style={/** @type {import('react').CSSProperties} */ ({ '--crsv': 1 })}>cursive</span> ones. At 0.5, you get **automatic switching:** normal letters for upright type and italic ones for text slanted more than 14 degrees[^slant]. | ||
59 | |||
60 | [^oblique]: It goes in the direction opposite to the [`font-style: oblique`][font-style-prop] property. | ||
61 | |||
62 | [^italic]: The mapping of `font-style` to variable axes looks [quite complicated](https://github.com/w3c/csswg-drafts/issues/514): the [font matching algorithm](https://www.w3.org/TR/css-fonts-4/#font-style-matching) for `font-style: italic` will fall back to setting `"slnt" -14` (the default angle for [`font-style: oblique`][font-style-prop]) if the variable font has no `"ital"` axis. This is just off the mark for us, because we can only take advantage of the `"CRSV" 0.5` auto-switching for slants **bigger** than 14 degrees :disappointed:. | ||
63 | |||
64 | [font-style-prop]: https://www.w3.org/TR/css-fonts-4/#font-style-prop | ||
65 | |||
66 | [^slant]: Actually the slant will still be -14 degrees (the maximum), but the letters will be italic instead of just slanted. | ||
67 | |||
68 | The preview below illustrates the variation axes in action. Don't worry about the custom CSS properties; we'll get to the CSS for achieving this in the next section. | ||
69 | |||
70 | <VariableAxisSettings /> | ||
71 | |||
72 | ### Custom properties | ||
73 | |||
74 | I generate this static site with [Docusaurus][docusaurus], which uses the [Infima](https://infima.dev/) design system for styling. Therefore, I had to integrate the Recursive font with Infima's CSS. However, the CSS techniques in this post should apply to other design systems or just plain CSS as well. | ||
75 | |||
76 | [docusaurus]: https://docusaurus.io/ | ||
77 | |||
78 | The [Recursive] documentation recommends using [CSS custom properties](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) to take advantage of the `"slnt"`, `"MONO"`, `"CASL"`, and `"CRSV"` axes. This trick is originally from [Pixel Ambacht](https://pixelambacht.nl/2019/fixing-variable-font-inheritance/). We can apply it like this: | ||
79 | |||
80 | ```css | ||
81 | :root { | ||
82 | --ifm-font-family-base: 'Recursive Variable', sans-serif; | ||
83 | --ifm-font-family-monospace: var(--ifm-font-family-base); | ||
84 | --slnt: 0; | ||
85 | --mono: 0; | ||
86 | --casl: 0; | ||
87 | --crsv: 0.5; | ||
88 | } | ||
89 | |||
90 | * { | ||
91 | font-variation-settings: | ||
92 | 'slnt' var(--slnt), | ||
93 | 'MONO' var(--mono), | ||
94 | 'CASL' var(--casl), | ||
95 | 'CRSV' var(--crsv) !important; | ||
96 | } | ||
97 | ``` | ||
98 | |||
99 | Both the base font family (`--ifm-font-family-base`) and the monospace font family (`--ifm-font-family-monospace`) of Infima should be set to Recursive. We'll blend between proportional and monospace text with the `--mono` custom property later. | ||
100 | |||
101 | We set `"CRSV"` to 0.5 by default to take advantage of the auto-switching behavior for italic text. Thus, we'll be able to format italic text with just the `--slnt` custom property. | ||
102 | |||
103 | :::info | ||
104 | |||
105 | There is an issue here with CSS cascading and shorthand properties. Infima occasionally uses the `font` CSS shorthand property to set font size and weight. This overwrites `font-variation-settings` and erases our customizations unless we make them `!important`. | ||
106 | |||
107 | ::: | ||
108 | |||
109 | ### Styling text | ||
110 | |||
111 | In the absence of support for `font-style: italic`, we have to map the `<i>` and `<em>` HTML tags to slanted type manually: | ||
112 | |||
113 | ```css | ||
114 | i, em { --slnt: -15; } | ||
115 | ``` | ||
116 | |||
117 | Make sure to format anything you also want to have italic with both `--slnt: -15` and `font-style: italic` so that the text gets properly displayed even if the browser loads a [fallback font](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display). | ||
118 | |||
119 | We also make `<code>` and `<kbd>` fully monospaced: | ||
120 | |||
121 | ```css | ||
122 | code, kbd { --mono: 1; } | ||
123 | ``` | ||
124 | |||
125 | Similarly to the [Recursive] documentation, I decided to use the fully casual style for large headings (`<h1>`, `<h2>`). For smaller headings (`<h3>`), I use a blend between the normal and casual styles, because the fully casual one looked a bit too complex at a small point size: | ||
126 | |||
127 | ```css | ||
128 | h1, h2, .markdown > h3 { --casl: 1; } | ||
129 | h3, .markdown > h4 { --casl: 0.5; } | ||
130 | ``` | ||
131 | |||
132 | :::info | ||
133 | |||
134 | Docusarus shifts the sizes of headings up by one for text generated from Markdown. Thus, we need for the `.markdown > h3` and `.markdown > h4` styles. | ||
135 | |||
136 | ::: | ||
137 | |||
138 | ## Font features | ||
139 | |||
140 | Some letters now look a little awkward: the two-story letter '<span style={/** @type {import('react').CSSProperties} */ ({ '--casl': 0.01 })}>g</span>' can be hard to read in small body text. Also, the '@' gets squished horizontally in monospace text way too much. There's even a [GitHub issue](https://github.com/arrowtype/recursive/issues/509) for that in the Recursive repository! | ||
141 | |||
142 | Luckily, Recursive has a number of **OpenType font features** that can change the shape of the characters. You can take a look at them in Recursive's [README page](https://github.com/arrowtype/recursive?tab=readme-ov-file#opentype-features). I also reproduced the image below, but it's a bit large, so you'll need to click to reveal it. | ||
143 | |||
144 | import recursiveFeatures from './recursive-v1.064-opentype_features.png?placeholder=true&sizes[]=360&sizes[]=559&sizes[]=930&sizes[]=1504&rl'; | ||
145 | import recursiveFeaturesOriginal from './recursive-v1.064-opentype_features.png?url'; | ||
146 | |||
147 | <details> | ||
148 | <summary>OpenType font features of Recursive</summary> | ||
149 | |||
150 | <div | ||
151 | style={{ | ||
152 | backgroundImage: `url("${recursiveFeatures.placeholder}")`, | ||
153 | backgroundSize: 'cover', | ||
154 | width: '100%', | ||
155 | aspectRatio: `${recursiveFeatures.width} / ${recursiveFeatures.height}`, | ||
156 | }} | ||
157 | > | ||
158 | <a href={recursiveFeaturesOriginal} target="_blank"> | ||
159 | <img | ||
160 | src={recursiveFeatures.src} | ||
161 | srcSet={recursiveFeatures.srcSet} | ||
162 | width={recursiveFeatures.width} | ||
163 | height={recursiveFeatures.height} | ||
164 | loading="lazy" | ||
165 | sizes="(min-width: 1440px) 704px, (min-width: 1140px) 559px, (min-width: 996px) calc(58.333vw - 66px), calc(100vw - 66px)" | ||
166 | alt="Table of OpenType font features of Recursive" | ||
167 | style={{ width: '100%', height: 'auto' }} | ||
168 | /> | ||
169 | </a> | ||
170 | </div> | ||
171 | |||
172 | Image from [Recursive][recursive] is <LicenseLink to="https://openfontlicense.org/">OFL-1.1</LicenseLink>. | ||
173 | |||
174 | </details> | ||
175 | |||
176 | ### Intermission: font subsetting | ||
177 | |||
178 | If you're using Recursive from [Fontsource][fontsource] or even Google fonts :cold_sweat:, the OpenType font features won't work at all: they've been stripped away from the web font files to make them smaller. There's an open [GitHub issue](https://github.com/fontsource/fontsource/issues/39) in the Fontsource repository to preserve some features, but the problem is highly non-trivial at their scale. | ||
179 | |||
180 | We can solve this problem by grabbing the full [Recursive_VF_1.085.ttf](https://github.com/arrowtype/recursive/blob/6d491202cea5cf6a493ef710cbef2527b9b08939/fonts/ArrowType-Recursive-1.085/Recursive_Desktop/Recursive_VF_1.085.ttf) ourselves and creating our own web font. The full font comes in at a whopping 2.4 MB, so I recommend creating a subset with only the glyphs you use. | ||
181 | |||
182 | We can use the [pyftsubset](https://fonttools.readthedocs.io/en/latest/subset/index.html) tool from the [fonttols](https://github.com/fonttools/fonttools) Python package to create our own web font subset like this: | ||
183 | |||
184 | ``` | ||
185 | pyftsubset Recursive_VF_1.085.ttf | ||
186 | --unicodes=U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD \ | ||
187 | --output-file=recursive-latin.woff2 \ | ||
188 | --flavor=woff2 \ | ||
189 | --layout-features+=ss02,ss05,ss10,ss12,titl \ | ||
190 | --desubroutinize \ | ||
191 | --obfuscate-names | ||
192 | ``` | ||
193 | |||
194 | I copied the list of `--unicodes` to include in the basic latin subset from [Fontsource](https://github.com/fontsource/font-files/blob/fd9fe9317a4ab7042845961a60b1cace22dc14d6/fonts/variable/recursive/full.css#L38). | ||
195 | |||
196 | You can specify the OpenType features (in addition to the standard ones) to include in the output font after `--layout-features+=`. | ||
197 | |||
198 | We're creating a WOFF2 web font for maximum compression, which has [over 97% browser support](https://caniuse.com/woff2). The `--desubroutinize` option should also help with compression. | ||
199 | |||
200 | :::warning | ||
201 | |||
202 | The [SIL Open Font License 1.1](https://openfontlicense.org/) has an infamous [Reserved Font Name (RFN)](https://openfontlicense.org/ofl-reserved-font-names/) clause. If you create a Modified Version of a font that has an RFN, you must also change its name. SIL considers a subset a Modified Version. | ||
203 | |||
204 | The `--obfuscate-names` option should take care of changing the font name in the font file. If you use a font that declares an RFN, you must also make sure not to refer to it with its original name outside the font file, e.g., in your CSS files. | ||
205 | |||
206 | Recursive doesn't declare any RFN, so we can keep referring to our custom subset as 'Recursive' without getting into any trouble. :relieved: | ||
207 | |||
208 | ::: | ||
209 | |||
210 | Now we can include our custom subset in our CSS: | ||
211 | |||
212 | ```css | ||
213 | @font-face { | ||
214 | font-family: 'Recursive Variable'; | ||
215 | font-style: oblique 0deg 15deg; | ||
216 | font-display: swap; | ||
217 | font-weight: 300 1000; | ||
218 | src: url(recursive-latin.woff2) format('woff2-variations'); | ||
219 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, | ||
220 | U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, | ||
221 | U+2193, U+2212, U+2215, U+FEFF, U+FFFD; | ||
222 | } | ||
223 | ``` | ||
224 | |||
225 | For this website, I actually wrote a [small Python script](https://git.marussy.com/blog/tree/scripts/subset_fonts.py) to generate the font subsets. I also use a [template](https://git.marussy.com/blog/tree/scripts/fonts.css.jinja2) for generating the corresponding CSS. Both files can be found in the [Git repository](https://git.marussy.com/blog/) of this website with <MITLicenseLink />. | ||
226 | |||
227 | ### Selecting features | ||
228 | |||
229 | I decided to take the features `ss02`, `ss05`, `ss10`, `ss12`, and `titl` for a spin. You can also try them yourself below. | ||
230 | |||
231 | <VariableAxisSettingsWithFontFeaturesToggle /> | ||
232 | |||
233 | After a bit of experimentation, I decided to use the features in the following way: | ||
234 | |||
235 | * The simplified look of the letter 'g' with the `ss02` feature is suitable for body text, but I prefer the two-story '<span style={/** @type {import('react').CSSProperties} */ ({'--casl': 0.01})}>g</span>' for headings. | ||
236 | * The `ss05` feature does nothing for proportional text, but makes the letter `l` more similar to that in my favorite coding font, [Fira Code](https://github.com/tonsky/FiraCode) in monospace text. We can safely set this for all text. | ||
237 | * The `ss10` (dotted zero) and `ss12` (simplified `@`) features affect proportional text, too, so we shouldn't set them for all text. But, for me, they make text more readable once the monospace letter shapes kick in after `--mono: 0.5`. | ||
238 | * The alternative '<span style={/** @type {import('react').CSSProperties} */ ({'--casl': 0.01})}>Q</span>' with `titl` is nice for headings, but I prefer the default 'Q' with descender for body text. | ||
239 | |||
240 | ### Automatic feature switching | ||
241 | |||
242 | Introducing CSS custom properties for these font features -- like we did for the [variable axes](#custom-properties) -- would be a major pain when writing CSS by hand. | ||
243 | |||
244 | We can take some inspiration from the behavior of the `"CRSV"` axis: let's set the font feature _automatically_ based on the value of some variable axis! | ||
245 | |||
246 | My headings use the `"CASL"` axis, so I decided to switch `ss02` off and `titl` on if `--casl` is larger than 0. | ||
247 | For `ss10` and `ss12`, `--mono` larger than 0.5 gives a natural switching point, since this is where the other monospace letter shapes appear as well. | ||
248 | |||
249 | In short, we want something like | ||
250 | |||
251 | ```math | ||
252 | \begin{aligned} | ||
253 | \texttt{ss02} &= \begin{cases} | ||
254 | 1 & \text{if $\texttt{casl} = 0$,} \\ | ||
255 | 0 & \text{if $\texttt{casl} > 0$,} | ||
256 | \end{cases} \\ | ||
257 | \texttt{titl} &= \begin{cases} | ||
258 | 0 & \text{if $\texttt{casl} = 0$,} \\ | ||
259 | 1 & \text{if $\texttt{casl} > 0$,} | ||
260 | \end{cases} \\ | ||
261 | \texttt{ss10} = \texttt{ss12} &= \begin{cases} | ||
262 | 0 & \text{if $\texttt{mono} \le 0.5$,} \\ | ||
263 | 1 & \text{if $\texttt{mono} > 0.5$.} | ||
264 | \end{cases} | ||
265 | \end{aligned} | ||
266 | ``` | ||
267 | |||
268 | We will use [`calc()`](https://developer.mozilla.org/en-US/docs/Web/CSS/calc) to determine the values of [`font-feature-settings`](https://developer.mozilla.org/en-US/docs/Web/CSS/font-feature-settings). | ||
269 | However, looking through the list of [CSS math function](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Functions#math_functions), we find few options for creating discontinuous expressions. The [`round()`](https://developer.mozilla.org/en-US/docs/Web/CSS/round) function sounds promising, but it isn't supported by Chromium. | ||
270 | |||
271 | The trick is to replace our expressions with _continuous_ ones that we can build from widely supported CSS functions [`min()`](https://developer.mozilla.org/en-US/docs/Web/CSS/min) and [`clamp()`](https://developer.mozilla.org/en-US/docs/Web/CSS/clamp): | ||
272 | |||
273 | <Tabs> | ||
274 | <TabItem value="code" label="Code" default> | ||
275 | ```css | ||
276 | * { | ||
277 | font-feature-settings: | ||
278 | 'ss02' calc(min(var(--casl) * 1000, 1)), | ||
279 | 'ss05' 1, | ||
280 | 'ss10' calc(clamp(0, var(--mono) * 1000 - 500, 1)), | ||
281 | 'ss12' calc(clamp(0, var(--mono) * 1000 - 500, 1)), | ||
282 | 'titl' calc(1 - min(var(--casl) * 1000, 1)) !important; | ||
283 | } | ||
284 | ``` | ||
285 | </TabItem> | ||
286 | <TabItem value="math" label="Math"> | ||
287 | ```math | ||
288 | \begin{aligned} | ||
289 | \texttt{ss02} = 1 - \mathit{min}(1000 \cdot \texttt{casl}, 1) &= \begin{cases} | ||
290 | 1 & \text{if $\texttt{casl} = 0$,} \\ | ||
291 | 1 - 1000 \cdot \texttt{casl} & \text{if $0 < \texttt{casl} \le 0.001$,} \\ | ||
292 | 0 & \text{if $\texttt{casl} > 0.001$,} | ||
293 | \end{cases} \\ | ||
294 | \texttt{titl} = \mathit{min}(1000 \cdot \texttt{casl}, 1) &= \begin{cases} | ||
295 | 0 & \text{if $\texttt{casl} = 0$,} \\ | ||
296 | 1000 \cdot \texttt{casl} & \text{if $0 < \texttt{casl} \le 0.001$,} \\ | ||
297 | 1 & \text{if $\texttt{casl} > 0.001$,} | ||
298 | \end{cases} \\ | ||
299 | \texttt{ss10} = \texttt{ss12} = \mathit{clamp}(0, 1000 \cdot \texttt{mono} - 500, 1) &= \begin{cases} | ||
300 | 0 & \text{if $\texttt{mono} \le 0.5$,} \\ | ||
301 | 1000 \cdot \texttt{mono} - 500 & \text{if $0.5 < \texttt{mono} \le 0.501$,} \\ | ||
302 | 1 & \text{if $\texttt{mono} > 0.501$.} | ||
303 | \end{cases} | ||
304 | \end{aligned} | ||
305 | ``` | ||
306 | |||
307 | Each CSS expression agrees with the desired discontinous expression everywhere except a tiny interval of width 0.001 around the decision boundary. We position the intervals so that commonly used variable axis values (like 0, 1, and 0.5) don't cause any problems. | ||
308 | </TabItem> | ||
309 | </Tabs> | ||
310 | |||
311 | This works as long as we only set `--casl` and `--mono` with up to 0.001 precision. Values like 0.0005 or 0.5005 will likely cause problems, because they try to set a non-integer value for a font feature. In my testing, this made both Chromium and Firefox to ignore the `font-feature-settings` rule completely. | ||
312 | |||
313 | In practice, we hardly set a value with more than 0.1 precision, because very slight changes in the letter shapes are barely perceptible. | ||
314 | |||
315 | You can set the variables axes below with up to 0.01 precision: | ||
316 | |||
317 | <VariableAxisSettingsWithFontFeaturesPreview /> | ||
318 | |||
319 | ## Conclusion | ||
320 | |||
321 | I've shown you how to set variable axes and font features for the [Recursive][recursive] font with some CSS custom property and function magic. | ||
322 | I also managed to include every Markdown feature and the kitchen sink in this post to try out [Docusarus][docusaurus] as a static site generator. \ No newline at end of file | ||
diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 57e8a8e..602053d 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts | |||
@@ -11,9 +11,15 @@ import type { Options as ClassicThemeOptions } from '@docusaurus/theme-classic'; | |||
11 | import type { UserThemeConfig } from '@docusaurus/theme-common'; | 11 | import type { UserThemeConfig } from '@docusaurus/theme-common'; |
12 | import type { Config } from '@docusaurus/types'; | 12 | import type { Config } from '@docusaurus/types'; |
13 | import { Config as SwcConfig } from '@swc/core'; | 13 | import { Config as SwcConfig } from '@swc/core'; |
14 | import { themes } from 'prism-react-renderer'; | ||
15 | import rehypeKatex from 'rehype-katex'; | ||
16 | import remarkMath from 'remark-math'; | ||
14 | import smartypants from 'remark-smartypants'; | 17 | import smartypants from 'remark-smartypants'; |
15 | 18 | ||
16 | const remarkPlugins = [[smartypants, { dashes: 'oldschool' }]]; | 19 | const markdownOptions = { |
20 | remarkPlugins: [remarkMath, [smartypants, { dashes: 'oldschool' }]], | ||
21 | rehypePlugins: [[rehypeKatex, { trust: true }]], | ||
22 | }; | ||
17 | 23 | ||
18 | export default { | 24 | export default { |
19 | title: 'Kristóf Marussy', | 25 | title: 'Kristóf Marussy', |
@@ -26,7 +32,7 @@ export default { | |||
26 | { | 32 | { |
27 | routeBasePath: '/', | 33 | routeBasePath: '/', |
28 | archiveBasePath: 'blog', | 34 | archiveBasePath: 'blog', |
29 | remarkPlugins, | 35 | ...markdownOptions, |
30 | feedOptions: { | 36 | feedOptions: { |
31 | type: 'all', | 37 | type: 'all', |
32 | title: 'Kristóf Marussy', | 38 | title: 'Kristóf Marussy', |
@@ -36,9 +42,7 @@ export default { | |||
36 | ], | 42 | ], |
37 | [ | 43 | [ |
38 | '@docusaurus/plugin-content-pages', | 44 | '@docusaurus/plugin-content-pages', |
39 | { | 45 | markdownOptions satisfies PagesOptions, |
40 | remarkPlugins, | ||
41 | } satisfies PagesOptions, | ||
42 | ], | 46 | ], |
43 | '@docusaurus/plugin-sitemap', | 47 | '@docusaurus/plugin-sitemap', |
44 | './src/plugins/compressionPlugin.ts', | 48 | './src/plugins/compressionPlugin.ts', |
@@ -59,6 +63,11 @@ export default { | |||
59 | colorMode: { | 63 | colorMode: { |
60 | respectPrefersColorScheme: true, | 64 | respectPrefersColorScheme: true, |
61 | }, | 65 | }, |
66 | prism: { | ||
67 | additionalLanguages: ['bash', 'java', 'shell-session'], | ||
68 | theme: themes.oneLight, | ||
69 | darkTheme: themes.oneDark, | ||
70 | }, | ||
62 | navbar: { | 71 | navbar: { |
63 | title: 'Kristóf Marussy', | 72 | title: 'Kristóf Marussy', |
64 | hideOnScroll: true, | 73 | hideOnScroll: true, |
diff --git a/package.json b/package.json index d4fd289..b4c0eb3 100644 --- a/package.json +++ b/package.json | |||
@@ -26,39 +26,44 @@ | |||
26 | }, | 26 | }, |
27 | "packageManager": "yarn@4.1.1", | 27 | "packageManager": "yarn@4.1.1", |
28 | "dependencies": { | 28 | "dependencies": { |
29 | "@docusaurus/core": "^3.1.1", | 29 | "@docusaurus/core": "^3.2.1", |
30 | "@docusaurus/plugin-content-blog": "^3.1.1", | 30 | "@docusaurus/plugin-content-blog": "^3.2.1", |
31 | "@docusaurus/plugin-content-pages": "^3.1.1", | 31 | "@docusaurus/plugin-content-pages": "^3.2.1", |
32 | "@docusaurus/plugin-sitemap": "^3.1.1", | 32 | "@docusaurus/plugin-sitemap": "^3.2.1", |
33 | "@docusaurus/theme-classic": "^3.1.1", | 33 | "@docusaurus/theme-classic": "^3.2.1", |
34 | "@docusaurus/theme-common": "^3.1.1", | 34 | "@docusaurus/theme-common": "^3.2.1", |
35 | "@docusaurus/utils": "^3.1.1", | 35 | "@docusaurus/utils": "^3.2.1", |
36 | "@mdx-js/react": "^3.0.1", | 36 | "@mdx-js/react": "^3.0.1", |
37 | "@phosphor-icons/react": "2.0.15", | 37 | "@phosphor-icons/react": "2.1.4", |
38 | "@swc/core": "^1.4.8", | 38 | "@swc/core": "^1.4.12", |
39 | "clsx": "^2.1.0", | 39 | "clsx": "^2.1.0", |
40 | "compression-webpack-plugin": "^11.1.0", | 40 | "compression-webpack-plugin": "^11.1.0", |
41 | "katex": "^0.16.10", | ||
42 | "prism-react-renderer": "^2.3.1", | ||
41 | "prop-types": "^15.8.1", | 43 | "prop-types": "^15.8.1", |
42 | "react": "^18.2.0", | 44 | "react": "^18.2.0", |
43 | "react-dom": "^18.2.0", | 45 | "react-dom": "^18.2.0", |
46 | "rehype-katex": "^7.0.0", | ||
47 | "remark-math": "^6.0.0", | ||
44 | "remark-smartypants": "^2.1.0", | 48 | "remark-smartypants": "^2.1.0", |
45 | "responsive-loader": "^3.1.2", | 49 | "responsive-loader": "^3.1.2", |
46 | "sharp": "^0.33.3", | 50 | "sharp": "^0.33.3", |
47 | "simple-icons": "^11.9.0", | 51 | "simple-icons": "^11.11.0", |
48 | "swc-loader": "^0.2.6", | 52 | "swc-loader": "^0.2.6", |
49 | "terser-webpack-plugin": "^5.3.10", | 53 | "terser-webpack-plugin": "^5.3.10", |
50 | "webpack": "^5.91.0" | 54 | "webpack": "^5.91.0" |
51 | }, | 55 | }, |
52 | "devDependencies": { | 56 | "devDependencies": { |
53 | "@docusaurus/module-type-aliases": "^3.1.1", | 57 | "@docusaurus/module-type-aliases": "^3.2.1", |
54 | "@docusaurus/tsconfig": "^3.1.1", | 58 | "@docusaurus/tsconfig": "^3.2.1", |
55 | "@docusaurus/types": "^3.1.1", | 59 | "@docusaurus/types": "^3.2.1", |
56 | "@types/babel__core": "^7.20.5", | 60 | "@types/babel__core": "^7.20.5", |
57 | "@types/node": "^20.11.30", | 61 | "@types/katex": "^0.16.7", |
58 | "@types/react": "^18.2.69", | 62 | "@types/node": "^20.12.4", |
63 | "@types/react": "^18.2.74", | ||
59 | "cross-env": "^7.0.3", | 64 | "cross-env": "^7.0.3", |
60 | "prettier": "^3.2.5", | 65 | "prettier": "^3.2.5", |
61 | "typescript": "^5.4.3" | 66 | "typescript": "^5.4.4" |
62 | }, | 67 | }, |
63 | "browserslist": { | 68 | "browserslist": { |
64 | "production": [ | 69 | "production": [ |
diff --git a/src/components/landing/sections/Contact.module.css b/src/components/landing/sections/Contact.module.css index cfe1455..77d1861 100644 --- a/src/components/landing/sections/Contact.module.css +++ b/src/components/landing/sections/Contact.module.css | |||
@@ -102,8 +102,8 @@ | |||
102 | 102 | ||
103 | .contact__description { | 103 | .contact__description { |
104 | margin: 0; | 104 | margin: 0; |
105 | font-style: italic; | ||
105 | --slnt: -15; | 106 | --slnt: -15; |
106 | --crsv: 1; | ||
107 | font-size: 0.875rem; | 107 | font-size: 0.875rem; |
108 | --marussy-contact-color: var(--marussy-contact-muted-color-or-hover); | 108 | --marussy-contact-color: var(--marussy-contact-muted-color-or-hover); |
109 | color: var(--marussy-contact-muted-color-or-hover); | 109 | color: var(--marussy-contact-muted-color-or-hover); |
diff --git a/src/css/custom.css b/src/css/custom.css index bd6e179..61e8879 100644 --- a/src/css/custom.css +++ b/src/css/custom.css | |||
@@ -10,6 +10,8 @@ | |||
10 | * work well for content-centric websites. | 10 | * work well for content-centric websites. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | @import 'katex/dist/katex.css'; | ||
14 | |||
13 | @import './fonts.css'; | 15 | @import './fonts.css'; |
14 | @import './sr-only.css'; | 16 | @import './sr-only.css'; |
15 | 17 | ||
@@ -29,7 +31,7 @@ | |||
29 | --mono: 0; | 31 | --mono: 0; |
30 | --casl: 0; | 32 | --casl: 0; |
31 | --slnt: 0; | 33 | --slnt: 0; |
32 | --crsv: 0; | 34 | --crsv: 0.5; |
33 | --marussy-heading-tracking: -0.032em; | 35 | --marussy-heading-tracking: -0.032em; |
34 | --marussy-button-tracking: -0.026em; | 36 | --marussy-button-tracking: -0.026em; |
35 | } | 37 | } |
@@ -59,25 +61,20 @@ | |||
59 | font-feature-settings: | 61 | font-feature-settings: |
60 | /* Use single-story g in body text. */ | 62 | /* Use single-story g in body text. */ |
61 | 'ss02' calc(1 - min(var(--casl) * 1000, 1)), | 63 | 'ss02' calc(1 - min(var(--casl) * 1000, 1)), |
62 | /* Simplified l in code. */ 'ss05' | 64 | /* Simplified l in code. */ 'ss05' 1, |
63 | calc(1 - min(1000 - var(--mono) * 1000, 1)), | ||
64 | /* Dotted zero in code. */ 'ss10' | 65 | /* Dotted zero in code. */ 'ss10' |
65 | calc(1 - min(1000 - var(--mono) * 1000, 1)), | 66 | calc(clamp(0, var(--mono) * 1000 - 500, 1)), |
66 | /* Simplified @ in code. */ 'ss12' | 67 | /* Simplified @ in code. */ 'ss12' |
67 | calc(1 - min(1000 - var(--mono) * 1000, 1)), | 68 | calc(clamp(0, var(--mono) * 1000 - 500, 1)), |
68 | /* No descender for Q in titles. */ 'titl' calc(min(var(--casl) * 1000, 1)), | 69 | /* No descender for Q in titles. */ 'titl' calc(min(var(--casl) * 1000, 1)) !important; |
69 | /* Enable italic ligatures. */ 'liga' !important; | ||
70 | } | 70 | } |
71 | 71 | ||
72 | i, | 72 | i, |
73 | em { | 73 | em { |
74 | font-style: normal; | ||
75 | --slnt: -15; | 74 | --slnt: -15; |
76 | --crsv: 1; | ||
77 | } | 75 | } |
78 | 76 | ||
79 | code, | 77 | code, |
80 | pre, | ||
81 | kbd { | 78 | kbd { |
82 | --mono: 1; | 79 | --mono: 1; |
83 | } | 80 | } |
@@ -113,3 +110,18 @@ h3 { | |||
113 | .hero__subtitle { | 110 | .hero__subtitle { |
114 | font-weight: 500; | 111 | font-weight: 500; |
115 | } | 112 | } |
113 | |||
114 | .footnotes { | ||
115 | margin-top: 3rem; | ||
116 | padding-top: var(--ifm-hr-margin-vertical); | ||
117 | border-top: var(--ifm-hr-height) solid var(--ifm-hr-background-color); | ||
118 | } | ||
119 | |||
120 | .markdown > .footnotes ol, | ||
121 | .markdown > .footnotes li:last-of-type :last-of-type { | ||
122 | margin-bottom: 0; | ||
123 | } | ||
124 | |||
125 | .katex-display { | ||
126 | overflow-y: auto; | ||
127 | } | ||
diff --git a/src/plugins/responsiveLoaderPlugin.ts b/src/plugins/responsiveLoaderPlugin.ts index b4600e5..6334c4c 100644 --- a/src/plugins/responsiveLoaderPlugin.ts +++ b/src/plugins/responsiveLoaderPlugin.ts | |||
@@ -22,6 +22,7 @@ export default function responsiveLoaderPlugin(): Plugin { | |||
22 | rules: [ | 22 | rules: [ |
23 | { | 23 | { |
24 | test: /\.(png|jpe?g)$/, | 24 | test: /\.(png|jpe?g)$/, |
25 | resourceQuery: /[?&]rl$/, | ||
25 | use: [ | 26 | use: [ |
26 | { | 27 | { |
27 | loader: 'responsive-loader', | 28 | loader: 'responsive-loader', |
@@ -327,7 +327,7 @@ __metadata: | |||
327 | languageName: node | 327 | languageName: node |
328 | linkType: hard | 328 | linkType: hard |
329 | 329 | ||
330 | "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.6": | 330 | "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.6": |
331 | version: 7.23.6 | 331 | version: 7.23.6 |
332 | resolution: "@babel/parser@npm:7.23.6" | 332 | resolution: "@babel/parser@npm:7.23.6" |
333 | bin: | 333 | bin: |
@@ -1474,9 +1474,9 @@ __metadata: | |||
1474 | languageName: node | 1474 | languageName: node |
1475 | linkType: hard | 1475 | linkType: hard |
1476 | 1476 | ||
1477 | "@docusaurus/core@npm:3.1.1, @docusaurus/core@npm:^3.1.1": | 1477 | "@docusaurus/core@npm:3.2.1, @docusaurus/core@npm:^3.2.1": |
1478 | version: 3.1.1 | 1478 | version: 3.2.1 |
1479 | resolution: "@docusaurus/core@npm:3.1.1" | 1479 | resolution: "@docusaurus/core@npm:3.2.1" |
1480 | dependencies: | 1480 | dependencies: |
1481 | "@babel/core": "npm:^7.23.3" | 1481 | "@babel/core": "npm:^7.23.3" |
1482 | "@babel/generator": "npm:^7.23.3" | 1482 | "@babel/generator": "npm:^7.23.3" |
@@ -1488,14 +1488,13 @@ __metadata: | |||
1488 | "@babel/runtime": "npm:^7.22.6" | 1488 | "@babel/runtime": "npm:^7.22.6" |
1489 | "@babel/runtime-corejs3": "npm:^7.22.6" | 1489 | "@babel/runtime-corejs3": "npm:^7.22.6" |
1490 | "@babel/traverse": "npm:^7.22.8" | 1490 | "@babel/traverse": "npm:^7.22.8" |
1491 | "@docusaurus/cssnano-preset": "npm:3.1.1" | 1491 | "@docusaurus/cssnano-preset": "npm:3.2.1" |
1492 | "@docusaurus/logger": "npm:3.1.1" | 1492 | "@docusaurus/logger": "npm:3.2.1" |
1493 | "@docusaurus/mdx-loader": "npm:3.1.1" | 1493 | "@docusaurus/mdx-loader": "npm:3.2.1" |
1494 | "@docusaurus/react-loadable": "npm:5.5.2" | 1494 | "@docusaurus/react-loadable": "npm:5.5.2" |
1495 | "@docusaurus/utils": "npm:3.1.1" | 1495 | "@docusaurus/utils": "npm:3.2.1" |
1496 | "@docusaurus/utils-common": "npm:3.1.1" | 1496 | "@docusaurus/utils-common": "npm:3.2.1" |
1497 | "@docusaurus/utils-validation": "npm:3.1.1" | 1497 | "@docusaurus/utils-validation": "npm:3.2.1" |
1498 | "@slorber/static-site-generator-webpack-plugin": "npm:^4.0.7" | ||
1499 | "@svgr/webpack": "npm:^6.5.1" | 1498 | "@svgr/webpack": "npm:^6.5.1" |
1500 | autoprefixer: "npm:^10.4.14" | 1499 | autoprefixer: "npm:^10.4.14" |
1501 | babel-loader: "npm:^9.1.3" | 1500 | babel-loader: "npm:^9.1.3" |
@@ -1516,6 +1515,7 @@ __metadata: | |||
1516 | detect-port: "npm:^1.5.1" | 1515 | detect-port: "npm:^1.5.1" |
1517 | escape-html: "npm:^1.0.3" | 1516 | escape-html: "npm:^1.0.3" |
1518 | eta: "npm:^2.2.0" | 1517 | eta: "npm:^2.2.0" |
1518 | eval: "npm:^0.1.8" | ||
1519 | file-loader: "npm:^6.2.0" | 1519 | file-loader: "npm:^6.2.0" |
1520 | fs-extra: "npm:^11.1.1" | 1520 | fs-extra: "npm:^11.1.1" |
1521 | html-minifier-terser: "npm:^7.2.0" | 1521 | html-minifier-terser: "npm:^7.2.0" |
@@ -1524,6 +1524,7 @@ __metadata: | |||
1524 | leven: "npm:^3.1.0" | 1524 | leven: "npm:^3.1.0" |
1525 | lodash: "npm:^4.17.21" | 1525 | lodash: "npm:^4.17.21" |
1526 | mini-css-extract-plugin: "npm:^2.7.6" | 1526 | mini-css-extract-plugin: "npm:^2.7.6" |
1527 | p-map: "npm:^4.0.0" | ||
1527 | postcss: "npm:^8.4.26" | 1528 | postcss: "npm:^8.4.26" |
1528 | postcss-loader: "npm:^7.3.3" | 1529 | postcss-loader: "npm:^7.3.3" |
1529 | prompts: "npm:^2.4.2" | 1530 | prompts: "npm:^2.4.2" |
@@ -1552,41 +1553,39 @@ __metadata: | |||
1552 | react-dom: ^18.0.0 | 1553 | react-dom: ^18.0.0 |
1553 | bin: | 1554 | bin: |
1554 | docusaurus: bin/docusaurus.mjs | 1555 | docusaurus: bin/docusaurus.mjs |
1555 | checksum: 10c0/7e7310258fd60bde11eb94a6240c469ddeaf7e55ec35e2f23878a201f25971b016cfd334c2bf0a7a6aa9340bbfedf781b4d875905519597439b88b2b32a54d73 | 1556 | checksum: 10c0/f80d56027cf9ca3110eb75c6b416328f083c8ff99cc579e9f389783333b2934286c5748894dff27ead5678b6c3c11ce5db009690c248b130dad26678b68a2730 |
1556 | languageName: node | 1557 | languageName: node |
1557 | linkType: hard | 1558 | linkType: hard |
1558 | 1559 | ||
1559 | "@docusaurus/cssnano-preset@npm:3.1.1": | 1560 | "@docusaurus/cssnano-preset@npm:3.2.1": |
1560 | version: 3.1.1 | 1561 | version: 3.2.1 |
1561 | resolution: "@docusaurus/cssnano-preset@npm:3.1.1" | 1562 | resolution: "@docusaurus/cssnano-preset@npm:3.2.1" |
1562 | dependencies: | 1563 | dependencies: |
1563 | cssnano-preset-advanced: "npm:^5.3.10" | 1564 | cssnano-preset-advanced: "npm:^5.3.10" |
1564 | postcss: "npm:^8.4.26" | 1565 | postcss: "npm:^8.4.26" |
1565 | postcss-sort-media-queries: "npm:^4.4.1" | 1566 | postcss-sort-media-queries: "npm:^4.4.1" |
1566 | tslib: "npm:^2.6.0" | 1567 | tslib: "npm:^2.6.0" |
1567 | checksum: 10c0/8f3e2f495cb5420437478b6c6b9d83f509f8f17ab06db124ee751749d35f56408d2bad48b56439bc42c02e7faf49b12920bc1e078bbe28143e423ac10d421478 | 1568 | checksum: 10c0/b06c7f8ddcc6e265b09f34f205fc65402514ea9b01e5223b0820ba6df9d68b6778e8ef594262b5aa8d2f0f05728d20cb2539d33bc94c08057131b28b4e3448b6 |
1568 | languageName: node | 1569 | languageName: node |
1569 | linkType: hard | 1570 | linkType: hard |
1570 | 1571 | ||
1571 | "@docusaurus/logger@npm:3.1.1": | 1572 | "@docusaurus/logger@npm:3.2.1": |
1572 | version: 3.1.1 | 1573 | version: 3.2.1 |
1573 | resolution: "@docusaurus/logger@npm:3.1.1" | 1574 | resolution: "@docusaurus/logger@npm:3.2.1" |
1574 | dependencies: | 1575 | dependencies: |
1575 | chalk: "npm:^4.1.2" | 1576 | chalk: "npm:^4.1.2" |
1576 | tslib: "npm:^2.6.0" | 1577 | tslib: "npm:^2.6.0" |
1577 | checksum: 10c0/a70814e8a54b800aadd2c76f34411c9ab4b0907287ae3cee775c7ebb15c797f5807d3a25bd30519361654e667a81c496c8e0229cce989ba92028f76fde73f9e4 | 1578 | checksum: 10c0/3b7c9418f9ca570bfcb16690394ff83551db60646cd3c883442d6ce05a88ea27bab70ba4ffe0160a299b03a2d471472668760e429be8f5255f39ec3edab9308b |
1578 | languageName: node | 1579 | languageName: node |
1579 | linkType: hard | 1580 | linkType: hard |
1580 | 1581 | ||
1581 | "@docusaurus/mdx-loader@npm:3.1.1": | 1582 | "@docusaurus/mdx-loader@npm:3.2.1": |
1582 | version: 3.1.1 | 1583 | version: 3.2.1 |
1583 | resolution: "@docusaurus/mdx-loader@npm:3.1.1" | 1584 | resolution: "@docusaurus/mdx-loader@npm:3.2.1" |
1584 | dependencies: | 1585 | dependencies: |
1585 | "@babel/parser": "npm:^7.22.7" | 1586 | "@docusaurus/logger": "npm:3.2.1" |
1586 | "@babel/traverse": "npm:^7.22.8" | 1587 | "@docusaurus/utils": "npm:3.2.1" |
1587 | "@docusaurus/logger": "npm:3.1.1" | 1588 | "@docusaurus/utils-validation": "npm:3.2.1" |
1588 | "@docusaurus/utils": "npm:3.1.1" | ||
1589 | "@docusaurus/utils-validation": "npm:3.1.1" | ||
1590 | "@mdx-js/mdx": "npm:^3.0.0" | 1589 | "@mdx-js/mdx": "npm:^3.0.0" |
1591 | "@slorber/remark-comment": "npm:^1.0.0" | 1590 | "@slorber/remark-comment": "npm:^1.0.0" |
1592 | escape-html: "npm:^1.0.3" | 1591 | escape-html: "npm:^1.0.3" |
@@ -1611,16 +1610,16 @@ __metadata: | |||
1611 | peerDependencies: | 1610 | peerDependencies: |
1612 | react: ^18.0.0 | 1611 | react: ^18.0.0 |
1613 | react-dom: ^18.0.0 | 1612 | react-dom: ^18.0.0 |
1614 | checksum: 10c0/b73185dd2a77edfc2a0e840ac339ed90cf66a359861b1e79cfdf678737c26d20a96a186511cf8eac2c17bdb336bec7fa2028341c8c28d862410778ef855c433e | 1613 | checksum: 10c0/0e392229fb7d340f4c7b368f4b6669d2f4b586fd7ee97cef08a81026ba91f800c120b00afb3cd8cfa3318a1947984ba4bda27aee0eee4f01d2434c210ffdc91b |
1615 | languageName: node | 1614 | languageName: node |
1616 | linkType: hard | 1615 | linkType: hard |
1617 | 1616 | ||
1618 | "@docusaurus/module-type-aliases@npm:3.1.1, @docusaurus/module-type-aliases@npm:^3.1.1": | 1617 | "@docusaurus/module-type-aliases@npm:3.2.1, @docusaurus/module-type-aliases@npm:^3.2.1": |
1619 | version: 3.1.1 | 1618 | version: 3.2.1 |
1620 | resolution: "@docusaurus/module-type-aliases@npm:3.1.1" | 1619 | resolution: "@docusaurus/module-type-aliases@npm:3.2.1" |
1621 | dependencies: | 1620 | dependencies: |
1622 | "@docusaurus/react-loadable": "npm:5.5.2" | 1621 | "@docusaurus/react-loadable": "npm:5.5.2" |
1623 | "@docusaurus/types": "npm:3.1.1" | 1622 | "@docusaurus/types": "npm:3.2.1" |
1624 | "@types/history": "npm:^4.7.11" | 1623 | "@types/history": "npm:^4.7.11" |
1625 | "@types/react": "npm:*" | 1624 | "@types/react": "npm:*" |
1626 | "@types/react-router-config": "npm:*" | 1625 | "@types/react-router-config": "npm:*" |
@@ -1630,21 +1629,21 @@ __metadata: | |||
1630 | peerDependencies: | 1629 | peerDependencies: |
1631 | react: "*" | 1630 | react: "*" |
1632 | react-dom: "*" | 1631 | react-dom: "*" |
1633 | checksum: 10c0/d3b79548b995b99db19cbff69b9b83493d901c080582e76a44237336e8409177cb2628f9e0eaa4c6cc336278e52c89e89aca84e41c1870b96c0d642868570d96 | 1632 | checksum: 10c0/fbf7a9ac5832f45e6afa8356cbe33bc979dce1ae9bc3791056261a5d7b1ad1220ecd7b07d1d7cc6b5b2d8d2b437fb31b4ea7df2ec40aad48f245832ca1b067dd |
1634 | languageName: node | 1633 | languageName: node |
1635 | linkType: hard | 1634 | linkType: hard |
1636 | 1635 | ||
1637 | "@docusaurus/plugin-content-blog@npm:3.1.1, @docusaurus/plugin-content-blog@npm:^3.1.1": | 1636 | "@docusaurus/plugin-content-blog@npm:3.2.1, @docusaurus/plugin-content-blog@npm:^3.2.1": |
1638 | version: 3.1.1 | 1637 | version: 3.2.1 |
1639 | resolution: "@docusaurus/plugin-content-blog@npm:3.1.1" | 1638 | resolution: "@docusaurus/plugin-content-blog@npm:3.2.1" |
1640 | dependencies: | 1639 | dependencies: |
1641 | "@docusaurus/core": "npm:3.1.1" | 1640 | "@docusaurus/core": "npm:3.2.1" |
1642 | "@docusaurus/logger": "npm:3.1.1" | 1641 | "@docusaurus/logger": "npm:3.2.1" |
1643 | "@docusaurus/mdx-loader": "npm:3.1.1" | 1642 | "@docusaurus/mdx-loader": "npm:3.2.1" |
1644 | "@docusaurus/types": "npm:3.1.1" | 1643 | "@docusaurus/types": "npm:3.2.1" |
1645 | "@docusaurus/utils": "npm:3.1.1" | 1644 | "@docusaurus/utils": "npm:3.2.1" |
1646 | "@docusaurus/utils-common": "npm:3.1.1" | 1645 | "@docusaurus/utils-common": "npm:3.2.1" |
1647 | "@docusaurus/utils-validation": "npm:3.1.1" | 1646 | "@docusaurus/utils-validation": "npm:3.2.1" |
1648 | cheerio: "npm:^1.0.0-rc.12" | 1647 | cheerio: "npm:^1.0.0-rc.12" |
1649 | feed: "npm:^4.2.2" | 1648 | feed: "npm:^4.2.2" |
1650 | fs-extra: "npm:^11.1.1" | 1649 | fs-extra: "npm:^11.1.1" |
@@ -1658,21 +1657,22 @@ __metadata: | |||
1658 | peerDependencies: | 1657 | peerDependencies: |
1659 | react: ^18.0.0 | 1658 | react: ^18.0.0 |
1660 | react-dom: ^18.0.0 | 1659 | react-dom: ^18.0.0 |
1661 | checksum: 10c0/43e21c9f307fa5f93a2ae39db2b2cbe4f6a6397159984dc8a55eca6820bf6c0d8149dc10fc6b047cb14c19e28b4fa3dbe3231f353c617e76d5d06b3e9d882a4a | 1660 | checksum: 10c0/0d918a4e6a447488f9649cb01029cf040653e0d18122df360663a53ccb83f9f342f28597b80514ba9cac9d84d1bbf02d9679fe57d2832b36c59bcf1364977f41 |
1662 | languageName: node | 1661 | languageName: node |
1663 | linkType: hard | 1662 | linkType: hard |
1664 | 1663 | ||
1665 | "@docusaurus/plugin-content-docs@npm:3.1.1": | 1664 | "@docusaurus/plugin-content-docs@npm:3.2.1": |
1666 | version: 3.1.1 | 1665 | version: 3.2.1 |
1667 | resolution: "@docusaurus/plugin-content-docs@npm:3.1.1" | 1666 | resolution: "@docusaurus/plugin-content-docs@npm:3.2.1" |
1668 | dependencies: | 1667 | dependencies: |
1669 | "@docusaurus/core": "npm:3.1.1" | 1668 | "@docusaurus/core": "npm:3.2.1" |
1670 | "@docusaurus/logger": "npm:3.1.1" | 1669 | "@docusaurus/logger": "npm:3.2.1" |
1671 | "@docusaurus/mdx-loader": "npm:3.1.1" | 1670 | "@docusaurus/mdx-loader": "npm:3.2.1" |
1672 | "@docusaurus/module-type-aliases": "npm:3.1.1" | 1671 | "@docusaurus/module-type-aliases": "npm:3.2.1" |
1673 | "@docusaurus/types": "npm:3.1.1" | 1672 | "@docusaurus/types": "npm:3.2.1" |
1674 | "@docusaurus/utils": "npm:3.1.1" | 1673 | "@docusaurus/utils": "npm:3.2.1" |
1675 | "@docusaurus/utils-validation": "npm:3.1.1" | 1674 | "@docusaurus/utils-common": "npm:3.2.1" |
1675 | "@docusaurus/utils-validation": "npm:3.2.1" | ||
1676 | "@types/react-router-config": "npm:^5.0.7" | 1676 | "@types/react-router-config": "npm:^5.0.7" |
1677 | combine-promises: "npm:^1.1.0" | 1677 | combine-promises: "npm:^1.1.0" |
1678 | fs-extra: "npm:^11.1.1" | 1678 | fs-extra: "npm:^11.1.1" |
@@ -1684,46 +1684,46 @@ __metadata: | |||
1684 | peerDependencies: | 1684 | peerDependencies: |
1685 | react: ^18.0.0 | 1685 | react: ^18.0.0 |
1686 | react-dom: ^18.0.0 | 1686 | react-dom: ^18.0.0 |
1687 | checksum: 10c0/affb37111782ad3f79ce1e8964cf57c1b4d44bb5525d37d06a188a7615a0d94af5140e93f6d65b8f1365e8b6347a9dd0436f510083bd97a5f4b7a3df799d3b9c | 1687 | checksum: 10c0/1f6412e92623d967d2104e68bd4f59e5c596b4f9726e582fce691d76be4491694f7e8dcbbb700232798f635ebb5a54f37a568b00f4eb91fe79ffc5ef8dcda09b |
1688 | languageName: node | 1688 | languageName: node |
1689 | linkType: hard | 1689 | linkType: hard |
1690 | 1690 | ||
1691 | "@docusaurus/plugin-content-pages@npm:3.1.1, @docusaurus/plugin-content-pages@npm:^3.1.1": | 1691 | "@docusaurus/plugin-content-pages@npm:3.2.1, @docusaurus/plugin-content-pages@npm:^3.2.1": |
1692 | version: 3.1.1 | 1692 | version: 3.2.1 |
1693 | resolution: "@docusaurus/plugin-content-pages@npm:3.1.1" | 1693 | resolution: "@docusaurus/plugin-content-pages@npm:3.2.1" |
1694 | dependencies: | 1694 | dependencies: |
1695 | "@docusaurus/core": "npm:3.1.1" | 1695 | "@docusaurus/core": "npm:3.2.1" |
1696 | "@docusaurus/mdx-loader": "npm:3.1.1" | 1696 | "@docusaurus/mdx-loader": "npm:3.2.1" |
1697 | "@docusaurus/types": "npm:3.1.1" | 1697 | "@docusaurus/types": "npm:3.2.1" |
1698 | "@docusaurus/utils": "npm:3.1.1" | 1698 | "@docusaurus/utils": "npm:3.2.1" |
1699 | "@docusaurus/utils-validation": "npm:3.1.1" | 1699 | "@docusaurus/utils-validation": "npm:3.2.1" |
1700 | fs-extra: "npm:^11.1.1" | 1700 | fs-extra: "npm:^11.1.1" |
1701 | tslib: "npm:^2.6.0" | 1701 | tslib: "npm:^2.6.0" |
1702 | webpack: "npm:^5.88.1" | 1702 | webpack: "npm:^5.88.1" |
1703 | peerDependencies: | 1703 | peerDependencies: |
1704 | react: ^18.0.0 | 1704 | react: ^18.0.0 |
1705 | react-dom: ^18.0.0 | 1705 | react-dom: ^18.0.0 |
1706 | checksum: 10c0/ce5bb432429449c4abe5a33fdb69e5e3435587f40f9981c42ef8888eb2c99a78879e45eca4155acfc3ba91eaa3f5e7ebdfff5bba2f59cb1755feaff6ff64dad5 | 1706 | checksum: 10c0/cca2ec8d44d3a8d7db39ad728bcb60595feec51e56be14ef7755945421e22ac3faf39fcd3440497b072d282cb0616547da092e2ae46660eae1d4f8dfb268c182 |
1707 | languageName: node | 1707 | languageName: node |
1708 | linkType: hard | 1708 | linkType: hard |
1709 | 1709 | ||
1710 | "@docusaurus/plugin-sitemap@npm:^3.1.1": | 1710 | "@docusaurus/plugin-sitemap@npm:^3.2.1": |
1711 | version: 3.1.1 | 1711 | version: 3.2.1 |
1712 | resolution: "@docusaurus/plugin-sitemap@npm:3.1.1" | 1712 | resolution: "@docusaurus/plugin-sitemap@npm:3.2.1" |
1713 | dependencies: | 1713 | dependencies: |
1714 | "@docusaurus/core": "npm:3.1.1" | 1714 | "@docusaurus/core": "npm:3.2.1" |
1715 | "@docusaurus/logger": "npm:3.1.1" | 1715 | "@docusaurus/logger": "npm:3.2.1" |
1716 | "@docusaurus/types": "npm:3.1.1" | 1716 | "@docusaurus/types": "npm:3.2.1" |
1717 | "@docusaurus/utils": "npm:3.1.1" | 1717 | "@docusaurus/utils": "npm:3.2.1" |
1718 | "@docusaurus/utils-common": "npm:3.1.1" | 1718 | "@docusaurus/utils-common": "npm:3.2.1" |
1719 | "@docusaurus/utils-validation": "npm:3.1.1" | 1719 | "@docusaurus/utils-validation": "npm:3.2.1" |
1720 | fs-extra: "npm:^11.1.1" | 1720 | fs-extra: "npm:^11.1.1" |
1721 | sitemap: "npm:^7.1.1" | 1721 | sitemap: "npm:^7.1.1" |
1722 | tslib: "npm:^2.6.0" | 1722 | tslib: "npm:^2.6.0" |
1723 | peerDependencies: | 1723 | peerDependencies: |
1724 | react: ^18.0.0 | 1724 | react: ^18.0.0 |
1725 | react-dom: ^18.0.0 | 1725 | react-dom: ^18.0.0 |
1726 | checksum: 10c0/3e9557d9824c30e321a831aecb897429112e5857f5659a933aa6389259d22d7574e31a54eb93cd89250672c1605115397332e333e6aae663df47dd98c5234f8d | 1726 | checksum: 10c0/24856320dcc039d5081d5c39834111aaa044880b98173c1193a5bef2556ccacf829e3623d48936142073daa58dac8d4220a6e0fa8756897fec811c580f03d491 |
1727 | languageName: node | 1727 | languageName: node |
1728 | linkType: hard | 1728 | linkType: hard |
1729 | 1729 | ||
@@ -1739,22 +1739,22 @@ __metadata: | |||
1739 | languageName: node | 1739 | languageName: node |
1740 | linkType: hard | 1740 | linkType: hard |
1741 | 1741 | ||
1742 | "@docusaurus/theme-classic@npm:^3.1.1": | 1742 | "@docusaurus/theme-classic@npm:^3.2.1": |
1743 | version: 3.1.1 | 1743 | version: 3.2.1 |
1744 | resolution: "@docusaurus/theme-classic@npm:3.1.1" | 1744 | resolution: "@docusaurus/theme-classic@npm:3.2.1" |
1745 | dependencies: | 1745 | dependencies: |
1746 | "@docusaurus/core": "npm:3.1.1" | 1746 | "@docusaurus/core": "npm:3.2.1" |
1747 | "@docusaurus/mdx-loader": "npm:3.1.1" | 1747 | "@docusaurus/mdx-loader": "npm:3.2.1" |
1748 | "@docusaurus/module-type-aliases": "npm:3.1.1" | 1748 | "@docusaurus/module-type-aliases": "npm:3.2.1" |
1749 | "@docusaurus/plugin-content-blog": "npm:3.1.1" | 1749 | "@docusaurus/plugin-content-blog": "npm:3.2.1" |
1750 | "@docusaurus/plugin-content-docs": "npm:3.1.1" | 1750 | "@docusaurus/plugin-content-docs": "npm:3.2.1" |
1751 | "@docusaurus/plugin-content-pages": "npm:3.1.1" | 1751 | "@docusaurus/plugin-content-pages": "npm:3.2.1" |
1752 | "@docusaurus/theme-common": "npm:3.1.1" | 1752 | "@docusaurus/theme-common": "npm:3.2.1" |
1753 | "@docusaurus/theme-translations": "npm:3.1.1" | 1753 | "@docusaurus/theme-translations": "npm:3.2.1" |
1754 | "@docusaurus/types": "npm:3.1.1" | 1754 | "@docusaurus/types": "npm:3.2.1" |
1755 | "@docusaurus/utils": "npm:3.1.1" | 1755 | "@docusaurus/utils": "npm:3.2.1" |
1756 | "@docusaurus/utils-common": "npm:3.1.1" | 1756 | "@docusaurus/utils-common": "npm:3.2.1" |
1757 | "@docusaurus/utils-validation": "npm:3.1.1" | 1757 | "@docusaurus/utils-validation": "npm:3.2.1" |
1758 | "@mdx-js/react": "npm:^3.0.0" | 1758 | "@mdx-js/react": "npm:^3.0.0" |
1759 | clsx: "npm:^2.0.0" | 1759 | clsx: "npm:^2.0.0" |
1760 | copy-text-to-clipboard: "npm:^3.2.0" | 1760 | copy-text-to-clipboard: "npm:^3.2.0" |
@@ -1771,21 +1771,21 @@ __metadata: | |||
1771 | peerDependencies: | 1771 | peerDependencies: |
1772 | react: ^18.0.0 | 1772 | react: ^18.0.0 |
1773 | react-dom: ^18.0.0 | 1773 | react-dom: ^18.0.0 |
1774 | checksum: 10c0/6c55ead986d092ccbf1109560596367951466965d9334a06326dbc589fd5013b2e8743ee47a0763dd5517011a4367be10413f2808cf5bf8ce2f21a20ffc56e3c | 1774 | checksum: 10c0/bbd137d895fd4fa08bd389012721257766b7d9218249b8a45e92b376ab76f9dd39e5d8d747872fc8a4c0f47d2a7a5f30d838a9c1d331282f7c4f8795dd1abc5c |
1775 | languageName: node | 1775 | languageName: node |
1776 | linkType: hard | 1776 | linkType: hard |
1777 | 1777 | ||
1778 | "@docusaurus/theme-common@npm:3.1.1, @docusaurus/theme-common@npm:^3.1.1": | 1778 | "@docusaurus/theme-common@npm:3.2.1, @docusaurus/theme-common@npm:^3.2.1": |
1779 | version: 3.1.1 | 1779 | version: 3.2.1 |
1780 | resolution: "@docusaurus/theme-common@npm:3.1.1" | 1780 | resolution: "@docusaurus/theme-common@npm:3.2.1" |
1781 | dependencies: | 1781 | dependencies: |
1782 | "@docusaurus/mdx-loader": "npm:3.1.1" | 1782 | "@docusaurus/mdx-loader": "npm:3.2.1" |
1783 | "@docusaurus/module-type-aliases": "npm:3.1.1" | 1783 | "@docusaurus/module-type-aliases": "npm:3.2.1" |
1784 | "@docusaurus/plugin-content-blog": "npm:3.1.1" | 1784 | "@docusaurus/plugin-content-blog": "npm:3.2.1" |
1785 | "@docusaurus/plugin-content-docs": "npm:3.1.1" | 1785 | "@docusaurus/plugin-content-docs": "npm:3.2.1" |
1786 | "@docusaurus/plugin-content-pages": "npm:3.1.1" | 1786 | "@docusaurus/plugin-content-pages": "npm:3.2.1" |
1787 | "@docusaurus/utils": "npm:3.1.1" | 1787 | "@docusaurus/utils": "npm:3.2.1" |
1788 | "@docusaurus/utils-common": "npm:3.1.1" | 1788 | "@docusaurus/utils-common": "npm:3.2.1" |
1789 | "@types/history": "npm:^4.7.11" | 1789 | "@types/history": "npm:^4.7.11" |
1790 | "@types/react": "npm:*" | 1790 | "@types/react": "npm:*" |
1791 | "@types/react-router-config": "npm:*" | 1791 | "@types/react-router-config": "npm:*" |
@@ -1797,30 +1797,30 @@ __metadata: | |||
1797 | peerDependencies: | 1797 | peerDependencies: |
1798 | react: ^18.0.0 | 1798 | react: ^18.0.0 |
1799 | react-dom: ^18.0.0 | 1799 | react-dom: ^18.0.0 |
1800 | checksum: 10c0/13fb9d9fc4e68e7ead1da92d1f3949b8f0b3a108430a37f895ab98f0ba199f606697d4a7c37d6649acd9391bd834a7658546c2505972185f76ff1f10b9cda9f8 | 1800 | checksum: 10c0/f9da0e73740a6eb94ef6972d2f29fbe69f8924e10a034987c06ba3b64a898b4c52b2e618813d101c2a2608eb7d449eba672ceecad0449c5c8fde54b46255e0f3 |
1801 | languageName: node | 1801 | languageName: node |
1802 | linkType: hard | 1802 | linkType: hard |
1803 | 1803 | ||
1804 | "@docusaurus/theme-translations@npm:3.1.1": | 1804 | "@docusaurus/theme-translations@npm:3.2.1": |
1805 | version: 3.1.1 | 1805 | version: 3.2.1 |
1806 | resolution: "@docusaurus/theme-translations@npm:3.1.1" | 1806 | resolution: "@docusaurus/theme-translations@npm:3.2.1" |
1807 | dependencies: | 1807 | dependencies: |
1808 | fs-extra: "npm:^11.1.1" | 1808 | fs-extra: "npm:^11.1.1" |
1809 | tslib: "npm:^2.6.0" | 1809 | tslib: "npm:^2.6.0" |
1810 | checksum: 10c0/8f118d6c8b1db719cd62bef0aceec6b1ebd1b0d00960a99360a0b7e337fddb689ca0f1a0f580b25fa4bbfce83966b6f9ddb6b607a105337f1d6388b4a1522e5f | 1810 | checksum: 10c0/b364cf03ba353b7188533539935578c5f7be942a0164fe878bf92bb21bb53a5a36ba3ee9f1dc18ae1a6f7d93b765e57d067ee663c1c749302a92eb5fe17311cf |
1811 | languageName: node | 1811 | languageName: node |
1812 | linkType: hard | 1812 | linkType: hard |
1813 | 1813 | ||
1814 | "@docusaurus/tsconfig@npm:^3.1.1": | 1814 | "@docusaurus/tsconfig@npm:^3.2.1": |
1815 | version: 3.1.1 | 1815 | version: 3.2.1 |
1816 | resolution: "@docusaurus/tsconfig@npm:3.1.1" | 1816 | resolution: "@docusaurus/tsconfig@npm:3.2.1" |
1817 | checksum: 10c0/5325ae169c19e155bdaf5b3e5da7ef6d3300a8f24e6271d76c4ae1671c2e385c4d60df72640c8ddd9f640213eeadeb59a16c60fe60b4fe34f70f66da9fa59186 | 1817 | checksum: 10c0/6dc9d908d26b44bc02065437d6bdc29be278b6a6660565e53d0d38c72d8fd4a8ddaf77602652ed7f0fe518498ea85b9949b81c62b7773b96089bafc647b3abfd |
1818 | languageName: node | 1818 | languageName: node |
1819 | linkType: hard | 1819 | linkType: hard |
1820 | 1820 | ||
1821 | "@docusaurus/types@npm:3.1.1, @docusaurus/types@npm:^3.1.1": | 1821 | "@docusaurus/types@npm:3.2.1, @docusaurus/types@npm:^3.2.1": |
1822 | version: 3.1.1 | 1822 | version: 3.2.1 |
1823 | resolution: "@docusaurus/types@npm:3.1.1" | 1823 | resolution: "@docusaurus/types@npm:3.2.1" |
1824 | dependencies: | 1824 | dependencies: |
1825 | "@mdx-js/mdx": "npm:^3.0.0" | 1825 | "@mdx-js/mdx": "npm:^3.0.0" |
1826 | "@types/history": "npm:^4.7.11" | 1826 | "@types/history": "npm:^4.7.11" |
@@ -1834,13 +1834,13 @@ __metadata: | |||
1834 | peerDependencies: | 1834 | peerDependencies: |
1835 | react: ^18.0.0 | 1835 | react: ^18.0.0 |
1836 | react-dom: ^18.0.0 | 1836 | react-dom: ^18.0.0 |
1837 | checksum: 10c0/7322d1f1c19f4c869fe29af58cb8d1fc59b6a7173fc9a019ed75c70a850a89701a0ec77cd3e12c0979f86c18078430f62f72f30cbebad1e19802c5c7f2bed079 | 1837 | checksum: 10c0/ea48d186a2f5a130dcc254147568343c884212e2951c8f34fa0aad123fc70d2da010c0ef8a7e223162d5d0e9a91f14fc7902ce25f9e5c2eed954b47d621ebf4f |
1838 | languageName: node | 1838 | languageName: node |
1839 | linkType: hard | 1839 | linkType: hard |
1840 | 1840 | ||
1841 | "@docusaurus/utils-common@npm:3.1.1": | 1841 | "@docusaurus/utils-common@npm:3.2.1": |
1842 | version: 3.1.1 | 1842 | version: 3.2.1 |
1843 | resolution: "@docusaurus/utils-common@npm:3.1.1" | 1843 | resolution: "@docusaurus/utils-common@npm:3.2.1" |
1844 | dependencies: | 1844 | dependencies: |
1845 | tslib: "npm:^2.6.0" | 1845 | tslib: "npm:^2.6.0" |
1846 | peerDependencies: | 1846 | peerDependencies: |
@@ -1848,28 +1848,30 @@ __metadata: | |||
1848 | peerDependenciesMeta: | 1848 | peerDependenciesMeta: |
1849 | "@docusaurus/types": | 1849 | "@docusaurus/types": |
1850 | optional: true | 1850 | optional: true |
1851 | checksum: 10c0/b483b4626c521e01a4b8ef1e65636e3a99eedae29177f9ee1052268bd5f5f56e12e9a89563792719f3493909e2afc91a1f36532e3e7e290fc933be1e5fed7d01 | 1851 | checksum: 10c0/64a47fd93b6e1b82da6a5e833ece380c474383430466a228263682396763b31dc901ffccfde393450fb9b0e6f6e7f7b98b70afb2c2cf37369ebb0cc2ca12db7c |
1852 | languageName: node | 1852 | languageName: node |
1853 | linkType: hard | 1853 | linkType: hard |
1854 | 1854 | ||
1855 | "@docusaurus/utils-validation@npm:3.1.1": | 1855 | "@docusaurus/utils-validation@npm:3.2.1": |
1856 | version: 3.1.1 | 1856 | version: 3.2.1 |
1857 | resolution: "@docusaurus/utils-validation@npm:3.1.1" | 1857 | resolution: "@docusaurus/utils-validation@npm:3.2.1" |
1858 | dependencies: | 1858 | dependencies: |
1859 | "@docusaurus/logger": "npm:3.1.1" | 1859 | "@docusaurus/logger": "npm:3.2.1" |
1860 | "@docusaurus/utils": "npm:3.1.1" | 1860 | "@docusaurus/utils": "npm:3.2.1" |
1861 | "@docusaurus/utils-common": "npm:3.2.1" | ||
1861 | joi: "npm:^17.9.2" | 1862 | joi: "npm:^17.9.2" |
1862 | js-yaml: "npm:^4.1.0" | 1863 | js-yaml: "npm:^4.1.0" |
1863 | tslib: "npm:^2.6.0" | 1864 | tslib: "npm:^2.6.0" |
1864 | checksum: 10c0/7075de973c06b0a87ba6ec73ce4f3e79cd1d572823b65f6ebb974459b34353e72a085feaf1358c4841e9ccebc1426c5489dc28e694a47fe177f6270e6979d563 | 1865 | checksum: 10c0/79dd6f85f0a8050ca35da28c7cc86d55c475718eda3bb4cfe5f17cca0da609592157149bab6d2704fdbeaaa2a108834879b28649d590a56fe6b83f1077ccd066 |
1865 | languageName: node | 1866 | languageName: node |
1866 | linkType: hard | 1867 | linkType: hard |
1867 | 1868 | ||
1868 | "@docusaurus/utils@npm:3.1.1, @docusaurus/utils@npm:^3.1.1": | 1869 | "@docusaurus/utils@npm:3.2.1, @docusaurus/utils@npm:^3.2.1": |
1869 | version: 3.1.1 | 1870 | version: 3.2.1 |
1870 | resolution: "@docusaurus/utils@npm:3.1.1" | 1871 | resolution: "@docusaurus/utils@npm:3.2.1" |
1871 | dependencies: | 1872 | dependencies: |
1872 | "@docusaurus/logger": "npm:3.1.1" | 1873 | "@docusaurus/logger": "npm:3.2.1" |
1874 | "@docusaurus/utils-common": "npm:3.2.1" | ||
1873 | "@svgr/webpack": "npm:^6.5.1" | 1875 | "@svgr/webpack": "npm:^6.5.1" |
1874 | escape-string-regexp: "npm:^4.0.0" | 1876 | escape-string-regexp: "npm:^4.0.0" |
1875 | file-loader: "npm:^6.2.0" | 1877 | file-loader: "npm:^6.2.0" |
@@ -1881,6 +1883,7 @@ __metadata: | |||
1881 | js-yaml: "npm:^4.1.0" | 1883 | js-yaml: "npm:^4.1.0" |
1882 | lodash: "npm:^4.17.21" | 1884 | lodash: "npm:^4.17.21" |
1883 | micromatch: "npm:^4.0.5" | 1885 | micromatch: "npm:^4.0.5" |
1886 | prompts: "npm:^2.4.2" | ||
1884 | resolve-pathname: "npm:^3.0.0" | 1887 | resolve-pathname: "npm:^3.0.0" |
1885 | shelljs: "npm:^0.8.5" | 1888 | shelljs: "npm:^0.8.5" |
1886 | tslib: "npm:^2.6.0" | 1889 | tslib: "npm:^2.6.0" |
@@ -1891,7 +1894,7 @@ __metadata: | |||
1891 | peerDependenciesMeta: | 1894 | peerDependenciesMeta: |
1892 | "@docusaurus/types": | 1895 | "@docusaurus/types": |
1893 | optional: true | 1896 | optional: true |
1894 | checksum: 10c0/063219351c630be7f16b51aa989f4dd479bb3f941ff44f7b857d4713d954e4c64626e17404eb11b3bd6ef218bd5a4a1412b9c42a30c53fd9748bb04a0aa31faf | 1897 | checksum: 10c0/02e8caff070060d138a2c06e07af988c9905997084b77d1373dbde7dca7122b3cc90979a4c68e5cccc234eb62ba459bca6bb4be5b56d00272d8cf1c5842ff4b6 |
1895 | languageName: node | 1898 | languageName: node |
1896 | linkType: hard | 1899 | linkType: hard |
1897 | 1900 | ||
@@ -2270,13 +2273,13 @@ __metadata: | |||
2270 | languageName: node | 2273 | languageName: node |
2271 | linkType: hard | 2274 | linkType: hard |
2272 | 2275 | ||
2273 | "@phosphor-icons/react@npm:2.0.15": | 2276 | "@phosphor-icons/react@npm:2.1.4": |
2274 | version: 2.0.15 | 2277 | version: 2.1.4 |
2275 | resolution: "@phosphor-icons/react@npm:2.0.15" | 2278 | resolution: "@phosphor-icons/react@npm:2.1.4" |
2276 | peerDependencies: | 2279 | peerDependencies: |
2277 | react: ">= 16.8" | 2280 | react: ">= 16.8" |
2278 | react-dom: ">= 16.8" | 2281 | react-dom: ">= 16.8" |
2279 | checksum: 10c0/b7e60e1adb4440e5fa2930d780ff693ed1540da363354ed005e8d8690b3a94f40e5c3cd62c411b8bbcd847d623e4722bdb1d8a9a372cb9474a087d4794adad78 | 2282 | checksum: 10c0/29f4e8c4ccd4c79051bbb0054766b40a32129876c1ee1fcc9d1a2b857e8eec9aa184bdb02498757c24345d843d849e5b033cfd8b1c5c4df70c1dc7b503328df7 |
2280 | languageName: node | 2283 | languageName: node |
2281 | linkType: hard | 2284 | linkType: hard |
2282 | 2285 | ||
@@ -2376,17 +2379,6 @@ __metadata: | |||
2376 | languageName: node | 2379 | languageName: node |
2377 | linkType: hard | 2380 | linkType: hard |
2378 | 2381 | ||
2379 | "@slorber/static-site-generator-webpack-plugin@npm:^4.0.7": | ||
2380 | version: 4.0.7 | ||
2381 | resolution: "@slorber/static-site-generator-webpack-plugin@npm:4.0.7" | ||
2382 | dependencies: | ||
2383 | eval: "npm:^0.1.8" | ||
2384 | p-map: "npm:^4.0.0" | ||
2385 | webpack-sources: "npm:^3.2.2" | ||
2386 | checksum: 10c0/6ba8abc2d99e8c513bb955502f9cd219c78b2c7b9b76668bf05067cf369cfa838089b52ee51c957e1e6e8442f9dd4f2bbd8df706a3c3388e9a0d41b09a895f97 | ||
2387 | languageName: node | ||
2388 | linkType: hard | ||
2389 | |||
2390 | "@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.1": | 2382 | "@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.1": |
2391 | version: 6.5.1 | 2383 | version: 6.5.1 |
2392 | resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.1" | 2384 | resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.1" |
@@ -2543,90 +2535,90 @@ __metadata: | |||
2543 | languageName: node | 2535 | languageName: node |
2544 | linkType: hard | 2536 | linkType: hard |
2545 | 2537 | ||
2546 | "@swc/core-darwin-arm64@npm:1.4.8": | 2538 | "@swc/core-darwin-arm64@npm:1.4.12": |
2547 | version: 1.4.8 | 2539 | version: 1.4.12 |
2548 | resolution: "@swc/core-darwin-arm64@npm:1.4.8" | 2540 | resolution: "@swc/core-darwin-arm64@npm:1.4.12" |
2549 | conditions: os=darwin & cpu=arm64 | 2541 | conditions: os=darwin & cpu=arm64 |
2550 | languageName: node | 2542 | languageName: node |
2551 | linkType: hard | 2543 | linkType: hard |
2552 | 2544 | ||
2553 | "@swc/core-darwin-x64@npm:1.4.8": | 2545 | "@swc/core-darwin-x64@npm:1.4.12": |
2554 | version: 1.4.8 | 2546 | version: 1.4.12 |
2555 | resolution: "@swc/core-darwin-x64@npm:1.4.8" | 2547 | resolution: "@swc/core-darwin-x64@npm:1.4.12" |
2556 | conditions: os=darwin & cpu=x64 | 2548 | conditions: os=darwin & cpu=x64 |
2557 | languageName: node | 2549 | languageName: node |
2558 | linkType: hard | 2550 | linkType: hard |
2559 | 2551 | ||
2560 | "@swc/core-linux-arm-gnueabihf@npm:1.4.8": | 2552 | "@swc/core-linux-arm-gnueabihf@npm:1.4.12": |
2561 | version: 1.4.8 | 2553 | version: 1.4.12 |
2562 | resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.8" | 2554 | resolution: "@swc/core-linux-arm-gnueabihf@npm:1.4.12" |
2563 | conditions: os=linux & cpu=arm | 2555 | conditions: os=linux & cpu=arm |
2564 | languageName: node | 2556 | languageName: node |
2565 | linkType: hard | 2557 | linkType: hard |
2566 | 2558 | ||
2567 | "@swc/core-linux-arm64-gnu@npm:1.4.8": | 2559 | "@swc/core-linux-arm64-gnu@npm:1.4.12": |
2568 | version: 1.4.8 | 2560 | version: 1.4.12 |
2569 | resolution: "@swc/core-linux-arm64-gnu@npm:1.4.8" | 2561 | resolution: "@swc/core-linux-arm64-gnu@npm:1.4.12" |
2570 | conditions: os=linux & cpu=arm64 & libc=glibc | 2562 | conditions: os=linux & cpu=arm64 & libc=glibc |
2571 | languageName: node | 2563 | languageName: node |
2572 | linkType: hard | 2564 | linkType: hard |
2573 | 2565 | ||
2574 | "@swc/core-linux-arm64-musl@npm:1.4.8": | 2566 | "@swc/core-linux-arm64-musl@npm:1.4.12": |
2575 | version: 1.4.8 | 2567 | version: 1.4.12 |
2576 | resolution: "@swc/core-linux-arm64-musl@npm:1.4.8" | 2568 | resolution: "@swc/core-linux-arm64-musl@npm:1.4.12" |
2577 | conditions: os=linux & cpu=arm64 & libc=musl | 2569 | conditions: os=linux & cpu=arm64 & libc=musl |
2578 | languageName: node | 2570 | languageName: node |
2579 | linkType: hard | 2571 | linkType: hard |
2580 | 2572 | ||
2581 | "@swc/core-linux-x64-gnu@npm:1.4.8": | 2573 | "@swc/core-linux-x64-gnu@npm:1.4.12": |
2582 | version: 1.4.8 | 2574 | version: 1.4.12 |
2583 | resolution: "@swc/core-linux-x64-gnu@npm:1.4.8" | 2575 | resolution: "@swc/core-linux-x64-gnu@npm:1.4.12" |
2584 | conditions: os=linux & cpu=x64 & libc=glibc | 2576 | conditions: os=linux & cpu=x64 & libc=glibc |
2585 | languageName: node | 2577 | languageName: node |
2586 | linkType: hard | 2578 | linkType: hard |
2587 | 2579 | ||
2588 | "@swc/core-linux-x64-musl@npm:1.4.8": | 2580 | "@swc/core-linux-x64-musl@npm:1.4.12": |
2589 | version: 1.4.8 | 2581 | version: 1.4.12 |
2590 | resolution: "@swc/core-linux-x64-musl@npm:1.4.8" | 2582 | resolution: "@swc/core-linux-x64-musl@npm:1.4.12" |
2591 | conditions: os=linux & cpu=x64 & libc=musl | 2583 | conditions: os=linux & cpu=x64 & libc=musl |
2592 | languageName: node | 2584 | languageName: node |
2593 | linkType: hard | 2585 | linkType: hard |
2594 | 2586 | ||
2595 | "@swc/core-win32-arm64-msvc@npm:1.4.8": | 2587 | "@swc/core-win32-arm64-msvc@npm:1.4.12": |
2596 | version: 1.4.8 | 2588 | version: 1.4.12 |
2597 | resolution: "@swc/core-win32-arm64-msvc@npm:1.4.8" | 2589 | resolution: "@swc/core-win32-arm64-msvc@npm:1.4.12" |
2598 | conditions: os=win32 & cpu=arm64 | 2590 | conditions: os=win32 & cpu=arm64 |
2599 | languageName: node | 2591 | languageName: node |
2600 | linkType: hard | 2592 | linkType: hard |
2601 | 2593 | ||
2602 | "@swc/core-win32-ia32-msvc@npm:1.4.8": | 2594 | "@swc/core-win32-ia32-msvc@npm:1.4.12": |
2603 | version: 1.4.8 | 2595 | version: 1.4.12 |
2604 | resolution: "@swc/core-win32-ia32-msvc@npm:1.4.8" | 2596 | resolution: "@swc/core-win32-ia32-msvc@npm:1.4.12" |
2605 | conditions: os=win32 & cpu=ia32 | 2597 | conditions: os=win32 & cpu=ia32 |
2606 | languageName: node | 2598 | languageName: node |
2607 | linkType: hard | 2599 | linkType: hard |
2608 | 2600 | ||
2609 | "@swc/core-win32-x64-msvc@npm:1.4.8": | 2601 | "@swc/core-win32-x64-msvc@npm:1.4.12": |
2610 | version: 1.4.8 | 2602 | version: 1.4.12 |
2611 | resolution: "@swc/core-win32-x64-msvc@npm:1.4.8" | 2603 | resolution: "@swc/core-win32-x64-msvc@npm:1.4.12" |
2612 | conditions: os=win32 & cpu=x64 | 2604 | conditions: os=win32 & cpu=x64 |
2613 | languageName: node | 2605 | languageName: node |
2614 | linkType: hard | 2606 | linkType: hard |
2615 | 2607 | ||
2616 | "@swc/core@npm:^1.4.8": | 2608 | "@swc/core@npm:^1.4.12": |
2617 | version: 1.4.8 | 2609 | version: 1.4.12 |
2618 | resolution: "@swc/core@npm:1.4.8" | 2610 | resolution: "@swc/core@npm:1.4.12" |
2619 | dependencies: | 2611 | dependencies: |
2620 | "@swc/core-darwin-arm64": "npm:1.4.8" | 2612 | "@swc/core-darwin-arm64": "npm:1.4.12" |
2621 | "@swc/core-darwin-x64": "npm:1.4.8" | 2613 | "@swc/core-darwin-x64": "npm:1.4.12" |
2622 | "@swc/core-linux-arm-gnueabihf": "npm:1.4.8" | 2614 | "@swc/core-linux-arm-gnueabihf": "npm:1.4.12" |
2623 | "@swc/core-linux-arm64-gnu": "npm:1.4.8" | 2615 | "@swc/core-linux-arm64-gnu": "npm:1.4.12" |
2624 | "@swc/core-linux-arm64-musl": "npm:1.4.8" | 2616 | "@swc/core-linux-arm64-musl": "npm:1.4.12" |
2625 | "@swc/core-linux-x64-gnu": "npm:1.4.8" | 2617 | "@swc/core-linux-x64-gnu": "npm:1.4.12" |
2626 | "@swc/core-linux-x64-musl": "npm:1.4.8" | 2618 | "@swc/core-linux-x64-musl": "npm:1.4.12" |
2627 | "@swc/core-win32-arm64-msvc": "npm:1.4.8" | 2619 | "@swc/core-win32-arm64-msvc": "npm:1.4.12" |
2628 | "@swc/core-win32-ia32-msvc": "npm:1.4.8" | 2620 | "@swc/core-win32-ia32-msvc": "npm:1.4.12" |
2629 | "@swc/core-win32-x64-msvc": "npm:1.4.8" | 2621 | "@swc/core-win32-x64-msvc": "npm:1.4.12" |
2630 | "@swc/counter": "npm:^0.1.2" | 2622 | "@swc/counter": "npm:^0.1.2" |
2631 | "@swc/types": "npm:^0.1.5" | 2623 | "@swc/types": "npm:^0.1.5" |
2632 | peerDependencies: | 2624 | peerDependencies: |
@@ -2655,7 +2647,7 @@ __metadata: | |||
2655 | peerDependenciesMeta: | 2647 | peerDependenciesMeta: |
2656 | "@swc/helpers": | 2648 | "@swc/helpers": |
2657 | optional: true | 2649 | optional: true |
2658 | checksum: 10c0/da9079e66d7de696bef2445ba5ba20c7be80b9132f56b7912f2359edab3caa02d334204e4663458771b1995e5556c0629de9427b55587cbac27de6b259c61932 | 2650 | checksum: 10c0/e1517e3fa3f4ef25120785f393c73b43c97d4335f588f55d7bc43d42b9832ed6cd50be4b0cb17721cf56701cb9960fb1dabcaebac3fb10e2e1165049a12326b9 |
2659 | languageName: node | 2651 | languageName: node |
2660 | linkType: hard | 2652 | linkType: hard |
2661 | 2653 | ||
@@ -2931,6 +2923,13 @@ __metadata: | |||
2931 | languageName: node | 2923 | languageName: node |
2932 | linkType: hard | 2924 | linkType: hard |
2933 | 2925 | ||
2926 | "@types/katex@npm:^0.16.0, @types/katex@npm:^0.16.7": | ||
2927 | version: 0.16.7 | ||
2928 | resolution: "@types/katex@npm:0.16.7" | ||
2929 | checksum: 10c0/68dcb9f68a90513ec78ca0196a142e15c2a2c270b1520d752bafd47a99207115085a64087b50140359017d7e9c870b3c68e7e4d36668c9e348a9ef0c48919b5a | ||
2930 | languageName: node | ||
2931 | linkType: hard | ||
2932 | |||
2934 | "@types/mdast@npm:^4.0.0": | 2933 | "@types/mdast@npm:^4.0.0": |
2935 | version: 4.0.2 | 2934 | version: 4.0.2 |
2936 | resolution: "@types/mdast@npm:4.0.2" | 2935 | resolution: "@types/mdast@npm:4.0.2" |
@@ -2977,12 +2976,12 @@ __metadata: | |||
2977 | languageName: node | 2976 | languageName: node |
2978 | linkType: hard | 2977 | linkType: hard |
2979 | 2978 | ||
2980 | "@types/node@npm:*, @types/node@npm:^20.11.30": | 2979 | "@types/node@npm:*, @types/node@npm:^20.12.4": |
2981 | version: 20.11.30 | 2980 | version: 20.12.4 |
2982 | resolution: "@types/node@npm:20.11.30" | 2981 | resolution: "@types/node@npm:20.12.4" |
2983 | dependencies: | 2982 | dependencies: |
2984 | undici-types: "npm:~5.26.4" | 2983 | undici-types: "npm:~5.26.4" |
2985 | checksum: 10c0/867cfaf969c6d8850d8d7304e7ab739898a50ecb1395b61ff2335644f5f48d7a46fbc4a14cee967aed65ec134b61a746edae70d1f32f11321ccf29165e3bc4e6 | 2984 | checksum: 10c0/9b142fcd839a48c348d6b9acfc753dfa4b3fb1f3e23ed67e8952bee9b2dfdaffdddfbcf0e4701557b88631591a5f9968433910027532ef847759f8682e27ffe7 |
2986 | languageName: node | 2985 | languageName: node |
2987 | linkType: hard | 2986 | linkType: hard |
2988 | 2987 | ||
@@ -3069,14 +3068,13 @@ __metadata: | |||
3069 | languageName: node | 3068 | languageName: node |
3070 | linkType: hard | 3069 | linkType: hard |
3071 | 3070 | ||
3072 | "@types/react@npm:*, @types/react@npm:^18.2.69": | 3071 | "@types/react@npm:*, @types/react@npm:^18.2.74": |
3073 | version: 18.2.69 | 3072 | version: 18.2.74 |
3074 | resolution: "@types/react@npm:18.2.69" | 3073 | resolution: "@types/react@npm:18.2.74" |
3075 | dependencies: | 3074 | dependencies: |
3076 | "@types/prop-types": "npm:*" | 3075 | "@types/prop-types": "npm:*" |
3077 | "@types/scheduler": "npm:*" | ||
3078 | csstype: "npm:^3.0.2" | 3076 | csstype: "npm:^3.0.2" |
3079 | checksum: 10c0/239b947ed8576a271057a6f571d0967098074b101a2bece244e88093dc8fb2f020872c463b8e78b2049334ba99158f6eef5960e51f73a389f86eee39b835d846 | 3077 | checksum: 10c0/347e38b4c5dc20d50ff71bf04b7caaef490e5ff695e74a0088a13fbb2a0c5d125a5ecfd142adfa30f0176da0e2734942c91ba61d95ce269c43b3265bd7379361 |
3080 | languageName: node | 3078 | languageName: node |
3081 | linkType: hard | 3079 | linkType: hard |
3082 | 3080 | ||
@@ -3096,13 +3094,6 @@ __metadata: | |||
3096 | languageName: node | 3094 | languageName: node |
3097 | linkType: hard | 3095 | linkType: hard |
3098 | 3096 | ||
3099 | "@types/scheduler@npm:*": | ||
3100 | version: 0.16.5 | ||
3101 | resolution: "@types/scheduler@npm:0.16.5" | ||
3102 | checksum: 10c0/625b63cd5dcaf6fb88fe03aa7c797f28cb121f03584126d4811b2d03f39bc3e238ce52cf7685ad8adfe8445d679934e6be47347723a6771ca2058c01f0c33760 | ||
3103 | languageName: node | ||
3104 | linkType: hard | ||
3105 | |||
3106 | "@types/send@npm:*": | 3097 | "@types/send@npm:*": |
3107 | version: 0.17.3 | 3098 | version: 0.17.3 |
3108 | resolution: "@types/send@npm:0.17.3" | 3099 | resolution: "@types/send@npm:0.17.3" |
@@ -3990,9 +3981,9 @@ __metadata: | |||
3990 | linkType: hard | 3981 | linkType: hard |
3991 | 3982 | ||
3992 | "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001565": | 3983 | "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001565": |
3993 | version: 1.0.30001599 | 3984 | version: 1.0.30001605 |
3994 | resolution: "caniuse-lite@npm:1.0.30001599" | 3985 | resolution: "caniuse-lite@npm:1.0.30001605" |
3995 | checksum: 10c0/8b3b9610b5be88533a3c8d0770d6896f7b1a9fee3dbeb7339e4ee119a514c81e5e07a628a5a289a6541ca291ac78a9402f5a99cf6012139e91f379083488a8eb | 3986 | checksum: 10c0/ceb96a0ecfdaee6510c00aebaaa63db20aaeafab03450d4e3b214e009cb632f87385a70c299cdd1ca4c17e1473883d8fa2051c5b2d083a454338c0c779b25cbc |
3996 | languageName: node | 3987 | languageName: node |
3997 | linkType: hard | 3988 | linkType: hard |
3998 | 3989 | ||
@@ -6176,6 +6167,43 @@ __metadata: | |||
6176 | languageName: node | 6167 | languageName: node |
6177 | linkType: hard | 6168 | linkType: hard |
6178 | 6169 | ||
6170 | "hast-util-from-dom@npm:^5.0.0": | ||
6171 | version: 5.0.0 | ||
6172 | resolution: "hast-util-from-dom@npm:5.0.0" | ||
6173 | dependencies: | ||
6174 | "@types/hast": "npm:^3.0.0" | ||
6175 | hastscript: "npm:^8.0.0" | ||
6176 | web-namespaces: "npm:^2.0.0" | ||
6177 | checksum: 10c0/1b0a9d65eb8f8cd3616559190bb6db271b7b4f72a13c5dc16abac264b6f7145beb408fbaa497d1b5c725d55392b951972d8313802bfe90ccac33f888ec34c63c | ||
6178 | languageName: node | ||
6179 | linkType: hard | ||
6180 | |||
6181 | "hast-util-from-html-isomorphic@npm:^2.0.0": | ||
6182 | version: 2.0.0 | ||
6183 | resolution: "hast-util-from-html-isomorphic@npm:2.0.0" | ||
6184 | dependencies: | ||
6185 | "@types/hast": "npm:^3.0.0" | ||
6186 | hast-util-from-dom: "npm:^5.0.0" | ||
6187 | hast-util-from-html: "npm:^2.0.0" | ||
6188 | unist-util-remove-position: "npm:^5.0.0" | ||
6189 | checksum: 10c0/fc68d9245e794483a802d5c85a9f6c25959e00db78cc796411efc965134f3206f9cc9fa38134572ea781ad74663e801f1f83202007b208e27a770855566a62b6 | ||
6190 | languageName: node | ||
6191 | linkType: hard | ||
6192 | |||
6193 | "hast-util-from-html@npm:^2.0.0": | ||
6194 | version: 2.0.1 | ||
6195 | resolution: "hast-util-from-html@npm:2.0.1" | ||
6196 | dependencies: | ||
6197 | "@types/hast": "npm:^3.0.0" | ||
6198 | devlop: "npm:^1.1.0" | ||
6199 | hast-util-from-parse5: "npm:^8.0.0" | ||
6200 | parse5: "npm:^7.0.0" | ||
6201 | vfile: "npm:^6.0.0" | ||
6202 | vfile-message: "npm:^4.0.0" | ||
6203 | checksum: 10c0/856ceec209940ac4f9db52bf6338b97fb11f27e6d5b930f89676bc16ee282c06f9ff2a17254280803aefdf740507cf3004f181d0286b04dda11907852decbe77 | ||
6204 | languageName: node | ||
6205 | linkType: hard | ||
6206 | |||
6179 | "hast-util-from-parse5@npm:^8.0.0": | 6207 | "hast-util-from-parse5@npm:^8.0.0": |
6180 | version: 8.0.1 | 6208 | version: 8.0.1 |
6181 | resolution: "hast-util-from-parse5@npm:8.0.1" | 6209 | resolution: "hast-util-from-parse5@npm:8.0.1" |
@@ -6192,6 +6220,15 @@ __metadata: | |||
6192 | languageName: node | 6220 | languageName: node |
6193 | linkType: hard | 6221 | linkType: hard |
6194 | 6222 | ||
6223 | "hast-util-is-element@npm:^3.0.0": | ||
6224 | version: 3.0.0 | ||
6225 | resolution: "hast-util-is-element@npm:3.0.0" | ||
6226 | dependencies: | ||
6227 | "@types/hast": "npm:^3.0.0" | ||
6228 | checksum: 10c0/f5361e4c9859c587ca8eb0d8343492f3077ccaa0f58a44cd09f35d5038f94d65152288dcd0c19336ef2c9491ec4d4e45fde2176b05293437021570aa0bc3613b | ||
6229 | languageName: node | ||
6230 | linkType: hard | ||
6231 | |||
6195 | "hast-util-parse-selector@npm:^4.0.0": | 6232 | "hast-util-parse-selector@npm:^4.0.0": |
6196 | version: 4.0.0 | 6233 | version: 4.0.0 |
6197 | resolution: "hast-util-parse-selector@npm:4.0.0" | 6234 | resolution: "hast-util-parse-selector@npm:4.0.0" |
@@ -6278,6 +6315,18 @@ __metadata: | |||
6278 | languageName: node | 6315 | languageName: node |
6279 | linkType: hard | 6316 | linkType: hard |
6280 | 6317 | ||
6318 | "hast-util-to-text@npm:^4.0.0": | ||
6319 | version: 4.0.0 | ||
6320 | resolution: "hast-util-to-text@npm:4.0.0" | ||
6321 | dependencies: | ||
6322 | "@types/hast": "npm:^3.0.0" | ||
6323 | "@types/unist": "npm:^3.0.0" | ||
6324 | hast-util-is-element: "npm:^3.0.0" | ||
6325 | unist-util-find-after: "npm:^5.0.0" | ||
6326 | checksum: 10c0/868f6b871b12db496e49f07470b87415ef77a3b439d4fce007a1e42c438f8320d76c5231b37e54f4188bce2af1e24c76728d86ee4cf076245ec86d3b6820dbe2 | ||
6327 | languageName: node | ||
6328 | linkType: hard | ||
6329 | |||
6281 | "hast-util-whitespace@npm:^3.0.0": | 6330 | "hast-util-whitespace@npm:^3.0.0": |
6282 | version: 3.0.0 | 6331 | version: 3.0.0 |
6283 | resolution: "hast-util-whitespace@npm:3.0.0" | 6332 | resolution: "hast-util-whitespace@npm:3.0.0" |
@@ -7192,6 +7241,17 @@ __metadata: | |||
7192 | languageName: node | 7241 | languageName: node |
7193 | linkType: hard | 7242 | linkType: hard |
7194 | 7243 | ||
7244 | "katex@npm:^0.16.0, katex@npm:^0.16.10": | ||
7245 | version: 0.16.10 | ||
7246 | resolution: "katex@npm:0.16.10" | ||
7247 | dependencies: | ||
7248 | commander: "npm:^8.3.0" | ||
7249 | bin: | ||
7250 | katex: cli.js | ||
7251 | checksum: 10c0/b465213157e5245bbb31ff6563c33ae81807c06d6f2246325b3a2397497e8929a34eebbb262f5e0991ec00fbc0cc85f388246e6dfc38ec86c28d3e481cb70afa | ||
7252 | languageName: node | ||
7253 | linkType: hard | ||
7254 | |||
7195 | "keyv@npm:^4.5.3": | 7255 | "keyv@npm:^4.5.3": |
7196 | version: 4.5.4 | 7256 | version: 4.5.4 |
7197 | resolution: "keyv@npm:4.5.4" | 7257 | resolution: "keyv@npm:4.5.4" |
@@ -7496,36 +7556,41 @@ __metadata: | |||
7496 | version: 0.0.0-use.local | 7556 | version: 0.0.0-use.local |
7497 | resolution: "marussy.com@workspace:." | 7557 | resolution: "marussy.com@workspace:." |
7498 | dependencies: | 7558 | dependencies: |
7499 | "@docusaurus/core": "npm:^3.1.1" | 7559 | "@docusaurus/core": "npm:^3.2.1" |
7500 | "@docusaurus/module-type-aliases": "npm:^3.1.1" | 7560 | "@docusaurus/module-type-aliases": "npm:^3.2.1" |
7501 | "@docusaurus/plugin-content-blog": "npm:^3.1.1" | 7561 | "@docusaurus/plugin-content-blog": "npm:^3.2.1" |
7502 | "@docusaurus/plugin-content-pages": "npm:^3.1.1" | 7562 | "@docusaurus/plugin-content-pages": "npm:^3.2.1" |
7503 | "@docusaurus/plugin-sitemap": "npm:^3.1.1" | 7563 | "@docusaurus/plugin-sitemap": "npm:^3.2.1" |
7504 | "@docusaurus/theme-classic": "npm:^3.1.1" | 7564 | "@docusaurus/theme-classic": "npm:^3.2.1" |
7505 | "@docusaurus/theme-common": "npm:^3.1.1" | 7565 | "@docusaurus/theme-common": "npm:^3.2.1" |
7506 | "@docusaurus/tsconfig": "npm:^3.1.1" | 7566 | "@docusaurus/tsconfig": "npm:^3.2.1" |
7507 | "@docusaurus/types": "npm:^3.1.1" | 7567 | "@docusaurus/types": "npm:^3.2.1" |
7508 | "@docusaurus/utils": "npm:^3.1.1" | 7568 | "@docusaurus/utils": "npm:^3.2.1" |
7509 | "@mdx-js/react": "npm:^3.0.1" | 7569 | "@mdx-js/react": "npm:^3.0.1" |
7510 | "@phosphor-icons/react": "npm:2.0.15" | 7570 | "@phosphor-icons/react": "npm:2.1.4" |
7511 | "@swc/core": "npm:^1.4.8" | 7571 | "@swc/core": "npm:^1.4.12" |
7512 | "@types/babel__core": "npm:^7.20.5" | 7572 | "@types/babel__core": "npm:^7.20.5" |
7513 | "@types/node": "npm:^20.11.30" | 7573 | "@types/katex": "npm:^0.16.7" |
7514 | "@types/react": "npm:^18.2.69" | 7574 | "@types/node": "npm:^20.12.4" |
7575 | "@types/react": "npm:^18.2.74" | ||
7515 | clsx: "npm:^2.1.0" | 7576 | clsx: "npm:^2.1.0" |
7516 | compression-webpack-plugin: "npm:^11.1.0" | 7577 | compression-webpack-plugin: "npm:^11.1.0" |
7517 | cross-env: "npm:^7.0.3" | 7578 | cross-env: "npm:^7.0.3" |
7579 | katex: "npm:^0.16.10" | ||
7518 | prettier: "npm:^3.2.5" | 7580 | prettier: "npm:^3.2.5" |
7581 | prism-react-renderer: "npm:^2.3.1" | ||
7519 | prop-types: "npm:^15.8.1" | 7582 | prop-types: "npm:^15.8.1" |
7520 | react: "npm:^18.2.0" | 7583 | react: "npm:^18.2.0" |
7521 | react-dom: "npm:^18.2.0" | 7584 | react-dom: "npm:^18.2.0" |
7585 | rehype-katex: "npm:^7.0.0" | ||
7586 | remark-math: "npm:^6.0.0" | ||
7522 | remark-smartypants: "npm:^2.1.0" | 7587 | remark-smartypants: "npm:^2.1.0" |
7523 | responsive-loader: "npm:^3.1.2" | 7588 | responsive-loader: "npm:^3.1.2" |
7524 | sharp: "npm:^0.33.3" | 7589 | sharp: "npm:^0.33.3" |
7525 | simple-icons: "npm:^11.9.0" | 7590 | simple-icons: "npm:^11.11.0" |
7526 | swc-loader: "npm:^0.2.6" | 7591 | swc-loader: "npm:^0.2.6" |
7527 | terser-webpack-plugin: "npm:^5.3.10" | 7592 | terser-webpack-plugin: "npm:^5.3.10" |
7528 | typescript: "npm:^5.4.3" | 7593 | typescript: "npm:^5.4.4" |
7529 | webpack: "npm:^5.91.0" | 7594 | webpack: "npm:^5.91.0" |
7530 | languageName: unknown | 7595 | languageName: unknown |
7531 | linkType: soft | 7596 | linkType: soft |
@@ -7669,6 +7734,21 @@ __metadata: | |||
7669 | languageName: node | 7734 | languageName: node |
7670 | linkType: hard | 7735 | linkType: hard |
7671 | 7736 | ||
7737 | "mdast-util-math@npm:^3.0.0": | ||
7738 | version: 3.0.0 | ||
7739 | resolution: "mdast-util-math@npm:3.0.0" | ||
7740 | dependencies: | ||
7741 | "@types/hast": "npm:^3.0.0" | ||
7742 | "@types/mdast": "npm:^4.0.0" | ||
7743 | devlop: "npm:^1.0.0" | ||
7744 | longest-streak: "npm:^3.0.0" | ||
7745 | mdast-util-from-markdown: "npm:^2.0.0" | ||
7746 | mdast-util-to-markdown: "npm:^2.1.0" | ||
7747 | unist-util-remove-position: "npm:^5.0.0" | ||
7748 | checksum: 10c0/d4e839e38719f26872ed78aac18339805a892f1b56585a9cb8668f34e221b4f0660b9dfe49ec96dbbe79fd1b63b648608a64046d8286bcd2f9d576e80b48a0a1 | ||
7749 | languageName: node | ||
7750 | linkType: hard | ||
7751 | |||
7672 | "mdast-util-mdx-expression@npm:^2.0.0": | 7752 | "mdast-util-mdx-expression@npm:^2.0.0": |
7673 | version: 2.0.0 | 7753 | version: 2.0.0 |
7674 | resolution: "mdast-util-mdx-expression@npm:2.0.0" | 7754 | resolution: "mdast-util-mdx-expression@npm:2.0.0" |
@@ -7757,7 +7837,7 @@ __metadata: | |||
7757 | languageName: node | 7837 | languageName: node |
7758 | linkType: hard | 7838 | linkType: hard |
7759 | 7839 | ||
7760 | "mdast-util-to-markdown@npm:^2.0.0": | 7840 | "mdast-util-to-markdown@npm:^2.0.0, mdast-util-to-markdown@npm:^2.1.0": |
7761 | version: 2.1.0 | 7841 | version: 2.1.0 |
7762 | resolution: "mdast-util-to-markdown@npm:2.1.0" | 7842 | resolution: "mdast-util-to-markdown@npm:2.1.0" |
7763 | dependencies: | 7843 | dependencies: |
@@ -7977,6 +8057,21 @@ __metadata: | |||
7977 | languageName: node | 8057 | languageName: node |
7978 | linkType: hard | 8058 | linkType: hard |
7979 | 8059 | ||
8060 | "micromark-extension-math@npm:^3.0.0": | ||
8061 | version: 3.0.0 | ||
8062 | resolution: "micromark-extension-math@npm:3.0.0" | ||
8063 | dependencies: | ||
8064 | "@types/katex": "npm:^0.16.0" | ||
8065 | devlop: "npm:^1.0.0" | ||
8066 | katex: "npm:^0.16.0" | ||
8067 | micromark-factory-space: "npm:^2.0.0" | ||
8068 | micromark-util-character: "npm:^2.0.0" | ||
8069 | micromark-util-symbol: "npm:^2.0.0" | ||
8070 | micromark-util-types: "npm:^2.0.0" | ||
8071 | checksum: 10c0/2f0d11d2860e0f062a89c959b07fd36fed91dfd67684ae667c4eb70c7ac4a35aadb183d22e855c959ef1dc9036fd9d42d575658bacbfd5f48cdfa4cc568444ea | ||
8072 | languageName: node | ||
8073 | linkType: hard | ||
8074 | |||
7980 | "micromark-extension-mdx-expression@npm:^3.0.0": | 8075 | "micromark-extension-mdx-expression@npm:^3.0.0": |
7981 | version: 3.0.0 | 8076 | version: 3.0.0 |
7982 | resolution: "micromark-extension-mdx-expression@npm:3.0.0" | 8077 | resolution: "micromark-extension-mdx-expression@npm:3.0.0" |
@@ -9659,7 +9754,7 @@ __metadata: | |||
9659 | languageName: node | 9754 | languageName: node |
9660 | linkType: hard | 9755 | linkType: hard |
9661 | 9756 | ||
9662 | "prism-react-renderer@npm:^2.3.0": | 9757 | "prism-react-renderer@npm:^2.3.0, prism-react-renderer@npm:^2.3.1": |
9663 | version: 2.3.1 | 9758 | version: 2.3.1 |
9664 | resolution: "prism-react-renderer@npm:2.3.1" | 9759 | resolution: "prism-react-renderer@npm:2.3.1" |
9665 | dependencies: | 9760 | dependencies: |
@@ -10129,6 +10224,21 @@ __metadata: | |||
10129 | languageName: node | 10224 | languageName: node |
10130 | linkType: hard | 10225 | linkType: hard |
10131 | 10226 | ||
10227 | "rehype-katex@npm:^7.0.0": | ||
10228 | version: 7.0.0 | ||
10229 | resolution: "rehype-katex@npm:7.0.0" | ||
10230 | dependencies: | ||
10231 | "@types/hast": "npm:^3.0.0" | ||
10232 | "@types/katex": "npm:^0.16.0" | ||
10233 | hast-util-from-html-isomorphic: "npm:^2.0.0" | ||
10234 | hast-util-to-text: "npm:^4.0.0" | ||
10235 | katex: "npm:^0.16.0" | ||
10236 | unist-util-visit-parents: "npm:^6.0.0" | ||
10237 | vfile: "npm:^6.0.0" | ||
10238 | checksum: 10c0/4986d5db673576df0274464eafecef7c999fb72bf16e8df92454c68bf063b005010ab5465c64dacfbc1767ed6446dd03768917df7b9983f5e60711bce78b9880 | ||
10239 | languageName: node | ||
10240 | linkType: hard | ||
10241 | |||
10132 | "rehype-raw@npm:^7.0.0": | 10242 | "rehype-raw@npm:^7.0.0": |
10133 | version: 7.0.0 | 10243 | version: 7.0.0 |
10134 | resolution: "rehype-raw@npm:7.0.0" | 10244 | resolution: "rehype-raw@npm:7.0.0" |
@@ -10196,6 +10306,18 @@ __metadata: | |||
10196 | languageName: node | 10306 | languageName: node |
10197 | linkType: hard | 10307 | linkType: hard |
10198 | 10308 | ||
10309 | "remark-math@npm:^6.0.0": | ||
10310 | version: 6.0.0 | ||
10311 | resolution: "remark-math@npm:6.0.0" | ||
10312 | dependencies: | ||
10313 | "@types/mdast": "npm:^4.0.0" | ||
10314 | mdast-util-math: "npm:^3.0.0" | ||
10315 | micromark-extension-math: "npm:^3.0.0" | ||
10316 | unified: "npm:^11.0.0" | ||
10317 | checksum: 10c0/859613c4db194bb6b3c9c063661dc52b8ceda9c5cf3256b42f73d93eb8f38a6d634eb5f976fe094425f6f1035aaf329eb49ada314feb3b2b1073326b6d3aaa02 | ||
10318 | languageName: node | ||
10319 | linkType: hard | ||
10320 | |||
10199 | "remark-mdx@npm:^3.0.0": | 10321 | "remark-mdx@npm:^3.0.0": |
10200 | version: 3.0.0 | 10322 | version: 3.0.0 |
10201 | resolution: "remark-mdx@npm:3.0.0" | 10323 | resolution: "remark-mdx@npm:3.0.0" |
@@ -10588,18 +10710,7 @@ __metadata: | |||
10588 | languageName: node | 10710 | languageName: node |
10589 | linkType: hard | 10711 | linkType: hard |
10590 | 10712 | ||
10591 | "semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4": | 10713 | "semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4, semver@npm:^7.6.0": |
10592 | version: 7.5.4 | ||
10593 | resolution: "semver@npm:7.5.4" | ||
10594 | dependencies: | ||
10595 | lru-cache: "npm:^6.0.0" | ||
10596 | bin: | ||
10597 | semver: bin/semver.js | ||
10598 | checksum: 10c0/5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e | ||
10599 | languageName: node | ||
10600 | linkType: hard | ||
10601 | |||
10602 | "semver@npm:^7.6.0": | ||
10603 | version: 7.6.0 | 10714 | version: 7.6.0 |
10604 | resolution: "semver@npm:7.6.0" | 10715 | resolution: "semver@npm:7.6.0" |
10605 | dependencies: | 10716 | dependencies: |
@@ -10862,10 +10973,10 @@ __metadata: | |||
10862 | languageName: node | 10973 | languageName: node |
10863 | linkType: hard | 10974 | linkType: hard |
10864 | 10975 | ||
10865 | "simple-icons@npm:^11.9.0": | 10976 | "simple-icons@npm:^11.11.0": |
10866 | version: 11.9.0 | 10977 | version: 11.11.0 |
10867 | resolution: "simple-icons@npm:11.9.0" | 10978 | resolution: "simple-icons@npm:11.11.0" |
10868 | checksum: 10c0/4d0acbf8b0e2134fd55f363e8c8bfd4339f9c0a5458d1e8d4381f1d8517b48787ba1d257ce968763c8b671f7853b190c248e4612188ec34d169e58a24fc8abd4 | 10979 | checksum: 10c0/e119604ad73640dc10c05a4beba9d100cfe4001d16d608f6ed916c53dea0e10a6940c272178994ff32f56b570d463281d16590fc1a0cce51b3b7f0dc03902c68 |
10869 | languageName: node | 10980 | languageName: node |
10870 | linkType: hard | 10981 | linkType: hard |
10871 | 10982 | ||
@@ -11469,23 +11580,23 @@ __metadata: | |||
11469 | languageName: node | 11580 | languageName: node |
11470 | linkType: hard | 11581 | linkType: hard |
11471 | 11582 | ||
11472 | "typescript@npm:^5.4.3": | 11583 | "typescript@npm:^5.4.4": |
11473 | version: 5.4.3 | 11584 | version: 5.4.4 |
11474 | resolution: "typescript@npm:5.4.3" | 11585 | resolution: "typescript@npm:5.4.4" |
11475 | bin: | 11586 | bin: |
11476 | tsc: bin/tsc | 11587 | tsc: bin/tsc |
11477 | tsserver: bin/tsserver | 11588 | tsserver: bin/tsserver |
11478 | checksum: 10c0/22443a8760c3668e256c0b34b6b45c359ef6cecc10c42558806177a7d500ab1a7d7aac1f976d712e26989ddf6731d2fbdd3212b7c73290a45127c1c43ba2005a | 11589 | checksum: 10c0/4d8de0291204ed61ca97ad0cba2ce064e09c4988ca1c451c787e4653ba76296ba35177a52694e8a00cf4ef899d0ee83338663b926d8b7d55167ff0ba81549999 |
11479 | languageName: node | 11590 | languageName: node |
11480 | linkType: hard | 11591 | linkType: hard |
11481 | 11592 | ||
11482 | "typescript@patch:typescript@npm%3A^5.4.3#optional!builtin<compat/typescript>": | 11593 | "typescript@patch:typescript@npm%3A^5.4.4#optional!builtin<compat/typescript>": |
11483 | version: 5.4.3 | 11594 | version: 5.4.4 |
11484 | resolution: "typescript@patch:typescript@npm%3A5.4.3#optional!builtin<compat/typescript>::version=5.4.3&hash=5adc0c" | 11595 | resolution: "typescript@patch:typescript@npm%3A5.4.4#optional!builtin<compat/typescript>::version=5.4.4&hash=5adc0c" |
11485 | bin: | 11596 | bin: |
11486 | tsc: bin/tsc | 11597 | tsc: bin/tsc |
11487 | tsserver: bin/tsserver | 11598 | tsserver: bin/tsserver |
11488 | checksum: 10c0/6e51f8b7e6ec55b897b9e56b67e864fe8f44e30f4a14357aad5dc0f7432db2f01efc0522df0b6c36d361c51f2dc3dcac5c832efd96a404cfabf884e915d38828 | 11599 | checksum: 10c0/1fa41b9964a9ff0ed913b339c90b46031b2d2da3cb1a192af516610733f7f1d5f7f9754a8e22b9ac7076d3d8aedd2c4f84db3f113bad060eac3a95962443a1bf |
11489 | languageName: node | 11600 | languageName: node |
11490 | linkType: hard | 11601 | linkType: hard |
11491 | 11602 | ||
@@ -11598,6 +11709,16 @@ __metadata: | |||
11598 | languageName: node | 11709 | languageName: node |
11599 | linkType: hard | 11710 | linkType: hard |
11600 | 11711 | ||
11712 | "unist-util-find-after@npm:^5.0.0": | ||
11713 | version: 5.0.0 | ||
11714 | resolution: "unist-util-find-after@npm:5.0.0" | ||
11715 | dependencies: | ||
11716 | "@types/unist": "npm:^3.0.0" | ||
11717 | unist-util-is: "npm:^6.0.0" | ||
11718 | checksum: 10c0/a7cea473c4384df8de867c456b797ff1221b20f822e1af673ff5812ed505358b36f47f3b084ac14c3622cb879ed833b71b288e8aa71025352a2aab4c2925a6eb | ||
11719 | languageName: node | ||
11720 | linkType: hard | ||
11721 | |||
11601 | "unist-util-is@npm:^5.0.0": | 11722 | "unist-util-is@npm:^5.0.0": |
11602 | version: 5.2.1 | 11723 | version: 5.2.1 |
11603 | resolution: "unist-util-is@npm:5.2.1" | 11724 | resolution: "unist-util-is@npm:5.2.1" |
@@ -12029,7 +12150,7 @@ __metadata: | |||
12029 | languageName: node | 12150 | languageName: node |
12030 | linkType: hard | 12151 | linkType: hard |
12031 | 12152 | ||
12032 | "webpack-sources@npm:^3.2.2, webpack-sources@npm:^3.2.3": | 12153 | "webpack-sources@npm:^3.2.3": |
12033 | version: 3.2.3 | 12154 | version: 3.2.3 |
12034 | resolution: "webpack-sources@npm:3.2.3" | 12155 | resolution: "webpack-sources@npm:3.2.3" |
12035 | checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e | 12156 | checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e |