@wireweave/core 1.1.0-beta.0 → 1.2.0-beta.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.
@@ -183,7 +183,23 @@ declare abstract class BaseRenderer {
183
183
  * Renders wireframe AST to semantic HTML with utility classes
184
184
  */
185
185
  declare class HtmlRenderer extends BaseRenderer {
186
+ /**
187
+ * Node type to renderer method mapping
188
+ */
189
+ private readonly nodeRenderers;
186
190
  constructor(options?: RenderOptions);
191
+ /**
192
+ * Get render context for external renderer functions
193
+ */
194
+ private getRenderContext;
195
+ /**
196
+ * Get grid render context (extends RenderContext with buildColStyles)
197
+ */
198
+ private getGridRenderContext;
199
+ /**
200
+ * Create the node renderer mapping
201
+ */
202
+ private createNodeRenderers;
187
203
  /**
188
204
  * Render a page node
189
205
  */
@@ -231,6 +247,26 @@ declare class HtmlRenderer extends BaseRenderer {
231
247
  * Uses Omit to exclude 'align' since TextNode/TitleNode have incompatible align types
232
248
  */
233
249
  private buildCommonStyles;
250
+ /**
251
+ * Build position styles (absolute positioning)
252
+ */
253
+ private buildPositionStyles;
254
+ /**
255
+ * Build size styles (width, height, min/max)
256
+ */
257
+ private buildSizeStyles;
258
+ /**
259
+ * Build padding styles (p, px, py, pt, pr, pb, pl)
260
+ */
261
+ private buildPaddingStyles;
262
+ /**
263
+ * Build margin styles (m, mx, my, mt, mr, mb, ml)
264
+ */
265
+ private buildMarginStyles;
266
+ /**
267
+ * Build gap styles
268
+ */
269
+ private buildGapStyles;
234
270
  /**
235
271
  * Build inline styles for Col node (extends common styles with order)
236
272
  */
@@ -265,178 +301,15 @@ declare class HtmlRenderer extends BaseRenderer {
265
301
  private renderPopover;
266
302
  private renderDropdown;
267
303
  private renderNav;
268
- private renderNavChildren;
269
- private renderNavItem;
270
- private renderIconHtml;
271
304
  private renderTabs;
272
305
  private renderBreadcrumb;
273
306
  private renderDivider;
274
- /**
275
- * Parse and render semantic markers in text content
276
- *
277
- * Semantic markers use the syntax [component:variant] to indicate
278
- * what a visual element represents. This helps LLMs understand
279
- * the meaning of placeholder content.
280
- *
281
- * Supported markers:
282
- * - [avatar] or [avatar:size] - User avatar (renders as circle placeholder)
283
- * - [badge:variant] TEXT - Status badge (TEXT is displayed inside the badge)
284
- * - [dot:variant] - Status dot (renders as small circle before text)
285
- * - [icon:name] - Icon placeholder
286
- *
287
- * Examples:
288
- * - "[avatar] John Doe" → renders avatar circle + "John Doe"
289
- * - "[badge:primary] PRO" → renders badge containing "PRO"
290
- * - "[dot:success] Active" → renders green dot + "Active"
291
- */
292
- private renderSemanticMarkers;
293
- /**
294
- * Render a single semantic marker to HTML (without content)
295
- */
296
- private renderSemanticMarker;
297
- /**
298
- * Render a semantic marker with text content (for badge)
299
- */
300
- private renderSemanticMarkerWithContent;
301
- /**
302
- * Process table cell content with semantic markers and newlines
303
- *
304
- * Special handling for avatar + text layout:
305
- * When content starts with [avatar], wraps in flex container
306
- * so avatar and text align horizontally, with text stacking vertically
307
- */
308
- private renderTableCellContent;
309
307
  }
310
308
  /**
311
309
  * Create a new HTML renderer instance
312
310
  */
313
311
  declare function createHtmlRenderer(options?: RenderOptions): HtmlRenderer;
314
312
 
315
- /**
316
- * SVG Renderer for wireweave
317
- *
318
- * A proper layout engine that renders wireframe AST to SVG image format
319
- * with correct flexbox-like layout calculations.
320
- */
321
-
322
- declare class SvgRenderer {
323
- private options;
324
- private theme;
325
- private pageWidth;
326
- private pageHeight;
327
- private clipPathDefs;
328
- private clipPathCounter;
329
- private readonly DEFAULT_GAP;
330
- constructor(options?: SvgRenderOptions);
331
- /**
332
- * Render a wireframe document to SVG
333
- */
334
- render(doc: WireframeDocument): SvgRenderResult;
335
- /**
336
- * Generate SVG defs (styles)
337
- */
338
- private generateDefs;
339
- private renderPage;
340
- /**
341
- * Render page with fixed header/footer layout
342
- * Header at top, Footer at bottom, Main fills remaining space
343
- */
344
- private renderPageWithFixedLayout;
345
- private shouldCenterHorizontally;
346
- private measureNode;
347
- private measureRow;
348
- private measureCol;
349
- private measureHeader;
350
- private measureFooter;
351
- private measureMain;
352
- private measureSidebar;
353
- private measureCard;
354
- private measureModal;
355
- private measureTitle;
356
- private measureText;
357
- private measureButton;
358
- private measureInput;
359
- private measureTextarea;
360
- private measureSelect;
361
- private measureCheckbox;
362
- private measureRadio;
363
- private measureSwitch;
364
- private measureLink;
365
- private measureImage;
366
- private measurePlaceholder;
367
- private measureAvatar;
368
- private measureBadge;
369
- private measureTable;
370
- private measureList;
371
- private measureAlert;
372
- private measureProgress;
373
- private measureSpinner;
374
- private measureNav;
375
- private measureTabs;
376
- private measureBreadcrumb;
377
- private measureIcon;
378
- private measureDivider;
379
- private layoutNode;
380
- private layoutRow;
381
- private layoutCol;
382
- private rowContainsSidebarOrMain;
383
- private layoutHeader;
384
- private adjustChildrenY;
385
- /**
386
- * Check if a node should flex to fill available space in a Row
387
- * Only layout containers without explicit width should flex
388
- */
389
- private isFlexContainer;
390
- private layoutFooter;
391
- private layoutMain;
392
- private layoutSidebar;
393
- private layoutCard;
394
- private renderBox;
395
- private renderRowBox;
396
- private renderColBox;
397
- private renderHeaderBox;
398
- private renderFooterBox;
399
- private renderMainBox;
400
- private renderSidebarBox;
401
- private renderCardBox;
402
- private renderModalBox;
403
- private renderTitleBox;
404
- private renderTextBox;
405
- private renderButtonBox;
406
- private renderInputBox;
407
- private renderTextareaBox;
408
- private renderSelectBox;
409
- private renderCheckboxBox;
410
- private renderRadioBox;
411
- private renderSwitchBox;
412
- private renderLinkBox;
413
- private renderImageBox;
414
- private renderPlaceholderBox;
415
- private renderAvatarBox;
416
- private renderBadgeBox;
417
- private renderTableBox;
418
- private renderListBox;
419
- private renderAlertBox;
420
- private renderProgressBox;
421
- private renderSpinnerBox;
422
- private renderNavBox;
423
- private renderTabsBox;
424
- private renderBreadcrumbBox;
425
- private renderIconBox;
426
- private renderDividerBox;
427
- private renderIconPaths;
428
- private getPadding;
429
- private getGap;
430
- private resolveSpacing;
431
- private resolveSize;
432
- private isFullWidth;
433
- private estimateTextWidth;
434
- private resolveFontSize;
435
- private getTitleFontSize;
436
- private escapeXml;
437
- }
438
- declare function createSvgRenderer(options?: SvgRenderOptions): SvgRenderer;
439
-
440
313
  /**
441
314
  * CSS Style Generator for wireweave
442
315
  *
@@ -529,16 +402,5 @@ declare function renderToHtml(document: WireframeDocument, options?: RenderOptio
529
402
  * @returns Object containing SVG string and dimensions
530
403
  */
531
404
  declare function renderToSvg(document: WireframeDocument, options?: SvgRenderOptions): SvgRenderResult;
532
- /**
533
- * Render AST to pure SVG (without foreignObject)
534
- *
535
- * This uses the original SVG renderer with manual layout calculations.
536
- * Use this when foreignObject is not supported.
537
- *
538
- * @param document - Parsed wireframe document
539
- * @param options - SVG render options
540
- * @returns Object containing SVG string and dimensions
541
- */
542
- declare function renderToPureSvg(document: WireframeDocument, options?: SvgRenderOptions): SvgRenderResult;
543
405
 
544
- export { HtmlRenderer, type IconData, type IconElement, type RenderContext, type RenderOptions, type RenderResult, type SvgRenderOptions, type SvgRenderResult, SvgRenderer, type ThemeColors, type ThemeConfig, createHtmlRenderer, createSvgRenderer, darkTheme, defaultTheme, generateComponentStyles, generateStyles, getIconData, getTheme, lucideIcons, render, renderIconSvg, renderToHtml, renderToPureSvg, renderToSvg };
406
+ export { HtmlRenderer, type IconData, type IconElement, type RenderContext, type RenderOptions, type RenderResult, type SvgRenderOptions, type SvgRenderResult, type ThemeColors, type ThemeConfig, createHtmlRenderer, darkTheme, defaultTheme, generateComponentStyles, generateStyles, getIconData, getTheme, lucideIcons, render, renderIconSvg, renderToHtml, renderToSvg };
@@ -183,7 +183,23 @@ declare abstract class BaseRenderer {
183
183
  * Renders wireframe AST to semantic HTML with utility classes
184
184
  */
185
185
  declare class HtmlRenderer extends BaseRenderer {
186
+ /**
187
+ * Node type to renderer method mapping
188
+ */
189
+ private readonly nodeRenderers;
186
190
  constructor(options?: RenderOptions);
191
+ /**
192
+ * Get render context for external renderer functions
193
+ */
194
+ private getRenderContext;
195
+ /**
196
+ * Get grid render context (extends RenderContext with buildColStyles)
197
+ */
198
+ private getGridRenderContext;
199
+ /**
200
+ * Create the node renderer mapping
201
+ */
202
+ private createNodeRenderers;
187
203
  /**
188
204
  * Render a page node
189
205
  */
@@ -231,6 +247,26 @@ declare class HtmlRenderer extends BaseRenderer {
231
247
  * Uses Omit to exclude 'align' since TextNode/TitleNode have incompatible align types
232
248
  */
233
249
  private buildCommonStyles;
250
+ /**
251
+ * Build position styles (absolute positioning)
252
+ */
253
+ private buildPositionStyles;
254
+ /**
255
+ * Build size styles (width, height, min/max)
256
+ */
257
+ private buildSizeStyles;
258
+ /**
259
+ * Build padding styles (p, px, py, pt, pr, pb, pl)
260
+ */
261
+ private buildPaddingStyles;
262
+ /**
263
+ * Build margin styles (m, mx, my, mt, mr, mb, ml)
264
+ */
265
+ private buildMarginStyles;
266
+ /**
267
+ * Build gap styles
268
+ */
269
+ private buildGapStyles;
234
270
  /**
235
271
  * Build inline styles for Col node (extends common styles with order)
236
272
  */
@@ -265,178 +301,15 @@ declare class HtmlRenderer extends BaseRenderer {
265
301
  private renderPopover;
266
302
  private renderDropdown;
267
303
  private renderNav;
268
- private renderNavChildren;
269
- private renderNavItem;
270
- private renderIconHtml;
271
304
  private renderTabs;
272
305
  private renderBreadcrumb;
273
306
  private renderDivider;
274
- /**
275
- * Parse and render semantic markers in text content
276
- *
277
- * Semantic markers use the syntax [component:variant] to indicate
278
- * what a visual element represents. This helps LLMs understand
279
- * the meaning of placeholder content.
280
- *
281
- * Supported markers:
282
- * - [avatar] or [avatar:size] - User avatar (renders as circle placeholder)
283
- * - [badge:variant] TEXT - Status badge (TEXT is displayed inside the badge)
284
- * - [dot:variant] - Status dot (renders as small circle before text)
285
- * - [icon:name] - Icon placeholder
286
- *
287
- * Examples:
288
- * - "[avatar] John Doe" → renders avatar circle + "John Doe"
289
- * - "[badge:primary] PRO" → renders badge containing "PRO"
290
- * - "[dot:success] Active" → renders green dot + "Active"
291
- */
292
- private renderSemanticMarkers;
293
- /**
294
- * Render a single semantic marker to HTML (without content)
295
- */
296
- private renderSemanticMarker;
297
- /**
298
- * Render a semantic marker with text content (for badge)
299
- */
300
- private renderSemanticMarkerWithContent;
301
- /**
302
- * Process table cell content with semantic markers and newlines
303
- *
304
- * Special handling for avatar + text layout:
305
- * When content starts with [avatar], wraps in flex container
306
- * so avatar and text align horizontally, with text stacking vertically
307
- */
308
- private renderTableCellContent;
309
307
  }
310
308
  /**
311
309
  * Create a new HTML renderer instance
312
310
  */
313
311
  declare function createHtmlRenderer(options?: RenderOptions): HtmlRenderer;
314
312
 
315
- /**
316
- * SVG Renderer for wireweave
317
- *
318
- * A proper layout engine that renders wireframe AST to SVG image format
319
- * with correct flexbox-like layout calculations.
320
- */
321
-
322
- declare class SvgRenderer {
323
- private options;
324
- private theme;
325
- private pageWidth;
326
- private pageHeight;
327
- private clipPathDefs;
328
- private clipPathCounter;
329
- private readonly DEFAULT_GAP;
330
- constructor(options?: SvgRenderOptions);
331
- /**
332
- * Render a wireframe document to SVG
333
- */
334
- render(doc: WireframeDocument): SvgRenderResult;
335
- /**
336
- * Generate SVG defs (styles)
337
- */
338
- private generateDefs;
339
- private renderPage;
340
- /**
341
- * Render page with fixed header/footer layout
342
- * Header at top, Footer at bottom, Main fills remaining space
343
- */
344
- private renderPageWithFixedLayout;
345
- private shouldCenterHorizontally;
346
- private measureNode;
347
- private measureRow;
348
- private measureCol;
349
- private measureHeader;
350
- private measureFooter;
351
- private measureMain;
352
- private measureSidebar;
353
- private measureCard;
354
- private measureModal;
355
- private measureTitle;
356
- private measureText;
357
- private measureButton;
358
- private measureInput;
359
- private measureTextarea;
360
- private measureSelect;
361
- private measureCheckbox;
362
- private measureRadio;
363
- private measureSwitch;
364
- private measureLink;
365
- private measureImage;
366
- private measurePlaceholder;
367
- private measureAvatar;
368
- private measureBadge;
369
- private measureTable;
370
- private measureList;
371
- private measureAlert;
372
- private measureProgress;
373
- private measureSpinner;
374
- private measureNav;
375
- private measureTabs;
376
- private measureBreadcrumb;
377
- private measureIcon;
378
- private measureDivider;
379
- private layoutNode;
380
- private layoutRow;
381
- private layoutCol;
382
- private rowContainsSidebarOrMain;
383
- private layoutHeader;
384
- private adjustChildrenY;
385
- /**
386
- * Check if a node should flex to fill available space in a Row
387
- * Only layout containers without explicit width should flex
388
- */
389
- private isFlexContainer;
390
- private layoutFooter;
391
- private layoutMain;
392
- private layoutSidebar;
393
- private layoutCard;
394
- private renderBox;
395
- private renderRowBox;
396
- private renderColBox;
397
- private renderHeaderBox;
398
- private renderFooterBox;
399
- private renderMainBox;
400
- private renderSidebarBox;
401
- private renderCardBox;
402
- private renderModalBox;
403
- private renderTitleBox;
404
- private renderTextBox;
405
- private renderButtonBox;
406
- private renderInputBox;
407
- private renderTextareaBox;
408
- private renderSelectBox;
409
- private renderCheckboxBox;
410
- private renderRadioBox;
411
- private renderSwitchBox;
412
- private renderLinkBox;
413
- private renderImageBox;
414
- private renderPlaceholderBox;
415
- private renderAvatarBox;
416
- private renderBadgeBox;
417
- private renderTableBox;
418
- private renderListBox;
419
- private renderAlertBox;
420
- private renderProgressBox;
421
- private renderSpinnerBox;
422
- private renderNavBox;
423
- private renderTabsBox;
424
- private renderBreadcrumbBox;
425
- private renderIconBox;
426
- private renderDividerBox;
427
- private renderIconPaths;
428
- private getPadding;
429
- private getGap;
430
- private resolveSpacing;
431
- private resolveSize;
432
- private isFullWidth;
433
- private estimateTextWidth;
434
- private resolveFontSize;
435
- private getTitleFontSize;
436
- private escapeXml;
437
- }
438
- declare function createSvgRenderer(options?: SvgRenderOptions): SvgRenderer;
439
-
440
313
  /**
441
314
  * CSS Style Generator for wireweave
442
315
  *
@@ -529,16 +402,5 @@ declare function renderToHtml(document: WireframeDocument, options?: RenderOptio
529
402
  * @returns Object containing SVG string and dimensions
530
403
  */
531
404
  declare function renderToSvg(document: WireframeDocument, options?: SvgRenderOptions): SvgRenderResult;
532
- /**
533
- * Render AST to pure SVG (without foreignObject)
534
- *
535
- * This uses the original SVG renderer with manual layout calculations.
536
- * Use this when foreignObject is not supported.
537
- *
538
- * @param document - Parsed wireframe document
539
- * @param options - SVG render options
540
- * @returns Object containing SVG string and dimensions
541
- */
542
- declare function renderToPureSvg(document: WireframeDocument, options?: SvgRenderOptions): SvgRenderResult;
543
405
 
544
- export { HtmlRenderer, type IconData, type IconElement, type RenderContext, type RenderOptions, type RenderResult, type SvgRenderOptions, type SvgRenderResult, SvgRenderer, type ThemeColors, type ThemeConfig, createHtmlRenderer, createSvgRenderer, darkTheme, defaultTheme, generateComponentStyles, generateStyles, getIconData, getTheme, lucideIcons, render, renderIconSvg, renderToHtml, renderToPureSvg, renderToSvg };
406
+ export { HtmlRenderer, type IconData, type IconElement, type RenderContext, type RenderOptions, type RenderResult, type SvgRenderOptions, type SvgRenderResult, type ThemeColors, type ThemeConfig, createHtmlRenderer, darkTheme, defaultTheme, generateComponentStyles, generateStyles, getIconData, getTheme, lucideIcons, render, renderIconSvg, renderToHtml, renderToSvg };