|
1 | | -import { createComponent, createContext, JSX, mergeProps, ParentProps, useContext } from 'solid-js'; |
| 1 | +import { |
| 2 | + createComponent, |
| 3 | + createContext, |
| 4 | + JSX, |
| 5 | + JSXElement, |
| 6 | + mergeProps, |
| 7 | + ParentProps, |
| 8 | + useContext, |
| 9 | +} from 'solid-js'; |
2 | 10 | import { Dynamic } from 'solid-js/web'; |
3 | 11 | import { isFirstLetterCapital, isSVGElement, normalizeKeySvg } from 'utilities'; |
4 | 12 |
|
5 | | -export const MDXContext = createContext({}); |
| 13 | +export const MDXContext = createContext<Record<string, (properties_: unknown) => JSX.Element>>( |
| 14 | + Object.create(null) as Record<string, (properties_: unknown) => JSX.Element>, |
| 15 | +); |
6 | 16 |
|
7 | 17 | export const MDXProvider = ( |
8 | 18 | properties: ParentProps<{ |
9 | | - components: Record<string, (properties_: ParentProps) => JSX.Element>; |
| 19 | + components: Record<string, (properties_: unknown) => JSX.Element>; |
10 | 20 | }>, |
11 | | -): JSX.Element => |
12 | | - createComponent(MDXContext.Provider, { |
13 | | - value: { |
14 | | - ...useContext(MDXContext), |
15 | | - ...properties.components, |
| 21 | +): JSXElement => { |
| 22 | + const context = useContext(MDXContext); |
| 23 | + return createComponent(MDXContext.Provider, { |
| 24 | + get value() { |
| 25 | + return { |
| 26 | + ...context, |
| 27 | + ...properties.components, |
| 28 | + }; |
| 29 | + }, |
| 30 | + get children() { |
| 31 | + return properties.children; |
16 | 32 | }, |
17 | | - children: properties.children, |
18 | 33 | }); |
| 34 | +}; |
19 | 35 |
|
20 | | -export const useMDXComponents = (): Record<string, (properties: ParentProps) => JSX.Element> => |
21 | | - useContext(MDXContext); |
| 36 | +export const useMDXComponents = ( |
| 37 | + components: Record<string, (properties_: unknown) => JSX.Element>, |
| 38 | +): Record<string, (properties_: unknown) => JSX.Element> => { |
| 39 | + const contextComponents = useContext(MDXContext); |
| 40 | + return { ...contextComponents, ...components }; |
| 41 | +}; |
22 | 42 |
|
23 | 43 | const REPLACED_COMPAT_SET = new Set(['mjx']); |
24 | 44 | const compatRegExp = new RegExp(`(?:${[...REPLACED_COMPAT_SET].join('|')})-.+`, 'g'); |
|
0 commit comments