wyreframe 0.1.0
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 +123 -0
- package/dist/index.d.ts +267 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +195 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -0
- package/src/parser/Core/Bounds.mjs +61 -0
- package/src/parser/Core/Bounds.res +65 -0
- package/src/parser/Core/Grid.mjs +268 -0
- package/src/parser/Core/Grid.res +265 -0
- package/src/parser/Core/Position.mjs +83 -0
- package/src/parser/Core/Position.res +54 -0
- package/src/parser/Core/Types.mjs +435 -0
- package/src/parser/Core/Types.res +331 -0
- package/src/parser/Core/__tests__/Bounds_test.mjs +326 -0
- package/src/parser/Core/__tests__/Bounds_test.res +412 -0
- package/src/parser/Core/__tests__/Grid_test.mjs +322 -0
- package/src/parser/Core/__tests__/Grid_test.res +319 -0
- package/src/parser/Core/__tests__/Types_test.mjs +614 -0
- package/src/parser/Core/__tests__/Types_test.res +650 -0
- package/src/parser/Detector/BoxTracer.mjs +302 -0
- package/src/parser/Detector/BoxTracer.res +374 -0
- package/src/parser/Detector/HierarchyBuilder.mjs +158 -0
- package/src/parser/Detector/HierarchyBuilder.res +315 -0
- package/src/parser/Detector/ShapeDetector.mjs +134 -0
- package/src/parser/Detector/ShapeDetector.res +236 -0
- package/src/parser/Detector/__tests__/BoxTracer_test.mjs +70 -0
- package/src/parser/Detector/__tests__/BoxTracer_test.res +92 -0
- package/src/parser/Detector/__tests__/HierarchyBuilder_test.mjs +489 -0
- package/src/parser/Detector/__tests__/HierarchyBuilder_test.res +849 -0
- package/src/parser/Detector/__tests__/ShapeDetector_test.mjs +377 -0
- package/src/parser/Detector/__tests__/ShapeDetector_test.res +563 -0
- package/src/parser/Errors/ErrorContext.mjs +106 -0
- package/src/parser/Errors/ErrorContext.res +191 -0
- package/src/parser/Errors/ErrorMessages.mjs +289 -0
- package/src/parser/Errors/ErrorMessages.res +303 -0
- package/src/parser/Errors/ErrorTypes.mjs +105 -0
- package/src/parser/Errors/ErrorTypes.res +169 -0
- package/src/parser/Interactions/InteractionMerger.mjs +266 -0
- package/src/parser/Interactions/InteractionMerger.res +450 -0
- package/src/parser/Interactions/InteractionParser.mjs +88 -0
- package/src/parser/Interactions/InteractionParser.res +127 -0
- package/src/parser/Interactions/SimpleInteractionParser.mjs +278 -0
- package/src/parser/Interactions/SimpleInteractionParser.res +262 -0
- package/src/parser/Interactions/__tests__/InteractionMerger_test.mjs +576 -0
- package/src/parser/Interactions/__tests__/InteractionMerger_test.res +646 -0
- package/src/parser/Parser.gen.tsx +96 -0
- package/src/parser/Parser.mjs +212 -0
- package/src/parser/Parser.res +481 -0
- package/src/parser/Scanner/__tests__/Grid_manual.mjs +214 -0
- package/src/parser/Scanner/__tests__/Grid_manual.res +141 -0
- package/src/parser/Semantic/ASTBuilder.mjs +197 -0
- package/src/parser/Semantic/ASTBuilder.res +288 -0
- package/src/parser/Semantic/AlignmentCalc.mjs +41 -0
- package/src/parser/Semantic/AlignmentCalc.res +104 -0
- package/src/parser/Semantic/Elements/ButtonParser.mjs +58 -0
- package/src/parser/Semantic/Elements/ButtonParser.res +131 -0
- package/src/parser/Semantic/Elements/CheckboxParser.mjs +58 -0
- package/src/parser/Semantic/Elements/CheckboxParser.res +79 -0
- package/src/parser/Semantic/Elements/CodeTextParser.mjs +50 -0
- package/src/parser/Semantic/Elements/CodeTextParser.res +111 -0
- package/src/parser/Semantic/Elements/ElementParser.mjs +15 -0
- package/src/parser/Semantic/Elements/ElementParser.res +83 -0
- package/src/parser/Semantic/Elements/EmphasisParser.mjs +46 -0
- package/src/parser/Semantic/Elements/EmphasisParser.res +67 -0
- package/src/parser/Semantic/Elements/InputParser.mjs +41 -0
- package/src/parser/Semantic/Elements/InputParser.res +97 -0
- package/src/parser/Semantic/Elements/LinkParser.mjs +60 -0
- package/src/parser/Semantic/Elements/LinkParser.res +156 -0
- package/src/parser/Semantic/Elements/TextParser.mjs +19 -0
- package/src/parser/Semantic/Elements/TextParser.res +42 -0
- package/src/parser/Semantic/Elements/__tests__/ButtonParser_test.mjs +189 -0
- package/src/parser/Semantic/Elements/__tests__/ButtonParser_test.res +257 -0
- package/src/parser/Semantic/Elements/__tests__/CheckboxParser_test.mjs +202 -0
- package/src/parser/Semantic/Elements/__tests__/CheckboxParser_test.res +250 -0
- package/src/parser/Semantic/Elements/__tests__/CodeTextParser_manual.mjs +293 -0
- package/src/parser/Semantic/Elements/__tests__/CodeTextParser_manual.res +134 -0
- package/src/parser/Semantic/Elements/__tests__/InputParser_test.mjs +253 -0
- package/src/parser/Semantic/Elements/__tests__/InputParser_test.res +304 -0
- package/src/parser/Semantic/Elements/__tests__/LinkParser_test.mjs +289 -0
- package/src/parser/Semantic/Elements/__tests__/LinkParser_test.res +402 -0
- package/src/parser/Semantic/Elements/__tests__/TextParser_test.mjs +149 -0
- package/src/parser/Semantic/Elements/__tests__/TextParser_test.res +167 -0
- package/src/parser/Semantic/ParserRegistry.mjs +82 -0
- package/src/parser/Semantic/ParserRegistry.res +145 -0
- package/src/parser/Semantic/SemanticParser.mjs +850 -0
- package/src/parser/Semantic/SemanticParser.res +1368 -0
- package/src/parser/Semantic/__tests__/ASTBuilder_test.mjs +187 -0
- package/src/parser/Semantic/__tests__/ASTBuilder_test.res +192 -0
- package/src/parser/Semantic/__tests__/ParserRegistry_test.mjs +154 -0
- package/src/parser/Semantic/__tests__/ParserRegistry_test.res +191 -0
- package/src/parser/Semantic/__tests__/SemanticParser_integration_test.mjs +768 -0
- package/src/parser/Semantic/__tests__/SemanticParser_integration_test.res +1069 -0
- package/src/parser/Semantic/__tests__/SemanticParser_manual.mjs +1329 -0
- package/src/parser/Semantic/__tests__/SemanticParser_manual.res +544 -0
- package/src/parser/TestMain.mjs +21 -0
- package/src/parser/TestMain.res +14 -0
- package/src/parser/TextExtractor.mjs +179 -0
- package/src/parser/TextExtractor.res +264 -0
- package/src/parser/__tests__/GridScanner_integration.test.mjs +632 -0
- package/src/parser/__tests__/GridScanner_integration.test.res +816 -0
- package/src/parser/__tests__/Performance.test.mjs +244 -0
- package/src/parser/__tests__/Performance.test.res +371 -0
- package/src/parser/__tests__/PerformanceFixtures.mjs +200 -0
- package/src/parser/__tests__/PerformanceFixtures.res +284 -0
- package/src/parser/__tests__/WyreframeParser_integration.test.mjs +770 -0
- package/src/parser/__tests__/WyreframeParser_integration.test.res +1008 -0
- package/src/parser/__tests__/fixtures/alignment-test.txt +9 -0
- package/src/parser/__tests__/fixtures/all-elements.txt +16 -0
- package/src/parser/__tests__/fixtures/login-scene.txt +17 -0
- package/src/parser/__tests__/fixtures/multi-scene.txt +25 -0
- package/src/parser/__tests__/fixtures/nested-boxes.txt +15 -0
- package/src/parser/__tests__/fixtures/simple-box.txt +5 -0
- package/src/parser/__tests__/fixtures/with-dividers.txt +14 -0
- package/src/renderer/Renderer.gen.tsx +32 -0
- package/src/renderer/Renderer.mjs +391 -0
- package/src/renderer/Renderer.res +558 -0
package/README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Wyreframe
|
|
2
|
+
|
|
3
|
+
> A library that converts ASCII wireframes into working HTML/UI
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/wyreframe)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
+---------------------------+
|
|
10
|
+
| 'WYREFRAME' | Draw in ASCII
|
|
11
|
+
| +---------------------+ | ↓
|
|
12
|
+
| | #email | | Convert to HTML!
|
|
13
|
+
| +---------------------+ |
|
|
14
|
+
| [ Login ] |
|
|
15
|
+
+---------------------------+
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install wyreframe
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
import { createUI } from 'wyreframe';
|
|
28
|
+
|
|
29
|
+
const ui = `
|
|
30
|
+
@scene: login
|
|
31
|
+
|
|
32
|
+
+---------------------------+
|
|
33
|
+
| 'WYREFRAME' |
|
|
34
|
+
| +---------------------+ |
|
|
35
|
+
| | #email | |
|
|
36
|
+
| +---------------------+ |
|
|
37
|
+
| [ Login ] |
|
|
38
|
+
+---------------------------+
|
|
39
|
+
|
|
40
|
+
#email:
|
|
41
|
+
placeholder: "Enter your email"
|
|
42
|
+
|
|
43
|
+
[Login]:
|
|
44
|
+
@click -> goto(dashboard, slide-left)
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
const result = createUI(ui);
|
|
48
|
+
|
|
49
|
+
if (result.success) {
|
|
50
|
+
document.getElementById('app').appendChild(result.root);
|
|
51
|
+
result.sceneManager.goto('login');
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Syntax Summary
|
|
56
|
+
|
|
57
|
+
| Syntax | Description | Example |
|
|
58
|
+
|------|------|------|
|
|
59
|
+
| `+---+` | Box/Container | `<div>` |
|
|
60
|
+
| `[ Text ]` | Button | `<button>` |
|
|
61
|
+
| `#id` | Input field | `<input>` |
|
|
62
|
+
| `"text"` | Link | `<a>` |
|
|
63
|
+
| `'text'` | Emphasis text | Title, Heading |
|
|
64
|
+
| `[x]` / `[ ]` | Checkbox | `<input type="checkbox">` |
|
|
65
|
+
| `---` | Scene separator | Multi-scene |
|
|
66
|
+
|
|
67
|
+
## API
|
|
68
|
+
|
|
69
|
+
```javascript
|
|
70
|
+
import { parse, render, createUI, createUIOrThrow } from 'wyreframe';
|
|
71
|
+
|
|
72
|
+
// Parse only
|
|
73
|
+
const result = parse(text);
|
|
74
|
+
|
|
75
|
+
// Render only
|
|
76
|
+
const { root, sceneManager } = render(ast);
|
|
77
|
+
|
|
78
|
+
// Parse + Render (recommended)
|
|
79
|
+
const result = createUI(text);
|
|
80
|
+
|
|
81
|
+
// Throw on error
|
|
82
|
+
const { root, sceneManager } = createUIOrThrow(text);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### SceneManager
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
sceneManager.goto('dashboard'); // Navigate to scene
|
|
89
|
+
sceneManager.getCurrentScene(); // Get current scene
|
|
90
|
+
sceneManager.getSceneIds(); // Get all scene IDs
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Interactions
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
#email:
|
|
97
|
+
placeholder: "Email"
|
|
98
|
+
|
|
99
|
+
[Login]:
|
|
100
|
+
variant: primary
|
|
101
|
+
@click -> goto(dashboard, slide-left)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Transition effects:** `fade`, `slide-left`, `slide-right`, `zoom`
|
|
105
|
+
|
|
106
|
+
## Documentation
|
|
107
|
+
|
|
108
|
+
- [Parser Architecture](docs/PARSER_ARCHITECTURE.md)
|
|
109
|
+
- [Testing Guide](docs/TESTING.md)
|
|
110
|
+
- [Examples](examples/index.html)
|
|
111
|
+
|
|
112
|
+
## Development
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
npm install
|
|
116
|
+
npm run res:build # ReScript build
|
|
117
|
+
npm run dev # Dev server (http://localhost:3000/examples)
|
|
118
|
+
npm test # Run tests
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
MIT License
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wyreframe - ASCII Wireframe to HTML/UI Converter
|
|
3
|
+
*
|
|
4
|
+
* This module provides a TypeScript-friendly API wrapper
|
|
5
|
+
* around the ReScript parser implementation.
|
|
6
|
+
*/
|
|
7
|
+
/** Device type for responsive design */
|
|
8
|
+
export type DeviceType = 'desktop' | 'laptop' | 'tablet' | 'tablet-landscape' | 'mobile' | 'mobile-landscape';
|
|
9
|
+
/** Transition effect for scene changes */
|
|
10
|
+
export type TransitionType = 'fade' | 'slide-left' | 'slide-right' | 'zoom';
|
|
11
|
+
/** Text alignment */
|
|
12
|
+
export type Alignment = 'left' | 'center' | 'right';
|
|
13
|
+
/** Button variant styles */
|
|
14
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'ghost';
|
|
15
|
+
/** Action types for interactions */
|
|
16
|
+
export interface GotoAction {
|
|
17
|
+
type: 'goto';
|
|
18
|
+
target: string;
|
|
19
|
+
transition?: TransitionType;
|
|
20
|
+
}
|
|
21
|
+
export type Action = GotoAction;
|
|
22
|
+
/** UI Element types */
|
|
23
|
+
export interface BoxElement {
|
|
24
|
+
TAG: 'Box';
|
|
25
|
+
name?: string;
|
|
26
|
+
children: Element[];
|
|
27
|
+
}
|
|
28
|
+
export interface ButtonElement {
|
|
29
|
+
TAG: 'Button';
|
|
30
|
+
id: string;
|
|
31
|
+
text: string;
|
|
32
|
+
align: Alignment;
|
|
33
|
+
variant?: ButtonVariant;
|
|
34
|
+
actions: Action[];
|
|
35
|
+
}
|
|
36
|
+
export interface InputElement {
|
|
37
|
+
TAG: 'Input';
|
|
38
|
+
id: string;
|
|
39
|
+
placeholder?: string;
|
|
40
|
+
variant?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface LinkElement {
|
|
43
|
+
TAG: 'Link';
|
|
44
|
+
id: string;
|
|
45
|
+
text: string;
|
|
46
|
+
align: Alignment;
|
|
47
|
+
actions: Action[];
|
|
48
|
+
}
|
|
49
|
+
export interface TextElement {
|
|
50
|
+
TAG: 'Text';
|
|
51
|
+
content: string;
|
|
52
|
+
emphasis: boolean;
|
|
53
|
+
align: Alignment;
|
|
54
|
+
}
|
|
55
|
+
export interface CheckboxElement {
|
|
56
|
+
TAG: 'Checkbox';
|
|
57
|
+
checked: boolean;
|
|
58
|
+
label: string;
|
|
59
|
+
}
|
|
60
|
+
export interface DividerElement {
|
|
61
|
+
TAG: 'Divider';
|
|
62
|
+
}
|
|
63
|
+
export interface RowElement {
|
|
64
|
+
TAG: 'Row';
|
|
65
|
+
children: Element[];
|
|
66
|
+
align: Alignment;
|
|
67
|
+
}
|
|
68
|
+
export interface SectionElement {
|
|
69
|
+
TAG: 'Section';
|
|
70
|
+
name: string;
|
|
71
|
+
children: Element[];
|
|
72
|
+
}
|
|
73
|
+
export type Element = BoxElement | ButtonElement | InputElement | LinkElement | TextElement | CheckboxElement | DividerElement | RowElement | SectionElement;
|
|
74
|
+
/** Scene definition */
|
|
75
|
+
export interface Scene {
|
|
76
|
+
id: string;
|
|
77
|
+
title: string;
|
|
78
|
+
device: DeviceType;
|
|
79
|
+
transition: TransitionType;
|
|
80
|
+
elements: Element[];
|
|
81
|
+
}
|
|
82
|
+
/** Abstract Syntax Tree */
|
|
83
|
+
export interface AST {
|
|
84
|
+
scenes: Scene[];
|
|
85
|
+
}
|
|
86
|
+
/** Parse error information */
|
|
87
|
+
export interface ParseError {
|
|
88
|
+
message: string;
|
|
89
|
+
line?: number;
|
|
90
|
+
column?: number;
|
|
91
|
+
source?: string;
|
|
92
|
+
}
|
|
93
|
+
/** Scene manager for programmatic navigation */
|
|
94
|
+
export interface SceneManager {
|
|
95
|
+
/** Navigate to a scene by ID */
|
|
96
|
+
goto: (sceneId: string) => void;
|
|
97
|
+
/** Get the current scene ID */
|
|
98
|
+
getCurrentScene: () => string | undefined;
|
|
99
|
+
/** Get all available scene IDs */
|
|
100
|
+
getSceneIds: () => string[];
|
|
101
|
+
}
|
|
102
|
+
/** Render options */
|
|
103
|
+
export interface RenderOptions {
|
|
104
|
+
/** Theme name */
|
|
105
|
+
theme?: string;
|
|
106
|
+
/** Enable interactions (default: true) */
|
|
107
|
+
interactive?: boolean;
|
|
108
|
+
/** Inject default styles (default: true) */
|
|
109
|
+
injectStyles?: boolean;
|
|
110
|
+
/** Additional CSS class for container */
|
|
111
|
+
containerClass?: string;
|
|
112
|
+
}
|
|
113
|
+
/** Render result */
|
|
114
|
+
export interface RenderResult {
|
|
115
|
+
/** Rendered root element */
|
|
116
|
+
root: HTMLElement;
|
|
117
|
+
/** Scene manager for navigation */
|
|
118
|
+
sceneManager: SceneManager;
|
|
119
|
+
}
|
|
120
|
+
export type ParseSuccessResult = {
|
|
121
|
+
success: true;
|
|
122
|
+
ast: AST;
|
|
123
|
+
};
|
|
124
|
+
export type ParseErrorResult = {
|
|
125
|
+
success: false;
|
|
126
|
+
errors: ParseError[];
|
|
127
|
+
};
|
|
128
|
+
export type ParseResult = ParseSuccessResult | ParseErrorResult;
|
|
129
|
+
export type InteractionSuccessResult = {
|
|
130
|
+
success: true;
|
|
131
|
+
interactions: unknown[];
|
|
132
|
+
};
|
|
133
|
+
export type InteractionErrorResult = {
|
|
134
|
+
success: false;
|
|
135
|
+
errors: ParseError[];
|
|
136
|
+
};
|
|
137
|
+
export type InteractionResult = InteractionSuccessResult | InteractionErrorResult;
|
|
138
|
+
export type CreateUISuccessResult = {
|
|
139
|
+
success: true;
|
|
140
|
+
root: HTMLElement;
|
|
141
|
+
sceneManager: SceneManager;
|
|
142
|
+
ast: AST;
|
|
143
|
+
};
|
|
144
|
+
export type CreateUIErrorResult = {
|
|
145
|
+
success: false;
|
|
146
|
+
errors: ParseError[];
|
|
147
|
+
};
|
|
148
|
+
export type CreateUIResult = CreateUISuccessResult | CreateUIErrorResult;
|
|
149
|
+
/**
|
|
150
|
+
* Parse mixed text containing wireframe and interactions.
|
|
151
|
+
*
|
|
152
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
153
|
+
* @returns Parse result with success flag
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const result = parse(text);
|
|
158
|
+
* if (result.success) {
|
|
159
|
+
* const { root, sceneManager } = render(result.ast);
|
|
160
|
+
* document.body.appendChild(root);
|
|
161
|
+
* } else {
|
|
162
|
+
* console.error(result.errors);
|
|
163
|
+
* }
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export declare function parse(text: string): ParseResult;
|
|
167
|
+
/**
|
|
168
|
+
* Parse text and throw on error.
|
|
169
|
+
* Use this for simpler code when you expect parsing to succeed.
|
|
170
|
+
*
|
|
171
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
172
|
+
* @returns Parsed AST
|
|
173
|
+
* @throws Error if parsing fails
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* try {
|
|
178
|
+
* const ast = parseOrThrow(text);
|
|
179
|
+
* const { root } = render(ast);
|
|
180
|
+
* document.body.appendChild(root);
|
|
181
|
+
* } catch (error) {
|
|
182
|
+
* console.error('Parse failed:', error.message);
|
|
183
|
+
* }
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
export declare function parseOrThrow(text: string): AST;
|
|
187
|
+
/**
|
|
188
|
+
* Parse only the wireframe structure (no interactions).
|
|
189
|
+
*
|
|
190
|
+
* @param wireframe - ASCII wireframe string
|
|
191
|
+
* @returns Parse result with success flag
|
|
192
|
+
*/
|
|
193
|
+
export declare function parseWireframe(wireframe: string): ParseResult;
|
|
194
|
+
/**
|
|
195
|
+
* Parse only the interaction DSL.
|
|
196
|
+
*
|
|
197
|
+
* @param dsl - Interaction DSL string
|
|
198
|
+
* @returns Interaction result with success flag
|
|
199
|
+
*/
|
|
200
|
+
export declare function parseInteractions(dsl: string): InteractionResult;
|
|
201
|
+
/**
|
|
202
|
+
* Render AST to DOM elements.
|
|
203
|
+
*
|
|
204
|
+
* @param ast - Parsed AST from parse()
|
|
205
|
+
* @param options - Render options
|
|
206
|
+
* @returns Render result with root element and scene manager
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* const { root, sceneManager } = render(ast);
|
|
211
|
+
* document.getElementById('app')!.appendChild(root);
|
|
212
|
+
*
|
|
213
|
+
* // Navigate between scenes
|
|
214
|
+
* sceneManager.goto('dashboard');
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
export declare function render(ast: AST, options?: RenderOptions): RenderResult;
|
|
218
|
+
/**
|
|
219
|
+
* Parse and render in one step.
|
|
220
|
+
* Convenience function that combines parse() and render().
|
|
221
|
+
*
|
|
222
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
223
|
+
* @param options - Render options
|
|
224
|
+
* @returns Create UI result with success flag
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* const result = createUI(text);
|
|
229
|
+
* if (result.success) {
|
|
230
|
+
* document.getElementById('app')!.appendChild(result.root);
|
|
231
|
+
* result.sceneManager.goto('login');
|
|
232
|
+
* }
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
export declare function createUI(text: string, options?: RenderOptions): CreateUIResult;
|
|
236
|
+
/**
|
|
237
|
+
* Parse and render, throwing on error.
|
|
238
|
+
*
|
|
239
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
240
|
+
* @param options - Render options
|
|
241
|
+
* @returns Render result with root element, scene manager, and AST
|
|
242
|
+
* @throws Error if parsing fails
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* const { root, sceneManager } = createUIOrThrow(text);
|
|
247
|
+
* document.getElementById('app')!.appendChild(root);
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
export declare function createUIOrThrow(text: string, options?: RenderOptions): RenderResult & {
|
|
251
|
+
ast: AST;
|
|
252
|
+
};
|
|
253
|
+
export declare const version: string;
|
|
254
|
+
export declare const implementation: string;
|
|
255
|
+
declare const _default: {
|
|
256
|
+
parse: typeof parse;
|
|
257
|
+
parseOrThrow: typeof parseOrThrow;
|
|
258
|
+
parseWireframe: typeof parseWireframe;
|
|
259
|
+
parseInteractions: typeof parseInteractions;
|
|
260
|
+
render: typeof render;
|
|
261
|
+
createUI: typeof createUI;
|
|
262
|
+
createUIOrThrow: typeof createUIOrThrow;
|
|
263
|
+
version: string;
|
|
264
|
+
implementation: string;
|
|
265
|
+
};
|
|
266
|
+
export default _default;
|
|
267
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wyreframe - ASCII Wireframe to HTML/UI Converter
|
|
3
|
+
*
|
|
4
|
+
* This module provides a TypeScript-friendly API wrapper
|
|
5
|
+
* around the ReScript parser implementation.
|
|
6
|
+
*/
|
|
7
|
+
// Note: These imports use relative paths that work when compiled to dist/
|
|
8
|
+
// The ReScript .mjs files remain in src/parser/, so dist/index.js imports ../src/parser/
|
|
9
|
+
// @ts-ignore - ReScript generated module
|
|
10
|
+
import * as Parser from '../src/parser/Parser.mjs';
|
|
11
|
+
// @ts-ignore - ReScript generated module
|
|
12
|
+
import * as Renderer from '../src/renderer/Renderer.mjs';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// API Functions
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Parse mixed text containing wireframe and interactions.
|
|
18
|
+
*
|
|
19
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
20
|
+
* @returns Parse result with success flag
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const result = parse(text);
|
|
25
|
+
* if (result.success) {
|
|
26
|
+
* const { root, sceneManager } = render(result.ast);
|
|
27
|
+
* document.body.appendChild(root);
|
|
28
|
+
* } else {
|
|
29
|
+
* console.error(result.errors);
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function parse(text) {
|
|
34
|
+
const result = Parser.parse(text);
|
|
35
|
+
if (result.TAG === 'Ok') {
|
|
36
|
+
return { success: true, ast: result._0 };
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return { success: false, errors: result._0 };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parse text and throw on error.
|
|
44
|
+
* Use this for simpler code when you expect parsing to succeed.
|
|
45
|
+
*
|
|
46
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
47
|
+
* @returns Parsed AST
|
|
48
|
+
* @throws Error if parsing fails
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* try {
|
|
53
|
+
* const ast = parseOrThrow(text);
|
|
54
|
+
* const { root } = render(ast);
|
|
55
|
+
* document.body.appendChild(root);
|
|
56
|
+
* } catch (error) {
|
|
57
|
+
* console.error('Parse failed:', error.message);
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export function parseOrThrow(text) {
|
|
62
|
+
const result = parse(text);
|
|
63
|
+
if (result.success) {
|
|
64
|
+
return result.ast;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const errorMessages = result.errors
|
|
68
|
+
.map((e) => e.message || JSON.stringify(e))
|
|
69
|
+
.join('\n');
|
|
70
|
+
throw new Error(`Parse failed:\n${errorMessages}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parse only the wireframe structure (no interactions).
|
|
75
|
+
*
|
|
76
|
+
* @param wireframe - ASCII wireframe string
|
|
77
|
+
* @returns Parse result with success flag
|
|
78
|
+
*/
|
|
79
|
+
export function parseWireframe(wireframe) {
|
|
80
|
+
const result = Parser.parseWireframe(wireframe);
|
|
81
|
+
if (result.TAG === 'Ok') {
|
|
82
|
+
return { success: true, ast: result._0 };
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
return { success: false, errors: result._0 };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Parse only the interaction DSL.
|
|
90
|
+
*
|
|
91
|
+
* @param dsl - Interaction DSL string
|
|
92
|
+
* @returns Interaction result with success flag
|
|
93
|
+
*/
|
|
94
|
+
export function parseInteractions(dsl) {
|
|
95
|
+
const result = Parser.parseInteractions(dsl);
|
|
96
|
+
if (result.TAG === 'Ok') {
|
|
97
|
+
return { success: true, interactions: result._0 };
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return { success: false, errors: result._0 };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Render AST to DOM elements.
|
|
105
|
+
*
|
|
106
|
+
* @param ast - Parsed AST from parse()
|
|
107
|
+
* @param options - Render options
|
|
108
|
+
* @returns Render result with root element and scene manager
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const { root, sceneManager } = render(ast);
|
|
113
|
+
* document.getElementById('app')!.appendChild(root);
|
|
114
|
+
*
|
|
115
|
+
* // Navigate between scenes
|
|
116
|
+
* sceneManager.goto('dashboard');
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export function render(ast, options) {
|
|
120
|
+
// Pass undefined if no options, so ReScript uses its defaults
|
|
121
|
+
const result = Renderer.render(ast, options);
|
|
122
|
+
return {
|
|
123
|
+
root: result.root,
|
|
124
|
+
sceneManager: {
|
|
125
|
+
goto: result.sceneManager.goto,
|
|
126
|
+
getCurrentScene: result.sceneManager.getCurrentScene,
|
|
127
|
+
getSceneIds: result.sceneManager.getSceneIds,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Parse and render in one step.
|
|
133
|
+
* Convenience function that combines parse() and render().
|
|
134
|
+
*
|
|
135
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
136
|
+
* @param options - Render options
|
|
137
|
+
* @returns Create UI result with success flag
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* const result = createUI(text);
|
|
142
|
+
* if (result.success) {
|
|
143
|
+
* document.getElementById('app')!.appendChild(result.root);
|
|
144
|
+
* result.sceneManager.goto('login');
|
|
145
|
+
* }
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export function createUI(text, options) {
|
|
149
|
+
const parseResult = parse(text);
|
|
150
|
+
if (!parseResult.success) {
|
|
151
|
+
return parseResult;
|
|
152
|
+
}
|
|
153
|
+
const { root, sceneManager } = render(parseResult.ast, options);
|
|
154
|
+
return {
|
|
155
|
+
success: true,
|
|
156
|
+
root,
|
|
157
|
+
sceneManager,
|
|
158
|
+
ast: parseResult.ast,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Parse and render, throwing on error.
|
|
163
|
+
*
|
|
164
|
+
* @param text - Text containing ASCII wireframe and/or interaction DSL
|
|
165
|
+
* @param options - Render options
|
|
166
|
+
* @returns Render result with root element, scene manager, and AST
|
|
167
|
+
* @throws Error if parsing fails
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* const { root, sceneManager } = createUIOrThrow(text);
|
|
172
|
+
* document.getElementById('app')!.appendChild(root);
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
export function createUIOrThrow(text, options) {
|
|
176
|
+
const ast = parseOrThrow(text);
|
|
177
|
+
const { root, sceneManager } = render(ast, options);
|
|
178
|
+
return { root, sceneManager, ast };
|
|
179
|
+
}
|
|
180
|
+
// Version info
|
|
181
|
+
export const version = Parser.version;
|
|
182
|
+
export const implementation = Parser.implementation;
|
|
183
|
+
// Default export for convenience
|
|
184
|
+
export default {
|
|
185
|
+
parse,
|
|
186
|
+
parseOrThrow,
|
|
187
|
+
parseWireframe,
|
|
188
|
+
parseInteractions,
|
|
189
|
+
render,
|
|
190
|
+
createUI,
|
|
191
|
+
createUIOrThrow,
|
|
192
|
+
version,
|
|
193
|
+
implementation,
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "wyreframe",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "ASCII wireframe + interaction DSL to HTML converter with scene transitions",
|
|
5
|
+
"author": "wickedev",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/wickedev/wyreframe.git"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"module": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"src/parser",
|
|
17
|
+
"src/renderer",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"import": "./dist/index.js",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./parser": {
|
|
27
|
+
"import": "./src/parser/Parser.mjs"
|
|
28
|
+
},
|
|
29
|
+
"./renderer": {
|
|
30
|
+
"import": "./src/renderer/Renderer.mjs"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"dev": "npx serve .",
|
|
35
|
+
"build": "npm run res:build && npm run ts:build",
|
|
36
|
+
"ts:build": "tsc",
|
|
37
|
+
"ts:watch": "tsc --watch",
|
|
38
|
+
"test": "vitest run",
|
|
39
|
+
"test:watch": "vitest",
|
|
40
|
+
"test:coverage": "vitest run --coverage",
|
|
41
|
+
"res:build": "rescript",
|
|
42
|
+
"res:watch": "rescript build -w",
|
|
43
|
+
"res:clean": "rescript clean",
|
|
44
|
+
"prepublishOnly": "npm run build"
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"wireframe",
|
|
48
|
+
"ascii",
|
|
49
|
+
"dsl",
|
|
50
|
+
"html",
|
|
51
|
+
"prototype"
|
|
52
|
+
],
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@rescript/core": "^1.6.1",
|
|
56
|
+
"rescript": "12",
|
|
57
|
+
"vitest": "^3.2.4"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"rescript-vitest": "^2.1.1",
|
|
61
|
+
"typescript": "^5.9.3"
|
|
62
|
+
}
|
|
63
|
+
}
|