@wireweave/core 1.0.0-beta.20260107134058 → 1.1.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.
@@ -1,4 +1,4 @@
1
- import { a1 as WireframeDocument, A as AnyNode, P as PageNode } from './types-DtovIYS6.cjs';
1
+ import { a1 as WireframeDocument, A as AnyNode, P as PageNode } from './types-lcJzPcR0.cjs';
2
2
 
3
3
  /**
4
4
  * Renderer type definitions for wireweave
@@ -214,6 +214,10 @@ declare class HtmlRenderer extends BaseRenderer {
214
214
  /**
215
215
  * Build common inline styles for all values
216
216
  *
217
+ * Position values (x, y) for absolute positioning:
218
+ * - When x or y is specified, element gets position: absolute
219
+ * - x → left, y → top
220
+ *
217
221
  * Spacing values (p, m, gap) use token system:
218
222
  * - number: spacing token (e.g., p=4 → padding: 16px from token table)
219
223
  * - ValueWithUnit: direct CSS value (e.g., p=16px → padding: 16px)
@@ -261,6 +265,9 @@ declare class HtmlRenderer extends BaseRenderer {
261
265
  private renderPopover;
262
266
  private renderDropdown;
263
267
  private renderNav;
268
+ private renderNavChildren;
269
+ private renderNavItem;
270
+ private renderIconHtml;
264
271
  private renderTabs;
265
272
  private renderBreadcrumb;
266
273
  private renderDivider;
@@ -308,83 +315,126 @@ declare function createHtmlRenderer(options?: RenderOptions): HtmlRenderer;
308
315
  /**
309
316
  * SVG Renderer for wireweave
310
317
  *
311
- * Renders wireframe AST to SVG image format
318
+ * A proper layout engine that renders wireframe AST to SVG image format
319
+ * with correct flexbox-like layout calculations.
312
320
  */
313
321
 
314
- /**
315
- * SVG Renderer class
316
- *
317
- * Renders wireframe AST nodes to SVG elements
318
- */
319
322
  declare class SvgRenderer {
320
323
  private options;
321
324
  private theme;
322
- private currentX;
323
- private currentY;
324
- private contentWidth;
325
+ private pageWidth;
326
+ private pageHeight;
327
+ private clipPathDefs;
328
+ private clipPathCounter;
329
+ private readonly DEFAULT_GAP;
325
330
  constructor(options?: SvgRenderOptions);
326
331
  /**
327
332
  * Render a wireframe document to SVG
328
333
  */
329
334
  render(doc: WireframeDocument): SvgRenderResult;
330
335
  /**
331
- * Generate SVG defs (styles, patterns, etc.)
336
+ * Generate SVG defs (styles)
332
337
  */
333
338
  private generateDefs;
334
- /**
335
- * Render a page node
336
- */
337
339
  private renderPage;
338
340
  /**
339
- * Render page title
341
+ * Render page with fixed header/footer layout
342
+ * Header at top, Footer at bottom, Main fills remaining space
340
343
  */
341
- private renderPageTitle;
342
- /**
343
- * Render any AST node
344
- */
345
- private renderNode;
346
- private renderRow;
347
- private renderCol;
348
- private renderHeader;
349
- private renderMain;
350
- private renderFooter;
351
- private renderSidebar;
352
- private renderCard;
353
- private renderModal;
354
- private renderText;
355
- private renderTitle;
356
- private renderLink;
357
- private renderInput;
358
- private renderTextarea;
359
- private renderSelect;
360
- private renderCheckbox;
361
- private renderRadio;
362
- private renderSwitch;
363
- private renderButton;
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;
364
385
  /**
365
- * Render icon paths for SVG
386
+ * Check if a node should flex to fill available space in a Row
387
+ * Only layout containers without explicit width should flex
366
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;
367
427
  private renderIconPaths;
368
- private renderImage;
369
- private renderPlaceholder;
370
- private renderAvatar;
371
- private renderBadge;
372
- private renderTable;
373
- private renderList;
374
- private renderAlert;
375
- private renderProgress;
376
- private renderSpinner;
377
- private renderNav;
378
- private renderTabs;
379
- private renderBreadcrumb;
380
- private getFontSize;
428
+ private getPadding;
429
+ private getGap;
430
+ private resolveSpacing;
431
+ private resolveSize;
432
+ private isFullWidth;
433
+ private estimateTextWidth;
381
434
  private resolveFontSize;
382
435
  private getTitleFontSize;
383
436
  private escapeXml;
384
437
  }
385
- /**
386
- * Create a new SVG renderer instance
387
- */
388
438
  declare function createSvgRenderer(options?: SvgRenderOptions): SvgRenderer;
389
439
 
390
440
  /**
@@ -439,9 +489,6 @@ declare function generateComponentStyles(_theme: ThemeConfig, prefix?: string):
439
489
  type IconElement = [string, Record<string, string>];
440
490
  type IconData = IconElement[];
441
491
  declare const lucideIcons: Record<string, IconData>;
442
- /**
443
- * Get icon data by name
444
- */
445
492
  declare function getIconData(name: string): IconData | undefined;
446
493
  /**
447
494
  * Render icon data to SVG string
@@ -1,4 +1,4 @@
1
- import { a1 as WireframeDocument, A as AnyNode, P as PageNode } from './types-DtovIYS6.js';
1
+ import { a1 as WireframeDocument, A as AnyNode, P as PageNode } from './types-lcJzPcR0.js';
2
2
 
3
3
  /**
4
4
  * Renderer type definitions for wireweave
@@ -214,6 +214,10 @@ declare class HtmlRenderer extends BaseRenderer {
214
214
  /**
215
215
  * Build common inline styles for all values
216
216
  *
217
+ * Position values (x, y) for absolute positioning:
218
+ * - When x or y is specified, element gets position: absolute
219
+ * - x → left, y → top
220
+ *
217
221
  * Spacing values (p, m, gap) use token system:
218
222
  * - number: spacing token (e.g., p=4 → padding: 16px from token table)
219
223
  * - ValueWithUnit: direct CSS value (e.g., p=16px → padding: 16px)
@@ -261,6 +265,9 @@ declare class HtmlRenderer extends BaseRenderer {
261
265
  private renderPopover;
262
266
  private renderDropdown;
263
267
  private renderNav;
268
+ private renderNavChildren;
269
+ private renderNavItem;
270
+ private renderIconHtml;
264
271
  private renderTabs;
265
272
  private renderBreadcrumb;
266
273
  private renderDivider;
@@ -308,83 +315,126 @@ declare function createHtmlRenderer(options?: RenderOptions): HtmlRenderer;
308
315
  /**
309
316
  * SVG Renderer for wireweave
310
317
  *
311
- * Renders wireframe AST to SVG image format
318
+ * A proper layout engine that renders wireframe AST to SVG image format
319
+ * with correct flexbox-like layout calculations.
312
320
  */
313
321
 
314
- /**
315
- * SVG Renderer class
316
- *
317
- * Renders wireframe AST nodes to SVG elements
318
- */
319
322
  declare class SvgRenderer {
320
323
  private options;
321
324
  private theme;
322
- private currentX;
323
- private currentY;
324
- private contentWidth;
325
+ private pageWidth;
326
+ private pageHeight;
327
+ private clipPathDefs;
328
+ private clipPathCounter;
329
+ private readonly DEFAULT_GAP;
325
330
  constructor(options?: SvgRenderOptions);
326
331
  /**
327
332
  * Render a wireframe document to SVG
328
333
  */
329
334
  render(doc: WireframeDocument): SvgRenderResult;
330
335
  /**
331
- * Generate SVG defs (styles, patterns, etc.)
336
+ * Generate SVG defs (styles)
332
337
  */
333
338
  private generateDefs;
334
- /**
335
- * Render a page node
336
- */
337
339
  private renderPage;
338
340
  /**
339
- * Render page title
341
+ * Render page with fixed header/footer layout
342
+ * Header at top, Footer at bottom, Main fills remaining space
340
343
  */
341
- private renderPageTitle;
342
- /**
343
- * Render any AST node
344
- */
345
- private renderNode;
346
- private renderRow;
347
- private renderCol;
348
- private renderHeader;
349
- private renderMain;
350
- private renderFooter;
351
- private renderSidebar;
352
- private renderCard;
353
- private renderModal;
354
- private renderText;
355
- private renderTitle;
356
- private renderLink;
357
- private renderInput;
358
- private renderTextarea;
359
- private renderSelect;
360
- private renderCheckbox;
361
- private renderRadio;
362
- private renderSwitch;
363
- private renderButton;
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;
364
385
  /**
365
- * Render icon paths for SVG
386
+ * Check if a node should flex to fill available space in a Row
387
+ * Only layout containers without explicit width should flex
366
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;
367
427
  private renderIconPaths;
368
- private renderImage;
369
- private renderPlaceholder;
370
- private renderAvatar;
371
- private renderBadge;
372
- private renderTable;
373
- private renderList;
374
- private renderAlert;
375
- private renderProgress;
376
- private renderSpinner;
377
- private renderNav;
378
- private renderTabs;
379
- private renderBreadcrumb;
380
- private getFontSize;
428
+ private getPadding;
429
+ private getGap;
430
+ private resolveSpacing;
431
+ private resolveSize;
432
+ private isFullWidth;
433
+ private estimateTextWidth;
381
434
  private resolveFontSize;
382
435
  private getTitleFontSize;
383
436
  private escapeXml;
384
437
  }
385
- /**
386
- * Create a new SVG renderer instance
387
- */
388
438
  declare function createSvgRenderer(options?: SvgRenderOptions): SvgRenderer;
389
439
 
390
440
  /**
@@ -439,9 +489,6 @@ declare function generateComponentStyles(_theme: ThemeConfig, prefix?: string):
439
489
  type IconElement = [string, Record<string, string>];
440
490
  type IconData = IconElement[];
441
491
  declare const lucideIcons: Record<string, IconData>;
442
- /**
443
- * Get icon data by name
444
- */
445
492
  declare function getIconData(name: string): IconData | undefined;
446
493
  /**
447
494
  * Render icon data to SVG string