@bookklik/senangstart-css 0.1.2 → 0.1.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 (200) hide show
  1. package/.github/workflows/deploy-docs.yml +1 -1
  2. package/LICENSE.md +21 -0
  3. package/README.md +17 -189
  4. package/dist/senangstart-css.js +40 -10
  5. package/dist/senangstart-css.min.js +24 -3
  6. package/docs/.vitepress/cache/deps/_metadata.json +7 -28
  7. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +9432 -284
  8. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +4 -4
  9. package/docs/.vitepress/config.js +183 -91
  10. package/docs/.vitepress/dist/404.html +5 -5
  11. package/docs/.vitepress/dist/assets/{app.BTYj1wZj.js → app.DBXoyO4w.js} +1 -1
  12. package/docs/.vitepress/dist/assets/chunks/framework.I305HrzY.js +19 -0
  13. package/docs/.vitepress/dist/assets/chunks/theme.CaXH1t3X.js +1 -0
  14. package/docs/.vitepress/dist/assets/{examples_cards.md.D4i0phvj.js → examples_cards.md.BCzaqSD6.js} +1 -1
  15. package/docs/.vitepress/dist/assets/{examples_cards.md.D4i0phvj.lean.js → examples_cards.md.BCzaqSD6.lean.js} +1 -1
  16. package/docs/.vitepress/dist/assets/{examples_forms.md.BnsjqHST.js → examples_forms.md.DOjr9LrG.js} +1 -1
  17. package/docs/.vitepress/dist/assets/{examples_forms.md.BnsjqHST.lean.js → examples_forms.md.DOjr9LrG.lean.js} +1 -1
  18. package/docs/.vitepress/dist/assets/{examples_hero.md.CCcb2x8Y.js → examples_hero.md.CAorji-Y.js} +1 -1
  19. package/docs/.vitepress/dist/assets/{examples_hero.md.CCcb2x8Y.lean.js → examples_hero.md.CAorji-Y.lean.js} +1 -1
  20. package/docs/.vitepress/dist/assets/{examples_index.md.CcyXbirn.js → examples_index.md.BjUNsTob.js} +2 -2
  21. package/docs/.vitepress/dist/assets/{examples_index.md.CcyXbirn.lean.js → examples_index.md.BjUNsTob.lean.js} +1 -1
  22. package/docs/.vitepress/dist/assets/{examples_navigation.md.CppyHbnP.js → examples_navigation.md.DvL-Yv_5.js} +1 -1
  23. package/docs/.vitepress/dist/assets/{examples_navigation.md.CppyHbnP.lean.js → examples_navigation.md.DvL-Yv_5.lean.js} +1 -1
  24. package/docs/.vitepress/dist/assets/{guide_cdn.md.CANCjnm5.js → guide_cdn.md.Bbb7-icp.js} +3 -3
  25. package/docs/.vitepress/dist/assets/{guide_cdn.md.CANCjnm5.lean.js → guide_cdn.md.Bbb7-icp.lean.js} +1 -1
  26. package/docs/.vitepress/dist/assets/{guide_cli.md.zXEKk-bu.js → guide_cli.md.yLsOZ7NL.js} +1 -1
  27. package/docs/.vitepress/dist/assets/{guide_cli.md.zXEKk-bu.lean.js → guide_cli.md.yLsOZ7NL.lean.js} +1 -1
  28. package/docs/.vitepress/dist/assets/{guide_configuration.md.D2JZzhKm.js → guide_configuration.md.DN4FfKw4.js} +1 -1
  29. package/docs/.vitepress/dist/assets/{guide_configuration.md.D2JZzhKm.lean.js → guide_configuration.md.DN4FfKw4.lean.js} +1 -1
  30. package/docs/.vitepress/dist/assets/guide_dark-mode.md.D6UJvQtM.js +69 -0
  31. package/docs/.vitepress/dist/assets/guide_dark-mode.md.D6UJvQtM.lean.js +1 -0
  32. package/docs/.vitepress/dist/assets/{guide_getting-started.md.tO7bvmZd.js → guide_getting-started.md.K5nA8wXY.js} +4 -4
  33. package/docs/.vitepress/dist/assets/{guide_getting-started.md.tO7bvmZd.lean.js → guide_getting-started.md.K5nA8wXY.lean.js} +1 -1
  34. package/docs/.vitepress/dist/assets/{guide_index.md.C1xk2lBl.js → guide_index.md.B0lRU150.js} +1 -1
  35. package/docs/.vitepress/dist/assets/{guide_index.md.C1xk2lBl.lean.js → guide_index.md.B0lRU150.lean.js} +1 -1
  36. package/docs/.vitepress/dist/assets/{guide_natural-scale.md.D1oVRN5V.js → guide_natural-scale.md.vvauT7U1.js} +1 -1
  37. package/docs/.vitepress/dist/assets/{guide_natural-scale.md.D1oVRN5V.lean.js → guide_natural-scale.md.vvauT7U1.lean.js} +1 -1
  38. package/docs/.vitepress/dist/assets/{guide_philosophy.md.DPyyMH8d.js → guide_philosophy.md.mOb9kp32.js} +1 -1
  39. package/docs/.vitepress/dist/assets/{guide_philosophy.md.DPyyMH8d.lean.js → guide_philosophy.md.mOb9kp32.lean.js} +1 -1
  40. package/docs/.vitepress/dist/assets/{guide_responsive.md.wksOAMT5.js → guide_responsive.md.C7cF-4cR.js} +1 -1
  41. package/docs/.vitepress/dist/assets/{guide_responsive.md.wksOAMT5.lean.js → guide_responsive.md.C7cF-4cR.lean.js} +1 -1
  42. package/docs/.vitepress/dist/assets/{guide_states.md.DRjYOZDJ.js → guide_states.md.CwtGEGHB.js} +1 -1
  43. package/docs/.vitepress/dist/assets/{guide_states.md.DRjYOZDJ.lean.js → guide_states.md.CwtGEGHB.lean.js} +1 -1
  44. package/docs/.vitepress/dist/assets/{guide_tri-attribute.md.CoFqfmPZ.js → guide_tri-attribute.md.CpjJLEMP.js} +1 -1
  45. package/docs/.vitepress/dist/assets/{guide_tri-attribute.md.CoFqfmPZ.lean.js → guide_tri-attribute.md.CpjJLEMP.lean.js} +1 -1
  46. package/docs/.vitepress/dist/assets/{index.md.CUZJzNzP.js → index.md.mYp6_S5X.js} +1 -1
  47. package/docs/.vitepress/dist/assets/{index.md.CUZJzNzP.lean.js → index.md.mYp6_S5X.lean.js} +1 -1
  48. package/docs/.vitepress/dist/assets/ms_examples_cards.md.CaE5JNAs.js +84 -0
  49. package/docs/.vitepress/dist/assets/ms_examples_cards.md.CaE5JNAs.lean.js +1 -0
  50. package/docs/.vitepress/dist/assets/ms_examples_forms.md.VvDzMzxF.js +169 -0
  51. package/docs/.vitepress/dist/assets/ms_examples_forms.md.VvDzMzxF.lean.js +1 -0
  52. package/docs/.vitepress/dist/assets/ms_examples_hero.md.DC4c3kKW.js +118 -0
  53. package/docs/.vitepress/dist/assets/ms_examples_hero.md.DC4c3kKW.lean.js +1 -0
  54. package/docs/.vitepress/dist/assets/ms_examples_index.md.C13ShcjA.js +52 -0
  55. package/docs/.vitepress/dist/assets/ms_examples_index.md.C13ShcjA.lean.js +1 -0
  56. package/docs/.vitepress/dist/assets/ms_examples_navigation.md.BPtVjKbk.js +106 -0
  57. package/docs/.vitepress/dist/assets/ms_examples_navigation.md.BPtVjKbk.lean.js +1 -0
  58. package/docs/.vitepress/dist/assets/ms_guide_cdn.md.tZFpEjTS.js +30 -0
  59. package/docs/.vitepress/dist/assets/ms_guide_cdn.md.tZFpEjTS.lean.js +1 -0
  60. package/docs/.vitepress/dist/assets/ms_guide_cli.md.DBjxv3-o.js +44 -0
  61. package/docs/.vitepress/dist/assets/ms_guide_cli.md.DBjxv3-o.lean.js +1 -0
  62. package/docs/.vitepress/dist/assets/ms_guide_configuration.md.CyYNqREm.js +79 -0
  63. package/docs/.vitepress/dist/assets/ms_guide_configuration.md.CyYNqREm.lean.js +1 -0
  64. package/docs/.vitepress/dist/assets/ms_guide_dark-mode.md.DWDWvzzv.js +69 -0
  65. package/docs/.vitepress/dist/assets/ms_guide_dark-mode.md.DWDWvzzv.lean.js +1 -0
  66. package/docs/.vitepress/dist/assets/ms_guide_getting-started.md.WoQwRhlY.js +47 -0
  67. package/docs/.vitepress/dist/assets/ms_guide_getting-started.md.WoQwRhlY.lean.js +1 -0
  68. package/docs/.vitepress/dist/assets/ms_guide_index.md.pHpXZMmU.js +3 -0
  69. package/docs/.vitepress/dist/assets/ms_guide_index.md.pHpXZMmU.lean.js +1 -0
  70. package/docs/.vitepress/dist/assets/ms_guide_natural-scale.md.BiUfU-TH.js +22 -0
  71. package/docs/.vitepress/dist/assets/ms_guide_natural-scale.md.BiUfU-TH.lean.js +1 -0
  72. package/docs/.vitepress/dist/assets/ms_guide_philosophy.md.hf3SG2Ts.js +7 -0
  73. package/docs/.vitepress/dist/assets/ms_guide_philosophy.md.hf3SG2Ts.lean.js +1 -0
  74. package/docs/.vitepress/dist/assets/ms_guide_responsive.md.C4yS3zzM.js +57 -0
  75. package/docs/.vitepress/dist/assets/ms_guide_responsive.md.C4yS3zzM.lean.js +1 -0
  76. package/docs/.vitepress/dist/assets/ms_guide_states.md.DkDEjPdC.js +77 -0
  77. package/docs/.vitepress/dist/assets/ms_guide_states.md.DkDEjPdC.lean.js +1 -0
  78. package/docs/.vitepress/dist/assets/ms_guide_tri-attribute.md.C3Es_V5J.js +45 -0
  79. package/docs/.vitepress/dist/assets/ms_guide_tri-attribute.md.C3Es_V5J.lean.js +1 -0
  80. package/docs/.vitepress/dist/assets/ms_index.md.Bmo9il08.js +7 -0
  81. package/docs/.vitepress/dist/assets/ms_index.md.Bmo9il08.lean.js +1 -0
  82. package/docs/.vitepress/dist/assets/ms_reference_breakpoints.md.DR7i_--b.js +48 -0
  83. package/docs/.vitepress/dist/assets/ms_reference_breakpoints.md.DR7i_--b.lean.js +1 -0
  84. package/docs/.vitepress/dist/assets/ms_reference_colors.md.06ZYiMcJ.js +17 -0
  85. package/docs/.vitepress/dist/assets/ms_reference_colors.md.06ZYiMcJ.lean.js +1 -0
  86. package/docs/.vitepress/dist/assets/ms_reference_layout.md.NGL6A5SR.js +13 -0
  87. package/docs/.vitepress/dist/assets/ms_reference_layout.md.NGL6A5SR.lean.js +1 -0
  88. package/docs/.vitepress/dist/assets/ms_reference_space.md.BG5YQ-09.js +24 -0
  89. package/docs/.vitepress/dist/assets/ms_reference_space.md.BG5YQ-09.lean.js +1 -0
  90. package/docs/.vitepress/dist/assets/ms_reference_spacing.md.XmXLLPOZ.js +32 -0
  91. package/docs/.vitepress/dist/assets/ms_reference_spacing.md.XmXLLPOZ.lean.js +1 -0
  92. package/docs/.vitepress/dist/assets/ms_reference_visual.md.BVOlkEqc.js +22 -0
  93. package/docs/.vitepress/dist/assets/ms_reference_visual.md.BVOlkEqc.lean.js +1 -0
  94. package/docs/.vitepress/dist/assets/{reference_breakpoints.md.BEhuwXBS.js → reference_breakpoints.md.BRbG8Fzi.js} +1 -1
  95. package/docs/.vitepress/dist/assets/{reference_breakpoints.md.BEhuwXBS.lean.js → reference_breakpoints.md.BRbG8Fzi.lean.js} +1 -1
  96. package/docs/.vitepress/dist/assets/reference_colors.md.C7j7dSO1.js +17 -0
  97. package/docs/.vitepress/dist/assets/reference_colors.md.C7j7dSO1.lean.js +1 -0
  98. package/docs/.vitepress/dist/assets/{reference_layout.md.DqSoofMZ.js → reference_layout.md.BWJ5NxSp.js} +1 -1
  99. package/docs/.vitepress/dist/assets/{reference_layout.md.DqSoofMZ.lean.js → reference_layout.md.BWJ5NxSp.lean.js} +1 -1
  100. package/docs/.vitepress/dist/assets/{reference_space.md.luOYAfQg.js → reference_space.md.DCsqfTWb.js} +1 -1
  101. package/docs/.vitepress/dist/assets/{reference_space.md.luOYAfQg.lean.js → reference_space.md.DCsqfTWb.lean.js} +1 -1
  102. package/docs/.vitepress/dist/assets/{reference_spacing.md.DdsDhDhS.js → reference_spacing.md.BInFD8gd.js} +1 -1
  103. package/docs/.vitepress/dist/assets/{reference_spacing.md.DdsDhDhS.lean.js → reference_spacing.md.BInFD8gd.lean.js} +1 -1
  104. package/docs/.vitepress/dist/assets/{reference_visual.md.DZFvxgPk.js → reference_visual.md.BRK7S9T1.js} +1 -1
  105. package/docs/.vitepress/dist/assets/{reference_visual.md.DZFvxgPk.lean.js → reference_visual.md.BRK7S9T1.lean.js} +1 -1
  106. package/docs/.vitepress/dist/assets/{style.BuMqNgkb.css → style.D82StYDI.css} +1 -1
  107. package/docs/.vitepress/dist/examples/cards.html +9 -9
  108. package/docs/.vitepress/dist/examples/forms.html +9 -9
  109. package/docs/.vitepress/dist/examples/hero.html +9 -9
  110. package/docs/.vitepress/dist/examples/index.html +10 -10
  111. package/docs/.vitepress/dist/examples/navigation.html +9 -9
  112. package/docs/.vitepress/dist/guide/cdn.html +12 -12
  113. package/docs/.vitepress/dist/guide/cli.html +9 -9
  114. package/docs/.vitepress/dist/guide/configuration.html +9 -9
  115. package/docs/.vitepress/dist/guide/dark-mode.html +93 -0
  116. package/docs/.vitepress/dist/guide/getting-started.html +11 -11
  117. package/docs/.vitepress/dist/guide/index.html +9 -9
  118. package/docs/.vitepress/dist/guide/natural-scale.html +9 -9
  119. package/docs/.vitepress/dist/guide/philosophy.html +9 -9
  120. package/docs/.vitepress/dist/guide/responsive.html +9 -9
  121. package/docs/.vitepress/dist/guide/states.html +10 -10
  122. package/docs/.vitepress/dist/guide/tri-attribute.html +9 -9
  123. package/docs/.vitepress/dist/hashmap.json +1 -1
  124. package/docs/.vitepress/dist/index.html +9 -9
  125. package/docs/.vitepress/dist/ms/examples/cards.html +108 -0
  126. package/docs/.vitepress/dist/ms/examples/forms.html +193 -0
  127. package/docs/.vitepress/dist/ms/examples/hero.html +142 -0
  128. package/docs/.vitepress/dist/ms/examples/index.html +76 -0
  129. package/docs/.vitepress/dist/ms/examples/navigation.html +130 -0
  130. package/docs/.vitepress/dist/ms/guide/cdn.html +54 -0
  131. package/docs/.vitepress/dist/ms/guide/cli.html +68 -0
  132. package/docs/.vitepress/dist/ms/guide/configuration.html +103 -0
  133. package/docs/.vitepress/dist/ms/guide/dark-mode.html +93 -0
  134. package/docs/.vitepress/dist/ms/guide/getting-started.html +71 -0
  135. package/docs/.vitepress/dist/ms/guide/index.html +27 -0
  136. package/docs/.vitepress/dist/ms/guide/natural-scale.html +46 -0
  137. package/docs/.vitepress/dist/ms/guide/philosophy.html +31 -0
  138. package/docs/.vitepress/dist/ms/guide/responsive.html +81 -0
  139. package/docs/.vitepress/dist/ms/guide/states.html +101 -0
  140. package/docs/.vitepress/dist/ms/guide/tri-attribute.html +69 -0
  141. package/docs/.vitepress/dist/ms/index.html +31 -0
  142. package/docs/.vitepress/dist/ms/reference/breakpoints.html +72 -0
  143. package/docs/.vitepress/dist/ms/reference/colors.html +41 -0
  144. package/docs/.vitepress/dist/ms/reference/layout.html +37 -0
  145. package/docs/.vitepress/dist/ms/reference/space.html +48 -0
  146. package/docs/.vitepress/dist/ms/reference/spacing.html +56 -0
  147. package/docs/.vitepress/dist/ms/reference/visual.html +46 -0
  148. package/docs/.vitepress/dist/reference/breakpoints.html +9 -9
  149. package/docs/.vitepress/dist/reference/colors.html +15 -27
  150. package/docs/.vitepress/dist/reference/layout.html +9 -9
  151. package/docs/.vitepress/dist/reference/space.html +9 -9
  152. package/docs/.vitepress/dist/reference/spacing.html +9 -9
  153. package/docs/.vitepress/dist/reference/visual.html +9 -9
  154. package/docs/examples/index.md +1 -1
  155. package/docs/guide/cdn.md +2 -2
  156. package/docs/guide/dark-mode.md +152 -0
  157. package/docs/guide/getting-started.md +2 -2
  158. package/docs/ms/examples/cards.md +116 -0
  159. package/docs/ms/examples/forms.md +207 -0
  160. package/docs/ms/examples/hero.md +150 -0
  161. package/docs/ms/examples/index.md +87 -0
  162. package/docs/ms/examples/navigation.md +144 -0
  163. package/docs/ms/guide/cdn.md +110 -0
  164. package/docs/ms/guide/cli.md +174 -0
  165. package/docs/ms/guide/configuration.md +152 -0
  166. package/docs/ms/guide/dark-mode.md +152 -0
  167. package/docs/ms/guide/getting-started.md +130 -0
  168. package/docs/ms/guide/index.md +64 -0
  169. package/docs/ms/guide/natural-scale.md +123 -0
  170. package/docs/ms/guide/philosophy.md +103 -0
  171. package/docs/ms/guide/responsive.md +129 -0
  172. package/docs/ms/guide/states.md +162 -0
  173. package/docs/ms/guide/tri-attribute.md +187 -0
  174. package/docs/ms/index.md +64 -0
  175. package/docs/ms/reference/breakpoints.md +131 -0
  176. package/docs/ms/reference/colors.md +126 -0
  177. package/docs/ms/reference/layout.md +115 -0
  178. package/docs/ms/reference/space.md +121 -0
  179. package/docs/ms/reference/spacing.md +74 -0
  180. package/docs/ms/reference/visual.md +160 -0
  181. package/docs/reference/colors.md +52 -32
  182. package/package.json +1 -1
  183. package/src/cdn/jit.js +40 -10
  184. package/src/compiler/generators/css.js +57 -5
  185. package/src/compiler/tokenizer.js +1 -1
  186. package/src/config/defaults.js +297 -2
  187. package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js +0 -9719
  188. package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js.map +0 -7
  189. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js +0 -1333
  190. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map +0 -7
  191. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js +0 -1665
  192. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map +0 -7
  193. package/docs/.vitepress/cache/deps/vitepress___minisearch.js +0 -1813
  194. package/docs/.vitepress/cache/deps/vitepress___minisearch.js.map +0 -7
  195. package/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.DmMP4oUp.js +0 -1
  196. package/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.jxQ0k_uL.js +0 -9
  197. package/docs/.vitepress/dist/assets/chunks/framework.qISVh_QZ.js +0 -19
  198. package/docs/.vitepress/dist/assets/chunks/theme.B9Wtbwgj.js +0 -2
  199. package/docs/.vitepress/dist/assets/reference_colors.md.Do4abjs1.js +0 -29
  200. package/docs/.vitepress/dist/assets/reference_colors.md.Do4abjs1.lean.js +0 -1
@@ -36,7 +36,7 @@ jobs:
36
36
  run: npm ci
37
37
 
38
38
  - name: Build with VitePress
39
- run: npm run docs:build
39
+ run: npm run build:dist
40
40
 
41
41
  - name: Upload artifact
42
42
  uses: actions/upload-pages-artifact@v3
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Bookklik Technologies
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,209 +1,37 @@
1
1
  # SenangStart CSS
2
2
 
3
- **The Intent-First CSS Engine**
3
+ A utility-first CSS framework that replaces abstract naming conventions with Natural Adjectives.
4
4
 
5
- > "Speak Human. Compile to Logic."
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md)
6
6
 
7
- Stop memorizing arbitrary scales like `px-4`, `px-8`, `px-16`. Start using natural adjectives: `tiny`, `small`, `medium`, `big`, `giant`, `vast`.
7
+ ## Quick Start
8
8
 
9
- ## Quick Start (CDN - Zero Build)
9
+ ### CDN (Zero Build)
10
10
 
11
11
  ```html
12
- <!DOCTYPE html>
13
- <html>
14
- <head>
15
- <script src="https://cdn.senangstart.dev/jit.js"></script>
16
- </head>
17
- <body>
18
- <div
19
- layout="flex col center"
20
- space="p:big"
21
- visual="bg:primary text:white rounded:big"
22
- >
23
- Hello SenangStart!
24
- </div>
25
- </body>
26
- </html>
12
+ <script src="https://unpkg.com/@bookklik/senangstart-css/dist/senangstart-css.min.js"></script>
13
+
14
+ <div
15
+ layout="flex col center"
16
+ space="p:big"
17
+ visual="bg:primary text:white rounded:big"
18
+ >
19
+ Hello SenangStart!
20
+ </div>
27
21
  ```
28
22
 
29
- ## Quick Start (CLI)
23
+ ### CLI
30
24
 
31
25
  ```bash
32
- # Install
33
26
  npm i @bookklik/senangstart-css
34
-
35
- # Initialize config
36
27
  senangstart init
37
-
38
- # Start development
39
28
  senangstart dev
40
29
  ```
41
30
 
42
- ## The Tri-Attribute Syntax
43
-
44
- SenangStart uses **three attributes** to separate concerns:
45
-
46
- | Attribute | Purpose | Example |
47
- |-----------|---------|---------|
48
- | `layout` | Structure & position | `layout="flex col center"` |
49
- | `space` | Sizing & spacing | `space="p:medium g:small"` |
50
- | `visual` | Colors & appearance | `visual="bg:white rounded:big"` |
51
-
52
- ## The Natural Spacing Scale
53
-
54
- | Keyword | Size | Mental Model |
55
- |---------|------|--------------|
56
- | `none` | 0px | No space |
57
- | `tiny` | 4px | 🪨 Pebble — Borders, offsets |
58
- | `small` | 8px | 📦 Matchbox — Group related items |
59
- | `medium` | 16px | 📱 Smartphone — Standard default |
60
- | `big` | 32px | 💻 Laptop — Separate sections |
61
- | `giant` | 64px | 🚪 Door — Layout divisions |
62
- | `vast` | 128px | 🏠 House — Hero sections |
63
-
64
- ## Layout Attribute
65
-
66
- ```html
67
- <!-- Flexbox -->
68
- <div layout="flex row center">...</div>
69
- <div layout="flex col between">...</div>
70
-
71
- <!-- Grid -->
72
- <div layout="grid">...</div>
73
-
74
- <!-- Position -->
75
- <nav layout="fixed z:top">...</nav>
76
- ```
77
-
78
- ### Keywords
79
-
80
- - **Display:** `flex`, `grid`, `block`, `hidden`
81
- - **Direction:** `row`, `col`, `row-reverse`, `col-reverse`
82
- - **Alignment:** `center`, `between`, `start`, `end`
83
- - **Position:** `absolute`, `relative`, `fixed`, `sticky`
84
- - **Z-Index:** `z:base`, `z:low`, `z:mid`, `z:high`, `z:top`
85
-
86
- ## Space Attribute
87
-
88
- Syntax: `[breakpoint]:[property]:[scale]`
89
-
90
- ```html
91
- <!-- Padding -->
92
- <div space="p:medium">All sides</div>
93
- <div space="p-x:big p-y:small">Horizontal & vertical</div>
94
-
95
- <!-- Margin -->
96
- <div space="m-b:big">Bottom margin</div>
97
- <div space="m-x:auto">Center horizontally</div>
98
-
99
- <!-- Gap (flex/grid) -->
100
- <div layout="flex" space="g:small">...</div>
101
-
102
- <!-- Sizing -->
103
- <div space="w:[100%] max-w:[1200px]">...</div>
104
- ```
105
-
106
- ### Properties
107
-
108
- - `p`, `p-t`, `p-r`, `p-b`, `p-l`, `p-x`, `p-y` — Padding
109
- - `m`, `m-t`, `m-r`, `m-b`, `m-l`, `m-x`, `m-y` — Margin
110
- - `g`, `g-x`, `g-y` — Gap
111
- - `w`, `h`, `min-w`, `max-w`, `min-h`, `max-h` — Sizing
112
-
113
- ### Arbitrary Values (Escape Hatch)
114
-
115
- ```html
116
- <div space="w:[350px] h:[100vh]">...</div>
117
- ```
118
-
119
- ## Visual Attribute
31
+ ## Documentation
120
32
 
121
- ```html
122
- <!-- Colors -->
123
- <div visual="bg:primary text:white">...</div>
124
-
125
- <!-- Borders & Shadows -->
126
- <div visual="rounded:big shadow:medium">...</div>
127
-
128
- <!-- Typography -->
129
- <span visual="font:bold text-size:big">...</span>
130
- ```
131
-
132
- ### Properties
133
-
134
- - `bg` — Background color
135
- - `text` — Text color or alignment
136
- - `text-size` — Font size (`tiny`, `small`, `medium`, `big`, `giant`, `vast`)
137
- - `font` — Font weight (`normal`, `medium`, `bold`)
138
- - `rounded` — Border radius (`none`, `small`, `medium`, `big`, `round`)
139
- - `shadow` — Box shadow (`none`, `small`, `medium`, `big`, `giant`)
140
-
141
- ## Responsive Design
142
-
143
- ```html
144
- <div space="p:small tab:p:medium lap:p:big">
145
- Grows with screen size
146
- </div>
147
-
148
- <div layout="flex col tab:row">
149
- Column on mobile, row on tablet+
150
- </div>
151
- ```
152
-
153
- ### Breakpoints
154
-
155
- | Prefix | Screen |
156
- |--------|--------|
157
- | `mob:` | 480px+ |
158
- | `tab:` | 768px+ |
159
- | `lap:` | 1024px+ |
160
- | `desk:` | 1280px+ |
161
-
162
- ## Hover & States
163
-
164
- ```html
165
- <button visual="bg:primary hover:bg:[#2563EB]">
166
- Hover me
167
- </button>
168
-
169
- <a visual="text:grey hover:text:primary">Link</a>
170
- ```
171
-
172
- ## CLI Commands
173
-
174
- ```bash
175
- senangstart init # Create config file
176
- senangstart build # One-time build
177
- senangstart dev # Watch mode
178
- ```
179
-
180
- ## Configuration
181
-
182
- ```javascript
183
- // senangstart.config.js
184
- export default {
185
- content: ['./src/**/*.html'],
186
-
187
- output: {
188
- css: './public/senangstart.css',
189
- minify: true
190
- },
191
-
192
- theme: {
193
- spacing: {
194
- 'huge': '256px' // Add custom scale
195
- },
196
- colors: {
197
- 'brand': '#8B5CF6' // Add custom color
198
- }
199
- }
200
- }
201
- ```
33
+ Full docs at [bookklik-technologies.github.io/senangstart-css](https://bookklik-technologies.github.io/senangstart-css/)
202
34
 
203
35
  ## License
204
36
 
205
- MIT
206
-
207
- ---
208
-
209
- *Happy styling!* 🎨
37
+ Read [MIT License](LICENSE.md)
@@ -3,11 +3,11 @@
3
3
  * Zero-config, browser-based CSS compilation
4
4
  *
5
5
  * Usage:
6
- * <script src="https://cdn.senangstart.dev/jit.js"></script>
6
+ * <script src="https://unpkg.com/@bookklik/senangstart-css/dist/senangstart-css.min.js"></script>
7
7
  *
8
8
  * Or with custom config:
9
9
  * <script type="senangstart/config">{ "theme": { "colors": { "brand": "#8B5CF6" } } }</script>
10
- * <script src="https://cdn.senangstart.dev/jit.js"></script>
10
+ * <script src="https://unpkg.com/@bookklik/senangstart-css/dist/senangstart-css.min.js"></script>
11
11
  */
12
12
 
13
13
  (function() {
@@ -80,7 +80,11 @@
80
80
  'high': '100',
81
81
  'top': '9999'
82
82
  }
83
- }
83
+ },
84
+ // Dark mode configuration
85
+ // 'media' - Uses @media (prefers-color-scheme: dark)
86
+ // 'selector' - Uses .dark class on html/body
87
+ darkMode: 'media'
84
88
  };
85
89
 
86
90
  // ============================================
@@ -195,7 +199,7 @@
195
199
  // ============================================
196
200
 
197
201
  const breakpoints = ['mob', 'tab', 'lap', 'desk'];
198
- const states = ['hover', 'focus', 'active', 'disabled'];
202
+ const states = ['hover', 'focus', 'active', 'disabled', 'dark'];
199
203
 
200
204
  function parseToken(raw) {
201
205
  const token = {
@@ -367,7 +371,8 @@
367
371
  if (!cssDeclaration) return '';
368
372
 
369
373
  let selector = `[${attrType}~="${raw}"]`;
370
- if (token.state) {
374
+ // Add pseudo-class for states (but not for 'dark' - handled separately)
375
+ if (token.state && token.state !== 'dark') {
371
376
  selector += `:${token.state}`;
372
377
  }
373
378
 
@@ -409,6 +414,7 @@
409
414
  let css = generateCSSVariables(config);
410
415
 
411
416
  const baseRules = [];
417
+ const darkRules = [];
412
418
  const mediaRules = {
413
419
  mob: [],
414
420
  tab: [],
@@ -420,12 +426,18 @@
420
426
  for (const raw of values) {
421
427
  const rule = generateRule(raw, attrType);
422
428
  if (rule) {
429
+ // Check for dark: prefix
430
+ if (raw.match(/^(mob:|tab:|lap:|desk:)?dark:/)) {
431
+ darkRules.push(rule);
432
+ }
423
433
  // Check for breakpoint prefix
424
- const bpMatch = raw.match(/^(mob|tab|lap|desk):/);
425
- if (bpMatch) {
426
- mediaRules[bpMatch[1]].push(rule);
427
- } else {
428
- baseRules.push(rule);
434
+ else {
435
+ const bpMatch = raw.match(/^(mob|tab|lap|desk):/);
436
+ if (bpMatch) {
437
+ mediaRules[bpMatch[1]].push(rule);
438
+ } else {
439
+ baseRules.push(rule);
440
+ }
429
441
  }
430
442
  }
431
443
  }
@@ -444,6 +456,24 @@
444
456
  }
445
457
  }
446
458
 
459
+ // Add dark mode rules
460
+ if (darkRules.length > 0) {
461
+ const darkMode = config.darkMode || 'media';
462
+
463
+ if (darkMode === 'media') {
464
+ css += `\n@media (prefers-color-scheme: dark) {\n`;
465
+ css += darkRules.map(r => ' ' + r).join('');
466
+ css += '}\n';
467
+ } else {
468
+ // Selector strategy
469
+ const darkSelector = Array.isArray(darkMode) ? darkMode[1] : '.dark';
470
+ css += `\n/* Dark Mode */\n`;
471
+ for (const rule of darkRules) {
472
+ css += rule.replace(/^(\[[^\]]+\])/, `${darkSelector} $1`);
473
+ }
474
+ }
475
+ }
476
+
447
477
  return css;
448
478
  }
449
479
 
@@ -63,7 +63,8 @@ zIndex: {
63
63
  'high': '100',
64
64
  'top': '9999'
65
65
  }
66
- }
66
+ },
67
+ darkMode: 'media'
67
68
  };
68
69
  function loadInlineConfig() {
69
70
  const configEl = document.querySelector('script[type="senangstart/config"]');
@@ -138,7 +139,7 @@ const layoutKeywords = {
138
139
  'sticky': 'position: sticky;'
139
140
  };
140
141
  const breakpoints = ['mob', 'tab', 'lap', 'desk'];
141
- const states = ['hover', 'focus', 'active', 'disabled'];
142
+ const states = ['hover', 'focus', 'active', 'disabled', 'dark'];
142
143
  function parseToken(raw) {
143
144
  const token = {
144
145
  raw,
@@ -279,7 +280,7 @@ break;
279
280
  }
280
281
  if (!cssDeclaration) return '';
281
282
  let selector = `[${attrType}~="${raw}"]`;
282
- if (token.state) {
283
+ if (token.state && token.state !== 'dark') {
283
284
  selector += `:${token.state}`;
284
285
  }
285
286
  return `${selector} { ${cssDeclaration} }\n`;
@@ -306,6 +307,7 @@ return tokens;
306
307
  function compileCSS(tokens, config) {
307
308
  let css = generateCSSVariables(config);
308
309
  const baseRules = [];
310
+ const darkRules = [];
309
311
  const mediaRules = {
310
312
  mob: [],
311
313
  tab: [],
@@ -316,6 +318,10 @@ for (const [attrType, values] of Object.entries(tokens)) {
316
318
  for (const raw of values) {
317
319
  const rule = generateRule(raw, attrType);
318
320
  if (rule) {
321
+ if (raw.match(/^(mob:|tab:|lap:|desk:)?dark:/)) {
322
+ darkRules.push(rule);
323
+ }
324
+ else {
319
325
  const bpMatch = raw.match(/^(mob|tab|lap|desk):/);
320
326
  if (bpMatch) {
321
327
  mediaRules[bpMatch[1]].push(rule);
@@ -325,6 +331,7 @@ baseRules.push(rule);
325
331
  }
326
332
  }
327
333
  }
334
+ }
328
335
  css += baseRules.join('');
329
336
  const { screens } = config.theme;
330
337
  for (const [bp, rules] of Object.entries(mediaRules)) {
@@ -334,6 +341,20 @@ css += rules.map(r => ' ' + r).join('');
334
341
  css += '}\n';
335
342
  }
336
343
  }
344
+ if (darkRules.length > 0) {
345
+ const darkMode = config.darkMode || 'media';
346
+ if (darkMode === 'media') {
347
+ css += `\n@media (prefers-color-scheme: dark) {\n`;
348
+ css += darkRules.map(r => ' ' + r).join('');
349
+ css += '}\n';
350
+ } else {
351
+ const darkSelector = Array.isArray(darkMode) ? darkMode[1] : '.dark';
352
+ css += `\n\n`;
353
+ for (const rule of darkRules) {
354
+ css += rule.replace(/^(\[[^\]]+\])/, `${darkSelector} $1`);
355
+ }
356
+ }
357
+ }
337
358
  return css;
338
359
  }
339
360
  function injectStyles(css) {
@@ -1,50 +1,29 @@
1
1
  {
2
- "hash": "503d8545",
3
- "configHash": "7a659af5",
4
- "lockfileHash": "148e5d09",
5
- "browserHash": "31430ee1",
2
+ "hash": "d06eb655",
3
+ "configHash": "d3307f65",
4
+ "lockfileHash": "50ffd037",
5
+ "browserHash": "086d8429",
6
6
  "optimized": {
7
7
  "vue": {
8
8
  "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
9
9
  "file": "vue.js",
10
- "fileHash": "bb09d08e",
10
+ "fileHash": "a432d3f8",
11
11
  "needsInterop": false
12
12
  },
13
13
  "vitepress > @vue/devtools-api": {
14
14
  "src": "../../../../node_modules/@vue/devtools-api/dist/index.js",
15
15
  "file": "vitepress___@vue_devtools-api.js",
16
- "fileHash": "1792716f",
16
+ "fileHash": "af5a81ac",
17
17
  "needsInterop": false
18
18
  },
19
19
  "vitepress > @vueuse/core": {
20
20
  "src": "../../../../node_modules/@vueuse/core/index.mjs",
21
21
  "file": "vitepress___@vueuse_core.js",
22
- "fileHash": "97e57308",
23
- "needsInterop": false
24
- },
25
- "vitepress > @vueuse/integrations/useFocusTrap": {
26
- "src": "../../../../node_modules/@vueuse/integrations/useFocusTrap.mjs",
27
- "file": "vitepress___@vueuse_integrations_useFocusTrap.js",
28
- "fileHash": "4a67da49",
29
- "needsInterop": false
30
- },
31
- "vitepress > mark.js/src/vanilla.js": {
32
- "src": "../../../../node_modules/mark.js/src/vanilla.js",
33
- "file": "vitepress___mark__js_src_vanilla__js.js",
34
- "fileHash": "ffe975a7",
35
- "needsInterop": false
36
- },
37
- "vitepress > minisearch": {
38
- "src": "../../../../node_modules/minisearch/dist/es/index.js",
39
- "file": "vitepress___minisearch.js",
40
- "fileHash": "da3112be",
22
+ "fileHash": "cfba6d4a",
41
23
  "needsInterop": false
42
24
  }
43
25
  },
44
26
  "chunks": {
45
- "chunk-2CLQ7TTZ": {
46
- "file": "chunk-2CLQ7TTZ.js"
47
- },
48
27
  "chunk-LE5NDSFD": {
49
28
  "file": "chunk-LE5NDSFD.js"
50
29
  }