@birdapi/velinstyle 0.7.0 → 0.9.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.
Files changed (336) hide show
  1. package/README.de.md +135 -224
  2. package/README.md +134 -223
  3. package/cli/blueprint.js +8 -0
  4. package/cli/blueprints/bottom-nav-mobile.html +17 -0
  5. package/cli/blueprints/cookie-consent.html +9 -0
  6. package/cli/blueprints/empty-state.html +5 -0
  7. package/cli/blueprints/filter-bar.html +15 -0
  8. package/cli/blueprints/notification-center.html +13 -0
  9. package/cli/blueprints/onboarding.html +23 -0
  10. package/cli/blueprints/pricing-table.html +20 -0
  11. package/cli/blueprints/settings-panel.html +20 -0
  12. package/cli/cli-manifest.json +97 -0
  13. package/cli/docgen/extract-a11y.js +89 -0
  14. package/cli/docgen/extract-attributes.js +95 -0
  15. package/cli/docgen/extract-cli.js +50 -0
  16. package/cli/docgen/extract-components.js +175 -0
  17. package/cli/docgen/extract-meta.js +32 -0
  18. package/cli/docgen/extract-rules.js +76 -0
  19. package/cli/docgen/extract-tokens.js +79 -0
  20. package/cli/docgen/extract-utilities.js +75 -0
  21. package/cli/docgen/markdown.js +43 -0
  22. package/cli/docs-generate.js +196 -0
  23. package/cli/index.js +236 -5
  24. package/cli/layout-audit.js +325 -0
  25. package/cli/meta.js +97 -0
  26. package/cli/perf-audit.js +174 -0
  27. package/cli/pii-scanner.js +134 -0
  28. package/cli/scaffold-recipes.json +70 -0
  29. package/cli/scaffold.js +155 -0
  30. package/cli/scanner-rules-data.js +62 -0
  31. package/cli/scanner.js +136 -1
  32. package/cli/search-index.js +163 -0
  33. package/cli/tokens-build.js +21 -1
  34. package/cli/tokens-validate.js +69 -0
  35. package/components/a11y-entry.js +42 -0
  36. package/components/a11y-utils.js +71 -0
  37. package/components/focus-manager.js +45 -8
  38. package/components/index.js +40 -11
  39. package/components/runtime/component-loaders.js +43 -0
  40. package/components/runtime/index.js +77 -0
  41. package/components/runtime-entry.js +10 -0
  42. package/components/sanitize.js +135 -28
  43. package/components/shadow-a11y-styles.js +18 -0
  44. package/components/velin-accordion.js +12 -0
  45. package/components/velin-announcer.js +35 -0
  46. package/components/velin-bottom-nav.js +108 -0
  47. package/components/velin-carousel.js +2 -2
  48. package/components/velin-code-block.js +142 -0
  49. package/components/velin-combobox.js +149 -0
  50. package/components/velin-command.js +142 -0
  51. package/components/velin-copy.js +18 -5
  52. package/components/velin-counter.js +155 -0
  53. package/components/velin-dialog.js +9 -1
  54. package/components/velin-email.js +94 -0
  55. package/components/velin-flip.js +220 -0
  56. package/components/velin-icon.js +99 -22
  57. package/components/velin-lightbox.js +8 -3
  58. package/components/velin-live-dot.js +90 -0
  59. package/components/velin-menubar.js +83 -0
  60. package/components/velin-modal.js +6 -3
  61. package/components/velin-popover.js +34 -2
  62. package/components/velin-rating.js +91 -0
  63. package/components/velin-reveal.js +22 -0
  64. package/components/velin-scroll-top.js +1 -1
  65. package/components/velin-search.js +267 -0
  66. package/components/velin-secure-field.js +99 -0
  67. package/components/velin-segmented-control.js +108 -0
  68. package/components/velin-sheet.js +107 -0
  69. package/components/velin-sparkline.js +227 -0
  70. package/components/{velin-stepper-wc.js → velin-stepper.js} +37 -8
  71. package/components/velin-theme-toggle.js +284 -60
  72. package/components/velin-toast.js +4 -0
  73. package/components/{velin-tooltip-wc.js → velin-tooltip.js} +22 -3
  74. package/core/a11y/component-contracts.json +221 -0
  75. package/core/attributes/index.js +6 -0
  76. package/core/attributes/registry.js +268 -0
  77. package/core/highlight/highlight.js +114 -0
  78. package/core/highlight/index.js +29 -0
  79. package/core/highlight/languages/_utils.js +52 -0
  80. package/core/highlight/languages/blade.js +16 -0
  81. package/core/highlight/languages/css.js +26 -0
  82. package/core/highlight/languages/html.js +17 -0
  83. package/core/highlight/languages/js.js +58 -0
  84. package/core/highlight/languages/json.js +14 -0
  85. package/core/highlight/languages/markdown.js +16 -0
  86. package/core/highlight/languages/php.js +39 -0
  87. package/core/highlight/languages/plain.js +7 -0
  88. package/core/highlight/languages/shell.js +33 -0
  89. package/core/highlight/languages/sql.js +20 -0
  90. package/core/highlight/languages/typescript.js +28 -0
  91. package/core/highlight/observe.js +53 -0
  92. package/core/highlight/registry.js +107 -0
  93. package/core/highlight/render.js +35 -0
  94. package/core/highlight/types.js +28 -0
  95. package/core/meta/build.js +293 -0
  96. package/core/meta/index.js +17 -0
  97. package/core/meta/schema.js +49 -0
  98. package/core/motion/effects.js +54 -0
  99. package/core/motion/index.js +76 -0
  100. package/core/motion/scheduler.js +72 -0
  101. package/core/motion/scroll.js +32 -0
  102. package/core/motion/stagger.js +24 -0
  103. package/core/search/docs-url.js +96 -0
  104. package/core/search/engine.js +139 -0
  105. package/core/search/highlight.js +48 -0
  106. package/core/search/index.js +126 -0
  107. package/core/search/providers.js +36 -0
  108. package/core/search/types.js +61 -0
  109. package/core/search/worker-client.js +56 -0
  110. package/core/search/worker.js +20 -0
  111. package/dist/chunks/a11y-utils-IRC7LOPF.js +16 -0
  112. package/dist/chunks/attributes-3BZLI7XF.js +364 -0
  113. package/dist/chunks/attributes-4N5JP4CG.js +364 -0
  114. package/dist/chunks/attributes-5Q2WXGRC.js +374 -0
  115. package/dist/chunks/attributes-AIR7SVLK.js +364 -0
  116. package/dist/chunks/attributes-BGRN5XZO.js +364 -0
  117. package/dist/chunks/attributes-BVSQAYLR.js +364 -0
  118. package/dist/chunks/attributes-CDYFUY7Y.js +364 -0
  119. package/dist/chunks/attributes-JMYJZBPE.js +364 -0
  120. package/dist/chunks/attributes-R5JY3X4O.js +374 -0
  121. package/dist/chunks/attributes-STYCS3O5.js +391 -0
  122. package/dist/chunks/attributes-TNSPQTHX.js +374 -0
  123. package/dist/chunks/attributes-TPANLMLF.js +391 -0
  124. package/dist/chunks/blade-LIQLVKZQ.js +19 -0
  125. package/dist/chunks/browser-MRKYZPEH.js +1149 -0
  126. package/dist/chunks/chunk-2354NEBP.js +109 -0
  127. package/dist/chunks/chunk-2VNA7G7S.js +109 -0
  128. package/dist/chunks/chunk-42VVPW6N.js +132 -0
  129. package/dist/chunks/chunk-7FFAMRFV.js +44 -0
  130. package/dist/chunks/chunk-7MCGPHVC.js +69 -0
  131. package/dist/chunks/chunk-AQLRJSGG.js +109 -0
  132. package/dist/chunks/chunk-EWPSDMQT.js +109 -0
  133. package/dist/chunks/chunk-F7OLHTGX.js +22 -0
  134. package/dist/chunks/chunk-J472ERN2.js +242 -0
  135. package/dist/chunks/chunk-LA7264K4.js +85 -0
  136. package/dist/chunks/chunk-M5CHQVP6.js +61 -0
  137. package/dist/chunks/chunk-MKZP2TBH.js +89 -0
  138. package/dist/chunks/chunk-QTJJ3DPO.js +109 -0
  139. package/dist/chunks/chunk-RDE3QE7Z.js +89 -0
  140. package/dist/chunks/chunk-RSMRR27R.js +109 -0
  141. package/dist/chunks/chunk-RZQVWFHW.js +109 -0
  142. package/dist/chunks/chunk-SRL6EWHP.js +109 -0
  143. package/dist/chunks/chunk-U4XHMZ7D.js +109 -0
  144. package/dist/chunks/chunk-V5YIUA6G.js +109 -0
  145. package/dist/chunks/chunk-XIET2VSZ.js +109 -0
  146. package/dist/chunks/chunk-XYLJ2GCB.js +205 -0
  147. package/dist/chunks/chunk-Z4JYQ2XX.js +51 -0
  148. package/dist/chunks/chunk-ZPSPKUYD.js +109 -0
  149. package/dist/chunks/css-MQ5YU77P.js +28 -0
  150. package/dist/chunks/highlight-GJHHV4KM.js +37 -0
  151. package/dist/chunks/highlight-XTHRKBA3.js +37 -0
  152. package/dist/chunks/html-ZODC4DLQ.js +20 -0
  153. package/dist/chunks/js-MNSNYTJU.js +7 -0
  154. package/dist/chunks/json-VEM2HFH3.js +17 -0
  155. package/dist/chunks/markdown-E7OPGS3S.js +19 -0
  156. package/dist/chunks/php-MLL7T3LT.js +41 -0
  157. package/dist/chunks/plain-LJJDC5TN.js +8 -0
  158. package/dist/chunks/runtime-entry.js +14 -0
  159. package/dist/chunks/shell-QTRK4U4E.js +35 -0
  160. package/dist/chunks/sql-PPWLHGJ2.js +23 -0
  161. package/dist/chunks/typescript-JT3CCYWL.js +30 -0
  162. package/dist/chunks/velin-accordion-FBIPAEXG.js +105 -0
  163. package/dist/chunks/velin-accordion-QAQO7BI7.js +117 -0
  164. package/dist/chunks/velin-announcer-PVTXXCWR.js +33 -0
  165. package/dist/chunks/velin-bottom-nav-2N2TYWOF.js +86 -0
  166. package/dist/chunks/velin-bottom-nav-7GEMPIM6.js +86 -0
  167. package/dist/chunks/velin-bottom-nav-CTU6FFZV.js +101 -0
  168. package/dist/chunks/velin-bottom-nav-N3DFQR66.js +86 -0
  169. package/dist/chunks/velin-carousel-Y5VCOABZ.js +213 -0
  170. package/dist/chunks/velin-carousel-ZTBANFQQ.js +213 -0
  171. package/dist/chunks/velin-code-block-ASUBTAQV.js +119 -0
  172. package/dist/chunks/velin-code-block-CIAURDRJ.js +132 -0
  173. package/dist/chunks/velin-code-block-TSUKPY4C.js +123 -0
  174. package/dist/chunks/velin-code-block-Y6CM726Q.js +119 -0
  175. package/dist/chunks/velin-collapse-5XYBUIID.js +80 -0
  176. package/dist/chunks/velin-combobox-2KDTCQ7N.js +155 -0
  177. package/dist/chunks/velin-combobox-NXS4QB4R.js +155 -0
  178. package/dist/chunks/velin-combobox-UGA56HP3.js +155 -0
  179. package/dist/chunks/velin-command-CKDNO4BW.js +148 -0
  180. package/dist/chunks/velin-command-M7RNHUPR.js +136 -0
  181. package/dist/chunks/velin-command-ONKO2A3J.js +136 -0
  182. package/dist/chunks/velin-command-TMLSRGIU.js +136 -0
  183. package/dist/chunks/velin-copy-G2TZ5YBB.js +81 -0
  184. package/dist/chunks/velin-copy-NYDBOKXT.js +81 -0
  185. package/dist/chunks/velin-copy-T5KDTDXP.js +81 -0
  186. package/dist/chunks/velin-countdown-4ZVDGK4R.js +101 -0
  187. package/dist/chunks/velin-countdown-5XSTN3BH.js +101 -0
  188. package/dist/chunks/velin-countdown-7AIY66CU.js +101 -0
  189. package/dist/chunks/velin-counter-ISCTEAHI.js +118 -0
  190. package/dist/chunks/velin-counter-L5FYJF7A.js +121 -0
  191. package/dist/chunks/velin-dialog-D2GUHSCD.js +144 -0
  192. package/dist/chunks/velin-dialog-ELFOZIXZ.js +152 -0
  193. package/dist/chunks/velin-dialog-GTTZI564.js +147 -0
  194. package/dist/chunks/velin-dialog-IJLFDXAJ.js +144 -0
  195. package/dist/chunks/velin-dialog-TNS3WXMB.js +144 -0
  196. package/dist/chunks/velin-drawer-BE6TYN3H.js +130 -0
  197. package/dist/chunks/velin-drawer-DLL2GLT6.js +130 -0
  198. package/dist/chunks/velin-drawer-MJS6WCF7.js +130 -0
  199. package/dist/chunks/velin-dropdown-PLUIFA5M.js +172 -0
  200. package/dist/chunks/velin-email-N5B5ZYTE.js +90 -0
  201. package/dist/chunks/velin-email-NTM6DG3V.js +90 -0
  202. package/dist/chunks/velin-email-RBX6ZR4S.js +90 -0
  203. package/dist/chunks/velin-haptic-4QQTM3RK.js +50 -0
  204. package/dist/chunks/velin-icon-7M76DOPB.js +164 -0
  205. package/dist/chunks/velin-icon-KZO3IEHG.js +164 -0
  206. package/dist/chunks/velin-icon-WTFPG2DD.js +191 -0
  207. package/dist/chunks/velin-icon-ZTSKUOVN.js +193 -0
  208. package/dist/chunks/velin-lightbox-6E7CAATP.js +149 -0
  209. package/dist/chunks/velin-lightbox-I75U6JF4.js +140 -0
  210. package/dist/chunks/velin-lightbox-QOTB4PRL.js +140 -0
  211. package/dist/chunks/velin-lightbox-UCD6N7HF.js +140 -0
  212. package/dist/chunks/velin-live-dot-RJHX2DGY.js +74 -0
  213. package/dist/chunks/velin-live-dot-XHUZCIDZ.js +67 -0
  214. package/dist/chunks/velin-menubar-I426AED2.js +86 -0
  215. package/dist/chunks/velin-menubar-J66JXRWW.js +86 -0
  216. package/dist/chunks/velin-menubar-SFEXJE56.js +86 -0
  217. package/dist/chunks/velin-modal-2HOBXE6F.js +176 -0
  218. package/dist/chunks/velin-modal-5HYNNNUI.js +176 -0
  219. package/dist/chunks/velin-modal-AEOTZ67O.js +177 -0
  220. package/dist/chunks/velin-modal-GLI2XZZB.js +176 -0
  221. package/dist/chunks/velin-persist-DFPL3QP4.js +110 -0
  222. package/dist/chunks/velin-popover-EXINRIGJ.js +145 -0
  223. package/dist/chunks/velin-popover-HQW6Q2Y6.js +172 -0
  224. package/dist/chunks/velin-popover-OXX7MRZ6.js +145 -0
  225. package/dist/chunks/velin-popover-T72HK3DF.js +151 -0
  226. package/dist/chunks/velin-popover-YKCCROJG.js +145 -0
  227. package/dist/chunks/velin-progress-ring-E4YRLZHH.js +66 -0
  228. package/dist/chunks/velin-rating-6CDBI6DG.js +91 -0
  229. package/dist/chunks/velin-rating-N4DI2XNL.js +91 -0
  230. package/dist/chunks/velin-rating-XRQJV4LO.js +91 -0
  231. package/dist/chunks/velin-scroll-top-F2FCZNYD.js +58 -0
  232. package/dist/chunks/velin-scroll-top-OHYVVHHY.js +58 -0
  233. package/dist/chunks/velin-scrollspy-OKCT4FDV.js +50 -0
  234. package/dist/chunks/velin-search-2XRQFBCS.js +556 -0
  235. package/dist/chunks/velin-search-4YHJWYSS.js +556 -0
  236. package/dist/chunks/velin-search-7B4KJ6TX.js +557 -0
  237. package/dist/chunks/velin-search-LWHY23Q5.js +474 -0
  238. package/dist/chunks/velin-secure-field-6PV7RZDJ.js +95 -0
  239. package/dist/chunks/velin-secure-field-H7FSBUJW.js +95 -0
  240. package/dist/chunks/velin-secure-field-OFNAXCDP.js +95 -0
  241. package/dist/chunks/velin-segmented-control-EKL4E3BL.js +109 -0
  242. package/dist/chunks/velin-segmented-control-GYD5BIXQ.js +109 -0
  243. package/dist/chunks/velin-segmented-control-PQX6LKOJ.js +109 -0
  244. package/dist/chunks/velin-sheet-3OGI4HD7.js +119 -0
  245. package/dist/chunks/velin-sheet-OUK6572T.js +119 -0
  246. package/dist/chunks/velin-sheet-R2Y67X6H.js +119 -0
  247. package/dist/chunks/velin-sparkline-GVEANJVW.js +184 -0
  248. package/dist/chunks/velin-sparkline-KDA3GQAN.js +162 -0
  249. package/dist/chunks/velin-sparkline-XVTFC6GE.js +181 -0
  250. package/dist/chunks/velin-stepper-2ZIHLKGM.js +141 -0
  251. package/dist/chunks/velin-stepper-7ECRUYHD.js +148 -0
  252. package/dist/chunks/velin-stepper-FYEUEWE6.js +141 -0
  253. package/dist/chunks/velin-stepper-X54WGHDG.js +141 -0
  254. package/dist/chunks/velin-stepper-wc-QU3KRVQR.js +133 -0
  255. package/dist/chunks/velin-tabs-5UQ5ZVMV.js +138 -0
  256. package/dist/chunks/velin-theme-toggle-32J2CBNC.js +291 -0
  257. package/dist/chunks/velin-theme-toggle-BNNS7WLV.js +285 -0
  258. package/dist/chunks/velin-theme-toggle-NO7V4TWI.js +285 -0
  259. package/dist/chunks/velin-theme-toggle-QELCJM2Q.js +291 -0
  260. package/dist/chunks/velin-toast-OMMOA2DK.js +109 -0
  261. package/dist/chunks/velin-toast-RCZ4CSUC.js +109 -0
  262. package/dist/chunks/velin-toast-RSF2IHT3.js +113 -0
  263. package/dist/chunks/velin-toast-WEUBTJG6.js +109 -0
  264. package/dist/chunks/velin-tooltip-664IOHZA.js +112 -0
  265. package/dist/chunks/velin-tooltip-BDHGRTQB.js +112 -0
  266. package/dist/chunks/velin-tooltip-HVUOKNVX.js +112 -0
  267. package/dist/chunks/velin-tooltip-wc-LXDVT6DE.js +103 -0
  268. package/dist/chunks/worker-client-R6DBYPFT.js +46 -0
  269. package/dist/llms.test.txt +40 -0
  270. package/dist/llms.txt +40 -0
  271. package/dist/search-index.json +1773 -0
  272. package/dist/search-index.test.json +1773 -0
  273. package/dist/themes/brutalist.min.css +1 -1
  274. package/dist/themes/midnight.min.css +1 -1
  275. package/dist/themes/pastel.min.css +1 -1
  276. package/dist/themes/retro.min.css +1 -1
  277. package/dist/themes/sunset.min.css +1 -1
  278. package/dist/velin-agent.json +684 -0
  279. package/dist/velin-agent.test.json +684 -0
  280. package/dist/velinstyle-components.iife.js +7959 -2199
  281. package/dist/velinstyle-components.js +7982 -2174
  282. package/dist/velinstyle-components.min.js +521 -90
  283. package/dist/velinstyle.css +1290 -282
  284. package/dist/velinstyle.d.ts +54 -0
  285. package/dist/velinstyle.min.css +1 -1
  286. package/examples/search-index.schema.json +33 -0
  287. package/package.json +57 -10
  288. package/src/a11y/authentication.css +37 -0
  289. package/src/a11y/consistent-help.css +22 -0
  290. package/src/a11y/dragging-alternatives.css +30 -0
  291. package/src/a11y/focus-appearance.css +20 -0
  292. package/src/a11y/high-contrast-aaa.css +16 -26
  293. package/src/a11y/security.css +18 -0
  294. package/src/a11y/skip-link.css +3 -1
  295. package/src/a11y/sr-only.css +1 -1
  296. package/src/base/reset.css +0 -25
  297. package/src/base/wc-placeholder.css +102 -0
  298. package/src/components/attributes.css +42 -0
  299. package/src/components/highlight.css +182 -0
  300. package/src/components/input-group.css +1 -2
  301. package/src/components/nav.css +151 -151
  302. package/src/components/search.css +95 -0
  303. package/src/components/stepper.css +2 -4
  304. package/src/components/timeline.css +1 -2
  305. package/src/components/tooltip.css +2 -4
  306. package/src/layout/container.css +5 -5
  307. package/src/layout/grid.css +8 -8
  308. package/src/layout/patterns.css +5 -5
  309. package/src/themes/brutalist.css +2 -11
  310. package/src/themes/corporate.css +0 -9
  311. package/src/themes/earth.css +0 -9
  312. package/src/themes/forest.css +0 -9
  313. package/src/themes/midnight.css +1 -10
  314. package/src/themes/neon.css +0 -9
  315. package/src/themes/nordic.css +0 -9
  316. package/src/themes/ocean.css +0 -9
  317. package/src/themes/pastel.css +1 -10
  318. package/src/themes/retro.css +2 -11
  319. package/src/themes/sharp.css +0 -7
  320. package/src/themes/soft.css +0 -7
  321. package/src/themes/sunset.css +1 -10
  322. package/src/tokens/color.css +45 -46
  323. package/src/tokens/fonts.css +10 -0
  324. package/src/tokens/motion.css +7 -0
  325. package/src/tokens/typography.css +4 -5
  326. package/src/utilities/animation.css +99 -3
  327. package/src/utilities/chart-animation.css +101 -0
  328. package/src/utilities/display.css +3 -3
  329. package/src/utilities/divide.css +2 -6
  330. package/src/utilities/filter-effects.css +103 -0
  331. package/src/utilities/responsive.css +4 -4
  332. package/src/utilities/safe-area.css +39 -0
  333. package/src/utilities/scroll-animation.css +34 -0
  334. package/src/utilities/spacing.css +17 -8
  335. package/src/utilities/text.css +4 -1
  336. package/src/velinstyle.css +12 -0
package/README.md CHANGED
@@ -1,21 +1,26 @@
1
1
  <div align="center">
2
2
 
3
- <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset=".github/assets/readme-banner-dark.svg">
5
- <img src=".github/assets/readme-banner.svg" alt="VelinStyle — accessibility-first CSS and Web Components" width="100%">
6
- </picture>
7
-
8
- <br>
3
+ ```
4
+ ██╗ ██╗███████╗██╗ ██╗███╗ ██╗███████╗████████╗██╗ ██╗██╗ ███████╗
5
+ ██║ ██║██╔════╝██║ ██║████╗ ██║██╔════╝╚══██╔══╝██║ ██║██║ ██╔════╝
6
+ ██║ ██║█████╗ ██║ ██║██╔██╗ ██║███████╗ ██║ ███████║██║ █████╗
7
+ ╚██╗ ██╔╝██╔══╝ ██║ ██║██║╚██╗██║╚════██║ ██║ ██╔══██║██║ ██╔══╝
8
+ ╚████╔╝ ███████╗███████╗██║██║ ╚████║███████║ ██║ ██║ ██║███████╗███████╗
9
+ ╚═══╝ ╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝
10
+ ```
9
11
 
10
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-2563eb?style=flat-square)](LICENSE)
11
- [![Release](https://img.shields.io/badge/Release-v0.7.0-2563eb?style=flat-square)](CHANGELOG.md)
12
- [![WCAG AA](https://img.shields.io/badge/WCAG-AA-16a34a?style=flat-square)](docs/a11y.html)
13
- [![CSS min](https://img.shields.io/badge/CSS_min-~46KB-15803d?style=flat-square)]()
14
- [![JS min](https://img.shields.io/badge/JS_min-~66KB-15803d?style=flat-square)]()
13
+ [![Release](https://img.shields.io/badge/Release-v0.9.0-2563eb?style=flat-square)](https://github.com/SkyliteDesign/velinstyle/releases/tag/v0.9.0)
15
14
  [![npm version](https://img.shields.io/npm/v/@birdapi/velinstyle?style=flat-square)](https://www.npmjs.com/package/@birdapi/velinstyle)
16
- [![GitHub Pages](https://img.shields.io/badge/docs-GitHub_Pages-2563eb?style=flat-square)](https://skylitedesign.github.io/velinstyle/)
15
+ [![WCAG 2.2 AAA](https://img.shields.io/badge/WCAG_2.2-AAA-16a34a?style=flat-square)](https://velinstyle.info/docs/a11y.html)
16
+ [![GitHub stars](https://img.shields.io/github/stars/SkyliteDesign/velinstyle?style=flat-square)](https://github.com/SkyliteDesign/velinstyle/stargazers)
17
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-2563eb?style=flat-square)](CONTRIBUTING.md)
18
+
19
+ ```bash
20
+ npm i @birdapi/velinstyle
21
+ ```
17
22
 
18
- [Documentation](https://skylitedesign.github.io/velinstyle/) · [npm](https://www.npmjs.com/package/@birdapi/velinstyle) · [Samples](samples/) · [Playground](tools/playground/index.html) · [Theme Builder](tools/theme-builder/index.html) · [Issues](https://github.com/SkyliteDesign/velinstyle/issues)
23
+ **[Website](https://velinstyle.info)** · **[Docs](https://velinstyle.info/docs/)** · **[Demos](https://velinstyle.info/demos/)** · **[npm](https://www.npmjs.com/package/@birdapi/velinstyle)** · **[Star on GitHub](https://github.com/SkyliteDesign/velinstyle)**
19
24
 
20
25
  **English** · **[Deutsch](README.de.md)**
21
26
 
@@ -23,282 +28,190 @@
23
28
 
24
29
  ---
25
30
 
26
- ## Contents
27
-
28
- - [The problem & the fix](#the-problem--the-fix)
29
- - [What you get](#what-you-get)
30
- - [Architecture](#architecture)
31
- - [Quick start](#quick-start)
32
- - [Why VelinStyle?](#why-velinstyle)
33
- - [Demo gallery](#demo-gallery)
34
- - [CLI reference](#cli-reference)
35
- - [Ecosystem](#ecosystem)
36
- - [Join in](#join-in)
37
- - [Browser support](#browser-support)
38
- - [License](#license)
39
-
40
- ---
41
-
42
- ## The problem & the fix
43
-
44
- <table>
45
- <tr>
46
- <td width="50%" valign="top">
47
-
48
- ### The problem
49
-
50
- Teams ship UI under pressure. **Accessibility** and **consistent theming** are often bolted on late—if at all. Heavy bundles, Bootstrap sameness, or Tailwind sprawl frustrate designers and engineers alike.
51
-
52
- </td>
53
- <td width="50%" valign="top">
54
-
55
- ### The VelinStyle answer
31
+ **VelinStyle** is the **WCAG 2.2 AAA CSS framework** with native JavaScript runtime and Web Components — CSS utilities, 0.9.0 modules (search, motion, highlight, attributes, meta), and security tooling, with **no external UI framework dependencies** in the core.
56
32
 
57
- **WCAG AA patterns**, **OKLCH tokens**, **container-aware layout**, and **interactive Web Components** are part of the system—not an afterthought. Readable CSS, optional CLI automation, zero preprocessor lock-in.
33
+ Built for teams who want **readable HTML**, **AAA token defaults** (AA via `data-velin-contrast="aa"`), and **CLI automation** instead of utility sprawl.
58
34
 
59
- </td>
60
- </tr>
61
- </table>
35
+ > **Dogfooding:** The entire VelinStyle website and documentation runs 100% on VelinStyle — no external scripts or UI frameworks.
62
36
 
63
37
  ---
64
38
 
65
- ## What you get
66
-
67
- <table>
68
- <thead>
69
- <tr><th></th><th>Capability</th><th>What it means for you</th></tr>
70
- </thead>
71
- <tbody>
72
- <tr><td align="center">♿</td><td><strong>WCAG AA by design</strong></td><td>Focus, ARIA, and keyboard patterns in components and overlays</td></tr>
73
- <tr><td align="center">🎨</td><td><strong>OKLCH + 13 theme presets</strong></td><td>Perceptually uniform colors; dark mode via token swap</td></tr>
74
- <tr><td align="center">📦</td><td><strong>~46 KB CSS + ~66 KB JS (min)</strong></td><td>Lean defaults vs. heavier all-in-one stacks</td></tr>
75
- <tr><td align="center">📐</td><td><strong>Container Queries + utilities</strong></td><td>Components adapt to <em>their</em> container, not only the viewport</td></tr>
76
- <tr><td align="center">🧩</td><td><strong>25 CSS modules · 21 Web Components</strong></td><td>Modals, tabs, drawers, toasts, icons—documented APIs in <a href="docs/css-components.html">CSS</a> &amp; <a href="docs/components.html">WC docs</a></td></tr>
77
- <tr><td align="center">🛠️</td><td><strong>Optional CLI</strong></td><td><code>init</code>, <code>build</code>, <code>icons</code>, <code>scan</code>, <code>prefix</code>, <code>blueprint</code>, <code>tokens build</code></td></tr>
78
- <tr><td align="center">🌍</td><td><strong>RTL-ready</strong></td><td>Logical properties and layout-minded defaults · <a href="samples/rtl.html">RTL sample</a></td></tr>
79
- </tbody>
80
- </table>
39
+ ## Features at a glance
81
40
 
82
- ---
83
-
84
- ## Architecture
85
-
86
- ```mermaid
87
- flowchart LR
88
- tokens[tokens] --> reset[reset]
89
- reset --> base[base]
90
- base --> a11y[a11y]
91
- a11y --> layout[layout]
92
- layout --> components[components]
93
- components --> utilities[utilities]
94
- utilities --> themes[themes]
95
- ```
96
-
97
- Entry: [`src/velinstyle.css`](src/velinstyle.css) · Build output: `dist/` (`npm run build`)
98
-
99
- ```css
100
- @layer tokens, reset, base, a11y, layout, components, utilities, themes;
101
- ```
41
+ - **CSS utilities** — `velin-*` spacing, color, flex, motion, safe-area; cascade layers + OKLCH tokens
42
+ - **35+ components** — semantic BEM classes (`velin-btn`, `velin-card`, `velin-grid`, …)
43
+ - **Motion runtime** — reveal, stagger, scroll-driven animation, rAF scheduler
44
+ - **VelinSearch** — fuzzy offline search with highlighting and categories
45
+ - **Syntax highlighting** — lazy in-view highlighting for JS, HTML, CSS, JSON, and more
46
+ - **HTML attributes** — 27 declarative bridges (`velin-modal`, `velin-reveal`, `velin-scroll-top`, `velin-code`, …)
47
+ - **Quality** — 36/36 component a11y contracts, Playwright cross-browser smoke (`npm run test:e2e`), CLS placeholders (`wc-placeholder.css`)
48
+ - **Security tools** — `scan`, PII rules, sanitize API, hardened components
49
+ - **CLI** — init, build, scan, scaffold, tokens, docs generate, perf audit, layout audit
50
+ - **Velin-Meta** — `velin-agent.json`, `llms.txt`, and page-level agent JSON for AI assistants
102
51
 
103
52
  ---
104
53
 
105
- ## Quick start
106
-
107
- ### <span>①</span> Install
54
+ ## Installation
108
55
 
109
56
  ```bash
110
- npm install @birdapi/velinstyle
111
- ```
112
-
113
- ### <span>②</span> Link CSS + components (ES modules)
114
-
115
- ```html
116
- <link rel="stylesheet" href="node_modules/@birdapi/velinstyle/dist/velinstyle.min.css">
117
- <script type="module" src="node_modules/@birdapi/velinstyle/dist/velinstyle-components.min.js"></script>
118
- ```
119
-
120
- <details>
121
- <summary><strong>CDN alternative</strong> (skip npm install)</summary>
122
-
123
- ```html
124
- <link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@latest/dist/velinstyle.min.css">
125
- <script type="module" src="https://unpkg.com/@birdapi/velinstyle@latest/dist/velinstyle-components.min.js"></script>
57
+ npm i @birdapi/velinstyle
126
58
  ```
127
59
 
128
- </details>
60
+ | Path | Use |
61
+ | --- | --- |
62
+ | `@birdapi/velinstyle/css` | Full minified stylesheet |
63
+ | `@birdapi/velinstyle/bundle` | Web Components ESM bundle |
64
+ | `@birdapi/velinstyle/search` | VelinSearch module |
65
+ | `@birdapi/velinstyle/motion` | Motion runtime |
66
+ | `@birdapi/velinstyle/attributes` | HTML attribute bridges |
67
+ | `@birdapi/velinstyle/highlight` | Syntax highlighting |
68
+ | `@birdapi/velinstyle/meta` | Agent metadata API |
129
69
 
130
- ### <span>③</span> Mark up your first screen
70
+ **CDN (pin version):**
131
71
 
132
72
  ```html
133
- <meta name="viewport" content="width=device-width, initial-scale=1">
134
- <div class="velin-container velin-p-6">
135
- <p class="velin-lead velin-text-muted">Hello, VelinStyle.</p>
136
- <button type="button" class="velin-btn velin-btn--primary">Primary action</button>
137
- </div>
73
+ <link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@0.9.0/dist/velinstyle.min.css">
74
+ <script type="module" src="https://unpkg.com/@birdapi/velinstyle@0.9.0/dist/velinstyle-components.min.js"></script>
138
75
  ```
139
76
 
140
- > **Cloning this repo?** `dist/` is not committed. Run `npm install` and `npm run build`, then point HTML at `dist/velinstyle.min.css` and `dist/velinstyle-components.min.js`. Legacy pages without modules: `velinstyle-components.iife.js` — see [docs](docs/index.html).
77
+ After cloning, run `npm install && npm run build` `dist/` is generated, not committed.
141
78
 
142
79
  ---
143
80
 
144
- ## Why VelinStyle?
81
+ ## Quickstart
145
82
 
146
- A **coherent product language**—prefix classes (`velin-`), explicit `@layer` architecture, modern CSS (`@scope`, nesting, `:has()`)—without sacrificing **ship speed**.
147
-
148
- | | Bootstrap | Tailwind | **VelinStyle** |
149
- | --- | :---: | :---: | :---: |
150
- | A11y | ⚠️ Partial | — Not built-in | ✅ **WCAG AA structurally** |
151
- | Color | HEX/RGB | HEX/RGB | ✅ **OKLCH** + tokenized themes |
152
- | Dark mode | ⚠️ Build / manual | `dark:` variants | ✅ **Token swap** (`data-velin-theme`) |
153
- | Layout | Viewport-first | Viewport utilities | ✅ **Container Queries** + media |
154
- | Interactivity | ⚠️ Legacy JS patterns | Bring your own | ✅ **Web Components** |
155
- | Bundle (indicative) | ~230 KB CSS+JS | JIT / varies | ✅ **~46 KB CSS + ~66 KB JS (min)** |
83
+ ```html
84
+ <!DOCTYPE html>
85
+ <html lang="en" data-velin-theme="ocean">
86
+ <head>
87
+ <meta charset="UTF-8">
88
+ <meta name="viewport" content="width=device-width, initial-scale=1">
89
+ <link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@0.9.0/dist/velinstyle.min.css">
90
+ <script type="module" src="https://unpkg.com/@birdapi/velinstyle@0.9.0/dist/velinstyle-components.min.js"></script>
91
+ </head>
92
+ <body class="velin-p-6">
93
+ <button type="button" class="velin-btn velin-btn--primary" velin-reveal="slide-up">Ship it</button>
94
+ <velin-code-block language="html" line-numbers>&lt;p class="velin-text-muted"&gt;Hello VelinStyle&lt;/p&gt;</velin-code-block>
95
+ </body>
96
+ </html>
97
+ ```
156
98
 
157
99
  ---
158
100
 
159
- ## Demo gallery
160
-
161
- | Demo | Page | Demo | Page |
162
- | --- | --- | --- | --- |
163
- | Landing | [samples/landing.html](samples/landing.html) | Dashboard | [samples/dashboard.html](samples/dashboard.html) |
164
- | Login | [samples/login.html](samples/login.html) | Sign up | [samples/signup.html](samples/signup.html) |
165
- | Pricing | [samples/pricing.html](samples/pricing.html) | E-commerce | [samples/ecommerce.html](samples/ecommerce.html) |
166
- | Blog | [samples/blog.html](samples/blog.html) | Portfolio | [samples/portfolio.html](samples/portfolio.html) |
167
- | Chat | [samples/chat.html](samples/chat.html) | Email | [samples/email.html](samples/email.html) |
168
- | Kanban | [samples/kanban.html](samples/kanban.html) | Settings | [samples/settings.html](samples/settings.html) |
169
- | RTL layout | [samples/rtl.html](samples/rtl.html) | A11y patterns | [samples/a11y-patterns.html](samples/a11y-patterns.html) |
101
+ ## Core modules (0.9.0)
170
102
 
171
- | Tool | Page |
103
+ | Export | Description |
172
104
  | --- | --- |
173
- | HTML playground | [tools/playground/index.html](tools/playground/index.html) |
174
- | OKLCH theme builder | [tools/theme-builder/index.html](tools/theme-builder/index.html) |
105
+ | `@birdapi/velinstyle/search` | Fuzzy offline search, providers, optional Web Worker |
106
+ | `@birdapi/velinstyle/motion` | `initMotion`, stagger, smooth scroll, unified `.velin-in-view` |
107
+ | `@birdapi/velinstyle/attributes` | Registry of declarative `velin-*` HTML attribute bridges |
108
+ | `@birdapi/velinstyle/highlight` | `velinSyntax`, lazy language packs, OKLCH token colors |
109
+ | `@birdapi/velinstyle/meta` | `buildAgentBundle`, page meta MIME `application/vnd.velinstyle.meta+json` |
175
110
 
176
111
  ---
177
112
 
178
- ## CLI reference
179
-
180
- All commands: `npx velinstyle <command>` · `npx velinstyle --help`
181
-
182
- <details>
183
- <summary><strong>Project &amp; build</strong> — <code>init</code>, <code>build</code>, <code>themes</code>, <code>add</code></summary>
113
+ ## Web Components
184
114
 
185
- - **`npx velinstyle init`**creates `velinstyle.config.js` (layer selection, theme, scan options).
186
- - **`npx velinstyle build`** — custom CSS bundle from selected layers (`--output` / `-o`, `--minify`).
187
- - **`npx velinstyle themes`** — lists 13 theme presets.
188
- - **`npx velinstyle add &lt;component&gt;`** — copies a single component CSS file into your project.
115
+ **36 canonical** custom elements (38 lazy-loader entries including legacy `velin-tooltip-wc` and `velin-stepper-wc`) use plain CSS when you do not need behavior. `src/base/wc-placeholder.css` reduces layout shift before elements upgrade.
189
116
 
190
- </details>
117
+ Examples: `velin-modal`, `velin-search`, `velin-code-block`, `velin-drawer`, `velin-stepper`, `velin-tooltip`, `velin-toast`, `velin-persist`.
191
118
 
192
- <details>
193
- <summary><strong>Icons</strong> multi-provider sprite workflow</summary>
119
+ - [Component documentation](https://velinstyle.info/docs/components/buttons.html)
120
+ - [Generated Web Component API](https://velinstyle.info/docs/generated/components/README.md)
194
121
 
195
- - **`npx velinstyle icons list`** — Lucide, Heroicons, Bootstrap Icons, Material Symbols, Font Awesome, Tabler.
196
- - **`npx velinstyle icons add lucide --icons menu,search,check`**
197
- - **`npx velinstyle icons add heroicons --icons arrow-left --variant outline`**
198
- - **`npx velinstyle icons build`** — rebuilds sprite (from a VelinStyle clone: writes `icons/svg/` and rebuilds).
199
-
200
- </details>
201
-
202
- <details>
203
- <summary><strong>scan</strong> — security, a11y &amp; CSS lint</summary>
204
-
205
- - **`npx velinstyle scan [path]`** — HTML, CSS, JS; **`--format json`** for CI.
206
- - **`--severity`** — filter minimum level: `error` | `warning` | `info`.
207
- - **`--fix`** — safe auto-fixes only; **`--fix-dry-run`** lists files without writing.
208
- - **`--fix-lang`** — BCP 47 for setting `lang` on `<html>` (default `en`).
209
-
210
- **Auto-fixes (examples):** `rel="noopener noreferrer"` on risky `target="_blank"`; `lang` on `<html>`; skip link when `id="main"` exists; raw `z-index` → `--velin-z-*`.
122
+ ---
211
123
 
212
- **Not auto-fixed:** `javascript:` URLs, `eval`, raw `innerHTML`, inline event handlers — fix in source.
124
+ ## CLI
213
125
 
214
- **Trusted Types / XSS:** the scanner does not replace CSP policies. Web Components use `escapeHTML()` / `sanitizeURL()`; see [docs/security.html](docs/security.html).
126
+ | Command | Purpose |
127
+ | --- | --- |
128
+ | `npx velinstyle init` | Create `velinstyle.config.js` in your project |
129
+ | `npx velinstyle scan` | Security, accessibility, CSS, and PII checks |
130
+ | `npx velinstyle search index` | Build `dist/search-index.json` for offline doc search |
131
+ | `npx velinstyle tokens build` | Compile design tokens JSON to CSS |
132
+ | `npx velinstyle meta` | Generate `velin-agent.json` and `llms.txt` |
215
133
 
216
- </details>
134
+ Also: `npx velinstyle docs generate` — Markdown reference under `docs/generated/`.
217
135
 
218
- <details>
219
- <summary><strong>prefix</strong> — class codemod &amp; JSON maps</summary>
136
+ ---
220
137
 
221
- - **`npx velinstyle prefix &lt;folder&gt;`** — dry-run by default; **`--write`** applies changes.
222
- - **`--bootstrap-display`** — maps Bootstrap `d-*` to Velin display classes.
223
- - **`velinstyle-prefix-map.json`** in the target folder or **`--map file.json`** — explicit token → class mappings (overrides catalog and Bootstrap aliases). Sample: [examples/velinstyle-prefix-map.sample.json](examples/velinstyle-prefix-map.sample.json).
138
+ ## Security
224
139
 
225
- </details>
140
+ VelinStyle ships **first-class security tooling**, not an afterthought:
226
141
 
227
- <details>
228
- <summary><strong>blueprint</strong>14 HTML snippets</summary>
142
+ - **`velinstyle scan`** — markup and a11y rules; PII scanner (`--only pii`, `--fix`)
143
+ - **`@birdapi/velinstyle/sanitize`** URL and text sanitization helpers
144
+ - **`<velin-secure-field>`** — no plaintext secrets in the DOM; hardened search/copy URLs
229
145
 
230
- - **`npx velinstyle blueprint list`**
231
- - **`npx velinstyle blueprint &lt;name&gt; -o snippet.html`**
146
+ [Security documentation](https://velinstyle.info/docs/extend/security.html)
232
147
 
233
- Ids: `modal`, `form-login`, `layout-dashboard`, `navbar-header`, `hero-section`, `card-grid`, `table-responsive`, `alert-stack`, `breadcrumb-bar`, `footer-simple`, `form-contact`, `pagination-bar`, `search-field`, `sidebar-layout`.
148
+ ---
234
149
 
235
- </details>
150
+ ## Velin-Meta
236
151
 
237
- <details>
238
- <summary><strong>tokens build</strong> — design tokens → CSS</summary>
152
+ Machine-readable context for **Cursor, Copilot, and custom agents**:
239
153
 
240
- ```bash
241
- npx velinstyle tokens build --input examples/tokens.sample.json -o tokens-out.css
242
- ```
154
+ - **Global bundle** — `dist/velin-agent.json` + `dist/llms.txt` via `velinstyle meta`
155
+ - **Page-level meta** `<script type="application/vnd.velinstyle.meta+json" id="velin-meta">`
156
+ - **CLI** — `velinstyle meta page my.html --write`
243
157
 
244
- </details>
158
+ [Velin-Meta guide](https://velinstyle.info/docs/guides/velin-meta.html)
245
159
 
246
160
  ---
247
161
 
248
- ## Ecosystem
162
+ ## Docs & website
249
163
 
250
- <table>
251
- <tr>
252
- <td width="50%" valign="top">
164
+ - [velinstyle.info](https://velinstyle.info) — product site and demos
165
+ - [Guides](https://velinstyle.info/docs/guides/index.html) · [Feature scope](https://velinstyle.info/docs/guides/feature-scope.html)
166
+ - [API reference](https://velinstyle.info/docs/guides/api-reference.html) — generated from source
167
+ - [Generated Markdown](https://velinstyle.info/docs/generated/index.html) — components, tokens, utilities, CLI, rules
253
168
 
254
- **Starters &amp; packages**
169
+ ---
255
170
 
256
- - [templates/vite-velinstyle](templates/vite-velinstyle) — Vite + 3 pages + theme toggle
257
- - [@velinstyle/react](packages/react) — experimental thin React wrappers
171
+ ## Changelog
258
172
 
259
- **Docs**
173
+ See [CHANGELOG.md](CHANGELOG.md) for releases, breaking changes, and migration notes.
260
174
 
261
- - [Getting started](docs/getting-started.html) · [Migration](docs/migration.html)
262
- - [A11y patterns](docs/a11y-patterns/index.html) · [Security](docs/security.html)
175
+ ---
263
176
 
264
- </td>
265
- <td width="50%" valign="top">
177
+ ## Comparison
266
178
 
267
- **Development (this repo)**
179
+ | | Bootstrap | Tailwind | Shoelace | **VelinStyle** |
180
+ | --- | :---: | :---: | :---: | :---: |
181
+ | HTML readability | Medium | Low | Medium | **High** |
182
+ | Class predictability | Medium | Low | Medium | **`velin-btn--primary`** |
183
+ | Utility sprawl | Low | **High** | Low | **Controlled** |
184
+ | Override story | Hard | Config file | Shadow DOM | **CSS layers + tokens** |
185
+ | Accessibility | Partial | DIY | Good WC | **WCAG 2.2 AAA tokens** |
186
+ | Dark mode | Manual | `dark:` everywhere | Theme attr | **Token swap** |
187
+ | App chrome | Legacy JS | BYO | WC only | **CSS + optional WCs** |
188
+ | Ship speed | Fast | Fast (with build) | Fast | **CDN, no build required** |
189
+ | Runtime modules | — | — | — | **Search, motion, meta, …** |
268
190
 
269
- ```bash
270
- npm install
271
- npm run dev # serve on :3000
272
- npm run build
273
- npm test
274
- npm run test:a11y
275
- ```
191
+ ---
276
192
 
277
- **Themes (13):** `brutalist`, `corporate`, `earth`, `forest`, `midnight`, `neon`, `nordic`, `ocean`, `pastel`, `retro`, `sharp`, `soft`, `sunset` — see [docs/themes.html](docs/themes.html).
193
+ ## Live demos
278
194
 
279
- </td>
280
- </tr>
281
- </table>
195
+ Full application pages on [velinstyle.info/demos/](https://velinstyle.info/demos/) — [Crypto](https://velinstyle.info/demos/showcase-crypto.html) · [E-Commerce](https://velinstyle.info/demos/showcase-ecommerce.html) · [Dashboard](https://velinstyle.info/demos/showcase-dashboard.html) · [All demos](https://velinstyle.info/demos/) · [Fork showcase-demos](https://github.com/SkyliteDesign/velinstyle/tree/main/showcase-demos)
282
196
 
283
- <!-- Maintainers: add .github/social-preview.png (1280×640) in repo Settings → Social preview -->
197
+ <p align="center">
198
+ <a href="https://velinstyle.info/demos/showcase-crypto.html">
199
+ <img src=".github/assets/readme/hero-demo.webp" alt="VelinStyle crypto dashboard demo" width="720">
200
+ </a>
201
+ </p>
284
202
 
285
203
  ---
286
204
 
287
- ## Join in
205
+ ## Contributing
288
206
 
289
- If VelinStyle saves you time or raises the bar for inclusive UI:
207
+ PRs welcome.
290
208
 
291
- 1. **Star the repo** so others discover it.
292
- 2. **Open an issue** with feedback, edge cases, or ideas.
293
- 3. **Open a PR** following [CONTRIBUTING.md](CONTRIBUTING.md).
209
+ 1. Fork the repo
210
+ 2. `npm install && npm run build`
211
+ 3. Make your change · run `npm test`, `npm run test:a11y`, and `npm run test:e2e` (after `npm run build`)
212
+ 4. Open a pull request
294
213
 
295
- Maintainers: [RELEASING.md](RELEASING.md) · [SECURITY.md](SECURITY.md)
296
-
297
- ---
298
-
299
- ## Browser support
300
-
301
- VelinStyle is **mobile-first**. Use a **current evergreen browser** (recent Safari on iOS, Chrome/Firefox on Android and desktop). OKLCH, Container Queries, `@layer`, and Web Components need modern engines. Include the viewport `meta` tag. Older in-app WebViews may mis-render colors or layout.
214
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for code style and review process.
302
215
 
303
216
  ---
304
217
 
@@ -306,8 +219,6 @@ VelinStyle is **mobile-first**. Use a **current evergreen browser** (recent Safa
306
219
 
307
220
  [MIT](LICENSE) — Copyright © 2026 VelinStyle
308
221
 
309
- ---
310
-
311
222
  <div align="center">
312
223
 
313
224
  Made with care for the web by [SkyliteDesign](https://github.com/SkyliteDesign)
package/cli/blueprint.js CHANGED
@@ -18,6 +18,14 @@ const BLUEPRINTS = {
18
18
  'search-field': 'search-field.html',
19
19
  'sidebar-layout': 'sidebar-layout.html',
20
20
  'table-responsive': 'table-responsive.html',
21
+ 'bottom-nav-mobile': 'bottom-nav-mobile.html',
22
+ 'empty-state': 'empty-state.html',
23
+ 'cookie-consent': 'cookie-consent.html',
24
+ 'filter-bar': 'filter-bar.html',
25
+ 'notification-center': 'notification-center.html',
26
+ 'settings-panel': 'settings-panel.html',
27
+ onboarding: 'onboarding.html',
28
+ 'pricing-table': 'pricing-table.html',
21
29
  };
22
30
 
23
31
  export function listBlueprints() {
@@ -0,0 +1,17 @@
1
+ <nav class="velin-pb-safe" aria-label="Primary">
2
+ <velin-bottom-nav current="home">
3
+ <a href="#home" data-nav="home" current>Home</a>
4
+ <a href="#search" data-nav="search">Search</a>
5
+ <a href="#profile" data-nav="profile">Profile</a>
6
+ </velin-bottom-nav>
7
+ </nav>
8
+ <script type="module">
9
+ import '../../dist/velinstyle-components.min.js';
10
+ const nav = document.querySelector('velin-bottom-nav');
11
+ nav?.querySelectorAll('a').forEach((link) => {
12
+ link.addEventListener('click', (e) => {
13
+ e.preventDefault();
14
+ nav.setAttribute('current', link.dataset.nav || '');
15
+ });
16
+ });
17
+ </script>
@@ -0,0 +1,9 @@
1
+ <aside class="velin-p-4 velin-border velin-rounded-lg velin-pb-safe" role="region" aria-label="Cookie consent">
2
+ <div class="velin-user-content">
3
+ <p class="velin-mbe-3">We use essential cookies only. No third-party trackers in this demo.</p>
4
+ </div>
5
+ <div class="velin-flex velin-gap-3">
6
+ <button type="button" class="velin-btn velin-btn--primary">Accept</button>
7
+ <button type="button" class="velin-btn velin-btn--outline">Decline</button>
8
+ </div>
9
+ </aside>
@@ -0,0 +1,5 @@
1
+ <section class="velin-p-8 velin-text-center" aria-labelledby="empty-title">
2
+ <h2 id="empty-title" class="velin-text-xl velin-font-bold velin-mbe-2">No items yet</h2>
3
+ <p class="velin-text-muted velin-mbe-4">Create your first entry to see it listed here.</p>
4
+ <button type="button" class="velin-btn velin-btn--primary">Create item</button>
5
+ </section>
@@ -0,0 +1,15 @@
1
+ <form class="velin-flex velin-flex-wrap velin-gap-3 velin-p-4 velin-border-b" role="search" aria-label="Filter list">
2
+ <label class="velin-flex velin-flex-col velin-gap-1">
3
+ <span class="velin-text-sm">Query</span>
4
+ <input type="search" class="velin-input" name="q" placeholder="Search…" />
5
+ </label>
6
+ <label class="velin-flex velin-flex-col velin-gap-1">
7
+ <span class="velin-text-sm">Status</span>
8
+ <select class="velin-select" name="status">
9
+ <option value="">All</option>
10
+ <option value="open">Open</option>
11
+ <option value="done">Done</option>
12
+ </select>
13
+ </label>
14
+ <button type="submit" class="velin-btn velin-btn--primary velin-self-end">Apply</button>
15
+ </form>
@@ -0,0 +1,13 @@
1
+ <section class="velin-p-4" aria-labelledby="notif-title">
2
+ <h2 id="notif-title" class="velin-text-lg velin-font-bold velin-mbe-4">Notifications</h2>
3
+ <ul class="velin-flex velin-flex-col velin-gap-3" role="list">
4
+ <li class="velin-p-3 velin-border velin-rounded-lg">
5
+ <p class="velin-font-medium">Backup complete</p>
6
+ <p class="velin-text-sm velin-text-muted">2 minutes ago</p>
7
+ </li>
8
+ <li class="velin-p-3 velin-border velin-rounded-lg">
9
+ <p class="velin-font-medium">New comment</p>
10
+ <p class="velin-text-sm velin-text-muted">1 hour ago</p>
11
+ </li>
12
+ </ul>
13
+ </section>
@@ -0,0 +1,23 @@
1
+ <velin-stepper id="onboard" labels="Welcome,Profile,Done" active="0">
2
+ <section class="velin-p-6">
3
+ <h2 class="velin-text-xl velin-mbe-2">Welcome</h2>
4
+ <p class="velin-mbe-4">Set up your workspace in a few steps.</p>
5
+ <button type="button" class="velin-btn velin-btn--primary" data-next>Continue</button>
6
+ </section>
7
+ <section class="velin-p-6">
8
+ <h2 class="velin-text-xl velin-mbe-2">Profile</h2>
9
+ <input type="text" class="velin-input velin-mbe-4" placeholder="Your name" aria-label="Name" />
10
+ <button type="button" class="velin-btn velin-btn--primary" data-next>Continue</button>
11
+ </section>
12
+ <section class="velin-p-6">
13
+ <h2 class="velin-text-xl velin-mbe-2">Done</h2>
14
+ <p>You are ready to go.</p>
15
+ </section>
16
+ </velin-stepper>
17
+ <script type="module">
18
+ import '../../dist/velinstyle-components.min.js';
19
+ const stepper = document.getElementById('onboard');
20
+ document.querySelectorAll('[data-next]').forEach((btn) => {
21
+ btn.addEventListener('click', () => stepper?.next());
22
+ });
23
+ </script>
@@ -0,0 +1,20 @@
1
+ <div class="velin-grid velin-gap-4" style="grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));">
2
+ <article class="velin-p-6 velin-border velin-rounded-lg velin-text-center">
3
+ <h3 class="velin-text-lg velin-font-bold">Starter</h3>
4
+ <p class="velin-text-3xl velin-font-bold velin-mbs-2 velin-mbe-4">$0</p>
5
+ <ul class="velin-text-sm velin-mbe-4" role="list">
6
+ <li>1 project</li>
7
+ <li>Community support</li>
8
+ </ul>
9
+ <button type="button" class="velin-btn velin-btn--outline velin-w-full">Choose</button>
10
+ </article>
11
+ <article class="velin-p-6 velin-border velin-rounded-lg velin-text-center velin-border-primary">
12
+ <h3 class="velin-text-lg velin-font-bold">Pro</h3>
13
+ <p class="velin-text-3xl velin-font-bold velin-mbs-2 velin-mbe-4">$12</p>
14
+ <ul class="velin-text-sm velin-mbe-4" role="list">
15
+ <li>Unlimited projects</li>
16
+ <li>Priority support</li>
17
+ </ul>
18
+ <button type="button" class="velin-btn velin-btn--primary velin-w-full">Choose</button>
19
+ </article>
20
+ </div>
@@ -0,0 +1,20 @@
1
+ <velin-sheet id="settings-sheet" title="Settings">
2
+ <form class="velin-flex velin-flex-col velin-gap-4 velin-p-4">
3
+ <label class="velin-flex velin-flex-col velin-gap-1">
4
+ <span>Display name</span>
5
+ <input type="text" class="velin-input" name="name" autocomplete="name" />
6
+ </label>
7
+ <label class="velin-flex velin-items-center velin-gap-2">
8
+ <input type="checkbox" class="velin-checkbox" name="notify" />
9
+ <span>Email notifications</span>
10
+ </label>
11
+ <button type="submit" class="velin-btn velin-btn--primary">Save</button>
12
+ </form>
13
+ </velin-sheet>
14
+ <button type="button" class="velin-btn velin-btn--outline" id="open-settings">Open settings</button>
15
+ <script type="module">
16
+ import '../../dist/velinstyle-components.min.js';
17
+ document.getElementById('open-settings')?.addEventListener('click', () => {
18
+ document.getElementById('settings-sheet')?.open?.();
19
+ });
20
+ </script>