@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 CHANGED
@@ -1,14 +1,29 @@
1
- # proto-markdown-parser
1
+ # @protomarkdown/parser
2
2
 
3
- Parser and rendeder for proto markdown syntax
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
- ## Usage
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"}
@@ -41,5 +41,7 @@ export declare class ShadcnCodeGenerator {
41
41
  private generateBold;
42
42
  private generateItalic;
43
43
  private generateImage;
44
+ private generateWorkflow;
45
+ private generateScreen;
44
46
  }
45
47
  //# sourceMappingURL=ShadcnCodeGenerator.d.ts.map
@@ -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;IA4BvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAuCpB,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;IAQtB,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;CAMtB"}
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
@@ -1,4 +1,5 @@
1
1
  export { MarkdownParser } from "./parser";
2
2
  export type { MarkdownNode } from "./parser/types";
3
3
  export { ShadcnCodeGenerator } from "./ShadcnCodeGenerator";
4
+ export { HtmlGenerator } from "./HtmlGenerator";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -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"}