@ox-content/vite-plugin 2.87.0 → 2.89.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-html.d.mts","names":[],"sources":["../src/jsx.d.ts","../src/jsx-html.ts"],"mappings":";kBAQiB;;;;cAIH,UAAU;;;;;;;mBAQL;IACf;;;;;mBAMe;;IAEf,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;;IAGP,MAAM;IACN,SAAS;IACT,SAAS;IACT,KAAK;IACL,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;;IAGT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;;IAGR,GAAG;IACH,IAAI;IACJ,KAAK;IACL,YAAY;IACZ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,YAAY;IACZ,KAAK;;IAGL,GAAG;IACH,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,GAAG;IACH,MAAM;IACN,GAAG;IACH,KAAK;IACL,MAAM;IACN,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,GAAG;IACH,GAAG;IACH,GAAG;IACH,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,IAAI;IACJ,KAAK;;IAGL,KAAK;IACL,KAAK;;IAGL,SAAS;IACT,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;;IAGN,KAAK;IACL,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,SAAS;IACT,UAAU;IACV,MAAM;IACN,GAAG;IACH,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IAChB,MAAM;IACN,QAAQ;IACR,SAAS;IACT,eAAe;IACf,qBAAqB;IACrB,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,SAAS;IACT,gBAAgB;IAChB,SAAS;IACT,SAAS;IACT,aAAa;IACb,cAAc;IACd,UAAU;IACV,oBAAoB;IACpB,QAAQ;IACR,cAAc;;IAGd,OAAO;IACP,SAAS;IACT,UAAU;IACV,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;;IAGJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,UAAU;IACV,QAAQ;;IAGR,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;;IAGN,QAAQ;IACR,UAAU;IACV,UAAU;IACV,MAAM;IACN,QAAQ;;;;;mBAMO;;;;;;;IAOf;;IAGA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,iBAAiB;IACjB;IACA;IACA;;KAGC;;IAGD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAWA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAGA,WAAW;;;mBAII,2BAA2B;IAC1C;;mBAGe,2BAA2B;IAC1C;IACA;;mBAGe,2BAA2B;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,2BAA2B;IAC1C;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;IACA;IACA;;mBAGe,iCAAiC;IAChD;;mBAGe,yBAAyB;IACxC;IACA;IACA;;mBAGe,yBAAyB;IACxC;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;;mBAGe,2BAA2B;IAC1C;;mBAGe,2BAA2B;IAC1C;;mBAGe,0BAA0B;IACzC;IACA;;mBAGe,0BAA0B;IACzC;IACA;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;IACA;;mBAGe,0BAA0B;IACzC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;IACA;IACA;IACA;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;IACA;;mBAGe,4BAA4B;IAC3C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;IACA;IACA;IACA;IACA;;mBAGe,0BAA0B;IACzC;;mBAGe,2BAA2B;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;IACA;;mBAGe,+BAA+B;IAC9C;;mBAGe,0BAA0B;IACzC;;mBAGe,yBAAyB;IACxC;IACA;IACA;;mBAGe,yBAAyB;IACxC;IACA;IACA;IACA;IACA;;mBAGe,2BAA2B;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,4BAA4B;IAC3C;IACA;;mBAGe,4BAA4B;IAC3C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,+BAA+B;IAC9C;IACA;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;;mBAGe,+BAA+B;IAC9C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,6BAA6B;IAC5C;IACA;IACA;;mBAGe,+BAA+B;IAC9C;IACA;;mBAGe,4BAA4B;IAC3C;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,+BAA+B;IAC9C;IACA;IACA;;mBAGe,8BAA8B;IAC7C;;mBAGe,6BAA6B;IAC5C;;mBAGe,2BAA2B;IAC1C;;mBAGe,6BAA6B;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;mBAGe,2BAA2B;IAC1C;;mBAGe,6BAA6B;IAC5C;IACA;;mBAGe,sBAAsB;;IAErC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;;;cAMU,6BAA6B;;;;cAK7B,sBAAsB,UAAU,wBAAwB,kBAAkB;;KAGnF,8BAAA,IAAuD;KACvD,gCAAA,IAAyD;QAEtD;YACI;SACH,UAA+B;cAC1B,0BAA0B;cAC1B,4BAA4B;;;;;;;;KCplB9B,4BAA4B,OAAO,4BAA4B;;;;KAK/D,0DAA0D,UAAU;;;;UAK/D;EACf;;;;;UAMe;EACf,WAAW;GACV;;;;;;iBAsCa,IAAI,MAAM,gBAAgB,OAAO,UAAU,gBAAgB;;;;;iBAyC3D,KAAK,MAAM,gBAAgB,OAAO,UAAU,eAAe;;;;iBAO3D,WAAW;EAAc,WAAW;IAAa;;;;iBAOjD,eAAe,MAAM;;;;;;;;;;iBAarB,IAAI,eAAe;;;;;;;;;iBAYnB,KAAK,oBAAoB,SAAS,UAAU;;;;;;;;;iBAY5C,KAAK,GAAG,OAAO,KAAK,SAAS,MAAM,GAAG,kBAAkB,UAAU"}
@@ -0,0 +1,166 @@
1
+ //#region src/jsx-html.ts
2
+ const VOID_ELEMENTS = /* @__PURE__ */ new Set([
3
+ "area",
4
+ "base",
5
+ "br",
6
+ "col",
7
+ "embed",
8
+ "hr",
9
+ "img",
10
+ "input",
11
+ "link",
12
+ "meta",
13
+ "param",
14
+ "source",
15
+ "track",
16
+ "wbr"
17
+ ]);
18
+ const BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
19
+ "allowfullscreen",
20
+ "async",
21
+ "autofocus",
22
+ "autoplay",
23
+ "checked",
24
+ "controls",
25
+ "default",
26
+ "defer",
27
+ "disabled",
28
+ "formnovalidate",
29
+ "hidden",
30
+ "inert",
31
+ "ismap",
32
+ "itemscope",
33
+ "loop",
34
+ "multiple",
35
+ "muted",
36
+ "nomodule",
37
+ "novalidate",
38
+ "open",
39
+ "playsinline",
40
+ "readonly",
41
+ "required",
42
+ "reversed",
43
+ "selected"
44
+ ]);
45
+ /**
46
+ * Escapes HTML special characters to prevent XSS.
47
+ */
48
+ function escapeHtml(str) {
49
+ return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#x27;");
50
+ }
51
+ /**
52
+ * Converts a camelCase attribute name to kebab-case for HTML.
53
+ * Special handling for data-* and aria-* attributes.
54
+ */
55
+ function toHtmlAttr(name) {
56
+ if (name === "className") return "class";
57
+ if (name === "htmlFor") return "for";
58
+ if (name.startsWith("data") || name.startsWith("aria")) return name.replace(/([A-Z])/g, "-$1").toLowerCase();
59
+ return name;
60
+ }
61
+ /**
62
+ * Renders an attribute value to a string.
63
+ */
64
+ function renderAttr(name, value) {
65
+ const htmlName = toHtmlAttr(name);
66
+ if (value === void 0 || value === null || value === false) return "";
67
+ if (BOOLEAN_ATTRS.has(htmlName)) return value ? ` ${htmlName}` : "";
68
+ if (name === "style" && typeof value === "object") return ` style="${escapeHtml(Object.entries(value).map(([k, v]) => {
69
+ return `${k.replace(/([A-Z])/g, "-$1").toLowerCase()}:${v}`;
70
+ }).join(";"))}"`;
71
+ return ` ${htmlName}="${escapeHtml(String(value))}"`;
72
+ }
73
+ /**
74
+ * Renders children to HTML string.
75
+ */
76
+ function renderChildren(children) {
77
+ if (children === null || children === void 0 || children === false) return "";
78
+ if (children === true) return "";
79
+ if (typeof children === "string") return escapeHtml(children);
80
+ if (typeof children === "number") return String(children);
81
+ if (Array.isArray(children)) return children.map(renderChildren).join("");
82
+ if (typeof children === "object" && "__html" in children) return children.__html;
83
+ return "";
84
+ }
85
+ /**
86
+ * Creates a JSX element.
87
+ * This is the core function called by the JSX transform.
88
+ */
89
+ function jsx(type, props, _key) {
90
+ const { children, ...restProps } = props;
91
+ if (typeof type === "function") return type({
92
+ ...restProps,
93
+ children
94
+ });
95
+ const tag = type;
96
+ let html = `<${tag}`;
97
+ for (const [name, value] of Object.entries(restProps)) {
98
+ if (name === "key" || name === "ref") continue;
99
+ html += renderAttr(name, value);
100
+ }
101
+ if (VOID_ELEMENTS.has(tag)) {
102
+ html += " />";
103
+ return { __html: html };
104
+ }
105
+ html += ">";
106
+ if (children !== void 0) html += renderChildren(children);
107
+ html += `</${tag}>`;
108
+ return { __html: html };
109
+ }
110
+ /**
111
+ * Creates a JSX element with static children.
112
+ * Called by the JSX transform for elements with multiple children.
113
+ */
114
+ function jsxs(type, props, key) {
115
+ return jsx(type, props, key);
116
+ }
117
+ /**
118
+ * Fragment component - renders children without a wrapper element.
119
+ */
120
+ function Fragment({ children }) {
121
+ return { __html: renderChildren(children) };
122
+ }
123
+ /**
124
+ * Renders a JSX node to an HTML string.
125
+ */
126
+ function renderToString(node) {
127
+ return node.__html;
128
+ }
129
+ /**
130
+ * Creates raw HTML without escaping.
131
+ * Use with caution - only for trusted content.
132
+ *
133
+ * @example
134
+ * ```tsx
135
+ * <div>{raw('<strong>Bold</strong>')}</div>
136
+ * ```
137
+ */
138
+ function raw(html) {
139
+ return { __html: html };
140
+ }
141
+ /**
142
+ * Conditionally renders content.
143
+ *
144
+ * @example
145
+ * ```tsx
146
+ * {when(isLoggedIn, <UserMenu />)}
147
+ * ```
148
+ */
149
+ function when(condition, content) {
150
+ return condition ? content : { __html: "" };
151
+ }
152
+ /**
153
+ * Maps over an array and renders each item.
154
+ *
155
+ * @example
156
+ * ```tsx
157
+ * {each(items, (item) => <li>{item.name}</li>)}
158
+ * ```
159
+ */
160
+ function each(items, render) {
161
+ return { __html: items.map((item, i) => render(item, i).__html).join("") };
162
+ }
163
+ //#endregion
164
+ export { raw as a, jsxs as i, each as n, renderToString as o, jsx as r, when as s, Fragment as t };
165
+
166
+ //# sourceMappingURL=jsx-html.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-html.mjs","names":[],"sources":["../src/jsx-html.ts"],"sourcesContent":["/**\n * Custom JSX Runtime for Static HTML Generation\n *\n * This module provides a JSX runtime that outputs static HTML strings.\n * No React, no hydration, no client-side JavaScript - just pure HTML.\n *\n * This is the implementation. The JSX transform imports it through the\n * ./jsx-runtime and ./jsx-dev-runtime entry points, which are the subpaths\n * `jsxImportSource` resolves. Keeping the implementation under its own name\n * keeps those two entries from colliding with the shared bundle chunk.\n *\n * @example\n * ```tsx\n * // tsconfig.json or vite.config.ts\n * {\n * \"compilerOptions\": {\n * \"jsx\": \"react-jsx\",\n * \"jsxImportSource\": \"@ox-content/vite-plugin\"\n * }\n * }\n *\n * // MyComponent.tsx\n * export function Hero({ title }: { title: string }) {\n * return (\n * <section class=\"hero\">\n * <h1>{title}</h1>\n * </section>\n * );\n * }\n * ```\n */\n\n// `jsxImportSource` makes TypeScript look for the element types in\n// `<source>/jsx-runtime` itself, so the namespace has to travel with the\n// runtime exports and not only be declared globally in ./jsx.d.ts.\nexport type { JSX } from \"./jsx\";\n\n// Self-closing tags that don't need closing tags\nconst VOID_ELEMENTS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\n// Attributes that should be rendered as boolean\nconst BOOLEAN_ATTRS = new Set([\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"defer\",\n \"disabled\",\n \"formnovalidate\",\n \"hidden\",\n \"inert\",\n \"ismap\",\n \"itemscope\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"selected\",\n]);\n\n/**\n * Escapes HTML special characters to prevent XSS.\n */\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#x27;\");\n}\n\n/**\n * Converts a camelCase attribute name to kebab-case for HTML.\n * Special handling for data-* and aria-* attributes.\n */\nfunction toHtmlAttr(name: string): string {\n // className -> class\n if (name === \"className\") return \"class\";\n // htmlFor -> for\n if (name === \"htmlFor\") return \"for\";\n // Keep data-* and aria-* as-is\n if (name.startsWith(\"data\") || name.startsWith(\"aria\")) {\n return name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n }\n return name;\n}\n\n/**\n * Renders an attribute value to a string.\n */\nfunction renderAttr(name: string, value: unknown): string {\n const htmlName = toHtmlAttr(name);\n\n // Skip undefined, null, and false values\n if (value === undefined || value === null || value === false) {\n return \"\";\n }\n\n // Boolean attributes\n if (BOOLEAN_ATTRS.has(htmlName)) {\n return value ? ` ${htmlName}` : \"\";\n }\n\n // Style object to string\n if (name === \"style\" && typeof value === \"object\") {\n const styleStr = Object.entries(value as Record<string, string | number>)\n .map(([k, v]) => {\n const prop = k.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return `${prop}:${v}`;\n })\n .join(\";\");\n return ` style=\"${escapeHtml(styleStr)}\"`;\n }\n\n // Regular attribute\n return ` ${htmlName}=\"${escapeHtml(String(value as string | number | boolean))}\"`;\n}\n\n/**\n * JSX element type - either a string (intrinsic) or a function component.\n */\nexport type JSXElementType = string | ((props: Record<string, unknown>) => JSXNode);\n\n/**\n * Valid JSX child types.\n */\nexport type JSXChild = string | number | boolean | null | undefined | JSXNode | JSXChild[];\n\n/**\n * JSX node - the result of JSX expressions.\n */\nexport interface JSXNode {\n __html: string;\n}\n\n/**\n * Props with children.\n */\nexport interface JSXProps {\n children?: JSXChild;\n [key: string]: unknown;\n}\n\n/**\n * Renders children to HTML string.\n */\nfunction renderChildren(children: JSXChild): string {\n if (children === null || children === undefined || children === false) {\n return \"\";\n }\n\n if (children === true) {\n return \"\";\n }\n\n if (typeof children === \"string\") {\n return escapeHtml(children);\n }\n\n if (typeof children === \"number\") {\n return String(children);\n }\n\n if (Array.isArray(children)) {\n return children.map(renderChildren).join(\"\");\n }\n\n if (typeof children === \"object\" && \"__html\" in children) {\n return children.__html;\n }\n\n return \"\";\n}\n\n/**\n * Creates a JSX element.\n * This is the core function called by the JSX transform.\n */\nexport function jsx(type: JSXElementType, props: JSXProps, _key?: string): JSXNode {\n const { children, ...restProps } = props;\n\n // Function component\n if (typeof type === \"function\") {\n return type({ ...restProps, children });\n }\n\n // Intrinsic element (HTML tag)\n const tag = type;\n let html = `<${tag}`;\n\n // Render attributes\n for (const [name, value] of Object.entries(restProps)) {\n // Skip internal props\n if (name === \"key\" || name === \"ref\") continue;\n html += renderAttr(name, value);\n }\n\n // Self-closing tags\n if (VOID_ELEMENTS.has(tag)) {\n html += \" />\";\n return { __html: html };\n }\n\n html += \">\";\n\n // Render children\n if (children !== undefined) {\n html += renderChildren(children);\n }\n\n html += `</${tag}>`;\n\n return { __html: html };\n}\n\n/**\n * Creates a JSX element with static children.\n * Called by the JSX transform for elements with multiple children.\n */\nexport function jsxs(type: JSXElementType, props: JSXProps, key?: string): JSXNode {\n return jsx(type, props, key);\n}\n\n/**\n * Fragment component - renders children without a wrapper element.\n */\nexport function Fragment({ children }: { children?: JSXChild }): JSXNode {\n return { __html: renderChildren(children) };\n}\n\n/**\n * Renders a JSX node to an HTML string.\n */\nexport function renderToString(node: JSXNode): string {\n return node.__html;\n}\n\n/**\n * Creates raw HTML without escaping.\n * Use with caution - only for trusted content.\n *\n * @example\n * ```tsx\n * <div>{raw('<strong>Bold</strong>')}</div>\n * ```\n */\nexport function raw(html: string): JSXNode {\n return { __html: html };\n}\n\n/**\n * Conditionally renders content.\n *\n * @example\n * ```tsx\n * {when(isLoggedIn, <UserMenu />)}\n * ```\n */\nexport function when(condition: boolean, content: JSXNode): JSXNode {\n return condition ? content : { __html: \"\" };\n}\n\n/**\n * Maps over an array and renders each item.\n *\n * @example\n * ```tsx\n * {each(items, (item) => <li>{item.name}</li>)}\n * ```\n */\nexport function each<T>(items: T[], render: (item: T, index: number) => JSXNode): JSXNode {\n const html = items.map((item, i) => render(item, i).__html).join(\"\");\n return { __html: html };\n}\n\n// Default export for convenience\nexport default {\n jsx,\n jsxs,\n Fragment,\n renderToString,\n raw,\n when,\n each,\n};\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("./vitepress.cjs");
3
+ const require_jsx_html = require("./jsx-html.cjs");
4
+ exports.Fragment = require_jsx_html.Fragment;
5
+ exports.jsx = require_jsx_html.jsx;
6
+ exports.jsxs = require_jsx_html.jsxs;
@@ -0,0 +1,2 @@
1
+ import { a as JSXProps, c as jsxs, f as JSX, i as JSXNode, n as JSXChild, r as JSXElementType, s as jsx, t as Fragment } from "./jsx-html.cjs";
2
+ export { Fragment, type JSX, type JSXChild, type JSXElementType, type JSXNode, type JSXProps, jsx, jsxs };
@@ -0,0 +1,2 @@
1
+ import { a as JSXProps, c as jsxs, f as JSX, i as JSXNode, n as JSXChild, r as JSXElementType, s as jsx, t as Fragment } from "./jsx-html.mjs";
2
+ export { Fragment, type JSX, type JSXChild, type JSXElementType, type JSXNode, type JSXProps, jsx, jsxs };
@@ -0,0 +1,2 @@
1
+ import { i as jsxs, r as jsx, t as Fragment } from "./jsx-html.mjs";
2
+ export { Fragment, jsx, jsxs };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ox-content/vite-plugin",
3
- "version": "2.87.0",
3
+ "version": "2.89.0",
4
4
  "description": "Vite plugin for Ox Content - High-performance Markdown processing with Environment API",
5
5
  "keywords": [
6
6
  "environment-api",
@@ -41,6 +41,16 @@
41
41
  "./vitepress-migrate": {
42
42
  "import": "./dist/vitepress-cli.mjs",
43
43
  "types": "./dist/vitepress-cli.d.mts"
44
+ },
45
+ "./jsx-runtime": {
46
+ "import": "./dist/jsx-runtime.mjs",
47
+ "require": "./dist/jsx-runtime.cjs",
48
+ "types": "./dist/jsx-runtime.d.mts"
49
+ },
50
+ "./jsx-dev-runtime": {
51
+ "import": "./dist/jsx-dev-runtime.mjs",
52
+ "require": "./dist/jsx-dev-runtime.cjs",
53
+ "types": "./dist/jsx-dev-runtime.d.mts"
44
54
  }
45
55
  },
46
56
  "publishConfig": {
@@ -63,7 +73,7 @@
63
73
  "shiki": "^4.4.2",
64
74
  "typescript": "^7.0.2",
65
75
  "unified": "^11.0.5",
66
- "@ox-content/napi": "2.87.0"
76
+ "@ox-content/napi": "2.89.0"
67
77
  },
68
78
  "devDependencies": {
69
79
  "@playwright/test": "^1.62.1",