@d1vij/react-mdx-loader 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -11
- package/dist/index.js +259 -1
- package/dist/vitePlugin.d.ts +11 -0
- package/dist/vitePlugin.js +19 -0
- package/package.json +20 -17
package/dist/index.d.ts
CHANGED
|
@@ -10,14 +10,4 @@ type MDXFromComponentProps = {
|
|
|
10
10
|
SourceComponent: MDXSourceComponent;
|
|
11
11
|
};
|
|
12
12
|
declare function MDXFromComponent({ SourceComponent }: MDXFromComponentProps): JSX;
|
|
13
|
-
|
|
14
|
-
import { Plugin } from "vite";
|
|
15
|
-
type MDXLoaderPluginOptions = {
|
|
16
|
-
mdxPluginOptions?: MDXOptions;
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Vite plugin to support MDX conversion.
|
|
20
|
-
* Users wont have to explicitly setup their vite config
|
|
21
|
-
*/
|
|
22
|
-
declare function MDXLoaderPlugin({ mdxPluginOptions }: MDXLoaderPluginOptions): Plugin;
|
|
23
|
-
export { StyleContext, MDXLoaderPlugin, MDXFromComponent, HeaderLevels };
|
|
13
|
+
export { StyleContext, MDXFromComponent, HeaderLevels };
|
package/dist/index.js
CHANGED
|
@@ -1 +1,259 @@
|
|
|
1
|
-
|
|
1
|
+
// src/StyleContext.ts
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
var StyleContext = createContext({});
|
|
4
|
+
function useStyles() {
|
|
5
|
+
return useContext(StyleContext);
|
|
6
|
+
}
|
|
7
|
+
// src/components/Elements/Anchor.tsx
|
|
8
|
+
import { cn } from "@d1vij/shit-i-always-use";
|
|
9
|
+
import { useMemo, useState } from "react";
|
|
10
|
+
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
11
|
+
function Anchor(props) {
|
|
12
|
+
const selfOrigin = useMemo(() => new URL(window.location.href).origin.toString(), []);
|
|
13
|
+
const styles = useStyles();
|
|
14
|
+
const [target] = useState(() => {
|
|
15
|
+
const href = props.href;
|
|
16
|
+
if (href?.match(/^#.*/)) {
|
|
17
|
+
return "_self";
|
|
18
|
+
}
|
|
19
|
+
const targetOrigin = new URL(props.href ?? "").origin.toString();
|
|
20
|
+
return targetOrigin === selfOrigin ? "_self" : "_blank";
|
|
21
|
+
});
|
|
22
|
+
return /* @__PURE__ */ jsxDEV("a", {
|
|
23
|
+
className: cn(styles.anchor),
|
|
24
|
+
target,
|
|
25
|
+
href: props.href,
|
|
26
|
+
children: props.children
|
|
27
|
+
}, undefined, false, undefined, this);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// src/components/Elements/BlockQuote.tsx
|
|
31
|
+
import { cn as cn2 } from "@d1vij/shit-i-always-use";
|
|
32
|
+
import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
|
|
33
|
+
function BlockQuote(props) {
|
|
34
|
+
const styles = useStyles();
|
|
35
|
+
return /* @__PURE__ */ jsxDEV2("blockquote", {
|
|
36
|
+
className: cn2(styles.blockquote),
|
|
37
|
+
children: props.children
|
|
38
|
+
}, undefined, false, undefined, this);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/components/Elements/Bold.tsx
|
|
42
|
+
import { cn as cn3 } from "@d1vij/shit-i-always-use";
|
|
43
|
+
import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
|
|
44
|
+
function Bold(props) {
|
|
45
|
+
const styles = useStyles();
|
|
46
|
+
return /* @__PURE__ */ jsxDEV3("span", {
|
|
47
|
+
className: cn3(styles.bold),
|
|
48
|
+
children: props.children
|
|
49
|
+
}, undefined, false, undefined, this);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// src/components/Elements/Code.tsx
|
|
53
|
+
import { cn as cn4 } from "@d1vij/shit-i-always-use";
|
|
54
|
+
import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
|
|
55
|
+
function Code(props) {
|
|
56
|
+
const styles = useStyles();
|
|
57
|
+
const lang = /language-(\w+)/.exec(props.className || "")?.[1];
|
|
58
|
+
return /* @__PURE__ */ jsxDEV4("code", {
|
|
59
|
+
className: cn4(styles.code, lang && `language-${lang}`),
|
|
60
|
+
children: props.children
|
|
61
|
+
}, undefined, false, undefined, this);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// src/components/Elements/Heading.tsx
|
|
65
|
+
import { cn as cn5, useClipboardText } from "@d1vij/shit-i-always-use";
|
|
66
|
+
import { useEffect, useRef, useState as useState2 } from "react";
|
|
67
|
+
import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
|
|
68
|
+
function Header(props) {
|
|
69
|
+
const styles = useStyles();
|
|
70
|
+
const headerRef = useRef(null);
|
|
71
|
+
const [id, setId] = useState2("");
|
|
72
|
+
const { copy } = useClipboardText();
|
|
73
|
+
async function handleClick() {
|
|
74
|
+
const url = new URL(`/#${id}`, window.location.origin).toString();
|
|
75
|
+
console.log("clicked");
|
|
76
|
+
await copy(url);
|
|
77
|
+
}
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (!headerRef.current)
|
|
80
|
+
return;
|
|
81
|
+
const raw = headerRef.current.textContent ?? "";
|
|
82
|
+
const safe = raw.toLowerCase().replace(/[^a-z0-9\s-]/g, "").trim().replace(/\s+/g, "-").slice(0, 30);
|
|
83
|
+
setId(safe);
|
|
84
|
+
}, []);
|
|
85
|
+
return /* @__PURE__ */ jsxDEV5("h1", {
|
|
86
|
+
className: cn5(styles.header, styles[`header_${props.level}`]),
|
|
87
|
+
children: /* @__PURE__ */ jsxDEV5("button", {
|
|
88
|
+
onClick: () => void handleClick(),
|
|
89
|
+
ref: headerRef,
|
|
90
|
+
id,
|
|
91
|
+
type: "button",
|
|
92
|
+
children: props.children
|
|
93
|
+
}, undefined, false, undefined, this)
|
|
94
|
+
}, undefined, false, undefined, this);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/components/Elements/Image.tsx
|
|
98
|
+
import { cn as cn6 } from "@d1vij/shit-i-always-use";
|
|
99
|
+
import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
|
|
100
|
+
function Image(props) {
|
|
101
|
+
const styles = useStyles();
|
|
102
|
+
return /* @__PURE__ */ jsxDEV6("img", {
|
|
103
|
+
className: cn6(styles.image),
|
|
104
|
+
alt: props.alt,
|
|
105
|
+
title: props.title,
|
|
106
|
+
src: props.src
|
|
107
|
+
}, undefined, false, undefined, this);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// src/components/Elements/Italics.tsx
|
|
111
|
+
import { cn as cn7 } from "@d1vij/shit-i-always-use";
|
|
112
|
+
import { jsxDEV as jsxDEV7 } from "react/jsx-dev-runtime";
|
|
113
|
+
function Italics(props) {
|
|
114
|
+
const styles = useStyles();
|
|
115
|
+
return /* @__PURE__ */ jsxDEV7("span", {
|
|
116
|
+
className: cn7(styles.italic),
|
|
117
|
+
children: props.children
|
|
118
|
+
}, undefined, false, undefined, this);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// src/components/Elements/List.tsx
|
|
122
|
+
import { cn as cn8 } from "@d1vij/shit-i-always-use";
|
|
123
|
+
import { jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
|
|
124
|
+
function List(props) {
|
|
125
|
+
const styles = useStyles();
|
|
126
|
+
const L = props.type === "ordered" ? "ol" : "ul";
|
|
127
|
+
return /* @__PURE__ */ jsxDEV8(L, {
|
|
128
|
+
className: cn8(styles.list, props.type === "ordered" && styles.ordered_list, props.type === "unordered" && styles.unordered_list),
|
|
129
|
+
children: props.children
|
|
130
|
+
}, undefined, false, undefined, this);
|
|
131
|
+
}
|
|
132
|
+
function ListItem(props) {
|
|
133
|
+
const styles = useStyles();
|
|
134
|
+
return /* @__PURE__ */ jsxDEV8("li", {
|
|
135
|
+
className: cn8(styles.list_item),
|
|
136
|
+
children: props.children
|
|
137
|
+
}, undefined, false, undefined, this);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// src/components/Elements/Paragraph.tsx
|
|
141
|
+
import { cn as cn9 } from "@d1vij/shit-i-always-use";
|
|
142
|
+
import { jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
|
|
143
|
+
function Paragraph(props) {
|
|
144
|
+
const styles = useStyles();
|
|
145
|
+
return /* @__PURE__ */ jsxDEV9("p", {
|
|
146
|
+
className: cn9(styles.paragraph),
|
|
147
|
+
children: props.children
|
|
148
|
+
}, undefined, false, undefined, this);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// src/components/Elements/Preformatted.tsx
|
|
152
|
+
import { cn as cn10 } from "@d1vij/shit-i-always-use";
|
|
153
|
+
import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
|
|
154
|
+
function Preformatted(props) {
|
|
155
|
+
const styles = useStyles();
|
|
156
|
+
return /* @__PURE__ */ jsxDEV10("pre", {
|
|
157
|
+
className: cn10(styles.preformatted),
|
|
158
|
+
children: props.children
|
|
159
|
+
}, undefined, false, undefined, this);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// src/components/Elements/Striked.tsx
|
|
163
|
+
import { cn as cn11 } from "@d1vij/shit-i-always-use";
|
|
164
|
+
import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
|
|
165
|
+
function Striked(props) {
|
|
166
|
+
const styles = useStyles();
|
|
167
|
+
return /* @__PURE__ */ jsxDEV11("span", {
|
|
168
|
+
className: cn11(styles.striked),
|
|
169
|
+
children: props.children
|
|
170
|
+
}, undefined, false, undefined, this);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// src/components/Elements/Table.tsx
|
|
174
|
+
import { cn as cn12 } from "@d1vij/shit-i-always-use";
|
|
175
|
+
import { jsxDEV as jsxDEV12 } from "react/jsx-dev-runtime";
|
|
176
|
+
function Table(props) {
|
|
177
|
+
const styles = useStyles();
|
|
178
|
+
return /* @__PURE__ */ jsxDEV12("table", {
|
|
179
|
+
className: cn12(styles.table),
|
|
180
|
+
children: props.children
|
|
181
|
+
}, undefined, false, undefined, this);
|
|
182
|
+
}
|
|
183
|
+
function TableHead(props) {
|
|
184
|
+
const styles = useStyles();
|
|
185
|
+
return /* @__PURE__ */ jsxDEV12("thead", {
|
|
186
|
+
className: cn12(styles.table_head),
|
|
187
|
+
children: props.children
|
|
188
|
+
}, undefined, false, undefined, this);
|
|
189
|
+
}
|
|
190
|
+
function TableBody(props) {
|
|
191
|
+
const styles = useStyles();
|
|
192
|
+
return /* @__PURE__ */ jsxDEV12("tbody", {
|
|
193
|
+
className: cn12(styles.table_body),
|
|
194
|
+
children: props.children
|
|
195
|
+
}, undefined, false, undefined, this);
|
|
196
|
+
}
|
|
197
|
+
function TableRow(props) {
|
|
198
|
+
const styles = useStyles();
|
|
199
|
+
return /* @__PURE__ */ jsxDEV12("tr", {
|
|
200
|
+
className: cn12(styles.table_row),
|
|
201
|
+
children: props.children
|
|
202
|
+
}, undefined, false, undefined, this);
|
|
203
|
+
}
|
|
204
|
+
function TableHeadCell(props) {
|
|
205
|
+
const styles = useStyles();
|
|
206
|
+
return /* @__PURE__ */ jsxDEV12("th", {
|
|
207
|
+
className: cn12(styles.table_head_cell),
|
|
208
|
+
children: props.children
|
|
209
|
+
}, undefined, false, undefined, this);
|
|
210
|
+
}
|
|
211
|
+
function TableData(props) {
|
|
212
|
+
const styles = useStyles();
|
|
213
|
+
return /* @__PURE__ */ jsxDEV12("td", {
|
|
214
|
+
className: cn12(styles.table_data),
|
|
215
|
+
children: props.children
|
|
216
|
+
}, undefined, false, undefined, this);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// src/components/Elements/Elements.tsx
|
|
220
|
+
var Elements = {
|
|
221
|
+
h1: (props) => Header({ ...props, level: 1 }),
|
|
222
|
+
h2: (props) => Header({ ...props, level: 2 }),
|
|
223
|
+
h3: (props) => Header({ ...props, level: 3 }),
|
|
224
|
+
h4: (props) => Header({ ...props, level: 4 }),
|
|
225
|
+
h5: (props) => Header({ ...props, level: 5 }),
|
|
226
|
+
h6: (props) => Header({ ...props, level: 6 }),
|
|
227
|
+
a: Anchor,
|
|
228
|
+
em: Italics,
|
|
229
|
+
del: Striked,
|
|
230
|
+
strong: Bold,
|
|
231
|
+
code: Code,
|
|
232
|
+
blockquote: BlockQuote,
|
|
233
|
+
pre: Preformatted,
|
|
234
|
+
p: Paragraph,
|
|
235
|
+
ol: (props) => List({ ...props, type: "ordered" }),
|
|
236
|
+
ul: (props) => List({ ...props, type: "unordered" }),
|
|
237
|
+
li: ListItem,
|
|
238
|
+
img: Image,
|
|
239
|
+
table: Table,
|
|
240
|
+
thead: TableHead,
|
|
241
|
+
tbody: TableBody,
|
|
242
|
+
th: TableHeadCell,
|
|
243
|
+
tr: TableRow,
|
|
244
|
+
td: TableData
|
|
245
|
+
};
|
|
246
|
+
var Elements_default = Elements;
|
|
247
|
+
// src/components/MDXLoader.tsx
|
|
248
|
+
import { jsxDEV as jsxDEV13 } from "react/jsx-dev-runtime";
|
|
249
|
+
function MDXFromComponent({
|
|
250
|
+
SourceComponent
|
|
251
|
+
}) {
|
|
252
|
+
return /* @__PURE__ */ jsxDEV13(SourceComponent, {
|
|
253
|
+
components: Elements_default
|
|
254
|
+
}, undefined, false, undefined, this);
|
|
255
|
+
}
|
|
256
|
+
export {
|
|
257
|
+
StyleContext,
|
|
258
|
+
MDXFromComponent
|
|
259
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Options as MDXOptions } from "@mdx-js/rollup";
|
|
2
|
+
import { Plugin } from "vite";
|
|
3
|
+
type MDXLoaderPluginOptions = {
|
|
4
|
+
mdxPluginOptions?: MDXOptions;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Vite plugin to support MDX conversion.
|
|
8
|
+
* Users wont have to explicitly setup their vite config
|
|
9
|
+
*/
|
|
10
|
+
declare function MDXLoaderPlugin({ mdxPluginOptions }: MDXLoaderPluginOptions): Plugin;
|
|
11
|
+
export { MDXLoaderPlugin };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/vitePlugin.ts
|
|
2
|
+
import mdx from "@mdx-js/rollup";
|
|
3
|
+
function MDXLoaderPlugin({
|
|
4
|
+
mdxPluginOptions
|
|
5
|
+
}) {
|
|
6
|
+
return {
|
|
7
|
+
name: "react-mdx-loader-plugin",
|
|
8
|
+
enforce: "pre",
|
|
9
|
+
config(c) {
|
|
10
|
+
return {
|
|
11
|
+
...c,
|
|
12
|
+
plugins: [mdx(mdxPluginOptions)]
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
MDXLoaderPlugin
|
|
19
|
+
};
|
package/package.json
CHANGED
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d1vij/react-mdx-loader",
|
|
3
|
+
"description": "Supporting lib to create content driven sites using MDX",
|
|
4
|
+
"version": "0.1.3",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"./plugin": {
|
|
19
|
+
"import": "./dist/plugin.js"
|
|
20
|
+
},
|
|
21
|
+
"./package.json": "./package.json"
|
|
22
|
+
},
|
|
3
23
|
"repository": {
|
|
4
24
|
"type": "git",
|
|
5
25
|
"url": "https://github.com/d1vij/react-mdx-loader"
|
|
6
26
|
},
|
|
7
27
|
"homepage": "https://github.com/d1vij/react-mdx-loader",
|
|
8
|
-
"version": "0.1.1",
|
|
9
|
-
"description": "Supporting lib to create content driven sites using MDX",
|
|
10
28
|
"license": "MIT",
|
|
11
|
-
"files": [
|
|
12
|
-
"dist"
|
|
13
|
-
],
|
|
14
29
|
"sideEffects": false,
|
|
15
30
|
"publishConfig": {
|
|
16
31
|
"access": "public"
|
|
@@ -49,18 +64,6 @@
|
|
|
49
64
|
"optional": true
|
|
50
65
|
}
|
|
51
66
|
},
|
|
52
|
-
"type": "module",
|
|
53
|
-
"exports": {
|
|
54
|
-
".": {
|
|
55
|
-
"import": {
|
|
56
|
-
"types": "./dist/index.d.ts",
|
|
57
|
-
"default": "./dist/index.js"
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
"./package.json": "./package.json"
|
|
61
|
-
},
|
|
62
|
-
"module": "./dist/index.js",
|
|
63
|
-
"types": "./dist/index.d.ts",
|
|
64
67
|
"dependencies": {
|
|
65
68
|
"@d1vij/shit-i-always-use": "^0.1.3"
|
|
66
69
|
},
|