@bookklik/senangstart-css 0.2.0 → 0.2.4

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.
Files changed (149) hide show
  1. package/dist/senangstart-css.js +102 -7
  2. package/dist/senangstart-css.min.js +26 -24
  3. package/dist/senangstart-tw.js +389 -0
  4. package/dist/senangstart-tw.min.js +2 -0
  5. package/docs/.vitepress/config.js +13 -4
  6. package/docs/SYNTAX-REFERENCE.md +1590 -1555
  7. package/docs/index.md +6 -0
  8. package/docs/ms/index.md +6 -0
  9. package/docs/ms/reference/visual/accent-color.md +6 -6
  10. package/docs/ms/reference/visual/animation-builtin.md +6 -6
  11. package/docs/ms/reference/visual/animation-delay.md +4 -2
  12. package/docs/ms/reference/visual/animation-direction.md +6 -6
  13. package/docs/ms/reference/visual/animation-duration.md +4 -4
  14. package/docs/ms/reference/visual/animation-fill.md +33 -9
  15. package/docs/ms/reference/visual/animation-iteration.md +5 -5
  16. package/docs/ms/reference/visual/animation-play.md +4 -4
  17. package/docs/ms/reference/visual/appearance.md +4 -4
  18. package/docs/ms/reference/visual/blend-modes.md +6 -6
  19. package/docs/ms/reference/visual/border-radius.md +8 -8
  20. package/docs/ms/reference/visual/box-shadow.md +6 -6
  21. package/docs/ms/reference/visual/caret-color.md +2 -2
  22. package/docs/ms/reference/visual/cursor.md +6 -6
  23. package/docs/ms/reference/visual/filter-blur.md +7 -7
  24. package/docs/ms/reference/visual/font-family.md +8 -8
  25. package/docs/ms/reference/visual/font-smoothing.md +4 -4
  26. package/docs/ms/reference/visual/font-style.md +4 -4
  27. package/docs/ms/reference/visual/font-variant-numeric.md +6 -4
  28. package/docs/ms/reference/visual/font-weight.md +6 -6
  29. package/docs/ms/reference/visual/gradient-from.md +57 -0
  30. package/docs/ms/reference/visual/gradient-to.md +57 -0
  31. package/docs/ms/reference/visual/gradient-via.md +54 -0
  32. package/docs/ms/reference/visual/hyphens.md +6 -6
  33. package/docs/ms/reference/visual/letter-spacing.md +8 -8
  34. package/docs/ms/reference/visual/line-clamp.md +9 -9
  35. package/docs/ms/reference/visual/line-height.md +8 -8
  36. package/docs/ms/reference/visual/list-style.md +7 -7
  37. package/docs/ms/reference/visual/mask.md +6 -2
  38. package/docs/ms/reference/visual/opacity.md +8 -8
  39. package/docs/ms/reference/visual/pointer-events.md +4 -4
  40. package/docs/ms/reference/visual/state-prefixes.md +5 -3
  41. package/docs/ms/reference/visual/text-decoration.md +6 -4
  42. package/docs/ms/reference/visual/text-indent.md +8 -4
  43. package/docs/ms/reference/visual/text-overflow.md +6 -4
  44. package/docs/ms/reference/visual/text-shadow.md +8 -2
  45. package/docs/ms/reference/visual/text-size.md +31 -13
  46. package/docs/ms/reference/visual/text-transform.md +6 -6
  47. package/docs/ms/reference/visual/text-wrap.md +8 -8
  48. package/docs/ms/reference/visual/transform-backface.md +29 -9
  49. package/docs/ms/reference/visual/transform-origin.md +4 -4
  50. package/docs/ms/reference/visual/transform-perspective-origin.md +41 -7
  51. package/docs/ms/reference/visual/transform-perspective.md +41 -7
  52. package/docs/ms/reference/visual/transform-rotate-3d.md +93 -0
  53. package/docs/ms/reference/visual/transform-rotate.md +6 -6
  54. package/docs/ms/reference/visual/transform-scale.md +7 -7
  55. package/docs/ms/reference/visual/transform-skew.md +6 -6
  56. package/docs/ms/reference/visual/transform-style.md +31 -11
  57. package/docs/ms/reference/visual/transform-translate-z.md +90 -0
  58. package/docs/ms/reference/visual/transform-translate.md +40 -14
  59. package/docs/ms/reference/visual/transition-delay.md +4 -2
  60. package/docs/ms/reference/visual/transition-duration.md +4 -4
  61. package/docs/ms/reference/visual/transition-timing.md +6 -6
  62. package/docs/ms/reference/visual/typography-keywords.md +8 -8
  63. package/docs/ms/reference/visual/user-select.md +4 -4
  64. package/docs/ms/reference/visual/vertical-align.md +10 -8
  65. package/docs/ms/reference/visual/whitespace.md +8 -8
  66. package/docs/ms/reference/visual/word-break.md +8 -8
  67. package/docs/public/assets/senangstart-css.min.js +209 -1545
  68. package/docs/public/assets/ss-logo.svg +83 -0
  69. package/docs/reference/visual/accent-color.md +6 -6
  70. package/docs/reference/visual/animation-builtin.md +6 -6
  71. package/docs/reference/visual/animation-delay.md +4 -2
  72. package/docs/reference/visual/animation-direction.md +6 -6
  73. package/docs/reference/visual/animation-duration.md +4 -4
  74. package/docs/reference/visual/animation-fill.md +33 -9
  75. package/docs/reference/visual/animation-iteration.md +5 -5
  76. package/docs/reference/visual/animation-play.md +4 -4
  77. package/docs/reference/visual/appearance.md +4 -4
  78. package/docs/reference/visual/blend-modes.md +6 -6
  79. package/docs/reference/visual/border-radius.md +8 -8
  80. package/docs/reference/visual/box-shadow.md +6 -6
  81. package/docs/reference/visual/caret-color.md +2 -2
  82. package/docs/reference/visual/cursor.md +6 -6
  83. package/docs/reference/visual/filter-blur.md +7 -7
  84. package/docs/reference/visual/font-family.md +8 -8
  85. package/docs/reference/visual/font-smoothing.md +4 -4
  86. package/docs/reference/visual/font-style.md +4 -4
  87. package/docs/reference/visual/font-variant-numeric.md +6 -4
  88. package/docs/reference/visual/font-weight.md +6 -6
  89. package/docs/reference/visual/gradient-from.md +57 -0
  90. package/docs/reference/visual/gradient-to.md +57 -0
  91. package/docs/reference/visual/gradient-via.md +54 -0
  92. package/docs/reference/visual/hyphens.md +6 -6
  93. package/docs/reference/visual/letter-spacing.md +8 -8
  94. package/docs/reference/visual/line-clamp.md +9 -9
  95. package/docs/reference/visual/line-height.md +8 -8
  96. package/docs/reference/visual/list-style.md +7 -7
  97. package/docs/reference/visual/mask.md +6 -2
  98. package/docs/reference/visual/opacity.md +8 -8
  99. package/docs/reference/visual/pointer-events.md +4 -4
  100. package/docs/reference/visual/state-prefixes.md +5 -3
  101. package/docs/reference/visual/text-decoration.md +6 -4
  102. package/docs/reference/visual/text-indent.md +8 -4
  103. package/docs/reference/visual/text-overflow.md +6 -4
  104. package/docs/reference/visual/text-shadow.md +8 -2
  105. package/docs/reference/visual/text-size.md +31 -13
  106. package/docs/reference/visual/text-transform.md +6 -6
  107. package/docs/reference/visual/text-wrap.md +8 -8
  108. package/docs/reference/visual/transform-backface.md +29 -9
  109. package/docs/reference/visual/transform-origin.md +4 -4
  110. package/docs/reference/visual/transform-perspective-origin.md +41 -7
  111. package/docs/reference/visual/transform-perspective.md +41 -7
  112. package/docs/reference/visual/transform-rotate-3d.md +93 -0
  113. package/docs/reference/visual/transform-rotate.md +6 -6
  114. package/docs/reference/visual/transform-scale.md +7 -7
  115. package/docs/reference/visual/transform-skew.md +6 -6
  116. package/docs/reference/visual/transform-style.md +31 -11
  117. package/docs/reference/visual/transform-translate-z.md +90 -0
  118. package/docs/reference/visual/transform-translate.md +40 -14
  119. package/docs/reference/visual/transition-delay.md +4 -2
  120. package/docs/reference/visual/transition-duration.md +4 -4
  121. package/docs/reference/visual/transition-timing.md +6 -6
  122. package/docs/reference/visual/typography-keywords.md +8 -8
  123. package/docs/reference/visual/user-select.md +4 -4
  124. package/docs/reference/visual/vertical-align.md +10 -8
  125. package/docs/reference/visual/whitespace.md +8 -8
  126. package/docs/reference/visual/word-break.md +8 -8
  127. package/docs/syntax-reference.json +2009 -1972
  128. package/package.json +2 -2
  129. package/playground/index.html +37 -38
  130. package/playground/sample_code.txt +23 -0
  131. package/playground/tw-convertor.html +103 -589
  132. package/scripts/build-dist.js +43 -1
  133. package/scripts/convert-tailwind.js +24 -0
  134. package/scripts/generate-docs.js +9 -7
  135. package/src/cdn/jit.js +70 -7
  136. package/src/cdn/tw-conversion-engine.js +497 -0
  137. package/src/compiler/generators/css.js +24 -2
  138. package/src/config/defaults.js +31 -7
  139. package/src/definitions/layout-positioning.js +6 -6
  140. package/src/definitions/visual-backgrounds.js +113 -15
  141. package/src/definitions/visual-borders.js +1 -1
  142. package/src/definitions/visual-filters.js +16 -16
  143. package/src/definitions/visual-svg.js +5 -5
  144. package/src/definitions/visual-transform3d.js +202 -36
  145. package/src/definitions/visual-transforms.js +42 -25
  146. package/src/definitions/visual-transitions.js +40 -26
  147. package/src/definitions/visual-typography.js +53 -44
  148. package/src/definitions/visual.js +73 -58
  149. package/tests/unit/convert-tailwind.test.js +8 -0
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import * as esbuild from 'esbuild';
9
- import { mkdirSync, statSync } from 'fs';
9
+ import { mkdirSync, statSync, copyFileSync } from 'fs';
10
10
  import { dirname, join } from 'path';
11
11
  import { fileURLToPath } from 'url';
12
12
 
@@ -49,6 +49,48 @@ await esbuild.build({
49
49
  const minSize = statSync(join(distDir, 'senangstart-css.min.js')).size;
50
50
  console.log(`✓ Created senangstart-css.min.js (${(minSize / 1024).toFixed(1)} KB)`);
51
51
 
52
+ // Build Tailwind converter - unminified
53
+ await esbuild.build({
54
+ entryPoints: [join(root, 'src', 'cdn', 'tw-conversion-engine.js')],
55
+ bundle: true,
56
+ format: 'iife',
57
+ outfile: join(distDir, 'senangstart-tw.js'),
58
+ minify: false,
59
+ banner: {
60
+ js: '/* SenangStart CSS - Tailwind Converter v0.2.0 | MIT License */'
61
+ }
62
+ });
63
+
64
+ const twUnminSize = statSync(join(distDir, 'senangstart-tw.js')).size;
65
+ console.log(`✓ Created senangstart-tw.js (${(twUnminSize / 1024).toFixed(1)} KB)`);
66
+
67
+ // Build Tailwind converter - minified
68
+ await esbuild.build({
69
+ entryPoints: [join(root, 'src', 'cdn', 'tw-conversion-engine.js')],
70
+ bundle: true,
71
+ format: 'iife',
72
+ outfile: join(distDir, 'senangstart-tw.min.js'),
73
+ minify: true,
74
+ banner: {
75
+ js: '/* SenangStart TW v0.2.0 | MIT */'
76
+ }
77
+ });
78
+
79
+ const twMinSize = statSync(join(distDir, 'senangstart-tw.min.js')).size;
80
+ console.log(`✓ Created senangstart-tw.min.js (${(twMinSize / 1024).toFixed(1)} KB)`);
81
+
82
+ // Copy to docs/public/assets for VitePress
83
+ const docsAssetsDir = join(root, 'docs', 'public', 'assets');
84
+ mkdirSync(docsAssetsDir, { recursive: true });
85
+ copyFileSync(
86
+ join(distDir, 'senangstart-css.min.js'),
87
+ join(docsAssetsDir, 'senangstart-css.min.js')
88
+ );
89
+ console.log(`✓ Copied to docs/public/assets/senangstart-css.min.js`);
90
+
52
91
  console.log('\n📦 Dist build complete!');
53
92
  console.log(' dist/senangstart-css.js');
54
93
  console.log(' dist/senangstart-css.min.js');
94
+ console.log(' dist/senangstart-tw.js');
95
+ console.log(' dist/senangstart-tw.min.js');
96
+
@@ -583,6 +583,30 @@ function convertClass(twClass, options = {}) {
583
583
  return { category: 'visual', value: prefix + "opacity:" + opacityMatch[1] };
584
584
  }
585
585
 
586
+ // Gradient direction (bg-gradient-to-*)
587
+ const bgGradientMatch = baseClass.match(/^bg-gradient-to-(t|tr|r|br|b|bl|l|tl)$/);
588
+ if (bgGradientMatch) {
589
+ return { category: 'visual', value: prefix + "bg-image:gradient-to-" + bgGradientMatch[1] };
590
+ }
591
+
592
+ // Gradient from-* (starting color)
593
+ const fromMatch = baseClass.match(/^from-(.+)$/);
594
+ if (fromMatch) {
595
+ return { category: 'visual', value: prefix + "from:" + fromMatch[1] };
596
+ }
597
+
598
+ // Gradient via-* (middle color)
599
+ const viaMatch = baseClass.match(/^via-(.+)$/);
600
+ if (viaMatch) {
601
+ return { category: 'visual', value: prefix + "via:" + viaMatch[1] };
602
+ }
603
+
604
+ // Gradient to-* (ending color) - Note: must come after bg-gradient-to-*
605
+ const toMatch = baseClass.match(/^to-(.+)$/);
606
+ if (toMatch) {
607
+ return { category: 'visual', value: prefix + "to:" + toMatch[1] };
608
+ }
609
+
586
610
  return null;
587
611
  }
588
612
 
@@ -362,15 +362,17 @@ function compareDocs(options = {}) {
362
362
  */
363
363
  function extractValuesFromTable(markdown) {
364
364
  const values = [];
365
- const tableRegex = /\|[^|]+\|[^|]+\|[^|]+\|/g;
366
- const matches = markdown.match(tableRegex) || [];
365
+ const lines = markdown.split('\n');
367
366
 
368
- for (const match of matches) {
369
- // Skip header rows
370
- if (match.includes('Value') || match.includes('Nilai') || match.includes('---')) continue;
367
+ for (let line of lines) {
368
+ line = line.trim();
369
+ // Skip non-table lines, header rows, and separator rows
370
+ if (!line.startsWith('|')) continue;
371
+ if (line.includes('Value') || line.includes('Nilai') || line.includes('Property') || line.includes('Properti')) continue;
372
+ if (line.includes('---')) continue;
371
373
 
372
- // Extract first cell (value name)
373
- const cellMatch = match.match(/\|\s*`([^`]+)`/);
374
+ // Extract first cell (value name) - look for backtick-quoted value
375
+ const cellMatch = line.match(/\|\s*`([^`]+)`/);
374
376
  if (cellMatch) {
375
377
  values.push(cellMatch[1]);
376
378
  }
package/src/cdn/jit.js CHANGED
@@ -25,6 +25,9 @@ import { tokenize, parseToken } from '../core/tokenizer-core.js';
25
25
  theme: {
26
26
  spacing: {
27
27
  'none': '0px',
28
+ 'thin': '1px',
29
+ 'regular': '2px',
30
+ 'thick': '3px',
28
31
  'tiny': '4px',
29
32
  'small': '8px',
30
33
  'medium': '16px',
@@ -47,12 +50,34 @@ import { tokenize, parseToken } from '../core/tokenizer-core.js';
47
50
  'giant': '0 25px 50px rgba(0,0,0,0.25)'
48
51
  },
49
52
  fontSize: {
50
- 'tiny': '12px',
51
- 'small': '14px',
52
- 'medium': '16px',
53
- 'big': '20px',
54
- 'giant': '32px',
55
- 'vast': '48px'
53
+ 'mini': '0.75rem', // 12px
54
+ 'small': '0.875rem', // 14px
55
+ 'base': '1rem', // 16px
56
+ 'large': '1.125rem', // 18px
57
+ 'big': '1.25rem', // 20px
58
+ 'huge': '1.5rem', // 24px
59
+ 'grand': '1.875rem', // 30px
60
+ 'giant': '2.25rem', // 36px
61
+ 'mount': '3rem', // 48px
62
+ 'mega': '3.75rem', // 60px
63
+ 'giga': '4.5rem', // 72px
64
+ 'tera': '6rem', // 96px
65
+ 'hero': '8rem' // 128px
66
+ },
67
+ fontSizeLineHeight: {
68
+ 'mini': '1rem', // 16px
69
+ 'small': '1.25rem', // 20px
70
+ 'base': '1.5rem', // 24px
71
+ 'large': '1.75rem', // 28px
72
+ 'big': '1.75rem', // 28px
73
+ 'huge': '2rem', // 32px
74
+ 'grand': '2.25rem', // 36px
75
+ 'giant': '2.5rem', // 40px
76
+ 'mount': '1', // unitless 1
77
+ 'mega': '1', // unitless 1
78
+ 'giga': '1', // unitless 1
79
+ 'tera': '1', // unitless 1
80
+ 'hero': '1' // unitless 1
56
81
  },
57
82
  fontWeight: {
58
83
  'normal': '400',
@@ -311,6 +336,13 @@ import { tokenize, parseToken } from '../core/tokenizer-core.js';
311
336
  css += ` --font-${key}: ${value};\n`;
312
337
  }
313
338
 
339
+ // Font size line-height (paired with font sizes)
340
+ if (theme.fontSizeLineHeight) {
341
+ for (const [key, value] of Object.entries(theme.fontSizeLineHeight)) {
342
+ css += ` --font-lh-${key}: ${value};\n`;
343
+ }
344
+ }
345
+
314
346
  // Font weight
315
347
  for (const [key, value] of Object.entries(theme.fontWeight)) {
316
348
  css += ` --fw-${key}: ${value};\n`;
@@ -383,6 +415,16 @@ import { tokenize, parseToken } from '../core/tokenizer-core.js';
383
415
  css += ` --tw-text-${key}: ${value};\n`;
384
416
  }
385
417
 
418
+ // Tailwind Line Height Scale (paired with font sizes)
419
+ const twLeading = {
420
+ 'xs': '1rem', 'sm': '1.25rem', 'base': '1.5rem', 'lg': '1.75rem', 'xl': '1.75rem',
421
+ '2xl': '2rem', '3xl': '2.25rem', '4xl': '2.5rem', '5xl': '1',
422
+ '6xl': '1', '7xl': '1', '8xl': '1', '9xl': '1'
423
+ };
424
+ for (const [key, value] of Object.entries(twLeading)) {
425
+ css += ` --tw-leading-${key}: ${value};\n`;
426
+ }
427
+
386
428
  // Tailwind Font Weight Scale
387
429
  const twFontWeight = {
388
430
  'thin': '100',
@@ -1174,15 +1216,20 @@ img, video {
1174
1216
  },
1175
1217
  'text-size': () => {
1176
1218
  let cssValue;
1219
+ let lineHeightValue;
1177
1220
  if (isArbitrary) {
1178
1221
  cssValue = value;
1222
+ // No line-height for arbitrary values
1223
+ return `font-size: ${cssValue};`;
1179
1224
  } else if (value.startsWith('tw-')) {
1180
1225
  const twValue = value.slice(3);
1181
1226
  cssValue = `var(--tw-text-${twValue})`;
1227
+ lineHeightValue = `var(--tw-leading-${twValue})`;
1182
1228
  } else {
1183
1229
  cssValue = `var(--font-${value})`;
1230
+ lineHeightValue = `var(--font-lh-${value})`;
1184
1231
  }
1185
- return `font-size: ${cssValue};`;
1232
+ return `font-size: ${cssValue}; line-height: ${lineHeightValue};`;
1186
1233
  },
1187
1234
  'font': () => {
1188
1235
  // Check for font-family presets
@@ -1614,6 +1661,22 @@ img, video {
1614
1661
  return `background-image: ${cssValue};`;
1615
1662
  },
1616
1663
 
1664
+ // ============================================
1665
+ // GRADIENT COLOR STOPS
1666
+ // ============================================
1667
+ 'from': () => {
1668
+ const color = isArbitrary ? value : `var(--c-${value})`;
1669
+ return `--tw-gradient-from: ${color}; --tw-gradient-to: transparent; --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);`;
1670
+ },
1671
+ 'via': () => {
1672
+ const color = isArbitrary ? value : `var(--c-${value})`;
1673
+ return `--tw-gradient-via: ${color}; --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-via), var(--tw-gradient-to);`;
1674
+ },
1675
+ 'to': () => {
1676
+ const color = isArbitrary ? value : `var(--c-${value})`;
1677
+ return `--tw-gradient-to: ${color};`;
1678
+ },
1679
+
1617
1680
  // ============================================
1618
1681
  // BACKDROP FILTER UTILITIES
1619
1682
  // ============================================