diff --git a/demo/package.json b/demo/package.json
index e40b6b5..51ddb2a 100644
--- a/demo/package.json
+++ b/demo/package.json
@@ -12,12 +12,14 @@
"@mobile-reality/mdma-parser": "workspace:*",
"@mobile-reality/mdma-prompt-pack": "workspace:*",
"@mobile-reality/mdma-renderer-react": "workspace:*",
+ "@mobile-reality/mdma-renderer-react-native": "workspace:*",
"@mobile-reality/mdma-runtime": "workspace:*",
"@mobile-reality/mdma-spec": "workspace:*",
"@mobile-reality/mdma-validator": "workspace:*",
"highlight.js": "^11.11.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
+ "react-native-web": "^0.19.13",
"recharts": "^3.7.0",
"remark-parse": "^11.0.0",
"unified": "^11.0.0",
@@ -28,6 +30,7 @@
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"@vitejs/plugin-react": "^4.3.0",
+ "react-native": "0.76.9",
"typescript": "^5.7.0",
"vite": "^6.0.0"
}
diff --git a/demo/src/docs/DocsView.tsx b/demo/src/docs/DocsView.tsx
index b1c5118..9357f2e 100644
--- a/demo/src/docs/DocsView.tsx
+++ b/demo/src/docs/DocsView.tsx
@@ -1,16 +1,17 @@
-import { useState, useEffect } from 'react';
+import { useEffect, useState } from 'react';
import { Cli } from './sections/Cli.js';
import { COMPONENTS, ComponentPreview, Components } from './sections/Components.js';
import { CustomPromptBestPractices } from './sections/CustomPromptBestPractices.js';
import { Installation } from './sections/Installation.js';
+import { IntegrationAgui } from './sections/IntegrationAgui.js';
+import { IntegrationLangchain } from './sections/IntegrationLangchain.js';
+import { INTEGRATIONS, Integrations } from './sections/Integrations.js';
import { Introduction } from './sections/Introduction.js';
import { Mcp } from './sections/Mcp.js';
import { PACKAGES, PackageDetail } from './sections/PackageDetail.js';
import { Packages } from './sections/Packages.js';
import { PromptMatrix } from './sections/PromptMatrix.js';
-import { Integrations, INTEGRATIONS } from './sections/Integrations.js';
-import { IntegrationLangchain } from './sections/IntegrationLangchain.js';
-import { IntegrationAgui } from './sections/IntegrationAgui.js';
+import { ReactNative, ReactNativeSnack } from './sections/ReactNative.js';
import { Usage, UsageHydrationPreview } from './sections/Usage.js';
import { Validator } from './sections/Validator.js';
@@ -32,6 +33,7 @@ const SECTIONS: Section[] = [
{ slug: 'usage', label: 'Usage', component: Usage },
{ slug: 'integrations', label: 'Integrations' },
{ slug: 'components', label: 'Components' },
+ { slug: 'react-native', label: 'React Native', component: ReactNative },
{ slug: 'validator', label: 'Validator', component: Validator },
{ slug: 'mcp', label: 'MCP & Skills', component: Mcp },
{ slug: 'cli', label: 'CLI', component: Cli },
@@ -73,7 +75,8 @@ export function DocsView() {
const showComponentsPreview = active === 'components';
const showUsagePreview = active === 'usage' && usageExampleOpen;
- const showPreview = showComponentsPreview || showUsagePreview;
+ const showRnPreview = active === 'react-native';
+ const showPreview = showComponentsPreview || showUsagePreview || showRnPreview;
const previewEntry = COMPONENTS.find((c) => c.type === selectedComponent) ?? COMPONENTS[0];
const isPackagesActive = active === 'packages' || active.startsWith('packages/');
@@ -119,7 +122,11 @@ export function DocsView() {
(s.slug === 'integrations' && isIntegrationsActive);
return (
-
+