@birdapi/velinstyle 1.0.0 → 1.2.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 (321) hide show
  1. package/README.de.md +87 -158
  2. package/README.md +188 -115
  3. package/cli/blueprint.js +98 -5
  4. package/cli/blueprints/app-chrome.html +18 -0
  5. package/cli/blueprints/benefits-grid.html +9 -0
  6. package/cli/blueprints/bottom-nav-mobile.html +2 -1
  7. package/cli/blueprints/cookie-consent.html +1 -1
  8. package/cli/blueprints/cta-band.html +6 -0
  9. package/cli/blueprints/faq-section.html +18 -0
  10. package/cli/blueprints/filter-bar.html +4 -4
  11. package/cli/blueprints/form-contact.html +6 -5
  12. package/cli/blueprints/hero-section.html +3 -3
  13. package/cli/blueprints/notification-center.html +1 -1
  14. package/cli/blueprints/onboarding.html +2 -1
  15. package/cli/blueprints/ops-console.html +29 -0
  16. package/cli/blueprints/pricing-band.html +37 -0
  17. package/cli/blueprints/process-steps.html +10 -0
  18. package/cli/blueprints/services-grid.html +9 -0
  19. package/cli/blueprints/settings-panel.html +8 -6
  20. package/cli/blueprints/split-hero.html +25 -0
  21. package/cli/blueprints/testimonials.html +8 -0
  22. package/cli/blueprints/trust-bar.html +10 -0
  23. package/cli/cli-manifest.json +81 -17
  24. package/cli/contrast-utils.js +97 -0
  25. package/cli/create.js +370 -0
  26. package/cli/docgen/extract-a11y.js +4 -2
  27. package/cli/docgen/extract-attributes.js +126 -10
  28. package/cli/docgen/extract-cli.js +3 -2
  29. package/cli/docgen/extract-components.js +61 -2
  30. package/cli/docgen/extract-utilities.js +10 -10
  31. package/cli/doctor.js +119 -0
  32. package/cli/index.js +535 -46
  33. package/cli/meta.js +84 -1
  34. package/cli/perf-audit.js +15 -2
  35. package/cli/prompt-engine.js +243 -0
  36. package/cli/review.js +268 -0
  37. package/cli/scaffold.js +119 -4
  38. package/cli/scanner-rules-data.js +7 -0
  39. package/cli/scanner.js +357 -4
  40. package/cli/serve.js +81 -0
  41. package/cli/skills.js +223 -0
  42. package/cli/wc-api.js +89 -0
  43. package/cli/workflow.js +42 -0
  44. package/components/index.js +4 -0
  45. package/components/runtime/component-loaders.js +4 -0
  46. package/components/velin-accordion.js +62 -13
  47. package/components/velin-bottom-nav.js +10 -0
  48. package/components/velin-calendar.js +212 -0
  49. package/components/velin-command.js +18 -2
  50. package/components/velin-data-table.js +438 -0
  51. package/components/velin-dialog.js +4 -1
  52. package/components/velin-drawer.js +2 -4
  53. package/components/velin-file-dropzone.js +162 -0
  54. package/components/velin-form-summary.js +348 -0
  55. package/components/velin-icon.js +22 -1
  56. package/components/velin-lightbox.js +5 -3
  57. package/components/velin-modal.js +2 -4
  58. package/components/velin-search.js +1 -1
  59. package/components/velin-sheet.js +2 -4
  60. package/core/a11y/component-contracts.json +35 -1
  61. package/core/highlight/languages/go.js +28 -0
  62. package/core/highlight/languages/python.js +29 -0
  63. package/core/highlight/languages/rust.js +32 -0
  64. package/core/highlight/languages/yaml.js +23 -0
  65. package/core/highlight/registry.js +13 -2
  66. package/core/meta/build.js +126 -6
  67. package/core/meta/design-constraints/contact.json +9 -0
  68. package/core/meta/design-constraints/faq.json +9 -0
  69. package/core/meta/design-constraints/hero.json +13 -0
  70. package/core/meta/knowledge/components.json +622 -0
  71. package/core/meta/knowledge/tokens.json +282 -0
  72. package/core/meta/pages/registry.json +294 -0
  73. package/core/meta/schema.js +3 -1
  74. package/core/meta/sections/registry.json +185 -0
  75. package/dist/chunks/{attributes-TPANLMLF.js → attributes-A423NX5J.js} +3 -3
  76. package/dist/chunks/{attributes-ADOKLKA7.js → attributes-F6UPIEVP.js} +2 -2
  77. package/dist/chunks/{attributes-STYCS3O5.js → attributes-GLYXGGAL.js} +3 -3
  78. package/dist/chunks/{attributes-5Q2WXGRC.js → attributes-UFTYOSAU.js} +20 -3
  79. package/dist/chunks/attributes-XGLXLR2T.js +391 -0
  80. package/dist/chunks/attributes-YF4NI2QS.js +391 -0
  81. package/dist/chunks/browser-AUABBYUK.js +1544 -0
  82. package/dist/chunks/{chunk-SRL6EWHP.js → chunk-2LSKX57P.js} +13 -11
  83. package/dist/chunks/{chunk-RSMRR27R.js → chunk-2TGCVDUL.js} +11 -9
  84. package/dist/chunks/{chunk-XIET2VSZ.js → chunk-5JWGUAPC.js} +17 -13
  85. package/dist/chunks/chunk-7YSO2OQ2.js +113 -0
  86. package/dist/chunks/{chunk-IEHKRARD.js → chunk-BHR3ZG6U.js} +10 -8
  87. package/dist/chunks/{chunk-J472ERN2.js → chunk-ERF5YVP4.js} +15 -4
  88. package/dist/chunks/{chunk-XYLJ2GCB.js → chunk-JMSIHEYX.js} +55 -7
  89. package/dist/chunks/{chunk-MKZP2TBH.js → chunk-L7ZGUU4D.js} +2 -2
  90. package/dist/chunks/chunk-TUGIPKW5.js +113 -0
  91. package/dist/chunks/go-HZ6XTFCK.js +31 -0
  92. package/dist/chunks/{highlight-GJHHV4KM.js → highlight-IBDX4XWS.js} +1 -1
  93. package/dist/chunks/{highlight-XTHRKBA3.js → highlight-M2ELQNYK.js} +1 -1
  94. package/dist/chunks/python-BMPKDKNO.js +32 -0
  95. package/dist/chunks/runtime-entry.js +1 -1
  96. package/dist/chunks/rust-2BWKI2MN.js +35 -0
  97. package/dist/chunks/{velin-accordion-FBIPAEXG.js → velin-accordion-WSY6BMLA.js} +64 -10
  98. package/dist/chunks/{velin-bottom-nav-7GEMPIM6.js → velin-bottom-nav-5RVRNGIP.js} +25 -0
  99. package/dist/chunks/{velin-bottom-nav-2N2TYWOF.js → velin-bottom-nav-N5F4UO2I.js} +26 -1
  100. package/dist/chunks/velin-calendar-OFE6THUD.js +210 -0
  101. package/dist/chunks/velin-calendar-PGVNJTXK.js +217 -0
  102. package/dist/chunks/velin-calendar-XC7JRDSH.js +217 -0
  103. package/dist/chunks/{velin-code-block-CIAURDRJ.js → velin-code-block-ITCLIC6T.js} +1 -1
  104. package/dist/chunks/{velin-code-block-TSUKPY4C.js → velin-code-block-ZGWG7JI5.js} +12 -3
  105. package/dist/chunks/{velin-combobox-NXS4QB4R.js → velin-combobox-56V2ZWT5.js} +1 -1
  106. package/dist/chunks/{velin-command-ONKO2A3J.js → velin-command-2HO2EKR6.js} +29 -2
  107. package/dist/chunks/{velin-command-TMLSRGIU.js → velin-command-ZJSLPK7B.js} +30 -3
  108. package/dist/chunks/{velin-copy-NYDBOKXT.js → velin-copy-XDQSV2XU.js} +1 -1
  109. package/dist/chunks/{velin-countdown-4ZVDGK4R.js → velin-countdown-V4Z5MA63.js} +1 -1
  110. package/dist/chunks/velin-data-table-KK7IDGTP.js +302 -0
  111. package/dist/chunks/velin-data-table-UVR42UUM.js +372 -0
  112. package/dist/chunks/{velin-dialog-GTTZI564.js → velin-dialog-3YK2RPRV.js} +9 -2
  113. package/dist/chunks/{velin-dialog-ELFOZIXZ.js → velin-dialog-S24KAP4S.js} +3 -1
  114. package/dist/chunks/{velin-drawer-BE6TYN3H.js → velin-drawer-5PNU624J.js} +2 -4
  115. package/dist/chunks/{velin-drawer-DLL2GLT6.js → velin-drawer-CCM6S25D.js} +3 -5
  116. package/dist/chunks/{velin-email-RBX6ZR4S.js → velin-email-TNFONXPW.js} +1 -1
  117. package/dist/chunks/velin-file-dropzone-QRGF2JNA.js +154 -0
  118. package/dist/chunks/velin-file-dropzone-XIZMJ3NB.js +154 -0
  119. package/dist/chunks/velin-form-summary-XRQ7COQH.js +273 -0
  120. package/dist/chunks/{velin-icon-7M76DOPB.js → velin-icon-A6NCXGUK.js} +59 -17
  121. package/dist/chunks/{velin-icon-ZTSKUOVN.js → velin-icon-EC4B5XCM.js} +18 -5
  122. package/dist/chunks/{velin-lightbox-6E7CAATP.js → velin-lightbox-FFK4TUUP.js} +7 -6
  123. package/dist/chunks/{velin-lightbox-I75U6JF4.js → velin-lightbox-P725FLTY.js} +15 -5
  124. package/dist/chunks/{velin-menubar-J66JXRWW.js → velin-menubar-6I2LM5HL.js} +1 -1
  125. package/dist/chunks/{velin-modal-5HYNNNUI.js → velin-modal-ICTMGRSU.js} +7 -8
  126. package/dist/chunks/{velin-modal-AEOTZ67O.js → velin-modal-JBNODH7D.js} +2 -4
  127. package/dist/chunks/{velin-popover-T72HK3DF.js → velin-popover-WZG2GHBL.js} +25 -4
  128. package/dist/chunks/{velin-rating-N4DI2XNL.js → velin-rating-QBBYRRBU.js} +1 -1
  129. package/dist/chunks/{velin-search-7B4KJ6TX.js → velin-search-B3L6J2RP.js} +2 -2
  130. package/dist/chunks/{velin-search-2XRQFBCS.js → velin-search-L3UG6NDQ.js} +5 -4
  131. package/dist/chunks/{velin-secure-field-6PV7RZDJ.js → velin-secure-field-DGYMP7OK.js} +1 -1
  132. package/dist/chunks/{velin-segmented-control-GYD5BIXQ.js → velin-segmented-control-P74GJPAR.js} +1 -1
  133. package/dist/chunks/{velin-sheet-R2Y67X6H.js → velin-sheet-M5GZZD7G.js} +2 -4
  134. package/dist/chunks/{velin-sheet-OUK6572T.js → velin-sheet-X7RXIWKV.js} +3 -5
  135. package/dist/chunks/{velin-stepper-X54WGHDG.js → velin-stepper-4YQJUHPC.js} +12 -5
  136. package/dist/chunks/{velin-toast-OMMOA2DK.js → velin-toast-UG5LWTG2.js} +5 -1
  137. package/dist/chunks/{velin-tooltip-BDHGRTQB.js → velin-tooltip-ZDH5SDLU.js} +1 -1
  138. package/dist/chunks/yaml-O67LEQYT.js +26 -0
  139. package/dist/llms.txt +29 -7
  140. package/dist/search-index.json +182 -10
  141. package/dist/velin-agent.json +3997 -26
  142. package/dist/velinstyle-components.iife.js +1952 -287
  143. package/dist/velinstyle-components.js +1956 -287
  144. package/dist/velinstyle-components.min.js +267 -119
  145. package/dist/velinstyle.css +381 -67
  146. package/dist/velinstyle.d.ts +4 -0
  147. package/dist/velinstyle.min.css +1 -1
  148. package/package.json +26 -6
  149. package/packages/skill-engine/README.md +24 -0
  150. package/packages/skill-engine/package.json +7 -0
  151. package/packages/skill-engine/src/catalog.js +29 -0
  152. package/packages/skill-engine/src/index.js +5 -0
  153. package/packages/skill-engine/src/install.js +69 -0
  154. package/packages/skill-engine/src/registry.js +27 -0
  155. package/packages/skill-engine/src/resolve.js +68 -0
  156. package/packages/skill-engine/src/validate.js +40 -0
  157. package/packages/velinstyle-skills/README.md +6 -0
  158. package/packages/velinstyle-skills/adapter.json +8 -0
  159. package/packages/velinstyle-skills/bundles/landing-starter.bundle.yaml +12 -0
  160. package/packages/velinstyle-skills/bundles/review-suite.bundle.yaml +11 -0
  161. package/packages/velinstyle-skills/catalog.json +1004 -0
  162. package/packages/velinstyle-skills/graphs/component-ship.graph.yaml +14 -0
  163. package/packages/velinstyle-skills/graphs/landingpage.graph.yaml +21 -0
  164. package/packages/velinstyle-skills/graphs/release-gate.graph.yaml +15 -0
  165. package/packages/velinstyle-skills/index.js +22 -0
  166. package/packages/velinstyle-skills/package.json +7 -0
  167. package/packages/velinstyle-skills/packs/accessibility.pack.yaml +9 -0
  168. package/packages/velinstyle-skills/packs/design.pack.yaml +10 -0
  169. package/packages/velinstyle-skills/packs/documentation.pack.yaml +8 -0
  170. package/packages/velinstyle-skills/packs/enterprise.pack.yaml +10 -0
  171. package/packages/velinstyle-skills/packs/frontend.pack.yaml +10 -0
  172. package/packages/velinstyle-skills/packs/review.pack.yaml +9 -0
  173. package/packages/velinstyle-skills/projects/admin-panel.project.yaml +12 -0
  174. package/packages/velinstyle-skills/projects/blog.project.yaml +11 -0
  175. package/packages/velinstyle-skills/projects/documentation-portal.project.yaml +13 -0
  176. package/packages/velinstyle-skills/projects/ecommerce-shop.project.yaml +12 -0
  177. package/packages/velinstyle-skills/projects/landing-page.project.yaml +12 -0
  178. package/packages/velinstyle-skills/projects/laravel-dashboard.project.yaml +12 -0
  179. package/packages/velinstyle-skills/projects/marketing-website.project.yaml +14 -0
  180. package/packages/velinstyle-skills/projects/portfolio.project.yaml +12 -0
  181. package/packages/velinstyle-skills/registry.json +142 -0
  182. package/packages/velinstyle-skills/scripts/generate-assets.mjs +163 -0
  183. package/packages/velinstyle-skills/skills/velin-a11y-focus-keyboard/SKILL.md +57 -0
  184. package/packages/velinstyle-skills/skills/velin-a11y-page-checklist/SKILL.md +57 -0
  185. package/packages/velinstyle-skills/skills/velin-a11y-scan-fix/SKILL.md +57 -0
  186. package/packages/velinstyle-skills/skills/velin-ai-agent-briefing/SKILL.md +57 -0
  187. package/packages/velinstyle-skills/skills/velin-ai-plan-scaffold-review/SKILL.md +57 -0
  188. package/packages/velinstyle-skills/skills/velin-ai-skill-authoring/SKILL.md +57 -0
  189. package/packages/velinstyle-skills/skills/velin-components-accessibility-map/SKILL.md +57 -0
  190. package/packages/velinstyle-skills/skills/velin-components-api-contract/SKILL.md +57 -0
  191. package/packages/velinstyle-skills/skills/velin-components-recipe/SKILL.md +57 -0
  192. package/packages/velinstyle-skills/skills/velin-components-select-compose/SKILL.md +57 -0
  193. package/packages/velinstyle-skills/skills/velin-design-hero-compose/SKILL.md +57 -0
  194. package/packages/velinstyle-skills/skills/velin-design-section-rhythm/SKILL.md +57 -0
  195. package/packages/velinstyle-skills/skills/velin-design-surface-roles/SKILL.md +57 -0
  196. package/packages/velinstyle-skills/skills/velin-dev-component-wire/SKILL.md +57 -0
  197. package/packages/velinstyle-skills/skills/velin-dev-page-scaffold/SKILL.md +57 -0
  198. package/packages/velinstyle-skills/skills/velin-dev-plan-first/SKILL.md +57 -0
  199. package/packages/velinstyle-skills/skills/velin-docs-component-guide/SKILL.md +57 -0
  200. package/packages/velinstyle-skills/skills/velin-docs-generate-api/SKILL.md +57 -0
  201. package/packages/velinstyle-skills/skills/velin-dx-doctor-setup/SKILL.md +57 -0
  202. package/packages/velinstyle-skills/skills/velin-dx-project-init/SKILL.md +57 -0
  203. package/packages/velinstyle-skills/skills/velin-migration-legacy-wc/SKILL.md +57 -0
  204. package/packages/velinstyle-skills/skills/velin-migration-prefix-classes/SKILL.md +57 -0
  205. package/packages/velinstyle-skills/skills/velin-motion-reduced-safe/SKILL.md +57 -0
  206. package/packages/velinstyle-skills/skills/velin-motion-reveal-feedback/SKILL.md +57 -0
  207. package/packages/velinstyle-skills/skills/velin-perf-audit-fix/SKILL.md +57 -0
  208. package/packages/velinstyle-skills/skills/velin-perf-runtime-tree-shake/SKILL.md +57 -0
  209. package/packages/velinstyle-skills/skills/velin-release-changelog-sync/SKILL.md +57 -0
  210. package/packages/velinstyle-skills/skills/velin-release-meta-rebuild/SKILL.md +57 -0
  211. package/packages/velinstyle-skills/skills/velin-review-conversion-hero/SKILL.md +57 -0
  212. package/packages/velinstyle-skills/skills/velin-review-page-gate/SKILL.md +57 -0
  213. package/packages/velinstyle-skills/skills/velin-review-seo-meta/SKILL.md +57 -0
  214. package/packages/velinstyle-skills/skills/velin-security-sanitize-html/SKILL.md +57 -0
  215. package/packages/velinstyle-skills/skills/velin-security-scan-pii/SKILL.md +57 -0
  216. package/packages/velinstyle-skills/skills/velin-testing-a11y-suite/SKILL.md +57 -0
  217. package/packages/velinstyle-skills/skills/velin-testing-visual-smoke/SKILL.md +57 -0
  218. package/packages/velinstyle-skills/skills/velin-themes-apply-token/SKILL.md +57 -0
  219. package/packages/velinstyle-skills/skills/velin-themes-contrast-check/SKILL.md +57 -0
  220. package/packages/velinstyle-skills/skills/velin-utilities-layout-apply/SKILL.md +57 -0
  221. package/packages/velinstyle-skills/skills/velin-utilities-prefix-fix/SKILL.md +57 -0
  222. package/packages/velinstyle-skills/skills/velin-utilities-token-map/SKILL.md +57 -0
  223. package/packages/velinstyle-skills/templates/admin-panel.template.yaml +12 -0
  224. package/packages/velinstyle-skills/templates/blog.template.yaml +12 -0
  225. package/packages/velinstyle-skills/templates/documentation-portal.template.yaml +12 -0
  226. package/packages/velinstyle-skills/templates/ecommerce-shop.template.yaml +13 -0
  227. package/packages/velinstyle-skills/templates/landing-page.template.yaml +12 -0
  228. package/packages/velinstyle-skills/templates/laravel-dashboard.template.yaml +11 -0
  229. package/packages/velinstyle-skills/templates/marketing-website.template.yaml +13 -0
  230. package/packages/velinstyle-skills/templates/portfolio.template.yaml +12 -0
  231. package/schemas/component-knowledge.schema.json +33 -0
  232. package/schemas/design-constraint.schema.json +15 -0
  233. package/schemas/design-intelligence.schema.json +19 -0
  234. package/schemas/design-rule.schema.json +19 -0
  235. package/schemas/page-template.schema.json +24 -0
  236. package/schemas/review-report.schema.json +36 -0
  237. package/schemas/section.schema.json +22 -0
  238. package/schemas/skill-bundle.schema.json +15 -0
  239. package/schemas/skill-graph.schema.json +25 -0
  240. package/schemas/skill-pack.schema.json +14 -0
  241. package/schemas/skill-project.schema.json +16 -0
  242. package/schemas/skill-record.schema.json +27 -0
  243. package/schemas/skill-registry.schema.json +17 -0
  244. package/schemas/skill-template.schema.json +17 -0
  245. package/schemas/token-graph.schema.json +27 -0
  246. package/schemas/utility.schema.json +166 -0
  247. package/src/base/wc-placeholder.css +7 -0
  248. package/src/components/alert.css +22 -1
  249. package/src/components/calendar-dropzone.css +5 -0
  250. package/src/components/data-table.css +93 -0
  251. package/src/components/form-validation.css +40 -0
  252. package/src/layout/app-shell.css +33 -0
  253. package/src/tokens/shadow.css +13 -0
  254. package/src/utilities/border.css +2 -0
  255. package/src/utilities/display.css +1 -24
  256. package/src/utilities/responsive.css +16 -1
  257. package/src/utilities/spacing.css +32 -0
  258. package/src/velinstyle.css +3 -0
  259. package/dist/chunks/attributes-3BZLI7XF.js +0 -364
  260. package/dist/chunks/attributes-4N5JP4CG.js +0 -364
  261. package/dist/chunks/attributes-AIR7SVLK.js +0 -364
  262. package/dist/chunks/attributes-BGRN5XZO.js +0 -364
  263. package/dist/chunks/attributes-BVSQAYLR.js +0 -364
  264. package/dist/chunks/attributes-CDYFUY7Y.js +0 -364
  265. package/dist/chunks/attributes-JMYJZBPE.js +0 -364
  266. package/dist/chunks/attributes-R5JY3X4O.js +0 -374
  267. package/dist/chunks/attributes-TNSPQTHX.js +0 -374
  268. package/dist/chunks/chunk-2354NEBP.js +0 -109
  269. package/dist/chunks/chunk-2VNA7G7S.js +0 -109
  270. package/dist/chunks/chunk-AQLRJSGG.js +0 -109
  271. package/dist/chunks/chunk-EWPSDMQT.js +0 -109
  272. package/dist/chunks/chunk-LA7264K4.js +0 -85
  273. package/dist/chunks/chunk-QTJJ3DPO.js +0 -109
  274. package/dist/chunks/chunk-RZQVWFHW.js +0 -109
  275. package/dist/chunks/chunk-U4XHMZ7D.js +0 -109
  276. package/dist/chunks/chunk-V5YIUA6G.js +0 -109
  277. package/dist/chunks/chunk-ZPSPKUYD.js +0 -109
  278. package/dist/chunks/velin-bottom-nav-N3DFQR66.js +0 -86
  279. package/dist/chunks/velin-carousel-Y5VCOABZ.js +0 -213
  280. package/dist/chunks/velin-code-block-ASUBTAQV.js +0 -119
  281. package/dist/chunks/velin-code-block-Y6CM726Q.js +0 -119
  282. package/dist/chunks/velin-combobox-2KDTCQ7N.js +0 -155
  283. package/dist/chunks/velin-command-M7RNHUPR.js +0 -136
  284. package/dist/chunks/velin-copy-T5KDTDXP.js +0 -81
  285. package/dist/chunks/velin-countdown-5XSTN3BH.js +0 -101
  286. package/dist/chunks/velin-counter-ISCTEAHI.js +0 -118
  287. package/dist/chunks/velin-dialog-D2GUHSCD.js +0 -144
  288. package/dist/chunks/velin-dialog-IJLFDXAJ.js +0 -144
  289. package/dist/chunks/velin-dialog-TNS3WXMB.js +0 -144
  290. package/dist/chunks/velin-drawer-MJS6WCF7.js +0 -130
  291. package/dist/chunks/velin-email-N5B5ZYTE.js +0 -90
  292. package/dist/chunks/velin-icon-KZO3IEHG.js +0 -164
  293. package/dist/chunks/velin-lightbox-QOTB4PRL.js +0 -140
  294. package/dist/chunks/velin-lightbox-UCD6N7HF.js +0 -140
  295. package/dist/chunks/velin-live-dot-XHUZCIDZ.js +0 -67
  296. package/dist/chunks/velin-menubar-SFEXJE56.js +0 -86
  297. package/dist/chunks/velin-modal-2HOBXE6F.js +0 -176
  298. package/dist/chunks/velin-modal-GLI2XZZB.js +0 -176
  299. package/dist/chunks/velin-popover-EXINRIGJ.js +0 -145
  300. package/dist/chunks/velin-popover-OXX7MRZ6.js +0 -145
  301. package/dist/chunks/velin-popover-YKCCROJG.js +0 -145
  302. package/dist/chunks/velin-rating-XRQJV4LO.js +0 -91
  303. package/dist/chunks/velin-scroll-top-F2FCZNYD.js +0 -58
  304. package/dist/chunks/velin-search-4YHJWYSS.js +0 -556
  305. package/dist/chunks/velin-search-LWHY23Q5.js +0 -474
  306. package/dist/chunks/velin-secure-field-H7FSBUJW.js +0 -95
  307. package/dist/chunks/velin-segmented-control-PQX6LKOJ.js +0 -109
  308. package/dist/chunks/velin-sheet-3OGI4HD7.js +0 -119
  309. package/dist/chunks/velin-sparkline-GVEANJVW.js +0 -184
  310. package/dist/chunks/velin-sparkline-KDA3GQAN.js +0 -162
  311. package/dist/chunks/velin-stepper-2ZIHLKGM.js +0 -141
  312. package/dist/chunks/velin-stepper-FYEUEWE6.js +0 -141
  313. package/dist/chunks/velin-stepper-wc-QU3KRVQR.js +0 -133
  314. package/dist/chunks/velin-theme-toggle-BNNS7WLV.js +0 -285
  315. package/dist/chunks/velin-theme-toggle-NO7V4TWI.js +0 -285
  316. package/dist/chunks/velin-theme-toggle-QELCJM2Q.js +0 -291
  317. package/dist/chunks/velin-toast-RCZ4CSUC.js +0 -109
  318. package/dist/chunks/velin-toast-WEUBTJG6.js +0 -109
  319. package/dist/chunks/velin-tooltip-664IOHZA.js +0 -112
  320. package/dist/chunks/velin-tooltip-wc-LXDVT6DE.js +0 -103
  321. package/dist/chunks/worker-client-R6DBYPFT.js +0 -46
@@ -1,556 +0,0 @@
1
- import {
2
- escapeHTMLAttribute,
3
- sanitizeSearchUrl
4
- } from "./chunk-MKZP2TBH.js";
5
-
6
- // core/search/types.js
7
- var SEARCH_CATEGORIES = (
8
- /** @type {const} */
9
- ["docs", "components", "api", "examples"]
10
- );
11
- var CATEGORY_BOOST = {
12
- components: 1.25,
13
- api: 1.15,
14
- docs: 1,
15
- examples: 0.9
16
- };
17
- function normalizeEntry(entry) {
18
- if (!entry || typeof entry !== "object") return null;
19
- const e = (
20
- /** @type {Record<string, unknown>} */
21
- entry
22
- );
23
- const id = String(e.id || e.url || e.title || "").trim();
24
- const title = String(e.title || "").trim();
25
- const url = String(e.url || "").trim();
26
- if (!id || !title) return null;
27
- const keywords = Array.isArray(e.keywords) ? e.keywords.map((k) => String(k)) : typeof e.keywords === "string" ? e.keywords.split(/\s+/).filter(Boolean) : [];
28
- let category = (
29
- /** @type {SearchCategory} */
30
- SEARCH_CATEGORIES.includes(
31
- /** @type {SearchCategory} */
32
- e.category
33
- ) ? e.category : "docs"
34
- );
35
- if (!e.category && typeof e.url === "string") {
36
- if (e.url.includes("/components/")) category = "components";
37
- else if (e.url.includes("/cli/") || e.url.includes("/api/")) category = "api";
38
- else if (e.url.includes("samples/") || e.url.includes("examples/")) category = "examples";
39
- }
40
- const safeUrl = url ? sanitizeSearchUrl(url) : `#${id}`;
41
- return {
42
- id,
43
- title,
44
- excerpt: String(e.excerpt || e.section || "").slice(0, 200),
45
- url: safeUrl,
46
- category: (
47
- /** @type {SearchCategory} */
48
- category
49
- ),
50
- keywords,
51
- weight: typeof e.weight === "number" ? e.weight : 1
52
- };
53
- }
54
-
55
- // core/search/engine.js
56
- var VelinSearchEngine = class {
57
- constructor() {
58
- this._entries = [];
59
- }
60
- /** @param {import('./types.js').SearchEntry[]} entries */
61
- setEntries(entries) {
62
- this._entries = entries.map((e) => normalizeEntry(e)).filter(Boolean);
63
- }
64
- /** @param {import('./types.js').SearchEntry[]} entries */
65
- addEntries(entries) {
66
- const next = entries.map((e) => normalizeEntry(e)).filter(Boolean);
67
- const ids = new Set(this._entries.map((e) => e.id));
68
- for (const e of next) {
69
- if (!ids.has(e.id)) {
70
- this._entries.push(e);
71
- ids.add(e.id);
72
- }
73
- }
74
- }
75
- /**
76
- * @param {string} query
77
- * @param {object} [opts]
78
- * @param {number} [opts.limit]
79
- * @param {number} [opts.minChars]
80
- * @param {number} [opts.fuzzy] 0–1 threshold for typo tolerance
81
- * @param {import('./types.js').SearchCategory[]} [opts.categories]
82
- */
83
- query(query, opts = {}) {
84
- const q = String(query || "").trim().toLowerCase();
85
- const minChars = opts.minChars ?? 2;
86
- const limit = opts.limit ?? 12;
87
- const fuzzy = opts.fuzzy ?? 0.2;
88
- const categories = opts.categories;
89
- if (q.length < minChars) {
90
- return { results: [], groups: {} };
91
- }
92
- const scored = [];
93
- for (const entry of this._entries) {
94
- if (categories && categories.length && !categories.includes(entry.category)) continue;
95
- const s = scoreEntry(entry, q, fuzzy);
96
- if (s > 0) scored.push({ entry, score: s });
97
- }
98
- scored.sort((a, b) => b.score - a.score);
99
- const results = scored.slice(0, limit).map((x) => ({ ...x.entry, _score: x.score }));
100
- const groups = {};
101
- for (const r of results) {
102
- if (!groups[r.category]) groups[r.category] = [];
103
- groups[r.category].push(r);
104
- }
105
- return { results, groups };
106
- }
107
- };
108
- function scoreEntry(entry, q, fuzzy) {
109
- const title = entry.title.toLowerCase();
110
- const excerpt = (entry.excerpt || "").toLowerCase();
111
- const keywords = (entry.keywords || []).join(" ").toLowerCase();
112
- const boost = (CATEGORY_BOOST[entry.category] || 1) * (entry.weight || 1);
113
- let score = 0;
114
- if (title === q) score = 100;
115
- else if (title.startsWith(q)) score = 70;
116
- else if (title.includes(q)) score = 50;
117
- else if (keywords.includes(q)) score = 35;
118
- else if (excerpt.includes(q)) score = 25;
119
- else if (fuzzy > 0 && fuzzyMatch(title, q, fuzzy)) score = 40;
120
- else if (fuzzy > 0 && fuzzyMatch(keywords, q, fuzzy)) score = 28;
121
- else if (fuzzy > 0 && fuzzyMatch(excerpt, q, fuzzy)) score = 18;
122
- else if (subsequenceMatch(title, q)) score = 22;
123
- else if (fuzzy > 0) {
124
- for (const word of title.split(/[^a-z0-9]+/)) {
125
- if (word.length >= 3 && fuzzyMatch(word, q, fuzzy)) {
126
- score = 32;
127
- break;
128
- }
129
- }
130
- }
131
- return score > 0 ? score * boost : 0;
132
- }
133
- function subsequenceMatch(haystack, needle) {
134
- let j = 0;
135
- for (let i = 0; i < haystack.length && j < needle.length; i++) {
136
- if (haystack[i] === needle[j]) j++;
137
- }
138
- return j === needle.length;
139
- }
140
- function fuzzyMatch(text, query, threshold) {
141
- if (!text || !query) return false;
142
- if (text.includes(query)) return true;
143
- if (subsequenceMatch(text, query)) return true;
144
- const maxDist = Math.max(1, Math.floor(query.length * threshold * 2));
145
- return levenshtein(text.slice(0, Math.min(text.length, query.length + 8)), query) <= maxDist;
146
- }
147
- function levenshtein(a, b) {
148
- const m = a.length;
149
- const n = b.length;
150
- if (m === 0) return n;
151
- if (n === 0) return m;
152
- const dp = new Uint16Array((n + 1) * (m + 1));
153
- for (let j = 0; j <= n; j++) dp[j] = j;
154
- for (let i = 1; i <= m; i++) {
155
- dp[i * (n + 1)] = i;
156
- for (let j = 1; j <= n; j++) {
157
- const cost = a[i - 1] === b[j - 1] ? 0 : 1;
158
- dp[i * (n + 1) + j] = Math.min(
159
- dp[(i - 1) * (n + 1) + j] + 1,
160
- dp[i * (n + 1) + (j - 1)] + 1,
161
- dp[(i - 1) * (n + 1) + (j - 1)] + cost
162
- );
163
- }
164
- }
165
- return dp[m * (n + 1) + n];
166
- }
167
-
168
- // core/search/highlight.js
169
- function highlightHtml(text, query) {
170
- const raw = String(text || "");
171
- const q = String(query || "").trim();
172
- if (!q || q.length < 2) return escapeHtml(raw);
173
- const lower = raw.toLowerCase();
174
- const ql = q.toLowerCase();
175
- let start = lower.indexOf(ql);
176
- let len = q.length;
177
- if (start === -1) {
178
- start = fuzzySubsequenceIndex(lower, ql);
179
- if (start === -1) return escapeHtml(raw);
180
- len = Math.min(q.length, raw.length - start);
181
- }
182
- return escapeHtml(raw.slice(0, start)) + '<mark class="velin-search-hit">' + escapeHtml(raw.slice(start, start + len)) + "</mark>" + escapeHtml(raw.slice(start + len));
183
- }
184
- function escapeHtml(s) {
185
- return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
186
- }
187
- function fuzzySubsequenceIndex(haystack, needle) {
188
- let j = 0;
189
- let start = -1;
190
- for (let i = 0; i < haystack.length && j < needle.length; i++) {
191
- if (haystack[i] === needle[j]) {
192
- if (j === 0) start = i;
193
- j++;
194
- }
195
- }
196
- return j === needle.length ? start : -1;
197
- }
198
-
199
- // core/search/docs-url.js
200
- var DOCS_MOUNT = "/docs/";
201
- var DOC_ROOT_SEGMENTS = /* @__PURE__ */ new Set([
202
- "getting-started",
203
- "extend",
204
- "guides",
205
- "utilities",
206
- "components",
207
- "forms",
208
- "layout",
209
- "content",
210
- "customize",
211
- "animations",
212
- "about",
213
- "helpers",
214
- "generated",
215
- "migration"
216
- ]);
217
- function getDocsBaseUrl() {
218
- if (typeof document === "undefined") {
219
- return "https://example.invalid/docs/";
220
- }
221
- const script = document.querySelector('script[src*="doc-search"]');
222
- if (script?.src) {
223
- const u = new URL(script.src);
224
- const i = u.pathname.indexOf(DOCS_MOUNT);
225
- if (i !== -1) {
226
- return u.origin + u.pathname.slice(0, i + DOCS_MOUNT.length);
227
- }
228
- }
229
- const path = window.location.pathname.replace(/\\/g, "/");
230
- const idx = path.indexOf(DOCS_MOUNT);
231
- if (idx >= 0) {
232
- return new URL(path.slice(0, idx + DOCS_MOUNT.length), window.location.origin).href;
233
- }
234
- return new URL("./", window.location.href).href;
235
- }
236
- function splitUrlHash(url) {
237
- const i = url.indexOf("#");
238
- if (i === -1) return { path: url, hash: "" };
239
- return { path: url.slice(0, i), hash: url.slice(i) };
240
- }
241
- function relativizeDocsPathname(pathname) {
242
- const docsIdx = pathname.indexOf(DOCS_MOUNT);
243
- if (docsIdx < 0) return null;
244
- const rest = pathname.slice(docsIdx + DOCS_MOUNT.length);
245
- const parts = rest.split("/").filter(Boolean);
246
- if (parts.length >= 2 && DOC_ROOT_SEGMENTS.has(parts[0]) && DOC_ROOT_SEGMENTS.has(parts[1]) && parts[0] !== parts[1]) {
247
- return parts.slice(1).join("/");
248
- }
249
- return rest;
250
- }
251
- function resolveDocsSearchUrl(url) {
252
- if (!url || url === "#") return "";
253
- if (typeof window === "undefined") return url;
254
- const { path, hash } = splitUrlHash(url);
255
- if (!path) return hash || "";
256
- let rel = path;
257
- if (/^https?:\/\//i.test(path)) {
258
- try {
259
- const fixed = relativizeDocsPathname(new URL(path).pathname);
260
- rel = fixed ?? path;
261
- } catch {
262
- return "";
263
- }
264
- }
265
- try {
266
- const target = new URL(rel || "", getDocsBaseUrl());
267
- return target.href + (hash && !target.href.includes("#") ? hash : "");
268
- } catch {
269
- return "";
270
- }
271
- }
272
-
273
- // core/search/index.js
274
- var defaultEngine = new VelinSearchEngine();
275
- function parseIndexPayload(data) {
276
- if (Array.isArray(data)) return data;
277
- if (data && Array.isArray(data.entries)) return data.entries;
278
- return [];
279
- }
280
- function createSearch(config = {}) {
281
- const engine = new VelinSearchEngine();
282
- const wantWorker = config.worker === true;
283
- let workerClient = null;
284
- async function getWorker() {
285
- if (!wantWorker || workerClient) return workerClient;
286
- if (typeof Worker === "undefined") return null;
287
- const { createSearchWorker } = await import("./worker-client-R6DBYPFT.js");
288
- workerClient = createSearchWorker(config.workerUrl);
289
- return workerClient;
290
- }
291
- return {
292
- engine,
293
- async loadIndex(source) {
294
- let entries = [];
295
- if (typeof source === "string") {
296
- const res = await fetch(source);
297
- entries = parseIndexPayload(await res.json());
298
- } else if (Array.isArray(source)) {
299
- entries = source;
300
- }
301
- engine.setEntries(entries);
302
- const w = await getWorker();
303
- if (w) await w.setEntries(engine._entries);
304
- return entries.length;
305
- },
306
- async query(q, opts) {
307
- const w = await getWorker();
308
- if (w) return w.query(q, opts);
309
- return engine.query(q, opts);
310
- },
311
- addEntries(entries) {
312
- engine.addEntries(entries);
313
- void getWorker().then((w) => w?.setEntries(engine._entries));
314
- }
315
- };
316
- }
317
-
318
- // components/velin-search.js
319
- var CATEGORY_LABELS = {
320
- docs: "Documentation",
321
- components: "Components",
322
- api: "API",
323
- examples: "Examples"
324
- };
325
- var VelinSearch = class extends HTMLElement {
326
- static get observedAttributes() {
327
- return ["index", "categories", "min-chars", "fuzzy", "placeholder", "debounce"];
328
- }
329
- constructor() {
330
- super();
331
- this._search = createSearch();
332
- this._debounceTimer = null;
333
- this._activeIndex = -1;
334
- this._flatResults = [];
335
- this._indexLoaded = false;
336
- this._listId = `velin-search-listbox-${Math.random().toString(36).slice(2, 9)}`;
337
- this._mounted = false;
338
- }
339
- connectedCallback() {
340
- if (this._mounted) return;
341
- this._mounted = true;
342
- this._ensureMarkup();
343
- this._loadIndex();
344
- this._bindEvents();
345
- }
346
- disconnectedCallback() {
347
- this._teardown?.();
348
- this._mounted = false;
349
- }
350
- get indexUrl() {
351
- return this.getAttribute("index") || "/search-index.json";
352
- }
353
- get minChars() {
354
- return parseInt(this.getAttribute("min-chars") || "2", 10);
355
- }
356
- get fuzzy() {
357
- const v = this.getAttribute("fuzzy");
358
- return v === null ? 0.2 : parseFloat(v) || 0;
359
- }
360
- get categories() {
361
- const raw = this.getAttribute("categories");
362
- if (!raw) return null;
363
- return raw.split(",").map((c) => c.trim()).filter((c) => SEARCH_CATEGORIES.includes(c));
364
- }
365
- get debounceMs() {
366
- return parseInt(this.getAttribute("debounce") || "120", 10);
367
- }
368
- _ensureMarkup() {
369
- if (this.querySelector("[data-velin-search-input]")) return;
370
- const ph = escapeHTMLAttribute(this.getAttribute("placeholder") || "Search\u2026");
371
- this.innerHTML = `
372
- <div class="velin-search">
373
- <div class="velin-search__field">
374
- <input type="search" class="velin-search__input" data-velin-search-input
375
- placeholder="${ph}" autocomplete="off" role="combobox" aria-expanded="false"
376
- aria-controls="${this._listId}" aria-autocomplete="list" />
377
- </div>
378
- <div class="velin-search__status velin-visually-hidden" data-velin-search-status aria-live="polite" aria-atomic="true"></div>
379
- <div class="velin-search__results" data-velin-search-results role="listbox"
380
- id="${this._listId}" hidden></div>
381
- </div>
382
- `;
383
- }
384
- _inputEl() {
385
- return this.querySelector("[data-velin-search-input]");
386
- }
387
- _resultsEl() {
388
- return this.querySelector("[data-velin-search-results]");
389
- }
390
- async _loadIndex() {
391
- try {
392
- await this._search.loadIndex(this.indexUrl);
393
- this._indexLoaded = true;
394
- } catch {
395
- this._indexLoaded = false;
396
- }
397
- }
398
- _bindEvents() {
399
- const input = this._inputEl();
400
- const panel = this._resultsEl();
401
- if (!input || !panel) return;
402
- input.addEventListener("input", () => {
403
- clearTimeout(this._debounceTimer);
404
- this._debounceTimer = setTimeout(() => this._runQuery(input.value), this.debounceMs);
405
- });
406
- input.addEventListener("focus", () => {
407
- if (input.value.trim().length >= this.minChars) this._runQuery(input.value);
408
- });
409
- input.addEventListener("keydown", (e) => this._onKeydown(e, input, panel));
410
- const onDocClick = (e) => {
411
- if (!this.contains(e.target)) this._hide(panel, input);
412
- };
413
- document.addEventListener("click", onDocClick);
414
- this._teardown = () => {
415
- document.removeEventListener("click", onDocClick);
416
- clearTimeout(this._debounceTimer);
417
- };
418
- }
419
- async _runQuery(raw) {
420
- const input = this._inputEl();
421
- const panel = this._resultsEl();
422
- if (!input || !panel) return;
423
- const q = raw.trim();
424
- if (q.length < this.minChars) {
425
- this._hide(panel, input);
426
- return;
427
- }
428
- if (!this._indexLoaded) await this._loadIndex();
429
- const { groups } = this._search.query(q, {
430
- minChars: this.minChars,
431
- fuzzy: this.fuzzy,
432
- categories: this.categories || void 0,
433
- limit: 12
434
- });
435
- this._activeIndex = -1;
436
- this._renderResults(panel, input, q, groups);
437
- if (this._flatResults.length) {
438
- panel.hidden = false;
439
- panel.classList.add("velin-search__results--open");
440
- input.setAttribute("aria-expanded", "true");
441
- } else {
442
- this._hide(panel, input);
443
- }
444
- }
445
- _renderResults(panel, input, q, groups) {
446
- panel.innerHTML = "";
447
- const order = this.categories || [...SEARCH_CATEGORIES];
448
- this._flatResults = [];
449
- let globalIdx = 0;
450
- for (const cat of order) {
451
- const items = groups[cat];
452
- if (!items?.length) continue;
453
- const groupId = `${this._listId}-group-${cat}`;
454
- const group = document.createElement("div");
455
- group.setAttribute("role", "group");
456
- group.setAttribute("aria-labelledby", groupId);
457
- const heading = document.createElement("div");
458
- heading.className = "velin-search__group-label";
459
- heading.id = groupId;
460
- heading.textContent = CATEGORY_LABELS[cat] || cat;
461
- group.appendChild(heading);
462
- for (const item of items) {
463
- const a = document.createElement("a");
464
- const navHref = resolveDocsSearchUrl(item.url);
465
- if (navHref) a.href = navHref;
466
- a.className = "velin-search__item";
467
- a.setAttribute("role", "option");
468
- a.id = `velin-search-opt-${globalIdx}`;
469
- a.innerHTML = `<span class="velin-search__title">${highlightHtml(item.title, q)}</span><span class="velin-search__excerpt">${highlightHtml(item.excerpt || "", q)}</span>`;
470
- a.addEventListener(
471
- "click",
472
- (e) => {
473
- e.preventDefault();
474
- if (navHref) window.location.assign(navHref);
475
- },
476
- true
477
- );
478
- a.addEventListener("mouseenter", () => this._setActive(globalIdx, panel, input));
479
- group.appendChild(a);
480
- this._flatResults.push(item);
481
- globalIdx++;
482
- }
483
- panel.appendChild(group);
484
- }
485
- const status = this._statusEl();
486
- if (status) {
487
- status.textContent = this._flatResults.length ? `${this._flatResults.length} results` : "No results";
488
- }
489
- }
490
- _statusEl() {
491
- return this.querySelector("[data-velin-search-status]");
492
- }
493
- _setActive(idx, panel, input) {
494
- this._activeIndex = idx;
495
- panel.querySelectorAll(".velin-search__item").forEach((el, i) => {
496
- el.classList.toggle("velin-search__item--active", i === idx);
497
- if (i === idx) {
498
- input.setAttribute("aria-activedescendant", el.id);
499
- el.scrollIntoView({ block: "nearest" });
500
- }
501
- });
502
- }
503
- _onKeydown(e, input, panel) {
504
- if (e.key === "Escape") {
505
- this._hide(panel, input);
506
- return;
507
- }
508
- if (!this._flatResults.length) return;
509
- if (e.key === "ArrowDown") {
510
- e.preventDefault();
511
- const next = this._activeIndex < this._flatResults.length - 1 ? this._activeIndex + 1 : 0;
512
- this._setActive(next, panel, input);
513
- } else if (e.key === "ArrowUp") {
514
- e.preventDefault();
515
- const prev = this._activeIndex > 0 ? this._activeIndex - 1 : this._flatResults.length - 1;
516
- this._setActive(prev, panel, input);
517
- } else if (e.key === "Enter") {
518
- const target = this._activeIndex >= 0 ? this._flatResults[this._activeIndex] : this._flatResults[0];
519
- const navHref = target?.url ? resolveDocsSearchUrl(target.url) : "";
520
- if (navHref) {
521
- e.preventDefault();
522
- window.location.assign(navHref);
523
- }
524
- }
525
- }
526
- _hide(panel, input) {
527
- panel.hidden = true;
528
- panel.classList.remove("velin-search__results--open");
529
- input.setAttribute("aria-expanded", "false");
530
- input.removeAttribute("aria-activedescendant");
531
- this._activeIndex = -1;
532
- }
533
- };
534
- var velin_search_default = VelinSearch;
535
- if (typeof HTMLElement !== "undefined" && typeof customElements !== "undefined" && !customElements.get("velin-search")) {
536
- customElements.define("velin-search", VelinSearch);
537
- }
538
- function bindDeclarativeSearch(root = document) {
539
- root.querySelectorAll("[velin-search-input]").forEach((input) => {
540
- if (input.dataset.velinSearchBound) return;
541
- input.dataset.velinSearchBound = "1";
542
- let host = input.closest("velin-search");
543
- if (!host) {
544
- host = document.createElement("velin-search");
545
- host.setAttribute("index", input.getAttribute("data-search-index") || "/search-index.json");
546
- const results = input.parentElement?.querySelector("[velin-search-results]");
547
- input.before(host);
548
- host.appendChild(input);
549
- if (results) host.appendChild(results);
550
- }
551
- });
552
- }
553
- export {
554
- bindDeclarativeSearch,
555
- velin_search_default as default
556
- };