@bravostudioai/react 0.1.29 → 0.1.31
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/README.md +75 -39
- package/package.json +1 -1
- package/src/cli/commands/generate.ts +7 -2
- package/src/components.tsx +6 -1
- package/src/version.ts +1 -1
package/README.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
# @bravostudioai/react
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Stream your Figma designs directly into production-ready, type-safe React components for your MCP apps.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@bravostudioai/react)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](https://reactjs.org/)
|
|
8
8
|
|
|
9
|
-
**
|
|
10
|
-
- 🎨 Design in
|
|
9
|
+
**The Figma → React Pipeline:**
|
|
10
|
+
- 🎨 Design in Figma → Stream to typed React components
|
|
11
|
+
- 🤖 Perfect for MCP (Model Context Protocol) apps
|
|
11
12
|
- 🔒 100% TypeScript with full IntelliSense support
|
|
12
13
|
- 🚀 Zero configuration, instant productivity
|
|
13
14
|
- 📝 Auto-generated documentation for every component
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
|
|
29
30
|
## Table of Contents
|
|
30
31
|
|
|
31
|
-
- [What is
|
|
32
|
+
- [What is Bravo Studio AI?](#what-is-bravo-studio-ai)
|
|
32
33
|
- [Perfect For](#perfect-for)
|
|
33
34
|
- [Installation](#installation)
|
|
34
35
|
- [Quick Start](#quick-start)
|
|
@@ -43,9 +44,9 @@
|
|
|
43
44
|
|
|
44
45
|
## Why This Matters
|
|
45
46
|
|
|
46
|
-
Stop manually translating designs into code. Stop writing boilerplate. Stop maintaining prop interfaces that fall out of sync with your designs.
|
|
47
|
+
Stop manually translating Figma designs into code. Stop writing boilerplate. Stop maintaining prop interfaces that fall out of sync with your designs.
|
|
47
48
|
|
|
48
|
-
With `@bravostudioai/react`, you design in
|
|
49
|
+
With `@bravostudioai/react`, you design in Figma and Bravo Studio AI streams them into:
|
|
49
50
|
|
|
50
51
|
- **Type-safe React components** with full TypeScript interfaces
|
|
51
52
|
- **Intelligent prop detection** that understands your data bindings, forms, buttons, and interactive elements
|
|
@@ -54,20 +55,30 @@ With `@bravostudioai/react`, you design in Encore Studio and instantly get:
|
|
|
54
55
|
- **Self-documenting code** with README files for every component
|
|
55
56
|
- **Zero manual configuration** - the generator understands your design intent
|
|
56
57
|
|
|
57
|
-
## What is
|
|
58
|
+
## What is Bravo Studio AI?
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
**Bravo Studio AI** is a Figma-to-React pipeline that transforms your designs into production-ready components. Design in Figma, and Bravo Studio AI automatically generates type-safe React components with intelligent prop detection, form handling, and event routing.
|
|
61
|
+
|
|
62
|
+
### The Perfect MCP Companion
|
|
63
|
+
|
|
64
|
+
This package is optimized for **MCP (Model Context Protocol) applications**, where AI agents need to interact with real, functional UI components. By streaming Figma designs into typed React components, you can:
|
|
65
|
+
|
|
66
|
+
- Rapidly prototype AI-powered interfaces
|
|
67
|
+
- Let designers iterate without code changes
|
|
68
|
+
- Build MCP apps with production-ready UI in minutes
|
|
69
|
+
- Maintain type safety across your entire AI app stack
|
|
60
70
|
|
|
61
71
|
## Perfect For
|
|
62
72
|
|
|
63
|
-
✅ **
|
|
64
|
-
✅ **
|
|
65
|
-
✅ **
|
|
73
|
+
✅ **MCP app developers** building AI-powered applications with real UI
|
|
74
|
+
✅ **Design teams** who want to iterate in Figma and see changes instantly
|
|
75
|
+
✅ **Full-stack developers** building prototypes or MVPs at lightning speed
|
|
76
|
+
✅ **Product teams** validating designs with real functionality
|
|
66
77
|
✅ **Agencies** shipping client projects with tight deadlines
|
|
67
78
|
✅ **Startups** optimizing for speed without sacrificing code quality
|
|
68
79
|
|
|
69
80
|
**Not ideal for:**
|
|
70
|
-
❌ Projects without
|
|
81
|
+
❌ Projects without Figma designs processed through Bravo Studio AI
|
|
71
82
|
❌ Teams needing 100% custom, hand-coded components
|
|
72
83
|
|
|
73
84
|
## Installation
|
|
@@ -83,14 +94,21 @@ npm install @bravostudioai/react
|
|
|
83
94
|
|
|
84
95
|
## Quick Start
|
|
85
96
|
|
|
86
|
-
###
|
|
97
|
+
### The Figma → React Workflow
|
|
98
|
+
|
|
99
|
+
1. **Design in Figma** - Create your interface with your team
|
|
100
|
+
2. **Process through Bravo Studio AI** - Your designs get app/page IDs
|
|
101
|
+
3. **Generate React components** - Stream them into your codebase
|
|
102
|
+
4. **Use in your MCP app** - Import and use with full type safety
|
|
103
|
+
|
|
104
|
+
### Generate Components from Your Bravo Studio AI App
|
|
87
105
|
|
|
88
106
|
```bash
|
|
89
107
|
# Generate all pages from an app
|
|
90
|
-
npx
|
|
108
|
+
npx @bravostudioai/react generate <appId> ./src/components
|
|
91
109
|
|
|
92
110
|
# Generate a specific page
|
|
93
|
-
npx
|
|
111
|
+
npx @bravostudioai/react generate <appId> <pageId> ./src/components
|
|
94
112
|
```
|
|
95
113
|
|
|
96
114
|
This creates a folder structure like:
|
|
@@ -108,7 +126,7 @@ src/components/
|
|
|
108
126
|
```tsx
|
|
109
127
|
import { PageName } from './components/YourApp/PageName';
|
|
110
128
|
|
|
111
|
-
function
|
|
129
|
+
function MCPApp() {
|
|
112
130
|
return (
|
|
113
131
|
<PageName
|
|
114
132
|
headline="Welcome to our app"
|
|
@@ -122,7 +140,7 @@ function App() {
|
|
|
122
140
|
}
|
|
123
141
|
```
|
|
124
142
|
|
|
125
|
-
That's it. No configuration files. No manual prop mapping. Just clean, typed React components.
|
|
143
|
+
That's it. No configuration files. No manual prop mapping. Just clean, typed React components streamed from Figma.
|
|
126
144
|
|
|
127
145
|
## What Gets Generated
|
|
128
146
|
|
|
@@ -293,13 +311,14 @@ Simple, clean props that map directly to your design's data bindings.
|
|
|
293
311
|
|
|
294
312
|
## How It Works
|
|
295
313
|
|
|
296
|
-
|
|
314
|
+
Bravo Studio AI processes your Figma designs and the generator:
|
|
297
315
|
|
|
298
|
-
1. **Detects data bindings** -
|
|
316
|
+
1. **Detects data bindings** - Components tagged in Figma become typed props
|
|
299
317
|
2. **Identifies repeating containers** - Lists and sliders become array props with typed items
|
|
300
318
|
3. **Finds forms** - Input groups become typed form data interfaces
|
|
301
319
|
4. **Discovers interactive elements** - Buttons, selects, and inputs get event handlers
|
|
302
320
|
5. **Generates human-readable names** - Component names become `headline`, not `component_01ABC123`
|
|
321
|
+
6. **Streams updates** - Optional live updates when Figma designs change
|
|
303
322
|
|
|
304
323
|
## CLI Commands
|
|
305
324
|
|
|
@@ -307,25 +326,25 @@ The generator intelligently analyzes your Encore Studio pages and:
|
|
|
307
326
|
|
|
308
327
|
```bash
|
|
309
328
|
# Generate all pages from an app
|
|
310
|
-
npx
|
|
329
|
+
npx @bravostudioai/react generate <appId> <outputPath>
|
|
311
330
|
|
|
312
331
|
# Generate a specific page
|
|
313
|
-
npx
|
|
332
|
+
npx @bravostudioai/react generate <appId> <pageId> <outputPath>
|
|
314
333
|
|
|
315
334
|
# Generate with bundled production data (offline mode)
|
|
316
|
-
npx
|
|
335
|
+
npx @bravostudioai/react generate <appId> <pageId> <outputPath> --production
|
|
317
336
|
```
|
|
318
337
|
|
|
319
338
|
### Download Raw Data
|
|
320
339
|
|
|
321
340
|
```bash
|
|
322
341
|
# Download page data for inspection
|
|
323
|
-
npx
|
|
342
|
+
npx @bravostudioai/react download <appId> <pageId> <targetPath>
|
|
324
343
|
```
|
|
325
344
|
|
|
326
345
|
## Environment Variables
|
|
327
346
|
|
|
328
|
-
Configure the
|
|
347
|
+
Configure the Bravo Studio AI API endpoint:
|
|
329
348
|
|
|
330
349
|
```bash
|
|
331
350
|
APPS_SERVICE_URL=https://your-custom-endpoint.com
|
|
@@ -360,7 +379,7 @@ Sliders and repeating containers support both modes:
|
|
|
360
379
|
Bundle your app/page definitions directly into components for offline usage:
|
|
361
380
|
|
|
362
381
|
```bash
|
|
363
|
-
npx
|
|
382
|
+
npx @bravostudioai/react generate <appId> <pageId> ./src/components --production
|
|
364
383
|
```
|
|
365
384
|
|
|
366
385
|
This creates a `data.json` file with all necessary data baked in.
|
|
@@ -416,15 +435,25 @@ Full TypeScript support out of the box. Every generated component includes:
|
|
|
416
435
|
|
|
417
436
|
## Developer Experience
|
|
418
437
|
|
|
419
|
-
This isn't just code generation - it's a complete
|
|
438
|
+
This isn't just code generation - it's a complete Figma → React pipeline:
|
|
420
439
|
|
|
421
|
-
1. **Design in
|
|
422
|
-
2. **
|
|
423
|
-
3. **
|
|
424
|
-
4. **
|
|
440
|
+
1. **Design in Figma** - Work with your design team in their native tool
|
|
441
|
+
2. **Process through Bravo Studio AI** - Designs get structured and tagged
|
|
442
|
+
3. **Run the generator** - One command streams your components
|
|
443
|
+
4. **Import and use** - Type-safe components with IntelliSense support
|
|
444
|
+
5. **Iterate quickly** - Regenerate anytime Figma designs change
|
|
425
445
|
|
|
426
446
|
The generated code is clean, readable, and maintainable. You can read it, understand it, and even modify it if needed.
|
|
427
447
|
|
|
448
|
+
### Why This Matters for MCP Apps
|
|
449
|
+
|
|
450
|
+
MCP applications need real UI components that AI agents can reason about and manipulate. By streaming Figma designs into typed React components, you get:
|
|
451
|
+
|
|
452
|
+
- **Type safety** - AI agents work with strongly-typed interfaces
|
|
453
|
+
- **Rapid iteration** - Designers update Figma, you regenerate
|
|
454
|
+
- **Production quality** - Not prototypes, but real components
|
|
455
|
+
- **Developer-friendly** - Clean code that developers can read and extend
|
|
456
|
+
|
|
428
457
|
## Example Output
|
|
429
458
|
|
|
430
459
|
Here's what the generator creates for a real-world salary calculator:
|
|
@@ -469,8 +498,11 @@ Complete documentation with prop descriptions, types, and usage examples.
|
|
|
469
498
|
|
|
470
499
|
## Why Developers Love This
|
|
471
500
|
|
|
472
|
-
**"
|
|
473
|
-
Your designers
|
|
501
|
+
**"Figma to code in seconds, not days"**
|
|
502
|
+
Your designers iterate in Figma while you work with production-ready components. No translation layer.
|
|
503
|
+
|
|
504
|
+
**"Perfect for MCP apps"**
|
|
505
|
+
AI agents need typed interfaces. This gives you exactly that, streamed from design files.
|
|
474
506
|
|
|
475
507
|
**"Type safety everywhere"**
|
|
476
508
|
Catch errors at compile time, not runtime. IntelliSense shows you every available prop.
|
|
@@ -490,7 +522,7 @@ The generated code looks like code you'd write by hand. Clean, idiomatic React.
|
|
|
490
522
|
|
|
491
523
|
**Q: The generated component shows "Failed to load"**
|
|
492
524
|
- Ensure your `appId` and `pageId` are correct
|
|
493
|
-
- Check that you have network access to the
|
|
525
|
+
- Check that you have network access to the Bravo Studio AI API
|
|
494
526
|
- For offline use, use `--production` flag during generation
|
|
495
527
|
|
|
496
528
|
**Q: TypeScript errors in generated code**
|
|
@@ -499,13 +531,17 @@ The generated code looks like code you'd write by hand. Clean, idiomatic React.
|
|
|
499
531
|
- Try regenerating the component with the latest package version
|
|
500
532
|
|
|
501
533
|
**Q: Props not updating the component**
|
|
502
|
-
- Remember that data
|
|
534
|
+
- Remember that data bindings need to be properly tagged in your Figma design
|
|
503
535
|
- Check the generated README.md for the exact prop names
|
|
504
536
|
- Verify the component is receiving props correctly using React DevTools
|
|
505
537
|
|
|
506
538
|
**Q: How do I get my App ID and Page ID?**
|
|
507
|
-
- Contact your Bravo Studio team for access credentials
|
|
508
|
-
- IDs are
|
|
539
|
+
- Contact your Bravo Studio AI team for access credentials
|
|
540
|
+
- IDs are provided when your Figma designs are processed through Bravo Studio AI
|
|
541
|
+
|
|
542
|
+
**Q: Can I use this with regular Figma files?**
|
|
543
|
+
- Figma files must be processed through Bravo Studio AI first
|
|
544
|
+
- This adds the necessary metadata and structure for component generation
|
|
509
545
|
|
|
510
546
|
### Best Practices
|
|
511
547
|
|
|
@@ -544,10 +580,10 @@ npm update @bravostudioai/react
|
|
|
544
580
|
|
|
545
581
|
## Keywords
|
|
546
582
|
|
|
547
|
-
`react`, `typescript`, `code-generation`, `design-to-code`, `
|
|
583
|
+
`react`, `typescript`, `code-generation`, `design-to-code`, `figma`, `figma-to-react`, `bravo-studio`, `bravo-studio-ai`, `component-generator`, `type-safe`, `mcp`, `model-context-protocol`, `ai-apps`, `design-streaming`, `design-system`, `ui-components`, `figma-plugin`
|
|
548
584
|
|
|
549
585
|
---
|
|
550
586
|
|
|
551
|
-
**
|
|
587
|
+
**Stream Figma designs directly into your MCP apps. Start with @bravostudioai/react.**
|
|
552
588
|
|
|
553
|
-
Made with ❤️ by the Bravo Studio team
|
|
589
|
+
Made with ❤️ by the Bravo Studio AI team
|
package/package.json
CHANGED
|
@@ -369,6 +369,8 @@ Arguments:
|
|
|
369
369
|
appId The Encore app ID
|
|
370
370
|
pageId The Encore page ID (optional - if omitted, generates wrappers for ALL pages)
|
|
371
371
|
outputPath Path where the generated TSX file(s) should be saved
|
|
372
|
+
--production Generate for production (bundles data)
|
|
373
|
+
--preseed Alias for --production (bundles data)
|
|
372
374
|
|
|
373
375
|
Environment variables:
|
|
374
376
|
APPS_SERVICE_URL Base URL for the apps service
|
|
@@ -379,8 +381,11 @@ Example:
|
|
|
379
381
|
}
|
|
380
382
|
|
|
381
383
|
export async function runGenerate(args: string[]) {
|
|
382
|
-
const isProduction =
|
|
383
|
-
|
|
384
|
+
const isProduction =
|
|
385
|
+
args.includes("--production") || args.includes("--preseed");
|
|
386
|
+
const cleanArgs = args.filter(
|
|
387
|
+
(arg) => arg !== "--production" && arg !== "--preseed"
|
|
388
|
+
);
|
|
384
389
|
|
|
385
390
|
if (
|
|
386
391
|
cleanArgs.length < 2 ||
|
package/src/components.tsx
CHANGED
|
@@ -1502,7 +1502,12 @@ const TextInputComponent: React.FC<ComponentProps> = ({
|
|
|
1502
1502
|
);
|
|
1503
1503
|
};
|
|
1504
1504
|
|
|
1505
|
-
const LottieComponent: React.FC<ComponentProps> = ({
|
|
1505
|
+
const LottieComponent: React.FC<ComponentProps> = ({
|
|
1506
|
+
id,
|
|
1507
|
+
name,
|
|
1508
|
+
nodeData,
|
|
1509
|
+
children,
|
|
1510
|
+
}) => {
|
|
1506
1511
|
const style = useEncoreStyle(nodeData.style);
|
|
1507
1512
|
return (
|
|
1508
1513
|
<EncoreLinkActionWrapper id={id} nodeData={nodeData}>
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PACKAGE_VERSION = "0.1.
|
|
1
|
+
export const PACKAGE_VERSION = "0.1.31";
|