diff --git a/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/package.json b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/package.json new file mode 100644 index 00000000..a2ad61c6 --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/package.json @@ -0,0 +1,8 @@ +{ + "name": "xyd-fixture-rt-9-vite-lib-react-types-resilience", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + } +} diff --git a/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/CardWrapper.tsx b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/CardWrapper.tsx new file mode 100644 index 00000000..5bade1da --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/CardWrapper.tsx @@ -0,0 +1,31 @@ +import React from "react"; + +interface CardWrapperProps { + /** Card title */ + title: string; + + /** Card content — React types that typia cannot resolve */ + children: React.ReactNode; + + /** Optional icon element */ + icon?: React.ReactElement; + + /** Optional footer element */ + footer?: React.ReactNode; + + /** Whether the card has a border */ + bordered?: boolean; +} + +export function CardWrapper({ title, children, icon, footer, bordered }: CardWrapperProps) { + return ( +
+
+ {icon && {icon}} +

{title}

+
+
{children}
+ {footer &&
{footer}
} +
+ ); +} diff --git a/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/StatusBadge.tsx b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/StatusBadge.tsx new file mode 100644 index 00000000..2ec7f1d4 --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/StatusBadge.tsx @@ -0,0 +1,21 @@ +interface StatusBadgeProps { + /** Current status label */ + label: string; + + /** Visual variant */ + variant: "success" | "warning" | "error" | "info"; + + /** Size of the badge */ + size?: "small" | "medium" | "large"; + + /** Whether the badge should pulse */ + animated?: boolean; +} + +export function StatusBadge({ label, variant, size = "medium", animated }: StatusBadgeProps) { + return ( + + {label} + + ); +} diff --git a/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/index.ts b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/index.ts new file mode 100644 index 00000000..448dbaeb --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/src/index.ts @@ -0,0 +1,2 @@ +export { StatusBadge } from "./StatusBadge"; +export { CardWrapper } from "./CardWrapper"; diff --git a/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/tsconfig.json b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/tsconfig.json new file mode 100644 index 00000000..9f8bc05b --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "outDir": "./dist", + "jsx": "react-jsx", + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "target": "ES2020", + "strict": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx"] +} diff --git a/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/vite.config.ts b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/vite.config.ts new file mode 100644 index 00000000..a683fe16 --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/input/vite.config.ts @@ -0,0 +1,21 @@ +import {defineConfig} from 'vite'; +import react from '@vitejs/plugin-react'; +import {xydSourceReactRuntime} from '@xyd-js/source-react-runtime'; + +export default defineConfig({ + plugins: [ + xydSourceReactRuntime(), + react(), + ], + build: { + lib: { + entry: 'src/index.ts', + formats: ['es'], + fileName: 'index', + }, + rollupOptions: { + external: ['react', 'react/jsx-runtime', 'react/jsx-dev-runtime', 'react-dom'], + }, + minify: false, + }, +}); diff --git a/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/output.js b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/output.js new file mode 100644 index 00000000..de11d6f6 --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-2.vite-lib.react-types-resilience/output.js @@ -0,0 +1,15 @@ +// === index.js === +import { jsx, jsxs } from "react/jsx-runtime"; +function StatusBadge({ label, variant, size = "medium", animated }) { + return jsx("span", { className: `badge badge-${variant} badge-${size} ${animated ? "pulse" : ""}`, children: label }); +} +StatusBadge.__xydUniform = JSON.parse('{"title":"StatusBadge","canonical":"","description":"","definitions":[{"title":"Props","properties":[{"name":"label","type":"string","description":"Current status label","meta":[{"name":"required","value":"true"}]},{"name":"variant","type":"$xor","description":"Visual variant","properties":[{"name":"variant","type":"object","description":"","meta":[{"name":"required","value":"true"}]},{"name":"variant","type":"object","description":"","meta":[{"name":"required","value":"true"}]},{"name":"variant","type":"object","description":"","meta":[{"name":"required","value":"true"}]},{"name":"variant","type":"object","description":"","meta":[{"name":"required","value":"true"}]}],"meta":[{"name":"required","value":"true"}]},{"name":"size","type":"$xor","description":"Size of the badge","properties":[{"name":"size","type":"object","description":"","meta":[]},{"name":"size","type":"object","description":"","meta":[]},{"name":"size","type":"object","description":"","meta":[]}],"meta":[]},{"name":"animated","type":"boolean","description":"Whether the badge should pulse","meta":[]}],"meta":[{"name":"type","value":"parameters"}]}],"examples":{"groups":[]}}'); +function CardWrapper({ title, children, icon, footer, bordered }) { + return jsxs("div", { className: `card ${bordered ? "bordered" : ""}`, children: [jsxs("div", { className: "card-header", children: [icon && jsx("span", { className: "card-icon", children: icon }), jsx("h3", { children: title })] }), jsx("div", { className: "card-body", children }), footer && jsx("div", { className: "card-footer", children: footer })] }); +} +CardWrapper.__xydUniform = JSON.parse('{"title":"CardWrapper","canonical":"","description":"","definitions":[{"title":"Props","properties":[{"name":"title","type":"string","description":"Card title","meta":[{"name":"required","value":"true"}]},{"name":"children","type":"ReactNode","description":"Card content — React types that typia cannot resolve","meta":[{"name":"required","value":"true"}]},{"name":"icon","type":"ReactElement> | undefined","description":"Optional icon element","meta":[]},{"name":"footer","type":"ReactNode","description":"Optional footer element","meta":[]},{"name":"bordered","type":"boolean","description":"Whether the card has a border","meta":[]}],"meta":[{"name":"type","value":"parameters"}]}],"examples":{"groups":[]}}'); +export { + CardWrapper, + StatusBadge +}; + diff --git a/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/index.html b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/index.html new file mode 100644 index 00000000..fd01349d --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/index.html @@ -0,0 +1,12 @@ + + + + + + Main App + + +
+ + + diff --git a/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/package.json b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/package.json new file mode 100644 index 00000000..a9c7b371 --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/package.json @@ -0,0 +1,8 @@ +{ + "name": "xyd-fixture-rt-neg3-vite-app-iframe-multi-entry", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + } +} diff --git a/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/sample-app.html b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/sample-app.html new file mode 100644 index 00000000..af385a83 --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/sample-app.html @@ -0,0 +1,10 @@ + + + + + + +
+ + + diff --git a/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/src/main.tsx b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/src/main.tsx new file mode 100644 index 00000000..51c6f446 --- /dev/null +++ b/packages/xyd-source-react-runtime/__fixtures__/-3.vite-app.iframe-multi-entry/input/src/main.tsx @@ -0,0 +1,38 @@ +import { createRoot } from "react-dom/client"; + +interface NavBarProps { + /** Application title */ + title: string; + /** Navigation links */ + links: string[]; + /** Whether to use dark theme */ + dark?: boolean; +} + +export function NavBar({ title, links, dark }: NavBarProps) { + return ( + + ); +} + +function App() { + return ( +
+ +