@webmate-studio/builder 0.2.97 → 0.2.99

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webmate-studio/builder",
3
- "version": "0.2.97",
3
+ "version": "0.2.99",
4
4
  "type": "module",
5
5
  "description": "Webmate Studio Component Builder",
6
6
  "keywords": [
@@ -602,6 +602,18 @@ export const defaultDesignTokens = {
602
602
  opacity: 100,
603
603
  opacityHover: 100
604
604
  }
605
+ },
606
+
607
+ // Spacing between components
608
+ spacing: {
609
+ component: {
610
+ base: '3rem', // 48px - Mobile
611
+ sm: '3rem', // 48px - 640px+
612
+ md: '3.5rem', // 56px - 768px+
613
+ lg: '4rem', // 64px - 1024px+
614
+ xl: '4.5rem', // 72px - 1280px+
615
+ '2xl': '5rem' // 80px - 1536px+
616
+ }
605
617
  }
606
618
  };
607
619
 
@@ -1555,5 +1567,36 @@ export function generateCSSFromTokens(tokens) {
1555
1567
  lines.push(semanticUtilities);
1556
1568
  }
1557
1569
 
1570
+ // Add component spacing utilities
1571
+ if (tokens.spacing?.component) {
1572
+ lines.push('');
1573
+ lines.push('/* Component Spacing */');
1574
+ lines.push('.component-wrapper {');
1575
+ lines.push(' display: flex;');
1576
+ lines.push(' flex-direction: column;');
1577
+ lines.push(` gap: ${tokens.spacing.component.base || '3rem'};`);
1578
+ lines.push('}');
1579
+
1580
+ // Responsive spacing
1581
+ const breakpoints = {
1582
+ sm: '640px',
1583
+ md: '768px',
1584
+ lg: '1024px',
1585
+ xl: '1280px',
1586
+ '2xl': '1536px'
1587
+ };
1588
+
1589
+ for (const [breakpoint, minWidth] of Object.entries(breakpoints)) {
1590
+ if (tokens.spacing.component[breakpoint]) {
1591
+ lines.push('');
1592
+ lines.push(`@media (min-width: ${minWidth}) {`);
1593
+ lines.push(' .component-wrapper {');
1594
+ lines.push(` gap: ${tokens.spacing.component[breakpoint]};`);
1595
+ lines.push(' }');
1596
+ lines.push('}');
1597
+ }
1598
+ }
1599
+ }
1600
+
1558
1601
  return lines.join('\n');
1559
1602
  }
package/src/markdown.js CHANGED
@@ -20,10 +20,10 @@ marked.setOptions({
20
20
  });
21
21
 
22
22
  /**
23
- * Shift heading levels in HTML and add correct text-heading-* classes
23
+ * Shift heading levels in HTML
24
24
  * @param {string} html - HTML string
25
25
  * @param {number} startLevel - The level that h1 should become (e.g., 2 means h1 → h2)
26
- * @returns {string} HTML with shifted heading levels and proper styling classes
26
+ * @returns {string} HTML with shifted heading levels
27
27
  */
28
28
  function shiftHeadingLevels(html, startLevel) {
29
29
  if (!startLevel || startLevel === 1) return html;
@@ -35,24 +35,11 @@ function shiftHeadingLevels(html, startLevel) {
35
35
  for (let level = 6; level >= 1; level--) {
36
36
  const newLevel = Math.min(level + offset, 6);
37
37
  if (newLevel !== level) {
38
- // Add text-heading-{originalLevel} class to preserve original styling
39
- // e.g., H1 becoming H2 gets class="text-heading-1" to keep H1 styles
40
- const styleClass = `text-heading-${level}`;
41
-
42
- // Replace opening tag and add class
38
+ // Replace opening and closing tags
43
39
  html = html.replace(
44
40
  new RegExp(`<h${level}(\\s|>)`, 'gi'),
45
- (match, afterTag) => {
46
- // If there's already a space (attributes exist), add class
47
- if (afterTag === ' ') {
48
- return `<h${newLevel} class="${styleClass}"`;
49
- }
50
- // Otherwise, add class before closing >
51
- return `<h${newLevel} class="${styleClass}">`;
52
- }
41
+ `<h${newLevel}$1`
53
42
  );
54
-
55
- // Replace closing tags
56
43
  html = html.replace(
57
44
  new RegExp(`</h${level}>`, 'gi'),
58
45
  `</h${newLevel}>`
@@ -70,6 +57,7 @@ function shiftHeadingLevels(html, startLevel) {
70
57
  * @param {object} options - Optionale Konfiguration
71
58
  * @param {boolean} options.sanitize - HTML sanitizen (default: true)
72
59
  * @param {number} options.headingStartLevel - Start level for headings (1-6, default: 1)
60
+ * @param {boolean} options.wrapProse - Wrap with .prose class (default: true)
73
61
  * @returns {string} - Sicherer HTML-String
74
62
  */
75
63
  export function markdownToHtml(markdown, options = {}) {
@@ -102,7 +90,8 @@ export function markdownToHtml(markdown, options = {}) {
102
90
  'blockquote', 'pre', 'code',
103
91
  'a', 'img',
104
92
  'table', 'thead', 'tbody', 'tr', 'th', 'td',
105
- 'hr', 'abbr', 'cite', 'mark', 'small', 'sub', 'sup'
93
+ 'hr', 'abbr', 'cite', 'mark', 'small', 'sub', 'sup',
94
+ 'div'
106
95
  ],
107
96
  ALLOWED_ATTR: [
108
97
  'href', 'title', 'alt', 'src',
@@ -115,6 +104,11 @@ export function markdownToHtml(markdown, options = {}) {
115
104
  html = purify.sanitize(html, config);
116
105
  }
117
106
 
107
+ // Wrap with .prose for automatic styling (can be disabled with options.wrapProse = false)
108
+ if (options.wrapProse !== false) {
109
+ html = `<div class="prose">${html}</div>`;
110
+ }
111
+
118
112
  return html;
119
113
  }
120
114