@protomarkdown/parser 1.0.0 → 1.0.2
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 +225 -6
- package/dist/HtmlGenerator.d.ts +35 -0
- package/dist/HtmlGenerator.d.ts.map +1 -0
- package/dist/ShadcnCodeGenerator.d.ts +2 -0
- package/dist/ShadcnCodeGenerator.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +457 -5
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +457 -4
- package/dist/index.js.map +1 -1
- package/dist/parser/MarkdownParser.d.ts +2 -0
- package/dist/parser/MarkdownParser.d.ts.map +1 -1
- package/dist/parser/types.d.ts +3 -1
- package/dist/parser/types.d.ts.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @protomarkdown/parser
|
|
2
2
|
|
|
3
|
-
Parser and
|
|
3
|
+
Parser and renderer for Proto Markdown syntax - A UI prototyping markdown language for rapid React component generation.
|
|
4
4
|
|
|
5
5
|
[Proto Markdown Syntax Documentation](https://www.protomarkdown.org/documentation)
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- 🎨 Parse Proto Markdown syntax into an Abstract Syntax Tree (AST)
|
|
10
|
+
- ⚛️ Generate React components with Shadcn UI
|
|
11
|
+
- 🔄 Multi-screen workflow navigation system
|
|
12
|
+
- 📋 Form elements (inputs, dropdowns, checkboxes, textareas)
|
|
13
|
+
- 🎯 Cards, grids, and flexible layouts
|
|
14
|
+
- 📊 Tables and data display
|
|
15
|
+
- ✨ Text formatting (bold, italic)
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @protomarkdown/parser
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
8
24
|
|
|
9
25
|
```ts
|
|
10
|
-
import { MarkdownParser } from "@protomarkdown/parser";
|
|
11
|
-
import { ShadcnCodeGenerator } from "@protomarkdown/parser";
|
|
26
|
+
import { MarkdownParser, ShadcnCodeGenerator } from "@protomarkdown/parser";
|
|
12
27
|
|
|
13
28
|
const parser = new MarkdownParser();
|
|
14
29
|
const codeGenerator = new ShadcnCodeGenerator();
|
|
@@ -22,4 +37,208 @@ Password __*
|
|
|
22
37
|
|
|
23
38
|
const ast = parser.parse(markdown);
|
|
24
39
|
const code = codeGenerator.generate(ast.nodes);
|
|
25
|
-
```
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Workflows - Multi-Screen Navigation
|
|
43
|
+
|
|
44
|
+
Create complete multi-screen workflows with clickable navigation between screens:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
const workflowMarkdown = `
|
|
48
|
+
[workflow
|
|
49
|
+
[screen welcome
|
|
50
|
+
# Welcome to My App
|
|
51
|
+
Get started with your journey!
|
|
52
|
+
[(Get Started) -> login]
|
|
53
|
+
[Skip to Dashboard -> dashboard]
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
[screen login
|
|
57
|
+
# Login
|
|
58
|
+
Email ___
|
|
59
|
+
Password __*
|
|
60
|
+
Remember me __[]
|
|
61
|
+
[(Login) -> dashboard]
|
|
62
|
+
[Back -> welcome]
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
[screen dashboard
|
|
66
|
+
# Dashboard
|
|
67
|
+
Welcome to your dashboard!
|
|
68
|
+
|
|
69
|
+
[grid cols-2 gap-4
|
|
70
|
+
[-- Stats
|
|
71
|
+
Total Users: 150
|
|
72
|
+
--]
|
|
73
|
+
[-- Activity
|
|
74
|
+
Recent activity here
|
|
75
|
+
--]
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
[Logout -> welcome]
|
|
79
|
+
]
|
|
80
|
+
]`;
|
|
81
|
+
|
|
82
|
+
const ast = parser.parse(workflowMarkdown);
|
|
83
|
+
const reactCode = codeGenerator.generate(ast.nodes);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Button Navigation Syntax
|
|
87
|
+
|
|
88
|
+
- **Default button with navigation:** `[(Button Text) -> targetScreen]`
|
|
89
|
+
- **Outline button with navigation:** `[Button Text -> targetScreen]`
|
|
90
|
+
- **Multiple navigation buttons:** `[(Next) -> step2][Back -> step1]`
|
|
91
|
+
|
|
92
|
+
The generated component includes:
|
|
93
|
+
- `useState` hook for screen state management
|
|
94
|
+
- Conditional rendering of screens
|
|
95
|
+
- `onClick` handlers for seamless navigation
|
|
96
|
+
|
|
97
|
+
## Supported Elements
|
|
98
|
+
|
|
99
|
+
### Form Fields
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
Email ___ # Text input
|
|
103
|
+
Password __* # Password input
|
|
104
|
+
Description |___| # Textarea
|
|
105
|
+
Country __> [USA, Canada, Mexico] # Dropdown with options
|
|
106
|
+
Remember me __[] # Checkbox
|
|
107
|
+
Gender __() [Male, Female, Other] # Radio group
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Layouts
|
|
111
|
+
|
|
112
|
+
```markdown
|
|
113
|
+
[-- Card Title # Card
|
|
114
|
+
Content here
|
|
115
|
+
--]
|
|
116
|
+
|
|
117
|
+
[grid cols-2 gap-4 # Grid layout
|
|
118
|
+
[-- Card 1 --]
|
|
119
|
+
[-- Card 2 --]
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
[ flex gap-2 # Custom div with classes
|
|
123
|
+
Content
|
|
124
|
+
]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Buttons
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
[(Submit)] # Default button
|
|
131
|
+
[Cancel] # Outline button
|
|
132
|
+
[(Save)][Reset] # Multiple buttons
|
|
133
|
+
[(Next) -> step2] # Navigation button (workflows)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Tables
|
|
137
|
+
|
|
138
|
+
```markdown
|
|
139
|
+
| Name | Age | City |
|
|
140
|
+
|------|-----|------|
|
|
141
|
+
| John | 30 | NYC |
|
|
142
|
+
| Jane | 25 | LA |
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Text Formatting
|
|
146
|
+
|
|
147
|
+
```markdown
|
|
148
|
+
This is *bold* text
|
|
149
|
+
This is _italic_ text
|
|
150
|
+
This is _*bold and italic*_ text
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## API Reference
|
|
154
|
+
|
|
155
|
+
### MarkdownParser
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
const parser = new MarkdownParser(options?: ParserOptions);
|
|
159
|
+
const result = parser.parse(markdown: string);
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Options:**
|
|
163
|
+
- `strict?: boolean` - Enable strict parsing mode
|
|
164
|
+
- `preserveWhitespace?: boolean` - Preserve leading/trailing whitespace
|
|
165
|
+
|
|
166
|
+
**Returns:** `ParseResult` containing `nodes` (AST) and optional `errors`
|
|
167
|
+
|
|
168
|
+
### ShadcnCodeGenerator
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
const generator = new ShadcnCodeGenerator();
|
|
172
|
+
const code = generator.generate(nodes: MarkdownNode[]);
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Returns:** Complete React component code as a string with necessary Shadcn UI imports
|
|
176
|
+
|
|
177
|
+
### HtmlGenerator
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
const generator = new HtmlGenerator();
|
|
181
|
+
const html = generator.generate(nodes: MarkdownNode[]);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Returns:** HTML string for VS Code extension preview rendering
|
|
185
|
+
|
|
186
|
+
## Examples
|
|
187
|
+
|
|
188
|
+
### Login Form
|
|
189
|
+
|
|
190
|
+
```markdown
|
|
191
|
+
[-- Login
|
|
192
|
+
# Welcome Back
|
|
193
|
+
Email ___
|
|
194
|
+
Password __*
|
|
195
|
+
Remember me __[]
|
|
196
|
+
[(Login)][Forgot Password]
|
|
197
|
+
--]
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Multi-Step Form Workflow
|
|
201
|
+
|
|
202
|
+
```markdown
|
|
203
|
+
[workflow
|
|
204
|
+
[screen step1
|
|
205
|
+
# Step 1: Personal Info
|
|
206
|
+
First Name ___ Last Name ___
|
|
207
|
+
Email ___
|
|
208
|
+
[(Next) -> step2]
|
|
209
|
+
]
|
|
210
|
+
[screen step2
|
|
211
|
+
# Step 2: Address
|
|
212
|
+
Street ___
|
|
213
|
+
City ___ State ___
|
|
214
|
+
[(Back) -> step1][(Next) -> step3]
|
|
215
|
+
]
|
|
216
|
+
[screen step3
|
|
217
|
+
# Step 3: Review
|
|
218
|
+
Please review your information
|
|
219
|
+
[(Submit) -> confirmation][(Back) -> step2]
|
|
220
|
+
]
|
|
221
|
+
[screen confirmation
|
|
222
|
+
# Success!
|
|
223
|
+
Your form has been submitted.
|
|
224
|
+
[Start Over -> step1]
|
|
225
|
+
]
|
|
226
|
+
]
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Testing
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
npm test # Run all tests
|
|
233
|
+
npm run build # Build the library
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## License
|
|
237
|
+
|
|
238
|
+
Apache-2.0
|
|
239
|
+
|
|
240
|
+
## Links
|
|
241
|
+
|
|
242
|
+
- [Proto Markdown Documentation](https://www.protomarkdown.org/documentation)
|
|
243
|
+
- [GitHub Repository](https://github.com/georgii-sh/proto-markdown-parser)
|
|
244
|
+
- [Shadcn UI](https://ui.shadcn.com/)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MarkdownNode } from "./parser/types";
|
|
2
|
+
/**
|
|
3
|
+
* Generates HTML from a Proto Markdown AST
|
|
4
|
+
* Used for VS Code extension preview rendering
|
|
5
|
+
*/
|
|
6
|
+
export declare class HtmlGenerator {
|
|
7
|
+
/**
|
|
8
|
+
* Generate HTML from markdown AST
|
|
9
|
+
*/
|
|
10
|
+
generate(nodes: MarkdownNode[]): string;
|
|
11
|
+
private renderNode;
|
|
12
|
+
private renderHeader;
|
|
13
|
+
private renderText;
|
|
14
|
+
private renderBold;
|
|
15
|
+
private renderItalic;
|
|
16
|
+
private renderInlineNodes;
|
|
17
|
+
private renderInlineNode;
|
|
18
|
+
private renderInput;
|
|
19
|
+
private renderTextarea;
|
|
20
|
+
private renderCheckbox;
|
|
21
|
+
private renderRadioGroup;
|
|
22
|
+
private renderDropdown;
|
|
23
|
+
private renderButton;
|
|
24
|
+
private renderCard;
|
|
25
|
+
private renderContainer;
|
|
26
|
+
private renderGrid;
|
|
27
|
+
private renderDiv;
|
|
28
|
+
private renderTable;
|
|
29
|
+
private renderImage;
|
|
30
|
+
private renderWorkflow;
|
|
31
|
+
private renderScreen;
|
|
32
|
+
private parseGridConfig;
|
|
33
|
+
private escapeHtml;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=HtmlGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlGenerator.d.ts","sourceRoot":"","sources":["../src/HtmlGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM;IAIvC,OAAO,CAAC,UAAU;IA2ClB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,UAAU;CAQnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShadcnCodeGenerator.d.ts","sourceRoot":"","sources":["../src/ShadcnCodeGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAChC,OAAO,CAAC,eAAe,CAAqB;IAE5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"ShadcnCodeGenerator.d.ts","sourceRoot":"","sources":["../src/ShadcnCodeGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAChC,OAAO,CAAC,eAAe,CAAqB;IAE5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM;IAgCvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,YAAY;IA2CpB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,cAAc;CAWvB"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|